VMware虛擬磁盤編程指導(三)

3 虛擬磁盤接口

VMWare提供磁盤佈局選項,這裏將要討論動態庫中封裝的數據結構。

VMDK文件位置

ESX/ESXi主機上,虛擬機磁盤(VMDK)文件通常存放在共享存儲設備的某個/vmfs/volumes中。在vSphere Client上,可以從主機和簇的庫中查看存儲卷,它們的名字通常是datastore1datastore2。如果要查看VMDK文件,選擇通用(Summary)>資源(Resources)> 數據存儲(Datastore),右鍵點擊“瀏覽數據存儲(Browse Datastore)”,然後選擇一個虛擬機。

對於工作站(VMWare Workstation)VMDK文件存在和虛擬機配置(VMX)文件相同的目錄下,例如Linux系統中的“/path/to/disk”,或者Windows系統中的“C:\My Documents\My VirtualMachines”

VMDK文件作爲虛擬機的物理磁盤,大部分內容都存儲了虛擬機的數據,僅有一小部分用於VMDK文件的本身開銷。

虛擬磁盤類型

在虛擬磁盤庫中定義瞭如下這些磁盤類型:

單片稀疏型 VIXDISKLIB_DISK_MONOLITHIC_SPARSE只包含一個虛擬磁盤文件並能夠動態擴展的虛擬磁盤。這是主機磁盤(hosted disk)的默認類型,在第五章中的例子中也只用到這種類型。

單片平面型 VIXDISKLIB_DISK_MONOLITHIC_FLAT只包含一個虛擬磁盤文件,提前分配存儲空間的虛擬磁盤。創建這種磁盤需要較多的時間,並佔用大量空間,但是可能會提供比稀疏型磁盤更好的性能。

分片稀疏型 VIXDISKLIB_DISK_SPLIT_SPARSE可擴展的虛擬磁盤,整個磁盤被分爲多個2GB大小的關聯文件。這些文件可以增大到2GB,然後在新的文件中繼續擴展。這種類型可以在老的文件系統上使用。

分片平面型 VIXDISKLIB_DISK_SPLIT_FLAT提前分配空間的虛擬磁盤,並被分爲多個大小爲2GB的虛擬磁盤文件。這些從2GB開始,所以創建它們需要較長的時間,但是可以以2GB持續增長。

VMFS平面型VIXDISKLIB_DISK_VMFS_FLAT提前分配空間的虛擬磁盤,在ESX3或更新的平臺上可用,也叫做厚型磁盤(thick disk),是一種管理磁盤(managed disk)

VMFS稀疏型VIXDISKLIB_DISK_VMFS_SPARSE使用一種寫時複製(copy-on-write, COW)機制來節省存儲空間。

VMFS精簡型VIXDISKLIB_DISK_VMFS_THIN這種類型假設需要儘可能多的空間,然後以此來擴展虛擬磁盤的大小。能夠在ESX3以及更新的平臺上使用,VDDK 1.1或更新的版本中支持,建議使用高版本的VDDK

單片流優化 VIXDISKLIB_DISK_STREAM_OPTIMIZED單片、稀疏格式對數據流進行壓縮。這種格式不支持隨機讀寫。

持久化(Persistence)磁盤模式

在持久化磁盤模式中,數據將直接並永久地寫入虛擬磁盤,儘管重新開機啓動,數據還是會存儲在虛擬磁盤中。

在非持久化(nonpersistent)模式下,對虛擬磁盤的任何修改,都將在虛擬機關機後失效。VMDK文件將恢復到原來的狀態。

虛擬磁盤庫中並沒有封裝這種區別,它是一個虛擬機的設置。

VMDK文件命名

    表3-1展示了不同的虛擬磁盤類型。第一列關於虛擬磁盤類型,但是不包括VIXDISKLIB_DISK前綴。第三列給出了在工作站和ESX/ESXi主機上可能的VMDK文件名稱。

    表3-1. VMDK虛擬磁盤文件

API中的磁盤類型VMWare主機創建虛擬磁盤主機上名稱
MONOLITHIC_SPARSE在“選擇磁盤類型”時,選擇默認設置,不勾選任何選項,創建一個可根據需要空間大小動態增長的VMDK文件。<vmname>表示虛擬機的名稱。在VMFS分區上,這是磁盤描述文件的名稱。
<vmname>.vmdk

MONOLITHIC_FLAT

VMFS_FLAT

VMFS_THIN

