wta网球比分直播
  • WAP手機版 加入收藏  設為首頁
硬盤恢復

虛擬硬盤:VHDX解析

時間:2017-12-26 15:57:58   作者:成都數據恢復中心   來源:網絡轉載   閱讀:1880   評論:0
內容摘要:虛擬硬盤是虛擬化的關鍵。當一個服務器通電時,每個虛擬機加載到服務器內存并從其相應的VHDX文件啟動。隨著虛擬機的運行,VHDX文件可通過更新來反映數據或狀態改變。本質上來說,虛擬磁盤就是放在物理硬盤上的一個單獨的文件。虛擬磁盤文件的目的是捕獲駐留在服務器內存的虛擬機的完整狀態,并...

虛擬硬盤是虛擬化的關鍵。當一個服務器通電時,每個虛擬機加載到服務器內存并從其相應的VHDX文件啟動。隨著虛擬機的運行,VHDX文件可通過更新來反映數據或狀態改變。本質上來說,虛擬磁盤就是放在物理硬盤上的一個單獨的文件。虛擬磁盤文件的目的是捕獲駐留在服務器內存的虛擬機的完整狀態,并將信息以一個已明確的磁盤文件格式顯示出來。下面我們來說說虛擬硬盤VHDX的技術實現。

在前面的文章中曾經描述了VHD虛擬硬盤的文件格式以及尋址等技術,在本文下面部分將描述VHD虛擬硬盤的升級版本VHDX的文件格式以及尋址等技術。在VHDX虛擬硬盤中,也存在著和VHD虛擬硬盤同樣的是三種類型:固定、動態以及差異。但是與VHD虛擬硬盤所不同的是,VHDX虛擬硬盤針對這三種類型的格式都是統一的格式架構。

首先我們介紹下VHDX的一些基本的信息:VHDX格式功能在操作系統的硬盤系統層以及操作系統的文件系統層提供,并經過優化,可與現代存儲硬件配置配合使用。在操作系統的硬盤系統層,VHDX能夠支持虛擬磁盤的大小高達64TB,以前的VHD只支持到2TB;支持的邏輯扇區大小高達4 KB,有助于將4 KB物理磁盤扇區轉換為虛擬磁盤,并支持高達256 MB的虛擬磁盤的大數據塊,使得我們可以調整數據塊大小并與應用程序或系統的IO模式相匹配,也就是說,相比VHDVHDX 提供更大的塊容量和扇區容量,可以提供更高的性能。在操作系統的文件系統層,VHDX使用日志記錄VHDX元數據結構的更新,可避免因電源故障等損壞數據,提供內置的保護能力;元數據區設立用戶元數據區,能夠存儲有關用戶的自定義元數據。同時,VHDX 還改進了虛擬硬盤的對齊方式,不但以此可以適應新型物理磁盤,還可以改進和優化VHDX文件的大小。而且VHDX格式的設計還為今后做了考慮,微軟將來可以在此基礎上方便的引入其他功能,也允許其他第三方的解析器實現對VHDX文件的擴展等等。

下面我們來看一下VHDX文件的架構:

與舊的VHD 格式相比,VHDX 的結構有了較大的改變。下圖描述了VHDX 的邏輯布局架構。

技術分享

從上圖我們可以看到,VHDX文件和VHD文件的結構有很大的區別:

1)VHDX 沒有VHD中的頁腳區域;

2)、增加了VHD所沒有的日志區域;

3)、增加了元數據區域,其內設置了系統元數據區域和用戶元數據區域;

如果看這個比較抽象,那么我們看看VHDX文件的文件布局圖:

技術分享

如上圖所示,一個VHDX文件總體上可以由三個部分組成:

