目录

前文列表

VMware 虚拟化编程(1) — VMDK/VDDK/VixDiskLib/VADP 概念简析

VMware 虚拟化编程(2) — 虚拟磁盘文件类型详解

VMware 虚拟化编程(3) —VMware vSphere Web Service API 解析

VMware 虚拟化编程(4) — VDDK 安装

VMware 虚拟化编程(5) — VixDiskLib 虚拟磁盘库详解之一

VMware 虚拟化编程(6) — VixDiskLib 虚拟磁盘库详解之二

VMware 虚拟化编程(7) — VixDiskLib 虚拟磁盘库详解之三

VMware 虚拟化编程(8) — 多线程中的 VixDiskLib

VMware 虚拟化编程(9) — VMware 虚拟机的快照

VMware 虚拟化编程(10) — VMware 数据块修改跟踪技术 CBT

VMware 虚拟化编程(11) — VMware 虚拟机的全量备份与增量备份方案

vixDiskLibSample

在介绍 VDDK 时也提到过,VDDK 实际上是一系列的 C/C++ lib 库及其相关的 Docs 和 Sample 的开发工具集合。本篇主要记录 VDDK 提供的 Sample 程序的使用方法,它对于刚刚接触 VDDK 的开发者而言是非常有用的。

这些 Sample 程序代码是使用 C++ 编写的,要成功编译 Sample 程序,必须确保加载了正确的动态链接库和共享对象。在 Linux 系统,VixDiskLib 与动态链接库或者共享对象是组织在一起的,这样简化了第三方以及开源组件的打包发行。如果你按照《VMware 虚拟化编程(4) — VDDK 安装》中提供的方式进行安装,那么应该可以编译成功。当然了,每个人的环境不一样,你也可能需要进行调整。

官方给出了下列保证正确加载动态链接库的建议:

  • 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]# ls
Makefile vixDiskLibSample.cpp
[root@mickeyfan-dev disklib]# make
[root@mickeyfan-dev diskLib]# ls
Makefile vix-disklib-sample vixDiskLibSample.cpp

NOTE 1:官方建议的 Sample 安装路径为 /usr/share/doc/vmware-vix-disklib/samples/disklib

NOTE 2:某些特定的 Linux 还需要在 vixDiskLibSample.cpp 的 15 行后添加两行 include

15 #else
16 #include <stdio.h>
17 #include <string.h>

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:xx

NOTE 1:要连接到 ESXi Host,则必须指定 -host,-user,-password 等强制选项,并提供 Datastore 中的 diskPath。EXAMPLE:

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

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

./vix-diskLib-sample -info -host vc5 -user Administrator -password secret -libdir <pluginDir> -vm vmPath=<path/to/VM> "[<partition>] <VM>/<VM>.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 <vc_ip> –user <vc_username> –password <vc_password> –libdir <pluginDir> -vm moref=<vm_mof> -mode san -ssmoref <snap_mor> "[<datastore_name>] <vm_name>/<vm_vdisk_name>.vmdk"

NOTE 4:VixDiskLib_Create 不支持直接创建远程的托管磁盘,而是首先需要在创建一个本地磁盘,然后使用 VixDiskLib_Clone 将本地磁盘克隆并转换为托管磁盘。EXAPMLE:

