VMware虚拟磁盘编程指导(一)

最近在看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,并计划将它分发哪些产品上,公司的名称,以及你的联系信息。

时间: 2024-11-03 05:30:18

VMware虚拟磁盘编程指导(一)的相关文章

VMware虚拟磁盘编程指导(三)

3 虚拟磁盘接口 VMWare提供磁盘布局选项,这里将要讨论动态库中封装的数据结构. VMDK文件位置 在ESX/ESXi主机上,虚拟机磁盘(VMDK)文件通常存放在共享存储设备的某个/vmfs/volumes中.在vSphere Client上,可以从主机和簇的库中查看存储卷,它们的名字通常是datastore1,datastore2.如果要查看VMDK文件,选择通用(Summary)>资源(Resources)> 数据存储(Datastore),右键点击"浏览数据存储(Brows

Flink Program Guide (2) -- DataStream API编程指导 -- For Java

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} 张安 张安 2 1 2016-08-02T10:56:00Z 2016-08-02T10:56:00Z 1 2945 16790 139 39 19696 16.00 false false false false

CUDA C 编程指导(一):CUDA介绍

虽然高清实时的3D图像/视频要求日益不能满足市场需求,但是可编程的图像处理单元(GPU)已经演变成具有巨大计算能力和超高存储带宽的高度并行.多线程的多核处理器,如下图, CPU和GPU之间的浮点性能差异的原因是:GPU专门为密集型计算.高度并行计算设计(例如,图像渲染),因此此类设计需要更多的晶体三极管来进行数据处理而不是数据缓存和流程控制,其区别如下图所示, 更具体地说,GPU更适合处理数据并行计算,很多数据并行执行,计算强度高,即对内存操作的算术操作比率高.因为相同的程序用来执行每个数据元素

CUDA C 编程指导(二):CUDA编程模型详解

CUDA编程模型详解 本文以vectorAdd为例,通过描述C在CUDA中的使用(vectorAdd这个例子可以在CUDA sample中找到.)来介绍CUDA编程模型的主要概念.CUDA C的进一步描述可以参考<Programming Interface>. 主要内容包括: 1.Kernels(核函数) 2.Thread Hierarchy(线程结构) 3.Memory Hierarchy(存储结构) 4.Heterogeneous Programming(异构编程) 5.Compute C

VxWorks 6.9 内核编程指导之读书笔记 -- ISRs和Watchdog Timer

中断服务程序 ISR 硬件中断处理是实时系统的关键,因为它是外部时间通知系统的方式. ISR亦称为中断处理函数,是对中断的正确响应.可以使用任何ISR连接到任何没有被VxWorks使用的中断上.当关联的中断发生时,VxWorks运行ISR:ISR的处理不会延迟,除非你配置系统去延迟. VxWorks的ISR配置 默认支持ISR.但是,中断栈和额外特征可以被配置.此外,ISR的延迟支持和显示函数支持可以被增加到系统. 配置中断栈 所有中断使用相同的中断栈.栈在系统启动时更加配置参数来分配和初始化.

Flink Program Guide (5) -- 预定义的Timestamp Extractor / Watermark Emitter (DataStream API编程指导 -- For Java)

本文翻译自Pre-defined Timestamp Extractors / Watermark Emitter ------------------------------------------------------------------------------------------ 正如timestamps and watermark handling中所述,Flink提供了抽象类来让开发者赋值自己的时间戳并发送他们自己的Watermark.更具体来说,开发者需要依照不同用例情况来

Flink Program Guide (3) -- Event Time (DataStream API编程指导 -- For Java)

Event Time 本文翻译自DataStream API Docs v1.2的Event Time ------------------------------------------------------- 一.事件时间 / 处理时间 / 提取时间 Flink支持流程序不同的time概念. ·        Processing time:处理时间指执行对应Operation的设备的系统时间. 当一个流程序以处理时间运行,所有基于时间的operation(如time窗口)将使用运行对应O

Flink Program Guide (6) -- 窗口 (DataStream API编程指导 -- For Java)

窗口(Window) 本文翻译自文档Windows ----------------------------------- Flink使用窗口的概念,根据element的时间戳或者其他指标,将可能无限的DataStream分割为有限的数据切片(slice).我们在处理无限数据流以及进行聚合element的transformation时需要此种窗口分割. 注意:我们在此文档中讨论的大多是keyed windowing,即window是应用在KeyedStream上的.关键字下的窗口具有一定的优势,

Apple Pay编程指导

1.About Apple PayApple Pay是一种移动支付技术,让使用者把它们对真实的物品和服务的支付信息以一种方便和安全的方式给你. 对于在app中给出的数字物品和服务,可查看In-App Purchase Programming Guide. Working with Apple Pay使用Apple Pay功能的Apps需要在Xcode 中开启Apple Pay capabilities.也需要注册一个商家标识并设置密钥(用来加密发送支付数据给服务器). 初始化支付时,app创建一