天天看點

VMware 虛拟化程式設計(6) — VixDiskLib 虛拟磁盤庫詳解之二目錄前文清單VixDiskLib 虛拟磁盤庫

<a href="#%E7%9B%AE%E5%BD%95">目錄</a>

<a href="#%E5%89%8D%E6%96%87%E5%88%97%E8%A1%A8">前文清單</a>

<a href="#vixdisklib-%E8%99%9A%E6%8B%9F%E7%A3%81%E7%9B%98%E5%BA%93">VixDiskLib 虛拟磁盤庫</a>

<a href="#vixdisklibopen-%E6%89%93%E5%BC%80-vmdk-file">VixDiskLib_Open 打開 VMDK File</a>

<a href="#vixdisklibread-%E8%AF%BB%E5%8F%96-vmdk-file-%E6%95%B0%E6%8D%AE">VixDiskLib_Read 讀取 VMDK File 資料</a>

<a href="#vixdisklibwrite-%E5%86%99%E5%85%A5%E6%95%B0%E6%8D%AE%E5%88%B0-vmdk-file">VixDiskLib_Write 寫入資料到 VMDK File</a>

<a href="#vixdisklibgetinfo-%E8%8E%B7%E5%8F%96-vmdk-file-%E4%BF%A1%E6%81%AF">VixDiskLib_GetInfo 擷取 VMDK File 資訊</a>

<a href="#vixdisklibfreeinfo-%E9%87%8A%E6%94%BE-vmdk-file-%E4%BF%A1%E6%81%AF">VixDiskLib_FreeInfo 釋放 VMDK File 資訊</a>

<a href="#vixdisklibclose-%E5%85%B3%E9%97%AD-vmdk-file">VixDiskLib_Close 關閉 VMDK File</a>

<a href="http://blog.csdn.net/jmilk/article/details/77927455" target="_blank">VMware 虛拟化程式設計(1) — VMDK/VDDK/VixDiskLib/VADP 概念簡析</a>

<a href="http://blog.csdn.net/jmilk/article/details/77854924" target="_blank">VMware 虛拟化程式設計(2) — 虛拟磁盤檔案類型詳解</a>

<a href="http://blog.csdn.net/jmilk/article/details/78233661" target="_blank">VMware 虛拟化程式設計(3) —VMware vSphere Web Service API 解析</a>

<a href="http://blog.csdn.net/jmilk/article/details/78237671" target="_blank">VMware 虛拟化程式設計(4) — VDDK 安裝</a>

<a href="http://blog.csdn.net/jmilk/article/details/78238274" target="_blank">VMware 虛拟化程式設計(5) — VixDiskLib 虛拟磁盤庫詳解之一</a>

緊接上篇。

函數原型:

函數調用:

是初始化并建立了與伺服器的連接配接之後,調用 VixDiskLib_Open 即可打開本機(寄宿磁盤)或遠端(托管磁盤)的 VMDK File。

需要注意的是,如果使用了 SAN 或 HotAdd 進階傳輸模式來建立與伺服器之間的連接配接的話,則虛拟機需要存在至少一個 Snapshot 才能夠執行 Open VMDK File 的操作。

<code>@param connection</code>:實際上是在調用 VixDiskLib_Connect 時 Return 的 VixDiskLibConnection 類型對象

<code>@param path</code>:指定需要 Open 的 VMDK File 的路徑,使用 vSphere 的通過路徑格式 <code>[datastore] virtualmachine/vmdk_file.vmdk</code>

<code>@param flags</code>:可以指定下列 flags:

<code>VIXDISKLIB_FLAG_OPEN_UNBUFFERED</code> 禁用主機磁盤緩存。

<code>VIXDISKLIB_FLAG_OPEN_SINGLE_LINK</code> 打開目前磁盤連結,而不是開發整個磁盤鍊(僅托管磁盤)。

<code>VIXDISKLIB_FLAG_OPEN_READ_ONLY</code>隻讀模式打開虛拟磁盤。

<code>@param diskHandle</code>:若 Open SUCCESS,則傳回一個虛拟磁盤對象句柄,該句柄會在後續的 讀/寫/克隆/擷取磁盤資訊/管理磁盤中繼資料/伸縮磁盤 Size/磁盤碎片整理 函數調用中作為實參傳入。

<code>@param diskHandle</code>:為調用 VixDiskLib_Open Return 的虛拟磁盤對象句柄。

<code>@param startSector, @param numSectors</code>:通過指定開始扇區 startSector 和扇區數量 numSectors,VixDiskLib_Read 從打開的 VMDK File 中讀取一片連續的扇區資料。扇區的大小可以不同,但是在 VixDiskLib.h 頭檔案中已經将這個 Size 定義為 512 個位元組,因為 VMDK File 的扇區大小就是 512 位元組。

<code>@param readBuffer</code>:是實際讀取到的 VMDK File 的資料。

需要注意的是,因為每次讀取的扇區 Size 通常為 512 位元組,是以讀取資料的完整性實際上是需要由應用程式來控制的,并不是調用一次 VixDiskLib_Read 函數就能夠得到完整的 VMDK File 資料。

<code>@param writeBuffer</code>:該實參的長度必須是 <code>VIXDISKLIB_SECTOR_SIZE</code> 的整數倍位元組。

<code>@param info</code>:傳回 VMDK File 的資訊。

VixDiskLib_GetInfo 擷取指定 Opened VMDK File 的下列相關資訊,配置設定并填充 VixDiskLibDiskInfo 資料結構,其中的一部分資訊會與 VMDK File Metadata 的資訊相同:

bios

capacity

adapterType

links

blocks

<code>@param info</code>: 為調用 VixDiskLib_GetInfo 傳回的 VixDiskLibInfo 類型對象

因為 VixDiskLib_GetInfo 會在記憶體中配置設定并填充 VixDiskLibDiskInfo 資料結構,是以需要在 VixDiskLib_GetInfo 調用失敗之後立即調用 VixDiskLib_FreeInfo 以釋放記憶體空間,避免記憶體洩漏。

在完成對 VMDK File 的操作之後,一定要謹記關閉 VMDK File。

繼續閱讀