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