目录

前文列表

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 虚拟磁盘库详解之二的更多相关文章

  1. VMware 虚拟化编程(7) — VixDiskLib 虚拟磁盘库详解之三

    目录 目录 前文列表 VixDiskLib 虚拟磁盘库 VixDiskLib_GetMetadataKeys VixDiskLib_ReadMetadata 获取虚拟磁盘元数据 VixDiskLib_ ...

  2. VMware 虚拟化编程(5) — VixDiskLib 虚拟磁盘库详解之一

    目录 目录 前文列表 VixDiskLib 虚拟磁盘库 虚拟磁盘数据的传输方式 Transport Methods VixDiskLib_ListTransportModes 枚举支持的传输模式 Vi ...

  3. VMware 虚拟化编程(2) — 虚拟磁盘文件类型详解

    目录 目录 前文列表 虚拟磁盘文件 VMDK 用户可以创建的虚拟磁盘类型 VixDiskLib 中支持的虚拟磁盘类型 虚拟机文件类型 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/ ...

  4. VMware 虚拟化编程(12) — VixDiskLib Sample 程序使用

    目录 目录 前文列表 vixDiskLibSample 安装 Sample 程序 Sample 程序使用方法 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/V ...

  5. VMware 虚拟化编程(14) — VDDK 的高级传输模式详解

    目录 目录 前文列表 虚拟磁盘数据的传输方式 Transport Methods Local File Access NBD and NBDSSL Transport SAN Transport Ho ...

  6. VMware 虚拟化编程(8) — 多线程中的 VixDiskLib

    目录 目录 前文列表 多线程注意事项 多线程中的 VixDiskLib 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/VADP 概念简析 VMware 虚拟化 ...

  7. VMware 虚拟化编程(15) — VMware 虚拟机的恢复方案设计

    目录 目录 前文列表 将已存在的虚拟机恢复到指定时间点 恢复为新建虚拟机 灾难恢复 恢复细节 恢复增量备份数据 以 RDM 的方式创建虚拟磁盘 创建虚拟机 Sample of VirtualMachi ...

  8. VMware 虚拟化编程(13) — VMware 虚拟机的备份方案设计

    目录 目录 前文列表 备份思路 备份算法 备份细节 连接到 vCenter 还是 ESXi 如何选择快照类型 是否开启 CBT 如何获取备份数据 如何提高备份数据的传输率 备份厚置备磁盘和精简置备磁盘 ...

  9. VMware 虚拟化编程(11) — VMware 虚拟机的全量备份与增量备份方案

    目录 目录 前文列表 全量备份数据的获取方式 增量备份数据的获取过程 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/VADP 概念简析 VMware 虚拟化编 ...

随机推荐

  1. 关于<input type="hidden"/>标签的记录

    <input type="hidden" name="pid" value="10"/>标签放在一个input标签后可以使用,但 ...

  2. 用element-ui进行文件的上传

    在进项的项目中,我使用vue配合element搭建的项目,现在需要用到上传文件的写法!现在列举下我的项目中所使用的上传文件的方法! <el-upload style="display: ...

  3. 20190614笔记(颜色透明度,css,filter,滤镜,计算属性,json和formData转换)

    今天忙里偷闲,把最近做的笔记做一下整理. 1.json和formData互相转换 适用场景:对接后台接口.后台接口写的因人而异,不同的人有不同的风格.比如,文件上传,原本就是formData格式,有人 ...

  4. Educational Codeforces Round 55 (Rated for Div. 2) D. Maximum Diameter Graph (构造图)

    D. Maximum Diameter Graph time limit per test2 seconds memory limit per test256 megabytes inputstand ...

  5. Centos7.5源码安装nginx-1.16.0

    安装nginx的依赖包(pcre-devel openssl-devel) yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-deve ...

  6. SpringBoot框架(4)-- 类装配及Bean装配监听器

    1.普通方式装配类对象   (1)添加带有@Bean注解的方法  User.java(带@Component注解) package com.demo.boot.bootenable.beanDemo1 ...

  7. vue 报错 :属性undefined(页面成功渲染)

    vue 报错:Cannot read property 'instrumentId' of undefined" 相关代码如下: <template> ... <span& ...

  8. Python---进阶---文件操作---搜索文件和保存搜索结果

    ### 编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在,如果遇到文件夹,则进入该文件夹继续搜索 - input 去接受用户输入的文件名和开始搜索的路径 - os.path.isdi ...

  9. 简单了解Spring中常用工具类_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 文件资源操作 Spring 定义了一个 org.springframework.core.io.Resource 接口, ...

  10. 利用BeautifulSoup爬去我爱我家的租房数据

    因为之前对BeautifulSoup一直不是很熟悉,刚好身边的朋友同事在找房子,就想着能不能自己写个爬虫爬一下数据,因此就写了这个爬虫.基本都是边看书边写的,不过也没什么好讲的.直接粘代码了. # c ...