1、固定大小的頭部區域(1MB

2、非重疊的對象

3、自由空間

VHDX文件以固定1MB大小的頭部區域開頭。此后,非重疊對象和自由空間以任何特定順序自由組合唯一的限制是所有對象在文件中需要按照1 MB大小對齊。非重疊對象的意思就是當前定義的這些對象:塊分配表(也稱為BAT),元數據區域,日志,有效載荷塊(數據塊)和扇區位圖塊。這些對象不能相互重疊,比如元數據區域和元數據區域之間不能連著在一起,只要對象不重疊并且保持MB對齊,就可以在文件中自由移動對象。

技術分享

例如,其中一個VHDX文件:

技術分享

由上圖所示:VHDX文件的結構由頭部、日志、塊分配表(也稱為BAT)、扇區位圖、數據塊(有效載荷塊)、自由空間、元數據區等這樣的結構組成。在后面的部分,自由空間和這些對象進行了自由組合。

下面將詳細講解這些組成對象:

1、首部區域



VHDX文件的頭部區域是虛擬硬盤上的第一個對象,是打開VHDX文件時首先檢查的結構。頭部大小為1 MB,包含五個大小為64 KB的項目:文件類型標識符,兩個標頭和兩個區域表。

技術分享

其文件布局如下圖所示:

技術分享

1.1、文件類型標識符



文件類型標識符占64KB大小。包含一個簡短的固定文件簽名和一個文件創建者字段,文件簽名字段必須為0x656C696678646876(“vhdxfile”為ASCII),用以將文件標識為VHDX;文件創建者字段用于標識VHDX文件的創建者。其結構體如下圖所示:

技術分享

文件類型標識符存儲在從VHDX文件偏移量為0開始的前64KB中。該區域不會被覆蓋,確保即使因為寫入失敗破壞了文件的扇區,該文件仍然可以被識別為VHDX

文件簽名字段包含了描述文件類型是VHDX的一個UINT64結構體。文件創建者字段包含描述創建VHDX文件的解析器的UTF-16字符串。此字段不能為空并且是可選的,如果沒有填入的情況下,默認置零值。該字段是解析器在創建VHDX文件的時候,填充的一個唯一可以標識VHDX文件創建者的字符。這個字段在目的是用于解析器在出現錯誤的時候讀取該字段來進行診斷問故障問題的,不會使用此字段影響解析器的行為。

解析器必須在創建文件時寫入文件類型標識符結構,并且在加載VHDX文件時必須驗證簽名字段。在創建文件后,解析器不能覆蓋文件的前64 KB中的任何數據。


1.2、標頭(Headers)



每個標頭占64KB大小,兩個頭部區域中的每一個標頭都是相同的。一個標頭存儲在偏移量為64 KB處開始的地方,另一個標頭存儲在128 KB處開始的地方。標頭的作用是用來定位日志的,因此無法通過日志對標頭進行更新。為了提供電源故障一致性保證,每個VHDX文件中都有兩個標頭。

標頭作為VHDX根數據結構樹,提供版本信息,日志的位置和大小以及一些基本的文件元數據。其結構體如下圖所示:

技術分享

如上圖,標頭本身包含了簽名、校驗和、序列號、文件寫入全局唯一標識符、數據寫入全局唯一標識符、日志全局唯一標識符、日志版本、版本、日志長度、日志偏移以及保留部分組成。除了標識標頭本身以及日志的信息外,標頭本身還包含了基于本身HA機制的序列號和校驗和等元數據,這些數據只用于標頭本身的高可用。上述我們說明了,頭部區域包含了兩個標頭,因此在這里,頭部區域中每次只有一個標頭處于活動狀態,另外一個標頭處于待命狀態。這樣的機制可以使得VHDX的標頭增加安全性,當當前使用的標頭遭到破壞的時候,可以安全地使用或覆蓋另一個標頭,從而保證VHDX文件不被破壞。因此在標頭中,每個標頭都額外包含了序列號和校驗和來確保這種機制。

下面我們詳細說明每個字段:

1)、簽名字段:簽名字段必須為0x64616568(“headASCII表示)。該字段標識其為一個標頭。

2)、校驗和字段:校驗和字段是一個CRC-32C哈希結構,是對4 KB為單位結構利用CRC-32C哈希出來的值。該字段不為空,在計算校驗和值期間取值為零。

3)、序列號字段:是一個64位無符號整數。如果簽名和校驗和都正確驗證,則表示標頭是有效的。如果標頭是有效的標頭并且其序列號字段大于另一個標頭的序列號字段,則該標頭是處于活動狀態的標頭。解析器通過讀取序列號的值來確定使用當前那個標頭的數據。如果序列號值相同或者沒有值,則無法確定當前的活動標頭,則解析器會認為VHDX文件已損壞。

4)、文件寫入全局唯一標識符字段:該字段指定一個128位全局唯一標識符來標識文件寫入的內容。在每次打開VHDX文件時,解析器必須在對文件進行第一次修改之前將此全局唯一標識符更改為新的全局唯一標識符,包括系統和用戶元數據以及日志回收。如果存儲文件的存儲介質為只讀,或者該文件在只讀模式下打開,解析器則會跳過此字段。

5)、數據寫入全局唯一標識符字段:該字段指定一個128位的全局惟一標識符來標識用戶可見數據的內容。在每次打開VHDX文件時,解析器必須對用戶可見數據進行第一次修改之前將此字段更改為新的全局唯一標識符。如果虛擬磁盤的用戶通過讀取虛擬磁盤來進行數據的更改,則解析器必須更新此字段。這包括更改系統和用戶元數據,原始塊數據,磁盤大小或數據塊轉換的狀態。因為如果不更新這個字段,將導致虛擬磁盤扇區讀取與先前讀取的數據不同,因為數據已經發送更改操作,可能新的數據塊已經存儲到了別的地方。值得注意的是,這不包括文件中數據塊的移動,因為數據塊的移動僅僅是改變文件的物理布局,而不是虛擬磁盤的布局。數據寫入全局唯一標識符字段用于差異VHDX鏈的完整性驗證。解析器必須特別注意以確保它們按照所述進行更新。

6)、日志全局唯一標識符字段:該字段指定一個128位的唯一標識符用于確定日志條目的有效性。如果此字段為零,則日志為空或沒有有效條目,不能使用日志進行數據恢復。只有在標頭中包含此標識符的日志條目時才是有效的日志條目。打開時,解析器必須在覆蓋日志區域中的現有空間之前將此字段更新為新的非零值。