如果勾選了立即分配磁盤空間,虛擬磁盤文件將會提前分配所有空間,不會動態增長。第一個VMDK文件很小,並指向一個大的文件,它的名稱包含“flat”,但是沒有數字序號。

同樣在VMFS分區上,這個虛擬磁盤文件指向了虛擬磁盤數據文件,thickthin類型。
<vmname>-flat.vmdk
SPLIT_SPARSE如果只勾選“分割成2GB大小的文件”,虛擬磁盤文件將會在需要更多空間時擴展。第一個VMDK文件很小,並指向一系列的其他VMDK文件,它們在序號數字前都有一個S標誌,表明是稀疏類型的(sparse)VMDK文件的數字依賴於所需要的磁盤大小。隨着數據增長,將會在這個序列中新增更多的VMDK文件。<vmname>-s<###>.vmdk
SPLIT_FLAT如果勾選立即分配磁盤空間將磁盤分成2GB大小的文件兩個選項,那麼虛擬磁盤空間將會提前分配,不會動態擴展。第一個VMDK是一個小文件,指向一系列的其他文件,這些文件在數字序號之前都有一個f前綴,表示flat。數字有磁盤大小決定。<vmname>-f<###>.vmdk
MONOLITHIC_SPARSE或者SPLIT_SPARSE的快照當給虛擬機創建快照時,會生成回寫日誌,也叫做子磁盤(child disk)或者差異鏈接(delta link)。快照文件中有序號數字,但是沒有fs前綴。針對原來的父磁盤或者更早的回寫日誌(即更早的快照)的數據修改,將會寫進這些帶編號的的VMDK文件中。<diskname>-<###>.vmdk
SE_SPARSE有效利用空間的稀疏(seSparse)文件格式。在vShpere 5.1或更新版本的VMWare View中用於模板克隆。
n/a虛擬機的快照,包含了指向所有VMDK文件的信息。<vnname>Snapshot.vmsn

對於惰性清零平面磁盤(lazy zeroed thick disk),所有的塊被提前分配,數據被寫入有用的塊中,但是沒有用的塊中的數據還是原來那樣,他們可能包含之前使用過的數據。很多存儲系統都會在後臺清空(zero-out)沒有的塊。對於急切型平面磁盤(eager thick disk),沒有用的塊在分配時就已經清空。

精簡置備磁盤(Thin Provisioned Disk)

對於一個精簡置備型磁盤,vSphere客戶端報告的置備的大小可能會大於磁盤的容量。精簡磁盤的置備大小是指當磁盤空前分配時需要佔用的最大大小。實際大小則是精簡磁盤的當前大小。過量使用(Overcommit)意味着如果所有精簡磁盤都已完全置備,沒有足夠的空間容納所有這些磁盤。

國際化和本地化(Internationalization and Localization)

虛擬機以及VMDK文件的路徑名稱可以包括主機文件系統支持的任何字符集。vSphere4以及Workstation7支持Unicode UTF-8路徑名稱,儘管在一些本地化資源中,只建議使用ASCII路徑名稱。

Windows2000以及最新的系統中,使用UTF-16作爲本地化的路徑名稱。例如,在法語環境中,VDDK示例代碼會將磁盤掛載在路徑“C:\Windows\Temp\vmwareSystème”中,其中“è”就是一個UTF-16編碼,VixMntapi動態庫無法識別它。在這種情況下,程序啓動前就需要在後臺將tmpDirectory配置鍵設置爲只包含ASCII字符的路徑。

對於需要操作任意路徑名稱的程序,Unicode提供了一組C語言的GNU庫函數,使用iconv_open()來初始化編碼集轉換,使用iconv()UTF-8轉換爲UTF-16,或者將UTF-16轉換爲UTF-8

虛擬磁盤的內部格式(Internal Format)

虛擬磁盤的內部格式技術文檔5.0(Virtual Disk Format 5.0)很好的描述了VMDK的格式,可以通過下面的URL獲得:

http://www.vmware.com/support/developer/vddk/vmdk_50_technote.pdf 

分頁目錄和分頁表格(Grain Directories and Grain Tables)

稀疏(SPARSE)類型的虛擬磁盤使用結構化的方式來組織磁盤扇區。詳細信息請看虛擬磁盤內部格式中提到的VirtualDisk Format 5.0。這裏的分頁(Grain)是指數據單元的粒度,大小超過一個扇區。這種結構包括:

  • 分頁目錄(Grain directory,以及冗餘目錄),它們的每一項都指向分頁表格

  • 分頁表格(Grain tables,以及冗餘表格),它們的每一項都指向數據單元頁(Grains)

  • 每頁(Grain)就是一塊扇區,包含虛擬磁盤的數據。默認的大小是128個扇區或者是64KB

