closed
logo logo
关于我们

技术分享

技术分享 VMware虚拟化容灾备份编程

VMware虚拟化容灾备份编程

2018-03-21



一、Sample程序的使用方法

使用方法:VIXDISKLIBSAMPLE COMMAND [OPTIONS] DISKPATH

1、指令

  • -create:创建由 -cap 选项指定容量大小的稀疏类型虚拟磁盘「diskPath」

  • -redo parentPath:为父虚拟磁盘「parentPath」创建一个子(重写日志)虚拟磁盘「diskPath」

  • -info:显示指定虚拟磁盘「diskPath」的信息

  • -dump:以十六进制的方式显示指定范围内的扇区内容

  • -fill:使用 -val 选项指定的值来填充指定范围内的虚拟磁盘扇区

  • -wmeta key value:将键值对(key, value)写入指定虚拟磁盘「diskPath」的元数据表中


    • rmeta key:显示元数据表中指定 key 对应的 value

  • -meta:显示虚拟磁盘元数据表中所有的项

  • -clone sourcePath:将源 VMDK 克隆到指定的远程站点

  • -readbench blocksize:使用指定的 I/O blocksize (以扇区为单位),在虚拟磁盘上读取标签。

  • -writebench blocksize:使用指定的 I/O blocksize (以扇区为单位),在虚拟磁盘上写入标签。警告:这可能会覆盖磁盘上原有的数据

2、选项

  • -adapter [ide|scsi]:在「-create」指令时,指定总线 bus 的类型,默认为 scsi 类型

  • -start n:在「dump | fill」指令时,指定开始扇区,默认为 0

  • -count n:在「dump | fill」指令时,指定扇区数量,默认为 1

  • -val byte:在「fill」指令时,指定用于填充的字节,默认为 255

  • -cap megabytes:在「-create」指令时,指定容量的大小(MB),默认为 100

  • -single:打开虚拟机的单个磁盘链接而非全部磁盘链接(不指定该选项默认打开全部磁盘链接),仅支持本地磁盘,不支持远程托管磁盘。

  • -multithread n:开启 n 个线程,并将指定文件拷贝到 n 个新文件中

  • -host hostname:VC/vSphere 的 hostname/IP (强制项)

  • -user userid:host 的 username (强制项)

  • -password password:host 的 password (强制项)

  • -port port:用于连接 VC/ESXi host 的端口,默认是 443

  • nfchostport port:使用 NFC 连接到 ESXi host 的端口,默认 902

  • -vm moref=id:虚拟机的托管对应引用

  • -libdir dir:VDDK lib 库的安装路径

  • -initex configfile:配置文件的路径或文件名

  • -ssmoref moref:虚拟机快照的托管对象引用

  • -mode mode:传递给 VixDiskLib_ConnectEx 函数的传输模式字符串,有效的模式为:nbd, nbdssl, san, hotadd

  • -thumb stirng:SSL 指纹验证字符串,格式为:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

3、示例

要用例程连接到ESXI主机,必须指定选项-host、-user、-password,并在ESXI主机的数据存储(Datastore)上提供磁盘路径(diskPath)。例如:

vix-diskLib-sample -info -host esx5 -user root -password secret "[datastore1] <VM>/<VM>.vmdk"

如果要连接到 vCenter Server,还需要指定 -libdir 和 -vm 选项,DiskLibPlugin 需要通过这两个选项来连接到 vCenter Server 并定位到指定 VM。例如:

vix-diskLib-sample -info -host vc5 -user Administrator -password secret -libdir <pluginDir> -vm vmPath=<path/to/VM> "[<partition>] <VM>/<VM>.vmdk"

vmPath是在vSphere Client里由vCenter为首,并在虚拟机名称前插入/vm/构成。可以通过vCenter Server中 Edit Setting > Hard Disk 并复制Disk File名称来确定diskPath。

vix-disklib-sample -info -host vc5 -user Administrator -password secret -libdir /usr/lib/vmware-vix-disklib/lib64 -vm vmPath=Datacenter/vm/RHEL5 "[datastore1] RHEL5/RHEL5.vmdk"

如果希望使用高级传输进行连接,就必须指定 -mode 和 -ssmoref 选项。这两个选择的值会被传递到 VixDiskLib_ConnectEx。要找到 ssmoref,可以登录到vCenter Server的托管对象浏览器,然后单击Content > rootFolder > Datacenter > datastore > VM > snapshot。注意,虚拟机的快照必须存在,因为打开正在运行的虚拟机的 bask disk 是非常危险的。例如:

vix-disklib-sample -info -host vc5 -user Administrator -password secret -mode san -libdir /usr/lib/vmware-vix-disklib/lib64 -vm vmPath=Datacenter/vm/RHEL5  -ssmoref snapshot-72 "[datastore1] RHEL5/RHEL5.vmdk"

如果希望测试 vCenter/ESX(i) 的读写性能可以应用 -readbench/writebench 选项,注意需要关闭虚拟机电源后执行。

./vix-disklib-sample -readbench 40960 -host 192.168.10.103 -user root -password sysadmin -initex /usr/etc/vddk.conf -thumb 'D9:7A:E8:E3:D2:75:0B:23:EF:7C:44:91:BD:C5:6F:15:4B:7B:EA:0B' "[datastore1 (1)] eDR-CentOS7_1/eDR-CentOS7-000006.vmdk"

二、代码

其中如果使用了 SSL 的连接方式,那么你必须提供 vCenter/ESX(i) 的指纹或者虚拟机的 managed object reference 信息,下列两个小脚本能够获取这些信息。

func get_obj(ctx context.Context, client govmomi.Client, name string, vmname string) {
    rootfolder := client.Client.ServiceContent.RootFolder
    m := view.NewManager(client.Client)
    v, err := m.CreateContainerView(ctx, rootfolder, []string{name}, true)
    if err != nil {
        panic(err)
    }
    defer v.Destroy(ctx)
 
    var vms []mo.VirtualMachine
    err = v.Retrieve(ctx, []string{name}, []string{"summary"}, &vms)
    if err != nil {
        panic(err)
    }
    for _, vm := range vms {
        // 判断虚拟机名称是否相同,相同的话,vm 就是查找到主机
        if vm.Summary.Config.Name == vmname {
            fmt.Printf("Name: %s \nMoRef: %s\n", vm.Summary.Config.Name, vm.Reference().Value)
            break
        }
    }
 }
 func main() {
    input := bufio.NewScanner(os.Stdin)
    input.Scan()
    vmname := input.Text()
 
    u := &url.URL{
        Scheme: "https",
        Host:    ip,
        Path:    "/sdk",
    }
    ctx := context.Background()
    u.User = url.UserPassword(user, password)
    client, err := govmomi.NewClient(ctx, u, true)
    if err != nil {
        panic(err)
    }
    //fmt.Println(client)
 
    get_obj(ctx, *client, "VirtualMachine", vmname)
 
     
    //print(vm)}
echo -n | openssl s_client -connect xxx.xxx.xxx.xxx:xxx 2>/dev/null | openssl x509 -noout -fingerprint -sha1 | cut -d '=' -f 2
                                   
云祺备份软件,云祺容灾备份系统,虚拟机备份,数据库备份,文件备份,实时备份,勒索软件,美国,图书馆
  • 标签:
  • 容灾备份

您可能感兴趣的新闻 换一批

现在下载,可享30天免费试用

立即下载

请添加好友为您提供支持
jia7jia_7

请拨打电话
为您提供支持

400-9955-698