7)、日志版本字段:該字段指定VHDX文件中使用的日志格式的版本。 此字段必須設置為零。 如果不是,解析器不能繼續解析文件,除非日志全局唯一標識符字段為零,表示沒有要回放的日志。

8)、版本字段:該字段指定VHDX文件中使用的VHDX格式的版本。此字段必須設置為1。如果不是,解析器就不能使用此格式規范中的詳細信息來解析文件。

9)、日志長度和偏移量字段:該字段指定文件中的字節偏移量和日志的長度。這些值必須是1 MB的倍數,而且日志偏移量必須至少1 MB大小。

10)、保留字段:保留字段定義了剩余的空間的區域地址信息。

上述就是處于頭部區域中標頭的介紹部分。我們說在頭部區域中存在著兩個標頭作為HA機制而存在,而且由于VHDX格式中固定、動態以及差異都是同一種結構。因此隨著數據的是變化,比如數據的動態增加,其頭部區域的標頭部分所記錄的鍵值也需要進行隨時更新。下面我們來說說頭部區域中標頭的更新機制。

在每次打開VHDX文件并允許寫入VHDX文件時,必須在修改文件的之前(文件的任何部分)更新標頭。同時,在使用VHDX文件時,當虛擬硬盤或VHDX文件上的操作影響標頭中包含的字段時,也需要更新標頭。

第一次在打開VHDX文件后更新標頭,解析器必須為文件寫入全局唯一標識符字段生成新的隨機值。在用戶請求可能影響虛擬磁盤內容或用戶可見虛擬磁盤元數據(如磁盤大小或扇區大小)的操作之前,解析器不應更新DataWriteGuid字段。

解析器可以遵循以下過程將非當前報頭改變為當前報頭:

1.標識當前標頭和非當前標頭。

2.在內存中生成一個新標題。將SequenceNumber字段設置為當前標頭的SequenceNumber字段加一。

3.根據需要將其他字段設置為其當前值或更新值。如果這是會話中的第一個頭更新,請為FileWriteGuid使用一個新值。

4.檢查內存中的標頭。

5.使用內存中頭部覆蓋文件中的非當前頭部。發出flush命令以確保主機磁盤存儲介質上的標題更新是穩定的。

在此過程之后,非當前頭成為當前頭。解析器應該再次執行更新過程,以便當前和非當前頭部都包含最新的信息;這確保如果一個頭損壞,該文件仍然可以打開。


1.3、區域表



區域表列出了文件中的虛擬連續,可變大小,MB對齊的數據片段的區域。這些對象當前包括BAT和元數據區域,但是可以通過解析器或未來對規范的修訂來擴展,而不破壞不同解析器的實現和版本的兼容性。解析器必須保持他們不理解的對象而不破壞它們。解析器必須無法打開包含標記為必需但該解析器不理解的區域的VHDX文件。

區域表由一個標題后跟可變數量的條目組成,這些條目指定文件中區域的標識和位置。區域表的兩個副本存儲在文件偏移量192 KB256 KB。必須通過日志更新區域表結構。

技術分享

其中區域表的頭部包含以下內容:

技術分享

簽名字段必須為0x69676572

校驗和字段是整個64 KB表上的CRC-32C哈希值,該字段在計算校驗和值期間,默認取值為零,直到算出校驗和為止。

條目數字段指定要遵循的有效條目的數量。這個值必須小于或等于2047

而區域表的后半段區域表條目部分,其組成結構如下所示:

技術分享

Guid字段指定對象的128位標識符,并且必須是唯一值。

文件偏移量字段和長度字段指定文件中對象的64位字節偏移量和32位字節長度。這些值必須是1 MB的倍數,其中文件偏移量字段必須至少為1 MB

在該表中的所有對象不能夠重疊,不僅相對于區域表條目內部彼此之間,也相對于日志(在頭部中定義)和數據塊和扇區位圖塊(在BAT中定義)。

必需字段指定該區域是否必須由解析器識別才能加載VHDX文件。 如果此字段的值為1,并且解析器無法識別此區域,則解析器必須拒絕加載VHDX文件。

保留區域表記錄的是保留的空間地址段

下表總結了VHDX規范中定義的區域的屬性。


技術分享


標簽:虛擬 硬盤 解析 
相關評論
不良信息舉報中心成都網警網警110報警服務AAA級互聯網行業信用360網站安全檢測

數據恢復QQ交流群:378664983    站長QQ:958754010

客戶服務 商務服務
蜀ICP備14015947號-2
wta网球比分直播 华东15选5基本走势图 彩经网 20选5开奖 大发排列3开奖基拉 足彩即时赔率 asg游戏豆理财平台 水果大爆发 nba热火vs步行者直播 北京十一选五 山东十一选五的开奖 长峰河南母乳が 114配资平台查询 吉林十一选五 澳洲幸运5计划 七度日韩成人片 腾讯股票行情 十分十一选五走势图