虛擬磁盤API中的數據結構

這裏只簡單介紹一些重要的數據結構:

VixError類型爲uint64的錯誤代碼

VixDiskLibConnectParams公共類型,描述虛擬機的驗證信息vmxSpec(可能通過vCenter Server),主機的名稱,以及認證方式。詳細信息可以參考”VMX詳細規格一節。credType可以是 VIXDISKLIB_CRED_UID(通用的用戶名/密碼方式)VIXDISKLIB_CRED_SESSIONID(HTTP會話ID) VIXDISKLIB_CRED_TICKETID(vSphere票據ID)VIXDISKLIB_CRED_SSPI(當前線程的認證憑據,只用於Windows)

VixDiskLibConnectParams::VixDiskLibCreds用戶ID或會話ID的憑據

VixDiskLibConnectParams::VixDiskLibCreds::VixDiskLibUidPasswdCreds認證時保存用戶名和密碼的字符串域。

VixDiskLibConnectParams::VixDiskLibCreds::VixDiskLibSessionIdCreds保存會話cookie,用戶名,加密會話密鑰。

VixDiskLibConnectParams::VixDiskLibCredsb::VixDiskLibSSPICreds表示安全支持提供者接口的認證信息,用戶名和密碼爲空。

VixDiskLibCreateParams用來表現虛擬磁盤的類型,磁盤適配器類型,VMWare的版本以及磁盤扇區的容量。

typedefVixDiskLibDiskType diskType

typedefVixDiskLibAdapterType adapterType

typedefuint hwVersion

typedefVixDiskLibSectorType capacity

VixDiskLibDiskInfo描述虛擬磁盤的BIOS以及物理參數(geometry),磁盤扇區容量,磁盤適配器類型,子磁盤鏈接(重做日誌,redo logs)的個數,以及用戶定位父磁盤的字符串。

VixDiskLibGeometrybiosGeo

VixDiskLibGeometryphysGeo

VixDiskLibSectorTypecapacity

VixDiskLibAdapterTypeadapterType

intnumLinks

char* parentFileNameHint

VixDiskLibGeometry描述虛擬磁盤的幾何參數,並不需要和物理磁盤相同。

typedefuint32 cylinders

typedefuint32 heads

typedefuint32 sectors

VMDK訪問認證和權限(Credentials and Privileges)

本地操作由本地的VMDK支持。到ESX/ESXi主機的訪問有登陸憑據信息進行認證,所有只要有正確的憑據,VixDiskLib可以訪問ESX/ESXi主機上任何VMDKVMWare vSphere有它自己的一組權限(privileges),所以只要有正確的權限和登陸憑據,VixDiskLib可以訪問由vCenter Server管理的任何ESX/ESXi主機上任意VMDKVixDiskLib支持:

1. 只讀和讀寫模式

2. 以只讀模式訪問在線(onlien)虛擬機的任一個快照

3. 訪問離線虛擬機的VMDK文件(vCenter僅限於已註冊的虛擬機)

4. 微軟虛擬磁盤(VHD)格式的讀取

vCenter Server中,備份應用角色在保存虛擬機數據時,必須具有以下權限:

1. 虛擬機(VirtualMachine) > 配置(Configuration) > 跟蹤磁盤修改(Disk change tracking)

2. 虛擬機(VirtualMachine) > 支持(Provisioning) > 允許磁盤只讀訪問,並且允許虛擬機下載(VM download)

3. 虛擬機(VirtualMachine) > 狀態(State) > 創建快照和移除快照

備份應用中,用戶必須具有以下權限:

1. 數據存儲(Datastore) > 分配空間(Allocate space)

2. 虛擬機(VirtualMachine) > 配置(Configuration) > 添加新磁盤和移除磁盤

3. 虛擬機(VirtualMachine) > 配置(Configuration) > 修改資源(resource)和設置(setting)

當備份涉及vCenter Server以及所有ESX/ESXi主機時,用戶還需要以下權限:

1. 全局(Global) > 禁用和啓用方法(DisableMethods and EnableMethods)

2. 全局(Global) > 牌照(License)

所有的權限都必須應用在vCenter Server級別,否則將會返回類似The host is not licensed for this feature“這樣的錯誤。

適配器類型(Adapter Types)

VMDK可以選擇一下類型:

VIXDISKLIB_ADAPTER_IDE虛擬磁盤作爲ATAATAPIPATASATA等等設備。當有舊的軟件(legacy software)明確需要時,就必須選擇這種類型。

