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 虚拟化编 ...
随机推荐
- 安装最新版Elasticsearch报错
1 问题:ERROR: bootstrap checks failed max file descriptors [4096] for elasticsearch process likely too ...
- 计算机系统结构总结_Cache Optimization
Textbook: <计算机组成与设计——硬件/软件接口> HI <计算机体系结构——量化研究方法> QR Ch4. Cache Optimization 本章要 ...
- spring cloud zuul过滤器修改requestURI 忽略大小写
通过zuul网关处理requestURI可以做很多事情,如对uri的解密,转发,大小写转化等. 这里对URI做一个简单的大小写的转化. 写一个filter实现ZuulFilter: package c ...
- js实现完整轮播
1.封装一个简单的动画函数 function animate(obj,target,callback){ clearInterval(obj.timer);//清除定时器防止定时器重复添加 obj.t ...
- Python 项目转化为so文件
思路是先将py转换为c代码,然后编译c为so文件,所以要安装以下内容: python 安装:cython pip install cython linux 安装:python-devel,gcc yu ...
- VB程序设计中Combobox的取值问题
Private a As Double Private Sub Combo1_Click() '1位小数,系数用10 a = Combo1.ItemData(Combo1.ListIn ...
- vue简单插件
已经很久没有学习新的相关知识,对于今后的学习方向可能会集中在vue的源码,render,jsx语法,服务端渲染来学习,巩固好vue的基础和高级的知识,现阶段vue的api和基本用法已经全部掌握,但是还 ...
- JVM 常量池、运行时常量池、字符串常量池
常量池: 即class文件常量池,是class文件的一部分,用于保存编译时确定的数据. 保存的内容如下图: D:\java\test\out\production\test>javap -ver ...
- java Arrays源码浅出
1.toString 返回指定数组内容的字符串表示形式. demo: 由demo可窥见Arrays.toString的所做的工作就是将数组元素转换为字符串(以逗号分割数组元素,包裹在方括号中). 源码 ...
- Centos7.5源码安装nginx-1.16.0
安装nginx的依赖包(pcre-devel openssl-devel) yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-deve ...