陳培德,吳建平,王一景,鄧 劍,朱辰龍
(云南大學 信息學院,云南 昆明 650223)
Ghost是目前使用得比較多的快速地在硬盤上安裝操作系統、備份和恢復數據的一款工具軟件[1],實現了多種硬盤分區格式的分區及硬盤數據的備份和還原功能[2]。
在微軟視窗操作系統廣為流傳的基礎上,為避開視窗操作系統原始完整安裝的費時和重裝系統后驅動應用程序再裝的麻煩,許多軟件安裝人員把自己做好的干凈系統用Ghost來備份和還原[3]。為易于操作,其流程被一鍵Ghost、一鍵還原精靈等進一步簡化,它的易用很快得到了軟件安裝人員的喜愛[4]。將視窗操作系統Windows XP、Windows VISTA、Windows 7等軟件與系統引導文件、硬盤分區工具等集成為一體,進一步進行配套,這樣用戶在需要重裝系統時有效且簡便地完成系統快速重裝。
GPT是Globally Unique Identifier Partition Table的縮寫,其含義是“全局唯一標識磁盤分區表”[5]。GPT的出現是為了替代舊式的MBR(master boot record)[6],主要解決了MBR分區表不支持容量大于2 TB的分區問題[7]。
如果用戶的硬盤為GPT分區,即GPT磁盤,用戶在使用Ghost軟件安裝系統時,由于操作不慎,會誤將選擇分區操作為選擇整個硬盤[8];以至于安裝系統后,只有一個分區,其分區的大小為整個硬盤的大小[8]。導致GPT磁盤中的各分區丟失,出現GPT磁盤中數據無法正常讀取的現象。
針對這一情況,對Ghost后,GPT磁盤中的數據恢復進行了大量的實驗,發現Ghost后大部分數據可以完整恢復。
操作系統:Windows 7;
硬盤:虛擬硬盤;
工具軟件:Ghost32 8.0;
數據分析及恢復工具:WinHex 15.08。
步驟1:在Windows 7操作系統下,使用Windows 7的虛擬磁盤管理功能在D盤的根目錄上建立一個名為abcd1.vhd的文件,文件大小為5 GB。
步驟2:將abcd1.vhd文件附加為虛擬磁盤1,轉換成GPT磁盤;在磁盤1上依次建立5個分區,并分別對5個分區進行(快速)格式化操作,文件系統選擇NTFS,磁盤1中5個分區依次對應5個邏輯盤情況如下:
(1)H盤,文件系統:NTFS,容量:800 MB;
(2)I盤,文件系統:NTFS,容量:1 000 MB;
(3)J盤,文件系統:NTFS,容量:1 200 MB;
(4)K盤,文件系統:NTFS,容量:1 000 MB;
(5)L盤,文件系統:NTFS,容量:1 085 MB。
步驟3:分別復制一定數量的文件夾和文件到這5個邏輯盤中。
至此,目標盤實驗素材已制作完成。
步驟1:在Windows 7操作系統下,使用Windows 7的虛擬磁盤管理功能在D盤的根目錄上建立一個名為abcd2.vhd的文件,文件大小為300 MB。
步驟2:將abcd2.vhd文件附加為虛擬磁盤2,轉換成MBR磁盤;在磁盤2上依次建立1個分區,并對該分區進行(快速)格式化操作,文件系統選擇NTFS,對應的盤符為M盤。
步驟3:復制一定數量的文件夾和文件到M個邏輯盤中。
步驟4:使用Ghost軟件中的鏡像功能將磁盤2鏡像成為一個文件,文件名為abcd2.GHO,存儲在D盤的根目錄下。
至此,源盤實驗素材已制作完成。
Ghost前,磁盤1的布局如圖1所示,說明如下:

圖1 Ghost前,磁盤1布局圖
(1)磁盤1為GPT磁盤;而0號扇區存儲的MBR分區表為“00 00 02 00 EE FF FF FF01 00 00 00FF FF FF FF”[9],從分區表可知,相對扇區為01(注:存儲形式為01 00 00 00)[10],總扇區數為4 294 967 295(注:存儲形式為FF FF FF FF)[10],分區標志為“EE”[11],即該分區是保護MBR[10]。
(2)1號扇區存儲的是GPT頭[12];2號扇區存儲了4個GPT分區表,即微軟保留、H盤、I盤、J盤;而3號扇區存儲了2個GPT分區表,即K盤和L盤GPT分區表。
(3)通過2號扇區和3號存儲的分區表可以定位微軟保留GPT分區、H盤、I盤、J盤、K盤和L盤在GPT磁盤中的具體位置。
(4)10485727號扇區和10485728號扇區分別存儲的是2號扇區和3號扇區的備份,10485729號扇區存儲的是GPT頭備份。
步驟1:附加D盤根目錄下的abcd1.vhd文件成為磁盤1,所產生的5個邏輯盤符分別為H盤、I盤、J盤、K和L盤。
步驟2:運行Ghost32 8.0,選擇“Local→Disk→From →Image”,在彈出的窗口中選擇D盤根目錄下的abcd2.GHO文件,即源文件選擇“abcd2.GHO”。
步驟3:在“Select local destination drive by clicking on the drive number”窗口中選擇Drive2,即選擇第2個物理硬盤,也就是abcd1.vhd文件附加后的虛擬磁盤1,單擊“OK”按鈕。
步驟4:大約6秒后,磁盤1中的5個邏輯盤被1個邏輯盤所取代,即磁盤1中只有1個邏輯盤,盤符為H:,大小為4.99 GB。
至此,實驗素材已制作完成。
Ghost后,磁盤1的布局如圖2所示,說明如下:

