陳培德,吳建平,錢文華,曹良坤,王林茂
(云南大學(xué) 信息學(xué)院 云南省高校數(shù)字媒體技術(shù)重點(diǎn)實(shí)驗(yàn)室,云南 昆明 650223)
GPT是globally unique identifier partition table的縮寫,其含義是“全局唯一標(biāo)識磁盤分區(qū)表”[1]。GPT的出現(xiàn)是為了替代舊式的MBR(master boot record),主要解決MBR分區(qū)表不支持容量大于2.2 TB的分區(qū)問題[2]。
目前,微軟公司W(wǎng)indows 8使用了GPT磁盤分區(qū)格式,同時(shí)Windows 8不再支持MBR。計(jì)算機(jī)如果使用Windows 7就必須采用MBR分區(qū)格式,這樣不同分區(qū)表誤操作、誤轉(zhuǎn)換的結(jié)果是硬盤中原有的磁盤分區(qū)表丟失,磁盤中的數(shù)據(jù)不能正常讀取。在Windows 7和Windows 8用戶數(shù)量龐大的今天,這種因GPT分區(qū)表問題導(dǎo)致硬盤中的數(shù)據(jù)無法讀取和使用的問題較為突出。
當(dāng)GPT存儲(chǔ)磁盤出現(xiàn)誤操作或操作系統(tǒng)本身故障導(dǎo)致的分區(qū)表損壞、數(shù)據(jù)不可見、不可讀的數(shù)據(jù)等問題時(shí),有可能是GPT分區(qū)表的邏輯出錯(cuò),可以通過一定的技術(shù)手段,將保存在臺(tái)式機(jī)硬盤、筆記本硬盤、服務(wù)器硬盤等設(shè)備上丟失的寶貴數(shù)據(jù)進(jìn)行搶救和恢復(fù)。
當(dāng)GPT分區(qū)被破壞后,恢復(fù)分區(qū)常用的方法是:使用DiskGenius軟件的“搜索已丟失分區(qū)(重建分區(qū)表)”功能來重新建立分區(qū),但該方法只能重建MBR分區(qū),不能重建GPT分區(qū)。
從整體來看,GPT磁盤主要由6大部分組成,即保護(hù)MBR、GPT頭、GPT分區(qū)表、GPT分區(qū)區(qū)域(即文件系統(tǒng)所在區(qū)域)、GPT分區(qū)表備份和GPT頭備份[3]。大致結(jié)構(gòu)如圖1所示[4](注:假設(shè)GPT磁盤的扇區(qū)號范圍為0~n-1,其中n為GPT磁盤的總扇區(qū)數(shù))。
圖1 GPT磁盤的整體結(jié)構(gòu)
(1)保護(hù)MBR。
保護(hù)MBR位于GPT磁盤的0號扇區(qū),也是由主引導(dǎo)記錄、磁盤簽名、MBR分區(qū)表和結(jié)束標(biāo)志4個(gè)部分組成[5]。在MBR分區(qū)表中,分區(qū)標(biāo)志為0XEE,相對扇區(qū)為1,總扇區(qū)數(shù)為4 294 967 295,也就是分區(qū)總數(shù)的最大值,即該磁盤已經(jīng)被GPT分區(qū)占用,不能再進(jìn)行MBR分區(qū)[6]。
(2)GPT頭。
GPT頭位于GPT磁盤的1號扇區(qū)[6],該扇區(qū)是在將MBR磁盤轉(zhuǎn)換成GPT磁盤后自動(dòng)生成的,GPT頭定義了GPT分區(qū)各參數(shù)的基本信息[7]。
(3)GPT分區(qū)表。
GPT分區(qū)表位于GPT磁盤的2~33號扇區(qū),共占用32個(gè)扇區(qū),每個(gè)分區(qū)表占128字節(jié),最多可以容納128個(gè)分區(qū)表[7],由于第1個(gè)分區(qū)表為系統(tǒng)保留,所以用戶在GPT磁盤上最多可以再建立127個(gè)分區(qū),每個(gè)分區(qū)表管理一個(gè)分區(qū)。
(4)分區(qū)區(qū)域。
GPT分區(qū)區(qū)域是整個(gè)GPT磁盤中最大的區(qū)域,位于GPT磁盤的中間位置,GPT分區(qū)區(qū)域的開始扇區(qū)和結(jié)束扇區(qū)由GPT頭定義[7]。一般情況下,開始扇區(qū)為34號扇區(qū),而結(jié)束扇區(qū)為GPT磁盤總扇區(qū)數(shù)減去35。該區(qū)域由多個(gè)具體的分區(qū)組成,如:微軟保留分區(qū)、EFI系統(tǒng)分區(qū)、LDM元數(shù)據(jù)分區(qū)、LDM數(shù)據(jù)分區(qū)、OEM分區(qū)和主分區(qū)。各分區(qū)的開始扇區(qū)和結(jié)束扇區(qū)在各分區(qū)表中均有定義。
(5)分區(qū)表備份。
一般情況下,分區(qū)表備份位于GPT磁盤的倒數(shù)33號扇區(qū)~倒數(shù)2號扇區(qū),也是占用32個(gè)扇區(qū),是GPT分區(qū)表位于GPT磁盤的2~33號扇區(qū)的備份。
(6)GPT頭備份。
GPT頭備份位于GPT磁盤的倒數(shù)1號扇區(qū),該扇區(qū)也是在將MBR磁盤轉(zhuǎn)換成GPT磁盤后自動(dòng)生成的,GPT頭備份也是定義了GPT分區(qū)各參數(shù)的基本信息,但該扇區(qū)不是GPT頭的簡單備份,GPT頭備份對GPT分區(qū)各參數(shù)基本信息的定義與GPT頭對GPT分區(qū)各參數(shù)基本信息的定義稍有不同。
(1)操作系統(tǒng):Windows 7;
(2)數(shù)據(jù)恢復(fù)軟件及分析工具:WinHex 15.08。
(1)在Windows 7操作系統(tǒng)下,使用Windows 7的虛擬磁盤管理功能在D盤的根目錄上建立一個(gè)名為abcd.vhd的文件,文件大小為1 GB。
(2)將abcd.vhd文件附加為虛擬磁盤1,轉(zhuǎn)換成GPT磁盤;在磁盤1上依次建立4個(gè)分區(qū),并對4個(gè)分區(qū)進(jìn)行格式化操作,磁盤1中4個(gè)分區(qū)依次對應(yīng)4個(gè)邏輯盤,如下所示:
·H盤,文件系統(tǒng):FAT32,容量:200 MB;
·I盤,文件系統(tǒng):NTFS,容量:160 MB;
·J盤,文件系統(tǒng):FAT32,容量:300 MB;
·K盤,文件系統(tǒng):NTFS,容量:330 MB。
(3)分別在H盤、I盤、J盤和K盤中存儲(chǔ)一些文件夾和文件;磁盤1總體布局如圖2所示。
圖2 磁盤1的總體布局
(4)使用Windows 7的磁盤管理功能將H盤、I盤、J盤和K盤的GPT分區(qū)刪除。
(5)將GPT磁盤轉(zhuǎn)換為MBR磁盤;磁盤1總體布局如圖3所示。
至此,實(shí)驗(yàn)素材已制作完成。
刪除GPT分區(qū)前,各邏輯盤在磁盤1中的分布情況如圖2所示。即在磁盤1的2號扇區(qū)建立了4個(gè)分區(qū)(對應(yīng)微軟保留分區(qū)、H盤、I盤和J盤),在3號扇區(qū)建立了1個(gè)分區(qū)(對應(yīng)盤符為K盤),各分區(qū)在硬盤中的位置如表1所示。
表1 磁盤1各邏輯盤在硬盤中的位置
從刪除GPT分區(qū)前、后對比硬盤變化可知:
(1)刪除GPT分區(qū)并轉(zhuǎn)換為MBR磁盤后,0號扇區(qū)的保護(hù)MBR分區(qū)表已經(jīng)被刪除;
(2)GPT頭仍然完好保存;
(3)第1個(gè)分區(qū)表(即對應(yīng)微軟保留分區(qū))仍然保存;
(4)各邏輯盤中的數(shù)據(jù)仍然完好無損;
(5)第1個(gè)分區(qū)表備份(即對應(yīng)微軟保留分區(qū))仍然保存;
(6)GPT頭備份仍然完好保存。
由于各邏輯盤的GPT分區(qū)表和GPT分區(qū)表備份已經(jīng)被刪除,雖然各邏輯盤中的數(shù)據(jù)完好無損,但是通過磁盤管理附加磁盤1,在資源管理器中無法查看到各邏輯盤盤符,也就無法查看各邏輯盤中的文件和文件夾。
經(jīng)過大量實(shí)驗(yàn)發(fā)現(xiàn),在GPT磁盤中建立一個(gè)分區(qū)后,只要不將對應(yīng)邏輯盤進(jìn)行格式化操作,那么系統(tǒng)只將邏輯盤的開始扇區(qū)填充為“00”,而邏輯盤的剩余扇區(qū)即完好無損地保存著。
根據(jù)這一特點(diǎn),恢復(fù)GPT分區(qū)中各邏輯盤的基本思路與方法如下:
(1)通過開始扇區(qū)(即DBR所在扇區(qū))的特征值,查找并記錄下各邏輯盤的DBR和DBR備份所在扇區(qū)號[8];
(2)通過DBR中的BPB參數(shù),獲得各邏輯盤的總扇區(qū)數(shù)[8];
(3)通過各邏輯盤的總扇區(qū)數(shù),計(jì)算各邏輯盤的總?cè)萘浚?/p>
(4)通過各邏輯盤總?cè)萘?,依次建立各邏輯盤(注:在建立各邏輯盤時(shí),不要格式化各邏輯盤) ;
(5)最后通過各邏輯盤的DBR備份依次恢復(fù)各邏輯盤的DBR[9]。
通過磁盤管理附加磁盤1,在資源管理器中可以查看到各邏輯盤的盤符。
根據(jù)重建GPT分區(qū)的基本思路與方法,重建GPT分區(qū)的步驟如下:
1.獲得4個(gè)邏輯盤的基本情況。
(1)在Windows 7操作系統(tǒng)下,啟動(dòng)WinHex;
(2)使用WinHex的文件功能,打開D盤根目錄上的abcd.vhd文件,并映像為磁盤;
(3)通過FAT32_DBR的特征值,查找FAT32_DBR及其備份,分別在65 664、65 670、802 944以及802 950號扇區(qū)找到;
(4)經(jīng)過確認(rèn),65 664號扇區(qū)為FAT32_DBR,而65 670號扇區(qū)為65 664號扇區(qū)的備份,即FAT32_DBR備份;802 944號扇區(qū)為FAT32_DBR,而802 950號扇區(qū)為802 944號扇區(qū)的備份,即FAT32_DBR備份;
(5)通過NTFS_DBR特征值,查找NTFS_DBR及其備份,分別在475 264、802 943、1 417 344、2 093 183號扇區(qū)找到;
(6)經(jīng)過確認(rèn),475 264號扇區(qū)為NTFS_DBR,而802 943號扇區(qū)為475 264號扇區(qū)的備份,即NTFS_DBR備份;802 943號扇區(qū)為NTFS_DBR,而2 093 183號扇區(qū)為802 943號扇區(qū)的備份,即NTFS_DBR備份;
(7)從65 664、475 264、802 944和802 943號扇區(qū)(即各DBR)所獲得的總扇區(qū)數(shù)分別為327 680、614 399、675 840和409 599;
(8)退出WinHex。
綜合步驟4、步驟6和步驟7,4個(gè)邏輯盤的DBR、DBR備份、總扇區(qū)數(shù)、容量和文件系統(tǒng)如表2所示。
表2 磁盤1各邏輯盤的基本情況
注:NTFS_DBR中存儲(chǔ)的總扇區(qū)數(shù)要比實(shí)際分區(qū)所占扇區(qū)數(shù)少1個(gè)扇區(qū)。
2.將MBR磁盤轉(zhuǎn)換為GPT磁盤。
(1)在Windows 7操作系統(tǒng)下,使用Windows 7的虛擬磁盤管理功能附加D盤根目錄上的abcd.vhd文件為磁盤1;
(2)將光標(biāo)移動(dòng)到“磁盤1 基本1 023 MB 聯(lián)機(jī)”處,右擊,從彈出的快捷菜單中選擇“轉(zhuǎn)換成GPT磁盤(V)”。
至此,磁盤1由MBR磁盤轉(zhuǎn)換為GPT磁盤。
3.重建4個(gè)邏輯盤GPT分區(qū)表。
(1)將光標(biāo)移動(dòng)到“磁盤1的992 MB 未分配”處,右擊,從彈出的快捷菜單中選擇“新建簡單卷(I)…”;
(2)出現(xiàn)“新建簡單卷向?qū)А钡?個(gè)窗口,單擊“下一步”按鈕;
(3)出現(xiàn)“新建簡單卷向?qū)А钡?個(gè)窗口—指定卷大小,在“簡單卷大小(MB)(S):”右側(cè)的列表框中輸入第1個(gè)邏輯盤的大小“200”,單擊“下一步”按鈕;
(4)出現(xiàn)“新建簡單卷向?qū)А钡?個(gè)窗口—分配驅(qū)動(dòng)器號和路徑,在“分配以下驅(qū)動(dòng)器號(A):”右側(cè)的列表框中選擇“H”,單擊“下一步”按鈕;
(5)出現(xiàn)“新建簡單卷向?qū)А钡?個(gè)窗口—格式化分區(qū),選擇“不要格式化這個(gè)卷(D):”選項(xiàng),單擊“下一步”按鈕;
(6)出現(xiàn)“新建簡單卷向?qū)А钡?個(gè)窗口,單擊“完成”按鈕;
(7)重復(fù)步驟1~6,共計(jì)3次;在步驟3出現(xiàn)“新建簡單卷向?qū)А钡?個(gè)窗口—指定卷大小,在“簡單卷大小(MB)(S):”右側(cè)的列表框中依次輸入第2個(gè)、第3個(gè)和第4個(gè)邏輯盤的大小“160”、“300”和“330”;在出現(xiàn)“新建簡單卷向?qū)А钡?個(gè)窗口—分配驅(qū)動(dòng)器號和路徑,在“分配以下驅(qū)動(dòng)器號(A):”右側(cè)的列表框中依次選擇“I”、“J”和“K”。
至此,磁盤1中的4個(gè)GPT分區(qū)已經(jīng)建立。
將光標(biāo)移動(dòng)到“磁盤1 基本1023 MB 聯(lián)機(jī)”處,右擊,從彈出的快捷菜單中選擇“分離VHD”。
4.通過各自的DBR備份恢復(fù)DBR。
由于4個(gè)邏輯盤的DBR均被破壞,所以4個(gè)邏輯盤的文件系統(tǒng)均為RAW,需要通過各自的DBR備份來恢復(fù),步驟如下:
(1)啟動(dòng)WinHex;
(2)使用WinHex的文件功能,打開D盤根目錄上的abcd.vhd文件,并映像為磁盤;
(3)將65 670號扇區(qū)復(fù)制到65 664號扇區(qū);將802 943號扇區(qū)復(fù)制到475 264號扇區(qū);將802 950號扇區(qū)復(fù)制到802 944號扇區(qū);將2 093 183號扇區(qū)復(fù)制到1 417 344號扇區(qū);然后,存盤并退出WinHex。
至此,各邏輯盤的DBR已經(jīng)通過DBR備份恢復(fù)成功。磁盤1總體布局如圖2所示。
通過磁盤管理附加磁盤1,在資源管理器中可以查看各邏輯盤的盤符,并且可以看到各邏輯盤中的所有文件和文件夾。
如果硬盤總?cè)萘啃∮?.2 TB,且分區(qū)總數(shù)小于或等于4個(gè)時(shí),可以使用在硬盤0號扇區(qū)建立對應(yīng)MBR分區(qū)表的形式來恢復(fù)各邏輯盤中的數(shù)據(jù)。
由于磁盤1正好滿足這一條件,所以可以通過在硬盤0號扇區(qū)建立4個(gè)MBR分區(qū)表[10]。方法如下:
1.從表2中4個(gè)邏輯盤的DBR所在扇區(qū)號和總扇區(qū)數(shù)可以計(jì)算出磁盤1中H盤、I盤、J盤和I盤在硬盤0號扇區(qū)的分區(qū)表,如表3所示。
表3 分區(qū)表
對4個(gè)分區(qū)表說明如下:
(1)由于H盤、I盤、J盤和K盤均不引導(dǎo)系統(tǒng),各分區(qū)表中第1個(gè)字節(jié)的值為“00”[11];
(2)目前硬盤的存取方式均為LBA,分區(qū)表中第2~4字節(jié)未定義,可以填充任意值,這里填充“01 01 00”[12];
(3)由于H盤和J盤的文件系統(tǒng)為FAT32,所以,分區(qū)標(biāo)志為“0C”[13];而I盤和K盤的文件系統(tǒng)為NTFS,所以,分區(qū)標(biāo)志為“07”[14];
(4)分區(qū)表中第6~8字節(jié)未定義,可以填充任意值,這里填充“FE FF FF”;
(5)分區(qū)表中第9~12字節(jié)為相對扇區(qū),即各邏輯盤DBR所在扇區(qū)號;
(6)分區(qū)表中第13~16字節(jié)為總扇區(qū)數(shù),即各邏輯盤所占扇區(qū)數(shù)。
2.將這4個(gè)分區(qū)表填入到硬盤0號扇區(qū)偏移0X01BE~0X01FD處,然后存盤并退出WinHex。磁盤1總體布局如圖4所示。
圖4 恢復(fù)4個(gè)MBR分區(qū)后的磁盤1總體布局
通過磁盤管理附加磁盤1,在資源管理器中可以查看各邏輯盤的盤符,并且可以看到各邏輯盤中的所有文件和文件夾。
綜上所述,當(dāng)GPT磁盤中的分區(qū)被刪除,并將
GPT磁盤轉(zhuǎn)換為MBR磁盤后,只要查找并獲得各邏輯盤的DBR,通過DBR中的總扇區(qū)數(shù),計(jì)算出各邏輯盤的總?cè)萘浚灰来沃亟ǜ鬟壿嫳P,在建立各邏輯盤時(shí),只要不格式化各邏輯盤,最后通過各邏輯盤的DBR備份恢復(fù)各自的DBR,便可以恢復(fù)GPT磁盤中各邏輯盤的全部數(shù)據(jù);如果GPT磁盤總?cè)萘啃∮?.2 TB,且分區(qū)總數(shù)小于4個(gè)時(shí),也可以在硬盤0號扇區(qū)通過重建MBR的形式來恢復(fù)各邏輯盤中的全部數(shù)。