本文共 5601 字,大约阅读时间需要 18 分钟。
目录
前文列表
vixDiskLibSample
在介绍 VDDK 时也提到过,VDDK 实际上是一系列的 C/C++ lib 库及其相关的 Docs 和 Sample 的开发工具集合。本篇主要记录 VDDK 提供的 Sample 程序的使用方法,它对于刚刚接触 VDDK 的开发者而言是非常有用的。
这些 Sample 程序代码是使用 C++ 编写的,要成功编译 Sample 程序,必须确保加载了正确的动态链接库和共享对象。在 Linux 系统,VixDiskLib 与动态链接库或者共享对象是组织在一起的,这样简化了第三方以及开源组件的打包发行。如果你按照中提供的方式进行安装,那么应该可以编译成功。当然了,每个人的环境不一样,你也可能需要进行调整。
官方给出了下列保证正确加载动态链接库的建议:
- Linux 默认的安装路径为 /usr/share/doc/vmware-vix-disklib/sample
- 在 VDDK 程序中设置路径
- 将 VDDK lib 库的路径加入到环境变量
NOTE:需要注意的是,VDDK 使用相对路径来加载动态链接库文件,而非绝对路径,应该要注意避免不同版本动态链接库的冲突。
安装 Sample 程序
在安装好 VDDK 之后,直接编译 Sample 程序:
[root@mickeyfan-dev diskLib]# cd /usr/lib/vmware-vix-disklib/doc/samples/diskLib[root@mickeyfan-dev diskLib]# lsMakefile vixDiskLibSample.cpp[root@mickeyfan-dev disklib]# make[root@mickeyfan-dev diskLib]# lsMakefile vix-disklib-sample vixDiskLibSample.cpp
NOTE 1:官方建议的 Sample 安装路径为 /usr/share/doc/vmware-vix-disklib/samples/disklib
NOTE 2:某些特定的 Linux 还需要在 vixDiskLibSample.cpp 的 15 行后添加两行 include
15 #else16 #include17 #include
NOTE 3:如果编译失败建议进行以下尝试
- 将
/usr/lib/vmware-vix-disklib/lib64
添加到 /etc/ld.so.conf.d/vmware-vix-disklib.conf 文件中,然后使用 root 权限运行 ldconfig 指令 - 添加或编辑环境变量
LD_LIBRARY_PATH=/usr/lib/vmware-vix-disklib/lib64
Sample 程序使用方法
使用方法:vixdisklibsample command [options] diskPath
指令:
- -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 (以扇区为单位),在虚拟磁盘上写入标签。警告:这可能会覆盖磁盘上原有的数据选项:
- -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:xxNOTE 1:要连接到 ESXi Host,则必须指定 -host,-user,-password 等强制选项,并提供 Datastore 中的 diskPath。EXAMPLE:
./vix-diskLib-sample -info -host esx5 -user root -password secret "[datastore1]/ .vmdk"
NOTE 2:如果要连接到 vCenter Server,还需要指定 -libdir 和 -vm 选项,DiskLibPlugin 需要通过这两个选项来连接到 vCenter Server 并定位到指定 VM。EXAMPLE:
./vix-diskLib-sample -info -host vc5 -user Administrator -password secret -libdir-vm vmPath= "[ ] / .vmdk"# e.g.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"
NOTE 3:如果希望使用高级传输进行连接,就必须指定 -mode 和 -ssmoref 选项。这两个选择的值会被传递到 VixDiskLib_ConnectEx。注意,虚拟机的快照必须存在,因为打开正在运行的虚拟机的 bask disk 是非常危险的。EXAMPLE:
./vix-disklib-sample –host–user –password –libdir -vm moref= -mode san -ssmoref "[ ] / .vmdk"
NOTE 4:VixDiskLib_Create 不支持直接创建远程的托管磁盘,而是首先需要在创建一个本地磁盘,然后使用 VixDiskLib_Clone 将本地磁盘克隆并转换为托管磁盘。EXAPMLE:
./vix-disklib-sample -create -cap 1024 virtdisk.vmdk./vix-disklib-sample -clone virtdisk.vmdk –host–user –password vmfsdisk.vmdk
NOTE 5:如果希望测试 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 信息,下列两个小脚本能够获取这些信息。
- filename: get_thumb.py
import sslimport OpenSSLip = '192.168.10.241'port = 443addr = (ip, port)pem = ssl.get_server_certificate(addr)print OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, pem).digest(''sha1')
$ python get_thumb.pyD3:85:DC:32:3D:D6:43:5D:57:90:D0:D3:A1:8A:81:44:B5:6F:9B:2A
- filename: get_vm_mor.py
from pyVmomi import vimfrom pyVim.connect import SmartConnect, Disconnectimport atexitimport sslssl._create_default_https_context = ssl._create_unverified_contextdef get_obj(content, vimtype, name): obj = None container = content.viewManager.CreateContainerView( content.rootFolder, vimtype, True) for c in container.view: if c.name == name: obj = c break return objdef main(): # connect this thing si = SmartConnect( host='192.168.10.241', user='administrator@vsphere.local', pwd='Abc999@1', port=443) # disconnect this thing atexit.register(Disconnect, si) content = si.RetrieveContent() vm_name = 'aju-dev' vm = get_obj(content, [vim.VirtualMachine], vm_name) print(vm._moId)# start this thingif __name__ == "__main__": main()
$ python get_vm_mor.py73
需要注意的是,如果执行上述指令出现下述异常,那么你就需要升级你的 Python 版本至 >= 2.7.9 了。
python URLError:
转载地址:https://is-cloud.blog.csdn.net/article/details/78309552 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!