圖2 Ghost后,磁盤1布局圖
(1)磁盤1已經由GPT磁盤自動轉換為MBR磁盤;而0號扇區存儲的MBR分區表為“00 01 01 00 07 FE BF 8B3F 00 00 004D D3 9F 00”;從分區表可知,相對扇區為63(注:存儲形式為3F 00 00 00),總扇區數為10 474 317(注:存儲形式為4D D3 9F 00);分區標志為“07”[13],即該分區對應的文件系統是NTFS[14]。
(2)1號扇區存儲的GPT頭已被00填充,即GPT頭已被破壞;2號扇區存儲的4個GPT分區表和3號扇區存儲的2個GPT分區表均完好無損地保存著。
(3)10 485 727號扇區存儲的4個GPT分區表備份和10 485 728號扇區存儲的2個GPT分區表備份均完好無損地保存著;而10 485 759號扇區存儲的GPT頭備份已被00填充,即GPT頭備份已被破壞。
(4)由于0號扇區存儲的保護MBR,1號扇區存儲的GPT頭,10 485 759號扇區存儲的GPT頭備份已經被破壞;所以,2號扇區和3號扇區存儲的GPT分區表;10 485 727號扇區和10 485 728號扇區存儲的GPT分區表備份已經不再起作用。
(5)Ghost后,從0號扇區的MBR分區表可知,新H盤的開始扇區號為63,而結束扇區為10 474 379,即被覆蓋的區域為63號扇區~614 463號扇區;也就是說Ghost前,只有微軟保留分區和H盤的部分扇區被覆蓋,因為abcd2.GHO的實際大小為300 MB,占614 400個扇區。所以,I盤、J盤、K盤和L盤中存儲的數據均未被覆蓋;為成功恢復I盤、J盤、K盤和L盤中全部數據以及H盤中的部分數據帶來了希望。
從圖2可知,Ghost后,從614 464號扇區到10 485 759號扇區,除10 474 379號扇區被新H盤NTFS_DBR備份所覆蓋,10 485 759號扇區被填充為00外,其余扇區的內容一般都完好無損地保留。
(1)將2號扇區和3號扇區以文件的形式備份。
(2)在磁盤管理中刪除MBR分區。
(3)將MBR磁盤轉換為GPT磁盤。
(4)通過備份的2號扇區和3號扇區恢復GPT分區表和GPT分區表備份。
(5)重新計算GPT頭中對應GPT分區表的CRC校驗和GPT頭的CRC校驗。
(6)重新計算GPT頭備份中對應GPT分區表的CRC校驗和GPT頭的CRC校驗。
步驟1:使用WinHex軟件打開D盤根目錄下的abcd1.vhd文件,并映像為磁盤。
步驟2:將光標移動到2號扇區的開始位置,定義塊首;將光標移動到3號扇區的結束位置,定義塊尾;單擊“復制”按鈕。
貧困地區基層組織弱化,部分地方執行人員由于自身素質不高,以一副領導視察的態勢對待扶貧指導工作,執行力不夠。部分審查與管理專項扶貧資金部門存在管理不嚴,自身內部督管不力,制度不健全的不良行政現象。在利益、權勢驅動下少數地區政府為了追求短期政績,不惜大量浪費和透支扶貧資源,有的還攤指標、造數字,使得扶貧開發的收效甚微。
步驟3:通過WinHex的文件菜單,新建一個VHD文件,文件大小為1 024字節,并將光標移動到新建文件的開始位置,單擊“粘貼”按鈕,將該文件存盤,文件為“2~3.vhd”。
步驟4:從2號扇區和3號扇區可以得到6個分區的開始扇區號和結束扇區號;將6個分區的開始扇區號和結束扇區號分別填入表1中。
步驟5:退出WinHex。
步驟6:使用計算機管理中的磁盤管理附加abcd1.vhd后成為磁盤1。

