輕鬆恢復誤Ghost的硬盤
最近接連幫朋友恢復了幾塊被誤Ghost的硬盤,今天抽點時間寫寫處理過程,希望能給遇到此類問題的朋友一些參考。平時遇到的誤Ghost情況有兩種,一種是誤用了帶Ghost功能的XP安裝盤,這種安裝盤會重建分區表,把你的硬盤分爲四個區,然後把XP系統Ghost到C盤;第二種是利用Ghost備份還原系統,本應把備份還原到C分區,但一不小心還原到整個硬盤上了。這兩種操作的實質是一樣的,都改寫了硬盤的分區表,而且向硬盤覆蓋了一些數據。從數據恢復的角度來看,C分區被覆蓋了數據,國內由於沒有深層恢復技術,基本被覆蓋的數據是回不來的,但C分區之後的數據基本是可以完全恢復的。
舉個例子加以說明,一塊硬盤原來有三個分區,分別是C,D,E,D盤和E盤有重要數據。原打算用Ghost在C盤裝上一個XP系統,但操作時不小心,把Ghost備份還原到了整個硬盤,這下子硬盤上只有一個C分區了。如下圖所示意,這個硬盤共有16G ,原先C盤8G ,D和E各是4G ,現在只有一個C盤,大小是16G 。
從上圖可以看出,Ghost作了兩件事情,一是覆蓋了C盤的一部分空間,二是重寫了分區表。除了被Ghost覆蓋了一部分數據,其餘的數據都毫髮無損,我們只要能重建分區表,原來的D盤和E盤的數據就可以重見天日了。要重建分區表,關鍵是要知道第一個擴展分區起始的位置,找到了這個位置,所有的問題就都解決了。平時我解決這個問題,一般用Winhex或Diskgen,現把兩種方法都寫出來供大家參考。
一 Winhex
Winhex是個五星級的扇區編輯工具,雖然只有2M 大小,但功能及其強大,什麼分析分區表,分析DBR,計算偏移,簇鏈追蹤都不在話下,是數據恢復工程師的保留武器。我們先請它出場,但使用Winhex要求對數據存儲原理有一定了解(今天俺就不詳細介紹原理了),要不然看了Winhex的界面就崩潰的也不在少數。
我們把要恢復的硬盤掛到另外一臺計算機上,如下圖所示,磁盤1就是要目標硬盤,現在它只有一個分區,我們要把它的分區恢復原狀。
啓動Winhex,在工具菜單中選擇“磁盤編輯器”,如下圖所示,選擇打開第二塊物理硬盤HD1(wmware搭的實驗環境)。
Winhex打開了物理硬盤,如下圖所示就是0扇區的內容,0扇區內容分爲三部分,引導程序,分區表和55AA的結束標誌。圖中綠色部分就是分區表,由於現在硬盤中只有一個分區,因此分區表中只有一項。
好,現在我們要重建正確的分區表,分區表中要有兩項,一項是對主分區C的描述,另一項是對擴展分區的描述。現在的關鍵是要找出擴展分區的起點,由於原硬盤的C分區大約是8000M ,每個柱面的大小是255×63×512=8225280字節=7.8M ,因此原擴展分區的起點大約是8000÷7.8=1025,也就是說擴展分區的起點在1025柱面附近。考慮到誤差因素,我們放寬範圍,讓Winhex從950柱面開始搜索擴展分區的起始扇區。擴展分區的起始扇區有擴展分區表,而且扇區以55AA結束,我們根據這個特徵可以指定搜索條件,具體思路是每個扇區512個字節,編號從0到511,我們讓Winhex檢索哪個扇區的510和511字節是55和AA,這個扇區就有可能是我們要找的擴展分區起始扇區。當然了,也有可能某個不相干的扇區也是以55AA結尾,那就要作進一步的篩選。一般情況下,擴展分區的起始扇區總是位於某個柱面的0磁頭1扇區,這些條件我們都要加以利用。
好了,首先定位到950柱面0磁頭1扇區,我們準備從這裏開始搜索,在Winhex的“位置”菜單中選擇“轉到扇區”,如下圖所示,填入參數是950/0/1。再次聲明,950柱面只是一個憑經驗估算的結果。
在Winhex“搜索”菜單中,選擇“查找16進制數值”,如下圖所示。
如下圖所示,我們輸入了搜索參數,搜索的16進制數值爲55AA,搜索方向是向下,這是告訴Winhex從950柱面向後搜索。條件設爲從偏移510開始,因爲1個扇區有512字節,編號從0字節到511,55在510位置,AA在511位置。
搜索開始了,一會就找到了一個符合條件的扇區,到底是不是我們要照的擴展分區起始扇區呢?我們在Winhex的“查看”菜單中選擇顯示“詳細資料面板“,這樣就可以顯示出扇區的LBA和CHS參數,如下圖所示,這個扇區位於1019柱面254磁頭63扇區。顯然是一個NTFS分區的結束扇區,很有可能就是原C盤的最後一個扇區。這個扇區不是我們需要的,繼續搜索!
再向下找到的扇區就很象我們的目標了,如下圖所示,這個扇區中有一個分區表,而且位置在1020柱面0磁頭1扇區,和我們估算的1025柱面相差無幾,憑經驗基本可以認定這就是我們要找的目標。
好了,假定我們找到的1020柱面0磁頭1扇區就是擴展分區的起點,那我們就可以判斷原先的C分區是從0柱面1磁頭1扇區開始,到1019柱面254磁頭63扇區結束。那擴展分區結束在什麼地方呢?從分區表中的第二項可以知道答案,分區表的第二項描述了第二個擴展分區的起點和終點,第二個擴展分區的終點就是我們要找的擴展分區的結束位置。從分區表來看,第二個擴展分區的起點距當前扇區有7D 04 7E個扇區,大小是88 C 8 AE個扇區。經過計算,擴展分區的終點是2087柱面254磁頭63扇區。說到這兒,要對一些朋友說聲抱歉了,這些計算涉及到分區原理,如果以前沒有接觸過,確實不容易看懂。我會抽時間寫一些介紹數據恢復原理的文章,現在大家如果理解起來有問題,可以參考第二種方法。
經過計算,我們算出C分區從 0/1/1 -1019/254/63,擴展分區從 1020/0/1-2087/254/63。有了這些參數,我們在硬盤0扇區的分區表中寫出兩項分區表,分別描述C分區和擴展分區就可以了。如下圖所示,兩項分區表的參數分別是 80 01 01 00 07 FE FF FF 3F 00 00 00 BD 08 FA 00和00 00 C 1 FF 0F FE FF FF FC 08 FA 00 2C CD 05 01。修改完分區表後,保存設置,重啓計算機。
重啓計算機後,我們發現磁盤1中已經有了三個分區,如下圖所示,其中F和G就是原先硬盤中的D和E,現在這兩個分區應該可以正常訪問,數據應該被100%恢復。
打開F盤看看,如下圖所示,數據都回來了,用同樣方法可以驗證第三個分區的內容也被恢復了。現在硬盤中的第一個分區肯定不能訪問了,但我們只要用Ghost備份對第一個分區執行一次恢復操作就可以了。至此,數據恢復成功完成!
以上這種方法適合瞭解分區原理的用戶,如果您不瞭解分區表的參數含義,不用擔心,您可以選擇下一種方法。
二 Diskgen
Diskgen是國內一款著名的分區恢復軟件,它可以快速地進行分區表的重建,備份,恢復等工作,是進行分區恢復時的好幫手。尤其是它查找分區表時進行了優化,每個磁頭只檢查第一個扇區,因此查找速度很快,不過它的這個特性有時也會遇到麻煩,具體案例以後再給大家介紹。Diskgen有DOS版本和Windows版本,用哪個都可以,我一般用的是深山紅葉光盤中帶的DOS版Diskgen,我感覺已經夠用了,記住,我們可以依靠工具但決不能依賴工具,工具不過是工程師思路的延伸而已。
把硬盤恢復到故障狀態,在計算機中放入深山紅葉的啓動光盤,如下圖所示,出現了深山紅葉的啓動界面,我們選擇第二項“萬用MS-DOS工具箱“。
進入DOS工具箱後,運行Diskgen,如下圖所示。
啓動Diskgen後,我們首先在“硬盤”菜單中選擇第2硬盤,因爲我們準備恢復的硬盤是計算機中的第二塊硬盤。如下圖所示,第二塊硬盤中只有一個分區。我們準備重建分區表,在“工具”菜單中選擇“重建分區表”。
Diskgen提醒要先對分區表進行備份,我們選擇“繼續”。
接下來選擇工作方式,一定要選擇“交互方式”,這樣才能對恢復過程瞭然於胸。當然,如果實在不瞭解原理,用自動模式碰碰運氣也未嘗不可。
Diskgen首先找到了目前的第一個分區,這個分區結果是誤Ghost後形成的,不是我們所希望的,因此選擇“跳過”。
Diskgen繼續向下搜索,速度很快,如果Diskgen找到了一些分區,但都離1025柱面較遠,很有可能是以前分區遺留下來的,我們通通選擇“跳過”。直到如下圖所示,Diskgen找到了1020柱面的擴展分區,這是我們需要的,點擊“保留”。這樣,Diskgen在重建分區表時就會爲這個擴展分區自動創建一個分區項。
擴展分區之前的8G 空間還沒有分區,我們點擊硬盤的前8G 未分區空間,在“分區”菜單中選擇“新建分區”,如下圖所示。
Diskman詢問是否將擴展分區之前的空間都劃給此分區,點擊“確定”。
Diskgen詢問是否將分區類型設爲FAT,由於我們用Ghost還原時分區的文件系統應該是NTFS,因此選擇“否”。
如下圖所示,Diskgen要求手工輸入分區類型,我們輸入NTFS的代碼07。
如下圖所示,分區重建完畢,新建了一個分區,找回了原來的擴展分區,存盤退出後重啓計算機。
如下圖所示,重啓計算機後分區恢復了正常,第二個和第三個分區的數據都被恢復了。
總結:誤Ghost形成的分區錯誤還是比較好處理的,只要將分區表正確重建,基本上C分區之後的數據都可以100%恢復。如果大家熟悉分區表參數,使用Winhex就可以完成任務,否則使用Diskgen輔助處理也是不錯的。千萬不要用Easyrecovery等工具掃描恢復,一是要花很長時間,另外掃描恢復的效果並不理想,至少不是100%恢復。恢復誤Ghost只涉及分區,一般不涉及文件系統,除非你C盤有數據被Ghost覆蓋了,那樣的話可以用Easyrecovery碰碰運氣