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 虚拟化编 ...
随机推荐
- mv - 移动 (改名) 文件
摘要 mv [选项]... 源文件 目标文件 mv [选项]... 源文件... 目录 mv [选项]... --target-directory=DIRECTORY SOURCE... 描述 改“源 ...
- mysql基础知识和pymysql
一.视图 视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的 ...
- 安装运行redis
在Linux系统上安装Redis 环境准备 Redis是C语言开发,建议在Linux上运行,本人系统centos-6.5. 安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有g ...
- linux 源码安装postgresql
下载源码包 --安装所需要的系统软件包 yum groupinstall -y "Development tools" yum install -y bison flex read ...
- Python小技巧:使用*解包和itertools.product()求笛卡尔积(转)
leetcode上做提示时候看到有高人用这个方法解题 [问题] 目前有一字符串s = "['a', 'b'],['c', 'd']",想把它分开成为两个列表: list1 = [' ...
- 洛谷 P2704 [NOI2001]炮兵阵地 (状态压缩DP+优化)
题目描述 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队.一个NM的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P" ...
- ASP.NET Core 基础知识(五) 依赖关系注入
参考https://www.cnblogs.com/jesse2013/p/di-in-aspnetcore.html 和 https://www.cnblogs.com/artech/p/net-c ...
- python基本数据类型常用方法
python基本数据类型 1.整型 1.1 int 1.2 bit_lenght # 当前数字的二进制位数,至少用n位表示 r = age.bit_length() >>> a = ...
- Word快捷选取
在word中,你知道鼠标单击选中一个词,双击选中一行,三击选中一个段落吗?
- Spring Security初识
Spring Security与Spring Boot集成 添加依赖: <dependency> <groupId>org.springframework.boot</g ...