最近在看VMware相关的东西,由于需要对ESX/ESXi远程主机上的虚拟机进行备份,所以下载了《Virutal Disk Program Guide》(虚拟磁盘编程指导),里面讲解了虚拟磁盘的基本概念、API函数、备份还原等,但由于是英文的,没有中文版,所以起初看起来有点困难。自从去年看过一遍后,感觉没有多么深刻的概念,所以现在回过头来再看一次,为了加深自己的理解,我采用一边看一边翻译的方式。现在将自己陆陆续续翻译的内容和大家分享,其中有很多自己也不敢肯定的翻译,我一般在后面附上英文原文,还望大家多多指点。请注意,这只是本人随笔翻译的内容,如果需要深入的研究,建议还是看英文原版的。
关于这本书
VMwareVirtual Disk Programming Guide 介绍了虚拟磁盘开发接口(VDDK)以及vShpere存储API的数据保护部分(VADP)。VDDK描述了如何使用虚拟磁盘库开发软件,虚拟磁盘库提供了管理虚拟磁盘的系统调用接口,而VADP则描述了如何针对vShpere开发备份和还原软件。
如果需要查看这本书的早期版本或者其他VMware API以及SDK文档,请访问:
http://www.vmware.com/support/pubs/sdk_pubs.html
修改历史
表1简单描述本书的历史版本中的修改内容。
目标读者
这本书适合创建管理虚拟磁盘应用程序的开发者,尤其是开发备份、还原程序的开发者,并假设对C和C++编程有一定的了解。如果涉及VADP开发,还需要了解Java。
支持的平台产品
你可以使用Windows或Linux开发VDDK程序,在VMWare工作站、ESXi主机或vSphere上进行测试。如果要开发、测试VADP程序,你还想要一个vCenter Server或ESXi主机,并且需要Java的基础。
文档反馈
VMware欢迎您提供建议帮助我们改善开发文档。请将您的反馈发送到[email protected]。
1 虚拟磁盘接口简介
虚拟磁盘接口(VDDK)用来帮助开发者创建应用程序访问虚拟机的存储设备。本章介绍的VDDK开发包以虚拟磁盘接口为基础。
VMware数据保护存储接口(VADP)使用虚拟磁盘接口以及一部分vSphere接口,对运行在ESXi主机上的虚拟机创建快照,然后进行完全或增量备份。
关于虚拟磁盘接口
虚拟磁盘接口,VixDiskLib,包含一组管理VMDK格式文件的函数调用。函数调用使用C语言的文件I/O系统调用(Function call semantics are patternedafter C system calls for file I/O)。使用虚拟磁盘接口,你可以在你的软件中编写程序直接访问VMDK文件。
这些库函数能够操作VMware工作站上的虚拟磁盘,或其他类似产品上的虚拟磁盘(如宿主磁盘,hosted disk),以及ESX/ESXi主机的VMFS卷上虚拟磁盘(managed disk)。Hosted表示虚拟平台上寄宿了一个客户机操作系统,如Windows或Linux(Hosted is a term indicatingthat the virtualization platform is hosted by a guest operation system such asWindows or Linux)。
VDDK可以安装在Windows或Linux上,所以你可以使用任何一个系统编写VDDK或VADP应用。应用程序可以操作任何操作系统上的虚拟磁盘,只要上面运行了支持的VMware平台产品。你可以通过签署一份分发协议,将VDDK库打包进你的软件应用中。如果要了解更多关于支持的平台产品以及开发系统的信息,请查看VDDK发布说明。
使用VDDK和VADP,还可以开发应用程序,通过中心控制器(central location)有效地操作多个虚拟磁盘。
VDDK组件
虚拟磁盘开发文档包括以下内容:
1. 虚拟盘库,一组管理VMDK文件的C函数调用。
2. 磁盘挂载库,一组远程挂载VMDK文件系统的C函数调用。
3. C++示例代码,可以使用Visual Studio和GNU C编译。
4. PDF手册和在线HTML帮助
虚拟磁盘库(Virtual Disk Library)
VixDiskLib是一个单独的封装库,帮助开发者设计集成VMware平台产品的解决方案。虚拟磁盘库包括以下内容:
1. 允许程序创建、转换、扩展、整理(defragment)、压缩、重命名虚拟磁盘文件。
2. 创建重写日志(父子磁盘链,或差异),删除VMDK文件。(create redo logs(parent-childdisk chaining, or deltas) can delete VMDK files.)
3. 允许随机读写VMDK文件上任何位置的数据,并读取元数据(metadata)。
4. 使用高级传输方式(SAN或HotAdd)连接远程vSphere存储。
在Windows上,虚拟磁盘内核驱动是64位的,用户库可以是32位的,因为64位Windows可以运行32为程序。VMware仅提供64位的二进制库。
磁盘挂载库(Disk Mount Library)
虚拟磁盘挂载库,vixMntapi,运行程序以挂载磁盘分区的方式访问虚拟磁盘。更多信息请查看附录A,“虚拟磁盘挂载API”。vixMntapi库和vixDiskLib库一起放在同一个包中。
虚拟磁盘工具(Virtual Disk Utilities)
虚拟磁盘开发接口包中有两个命令行工具,用来管理虚拟磁盘文件:磁盘挂载和虚拟磁盘管理。它们的最新版本在VDDK 5.0中。更多信息请查看网站上的磁盘挂载和虚拟磁盘管理用户手册。
vSphere备份还原
VMware存储API——数据保护(VADP)包含一组API,用于开发或扩展备份软件,保护VMWare数据中心中ESX/ESXi主机上的虚拟机。更多信息,请查看第7章,“设计vSphere备份方案”。
vCloud Director备份设计
VMware vCloud中,vCloud Director自带服务提供了三级数据保护。备份程序可以提供系统级、中间层、用户级的vApp保护(Backup providers can offer vAppprotection at system level, the tenant level, or the end-user level)。更多关于vCloud数据保护的信息,请查看“Backup Design for vCloud TenantvApps”。
虚拟磁盘库的用例(Use Cases for the Virtual Disk Library)
VDDK能够访问虚拟磁盘,并允许以下操作:
1. 备份虚拟机的单个指定卷或所有卷。
2. 将备份代理连接到vSphere,备份存储簇上的所有虚拟机。
3. 读取虚拟磁盘,运行离线的虚拟机病毒扫描,数据分析。
4. 写入虚拟磁盘,执行虚拟机的离线统一补丁(perform off-linecentralized patching)。
5. 管理虚拟磁盘的整理、扩展、转换、重命名、压缩文件系统镜像。
6. 对中毒和被破坏的离线虚拟机进行数据恢复或病毒清除。
VMware平台产品的开发(Developingfor VMware Platform Products)
在VMware的数据中心上,商业备份软件通常通过备份代理远程访问虚拟磁盘。备份代理可以是安装了备份软件的虚拟机或物理机。
在一个备份时间点上,备份软件通常做以下操作:
1. 对一个簇中虚拟机创建快照(一个一个的,或并行的)。
2. 拷贝VMDK文件到备份媒体,或者增量备份时只拷贝发生改变的块。
3. 记录虚拟机配置。
4. 删除快照(作为静态的虚拟机)。
在上面的过程中,虚拟磁盘库只用于第二步。其他过程使用一部分vSphere接口(VADP)来创建快照并保存虚拟机配置。簇中虚拟磁盘是由vSphere管理的。
托管磁盘和寄宿磁盘(Managed Disk and Hosted Disk)
和硬盘驱动器类似,虚拟磁盘文件呈现虚拟机的存储卷,每个文件都以”.vmdk“后缀命名。在运行VMware工作站的系统上,每个客户机系统(guest OS)的文件系统都保持在VMDK文件中,他们存放在宿主系统的物理磁盘上。VMDK文件可以在宿主系统上直接访问。
ESX/ESXi主机上虚拟机文件系统VMFS上,VMDK文件同样作为虚拟机的存储卷,它们通常存放在簇中共享的存储上。vCenter管理这些存储簇,它能够在ESX/ESXi主机之间迁移虚拟机而不需要移动VMDK文件。VMFS存储也叫作托管磁盘。
VMFS磁盘可以存放在通过光纤通道、iSCSI、SAS连接到ESX/ESXi主机的存储网络(SAN)上,也可以存储在网络挂载存储(NAS)或直接挂载的磁盘上。
图1-1描述了托管磁盘(VMFS文件系统上的VMDK)和本地磁盘(物理磁盘上VMDK)。
VMDK支持两种类型的磁盘(Managed and Hosted Disk),但是一些函数不支持托管磁盘,而另外一些功能不支持寄宿磁盘。文档中将提到这些区别。
高级传输模式(Advanced Transports)
对于托管磁盘,VDDK应用程序可以利用高级传输通过SAN而不是LAN来执行大多数I/O操作,这会提高程序性能,并保护网络带宽。
VDDK和VADP笔记
虚拟磁盘开发包(VDDK)包含一系列的C函数库,用于操作虚拟磁盘(VixDiskLib)和挂载虚拟磁盘分区(VixMntApi)。VDDK主要关注有效地访问并传输虚拟磁盘数据。
用于数据保护的vSphere存储接口(VADP)是vShpere API的一个子集,用于开发备份和还原应用。基于快照的VADP框架允许有效、非主机(off-host)、中央控制的(centralized)虚拟机备份。快照创建后,虚拟磁盘变为静默状态(quiesce),软件可以使用VDDK库函数进行备份。
vSphere是基于XML的Web服务(Web Service),为vCenter服务器管理运行在ESX/ESXi主机上的虚拟机提供了接口。
开发需要结合VDDK和VADP来编写数据保护软件。VADP将会在第7章,“开发vSphere备份解决方案”中讲到。
平台产品兼容(Platform Product Compatibility)
为了支持最新的vSphere版本,你应该使用最新的VDDK来重新编译并更新你的软件,因为VDDK会持续更新以便能够支持vSphere中的新功能。比如5.0,VDDK的版本号对应了vSphere的版本号。
从2008年开始,VDDK已经向后兼容了多个VMware平台的产品,如工作站,ESX/ESXi 3.5,VitualCenter2.5(现在的vCenter Server),但是从没有支持VMware Fusion。VDDK将不会在工作站上进行测试,但是工作站可以作为一个良好的开发平台。
分发VDDK组件(Redistributing VDD Componnents)
当你使用VDDK开发完软件应用之后,你可能需要重新打包编译进你的软件的二进制库。
要拥有VDDK分发的资格,你必须在VMware TAP项目中具有Select或更高级别,并且签署一份分发协议。可以联系你的VMware合作经理,以获取VDDK分发协议。VMware需要知道你如何使用VDDK,并计划将它分发哪些产品上,公司的名称,以及你的联系信息。