陳培德,吳建平
(云南大學 信息學院,云南 昆明 650223)
全局唯一標識GPT是globally unique identifier partition table的縮寫,其含義是“全局唯一標識磁盤分區(qū)表”[1],它是可擴展固件接口(EFI)標準的一部分[2]。GPT的出現(xiàn)是為了替代舊式的MBR(master boot record)[3],主要解決了MBR分區(qū)表不支持容量大于2.2 TB的分區(qū)問題[4]。
由于MBR分區(qū)最多包含4個項目,多于4分區(qū)則采用擴展分區(qū)的形式來管理,每個分區(qū)項目定義了主分區(qū)在磁盤上的位置[5]。
目前,微軟公司W(wǎng)indows 10使用了GPT磁盤分區(qū)格式,同時Windows 10不再支持MBR。計算機如果使用Windows 10就必須采用MBR分區(qū)格式,這樣不同分區(qū)表誤操作、誤轉(zhuǎn)換的結果是硬盤中原有的磁盤分區(qū)表丟失,磁盤中的數(shù)據(jù)不能正常讀取。在Windows 7和Windows 10用戶數(shù)量龐大的今天,這種因GPT分區(qū)表問題導致硬盤中的數(shù)據(jù)無法讀取和使用的問題較為突出[6]。
當GPT存儲磁盤出現(xiàn)誤操作或操作系統(tǒng)本身故障所造成的分區(qū)表損壞、數(shù)據(jù)不可見、不可讀的數(shù)據(jù)等問題的時候,有可能是GPT分區(qū)表的邏輯出錯,可以通過一定的技術手段,對保存在臺式機硬盤、筆記本硬盤、服務器硬盤等設備上丟失的寶貴數(shù)據(jù)進行搶救和恢復。
從整體來看,GPT磁盤主要由6大部分組成[7]。即保護MBR、GPT頭、GPT分區(qū)表、GPT分區(qū)區(qū)域(即文件系統(tǒng)所在區(qū)域)、GPT分區(qū)表備份和GPT頭備份[8]。大致結構如圖1所示[8](注:假設GPT磁盤的扇區(qū)號范圍為0 ~n-1,其中n為GPT磁盤的總扇區(qū)數(shù))。
圖1 GPT磁盤的整體結構
(1)保護MBR。
保護MBR位于GPT磁盤的0號扇區(qū)[9],也是由主引導記錄、磁盤簽名、MBR分區(qū)表和結束標志4個部分組成[10-11]。在MBR分區(qū)表中,分區(qū)標志為0XEE[2],相對扇區(qū)為1,總扇區(qū)數(shù)為4 294 967 295,也就是分區(qū)總數(shù)的最大值[2],即該磁盤已經(jīng)被GPT分區(qū)占用,不能再進行MBR分區(qū)。
(2)GPT頭。
GPT頭位于GPT磁盤的1號扇區(qū)[12],該扇區(qū)是在將MBR磁盤轉(zhuǎn)換成GPT磁盤后自動生成的,GPT頭定義了GPT分區(qū)各參數(shù)的基本信息[12],GPT頭也就是對整個GPT磁盤的整體描述。其定義如表1所示。
表1 GPT頭各項參數(shù)含義
續(xù)表1
(3)GPT分區(qū)表。
GPT分區(qū)表位于GPT磁盤的2~33號扇區(qū),共占用32個扇區(qū),每個分區(qū)表占128字節(jié),最多可以容納128個分區(qū)表,由于第1個分區(qū)表為系統(tǒng)保留,所以用戶在GPT磁盤上最多可以再建立127個分區(qū),每個分區(qū)表管理一個分區(qū)。其定義如表2所示。
表2 GPT分區(qū)表各項參數(shù)含義
表3 GPT分區(qū)類型GUID定義說明[2]
(4)分區(qū)區(qū)域。
GPT分區(qū)區(qū)域是整個GPT磁盤中最大的區(qū)域,位于GPT磁盤的中間位置,GPT分區(qū)區(qū)域的開始扇區(qū)和結束扇區(qū)由GPT頭定義[2],一般情況下,開始扇區(qū)為34號扇區(qū),而結束扇區(qū)為GPT磁盤總扇區(qū)數(shù)減去35。該區(qū)域由多個具體的分區(qū)組成,如:微軟保留分區(qū)、EFI系統(tǒng)分區(qū)、LDM元數(shù)據(jù)分區(qū)、LDM數(shù)據(jù)分區(qū)、OEM分區(qū)和主分區(qū)等[2]。各分區(qū)的開始扇區(qū)和結束扇區(qū)在各分區(qū)表中均有定義。
(5)分區(qū)表備份。
一般情況下,分區(qū)表備份位于GPT磁盤的倒數(shù)33號扇區(qū)~倒數(shù)2號扇區(qū),也是占用32個扇區(qū),是GPT分區(qū)表位于GPT磁盤的2~33號扇區(qū)的備份。其定義如表4所示。
表4 GPT頭備份各參數(shù)含義
(6)GPT頭備份。
GPT頭備份位于GPT磁盤的倒數(shù)1號扇區(qū),該扇區(qū)也是在將MBR磁盤轉(zhuǎn)換成GPT磁盤后自動生成的,GPT頭備份也是定義了GPT分區(qū)各參數(shù)的基本信息,但該扇區(qū)不是GPT頭的簡單備份,GPT頭備份對GPT分區(qū)各參數(shù)基本信息的定義與GPT頭對GPT分區(qū)各參數(shù)基本信息的定義稍有不同。GPT頭備份也是對整個GPT磁盤的整體描述。
(1)操作系統(tǒng):Windows 7;
(2)數(shù)據(jù)恢復軟件及分析工具:WinHex 15.08。
(1)在Windows 7操作系統(tǒng)下,使用Windows 7的虛擬磁盤管理功能在D盤的根目錄上建立一個名為abc1.vhd的文件,文件大小為1 GB;
(2)將abc1.vhd文件附加為虛擬磁盤1,轉(zhuǎn)換成GPT磁盤;在磁盤1上依次建立6個分區(qū),磁盤1中6個分區(qū)的容量分別為150 MB、60 MB、100 MB、180 MB、230 MB和270 MB;
(3)使用WinHex軟件打開磁盤1,將磁盤1的0號扇區(qū)以文件的形式保存,文件為“保護MBR.vhd”;
將磁盤1的1號扇區(qū)以文件的形式保存,文件為“GPT頭.vhd”;
將磁盤1的2~3號扇區(qū)以文件的形式保存,文件名為“GPT分區(qū)表.vhd”;
將磁盤1的2 097 151號扇區(qū)以文件的形式保存,文件為“GPT頭備份.vhd”;
至此,保護的MBR、GPT頭、GPT分區(qū)表、GPT頭備份的模板已制作完成。
(4)分離abc1.vhd文件。
(1)在Windows 7操作系統(tǒng)下,使用Windows 7的虛擬磁盤管理功能在D盤的根目錄上建立一個名為abc2.vhd的文件,文件大小為2 GB;
(2)將abc2.vhd文件附加為虛擬磁盤2,轉(zhuǎn)換成GPT磁盤;在磁盤1上依次建立4個分區(qū),并對4個分區(qū)進行快速格式化操作,文件系統(tǒng)均選擇NTFS,磁盤1中4個分區(qū)依次對應4個邏輯盤情況如下:
H盤,文件系統(tǒng):NTFS,容量:350 MB
I盤,文件系統(tǒng):NTFS,容量:600 MB
J盤,文件系統(tǒng):NTFS,容量:800 MB
K盤,文件系統(tǒng):NTFS,容量:260 MB
(3)分別在H盤、I盤、J盤和K盤中存儲一些文件夾和文件;
(4)將H盤、I盤、J盤和K盤的GPT分區(qū)刪除;并將GPT磁盤轉(zhuǎn)換為MBR磁盤。
至此,實驗素材已制作完成。
(1)恢復0號扇區(qū)保護的MBR;
(2)恢復GPT頭;
(3)恢復GPT頭備份;
(4)恢復GPT分區(qū)表和GPT分區(qū)表備份。
恢復GPT分區(qū)的基本方法如下:
(1)通過計算機管理中的磁盤管理功能將MBR磁盤轉(zhuǎn)換為GPT磁盤;從而實現(xiàn)恢復0號扇區(qū)保護的MBR、GPT頭和GPT頭備份;
(2)由于將MBR磁盤轉(zhuǎn)換為GPT磁盤后,在2號扇區(qū)只存儲了一個微軟保留的GPT分區(qū)表,所以,GPT頭中的“GPT頭CRC32校驗和”和“GPT分區(qū)表CRC32校驗和”這兩個參數(shù)要重新計算[13];
(3)同理,GPT頭備份中的“GPT頭備份CRC32校驗和”和“GPT分區(qū)表備份CRC32校驗和”這兩個參數(shù)也要重新計算;
(4)通過WinHex的“掃描丟失分區(qū)”獲得4個邏輯盤的開始扇區(qū)號和4個邏輯盤的容量,通過4個邏輯盤的容量可以計算4個邏輯盤的總扇區(qū)數(shù);
(5)通過4個邏輯盤的開始扇區(qū)號和總扇區(qū)數(shù),可以計算4個邏輯盤的結束扇區(qū)號;
(6)將“GPT分區(qū)表.vhd”文件復制到GPT分區(qū)表所在扇區(qū)號,并修改4個GPT分區(qū)表中的開始扇區(qū)號和結束扇區(qū)號;
(7)通過GPT分區(qū)表恢復GPT分區(qū)表備份;
(8)通過GPT分區(qū)表計算GPT頭和GPT頭備份中的“GPT分區(qū)表CRC32校驗和”;
(9)計算GPT頭中的“GPT頭CRC32校驗和”;
(10)計算GPT頭備份中“GPT頭備份CRC32校驗和”。
通過以上操作,可以完整恢復GPT分區(qū)表、GPT分分區(qū)表備份、GPT頭和GPT頭備份。
根據(jù)恢復GPT分區(qū)的基本思路與方法,恢復GPT分區(qū)的步驟如下:
1、獲得4個邏輯盤的基本情況。
(1)在Windows 7操作系統(tǒng)下,啟動WinHex;
(2)文件-->打開-->選擇D盤根目錄上的abc2.vhd文件,打開D盤根目錄上的abc2.vhd文件;
(3)專家-->映象文件為磁盤,將abc2.vhd文件映像為磁盤;
(4)工具-->磁盤工具-->掃描丟失分區(qū),可以獲得4個丟失分區(qū)的基本情況,如圖2所示;
圖2 獲得4個丟失分區(qū)的情況
(5)從圖2可以獲得4個邏輯盤的文件系統(tǒng)、容量和開始扇區(qū)號,填入表5中;
(6)通過各邏輯盤容量可以計算出各邏輯盤的總扇區(qū)數(shù);
H盤總扇區(qū)數(shù)=容量*1 024*1 024/512
=350*1 024*1 024/512
=716 800
I盤總扇區(qū)數(shù)=容量*1 000*1 024*1 024/512
=0.6*1 024*1 024*1 024/512
=1 228 800
J盤總扇區(qū)數(shù)=容量*1 024*1 024*1 024/512
=0.8*1 024*1 024*1 024/512
=1 638 400
K盤總扇區(qū)數(shù)=容量*1 024*1 024/512
=260*1 024*1 024/512
=532 480
(7)通過各邏輯盤的總扇區(qū)數(shù)和DBR所在扇區(qū)號可以計算DBR備份所在扇區(qū)號;
H盤結束扇區(qū)= H盤開始扇區(qū)+H盤總扇區(qū)數(shù)-1
=65 664+716 800-1
=782 463
I盤結束扇區(qū)= I盤開始扇區(qū)+I盤總扇區(qū)數(shù)-1
=782 464+1 228 800-1
=2 011 263
J盤結束扇區(qū)= J盤開始扇區(qū)+J盤總扇區(qū)數(shù)-1
=2 011 264+1 638 400-1
=3 649 663
K盤結束扇區(qū)= K盤開始扇區(qū)+K盤總扇區(qū)數(shù)-1
=3 649 664+532 480-1
=4 182 143
將H盤、I盤、J盤和K盤的總扇區(qū)數(shù)和結束扇區(qū)號填入表5。
表5 磁盤1各邏輯盤基本情況
2、將MBR磁盤轉(zhuǎn)換為GPT磁盤。
(8)在Windows 7操作系統(tǒng)下,使用Windows 7的虛擬磁盤管理功能附加D盤根目錄上的abc2.vhd文件為磁盤1;
(9)將光標移動到“磁盤1 基本2 GB 聯(lián)機”處,右擊,從彈出的快捷菜單中選擇“轉(zhuǎn)換成GPT磁盤(V)”;
至此,磁盤1由MBR磁盤轉(zhuǎn)換為GPT磁盤。
(10)將光標移動到“磁盤1 基本1.97 GB 聯(lián)機”處,右擊,從彈出的快捷菜單中選擇“分離VHD”,將磁盤1分離。
3、重建4個邏輯盤GPT分區(qū)表。
(1)在Windows 7操作系統(tǒng)下,啟動WinHex;
(2)文件-->打開-->選擇D盤根目錄上的abc2.vhd文件,打開D盤根目錄上的abc2.vhd文件;
(3)專家-->映像文件為磁盤,將abc2.vhd文件映像為磁盤;
(4)打開“GPT分區(qū)表.vhd”文件,并全選該文件,單擊“復制”按鈕;
(5)將標移動到abc2.vhd文件的2號扇區(qū)開始位置,單擊“粘貼”按鈕;
(6)視圖-->模板管理器-->GPT Partition table,在圖3中分別輸入4個邏輯盤的開始扇區(qū)和結束扇區(qū)。
圖3 通過模版輸入4個分區(qū)的開始扇區(qū)和結束扇區(qū)
至此,GPT分區(qū)表已恢復。
4、恢復4個邏輯盤GPT分區(qū)表備份。
(7)從GPT頭可以獲得GPT分區(qū)表備份在4 194 271號扇區(qū),將2號扇區(qū)復制到4 194 271號扇區(qū),至此,GPT分區(qū)表備份已恢復。
5、重建GPT頭。
(8)選中2號扇區(qū)到33號扇區(qū),即GPT分區(qū)表所在扇區(qū)號;
(9)工具-->比較Hash值-->CRC32(32Bit),可以獲得GPT分區(qū)表的CRC32校驗和為“F0E2AC5D”;GPT分區(qū)表的CRC32校驗和在GPT頭中的存儲形式采用小頭位序,占4個字節(jié),所以,在GPT頭扇區(qū)偏移0X58~0X5B中的存儲形式為“5D AC E2 F0”;
(10)將1號扇區(qū)偏移0X58~0X5B處的值修改為“5D AC E2 F0”(注:存儲形式);
(11)將1號扇區(qū)偏移0X20~0X23處的值修改為“00 00 00 00 00”(注:存儲形式);
(12)選中1號扇區(qū)偏移0X00~0X5B這92個字節(jié);
(13)工具-->比較Hash值-->CRC32(32Bit),可以獲得GPT頭的CRC32校驗和為“DE370F6F”;GPT頭的CRC32校驗和在GPT頭中的存儲形式采用小頭位序,占4個字節(jié),所以,在GPT頭扇區(qū)偏移0X20~0X23中的存儲形式為“6F 0F 37 DE”;
(14)將1號扇區(qū)偏移0X20~0X23處的值修改為“6F 0F 37 DE”(注:存儲形式);然后存盤。
至此,GPT頭已恢復。
6、重建GPT頭備份。
(15)將光標移動到4 194 303號扇區(qū),將偏移0X58~0X5B處的值修改為“5D AC E2 F0”(注:存儲形式);即修改GPT分區(qū)表備份的CRC32校驗和;
(16)將4 194 303號扇區(qū)偏移0X20~0X23處的值修改為“00 00 00 00 00”(注:存儲形式);
(17)選中4 194 303號扇區(qū)偏移0X00~0X5B,工具-->比較Hash值-->CRC32(32Bit),可以獲得GPT頭的CRC32校驗和為“7E5F9703”;
(18)將4 194 303號扇區(qū)偏移0X20~0X23處的值修改為“03 97 5F 7E”(注:存儲形式);然后存盤。
至此,GPT頭備份已恢復。
完成以上操作后,GPT磁盤中的保護MBR、GPT頭、GPT分區(qū)表、GPT分區(qū)表備份和GPT頭備份已成功恢復。通過計算機管理中的磁盤管理附加abc2.vhd后,在資源管理器中可以看到到H盤、I盤、J盤和K盤符。
如果GPT磁盤總?cè)萘啃∮?.2 TB,且分區(qū)總數(shù)小于4個時,也可以在硬盤0號扇區(qū)通過重建4個MBR的形式來恢復各邏輯盤中的全部數(shù)據(jù)。
由于MBR分區(qū)表存儲在0號扇區(qū),邏輯盤的開始扇區(qū)也就是0號扇區(qū)MBR分區(qū)表中的相對扇區(qū);根據(jù)相對扇區(qū)、總扇區(qū)數(shù)和分區(qū)標志可以得到存儲在0號扇區(qū)的4個MBR分區(qū)表如表6所示。
表6 存儲在0號扇區(qū)的4個MBR分區(qū)
使用WinHex軟件打開abc2.vhd,并映像為磁盤,將H盤、I盤、J盤和K盤的4個MBR分區(qū)填入到0號扇區(qū)偏移0X01BE~0X01FD處,如圖4所示;然后存儲并退出WinHex;即可恢復0號扇區(qū)的4個MBR分區(qū)表。
圖4 在0號扇區(qū)輸入4個分區(qū)的MBR分區(qū)表
通過計算機管理中的磁盤管理附加abc2.vhd后,在資源管理器中可以看到H盤、I盤、J盤和K盤符。
綜上所述,當GPT磁盤中的分區(qū)被刪除,并將GPT磁盤轉(zhuǎn)換為MBR磁盤后,通過掃描丟失分區(qū)功能獲得邏輯盤的開始扇區(qū)號和容量,通過容量計算各邏輯盤的總扇區(qū)數(shù),通過各邏輯性盤的開始扇區(qū)號和總扇區(qū)數(shù),計算出各邏輯盤的結束扇區(qū)號,通過修改GPT分區(qū)表中的開始扇區(qū)號和結扇區(qū)號,就可以恢復GPT分區(qū)表。
通過計算GPT頭中的GPT分區(qū)表CRC32校驗和與GPT頭校驗和就可以恢復GPT頭;通過計算GPT頭備份中的GPT分區(qū)表CRC32校驗和與GPT頭備份校驗和就可以恢復GPT頭備份。這樣也就可以恢復GPT磁盤中各邏輯盤的全部數(shù)據(jù);如果GPT磁盤總?cè)萘啃∮?.2 TB,且分區(qū)總數(shù)小于4個時,也可以在硬盤0號扇區(qū)通過重建MBR的形式來恢復各邏輯盤中的全部數(shù)。