本文共 4589 字,大约阅读时间需要 15 分钟。
目录
前文列表
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. */VixErrorVixDiskLib_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. */VixErrorVixDiskLib_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. */VixErrorVixDiskLib_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. */VixErrorVixDiskLib_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. */voidVixDiskLib_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. */VixErrorVixDiskLib_Close(VixDiskLibHandle diskHandle);
函数调用:
VixDiskLib_Close(diskHandle);
在完成对 VMDK File 的操作之后,一定要谨记关闭 VMDK File。
转载地址:https://is-cloud.blog.csdn.net/article/details/78240024 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!