在Citrix PVS架構(gòu)和產(chǎn)品中,位于最后端的存儲(chǔ)硬盤采用的是虛擬化時(shí)代,微軟開發(fā)的虛擬硬盤VHD/VHDX。VHD/VHDX格式是一種公開可用的映像格式規(guī)范,允許將硬盤封裝到單個(gè)文件中,以供操作系統(tǒng)作為虛擬硬盤以物理硬盤的方式使用。這些虛擬硬盤能夠托管本地文件系統(tǒng)(NTFS,F(xiàn)AT,exFAT和UDFS),同時(shí)支持標(biāo)準(zhǔn)硬盤和文件操作。VHD文件的最開始用于Windows7,Windows Server 2008,Virtual Server和Windows Virtual PC以及Hyper-V。隨后Citrix PVS也使用了VHD虛擬硬盤。隨著微軟Windows Server 2012的發(fā)布以及新文件系統(tǒng)的開發(fā),VHD格式需要適應(yīng)這些變化。于是就在Windows Server 2012 中引入了一個(gè)新版本的 VHD 格式,稱為 VHDX。新的VHDX支持最新的ReFS文件系統(tǒng)以及具有更大的存儲(chǔ)容量。它還在電源故障期間提供數(shù)據(jù)損壞保護(hù)并且優(yōu)化動(dòng)態(tài)硬盤和差異硬盤的結(jié)構(gòu)對(duì)齊方式,以防止在新的大型扇區(qū)在物理硬盤上性能降級(jí)。
創(chuàng)新互聯(lián)技術(shù)團(tuán)隊(duì)10多年來(lái)致力于為客戶提供網(wǎng)站制作、做網(wǎng)站、成都品牌網(wǎng)站建設(shè)、成都全網(wǎng)營(yíng)銷、搜索引擎SEO優(yōu)化等服務(wù)。經(jīng)過(guò)多年發(fā)展,公司擁有經(jīng)驗(yàn)豐富的技術(shù)團(tuán)隊(duì),先后服務(wù)、推廣了千余家網(wǎng)站,包括各類中小企業(yè)、企事單位、高校等機(jī)構(gòu)單位。我們今天來(lái)介紹下VHD/VHDX虛擬硬盤的相關(guān)技術(shù):
1、它是如何與操作系統(tǒng)通信?
2、VHD/VHDX虛擬硬盤的架構(gòu)是什么,和物理的硬盤相比,VHD/VHDX虛擬硬盤有何不同?
VHD/VHDX我們可以說(shuō)她是一個(gè)映像文件,也可以說(shuō)是一個(gè)虛擬硬盤。因?yàn)樗齻儽旧韺?duì)于文件系統(tǒng),表示的是一個(gè)映像文件,對(duì)于硬盤系統(tǒng),表示的是一個(gè)硬盤。因此微軟的VHD/VHDX虛擬硬盤我們可以給出一個(gè)定義是:使用一個(gè)映像文件來(lái)模擬物理硬盤并且存儲(chǔ)數(shù)據(jù)。
在我們的操作系統(tǒng)里面,文件系統(tǒng)會(huì)識(shí)別VHD/VHDX映像文件為.vhd或.vhdx的文件。然后操作系統(tǒng)里面集成或安裝的虛擬硬盤驅(qū)動(dòng)系統(tǒng)通過(guò)加載VHD/VHDX映像文件操作,把映像文件虛擬成一個(gè)本地硬盤分區(qū),像正常的物理分區(qū)一樣進(jìn)行讀寫操作。而卸載虛擬硬盤之后,該虛擬硬盤分區(qū)消失,唯一留下的就是映像文件。虛擬硬盤消失之后,系統(tǒng)就無(wú)法訪問(wèn)其中的文件,也不能對(duì)虛擬硬盤內(nèi)存儲(chǔ)的文件進(jìn)行任何操作。
那么Citrix PVS架構(gòu)下,Windows操作系統(tǒng)如果來(lái)識(shí)別和管理VHX/VHDX虛擬硬盤呢?
我們先來(lái)說(shuō)VHD:
在Windows中對(duì)于VHD虛擬硬盤是通過(guò)VHDAPI來(lái)管理、掛載和創(chuàng)建的。其架構(gòu)圖如下所示:
在圖中,基于用戶模式下,通過(guò)VDS的Windows VHD API我們可以來(lái)管理、掛載、創(chuàng)建和銷毀VHD虛擬硬盤。VDS就是Virtual Disk Service,中文簡(jiǎn)稱虛擬磁盤服務(wù),是一種Microsoft Windows服務(wù),可根據(jù)最終用戶,腳本和應(yīng)用程序的請(qǐng)求執(zhí)行查詢和配置操作。該服務(wù)通過(guò)以下方式擴(kuò)展Windows Server操作系統(tǒng)的現(xiàn)有存儲(chǔ)功能:
為Windows中現(xiàn)有的卷和磁盤管理功能提供API。其中就包含對(duì)于VHD虛擬硬盤功能提供相應(yīng)API。
在單個(gè)API下統(tǒng)一卷管理和硬件冗余獨(dú)立磁盤陣列(RAID)管理。
但是VDS不執(zhí)行以下存儲(chǔ)管理功能:
硬件子系統(tǒng)管理,如溫度監(jiān)控或磁盤陣列性能統(tǒng)計(jì)的監(jiān)控。
存儲(chǔ)區(qū)域網(wǎng)絡(luò)(SAN)架構(gòu)管理,例如基于主機(jī)的適配器(HBA)連接的存儲(chǔ)分區(qū)。
為了進(jìn)一步了解應(yīng)用程序或者操作系統(tǒng)如何來(lái)調(diào)用VDS提供的VHD API,我們來(lái)看一下VDS的架構(gòu)。
VDS定義三個(gè)接口:應(yīng)用層和服務(wù)之間的單個(gè)接口,以及數(shù)據(jù)層中的服務(wù)和提供商程序之間的兩個(gè)接口。下圖顯示了VDS的架構(gòu):
N層架構(gòu)使得VDS能夠與文件系統(tǒng)功能協(xié)調(diào),同步提供程序活動(dòng)和在應(yīng)用程序之間進(jìn)行仲裁。在應(yīng)用和提供者之間,VDS向應(yīng)用提供統(tǒng)一的功能,即使一些底層提供者可能缺乏這樣的一致性。
該服務(wù)實(shí)現(xiàn)了常用功能:格式化卷,添加和刪除驅(qū)動(dòng)器盤符或掛載文件夾,以及管理未分配的磁盤(沒(méi)有分區(qū)信息的磁盤)。VDS還會(huì)向已注冊(cè)的應(yīng)用程序返回事件通知。
也就是說(shuō),在Citrix PVS架構(gòu)下,PVS控制臺(tái)可以通過(guò)調(diào)用Windows的VDS的VHD API來(lái)管理存儲(chǔ)于PVS物理硬盤上的VHD虛擬硬盤。
我們說(shuō)操作系統(tǒng)通過(guò)調(diào)用存儲(chǔ)系統(tǒng)的VDS VHD API來(lái)實(shí)現(xiàn)對(duì)于VHD虛擬硬盤的管理操作,但是具體的VHD API函數(shù)則存儲(chǔ)于也是位于用戶模式下VirtDisk.dll里面,該DLL是VHD管理API的通用庫(kù)。
以上的兩個(gè)組件是位于用戶模式下的組件,是可以供開發(fā)者進(jìn)行開發(fā)自定義的模塊。而位于內(nèi)核模式的驅(qū)動(dòng)程序,則不易被修改。在內(nèi)核模式下,有三個(gè)組件:
VDrvRoot.sys :根虛擬驅(qū)動(dòng)器枚舉。
FsDepends.sys :嵌套卷依賴關(guān)系管理。
Vhdmp.sys :VHD解析器和依賴屬性提供程序。
用戶模式下VirtDisk.dll通過(guò)向下調(diào)用內(nèi)核模式下的這三個(gè)驅(qū)動(dòng)程序?qū)崿F(xiàn)真正的VHD映像文件操作。
這三個(gè)驅(qū)動(dòng)是虛擬設(shè)備驅(qū)動(dòng),把一個(gè)映像文件虛擬成一個(gè)磁盤設(shè)備,對(duì)虛擬設(shè)備直接進(jìn)行操作;同時(shí)它們又是一個(gè)過(guò)濾驅(qū)動(dòng),它修改IRP流【應(yīng)用程序的各種操作通過(guò)內(nèi)核的I/O管理器轉(zhuǎn)變?yōu)楦鞣NIRP請(qǐng)求。虛擬磁盤驅(qū)動(dòng)相應(yīng)文件系統(tǒng)驅(qū)動(dòng)程序的IRP對(duì)虛擬磁盤進(jìn)行相應(yīng)的讀寫操作?!浚笽RP在傳遞過(guò)程中兩次經(jīng)過(guò)文件系統(tǒng)。把對(duì)文件的位置請(qǐng)求,經(jīng)過(guò)處理,指定到真實(shí)的磁盤位置,并把命令和數(shù)據(jù)傳遞下去。由于虛擬磁盤驅(qū)動(dòng)主要在內(nèi)核態(tài)修改IRP流,所以用戶態(tài)的讀寫流程保持不變,而內(nèi)核態(tài)的IRP流要兩次經(jīng)過(guò)文件系統(tǒng):第一次經(jīng)過(guò)文件系統(tǒng)是操作虛擬磁盤內(nèi)的文件,第二次經(jīng)過(guò)文件系統(tǒng)是操作映像文件。
說(shuō)完VHD,我們來(lái)介紹VHDX:
VHDX格式由于是在WindowsServer 2012中才會(huì)被支持,而Windows Server2012對(duì)于存儲(chǔ)功能的管理相較與2008是有所區(qū)別的。比如說(shuō)在2008中不支持的硬件子系統(tǒng)管理,如溫度監(jiān)控或磁盤陣列性能統(tǒng)計(jì)的監(jiān)控以及存儲(chǔ)區(qū)域網(wǎng)絡(luò)(SAN)架構(gòu)管理,例如基于主機(jī)的適配器(HBA)連接的存儲(chǔ)分區(qū)。在Windows Server 2012中均受到支持。我們可以這樣理解,Wind我是 Server 2008就是一個(gè)標(biāo)準(zhǔn)的操作系統(tǒng),而Windows Server 2012即是一個(gè)標(biāo)準(zhǔn)的操作系統(tǒng)又是一款存儲(chǔ)操作系統(tǒng)。什么是存儲(chǔ)操作系統(tǒng)呢?就和傳統(tǒng)的存儲(chǔ)控制器一樣,其運(yùn)行于存儲(chǔ)控制器中,具有管理NAS和SAN功能的操作系統(tǒng)。即我們可以將Windows Server 2012安裝到服務(wù)器中,并將該服務(wù)器當(dāng)做存儲(chǔ)控制器使用。
在Windows Server 2012中,Windows Storage Management API取取代了VDS(Virtual Disk Service)的角色和位置。也就是說(shuō)在Windows Server 2012以及R2中,對(duì)于VHDX虛擬硬盤的管理是通過(guò)WindowsStorage Management API來(lái)進(jìn)行的。CitrixPVS控制臺(tái)通過(guò)調(diào)用WindowsStorage Management API來(lái)最終進(jìn)行VHDX文件的管理。具體的讀寫流程和VHD是一樣的,只是相對(duì)應(yīng)的服務(wù)有所區(qū)別而已。
一個(gè)傳統(tǒng)的物理硬盤拋開物理組成部分的話,物理組成部分無(wú)非就是:接口、Buffer、主控芯片、RAM、電機(jī)(SSD就是Flash顆粒)。剩下的就是一個(gè)地址序列,這個(gè)序列從0~n-1,每個(gè)地址包含512B(字節(jié))的控件。一般我們將這些地址稱作邏輯塊地址(LBA),每塊由512B組成。分區(qū)表的作用是:告訴系統(tǒng),磁盤的分區(qū)有幾個(gè),開始位置和結(jié)束位置。磁盤分區(qū)表格式目前主要有兩種MBR分區(qū)表和GUID分區(qū)表(GPT)。
VHD/VHDX虛擬硬盤是沒(méi)有所謂的物理組成部分的,因此VHD/VHDX虛擬硬盤的架構(gòu)其實(shí)就表現(xiàn)為是一個(gè)地址序列。
同樣,我們先來(lái)說(shuō)說(shuō)VHD:
在微軟的VHD 文件格式規(guī)范中【http://download.microsoft.com/download/f/f/e/ffef50a5-07dd-4cf8-aaa3-442c0673a029/Virtual%20Hard%20Disk%20Format%20Spec_10_18_06.doc】,虛擬硬盤VHD文件格式有三種類型:
固定虛擬硬盤:VHD映像文件在存儲(chǔ)上預(yù)分配為所請(qǐng)求的大大小。固定虛擬硬盤是用相同容量的VHD 文件模擬同樣容量的一個(gè)虛擬硬盤,固定虛擬硬盤的VHD 文件在創(chuàng)建時(shí),已分配了全部的空間,確定了大小,不隨著數(shù)據(jù)的寫入而改變。
可擴(kuò)展方式:也稱為“動(dòng)態(tài)”和“可動(dòng)態(tài)擴(kuò)展”方式,VHD映像文件僅使用存儲(chǔ)上足夠空間來(lái)存儲(chǔ)虛擬磁盤當(dāng)前包含的實(shí)際數(shù)據(jù)。創(chuàng)建此類型的虛擬磁盤時(shí),VHD API不會(huì)根據(jù)請(qǐng)求的大大小測(cè)試物理磁盤上的可用空間,因此可以成功創(chuàng)建大大小大于可用物理磁盤空間的動(dòng)態(tài)虛擬磁盤空間。值得注意的是,VHD動(dòng)態(tài)虛擬磁盤的大大小為2,040GB。
差異方式:這種方式是建立在母盤(固定、動(dòng)態(tài)或差分VHD)上的快照,必須有一個(gè)基本的VHD虛擬硬盤作為父虛擬磁盤,不能獨(dú)立存在。在父虛擬磁盤之上創(chuàng)建差異磁盤之后,任何后續(xù)寫入都寫入到差異VHD映像文件中,并且不會(huì)修改父VHD映像文件。而且,差異磁盤可以在差異磁盤之上再建立差異磁盤。這也就是CitrixPVS多版本管理的技術(shù)。
上述的三種,每一種類型都有著自己的文件格式。
VHD虛擬硬盤的固定虛擬硬盤的格式:
固定虛擬硬盤的VHD 格式分為兩個(gè)結(jié)構(gòu):數(shù)據(jù)區(qū)域和頁(yè)腳區(qū)域。數(shù)據(jù)區(qū)域結(jié)構(gòu)和虛擬硬盤相同,即數(shù)據(jù)區(qū)的扇區(qū)與虛擬硬盤的扇區(qū)順序映射。頁(yè)腳結(jié)構(gòu)是所有類型的VHD 文件共有的結(jié)構(gòu),位于文件的尾部,占據(jù)一個(gè)扇區(qū)的大?。?12B字節(jié))。整個(gè)文件的大小是設(shè)定的VHD虛擬硬盤大小加上頁(yè)腳大小(一個(gè)扇區(qū)),即VHD虛擬硬盤的真實(shí)大小是我們?cè)O(shè)置的值(比如40GB)加上一個(gè)扇區(qū)的大小(512B字節(jié))。 固定虛擬硬盤所支持的硬盤大小受到操作系統(tǒng)的限制。例如,在FAT32文件系統(tǒng)上,虛擬硬盤的大大小為4 GB。
而固定虛擬硬盤的VHD虛擬硬盤頁(yè)腳區(qū)域里面有什么呢?根據(jù)VHD文件格式的規(guī)范文檔說(shuō)明,該頁(yè)腳格式是所有的VHD類型都共享的格式,也就是該頁(yè)腳區(qū)域的格式是通用的。其頁(yè)腳區(qū)域規(guī)定:
硬盤頁(yè)腳字段 | 大?。ㄗ止?jié)) |
Cookie(標(biāo)識(shí)) | 8 |
Features(特性) | 4 |
File Format Version(文件格式版本) | 4 |
Data Offset(數(shù)據(jù)偏移量) | 8 |
Time Stamp(時(shí)間戳) | 4 |
Creator Application(應(yīng)用程序創(chuàng)建者) | 4 |
Creator Version(創(chuàng)建者版本) | 4 |
Creator Host OS(創(chuàng)建者系統(tǒng)) | 4 |
Original Size(原始長(zhǎng)度) | 8 |
Current Size(當(dāng)前長(zhǎng)度) | 8 |
Disk Geometry(磁盤參數(shù)) | 4 |
Disk Type(磁盤類型) | 4 |
Checksum(校驗(yàn)和) | 4 |
Unique Id(唯一ID) | 16 |
Saved State(保存狀態(tài)) | 1 |
Reserved(保留) | 427 |
其完整格式如下所示:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | |
標(biāo)識(shí) | 特性 | 文件格式版本 | 數(shù)據(jù)偏移量 | |||||||||||||||||||||
時(shí)間戳 | 應(yīng)用程序創(chuàng)建者 | 創(chuàng)建者版本 | 創(chuàng)建者系統(tǒng) | 原始長(zhǎng)度 | ||||||||||||||||||||
當(dāng)前長(zhǎng)度 | 磁盤參數(shù) | 磁盤類型 | 校驗(yàn)和 | 唯一ID | ||||||||||||||||||||
唯一ID | 存態(tài) | 保留 | ||||||||||||||||||||||
保留(427字節(jié)) | ||||||||||||||||||||||||
從圖上可以看出,頁(yè)腳結(jié)構(gòu)共有512 字節(jié),其定義了VHD 文件標(biāo)志、類型、容量等相關(guān)信息。下面介紹頁(yè)腳區(qū)域各個(gè)字段的意義。
(1)Cookie標(biāo)識(shí)占8 字節(jié)。Cookie用于標(biāo)識(shí)硬盤映像的原始唯一創(chuàng)建者。值區(qū)分大小寫。固定虛擬硬盤的值是“conectix”字符串。cookie存儲(chǔ)為8個(gè)字符的ASCII字符串,其中“c”在第一個(gè)字節(jié),“o”在第二個(gè)字節(jié),依此類推。
(2)特性占4 字節(jié)。這個(gè)字段說(shuō)明該文件支持的特定功能,常用特性有:無(wú)、臨時(shí)、保留。無(wú)特性表明該文件沒(méi)有嵌入特定功能;特性為臨時(shí),表明這是一個(gè)臨時(shí)的VHD 文件,當(dāng)關(guān)機(jī)時(shí)會(huì)被刪除;保留特性下,這一位的值必須置為1。
功能 | 值 |
未啟用任何功能 | 0x00000000 |
臨時(shí) | 0x00000001 |
保留 | 0x00000002 |
(3)文件格式版本占4 字節(jié)。表明VHD 的版本信息。此字段分為主要/次要版本,并與創(chuàng)建文件時(shí)使用的規(guī)范的版本相匹配。最高有效的兩個(gè)字節(jié)用于主要版本。最低有效兩個(gè)字節(jié)是次要版本。這必須與文件格式規(guī)范匹配。對(duì)于當(dāng)前規(guī)范,此字段必須初始化為0x00010000。
(4)數(shù)據(jù)偏移量占8字節(jié)。該字段保存從文件開頭到下一個(gè)結(jié)構(gòu)的絕對(duì)字節(jié)偏移量。此字段用于動(dòng)態(tài)磁盤和差異磁盤,但不用于固定磁盤。對(duì)于固定磁盤,此字段應(yīng)設(shè)置為0xFFFFFFFF。
(5)時(shí)間戳占4字節(jié)。此字段存儲(chǔ)硬盤映像的創(chuàng)建時(shí)間。這是從UTC/ GMT時(shí)區(qū)2000年1月1日12:00:00:00開始計(jì)時(shí)以來(lái)的秒數(shù)。
(6)應(yīng)用程序創(chuàng)建者占4字節(jié)。此字段用于記錄哪個(gè)應(yīng)用程序創(chuàng)建了硬盤。該字段是一個(gè)左對(duì)齊的文本字段。它使用單字節(jié)字符集。如果硬盤由Microsoft Virtual PC創(chuàng)建,則在此字段中寫入“vpc”。如果硬盤映像由MicrosoftVirtual Server創(chuàng)建,則在此字段中寫入“vs”。其他應(yīng)用程序應(yīng)使用自己的唯一標(biāo)識(shí)符。每個(gè)應(yīng)用程序在Windwos中都會(huì)有一個(gè)自己唯一的標(biāo)識(shí)符。
(7)創(chuàng)建者版本占4字節(jié)。此字段保存創(chuàng)建硬盤映像的應(yīng)用程序的主要/次要版本。
(8)創(chuàng)建者系統(tǒng)占4字節(jié)。此字段存儲(chǔ)在其上創(chuàng)建此磁盤映像的主機(jī)操作系統(tǒng)的類型。
(9)原始長(zhǎng)度占8字節(jié)。此字段存儲(chǔ)創(chuàng)建時(shí)從虛擬機(jī)的角度來(lái)看的硬盤大?。ㄒ宰止?jié)為單位)。此字段用于信息目的。
(10)當(dāng)前長(zhǎng)度占8字節(jié)。此字段從虛擬機(jī)的角度存儲(chǔ)硬盤的當(dāng)前大小(以字節(jié)為單位)。在固定虛擬硬盤格式下,此值與創(chuàng)建硬盤時(shí)的原始大小相同。在動(dòng)態(tài)方式下,此值可根據(jù)硬盤是否擴(kuò)展而更改。
(11)硬盤參數(shù)占4字節(jié)。此字段存儲(chǔ)硬盤的磁道,磁頭和每磁道的扇區(qū)值。
磁盤參數(shù)字段 | 大小(字節(jié)) |
Cylinder | 2 |
Heads | 1 |
Sectors per track/cylinder | 1 |
當(dāng)硬盤被配置為ATA硬盤時(shí),ATA控制器使用CHS值(即,磁道,磁頭,每磁道的扇區(qū))來(lái)確定磁盤的大小。當(dāng)用戶創(chuàng)建具有一定大小的硬盤時(shí),虛擬機(jī)中的硬盤映像的大小小于用戶創(chuàng)建的硬盤映像的大小。這是因?yàn)閺挠脖P大小計(jì)算的CHS值向下取整。
(12)磁盤類型占4字節(jié)。
磁盤類型字段 | 值 |
無(wú) | 0 |
Reserved (deprecated) | 1 |
Fixed hard disk | 2 |
Dynamic hard disk | 3 |
Differencing hard disk | 4 |
Reserved (deprecated) | 5 |
Reserved (deprecated) | 6 |
(13)校驗(yàn)和占4字節(jié)。此字段只檢驗(yàn)VHD 文件的頁(yè)腳區(qū)域,不包括數(shù)據(jù)部分。校驗(yàn)和是由頁(yè)腳中除去校驗(yàn)和字段的信息之后計(jì)算得到的。如果校驗(yàn)和出錯(cuò),則認(rèn)定文件損壞。
(14)唯一ID占16字節(jié)。每一塊硬盤都有一個(gè)唯一ID用于識(shí)別硬盤。該唯一的ID是一個(gè)128位的通用唯一標(biāo)識(shí)符(UUID)。此字段用于將父硬盤映像與其差異硬盤映像進(jìn)行關(guān)聯(lián)。
(15)已保存狀態(tài)占1字節(jié)。此字段保存一個(gè)字節(jié)標(biāo)志,描述系統(tǒng)是否處于保存狀態(tài)。如果硬盤處于保存狀態(tài),則該值設(shè)置為1。無(wú)法在保存狀態(tài)的硬盤上執(zhí)行壓縮和擴(kuò)展操作。
(16)保留占427字節(jié)。此字段顧名思義的保留字段,用于今后可能的參數(shù)以及字段擴(kuò)展,其存儲(chǔ)的數(shù)據(jù)全部是0。它的大小是427字節(jié)。
2、可擴(kuò)展方式(動(dòng)態(tài))虛擬硬盤
由于可擴(kuò)展的VHD虛擬硬盤的動(dòng)態(tài)性,因此不同于固定虛擬硬盤的VHD的格式。可擴(kuò)展的VHD 大小隨著寫入的數(shù)據(jù)而動(dòng)態(tài)變化。比如創(chuàng)建一個(gè)60GB的可擴(kuò)展的VHD文件時(shí),它的初始大小可能僅為幾百M(fèi)B,但是隨著后期數(shù)據(jù)的不斷寫入,可擴(kuò)展的VHD文件逐漸增加,并最終達(dá)到60GB的大值。這中間存儲(chǔ)的數(shù)據(jù)是隨機(jī)的,雜亂無(wú)章的。因此就必須得有一個(gè)類似于記錄本一樣的東西來(lái)記錄后來(lái)增加的這些數(shù)據(jù)是存儲(chǔ)于那個(gè)柱面的那個(gè)扇區(qū)上。
VHD可擴(kuò)展的虛擬硬盤格式在規(guī)范文檔中表示如下:
邏輯結(jié)構(gòu)圖表示如下:
由上圖可看出,一個(gè)擴(kuò)展的VHD文件由頁(yè)腳備份區(qū)域、頭部區(qū)域、塊分配表、數(shù)據(jù)區(qū)和頁(yè)腳區(qū)域組成。頁(yè)腳備份區(qū)域是對(duì)頁(yè)腳區(qū)域的備份,位于文件的第0 扇區(qū);頭部區(qū)域是1024字節(jié)的固定長(zhǎng)度,位于文件的第1、2 扇區(qū);塊分配表位于頭部區(qū)域之后,每個(gè)條目占4 字節(jié),其隨著數(shù)據(jù)的增長(zhǎng)而動(dòng)態(tài)擴(kuò)展扇區(qū),不固定長(zhǎng)度;數(shù)據(jù)區(qū)位于塊分配表之后,每個(gè)數(shù)據(jù)塊包括扇區(qū)位圖和塊數(shù)據(jù),分別為512 字節(jié)和2 MB,同樣其隨著數(shù)據(jù)的增長(zhǎng)而動(dòng)態(tài)擴(kuò)展扇區(qū),不固定長(zhǎng)度;頁(yè)腳區(qū)域是512字節(jié),與固定虛擬硬盤VHD的頁(yè)腳區(qū)域是一樣的大小,只是其中關(guān)鍵值不同,其位于文件的最后一個(gè)扇區(qū);
是對(duì)頁(yè)腳區(qū)域的備份,其數(shù)據(jù)和頁(yè)腳區(qū)域一摸一樣,因此了解了頁(yè)腳區(qū)域就行,頁(yè)腳區(qū)域在上述的固定虛擬硬盤中以及進(jìn)行了詳細(xì)計(jì)介紹。
可擴(kuò)展的VHD的頭部區(qū)域表示文件的概況,包括數(shù)據(jù)塊大小,塊分配表位置和數(shù)量,以及關(guān)于差分等重要信息。
在VHD格式規(guī)范文檔中,可擴(kuò)展的VHD文件頭部的格式如下表所示:
可擴(kuò)展磁盤頭部字段 | 大小(字節(jié)) |
Cookie(標(biāo)識(shí)) | 8 |
Data Offset(數(shù)據(jù)偏移量) | 8 |
Table Offset(表偏移量) | 8 |
Header Version(頭部版本) | 4 |
Max Table Entries(大表?xiàng)l目) | 4 |
Block Size(塊大小) | 4 |
Checksum(校驗(yàn)和) | 4 |
Parent Unique ID(母盤唯一ID) | 16 |
Parent Time Stamp(母盤時(shí)間戳) | 4 |
Reserved(保留) | 4 |
Parent Unicode Name(母盤Unicode名稱) | 512 |
Parent Locator Entry 1(母盤定位器條目1) | 24 |
Parent Locator Entry 2(母盤定位器條目2) | 24 |
Parent Locator Entry 3(母盤定位器條目3) | 24 |
Parent Locator Entry 4(母盤定位器條目4) | 24 |
Parent Locator Entry 5(母盤定位器條目5) | 24 |
Parent Locator Entry 6(母盤定位器條目6) | 24 |
Parent Locator Entry 7(母盤定位器條目7) | 24 |
Parent Locator Entry 8(母盤定位器條目8) | 24 |
Reserved(保留) | 256 |
其邏輯結(jié)構(gòu)如下圖所示:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | |
標(biāo)識(shí) | 數(shù)據(jù)偏移量 | 表偏移量 | ||||||||||||||||||||||
頭部版本 | 大表?xiàng)l目 | 塊大小 | 校驗(yàn)和 | 母盤唯一ID | ||||||||||||||||||||
母盤唯一ID | 母盤時(shí)間戳 | 保留 | 母盤Unicode名稱 | |||||||||||||||||||||
母盤Unicode名稱(512B字節(jié)) | ||||||||||||||||||||||||
母盤定位器條目1 | ||||||||||||||||||||||||
………… | ||||||||||||||||||||||||
母盤定位器條目8 | ||||||||||||||||||||||||
保留(256B字節(jié)) | ||||||||||||||||||||||||
下面提供了可擴(kuò)展VHD虛擬硬盤頭部字段的詳細(xì)說(shuō)明。
(1)Cookie標(biāo)識(shí)占8字節(jié)。此字段保存值為“cxsparse”。此字段標(biāo)識(shí)頭部是否為合法的頭部字段。
(2)數(shù)據(jù)偏移量占8字節(jié)。此字段包含硬盤映像中下一個(gè)結(jié)構(gòu)的絕對(duì)字節(jié)偏移量。目前未被現(xiàn)有任何所格式使用,默認(rèn)設(shè)置為0xFFFFFFFF。
(3)表偏移量占8字節(jié)。此字段存儲(chǔ)文件中塊分配表(BAT)的絕對(duì)字節(jié)偏移量。由于前兩個(gè)字段為固定長(zhǎng)度,因此塊分配表總是從0x600 處開始,字段固定為0x600。
(4)頭部版本占4字節(jié)。此字段用于存儲(chǔ)可擴(kuò)展VHD虛擬硬盤頭部的版本。該字段分為主/次版本。最低有效兩個(gè)字節(jié)表示次版本,最高有效兩個(gè)字節(jié)表示主版本。這必須與文件格式規(guī)范匹配。對(duì)于本規(guī)范,此字段必須初始化為0x00010000。主版本將僅在標(biāo)頭格式修改為不再與產(chǎn)品的舊版本兼容時(shí)增加。
(5)大表?xiàng)l目占4字節(jié)。此字段保存BAT中存在的大條目。這應(yīng)該等于磁盤中的塊數(shù)(即磁盤大小除以塊大?。?/p>
(6)塊大小占4字節(jié)。該字段定義了塊的容量。塊是動(dòng)態(tài)和差異硬盤的擴(kuò)展單元。它以字節(jié)存儲(chǔ)。此大小不包括塊位圖的大小。它只是塊的數(shù)據(jù)部分的大小。每個(gè)塊的扇區(qū)必須總是2的冪次方。默認(rèn)值為0x00200000(表示塊大小為2 MB)。
(7)校驗(yàn)和占4字節(jié)。此字段持有動(dòng)態(tài)頭部的基本校驗(yàn)和。它是除去頭部字段之外其他所有字段之和的一個(gè)補(bǔ)碼,和頁(yè)腳區(qū)域的校驗(yàn)和計(jì)算是一樣的。如果校驗(yàn)和驗(yàn)證失敗,則會(huì)判定文件已損壞。
(8)母盤唯一ID占16字節(jié)。此字段用于區(qū)分硬盤。差異硬盤存儲(chǔ)母盤的128位UUID。可擴(kuò)展的VHD 虛擬硬盤中這個(gè)字段置零。
(9)母盤時(shí)間戳占4字節(jié)。此字段存儲(chǔ)母盤的修改時(shí)間戳。這是從時(shí)區(qū)UTC / GMT 2000年1月1日12:00:00:00開始計(jì)算以來(lái)的秒數(shù)。
(10)保留占4字節(jié)。此字段置為零。
(11)母盤Unicode名稱占512字節(jié)。此字段包含母盤文件名的Unicode字符串(UTF-16)。
(12)母盤定位器條目占192字節(jié)(8個(gè)條目,每個(gè)條目24字節(jié))。這些條目在存儲(chǔ)差異硬盤的母盤定位器的文件中存儲(chǔ)絕對(duì)字節(jié)偏移量。用來(lái)在不同平臺(tái)之間遷移VHD文件。此字段僅用于差異磁盤,對(duì)于動(dòng)態(tài)磁盤設(shè)置為零。
下表描述了每個(gè)定位器條目?jī)?nèi)的字段。
母盤定位器表字段 | 大小(字節(jié)) |
Platform Code | 4 |
Platform Data Space | 4 |
Platform Data Length | 4 |
Reserved | 4 |
Platform Data Offset | 8 |
平臺(tái)代碼占4字節(jié)。平臺(tái)代碼描述了哪種平臺(tái)特定的格式用于文件定位器。對(duì)于Windows,文件定位器存儲(chǔ)為路徑(例如,“c\disksp_w_picpaths\ParentDisk.vhd”)。在Macintosh系統(tǒng)上,文件定位器是包含“別名”的二進(jìn)制大對(duì)象(blob)。母盤定位器表用于支持跨平臺(tái)移動(dòng)硬盤映像。
一些當(dāng)前的平臺(tái)代碼包括以下:
Platform Code | Description |
None (0x0) | |
Wi2r (0x57693272) | [deprecated] |
Wi2k (0x5769326B) | [deprecated] |
W2ru (0x57327275) | Unicode pathname (UTF-16) on Windows relative to the differencing disk pathname. |
W2ku (0x57326B75) | Absolute Unicode (UTF-16) pathname on Windows. |
Mac (0x4D616320) | (Mac OS alias stored as a blob) |
MacX(0x4D616358) | A file URL with UTF-8 encoding conforming to RFC 2396. |
平臺(tái)數(shù)據(jù)空間占4字節(jié)。此字段存儲(chǔ)存儲(chǔ)母盤定位器所需的512字節(jié)扇區(qū)數(shù)。
平臺(tái)數(shù)據(jù)長(zhǎng)度占4字節(jié)。此字段存儲(chǔ)母盤定位器的實(shí)際長(zhǎng)度(以字節(jié)為單位)。
保留占4字節(jié)。此字段必須設(shè)置為零。
平臺(tái)數(shù)據(jù)偏移占8字節(jié)。該字段存儲(chǔ)存儲(chǔ)平臺(tái)特定文件定位器數(shù)據(jù)的絕對(duì)文件偏移量(以字節(jié)為單位)。
(13)保留占256字節(jié)。初始化為零。
塊分配表簡(jiǎn)稱BAT,是可擴(kuò)展VHD文件格式中一個(gè)重要的結(jié)構(gòu),存儲(chǔ)了虛擬硬盤到VHD文件的地址映射信息。它由可擴(kuò)展虛擬硬盤頭部的“表偏移”字段指向。
BAT的大小是在創(chuàng)建硬盤期間計(jì)算的。BAT中的條目數(shù)是完全展開時(shí)存儲(chǔ)磁盤內(nèi)容所需的塊數(shù)。例如,使用2 MB塊的基本單位數(shù)據(jù)塊來(lái)存儲(chǔ)2GB數(shù)據(jù),磁盤映像需要1024個(gè)BAT條目。 每個(gè)條目都是4個(gè)字節(jié)長(zhǎng),那么大小就為4096個(gè)字節(jié)。,從塊分配表的第1個(gè)字節(jié)(0x600)開始,所有未使用的表?xiàng)l目都初始化為0xFFFFFFFF。
BAT總是擴(kuò)展到扇區(qū)邊界。 可擴(kuò)展磁盤頭部中的“大表?xiàng)l目”字段指示有多少條目有效。
BAT的條目存儲(chǔ)了虛擬硬盤的塊地址映射到VHD文件的絕對(duì)扇區(qū)偏移量,表示虛擬硬盤的塊中的數(shù)據(jù)存儲(chǔ)在VHD 文件中以該扇區(qū)開始的數(shù)據(jù)塊內(nèi)。如果向虛擬硬盤的塊寫入數(shù)據(jù),那對(duì)應(yīng)的塊分配表的條目為該塊在VHD文件分配空間;如果虛擬硬盤的塊沒(méi)有數(shù)據(jù)寫入,那對(duì)應(yīng)的塊分配表?xiàng)l目就不分配空間。這保證了虛擬硬盤通過(guò)塊分配表的動(dòng)態(tài)更新可以隨時(shí)向VHD 文件寫入數(shù)據(jù),也闡明了VHD文件容量的動(dòng)態(tài)變化。
其具體的流程圖如下圖所示:
上圖中描述了虛擬硬盤的數(shù)據(jù)塊到VHD文件的數(shù)據(jù)塊的映射關(guān)系。塊分配表的條目與虛擬硬盤塊的數(shù)目是保持一致的,且硬盤的第n個(gè)塊對(duì)應(yīng)塊分配表的條目n,也就是一一對(duì)應(yīng)的關(guān)系,這樣的好處是方便的進(jìn)行讀取的時(shí)候按順序查找所存儲(chǔ)的數(shù)據(jù)在哪個(gè)數(shù)據(jù)塊上。但VHD文件的數(shù)據(jù)區(qū)的數(shù)據(jù)塊的順序不與此對(duì)應(yīng)。圖中,塊分配表的條目0為虛擬硬盤的第0塊分配到VHD文件中以某扇區(qū)開始的第1塊,即寫入虛擬硬盤第0 塊的數(shù)據(jù)會(huì)存儲(chǔ)在VHD 文件的某扇區(qū)第1塊數(shù)據(jù)塊區(qū)域,這里的某扇區(qū)即是VHD文件存儲(chǔ)在真實(shí)硬盤上的扇區(qū)。因此我們就可以理順VHD虛擬硬盤快分配表的工作模式了:
1)、數(shù)據(jù)寫入到虛擬硬盤數(shù)據(jù)塊。數(shù)據(jù)首先寫入到VHD虛擬硬盤的數(shù)據(jù)塊中;
2)、記錄塊分配表。然后根據(jù)其數(shù)據(jù)塊寫入的對(duì)應(yīng)塊分配表,記錄相應(yīng)的虛擬硬盤數(shù)據(jù)塊到VHD文件的數(shù)據(jù)區(qū)域的數(shù)據(jù)塊的地址映射信息。
數(shù)據(jù)塊由扇區(qū)位圖和數(shù)據(jù)組成。對(duì)于VHD可擴(kuò)展硬盤,扇區(qū)位圖指示了哪些扇區(qū)包含有效數(shù)據(jù)(值為1),以及哪些扇區(qū)未被使用(值為0)。對(duì)于差異硬盤,扇區(qū)位圖指示哪些扇區(qū)位于差異磁盤(值為1)內(nèi),哪些扇區(qū)位于母盤(值為0)中。位圖總計(jì)有512字節(jié)即一個(gè)扇區(qū)大小。
塊是扇區(qū)倍數(shù)的乘方。默認(rèn)情況下,塊的大小為4096個(gè)512字節(jié)扇區(qū)(2 MB)。虛擬硬盤的所有塊必須具有相同的大小。此大小在可擴(kuò)展虛擬硬盤頭部的“塊大小”字段中定義。
位圖中的相應(yīng)位為零的塊中的所有扇區(qū)必須在虛擬硬盤上包含512字節(jié)的零。訪問(wèn)磁盤映像的軟件可以利用該假設(shè)來(lái)提高性能。
虛擬硬盤的塊經(jīng)塊分配表分配空間后,指向數(shù)據(jù)塊中的扇區(qū)位圖,通過(guò)查看扇區(qū)位圖的每一位,確認(rèn)塊數(shù)據(jù)區(qū)的使用情況,然后進(jìn)行對(duì)數(shù)據(jù)的操作。
明白了上述的基本知識(shí)之后,我們來(lái)說(shuō)說(shuō)如何實(shí)現(xiàn)可擴(kuò)展的虛擬硬盤?
首先,數(shù)據(jù)塊按需分配。創(chuàng)建可擴(kuò)展的虛擬硬盤時(shí),最初不為其分配數(shù)據(jù)塊。新創(chuàng)建的映像僅包含前面描述的數(shù)據(jù)結(jié)構(gòu)(包括可擴(kuò)展的虛擬硬盤頭部和塊分配表BAT)。
當(dāng)數(shù)據(jù)寫入映像時(shí),可擴(kuò)展的虛擬硬盤將為寫入的數(shù)據(jù)擴(kuò)展一個(gè)個(gè)新的數(shù)據(jù)塊。然后BAT被一一對(duì)應(yīng)進(jìn)行更新,以包含在映像內(nèi)分配的每個(gè)新數(shù)據(jù)塊的偏移量。
VHD有一個(gè)計(jì)算公式可以讓虛擬硬盤知道其將虛擬硬盤的數(shù)據(jù)塊中的扇區(qū)映射到VHD映像文件塊中的那個(gè)扇區(qū)。
要從引用的扇區(qū)號(hào)計(jì)算塊號(hào),該公式如下所示:
BlockNumber = floor(RawSectorNumber / SectorsPerBlock)
SectorInBlock = RawSectorNumber%SectorsPerBlock
BlockNumber用作BAT的索引。 BAT條目包含塊位圖開始的絕對(duì)扇區(qū)偏移,后面跟塊的數(shù)據(jù)。以下公式可用于計(jì)算數(shù)據(jù)的位置:
ActualSectorLocation = BAT[BlockNumber] + BlockBitmapSectorCount + SectorInBlock
以這種方式,可以以任何順序分配塊,同時(shí)保持其通過(guò)BAT的排序找到數(shù)據(jù)。
當(dāng)新分配一個(gè)數(shù)據(jù)塊時(shí),頁(yè)腳區(qū)域必須被推回到文件的末尾。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
標(biāo)題名稱:PVS架構(gòu)之VHD虛擬磁盤-創(chuàng)新互聯(lián)
鏈接地址:http://bm7419.com/article42/dpddec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、App設(shè)計(jì)、網(wǎng)站導(dǎo)航、網(wǎng)站制作、網(wǎng)站改版、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容