PVS架構中的VHD虛擬磁盤怎么理解,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
差異虛擬硬盤將差異虛擬硬盤本身內的母盤文件定位器存儲起來,當驅動嘗試打開差異硬盤時,將同時打開差異虛擬硬盤和母盤。 母盤也可以是差異虛擬硬盤,在這種情況下,可能有一連串差異虛擬硬盤,最終終止于非差異虛擬硬盤。
母盤定位器表僅由差異虛擬硬盤來使用,如本文前面的“可擴展虛擬硬盤頭部格式”中所述。差異虛擬硬盤是一種可擴展的VHD,它的文件結構與可擴展VHD相同,只是在頁腳區域中“類型”字段為4,表示這是一個差異虛擬硬盤。由于差異虛擬硬盤不能獨立運行,須依賴其母盤,因此在頭部中的“母盤UUID”、“母盤名稱”及“母盤定位器”等字段存儲著有關重要信息:母盤UUID、母盤名稱用于差異虛擬硬盤識別母盤;母盤定位器存儲著差異虛擬硬盤在不同平臺(Windows或Mac等)上的母盤的定位編碼信息,用于在不同平臺上的遷移操作。
在Windows中,有兩種類型的平臺定位器:W2ku和W2ru。 前者是母盤的絕對路徑名,后者是母盤相對于差異虛擬硬盤的路徑名。
例如,位于Windows的計算機上的根驅動器中的母盤映像將存儲格式如下:
Type | Example |
W2ku | c:\directory\parent.vhd |
W2ru | .\directory\parent.vhd |
相對路徑名的優點是它允許差異虛擬硬盤和母盤移植到不同的位置。使用絕對路徑名,每當移動母盤時,必須顯式重新鏈接母盤和子硬盤。
當創建差異虛擬硬盤時,如果可能,應該初始化相應平臺上的兩種類型的平臺定位器的路徑名。
差異虛擬硬盤的寫操作:
對于寫操作,所有數據都將寫入差異虛擬硬盤映像。對于寫入特定塊的所有扇區,塊位圖被標記為dirty。
差異虛擬硬盤的讀操作:
當驅動讀取硬盤映像的扇區時,虛擬硬盤子系統檢查差異虛擬硬盤中的塊位圖。然后硬盤子系統從差異虛擬硬盤中讀取標記為dirty的扇區,并從母盤讀取標記為clean的扇區。
例如,考慮在母盤映像和子硬盤映像中都保存扇區4096至8191的塊。塊的第一個扇區保存該塊的位圖。單個單元格表示位圖中的一個位,黑點×××表示塊中的特定扇區已被數據寫入。
母盤數據塊:
4096 |
4097 |
4098 |
4099 |
4100 |
4101 | ● 4102 | ● 4103 | ● 4104 |
4105 |
4106 |
4107 | ||||||||
Clean | Clean | Clean | Clean | Clean | Clean | dirty | dirty | dirty | |||||||||||
Clean | Clean | Clean | Clean | Clean | Clean | dirty | dirty | dirty | |||||||||||
Clean | Clean | Clean | Clean | Clean | Clean | dirty | dirty | dirty |
差異虛擬硬盤子數據塊:
4096 |
4097 |
4098 |
4099 |
4100 |
4101 | ● 4102 | ● 4103 | ● 4104 |
4105 |
4106 |
4107 | ||||||||
Clean | Clean | Clean | Clean | Clean | Clean | dirty | dirty | dirty | |||||||||||
Clean | Clean | Clean | Clean | Clean | Clean | dirty | dirty | dirty | |||||||||||
Clean | Clean | Clean | Clean | Clean | Clean | dirty | dirty | dirty |
如果上層驅動發出從4098到4104的扇區的讀取操作,則硬盤子系統將從母盤塊讀取扇區4098到4101,并且將從差異虛擬硬盤子塊中讀取4102到4104。
如果驅動針對扇區從4102到4106發出寫操作,則整個數據將被寫入差異虛擬硬盤子塊,并且位圖將被標記為dirty,用于差異虛擬硬盤子塊中的扇區4105和4106。
差異虛擬硬盤子數據塊:
4096 |
4097 |
4098 |
4099 |
4100 |
4101 | ● 4102 | ● 4103 | ● 4104 |
4105 |
4106 |
4107 | ||||||||
Clean | Clean | Clean | Clean | Clean | Clean | dirty | dirty | dirty | |||||||||||
Clean | Clean | Clean | Clean | Clean | Clean | dirty | dirty | dirty | |||||||||||
Clean | Clean | Clean | Clean | Clean | Clean | dirty | dirty | dirty |
針對扇區從4102到4106發出寫操作:
4096 |
4097 |
4098 |
4099 |
4100 |
4101 | ● 4102 | ● 4103 | ● 4104 | ● 4105 | ● 4106 |
4107 | ||||||||
Clean | Clean | Clean | Clean | Clean | Clean | dirty | dirty | dirty | dirty | dirty | |||||||||
Clean | Clean | Clean | Clean | Clean | Clean | dirty | dirty | dirty | dirty | dirty | |||||||||
Clean | Clean | Clean | Clean | Clean | Clean | dirty | dirty | dirty | dirty | dirty |
綜上,使用差異虛擬硬盤模式時,會同時打開差異虛擬硬盤和它的母盤。當對一個差異虛擬硬盤進行寫操作時,會把所寫入的數據存儲在差異虛擬硬盤上,不對母盤改動;當對其進行讀操作時,如果所讀數據已經修改,則讀取存儲在差異虛擬硬盤上的改動數據,數據沒有改動則讀取母盤的原始數據。如果讀取的數據包含了母盤的原始數據和差異虛擬硬盤上的改動數據,則先讀取母盤的原始數據,然后在讀取差異虛擬硬盤上的改動數據并將其組合為統一的數據。
對于固定方式的VHD 文件,虛擬硬盤的扇區與文件的扇區順序對應,對固定方式VHD 進行尋址,通過頁腳區域查找對應扇區即可。
對于可擴展的VHD,其數據塊由塊分配表動態分配,其虛擬硬盤和VHD 文件的地址要經過層次的索引,進而達到存儲或讀寫數據的目的。
詳細說明如下:
(1)讀可擴展VHD文件的頁腳區域,通過頁腳區域的“類型”“數據偏移量”等字段,確定是否是可擴展VHD 文件以及頭部的位置在哪兒。
(2)讀取頭部,確定塊大小,塊分配表的位置和數量。
(3)找到塊分配表,定位對應塊分配條目,讀取條目的值。
(4)根據分配表條目的值,確定其值(數據塊的扇區位圖地址)對應的數據塊,讀取扇區位圖,確定數據區域的扇區使用情況,然后讀取數據;若分配表條目的值為0xFFFFFFFF,說明該數據塊未寫入任何數據。
(1)讀差異VHD文件的頁腳區域,通過頁腳區域的“類型”“數據偏移量”等字段,確定是否是差異VHD 文件以及頭部的位置在哪兒。
(2)讀取頭部,通過頭部中的“母盤UUID”、“母盤名稱”及“母盤定位器”等字段確定母盤位置,然后確定差異虛擬硬盤本身的塊大小,塊分配表的位置和數量。
(3)找到母盤,重復可擴展模式下的尋址過程,找到所需要讀取的數據;同時,其差異虛擬硬盤本身找尋自己的塊分配表,定位對應塊分配條目,讀取條目的值。
(4)根據分配表條目的值,確定其值(數據塊的扇區位圖地址)對應的數據塊,讀取扇區位圖,確定數據區域的扇區使用情況,然后讀取數據;若分配表條目的值為0xFFFFFFFF,說明該數據塊未寫入任何數據。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。