硬盤數據恢復知識
1、系統工作機理的簡單介紹
這一部分在原作中是最重要的一章,考慮到篇幅關系,進行了大量的刪節。
①、DOS(DOS兼容系統)硬盤數據的構成
DOS磁盤系統,可以按照邏輯分區的概念管理物理空間,不同分區可以裝載不同的OS系統。 示意如下:
硬盤空間
第一扇區|分區1|分區2|分區3|分區4
主引導扇區|引導扇區|引導扇區|引導扇區|引導扇區|
各分區公用|各個分區相對獨立,可安裝不同操作系統。
對FAT結構的分區每一分區都有獨立的引導記錄,FDT表,FAT表等。同時,系統還有一個最為重要的主引導記錄。在0柱0面1扇區,今后我們用CYL代表柱、SIDE代表面,SEC代表扇區。以下一個FAT結構分區的簡圖。
保留區-磁盤參數表、DOS引導記錄
控制區-FAT表1、FAT表2根目錄區
數據區-數據區
以下簡單介紹一下重要的部分:
主引導記錄又稱主分區表、MBR等等:MBR占一個扇區,在CYL0、SIDE0、SEC1,由代碼區和數據區構成。其中代碼區是一端標準的程序,完成BIOS自舉到OSBOOT之間的工作,為OS啟動做最后的準備。標準代碼區可以由FDISK/MBR重建,但對于多系統引導的不標準MBR,將被這一操作破壞。MBR的數據區記錄了分區情況。
系統扇區:CYL0、SIDE0、SEC1-CYL0、SIDE0、SEC63,共62個扇
區引導區又稱BOOT區:CYL0、SIDE1、SEC1這是我們過去稱的DOS引
導區。也占一個扇區。
文件分配表又稱FAT:是記錄文件占用簇的情況和連接關系的地方。一般有兩個FAT表,起到備份的作用。FAT12、FAT16的第一FAT表一般均在0-1-2,FAT32的第一FAT表在0-1-33。由于FAT表記錄文件占用扇區連接的地方,如果兩個FAT表都壞了,后果不堪設想。
由于FAT表的長度與當前分區的大小有關所以FAT2的地址是需要計算的。根目錄區(ROOT、FDT):這里記錄了根目錄里的目錄文件項等,ROOT區跟在FAT2后面。
數據區:跟在ROOT區后面,這才是數據內容。其實,MBR、隱含扇區、BOOT區,重建都比較容易。數據恢復的關鍵在于恢復數據文件。由于FAT表記錄了文件在硬盤上占用扇區的鏈表,如果2個FAT表都完全損壞了。那么恢復文件,特別是占用多個不連續扇區文件就相當困難了。
②、主引導記錄簡單說明:
主引導記錄是硬盤引導的起點,關于代碼區不多說了,其數據區,比較重要的是2個標志,80H和55AA,80H一般在偏移1BE處,80是分區激活的標志的標記表示系統可引導,且整個分區表只能有一個80標記。另一個就是結尾的55AA標記,用來表示主引導記錄是一個有效的記錄。另外,各個分區自身的引導記錄,也是以55AA結束,這是我們查找分區的標志。我們后面在介紹如何主引導記錄中,給出了一個完整的分區表的例子,大家可對照查看。數據區中,用10H字節表示一個分區,最多可表示4個分區,分別從1BE、1CE、1DE、1EE開始,我們后面給出了分區表項對應地址的含義。大家可以對應分析一下以下分區的情況。
800101000BFEBFFC3F00-00007E86BB00
①②③④⑤⑥
①:激活標記,80表示可引導分區
②:分區開始的磁頭號為01、開始的扇區號為01、開始的柱面號為00,由于開始的扇區號為2進制6位,而開始的柱面號為2進制10位,因此扇區號所用字節的高兩位要加在柱面號高兩位。
③:分區的系統類型FAT32(0B),01是FAT12,04為FAT16,06為BIGDOS,07為NTFS,
其他參見分區類型表。
④:分區結束磁頭號254、分區結束扇區號63、分區結束柱面號764
⑤:首扇區的相對扇區號63
⑥:總扇區數12289622
2、常見手工處理工具與DOS外部命令介紹
DEBUG:古老和最為常見的調試跟蹤軟件,始終捆綁在微軟的DOS/WIN9X操作系統中。有19個子命令。有編寫執行匯編指令,直接讀寫絕對扇區和內存單元等功能,可以在最艱苦的條件下工作。DOS6.22以下的系統,DEBUG.EXE在DOS目錄下,WIN9X系統中它在WINDOWS\COMMAND目錄下,它
也出現在WIN9X所生成的應急盤中。DISKEDIT:常見16進制編輯軟件,字符界面,可以
以文件方式和扇區方式讀寫邏輯內容,可以讀寫絕對扇區,可以方便的查找編輯分區表、FAT表、ROOT區等重要扇區。這一點要比DEBUG更方便。但在一些重要扇區損壞的情況下,DISKEDIT可能無法啟動。DISKEDIT軟件可以在著名的NortonUtilities軟件包中找到。最新的DISKEDIT出現在NU4中。
NDD:常見的FAT文件結構磁盤修復工具,就是著名的NORTON磁盤醫生,可以自動修復分區丟失等情況,可以搶救軟盤壞區中的數據,強制讀出后搬移到其他空白扇區。希望大家不要再使用NORTONFORDOS7或8的NDD,這個版本由于不支持大分區、FAT32、長文件名等技術,會給你帶來大量的麻煩。建議大家使用NortonUtilities4或更高版本中的NDD.EXE,這是純DOS下的工具。在硬盤崩潰或異常的情況下,他可能可以帶給用戶以希望。WIN9X下的磁盤醫生調用的并不是這個程序,而
是NDD32.EXE.
FDISK:FDISK當然是個危險的命令,很多人非常恐懼,事實上,FDISK命令的運行并不影響任何分區內的硬盤數據,他對分區的設置操作,只改變主分區表的數據區。而特別是FDISK異常重要的隱含參數/MBR,可以重建主分區表的代碼區,清除主引導型病毒等。這
是非常有用的操作。DOS6.22以下的系統,FDISK.EXE在DOS目錄下,WIN9X系統中它在WINDOWS\COMMAND目錄下,它也出現在WIN9X所生成的應急盤中。
FORMAT:在一些人眼中,FORMAT是最可怕的命令,但他并不是對硬盤清零,特別值得注意的是,很多文件恢復工具都建議你恢復前先FORMAT該分區起到保護的餓作用。DOS6.22以下的系統,FORMAT.COM在DOS目錄下,WIN9X系統中它在WINDOWS\COMMAND目錄下,它也出現在WIN9X所生成的應急盤中。
HD-COPY:傳統的軟盤COPY工具,2.0版本以后加入了強制讀的功能,可以讀出一些損壞扇區的內容。
SYS:SYS命令是重建BOOT區的最簡潔的手段,也可以殺除BOOT區病毒。DOS6.22以下的系統,sys.COM在DOS目錄下,WIN9X系統中它在WINDOWS\COMMAND目錄下,它也出現在WIN9X所生成的應急盤中。
令我非常遺憾的是,至今我沒有發現比較出色的扇區級備份鏡象工具,我曾寫過一個HD-MIRROR,但由于錯誤較多,我提供下載的第二天就停止了發布,另外fixc的作者noz寫過
一個,但可惜只適合相同的硬盤。我也曾以為GHOST可以做到這點,事實上,你目前還不能指望他為你備份一塊深度破損的硬盤。。如果有一個有效的能以按扇區機制(而不是文件機制)壓縮備份一塊硬盤將之做成一個鏡象文件的話,那么我們的恢復工作就擁有了更多的保證和余地。我們可以更大膽的做恢復的嘗試。
3、一些自動處理工具或軟件包
首先介紹國內的一些免費修復工具
FIXMBR:何公道先生寫的一個修復MBR的工具,適合處理邏輯分區丟失的情況,有一些可選參數,支持FAT32、FAT16,不支持NTFS、LINUX等分區,支持8.4G以上硬盤。可修復CIH發作后的擴展邏輯分區。
VRVFIX:北信源公司的推出的修復硬盤共享工具,適合處理邏輯分區丟失的情況,處理的基本比較準確。支持FAT32、FAT16,不支持NTFS、LINUX等分區。也不支持8。4G以上硬盤。
FIXC:國內最早出現的可以修復部分被CIH破壞的C盤的工具,作者是NOZ,新版本也加
入了修復分區信息的功能,支持FAT32、FAT16,有限支持NTFS,不支持8。4G以上硬盤。目前的版本已經比較完善。
FIXHDPT:TBSOFT工作室的分區信息修復工具。支持FAT32、FAT16,不支持NTFS和LINUX,不支持8。4G以上硬盤,是歷史比較長的工具之一。
RE(ReapirEasy):本人早期寫的分區表修復工具,支持FAT32、FAT16,有限支持NTFS,不支持8.4G
以上硬盤,和某些BIOS不兼容。其整體水準低于前面列舉的工具。
國外一些系統維護的工具目前已經達到了非常強大的程度。
NortonUtilities:歷史最悠久的系統維護工具。不僅可以數據恢復,還可以系統加速和修補內存錯誤。目前最新的版本是NU4.5FOR9X、NU2FORNT等。
Tiramint:最為出色的災難恢復工具之一,有NTFS、FAT32、FAT16、NOVELL4種版本。生成急救軟盤,可以對深度破壞的磁盤進行交叉恢復。
4、常用的基本操作
①讀出主引導記錄:這是系統級數據恢復可能涉及最多的程序之一。
例:
DEBUG
-a100;從此處開始匯編
126C:0100movax,201;讀操作一個扇區
126C:0103movbx,300;送入地址300
126C:0106movcx,1;0面1扇
126C:0109movdx,80;80H為硬盤,頭為0
126C:010Cint13
126C:010Eint3
126C:010F
-g=100;執行
AX=0050BX=0300CX=0001DX=0080SP=FFEEBP=0000SI=0000DI=0000
DS=126CES=126CSS=126CCS=126CIP=010ENVUPEIPLNZNAPONC
這里用了I/O中斷13,涉及的寄存器含義為
ah,操作方式,02H為讀,03H為寫
al,送扇區數
bx,送準備裝入扇區的內存偏移地址
cx送從哪一道哪一扇區開始,我們一般依靠改換CX來讀寫不同邏輯盤某個邏輯扇區。dx,送盤符和頭數
INT3是斷點中斷,使程序運行到此停止。
②顯示引導區內容:我們把扇區讀到某個內存地址并不是目的。而是為了看到他的內容,在DEBUG中D命令可以方便的查看內存單元的內容。續前例,如果我們要看到主引導區的內容的話,既然裝載到300。