陳培德,吳建平,王一景,鄧 劍,朱辰龍
(云南大學(xué) 信息學(xué)院,云南 昆明 650223)
Ghost是目前使用得比較多的快速地在硬盤(pán)上安裝操作系統(tǒng)、備份和恢復(fù)數(shù)據(jù)的一款工具軟件[1],實(shí)現(xiàn)了多種硬盤(pán)分區(qū)格式的分區(qū)及硬盤(pán)數(shù)據(jù)的備份和還原功能[2]。
在微軟視窗操作系統(tǒng)廣為流傳的基礎(chǔ)上,為避開(kāi)視窗操作系統(tǒng)原始完整安裝的費(fèi)時(shí)和重裝系統(tǒng)后驅(qū)動(dòng)應(yīng)用程序再裝的麻煩,許多軟件安裝人員把自己做好的干凈系統(tǒng)用Ghost來(lái)備份和還原[3]。為易于操作,其流程被一鍵Ghost、一鍵還原精靈等進(jìn)一步簡(jiǎn)化,它的易用很快得到了軟件安裝人員的喜愛(ài)[4]。將視窗操作系統(tǒng)Windows XP、Windows VISTA、Windows 7等軟件與系統(tǒng)引導(dǎo)文件、硬盤(pán)分區(qū)工具等集成為一體,進(jìn)一步進(jìn)行配套,這樣用戶(hù)在需要重裝系統(tǒng)時(shí)有效且簡(jiǎn)便地完成系統(tǒng)快速重裝。
GPT是Globally Unique Identifier Partition Table的縮寫(xiě),其含義是“全局唯一標(biāo)識(shí)磁盤(pán)分區(qū)表”[5]。GPT的出現(xiàn)是為了替代舊式的MBR(master boot record)[6],主要解決了MBR分區(qū)表不支持容量大于2 TB的分區(qū)問(wèn)題[7]。
如果用戶(hù)的硬盤(pán)為GPT分區(qū),即GPT磁盤(pán),用戶(hù)在使用Ghost軟件安裝系統(tǒng)時(shí),由于操作不慎,會(huì)誤將選擇分區(qū)操作為選擇整個(gè)硬盤(pán)[8];以至于安裝系統(tǒng)后,只有一個(gè)分區(qū),其分區(qū)的大小為整個(gè)硬盤(pán)的大小[8]。導(dǎo)致GPT磁盤(pán)中的各分區(qū)丟失,出現(xiàn)GPT磁盤(pán)中數(shù)據(jù)無(wú)法正常讀取的現(xiàn)象。
針對(duì)這一情況,對(duì)Ghost后,GPT磁盤(pán)中的數(shù)據(jù)恢復(fù)進(jìn)行了大量的實(shí)驗(yàn),發(fā)現(xiàn)Ghost后大部分?jǐn)?shù)據(jù)可以完整恢復(fù)。
操作系統(tǒng):Windows 7;
硬盤(pán):虛擬硬盤(pán);
工具軟件:Ghost32 8.0;
數(shù)據(jù)分析及恢復(fù)工具:WinHex 15.08。
步驟1:在Windows 7操作系統(tǒng)下,使用Windows 7的虛擬磁盤(pán)管理功能在D盤(pán)的根目錄上建立一個(gè)名為abcd1.vhd的文件,文件大小為5 GB。
步驟2:將abcd1.vhd文件附加為虛擬磁盤(pán)1,轉(zhuǎn)換成GPT磁盤(pán);在磁盤(pán)1上依次建立5個(gè)分區(qū),并分別對(duì)5個(gè)分區(qū)進(jìn)行(快速)格式化操作,文件系統(tǒng)選擇NTFS,磁盤(pán)1中5個(gè)分區(qū)依次對(duì)應(yīng)5個(gè)邏輯盤(pán)情況如下:
(1)H盤(pán),文件系統(tǒng):NTFS,容量:800 MB;
(2)I盤(pán),文件系統(tǒng):NTFS,容量:1 000 MB;
(3)J盤(pán),文件系統(tǒng):NTFS,容量:1 200 MB;
(4)K盤(pán),文件系統(tǒng):NTFS,容量:1 000 MB;
(5)L盤(pán),文件系統(tǒng):NTFS,容量:1 085 MB。
步驟3:分別復(fù)制一定數(shù)量的文件夾和文件到這5個(gè)邏輯盤(pán)中。
至此,目標(biāo)盤(pán)實(shí)驗(yàn)素材已制作完成。
步驟1:在Windows 7操作系統(tǒng)下,使用Windows 7的虛擬磁盤(pán)管理功能在D盤(pán)的根目錄上建立一個(gè)名為abcd2.vhd的文件,文件大小為300 MB。
步驟2:將abcd2.vhd文件附加為虛擬磁盤(pán)2,轉(zhuǎn)換成MBR磁盤(pán);在磁盤(pán)2上依次建立1個(gè)分區(qū),并對(duì)該分區(qū)進(jìn)行(快速)格式化操作,文件系統(tǒng)選擇NTFS,對(duì)應(yīng)的盤(pán)符為M盤(pán)。
步驟3:復(fù)制一定數(shù)量的文件夾和文件到M個(gè)邏輯盤(pán)中。
步驟4:使用Ghost軟件中的鏡像功能將磁盤(pán)2鏡像成為一個(gè)文件,文件名為abcd2.GHO,存儲(chǔ)在D盤(pán)的根目錄下。
至此,源盤(pán)實(shí)驗(yàn)素材已制作完成。
Ghost前,磁盤(pán)1的布局如圖1所示,說(shuō)明如下:
圖1 Ghost前,磁盤(pán)1布局圖
(1)磁盤(pán)1為GPT磁盤(pán);而0號(hào)扇區(qū)存儲(chǔ)的MBR分區(qū)表為“00 00 02 00 EE FF FF FF01 00 00 00FF FF FF FF”[9],從分區(qū)表可知,相對(duì)扇區(qū)為01(注:存儲(chǔ)形式為01 00 00 00)[10],總扇區(qū)數(shù)為4 294 967 295(注:存儲(chǔ)形式為FF FF FF FF)[10],分區(qū)標(biāo)志為“EE”[11],即該分區(qū)是保護(hù)MBR[10]。
(2)1號(hào)扇區(qū)存儲(chǔ)的是GPT頭[12];2號(hào)扇區(qū)存儲(chǔ)了4個(gè)GPT分區(qū)表,即微軟保留、H盤(pán)、I盤(pán)、J盤(pán);而3號(hào)扇區(qū)存儲(chǔ)了2個(gè)GPT分區(qū)表,即K盤(pán)和L盤(pán)GPT分區(qū)表。
(3)通過(guò)2號(hào)扇區(qū)和3號(hào)存儲(chǔ)的分區(qū)表可以定位微軟保留GPT分區(qū)、H盤(pán)、I盤(pán)、J盤(pán)、K盤(pán)和L盤(pán)在GPT磁盤(pán)中的具體位置。
(4)10485727號(hào)扇區(qū)和10485728號(hào)扇區(qū)分別存儲(chǔ)的是2號(hào)扇區(qū)和3號(hào)扇區(qū)的備份,10485729號(hào)扇區(qū)存儲(chǔ)的是GPT頭備份。
步驟1:附加D盤(pán)根目錄下的abcd1.vhd文件成為磁盤(pán)1,所產(chǎn)生的5個(gè)邏輯盤(pán)符分別為H盤(pán)、I盤(pán)、J盤(pán)、K和L盤(pán)。
步驟2:運(yùn)行Ghost32 8.0,選擇“Local→Disk→From →Image”,在彈出的窗口中選擇D盤(pán)根目錄下的abcd2.GHO文件,即源文件選擇“abcd2.GHO”。
步驟3:在“Select local destination drive by clicking on the drive number”窗口中選擇Drive2,即選擇第2個(gè)物理硬盤(pán),也就是abcd1.vhd文件附加后的虛擬磁盤(pán)1,單擊“OK”按鈕。
步驟4:大約6秒后,磁盤(pán)1中的5個(gè)邏輯盤(pán)被1個(gè)邏輯盤(pán)所取代,即磁盤(pán)1中只有1個(gè)邏輯盤(pán),盤(pán)符為H:,大小為4.99 GB。
至此,實(shí)驗(yàn)素材已制作完成。
Ghost后,磁盤(pán)1的布局如圖2所示,說(shuō)明如下:
圖2 Ghost后,磁盤(pán)1布局圖
(1)磁盤(pán)1已經(jīng)由GPT磁盤(pán)自動(dòng)轉(zhuǎn)換為MBR磁盤(pán);而0號(hào)扇區(qū)存儲(chǔ)的MBR分區(qū)表為“00 01 01 00 07 FE BF 8B3F 00 00 004D D3 9F 00”;從分區(qū)表可知,相對(duì)扇區(qū)為63(注:存儲(chǔ)形式為3F 00 00 00),總扇區(qū)數(shù)為10 474 317(注:存儲(chǔ)形式為4D D3 9F 00);分區(qū)標(biāo)志為“07”[13],即該分區(qū)對(duì)應(yīng)的文件系統(tǒng)是NTFS[14]。
(2)1號(hào)扇區(qū)存儲(chǔ)的GPT頭已被00填充,即GPT頭已被破壞;2號(hào)扇區(qū)存儲(chǔ)的4個(gè)GPT分區(qū)表和3號(hào)扇區(qū)存儲(chǔ)的2個(gè)GPT分區(qū)表均完好無(wú)損地保存著。
(3)10 485 727號(hào)扇區(qū)存儲(chǔ)的4個(gè)GPT分區(qū)表備份和10 485 728號(hào)扇區(qū)存儲(chǔ)的2個(gè)GPT分區(qū)表備份均完好無(wú)損地保存著;而10 485 759號(hào)扇區(qū)存儲(chǔ)的GPT頭備份已被00填充,即GPT頭備份已被破壞。
(4)由于0號(hào)扇區(qū)存儲(chǔ)的保護(hù)MBR,1號(hào)扇區(qū)存儲(chǔ)的GPT頭,10 485 759號(hào)扇區(qū)存儲(chǔ)的GPT頭備份已經(jīng)被破壞;所以,2號(hào)扇區(qū)和3號(hào)扇區(qū)存儲(chǔ)的GPT分區(qū)表;10 485 727號(hào)扇區(qū)和10 485 728號(hào)扇區(qū)存儲(chǔ)的GPT分區(qū)表備份已經(jīng)不再起作用。
(5)Ghost后,從0號(hào)扇區(qū)的MBR分區(qū)表可知,新H盤(pán)的開(kāi)始扇區(qū)號(hào)為63,而結(jié)束扇區(qū)為10 474 379,即被覆蓋的區(qū)域?yàn)?3號(hào)扇區(qū)~614 463號(hào)扇區(qū);也就是說(shuō)Ghost前,只有微軟保留分區(qū)和H盤(pán)的部分扇區(qū)被覆蓋,因?yàn)閍bcd2.GHO的實(shí)際大小為300 MB,占614 400個(gè)扇區(qū)。所以,I盤(pán)、J盤(pán)、K盤(pán)和L盤(pán)中存儲(chǔ)的數(shù)據(jù)均未被覆蓋;為成功恢復(fù)I盤(pán)、J盤(pán)、K盤(pán)和L盤(pán)中全部數(shù)據(jù)以及H盤(pán)中的部分?jǐn)?shù)據(jù)帶來(lái)了希望。
從圖2可知,Ghost后,從614 464號(hào)扇區(qū)到10 485 759號(hào)扇區(qū),除10 474 379號(hào)扇區(qū)被新H盤(pán)NTFS_DBR備份所覆蓋,10 485 759號(hào)扇區(qū)被填充為00外,其余扇區(qū)的內(nèi)容一般都完好無(wú)損地保留。
(1)將2號(hào)扇區(qū)和3號(hào)扇區(qū)以文件的形式備份。
(2)在磁盤(pán)管理中刪除MBR分區(qū)。
(3)將MBR磁盤(pán)轉(zhuǎn)換為GPT磁盤(pán)。
(4)通過(guò)備份的2號(hào)扇區(qū)和3號(hào)扇區(qū)恢復(fù)GPT分區(qū)表和GPT分區(qū)表備份。
(5)重新計(jì)算GPT頭中對(duì)應(yīng)GPT分區(qū)表的CRC校驗(yàn)和GPT頭的CRC校驗(yàn)。
(6)重新計(jì)算GPT頭備份中對(duì)應(yīng)GPT分區(qū)表的CRC校驗(yàn)和GPT頭的CRC校驗(yàn)。
步驟1:使用WinHex軟件打開(kāi)D盤(pán)根目錄下的abcd1.vhd文件,并映像為磁盤(pán)。
步驟2:將光標(biāo)移動(dòng)到2號(hào)扇區(qū)的開(kāi)始位置,定義塊首;將光標(biāo)移動(dòng)到3號(hào)扇區(qū)的結(jié)束位置,定義塊尾;單擊“復(fù)制”按鈕。
貧困地區(qū)基層組織弱化,部分地方執(zhí)行人員由于自身素質(zhì)不高,以一副領(lǐng)導(dǎo)視察的態(tài)勢(shì)對(duì)待扶貧指導(dǎo)工作,執(zhí)行力不夠。部分審查與管理專(zhuān)項(xiàng)扶貧資金部門(mén)存在管理不嚴(yán),自身內(nèi)部督管不力,制度不健全的不良行政現(xiàn)象。在利益、權(quán)勢(shì)驅(qū)動(dòng)下少數(shù)地區(qū)政府為了追求短期政績(jī),不惜大量浪費(fèi)和透支扶貧資源,有的還攤指標(biāo)、造數(shù)字,使得扶貧開(kāi)發(fā)的收效甚微。
步驟3:通過(guò)WinHex的文件菜單,新建一個(gè)VHD文件,文件大小為1 024字節(jié),并將光標(biāo)移動(dòng)到新建文件的開(kāi)始位置,單擊“粘貼”按鈕,將該文件存盤(pán),文件為“2~3.vhd”。
步驟4:從2號(hào)扇區(qū)和3號(hào)扇區(qū)可以得到6個(gè)分區(qū)的開(kāi)始扇區(qū)號(hào)和結(jié)束扇區(qū)號(hào);將6個(gè)分區(qū)的開(kāi)始扇區(qū)號(hào)和結(jié)束扇區(qū)號(hào)分別填入表1中。
步驟5:退出WinHex。
步驟6:使用計(jì)算機(jī)管理中的磁盤(pán)管理附加abcd1.vhd后成為磁盤(pán)1。
表1 Ghost后6個(gè)分區(qū)表的開(kāi)始扇區(qū)號(hào)和結(jié)束扇區(qū)號(hào)
步驟7:刪除磁盤(pán)1中H盤(pán)分區(qū);將MBR磁盤(pán)轉(zhuǎn)換為GPT磁盤(pán)。
至此,磁盤(pán)1中0號(hào)扇區(qū)已經(jīng)變成保護(hù)的MBR,1號(hào)扇區(qū)的GPT頭已建立;而2號(hào)扇區(qū)和3號(hào)扇區(qū)存儲(chǔ)的6個(gè)GPT分區(qū)表已經(jīng)被刪除5個(gè),只保留1個(gè),即微軟保留分區(qū)表;10 485 727號(hào)扇區(qū)和10 485 728號(hào)扇區(qū)存儲(chǔ)的GPT分區(qū)表備份只保留1個(gè),即微軟保留分區(qū)表;而10 485 759號(hào)扇區(qū)存儲(chǔ)的GPT頭備份已建立。
步驟8:分離磁盤(pán)1,使用WinHex軟件打開(kāi)D盤(pán)根目錄下的abcd1.vhd文件,并映像為磁盤(pán)。
步驟9:使用WinHex軟件打開(kāi)2~3.vhd文件,全選,單擊“復(fù)制”按鈕;將光標(biāo)移動(dòng)至abcd1.vhd文件的2號(hào)扇區(qū)開(kāi)始位置,單擊“粘貼”按鈕;將光標(biāo)移動(dòng)至abcd1.vhd文件的10 485 727號(hào)扇區(qū)開(kāi)始位置,單擊“粘貼”按鈕,最后單擊“保存”按鈕,即通過(guò)2~3.vhd文件來(lái)恢復(fù)abcd1.vhd中的GPT分區(qū)表和GPT分區(qū)表備份,關(guān)閉2~3.vhd文件。
步驟10:將光標(biāo)移動(dòng)1號(hào)扇區(qū),即GPT頭所在扇區(qū)號(hào),可以查看到扇區(qū)偏移0X58~0X5B處的GPT分區(qū)表CRC32校驗(yàn)和為“4378B542”,注:存儲(chǔ)形式為“42 B5 78 43”;如圖3所示。
圖3 1號(hào)扇區(qū)的GPT頭
步驟11:將光標(biāo)移動(dòng)2號(hào)扇區(qū)開(kāi)始位置,定義塊首;將光標(biāo)移動(dòng)到33號(hào)扇區(qū)的末尾定義塊尾,“工具”→“比較Hash值(M)...”→“CRC32(32Bit)”,可以計(jì)算出6個(gè)分區(qū)表的CRC32校驗(yàn)值為“78BBC529”;注:存儲(chǔ)形式為“29 C5 BB 78”。
步驟12:將1號(hào)扇區(qū)偏移0X58~0X5B處的GPT分區(qū)表CRC32校驗(yàn)和“4378B542”修改為“78BBC529”,注:存儲(chǔ)形式為“29 C5 BB 78”。
步驟13:將1號(hào)扇區(qū)偏移0X10~0X13處的GPT頭CRC32校驗(yàn)和“12755BF7”修改為“00000000”。
步驟14:將光標(biāo)移動(dòng)1號(hào)扇區(qū)開(kāi)始位置,定義塊首;將光標(biāo)移動(dòng)到1號(hào)扇區(qū)偏移0X5B處定義塊尾,“工具”→“比較Hash值(M)...”→“CRC32(32Bit)”,可以計(jì)算出這92個(gè)字節(jié)的CRC32校驗(yàn)值為“FB7F2E0C”;注:存儲(chǔ)形式為“0C 2E 7F FB”,然后存盤(pán)。
至此,1號(hào)扇區(qū)的GPT頭已成功恢復(fù)。
步驟15:將光標(biāo)移動(dòng)到10 485 759號(hào)扇區(qū),如圖4所示,將偏移0X58~0X5B處的GPT分區(qū)表CRC32校驗(yàn)和“4378B542”修改為“78BBC529”,注:存儲(chǔ)形式為“29 C5 BB 78”。
圖4 10 485 759號(hào)扇區(qū)的GPT頭備份
步驟16:將10 485 759號(hào)扇區(qū)偏移0X10~0X13處的GPT頭CRC32校驗(yàn)和“68C48CEB”修改為“00000000”。
步驟17:將光標(biāo)移動(dòng)10 485 759號(hào)扇區(qū)開(kāi)始位置,定義塊首;將光標(biāo)移動(dòng)到10 485 759號(hào)扇區(qū)偏移0X5B處定義塊尾,“工具”→“比較Hash值(M)...”→“CRC32(32Bit)”,可以計(jì)算出這92個(gè)字節(jié)的CRC32校驗(yàn)值為“81CEF910”,注:存儲(chǔ)形式為“10 F9 CE 81”,然后存盤(pán)。
至此,10 485 759號(hào)扇區(qū)的GPT頭備份已成功恢復(fù)。
綜上所述,Ghost前的GPT分區(qū)表、GPT分區(qū)表備份、GPT頭和GPT頭備份已成功恢復(fù)。
步驟18:使用WinHex軟件重新打開(kāi)abcd1.vhd文件并映像為磁盤(pán),Partition2~Partition5、Partition1的開(kāi)始扇區(qū)號(hào),如圖5所示。
圖5 磁盤(pán)1中各GPT分區(qū)情況
從圖5可知,Partition2的開(kāi)始扇區(qū)號(hào)為67 584,而結(jié)束扇區(qū)號(hào)為1 705 983,將67 584號(hào)扇區(qū)以文件的形式保存,將1 705 983號(hào)扇區(qū)復(fù)制到67 584號(hào)扇區(qū),即通過(guò)H盤(pán)的NTFS_DBR備份恢復(fù)NTFS_DBR,然后存盤(pán)并退出WinHex。
步驟19:通過(guò)計(jì)算機(jī)管理中的磁盤(pán)管理附加abcd1.vhd文件為磁盤(pán)1,到資源管理器中可以看到I盤(pán)、J盤(pán)、K盤(pán)和L盤(pán)中的全部文件和文件夾,但是由于H盤(pán)前面的數(shù)據(jù)被覆蓋,無(wú)法正常讀取,H盤(pán)的文件系統(tǒng)為RAW[15],單擊盤(pán)符時(shí),出現(xiàn)“磁盤(pán)未格式化”提示[16]。
步驟20:在DOS下,使用“CHKDSK H:/F/I”[17]自動(dòng)修復(fù)被破壞的NTFS_文件系統(tǒng),大約3分鐘后,H盤(pán)的文件系統(tǒng)已成功修復(fù)完成。
至此,H盤(pán)中的大部分文件已成功恢復(fù),但是被覆蓋的文件無(wú)法恢復(fù)。
針對(duì)GPT磁盤(pán)被Ghost后,提出了恢復(fù)GPT分區(qū)的基本思路、方法與步驟;該方法的難點(diǎn)在于計(jì)算GPT頭前92字節(jié)CRC校驗(yàn)和GPT分區(qū)表的CRC校驗(yàn);未覆蓋的邏輯盤(pán)中的數(shù)據(jù)可以成功恢復(fù)[18],但被覆蓋的數(shù)據(jù)無(wú)法恢復(fù)。如果硬盤(pán)總?cè)萘啃∮? TB且分區(qū)數(shù)量小于或者等于4個(gè)時(shí),也可以通過(guò)在硬盤(pán)0號(hào)扇區(qū)建立MBR[19]分區(qū)表的形式來(lái)恢復(fù)。