共計 2902 個字符,預計需要花費 8 分鐘才能閱讀完成。
PVS 架構中的 VHD 虛擬磁盤怎么理解,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
1、差異虛擬硬盤
差異虛擬硬盤將差異虛擬硬盤本身內的母盤文件定位器存儲起來,當驅動嘗試打開差異硬盤時,將同時打開差異虛擬硬盤和母盤。母盤也可以是差異虛擬硬盤,在這種情況下,可能有一連串差異虛擬硬盤,最終終止于非差異虛擬硬盤。
母盤定位器表僅由差異虛擬硬盤來使用,如本文前面的“可擴展虛擬硬盤頭部格式”中所述。差異虛擬硬盤是一種可擴展的 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
綜上,使用差異虛擬硬盤模式時,會同時打開差異虛擬硬盤和它的母盤。當對一個差異虛擬硬盤進行寫操作時,會把所寫入的數據存儲在差異虛擬硬盤上,不對母盤改動;當對其進行讀操作時,如果所讀數據已經修改,則讀取存儲在差異虛擬硬盤上的改動數據,數據沒有改動則讀取母盤的原始數據。如果讀取的數據包含了母盤的原始數據和差異虛擬硬盤上的改動數據,則先讀取母盤的原始數據,然后在讀取差異虛擬硬盤上的改動數據并將其組合為統一的數據。
2、VHD 虛擬硬盤的尋址過程
對于固定方式的 VHD 文件,虛擬硬盤的扇區與文件的扇區順序對應,對固定方式 VHD 進行尋址,通過頁腳區域查找對應扇區即可。
對于可擴展的 VHD,其數據塊由塊分配表動態分配,其虛擬硬盤和 VHD 文件的地址要經過層次的索引, 進而達到存儲或讀寫數據的目的。
詳細說明如下:
(1)讀可擴展 VHD 文件的頁腳區域,通過頁腳區域的“類型”“數據偏移量”等字段,確定是否是可擴展 VHD 文件以及頭部的位置在哪兒。
(2)讀取頭部,確定塊大小,塊分配表的位置和數量。
(3)找到塊分配表,定位對應塊分配條目,讀取條目的值。
(4)根據分配表條目的值,確定其值(數據塊的扇區位圖地址)對應的數據塊,讀取扇區位圖,確定數據區域的扇區使用情況,然后讀取數據;若分配表條目的值為 0xFFFFFFFF,說明該數據塊未寫入任何數據。
(1)讀差異 VHD 文件的頁腳區域,通過頁腳區域的“類型”“數據偏移量”等字段,確定是否是差異 VHD 文件以及頭部的位置在哪兒。
(2)讀取頭部,通過頭部中的“母盤 UUID”、“母盤名稱”及“母盤定位器”等字段確定母盤位置,然后確定差異虛擬硬盤本身的塊大小,塊分配表的位置和數量。
(3)找到母盤,重復可擴展模式下的尋址過程,找到所需要讀取的數據;同時,其差異虛擬硬盤本身找尋自己的塊分配表,定位對應塊分配條目,讀取條目的值。
(4)根據分配表條目的值,確定其值(數據塊的扇區位圖地址)對應的數據塊,讀取扇區位圖,確定數據區域的扇區使用情況,然后讀取數據;若分配表條目的值為 0xFFFFFFFF,說明該數據塊未寫入任何數據。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。