VMware 虚拟化编程(6) — VixDiskLib 虚拟磁盘库详解之二
目录
前文列表
VMware 虚拟化编程(1) — VMDK/VDDK/VixDiskLib/VADP 概念简析
VMware 虚拟化编程(2) — 虚拟磁盘文件类型详解
VMware 虚拟化编程(3) —VMware vSphere Web Service API 解析
VMware 虚拟化编程(4) — VDDK 安装
VMware 虚拟化编程(5) — VixDiskLib 虚拟磁盘库详解之一
VixDiskLib 虚拟磁盘库
紧接上篇。
VixDiskLib_Open 打开 VMDK File
函数原型:
/**
* Opens a local or remote virtual disk.
* @param connection [in] A valid connection.
* @param path [in] VMDK file name given as absolute path
* e.g. "[storage1] MailServer/SystemDisk.vmdk"
* @param flags [in, optional] Bitwise or'ed combination of
* VIXDISKLIB_FLAG_OPEN_UNBUFFERED
* VIXDISKLIB_FLAG_OPEN_SINGLE_LINK
* VIXDISKLIB_FLAG_OPEN_READ_ONLY.
* @param diskHandle [out] Handle to opened disk, NULL if disk was not opened.
* @return VIX_OK if success, suitable VIX error code otherwise.
*/
VixError
VixDiskLib_Open(const VixDiskLibConnection connection,
const char *path,
uint32 flags,
VixDiskLibHandle *diskHandle);
函数调用:
vixError = VixDiskLib_Open(appGlobals.connection, appGlobals.diskPath, appGlobals.openFlags, &srcHandle);
是初始化并建立了与服务器的连接之后,调用 VixDiskLib_Open 即可打开本机(寄宿磁盘)或远程(托管磁盘)的 VMDK File。
需要注意的是,如果使用了 SAN 或 HotAdd 高级传输模式来建立与服务器之间的连接的话,则虚拟机需要存在至少一个 Snapshot 才能够执行 Open VMDK File 的操作。
@param connection:实际上是在调用 VixDiskLib_Connect 时 Return 的 VixDiskLibConnection 类型对象@param path:指定需要 Open 的 VMDK File 的路径,使用 vSphere 的通过路径格式[datastore] virtualmachine/vmdk_file.vmdk@param flags:可以指定下列 flags:VIXDISKLIB_FLAG_OPEN_UNBUFFERED禁用主机磁盘缓存。VIXDISKLIB_FLAG_OPEN_SINGLE_LINK打开当前磁盘链接,而不是开发整个磁盘链(仅托管磁盘)。VIXDISKLIB_FLAG_OPEN_READ_ONLY只读模式打开虚拟磁盘。
@param diskHandle:若 Open SUCCESS,则返回一个虚拟磁盘对象句柄,该句柄会在后续的 读/写/克隆/获取磁盘信息/管理磁盘元数据/伸缩磁盘 Size/磁盘碎片整理 函数调用中作为实参传入。
VixDiskLib_Read 读取 VMDK File 数据
函数原型:
/**
* Reads a sector range.
* @param diskHandle [in] Handle to an open virtual disk.
* @param startSector [in] Absolute offset.
* @param numSectors [in] Number of sectors to read.
* @param readBuffer [out] Buffer to read into.
* @return VIX_OK if success, suitable VIX error code otherwise.
*/
VixError
VixDiskLib_Read(VixDiskLibHandle diskHandle,
VixDiskLibSectorType startSector,
VixDiskLibSectorType numSectors,
uint8 *readBuffer);
函数调用:
vixError = VixDiskLib_Read(diskHandle, startSector, numSectors, &mybuffer);
@param diskHandle:为调用 VixDiskLib_Open Return 的虚拟磁盘对象句柄。@param startSector, @param numSectors:通过指定开始扇区 startSector 和扇区数量 numSectors,VixDiskLib_Read 从打开的 VMDK File 中读取一片连续的扇区数据。扇区的大小可以不同,但是在 VixDiskLib.h 头文件中已经将这个 Size 定义为 512 个字节,因为 VMDK File 的扇区大小就是 512 字节。
#define VIXDISKLIB_SECTOR_SIZE 512
@param readBuffer:是实际读取到的 VMDK File 的数据。
需要注意的是,因为每次读取的扇区 Size 通常为 512 字节,所以读取数据的完整性实际上是需要由应用程序来控制的,并不是调用一次 VixDiskLib_Read 函数就能够得到完整的 VMDK File 数据。
VixDiskLib_Write 写入数据到 VMDK File
函数原型:
/**
* Writes a sector range.
* @param diskHandle [in] Handle to an open virtual disk.
* @param startSector [in] Absolute offset.
* @param numSectors [in] Number of sectors to write.
* @param writeBuffer [in] Buffer to write.
* @return VIX_OK if success, suitable VIX error code otherwise.
*/
VixError
VixDiskLib_Write(VixDiskLibHandle diskHandle,
VixDiskLibSectorType startSector,
VixDiskLibSectorType numSectors,
const uint8 *writeBuffer);
函数调用:
VixDiskLib_Write(diskHandle, startsector, (sizeof mybuffer) / 512, mybuffer);
@param writeBuffer:该实参的长度必须是VIXDISKLIB_SECTOR_SIZE的整数倍字节。
VixDiskLib_GetInfo 获取 VMDK File 信息
函数原型:
/**
* Retrieves information about a disk.
* @param diskHandle [in] Handle to an open virtual disk.
* @param info [out] Disk information filled up.
* @return VIX_OK if success, suitable VIX error code otherwise.
*/
VixError
VixDiskLib_GetInfo(VixDiskLibHandle diskHandle,
VixDiskLibInfo **info);
函数调用:
VixError vixError = VixDiskLib_GetInfo(diskHandle, &info);
@param info:返回 VMDK File 的信息。
VixDiskLib_GetInfo 获取指定 Opened VMDK File 的下列相关信息,分配并填充 VixDiskLibDiskInfo 数据结构,其中的一部分信息会与 VMDK File Metadata 的信息相同:
- bios
- capacity
- adapterType
- links
- blocks
VixDiskLib_FreeInfo 释放 VMDK File 信息
函数原型:
/**
* Frees memory allocated in VixDiskLib_GetInfo.
* @param info [in] Disk information to be freed.
*/
void
VixDiskLib_FreeInfo(VixDiskLibInfo *info);
函数调用:
vixError = VixDiskLib_FreeInfo(diskInfo);
@param info: 为调用 VixDiskLib_GetInfo 返回的 VixDiskLibInfo 类型对象
因为 VixDiskLib_GetInfo 会在内存中分配并填充 VixDiskLibDiskInfo 数据结构,所以需要在 VixDiskLib_GetInfo 调用失败之后立即调用 VixDiskLib_FreeInfo 以释放内存空间,避免内存泄漏。
VixDiskLib_Close 关闭 VMDK File
函数原型:
/**
* Closes the disk.
* @param diskHandle [in] Handle to an open virtual disk.
* @return VIX_OK if success, suitable VIX error code otherwise.
*/
VixError
VixDiskLib_Close(VixDiskLibHandle diskHandle);
函数调用:
VixDiskLib_Close(diskHandle);
在完成对 VMDK File 的操作之后,一定要谨记关闭 VMDK File。
VMware 虚拟化编程(6) — VixDiskLib 虚拟磁盘库详解之二的更多相关文章
- VMware 虚拟化编程(7) — VixDiskLib 虚拟磁盘库详解之三
目录 目录 前文列表 VixDiskLib 虚拟磁盘库 VixDiskLib_GetMetadataKeys VixDiskLib_ReadMetadata 获取虚拟磁盘元数据 VixDiskLib_ ...
- VMware 虚拟化编程(5) — VixDiskLib 虚拟磁盘库详解之一
目录 目录 前文列表 VixDiskLib 虚拟磁盘库 虚拟磁盘数据的传输方式 Transport Methods VixDiskLib_ListTransportModes 枚举支持的传输模式 Vi ...
- VMware 虚拟化编程(2) — 虚拟磁盘文件类型详解
目录 目录 前文列表 虚拟磁盘文件 VMDK 用户可以创建的虚拟磁盘类型 VixDiskLib 中支持的虚拟磁盘类型 虚拟机文件类型 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/ ...
- VMware 虚拟化编程(12) — VixDiskLib Sample 程序使用
目录 目录 前文列表 vixDiskLibSample 安装 Sample 程序 Sample 程序使用方法 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/V ...
- VMware 虚拟化编程(14) — VDDK 的高级传输模式详解
目录 目录 前文列表 虚拟磁盘数据的传输方式 Transport Methods Local File Access NBD and NBDSSL Transport SAN Transport Ho ...
- VMware 虚拟化编程(8) — 多线程中的 VixDiskLib
目录 目录 前文列表 多线程注意事项 多线程中的 VixDiskLib 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/VADP 概念简析 VMware 虚拟化 ...
- VMware 虚拟化编程(15) — VMware 虚拟机的恢复方案设计
目录 目录 前文列表 将已存在的虚拟机恢复到指定时间点 恢复为新建虚拟机 灾难恢复 恢复细节 恢复增量备份数据 以 RDM 的方式创建虚拟磁盘 创建虚拟机 Sample of VirtualMachi ...
- VMware 虚拟化编程(13) — VMware 虚拟机的备份方案设计
目录 目录 前文列表 备份思路 备份算法 备份细节 连接到 vCenter 还是 ESXi 如何选择快照类型 是否开启 CBT 如何获取备份数据 如何提高备份数据的传输率 备份厚置备磁盘和精简置备磁盘 ...
- VMware 虚拟化编程(11) — VMware 虚拟机的全量备份与增量备份方案
目录 目录 前文列表 全量备份数据的获取方式 增量备份数据的获取过程 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/VADP 概念简析 VMware 虚拟化编 ...
随机推荐
- js常见的设计模式一
1.观察者模式 定义一些一对多的关系,将一系列的观察者对目标函数感兴趣,将自己添加进目标函数,当目标函数状态发生改变时,发送通知,以此通知附加在目标上的观察者 /* 目标 */ class subje ...
- 基于maven的javaweb项目模块化开发
转自:https://my.oschina.net/kingfire/blog/273381 基于maven的javaweb项目模块化开发 引言 考虑团队拥有多个类似项目的情况,比如一些功能差异不大的 ...
- ubuntu进入纯命令行
启动按shfit 然后光标在第一行按e 倒数第二行末尾添加quiet splash $vt_handoff 3 然后按CTRL+X或F10引导系统,启动之后就是命令行模式了
- 注册和登录(关于Cookie)
前记 我将描述一下登陆和注册之间发生了什么,将场景分为客户端和服务端,服务器是Node.JS,客户端是由JS写的 注册 1.注册请求 这是由客户端发送一个POST请求给服务端,其中包含了用户名和密码 ...
- 郭盛华现身北京机场,颇有IT男的风范,网友:疑似被招安了
郭盛华纵横互联网江湖数十年,他白手起家,凭着过人的勇敢.智慧和绝技,身经百战,显赫辉煌,成为中外闻名的互联网安全领域大师级人物. 郭盛华的网络技术指导方面经验丰富实力深厚.他是中国互联网安全领域的传奇 ...
- LOJ6358 前夕
上来4的倍数又要交集恰好 单位根反演+二项式反演定了( 具体推柿子放下面了qwq $g(n) = \sum_{i=n}^N f(i) \binom{i}{n} \\g(n) = \binom{N}{n ...
- Java内存模型(JMM)的可见性
JMM(Java Memory Model)内存模型之可见性 JMM是Java内存模型的缩写,本身是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字 ...
- 谷歌浏览器遇到js报错自动进行断点调试,如何关闭
转载于csdn 附地址 http://blog.csdn.net/microcosmv/article/details/60793882 留备用.
- mongdb 数据库
安装mongdb 下载地址 https://www.runoob.com/mongodb/mongodb-window-install.html 检查 mongdb 是否安装成功which mongd ...
- Linux学习-利用inotify和rsync实现数据的实时同步
一.inotify简介 1.inotify介绍 异步的文件系统事件监控机制,利用事件驱动机制,而无须通过诸如cron等的 轮询机制来获取事件,linux内核从2.6.13起支持 inotify,通过i ...