VIXDISKLIB_ADAPTER_SCSI_BUSLOGIC使用Buslogic適配器的虛擬SCSI磁盤。在一些平臺上這是默認類型,並且在使用IDE磁盤時,爲了更好的性能也推薦使用這種類型。

VIXDISKLIB_ADAPTER_SCSI_LSILOGIC使用LSILogic適配器的虛擬SCSI磁盤。Windows Server 2003和大部分Linux虛擬機默認使用這種類型。性能和Buslogic類似。

虛擬磁盤傳輸方式(Transport Methods)

使用SANNAS存儲的ESX/ESXi主機上的虛擬機,VMWare支持文件級或者鏡像級的備份。虛擬機通過共享的VMFS LUN直接讀取數據,所有可以進行有效的備份,並且不會加重虛擬網路或ESX/ESXi主機的負載。

VMWare提供接口有效地訪問存儲簇(storage clusters),集成了存儲敏感(storage-aware)應用程序,包括備份。開發者可以使用VMDK高級傳輸模式,它提供了高效的I/O方法來最大化備份性能。VMWare提供5中訪問方法:本地文件(local file)NBD(網絡塊設備,network block device),通過局域網(over LAN)的加密NBD(NBDSSLNBD with encryption)SAN以及SCSI HotAdd(熱添加的SCSI)

本地文件訪問(Local File Access)

虛擬磁盤庫從ESX/ESXi主機上的/vmfs/volumes位置或者主機產品的本地文件系統中讀取磁盤數據。文件訪問方式集成在VixDiskLib中,所以它在本地存儲中總是可用的,但是它不是一種網絡傳輸方法。

SAN Transport

SAN模式要求應用程序運行在一臺備份服務器上,服務器訪問包含需要讀寫的虛擬磁盤所在的SAN存儲(Fibre ChanneliSCSI,或者SAS連接)。如圖3-1所示,因爲這種方法不需要通過ESX/ESXi主機傳輸數據,所有很高效。SAN備份代理必須是一臺物理機器。如果它有光驅或磁帶,整個備份過程都不需要局域網(LAN-free)

wKiom1OflZ-Aj2p5AADSCbVj92c687.jpg

SAN傳輸模式中,虛擬磁盤庫從ESX/ESXi主機獲取VMFS LUN的佈局信息,並且使用這些信息直接從虛擬磁盤所在的存儲單元(storage LUN)上讀取數據。這是發佈在SAN連接的ESX/ESXi主機上的軟件的最快的傳輸方式。

SAN存儲設備可以包括SATA硬盤,但是在VMWare硬件兼容性列表上,目前還沒有連接SAN設備的SATA硬盤。

在任何存儲設備上的SAN傳輸模式,通常都作爲LUN工作在驅動一級(而不像NTFSEXT之類的文件系統)SAN模式必須能夠將LUN作爲一個原始的設備進行訪問。關鍵在於設備是否作爲一個到底層LUN的原始鏈接(The real key is whether thedevice behaves like a direct raw connection to the underlying LUN)。光纖通道(Fibre Channel)iSCSI,以及基於SAS(多個掛載的SCSIserial attached SCSI)的存儲陣列都支持SAN傳輸模式。

VMWarevSAN作爲一種使用直接掛載磁盤的基於網絡的存儲解決方案,並不支持SAN傳輸方式。vSAN使用和SAN傳輸不兼容的模式和方法,如果虛擬磁盤庫檢測到vSAN,它將會禁用SAN方式。其他高級傳輸方式仍然有用。

HotAdd Transport

如果備份程序工作在appliance中,它可以從備份快照中創建一個虛擬機的克隆鏈接(linked-clone virtualmachine),然後從克隆的虛擬磁盤中讀取備份數據。這需要在備份程序所在的主機上插入一個SCSI設備(SCSI HotAdd),克隆鏈接相關的磁盤在備份程序所在機器(備份代理)上是臨時插入的。

HotAddVMware的一個特性,運行虛擬機運行時插入設備。除了SCSI磁盤,還可以添加CPU和內存。

VixTransport處理臨時的克隆鏈接以及虛擬磁盤的掛載。VixDiskLib將熱插入的磁盤作爲完整的VMDK(本地主機上的虛擬磁盤,virtual disk on the local host)磁盤進行打開和讀取。這種策略只在虛擬機使用SCSI硬盤時纔有效,並且不支持虛擬IDE硬盤的備份。