./vix-disklib-sample -create -cap 1024 virtdisk.vmdk
./vix-disklib-sample -clone virtdisk.vmdk –host <vc_ip> –user <vc_username> –password <vc_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 ssl
import OpenSSL ip = '192.168.10.241'
port = 443
addr = (ip, port) pem = ssl.get_server_certificate(addr)
print OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, pem).digest(''
sha1')
$ python get_thumb.py
D3: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 vim
from pyVim.connect import SmartConnect, Disconnect
import atexit import ssl
ssl._create_default_https_context = ssl._create_unverified_context def 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 obj def 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 thing
if __name__ == "__main__":
main()
$ python get_vm_mor.py
73

需要注意的是,如果执行上述指令出现下述异常,那么你就需要升级你的 Python 版本至 >= 2.7.9 了。

python URLError: <urlopen error [Errno 8] _ssl.c:510: EOF occurred in violation of protocol>

VMware 虚拟化编程(12) — VixDiskLib Sample 程序使用的更多相关文章

  1. VMware 虚拟化编程(7) — VixDiskLib 虚拟磁盘库详解之三

    目录 目录 前文列表 VixDiskLib 虚拟磁盘库 VixDiskLib_GetMetadataKeys VixDiskLib_ReadMetadata 获取虚拟磁盘元数据 VixDiskLib_ ...

  2. VMware 虚拟化编程(6) — VixDiskLib 虚拟磁盘库详解之二

    目录 目录 前文列表 VixDiskLib 虚拟磁盘库 VixDiskLib_Open 打开 VMDK File VixDiskLib_Read 读取 VMDK File 数据 VixDiskLib_ ...

  3. VMware 虚拟化编程(5) — VixDiskLib 虚拟磁盘库详解之一

    目录 目录 前文列表 VixDiskLib 虚拟磁盘库 虚拟磁盘数据的传输方式 Transport Methods VixDiskLib_ListTransportModes 枚举支持的传输模式 Vi ...

  4. VMware 虚拟化编程(15) — VMware 虚拟机的恢复方案设计

    目录 目录 前文列表 将已存在的虚拟机恢复到指定时间点 恢复为新建虚拟机 灾难恢复 恢复细节 恢复增量备份数据 以 RDM 的方式创建虚拟磁盘 创建虚拟机 Sample of VirtualMachi ...

  5. VMware 虚拟化编程(14) — VDDK 的高级传输模式详解

    目录 目录 前文列表 虚拟磁盘数据的传输方式 Transport Methods Local File Access NBD and NBDSSL Transport SAN Transport Ho ...

  6. VMware 虚拟化编程(13) — VMware 虚拟机的备份方案设计

    目录 目录 前文列表 备份思路 备份算法 备份细节 连接到 vCenter 还是 ESXi 如何选择快照类型 是否开启 CBT 如何获取备份数据 如何提高备份数据的传输率 备份厚置备磁盘和精简置备磁盘 ...

  7. VMware 虚拟化编程(8) — 多线程中的 VixDiskLib

    目录 目录 前文列表 多线程注意事项 多线程中的 VixDiskLib 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/VADP 概念简析 VMware 虚拟化 ...

  8. VMware 虚拟化编程(10) — VMware 数据块修改跟踪技术 CBT

    目录 目录 前文列表 数据块修改跟踪技术 CBT 为虚拟机开启 CBT CBT 修改数据块偏移量获取函数 QueryChangedDiskAreas changeId 一个 QueryChangedD ...

  9. VMware 虚拟化编程(9) — VMware 虚拟机的快照

    目录 目录 前文列表 VMware 虚拟机的快照 快照的执行过程 删除快照 快照类型 Quiseced Snapshot 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDis ...

随机推荐

  1. Hbase0.96源码之HMaster(三)Hmaster主要循环

    1.Master初始化 1.1 if (!this.stopped) { finishInitialization(startupStatus, false); loop(); } 1.2 finis ...

  2. 剑指offer-二叉树中和为某一值的路径-python

    题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...

  3. ThinkPHP视图css和js加上版本号防止缓存

    前台模块中,我的所有控制器都继承BaseController,虽然ThinkPHP中我们提供了两个配置项 'TMPL_CACHE_ON' => false,// 禁止模板编译缓存 'HTML_C ...

  4. todo JVM笔记

    之前给自己定了很多计划,要学Dubbo,Netty,SSHM源码,Tomcat源码...这些基本浅尝辄止,很难继续研读,过不了多久就忘了. 觉得还是基础不够,所以决定把<JVM>.< ...

  5. RSA 非对称加密算法简述

    RSA概述 首先看这个加密算法的命名.很有意思,它其实是三个人的名字.早在1977年由麻省理工学院的三位数学家Rivest.Shamir 和 Adleman一起提出了这个加密算法,并且用他们三个人姓氏 ...

  6. 一份贴近真实面试的Java面试题(基础部分)

    这是一份关于Java基础的面试题.在网上的关于Java的面试题数不胜数,但本人认真看过后觉得大多数都没有实用性,有很多是面试官根本就不会问到的,企业根本不会用到的,一些已经脱离了实际开发的技术问题.而 ...

  7. listalias - 列出用户和系统别名

    总揽 listalias [ -s | -u ] [ 正则表达式] 描述 Listalias 按用户及系统别名每个输出一行.每行具有下列格式: <别名> <地址> (<注 ...

  8. fpga ip

    原文地址:altera FIR ip核 license破解作者:王永刚Aether 在证书文件中添加一段: FEATURE 6AF7_0012 alterad 2035.12 permanent un ...

  9. AlertDialog用法。

    AlertDialog 可以在当前的界面弹出一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此一般 AlertDialog 都是用于提示一些非常重要的内容或者警告信息 ...

  10. Vscode中解决Html文件中不能打断点问题

    Vscode中解决Html文件中不能打断点问题: 默认情况下,VSCode是不能在Html文件里打断点的,但是可以修改设置,依次打开:文件->首选项->设置,然后功能->调试-> ...