表1 Ghost后6個分區表的開始扇區號和結束扇區號
步驟7:刪除磁盤1中H盤分區;將MBR磁盤轉換為GPT磁盤。
至此,磁盤1中0號扇區已經變成保護的MBR,1號扇區的GPT頭已建立;而2號扇區和3號扇區存儲的6個GPT分區表已經被刪除5個,只保留1個,即微軟保留分區表;10 485 727號扇區和10 485 728號扇區存儲的GPT分區表備份只保留1個,即微軟保留分區表;而10 485 759號扇區存儲的GPT頭備份已建立。
步驟8:分離磁盤1,使用WinHex軟件打開D盤根目錄下的abcd1.vhd文件,并映像為磁盤。
步驟9:使用WinHex軟件打開2~3.vhd文件,全選,單擊“復制”按鈕;將光標移動至abcd1.vhd文件的2號扇區開始位置,單擊“粘貼”按鈕;將光標移動至abcd1.vhd文件的10 485 727號扇區開始位置,單擊“粘貼”按鈕,最后單擊“保存”按鈕,即通過2~3.vhd文件來恢復abcd1.vhd中的GPT分區表和GPT分區表備份,關閉2~3.vhd文件。
步驟10:將光標移動1號扇區,即GPT頭所在扇區號,可以查看到扇區偏移0X58~0X5B處的GPT分區表CRC32校驗和為“4378B542”,注:存儲形式為“42 B5 78 43”;如圖3所示。

圖3 1號扇區的GPT頭
步驟11:將光標移動2號扇區開始位置,定義塊首;將光標移動到33號扇區的末尾定義塊尾,“工具”→“比較Hash值(M)...”→“CRC32(32Bit)”,可以計算出6個分區表的CRC32校驗值為“78BBC529”;注:存儲形式為“29 C5 BB 78”。
步驟12:將1號扇區偏移0X58~0X5B處的GPT分區表CRC32校驗和“4378B542”修改為“78BBC529”,注:存儲形式為“29 C5 BB 78”。
步驟13:將1號扇區偏移0X10~0X13處的GPT頭CRC32校驗和“12755BF7”修改為“00000000”。
步驟14:將光標移動1號扇區開始位置,定義塊首;將光標移動到1號扇區偏移0X5B處定義塊尾,“工具”→“比較Hash值(M)...”→“CRC32(32Bit)”,可以計算出這92個字節的CRC32校驗值為“FB7F2E0C”;注:存儲形式為“0C 2E 7F FB”,然后存盤。
至此,1號扇區的GPT頭已成功恢復。
步驟15:將光標移動到10 485 759號扇區,如圖4所示,將偏移0X58~0X5B處的GPT分區表CRC32校驗和“4378B542”修改為“78BBC529”,注:存儲形式為“29 C5 BB 78”。

圖4 10 485 759號扇區的GPT頭備份
步驟16:將10 485 759號扇區偏移0X10~0X13處的GPT頭CRC32校驗和“68C48CEB”修改為“00000000”。
步驟17:將光標移動10 485 759號扇區開始位置,定義塊首;將光標移動到10 485 759號扇區偏移0X5B處定義塊尾,“工具”→“比較Hash值(M)...”→“CRC32(32Bit)”,可以計算出這92個字節的CRC32校驗值為“81CEF910”,注:存儲形式為“10 F9 CE 81”,然后存盤。
至此,10 485 759號扇區的GPT頭備份已成功恢復。
綜上所述,Ghost前的GPT分區表、GPT分區表備份、GPT頭和GPT頭備份已成功恢復。
步驟18:使用WinHex軟件重新打開abcd1.vhd文件并映像為磁盤,Partition2~Partition5、Partition1的開始扇區號,如圖5所示。

圖5 磁盤1中各GPT分區情況
從圖5可知,Partition2的開始扇區號為67 584,而結束扇區號為1 705 983,將67 584號扇區以文件的形式保存,將1 705 983號扇區復制到67 584號扇區,即通過H盤的NTFS_DBR備份恢復NTFS_DBR,然后存盤并退出WinHex。
步驟19:通過計算機管理中的磁盤管理附加abcd1.vhd文件為磁盤1,到資源管理器中可以看到I盤、J盤、K盤和L盤中的全部文件和文件夾,但是由于H盤前面的數據被覆蓋,無法正常讀取,H盤的文件系統為RAW[15],單擊盤符時,出現“磁盤未格式化”提示[16]。
步驟20:在DOS下,使用“CHKDSK H:/F/I”[17]自動修復被破壞的NTFS_文件系統,大約3分鐘后,H盤的文件系統已成功修復完成。
至此,H盤中的大部分文件已成功恢復,但是被覆蓋的文件無法恢復。
針對GPT磁盤被Ghost后,提出了恢復GPT分區的基本思路、方法與步驟;該方法的難點在于計算GPT頭前92字節CRC校驗和GPT分區表的CRC校驗;未覆蓋的邏輯盤中的數據可以成功恢復[18],但被覆蓋的數據無法恢復。如果硬盤總容量小于2 TB且分區數量小于或者等于4個時,也可以通過在硬盤0號扇區建立MBR[19]分區表的形式來恢復。