HotAdd能夠方便地從虛擬機獲取虛擬磁盤數據到備份應用(或備份代理)中。HotAdd磁盤如圖3-2所示。

wKiom1OflcPSqr5DAAEF3iUQU0c628.jpg

HotAdd傳輸方式也適用於存儲在NFS分區上的虛擬機。

將備份應用作爲虛擬機運行有兩個優點:很容易將一個虛擬機遷移到新的服務器,並且可以不通過局域網訪問本地存儲,儘管這會比SAN傳輸方式對物理ESX/ESXi主機產生更多的負載。

關於HotAdd代理

HotAdd備份代理必須是一臺虛擬機。HotAdd需要將虛擬磁盤掛載到備份代理,就像將磁盤掛載到虛擬機一樣。

通常一個HotAdd備份代理可以備份WindowsLinux系統,但不會同時備份。如果要並行備份,需要部署多個代理。

    如果HotAdd代理是一個存儲在VMFS-3捲上的虛擬機,對於客戶想要備份的虛擬機上的虛擬磁盤,需要選擇一個和其最大大小相適應的塊大小的卷(choose a volume withblock size appropriate for the maximum virtual disk size of virtual machinesthat customers want to backup),如表3-2所示。這並不適用於VMFS-5卷,因爲它的文件塊大小總是1MB

wKioL1OflcbRdjZWAABcxWNtMTM744.jpg

NBDNBDSSL傳輸

當其他傳輸方式都無法工作時,網絡存儲應用程序可以使用LAN作爲數據訪問的傳輸方式,如NBD(network block device)或者NBDSSL(加密的,encrypted)NBD是一種Linux類型的內核模塊,它將遠程主機作爲一個塊設備。NBDSSLNBD類似,它使用SSL來加密所有通過TCP連接傳輸的數據。NBD傳輸方式集成在虛擬磁盤庫中,它總是可用的,並且當其他傳輸方式不可用時會自動使用。

wKioL1OflhuwcLqWAACpqJ-SNrY124.jpg

使用這種方式時,ESX/ESXi主機從存儲設備讀取數據,並通過網絡將數據發送到備份服務器。使用局域網傳輸,大數據的虛擬磁盤的傳輸會消耗更多的時間,並且向局域網增加流量(SANHotAdd並不會),但是NBD傳輸還是可以提供以下好處:

1.ESX/ESXi主機可以使用任何存儲設備,包括本地存儲或遠程掛載的NAS

2.備份代理可以是一臺虛擬,這樣客戶就可以使用vSphere的資源池來減小備份時產生的性能衝突(minimize theperformance impact of backup)。例如,備份代理的資源分配優先級可以低於ESX/ESXi主機產品。

3.如果虛擬機和備份代理在一個私有網路中,客戶可以選擇不加密的數據傳輸。NBDNBDSSL更快且需要更少的資源。儘管可以使用私有網絡,但是VMWare還是建議對敏感數據進行加密。

SSL證書和安全

VDDK5.1已經強化了安全措施,虛擬機也被設置爲可以驗證SSL證書。在Windows上,下面的註冊表路徑中需要表3-3所示的鍵值:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\VMware,Inc.\VMware Virtual Disk Development Kit

爲了支持註冊表重定向,64Windows上的VDDK需要的註冊表項,必須設置在Wow6432Node中,這對64Windows上的3264位程序都是正確的。

wKioL1Oflkux7ZZ4AADODlJFzWQ581.jpg

Linux上,SSL證書驗證需要使用指紋(use of thumprints),否則沒有任何其他驗證機制。vShpere上指紋是指從一個可信源(vCenter Server)獲得一個哈希值(hash),並傳入NFC票據(ticket) SSLVerifyParam結構。如果下面信息加入VixDiskLib_InitEx配置文件,Linux虛擬機會檢測SSL指紋:

vixDiskLib.linuxSSL.verifyCertificates= 1

下面的庫函數增強了Linux SSL指紋:InitExPrepareForAccessEndAccessGetNfcTicket,以及用於高級傳輸模式的GetRpcConnection接口。

NFC會話限制(Session Limits)

    NBD使用VMware網絡文件拷貝(NFC, network filecopy)協議。從表3-4中可以看出,在多個主機類型上網絡連接數量的限制。VixDislib_Open對於ESX/ESXi主機上的每一個虛擬磁盤都使用一個連接。 VixDiskLib_Clone()同樣需要一個連接。無法在多個磁盤間共享連接。這是主機的限制,而不是進程的限制,所以SANHotAdd沒有此限制。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章