VMware 虚拟化编程(6) — VixDiskLib 虚拟磁盘库详解之二
小作 2018-03-01 来源 :网络 阅读 1210 评论 0

摘要:本系列Vmware虚拟机教程将会大家讲解系统的讲解Vmware知识点,看完这系列文章会让你对Vmware有更加清晰的理解和运用。

本系列Vmware虚拟机教程将会大家讲解系统的讲解Vmware知识点,看完这系列文章会让你对Vmware有更加清晰的理解和运用。

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:


oVIXDISKLIB_FLAG_OPEN_UNBUFFERED 禁用主机磁盘缓存。

oVIXDISKLIB_FLAG_OPEN_SINGLE_LINK 打开当前磁盘链接,而不是开发整个磁盘链(仅托管磁盘)。

oVIXDISKLIB_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。


希望这篇文章可以帮助到你。总之,同学们,你想要的职坐标IT频道都能找到!


本文由 @小作 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved