硬盤數(shù)據(jù)恢復教程
前言:
此文章從google搜索經(jīng)鄙人整理而來,并非本人的造詣至此,請勿聯(lián)系筆者。
硬盤數(shù)據(jù)恢復很大程度依靠運氣,無必勝把握,并且不與投入時間成正比,不要寄予太大的希望。
請勿輕易拿自己硬盤做實驗。
建議數(shù)據(jù)恢復前先用硬盤保護卡對拷到其他硬盤上做一個備份,然后修理備份。(用ghost不行)
●硬盤數(shù)據(jù)恢復,一概論
初買來一塊硬盤,我們是沒有辦法使用的,你需要將它分區(qū)、格式化,然后再安裝上操作系統(tǒng)才可以使用。一個完整硬盤的數(shù)據(jù)應該包括五部分:MBR,DBR,F(xiàn)AT,DIR區(qū)和DATA區(qū)。其中只有主引導扇區(qū)是*的,其它的隨你的分區(qū)數(shù)的增加而增加。
主引導扇區(qū)
主引導扇區(qū)位于整個硬盤的0磁道0柱面1扇區(qū),包括硬盤主引導記錄MBR(Main Boot Record)和分區(qū)表DPT(Disk Partition Table)。其中主引導記錄的作用就是檢查分區(qū)表是否正確以及確定哪個分區(qū)為引導分區(qū),并在程序結束時把該分區(qū)的啟動程序(也就是操作系統(tǒng)引導扇區(qū))調入內存加以執(zhí)行。至于分區(qū)表,很多人都知道,以80H或00H為開始標志,以55AAH為結束標志,共64字節(jié),位于本扇區(qū)的最末端。值得一提的是,MBR是由分區(qū)程序(例如DOS 的Fdisk.exe)產(chǎn)生的,不同的操作系統(tǒng)可能這個扇區(qū)是不盡相同。如果你有這個意向也可以自己去編寫一個,只要它能完成前述的任務即可,這也是為什么能實現(xiàn)多系統(tǒng)啟動的原因(說句題外話:正因為這個主引導記錄容易編寫,所以才出現(xiàn)了很多的引導區(qū)病毒)。
操作系統(tǒng)引導扇區(qū)
OBR(OS Boot Record)即操作系統(tǒng)引導扇區(qū),通常位于硬盤的0磁道1柱面1扇區(qū)(這是對于DOS來說的,對于那些以多重引導方式啟動的系統(tǒng)則位于相應的主分區(qū)/擴展分區(qū)的*個扇區(qū)),是操作系統(tǒng)可直接訪問的*個扇區(qū),它也包括一個引導程序和一個被稱為BPB(BIOS Parameter Block)的本分區(qū)參數(shù)記錄表。其實每個邏輯分區(qū)都有一個OBR,其參數(shù)視分區(qū)的大小、操作系統(tǒng)的類別而有所不同。引導程序的主要任務是判斷本分區(qū)根目錄前兩個文件是否為操作系統(tǒng)的引導文件(例如MSDOS或者起源于MSDOS的Win9x/Me的IO.SYS和MSDOS.SYS)。如是,就把*個文件讀入內存,并把控制權交予該文件。BPB參數(shù)塊記錄著本分區(qū)的起始扇區(qū)、結束扇區(qū)、文件存儲格式、硬盤介質描述符、根目錄大小、FAT個數(shù)、分配單元(Allocation Unit,以前也稱之為簇)的大小等重要參數(shù)。OBR由高級格式化程序產(chǎn)生(例如DOS 的Format.com)。
文件分配表
FAT(File Allocation Table)即文件分配表,是DOS/Win9x系統(tǒng)的文件尋址系統(tǒng),為了數(shù)據(jù)安全起見,F(xiàn)AT一般做兩個,第二FAT為*FAT的備份, FAT區(qū)緊接在OBR之后,其大小由本分區(qū)的大小及文件分配單元的大小決定。關于FAT的格式歷來有很多選擇,Microsoft 的DOS及Windows采用我們所熟悉的FAT12、FAT16和FAT32格式,但除此以外并非沒有其它格式的FAT,像Windows NT、OS/2、UNIX/Linux、Novell等都有自己的文件管理方式。
目錄區(qū)
DIR是Directory即根目錄區(qū)的簡寫,DIR緊接在第二FAT表之后,只有FAT還不能定位文件在磁盤中的位置,F(xiàn)AT還必須和DIR配合才能準確定位文件的位置。DIR記錄著每個文件(目錄)的起始單元(這是最重要的)、文件的屬性等。定位文件位置時,操作系統(tǒng)根據(jù)DIR中的起始單元,結合FAT表就可以知道文件在磁盤的具體位置及大小了。在DIR區(qū)之后,才是真正意義上的數(shù)據(jù)存儲區(qū),即DATA區(qū)。
數(shù)據(jù)區(qū)
DATA雖然占據(jù)了硬盤的絕大部分空間,但沒有了前面的各部分,它對于我們來說,也只能是一些枯燥的二進制代碼,沒有任何意義。在這里有一點要說明的是,我們通常所說的格式化程序(指高級格式化,例如DOS下的Format程序),并沒有把DATA區(qū)的數(shù)據(jù)清除,只是重寫了FAT表而已,至于分區(qū)硬盤,也只是修改了MBR和OBR,絕大部分的DATA區(qū)的數(shù)據(jù)并沒有被改變,這也是許多硬盤數(shù)據(jù)能夠得以修復的原因。但即便如此,如MBR/OBR/FAT/DIR之一被破壞的話,也足夠咱們那些所謂的DIY老鳥們忙乎半天了……需要提醒大家的是,如果你經(jīng)常整理磁盤,那么你的數(shù)據(jù)區(qū)的數(shù)據(jù)可能是連續(xù)的,這樣即使MBR/FAT/DIR全部壞了,我們也可以使用磁盤編輯軟件(比如DOS下的DiskEdit),只要找到一個文件的起始保存位置,那么這個文件就有可能被恢復(當然了,這需要一個前提,那就是你沒有覆蓋這個文件……)。
硬盤分區(qū)方式
我們平時說到的分區(qū)概念,不外乎三種:主分區(qū)、擴展分區(qū)和邏輯分區(qū)。
主分區(qū)是一個比較單純的分區(qū),通常位于硬盤的最前面一塊區(qū)域中,構成邏輯C磁盤。在主分區(qū)中,不允許再建立其它邏輯磁盤。
擴展分區(qū)的概念則比較復雜,也是造成分區(qū)和邏輯磁盤混淆的主要原因。由于硬盤僅僅為分區(qū)表保留了64個字節(jié)的存儲空間,而每個分區(qū)的參數(shù)占據(jù)16個字節(jié),故主引導扇區(qū)中總計可以存儲4個分區(qū)的數(shù)據(jù)。操作系統(tǒng)只允許存儲4個分區(qū)的數(shù)據(jù),如果說邏輯磁盤就是分區(qū),則系統(tǒng)最多只允許4個邏輯磁盤。對于具體的應用,4個邏輯磁盤往往不能滿足實際需求。為了建立更多的邏輯磁盤供操作系統(tǒng)使用,系統(tǒng)引入了擴展分區(qū)的概念。
所謂擴展分區(qū),嚴格地講它不是一個實際意義的分區(qū),它僅僅是一個指向下一個分區(qū)的指針,這種指針結構將形成一個單向鏈表。這樣在主引導扇區(qū)中除了主分區(qū)外,僅需要存儲一個被稱為擴展分區(qū)的分區(qū)數(shù)據(jù),通過這個擴展分區(qū)的數(shù)據(jù)可以找到下一個分區(qū)(實際上也就是下一個邏輯磁盤)的起始位置,以此起始位置類推可以找到所有的分區(qū)。無論系統(tǒng)中建立多少個邏輯磁盤,在主引導扇區(qū)中通過一個擴展分區(qū)的參數(shù)就可以逐個找到每一個邏輯磁盤。
需要特別注意的是,由于主分區(qū)之后的各個分區(qū)是通過一種單向鏈表的結構來實現(xiàn)鏈接的,因此,若單向鏈表發(fā)生問題,將導致邏輯磁盤的丟失。
數(shù)據(jù)存儲原理
既然要進行數(shù)據(jù)的恢復,當然數(shù)據(jù)的存儲原理我們不能不提,在這之中,我們還要介紹一下數(shù)據(jù)的刪除和硬盤的格式化相關問題……
文件的讀取
操作系統(tǒng)從目錄區(qū)中讀取文件信息(包括文件名、后綴名、文件大小、修改日期和文件在數(shù)據(jù)區(qū)保存的*個簇的簇號),我們這里假設*個簇號是0023。
操作系統(tǒng)從0023簇讀取相應的數(shù)據(jù),然后再找到FAT的0023單元,如果內容是文件結束標志(FF),則表示文件結束,否則內容保存數(shù)據(jù)的下一個簇的簇號,這樣重復下去直到遇到文件結束標志。
文件的寫入
當我們要保存文件時,操作系統(tǒng)首先在DIR區(qū)中找到空區(qū)寫入文件名、大小和創(chuàng)建時間等相應信息,然后在Data區(qū)找到閑置空間將文件保存,并將Data區(qū)的*個簇寫入DIR區(qū),其余的動作和上邊的讀取動作差不多。
文件的刪除
Win9x的文件刪除工作卻是很簡單的,簡單到只在目錄區(qū)做了一點小改動--將目錄區(qū)的文件的*個字符改成了E5就表示將改文件刪除了。
附錄:
--------------------------------------------------------------------------------
Fdisk和Format的一點小說明
和文件的刪除類似,利用Fdisk刪除再建立分區(qū)和利用Format格式化邏輯磁盤(假設你格式化的時候并沒有使用/U這個無條件格式化參數(shù))都沒有將數(shù)據(jù)從DATA區(qū)直接刪除,前者只是改變了分區(qū)表,后者只是修改了FAT表,因此被誤刪除的分區(qū)和誤格式化的硬盤完全有可能恢復……
系統(tǒng)啟動流程
各種不同的操作系統(tǒng)啟動流程不盡相同,我們這里以Win9x/DOS的啟動流程為例。
*階段:系統(tǒng)加電自檢POST過程。POST是Power On Self Test的縮寫,也就是加電自檢的意思,微機執(zhí)行內存FFFF0H處的程序(這里是一段固化的ROM程序),對系統(tǒng)的硬件(包括內存)進行檢查。
第二階段:讀取分區(qū)記錄和引導記錄。當微機檢查到硬件正常并與CMOS設置相符后,按照CMOS設置從相應設備啟動(我們這里假設從硬盤啟動),讀取硬盤的分區(qū)記錄(DPT)和主引導記錄(MBR)。
第三階段:讀取DOS引導記錄。微機正確讀取分區(qū)記錄和主引導記錄后,如果主引導記錄和分區(qū)表校驗正確,則執(zhí)行主引導記錄并進一步讀取DOS引導記錄(位于每一個主分區(qū)的*個扇區(qū)),然后執(zhí)行該DOS引導記錄。
第四階段:裝載系統(tǒng)隱含文件。將DOS系統(tǒng)的隱含文件IO.SYS入內存,加載基本的文件系統(tǒng)FAT,這時候一般會出現(xiàn)Starting Windows 9x...的標志,IO.SYS將MS.SYS讀入內存,并處理System.dat和User.dat文件,加載磁盤壓縮程序。
第五階段:實DOS模式配置。系統(tǒng)隱含文件裝載完成,微機將執(zhí)行系統(tǒng)隱含文件,并執(zhí)行系統(tǒng)配置文件(Config.sys),加載Config.sys中定義的各種驅動程序。
第六階段:調入命令解釋程序(Command.com)。系統(tǒng)裝載命令管理程序,以便對系統(tǒng)的各種操作命令進行協(xié)調管理(我們所使用的Dir、Copy等內部命令就是由Command.com提供的)。
第七階段:執(zhí)行批處理文件(Autoexec.bat)。微機將一步一步地執(zhí)行批處理文件中的各條命令。
第八階段:加載Win.com。Win.com負責將Windows下的各種驅動程序和啟動執(zhí)行文件加以執(zhí)行,至此啟動完畢。
●硬盤數(shù)據(jù)恢復,三文件分配表
FAT是DOS、Windows9X系統(tǒng)的文件尋址格式,位于DBR之后。
在解釋文件分配表的概念的時候,我們有必要談談簇(Cluster)的概念。文件占用磁盤空間,基本單位不是字節(jié)而是簇。一般情況下,軟盤每簇是1個扇區(qū),硬盤每簇的扇區(qū)數(shù)與硬盤的總容量大小有關,可能是4、8、16、32、64……同一個文件的數(shù)據(jù)并不一定完整地存放在磁盤的一個連續(xù)的區(qū)域內,而往往會分成若干段,像一條鏈子一樣存放。這種存儲方式稱為文件的鏈式存儲。由于硬盤上保存著段與段之間的連接信息(即FAT),操作系統(tǒng)在讀取文件時,總是能夠準確地找到各段的位置并正確讀出。
為了實現(xiàn)文件的鏈式存儲,硬盤上必須準確地記錄哪些簇已經(jīng)被文件占用,還必須為每個已經(jīng)占用的簇指明存儲后繼內容的下一個簇的簇號。對一個文件的*一簇,則要指明本簇無后繼簇。這些都是由FAT表來保存的,表中有很多表項,每項記錄一個簇的信息。由于FAT對于文件管理的重要性,所以為了安全起見,F(xiàn)AT有一個備份,即在原FAT的后面再建一個同樣的FAT。初形成的FAT中所有項都標明為“未占用”,但如果磁盤有局部損壞,那么格式化程序會檢測出損壞的簇,在相應的項中標為“壞簇”,以后存文件時就不會再使用這個簇了。FAT的項數(shù)與硬盤上的總簇數(shù)相當,每一項占用的字節(jié)數(shù)也要與總簇數(shù)相適應,因為其中需要存放簇號。FAT的格式有多種,最為常見的是FAT16和FAT32。
當一個磁盤Format后,在其邏輯0扇區(qū)(即BOOT扇區(qū))后面的幾個扇區(qū)中存在著一個重要的數(shù)據(jù)表-文件分配(FAT),文件分配表一式兩份,占據(jù)扇區(qū)的多小憑磁盤類型大小而定。顧名思義,文件分配表是用來表示磁盤問件的空分配信息的。它不對引導區(qū),文件目錄的信息進行表示,也不真正存儲文件內容。
我們知道磁盤是由一個一個扇區(qū)組成的,若干個扇區(qū)合為一個簇,文件存取是以簇為單位的,哪怕這個文件只有1個字節(jié)。每個簇在文件分配表中都有對應的表項,簇號即為表項號,每個表項占1.5個字節(jié)(磁盤空間在10MB以下)或2個字節(jié)(磁盤空間在10MB以上)。為了方便起見,以后所說的表項都是指2個字節(jié)的。
文件分配表結構如1(H表示16進制)
表1
第0字節(jié) 表頭,表磁盤類型。FFH雙面軟盤,每次道8扇區(qū)FEH單面軟盤,每磁道8扇區(qū)FDH雙面軟盤,每磁道9扇區(qū)FCCH單面軟盤,每磁道9扇區(qū)FC8H硬盤
第1~2字節(jié) (表項號1)表示*簇狀態(tài),因*簇被系統(tǒng)占據(jù),故此兩字節(jié)為FFFFH
第3~4字節(jié) (表項號2)表示第二簇狀態(tài),若為FFFH表此簇為壞的,DOS已標記為不能用;0000H表示此簇為空,可以用;FFF8H表不能示該簇為文件的*一簇;其余數(shù)字表示文件的下一個簇號,注意高字節(jié)在后,低字節(jié)在前。
第5~6字節(jié) (表項號3)表示第三簇狀態(tài),同上。
注意:
不要把表項內的數(shù)字誤認為表示當前簇號,而應是該文件的下一個簇的簇號。.高字節(jié)在后,低字節(jié)在前是一種存儲數(shù)字方式,讀出時應對其進行調整。是如兩字節(jié)12H,34H,應調整為3412H。
文件分配表與文件目錄(FDT)相配合,可以統(tǒng)一管理整個磁盤的文件。它告訴系統(tǒng)磁盤上哪些簇是壞的或已被使用,哪些簇可以用,并存儲每個文件所使用的簇號。它是文件的“總調度師”。
當DOS寫文件時,首先在文件目錄中檢查是否有相同文件名,若無則使用一個文件目錄表項,然后依次檢測FAT中的每個表項對應的簇中,同時將該簇號寫入文件目錄表項相的26-27字節(jié),如文件長度不止一簇,則繼續(xù)向后尋找可用簇,找到后將其簇號寫入上一次找到的表項中,如此直到文件結束,在*一簇的表項里填上FFF8H,形成單向鏈表。
DOS刪除文件時只是把文件目錄表中的該文件的表項第0個字節(jié)改為E5H,表此項已被刪除,并在文件分配表中把該文件占用的各簇的表項清0,并釋放空間。其文件的內容仍然在盤上,并沒有被真正刪除,這就是undelete.exe,unerase.exe等一類恢復刪除工具能起作用的原因。
文件分配表在系統(tǒng)中的地位十分重要,用戶*不要去修改它,以免誤操作帶來嚴重的后果。
FAT表的定位
硬盤分區(qū)的主要結構說明:
(Cylinder柱面/磁道-Side磁頭-Sector扇區(qū)地址以下簡稱為?-?-?)
《主分區(qū)》
名稱 地址 長度(扇區(qū))
主引導記錄(Main Boot Record) 0-0-1 1
系統(tǒng)扇區(qū)(System Secotrs) 0-0-2,0-0-63 62
引導扇區(qū)(Boot) 0-1-1 1
FAT16系統(tǒng)中,此扇區(qū)包含BPB(BIOS Parameter Block)表,描述邏輯盤結構組成,包含隱藏扇區(qū)數(shù)目(從0-1-1開始計算)、FAT扇區(qū)數(shù)、FAT拷貝數(shù)、硬盤磁頭總數(shù)、根目錄表項*值等。
FAT32系統(tǒng)中,BPB表的偏移與FAT16不同,但表項基本相同。整個隱藏扇區(qū)部分都作為邏輯盤的描述區(qū)域。
隱藏扇區(qū)(Hidden Secotrs):
FAT16 0-1-1 1
FAT32 0-1-1 32
文件分配表(File Allocation Table):
FAT16 0-1-2 根據(jù)邏輯盤容量變化
FAT32 0-1-33 根據(jù)邏輯盤容量變化
說明:
FAT16的每個表項由2字節(jié)(16位)組成,通常每個表項指向的簇包含64個扇區(qū),即32K字節(jié)。
邏輯盤容量*為2047MB。
FAT32的每個表項由4字節(jié)(32位)組成,通常每個表項指向的簇包含8個扇區(qū),即4K字節(jié)。
邏輯盤容量最小為512MB。
對于C分區(qū),在MBR的偏移01c2H處,F(xiàn)AT16為06H,F(xiàn)AT32為0CH。
有關計算公式為:
每個扇區(qū)長度=512字節(jié)
總簇數(shù)=邏輯盤容量/簇容量
總簇數(shù)=FAT表長度(字節(jié))/每個表項長度(字節(jié))-2
FAT表長度=邏輯盤容量/簇容量*每個表項長度
FAT表的開始由介質描述符+一串“已占用”標志組成:
FAT16硬盤----F8 FF FF 7F
FAT32硬盤----F8 FF FF 0F FF FF FF 0F
每個有效的FAT結構區(qū)包含兩個完全相同的拷貝:FAT1、FAT2
文件目錄表(File Directory Table),即根目錄區(qū),又稱為ROOT區(qū):
緊跟在FAT2的下一個扇區(qū),長度為32個扇區(qū)(256個表項)。如果支持長文件名,則每個表項
為64個字節(jié),其中,前32個字節(jié)為長文件鏈接說明;后32個字節(jié)為文件屬性說明,包括文件長
度、起始地址、日期、時間等。如不支持長文件名,則每個表項為32個字節(jié)的屬性說明。
數(shù)據(jù)區(qū)(Data Area):
緊跟在FDT的下一個扇區(qū),直到邏輯盤的結束地址。
《擴展分區(qū)》
名稱 地址 長度(扇區(qū))
擴展分區(qū)(Extend Partition) ?-y-1 1
系統(tǒng)扇區(qū)(System Secotrs) ?-y-2,?-y-63 62
引導扇區(qū)(Boot) ?-(y+1)-1 1
其后各項與主分區(qū)相同……
FAT表引起的讀寫故障
硬盤文件分配表龐大無法手工修復,只能依靠工具。
FAT表記錄著硬盤數(shù)據(jù)的存儲地址,每一個文件都有一組FAT鏈指定其存放的簇地址。FAT表的損壞意味著文件內容的丟失。慶幸的是DOS系統(tǒng)本身提供了兩個FAT表,如果目前使用的FAT表損壞,可用第二個進行覆蓋修復。但由于不同規(guī)格的磁盤其FAT表的長度及第二個FAT表的地址也是不固定的,所以修復時必須正確查找其正確位置,一些工具軟件如NU等本身具有這樣的修復功能,使用也非常的方便。采用DEBUG也可實現(xiàn)這種操作,即采用其m命令把第二個FAT表移到*個表處即可(不建議這樣做)。如果第二個FAT表也損壞了,則也無法把硬盤恢復到原來的狀態(tài),但文件的數(shù)據(jù)仍然存放在硬盤的數(shù)據(jù)區(qū)中,可采用CHKDSK或SCANDISK命令進行修復,最終得到*.CHK文件,這便是丟失FAT鏈的扇區(qū)數(shù)據(jù)。如果是文本文件則可從中提取出完整的或部分的文件內容。
軟盤文件分配FAT表修復
在運行某個程序時,有時會在屏幕上看到:File allocation table bad,drive A(文件分配表壞)的錯誤信息,導致程序不能正常運行。
我們知道,在磁盤中有兩個文件分配表:FAT1和FAT2。FAT1用于日常工作,F(xiàn)AT2備用。因此,在FAT1損壞時,可用FAT2表修補。
具體方法是:運行DEBUG,將FAT2讀入緩沖區(qū),用緩沖區(qū)的FAT2數(shù)據(jù)覆蓋磁盤中的FAT1。
例:修復3寸1.44M軟盤,在A驅
在DOS環(huán)境下進入debug環(huán)境
在“-”提示符下進行如下操作:
-L 100 0 0A 9
-W 100 0 1 9
-q
其它類型的軟盤的修復方法參照下表進行。
起止邏輯扇區(qū) 5.25"低密 5.25"高密 3.5"低密 3.5"高密
BOOT區(qū) 0 0 0 0
FAT1 1-2 1-7 1-3 1-9
FAT2 3-4 8-0EH 4-6 0A-12H
例如我們要修復5.25"高密軟盤的FAT,則需將上述參數(shù)改為:
-L 100 0 8 7
-W 100 0 1 7
-q
●硬盤數(shù)據(jù)恢復,二分區(qū)表的推算
Master Boot Record
The Master Boot Record is located at the physical beginning of a hard disk, editable using the Disk Editor. It consists of a master bootstrap loader code (446 bytes) and four subsequent, identically structured partition records. Finally, the hexadecimal signature 55AA completes a valid Master Boot Record.
硬盤的主引導記錄在硬盤的0磁頭0柱面1扇區(qū)。
主引導記錄由三部分組成:
(1)主引導程序;
(2)四個分區(qū)表;
(3)主引導記錄有效標志字。
詳見表1。
[表1主引導記錄結構]
位 置 內 容
0000H -00D9H 主引導記錄代碼區(qū)
00DAH -01BDH 空閑區(qū)
01BEH -01CDH 分區(qū)1結構信息
01CEH -01DDH 分區(qū)2結構信息
01DEH -01EDH 分區(qū)3結構信息
01EEH -01FDH 分區(qū)4結構信息
01FEH -01FFH 55 AAH 主 引 導 記 錄 有 效 標 志
說明:
A,分區(qū)表自偏移1BEH處開始,分區(qū)表共64個字節(jié),表中可填入四個分區(qū)信息,每十六個字節(jié)為一個分區(qū)說明項,這16個字節(jié)含義詳見表2。
B,必須注意:扇區(qū)號的高二位占用柱面號所在字節(jié)的*二位,即柱面號為10位,扇區(qū)號6位。
The format of a partition record is as follows:
Offset Size Description
0 8 bit A value of 80 designates an active partition.
1 8 bit Partition start head
2 8 bit Partition start sector (bits 0-5)
3 8 bit Partition start track (bits 8,9 in bits 6,7 of sector)
4 8 bit Operating system indicator
5 8 bit Partition end head
6 8 bit Partition end sector (bits 0-5)
7 8 bit Partition end track (bits 8,9 in bits 6,7 of sector)
8 32 bit Sectors preceding partition
C 32 bit Length of partition in sectors
Operating system indicators: (hexadecimal, incomplete list)
00 Empty partition-table entry
01 DOS FAT12
04 DOS FAT16 (up to 32 MB)
05 DOS 3.3+ extended partition
06 DOS 3.31+ FAT16 (over 32 MB)
07 OS/2 HPFS, Windows NT NTFS, Advanced Unix
08 OS/2 v1.0-1.3, AIX bootable partition, SplitDrive
09 AIX data partition
0A OS/2 Boot Manager
0B Windows 95+ FAT32
0C Windows 95+ FAT32 (using LBA-mode INT 13 extensions)
0E DOS FAT16 (over 32 MB, using INT 13 extensions)
0F Extended partition (using INT 13 extensions)
17 Hidden NTFS partition
1B Hidden Windows 95 FAT32 partition
1C Hidden Windows 95 FAT32 partition (using LBA-mode INT 13 extensions)
1E Hidden LBA VFAT partition
42 Dynamic disk volume
50 OnTrack Disk Manager, read-only partition
51 OnTrack Disk Manager, read/write partition
81 Linux
82 Linux Swap partition, Solaris (Unix)
83 Linux native file system (ext2fs/xiafs)
85 Linux EXT
86 FAT16 volume/stripe set (Windows NT)
87 HPFS fault-tolerant mirrored partition, NTFS volume/stripe set
BE Solaris boot partition
C0 DR-DOS/Novell DOS secured partition
C6 Corrupted FAT16 volume/stripe set (Windows NT)
C7 Corrupted NTFS volume/stripe set
F2 DOS 3.3+ secondary partition
[表2分區(qū)結構信息]
偏移 長度 含義
00H 1 活動分區(qū)指示符,該值為80H表示為可自舉分區(qū)(僅有一個),該值為00H表示其余分區(qū)。
01H 1 分區(qū)起始磁頭號。
02H 1 低6位是分區(qū)開始的扇區(qū),高2位是分區(qū)開始的柱面的頭兩位。
03H 1 分區(qū)開始的起始柱面號的低8位。
04H 1 系統(tǒng)標志,該值為01H表示采用12位FAT格式的DOS 分區(qū),該值04H表示采用16位FAT格式的DOS分區(qū),該值為05H表示為擴展DOS分區(qū),為06H表示為DOS系統(tǒng)。
05H 1 分區(qū)終止頭號
06H 1 低6位為分區(qū)結束的扇區(qū)號,頭2位為結束柱面號的前2位。
07H 1 分區(qū)結束柱面號的低8位。
08H 4 本分區(qū)前的扇區(qū)數(shù),低位字節(jié)在 前。
0CH 4 本分區(qū)總的扇區(qū)數(shù),低位字節(jié)在前。
重要公式:
02H為X,03H為Y。柱面=(X>>6)*16^2+Y;
以我的硬盤為例:
有九個可用分區(qū),二個不可用分區(qū);
兩個Primary NTFS分區(qū),第二個為active;
七個Extened 分區(qū),第五個為NTFS其他為FAT32.
.
主分區(qū)表數(shù)據(jù):位置cylinder0, head 0,sector1
偏移 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 33 C0 8E D0 BC 00 7C FB 50 07 50 1F FC BE 1B 7C
1 BF 1B 06 50 57 B9 E5 01 F3 A4 CB BE BE 07 B1 04
2 38 2C 7C 09 75 15 83 C6 10 E2 F5 CD 18 8B 14 8B
3 EE 83 C6 10 49 74 16 38 2C 74 F6 BE 10 07 4E AC
4 3C 00 74 FA BB 07 00 B4 0E CD 10 EB F2 89 46 25
5 96 8A 46 04 B4 06 3C 0E 74 11 B4 0B 3C 0C 74 05
6 3A C4 75 2B 40 C6 46 25 06 75 24 BB AA 55 50 B4
7 41 CD 13 58 72 16 81 FB 55 AA 75 10 F6 C1 01 74
8 0B 8A E0 88 56 24 C7 06 A1 06 EB 1E 88 66 04 BF
8 0A 00 B8 01 02 8B DC 33 C9 83 FF 05 7F 03 8B 4E
9 25 03 4E 02 CD 13 72 29 BE 59 07 81 3E FE 7D 55
A AA 74 5A 83 EF 05 7F DA 85 F6 75 83 BE 2E 07 EB
B 8A 98 91 52 99 03 46 08 13 56 0A E8 12 00 5A EB
C D5 4F 74 E4 33 C0 CD 13 EB B8 00 00 80 24 45 00
D 56 33 F6 56 56 52 50 06 53
1B 00 00
1C 01 46 07 FE 7F 1E C6 28 11 00 99 31 35 00 80 00
1D 41 30 07 FE 7F B2 30 85 4A 00 C3 1C 20 00 00 00
1E 41 B3 0F FE FF FF F3 A1 6A 00 08 FE F7 01 00 00
1F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
主分區(qū)表分析:
Master bootstrap loader code0000H -00D9H 33 C0 8E D0 BC 00 7C FB 50 。。。主引導記錄代碼,表示住分區(qū)表
01BEH -01CDH 分區(qū)1結構信息multi(0)disk(0)rdisk(0)partition(0)知該分區(qū)Boot Sector位于:起始磁頭為0頭,起始柱面為70D,起始扇區(qū)為1扇區(qū)。
01CEH -01DDH 分區(qū)2結構信息 multi(0)disk(0)rdisk(0)partition(1)活動分區(qū)指示符為80H,表示該分區(qū)為可自舉分區(qū)。系統(tǒng)標志為07表示OS/2 HPFS, Windows NT NTFS, Advanced Unix系統(tǒng)。知該分區(qū)Boot Sector位于:起始磁頭為0頭,起始柱面為304D,起始扇區(qū)為1扇區(qū)。
01DEH -01EDH 分區(qū)3結構信息Extended partition系統(tǒng)標志字節(jié)為0F,說明是擴展分區(qū)Extended partition (using INT 13 extensions)。從擴展分區(qū)說明項知下一個分區(qū)表位于:起始磁頭為0頭,起始柱面為435D,起始扇區(qū)為1扇區(qū)。
01EEH -01FDH 分區(qū)4結構信息分區(qū)說明項數(shù)據(jù)均為00H沒有定義。
01FEH -01FFH 55 AAH 主引導記錄有效標志
擴展分區(qū)一分區(qū)表數(shù)據(jù):位置cylinder435D, head 0,sector1
偏移 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1B 00 00
1C 41 B3 0B FE FF 08 3F 00 00 00 97 D5 53 00 00 00
1D C1 09 05 FE FF FF D6 D5 53 00 D6 D5 53 00 00 00
1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
擴展分區(qū)表分析:
01BEH -01CDH 分區(qū)1結構信息multi(0)disk(0)rdisk(0)partition(3)知該分區(qū)位于:起始磁頭為1頭,起始柱面為435D,起始扇區(qū)為1扇區(qū)(分區(qū)表占用磁頭0)。系統(tǒng)標志字0BH表示 Windows 95+ FAT32
01BEH -01CDH 分區(qū)1結構信息系統(tǒng)標志字節(jié)為05H,說明是擴展DOS分區(qū)。于是知下一個分區(qū)表位于:起始磁頭為0頭,起始柱面為777D,起始扇區(qū)為1扇區(qū)。
Partition Table Entry #3 數(shù)據(jù)均為00H沒有定義。
Partition Table Entry #4 數(shù)據(jù)均為00H沒有定義。
其他擴展分區(qū)同理。
---------------------------------------------------------------------------------------------------------------------
附錄:
Fdisk的MBR參數(shù)
MBR 系 FDISK.COM(EXE) 一項未公布的開關,隱含于 MS DOS 3.30,延至 MS DOS 8.0(Windows ME)。實踐中,有籍以修復主引導信息,重點在主引導程序。
FDISK /MBR 命令流程的分支有二:
讀得主引導扇區(qū)檢驗標志(字) AA55h,操作單一,僅向主引導扇區(qū)位移 0-1BDH 寫入當前系統(tǒng)固有的主引導程序,安全可靠。
難能可貴的是它不觸動主引導信息其余模塊(分區(qū)表、檢驗標志),以及隨后的 DOS 引導信息、文件分配表、根目錄,省事許多。檢出檢驗標志非 AA55h,寫主引導程序、初始化分區(qū)表及登錄檢驗標志,在 MS DOS 7.0 - 8.0 環(huán)境中,常規(guī)以系統(tǒng)支持的*容量分配給基本 DOS 分區(qū)的方式登錄分區(qū)表。分區(qū)表初始化(可能幸存的分區(qū)表被清除)的后果不難想象; 目前硬盤大都設置有其它分區(qū),即使在高版本 DOS 環(huán)境中運作,常規(guī)建立的分區(qū)表每難能符合實際需求,后續(xù)工作量也相當可觀。
不過,它也不觸動位于其后的 DOS 引導信息、文件分配表及根目錄,高版本 FDISK /MBR 命令適用于修復僅設基本 DOS 分區(qū)的硬盤分區(qū)表及檢驗標志受損,或主引導信息全毀。
可見,在運行 FDISK /MBR 命令之前,需查明檢驗標志是否 AA55h,酌情處理,切忌盲動。
經(jīng)由 DOS 軟盤引導,認硬盤,檢驗標志必健在。
另外,在 FDSIK 主菜單中選 4. Display Partition Information,列出分區(qū)信息,進一步證實檢驗標志正常; 若現(xiàn) No partitition defined,檢驗標志每變異,而分區(qū)表●硬盤數(shù)據(jù)恢復,深入邏輯分區(qū)
現(xiàn)在深入每一個邏輯分區(qū)。邏輯分區(qū)結構如下:
FAT12/16
Logical sector =0 Logical sector=1(Floppy disk=1~9) Logical sector=1+sectors_per_FAT(Floppydisk=10~18) Logical sector=1+sectors_per_FAT*2(Floppy disk=19~32) Logical sector=1+sectors_per_FAT*2+sectors_of_rootdirectories(Floppy disk=33~)
DOS Boot Sector FAT1 FAT2 ROOT Directory Data area(where files and subdirectories are stored)
FAT32
Usually 32 sectors Logical sector =0032h Logical sector =0032h+ 2*sectors_per_FAT
DOS Boot Recore 3 Sectors Reserved sectors Copy of record Reserve sectors FAT1 FAT2 Data area(where files and all bdirectories are stored)
在邏輯分區(qū)當中用邏輯的cluster和sector。換算關系為:
cluster=logical_sector/sectors_per_cluster;
這里sectors_per_cluster是在BIOS Parameter Block里得到的。
Sector=( logical_sector mod sectors_per_track)+1;
Head=( logical_sector / sectors_per_track)mod total_heads;
Cylinder= logical_sector(sectors_per_track* total_heads);
logical_sector=( cluster-2)*sectors_per_cluster+sector_of_file_area_offset;
logical_sector=(sector-1)+head*sector_per_track+sector*sector_per_track*heads;
每個扇區(qū)長度=512字節(jié)
總簇數(shù)=邏輯盤容量/簇容量
總簇數(shù)=FAT表長度(字節(jié))/每個表項長度(字節(jié))-2
FAT表長度=邏輯盤容量/簇容量*每個表項長度
Dos引導記錄塊位于邏輯0 sector中包含三部分:
(1) 磁盤IO參數(shù)表BPB;
(2) 磁盤基數(shù)表;
(3) 引導區(qū)代碼。
FAT16的BPB(BIOS Parameter Block)表,描述邏輯盤結構組成,包含隱藏扇區(qū)數(shù)目(從0-1-1開始計算)、FAT扇區(qū)數(shù)、FAT拷貝數(shù)、硬盤磁頭總數(shù)、根目錄表項*值等。FAT32系統(tǒng)中,BPB表的偏移與FAT16不同,但表項基本相同。整個隱藏扇區(qū)部分都作為邏輯盤的描述區(qū)域。
典型的primary partion 的磁盤IO參數(shù)表BPB:
典型的 logical partion 磁盤參數(shù)表:
硬盤BPB主要結構說明:
(Cylinder柱面/磁道-Side/Head磁頭-Sector扇區(qū)地址以下簡稱為?-?-?)
主分區(qū)
名稱 地址 長度(扇區(qū))
主引導記錄(Main Boot Record) 0-0-1 1
系統(tǒng)扇區(qū)(System Secotrs) 0-0-2,0-0-63 62
引導扇區(qū)(Boot) 0-1-1 1
擴展分區(qū)
名稱 地址 長度(扇區(qū))
擴展分區(qū)(Extend Partition) ?-y-1 1
系統(tǒng)扇區(qū)(System Secotrs) ?-y-2,?-y-63 62
引導扇區(qū)(Boot) ?-(y+1)-1 1
其后各項與主分區(qū)相同……
隱藏扇區(qū)(Hidden Secotrs):
FAT16 0-1-1 1
FAT32 0-1-1 32
文件分配表(File Allocation Table):
FAT16 0-1-2 根據(jù)邏輯盤容量變化
FAT32 0-1-33 根據(jù)邏輯盤容量變化
說明:
FAT16的每個表項由2字節(jié)(16位)組成,通常每個表項指向的簇包含64個扇區(qū),即32K字節(jié)。 邏輯盤容量*為2047MB。
FAT32的每個表項由4字節(jié)(32位)組成,通常每個表項指向的簇包含8個扇區(qū),即4K字節(jié)。邏輯盤容量最小為512MB。
對于C分區(qū),在MBR的偏移01c2H處,F(xiàn)AT16為06H,F(xiàn)AT32為0CH。
FAT是DOS、Windows9X系統(tǒng)的文件尋址格式,位于DBR之后。
在解釋文件分配表的概念的時候,我們有必要談談簇(Cluster)的概念。文件占用磁盤空間,基本單位不是字節(jié)而是簇。一般情況下,軟盤每簇是1個扇區(qū),硬盤每簇的扇區(qū)數(shù)與硬盤的總容量大小有關,可能是4、8、16、32、64……同一個文件的數(shù)據(jù)并不一定完整地存放在磁盤的一個連續(xù)的區(qū)域內,而往往會分成若干段,像一條鏈子一樣存放。這種存儲方式稱為文件的鏈式存儲。由于硬盤上保存著段與段之間的連接信息(即FAT),操作系統(tǒng)在讀取文件時,總是能夠準確地找到各段的位置并正確讀出。
為了實現(xiàn)文件的鏈式存儲,硬盤上必須準確地記錄哪些簇已經(jīng)被文件占用,還必須為每個已經(jīng)占用的簇指明存儲后繼內容的下一個簇的簇號。對一個文件的*一簇,則要指明本簇無后繼簇。這些都是由FAT表來保存的,表中有很多表項,每項記錄一個簇的信息。由于FAT對于文件管理的重要性,所以為了安全起見,F(xiàn)AT有一個備份,即在原FAT的后面再建一個同樣的FAT。初形成的FAT中所有項都標明為“未占用”,但如果磁盤有局部損壞,那么格式化程序會檢測出損壞的簇,在相應的項中標為“壞簇”,以后存文件時就不會再使用這個簇了。FAT的項數(shù)與硬盤上的總簇數(shù)相當,每一項占用的字節(jié)數(shù)也要與總簇數(shù)相適應,因為其中需要存放簇號。FAT的格式有多種,最為常見的是FAT16和FAT32。
當一個磁盤Format后,在其邏輯0扇區(qū)(即BOOT扇區(qū))后面的幾個扇區(qū)中存在著一個重要的數(shù)據(jù)表-文件分配(FAT),文件分配表一式兩份,占據(jù)扇區(qū)的多小憑磁盤類型大小而定。顧名思義,文件分配表是用來表示磁盤問件的空分配信息的。它不對引導區(qū),文件目錄的信息進行表示,也不真正存儲文件內容。
我們知道磁盤是由一個一個扇區(qū)組成的,若干個扇區(qū)合為一個簇,文件存取是以簇為單位的,哪怕這個文件只有1個字節(jié)。每個簇在文件分配表中都有對應的表項,簇號即為表項號,每個表項占1.5個字節(jié)(磁盤空間在10MB以下)或2個字節(jié)(磁盤空間在10MB以上)。為了方便起見,以后所說的表項都是指2個字節(jié)的。
FAT表的開始由介質描述符+一串“已占用”標志組成:
FAT16硬盤----F8 FF FF 7F
FAT32硬盤----F8 FF FF 0F FF FF FF 0F
每個有效的FAT結構區(qū)包含兩個完全相同的拷貝:FAT1、FAT2
文件分配表結構如1(H表示16進制)
表1
第0字節(jié) 表頭,表磁盤類型。FFH雙面軟盤,每次道8扇區(qū)FEH單面軟盤,每磁道8扇區(qū)FDH雙面軟盤,每磁道9扇區(qū)FCCH單面軟盤,每磁道9扇區(qū)FC8H硬盤
第1~2字節(jié) (表項號1)表示*簇狀態(tài),因*簇被系統(tǒng)占據(jù),故此兩字節(jié)為FFFFH
第3~4字節(jié) (表項號2)表示第二簇狀態(tài),若為FFFH表此簇為壞的,DOS已標記為不能用;0000H表示此簇為空,可以用;FFF8H表不能示該簇為文件的*一簇;其余數(shù)字表示文件的下一個簇號,注意高字節(jié)在后,低字節(jié)在前。
第5~6字節(jié) (表項號3)表示第三簇狀態(tài),同上。
注意:
不要把表項內的數(shù)字誤認為表示當前簇號,而應是該文件的下一個簇的簇號。.高字節(jié)在后,低字節(jié)在前是一種存儲數(shù)字方式,讀出時應對其進行調整。是如兩字節(jié)12H,34H,應調整為3412H。
文件分配表與文件目錄(FDT)相配合,可以統(tǒng)一管理整個磁盤的文件。它告訴系統(tǒng)磁盤上哪些簇是壞的或已被使用,哪些簇可以用,并存儲每個文件所使用的簇號。它是文件的“總調度師”。
當DOS寫文件時,首先在文件目錄中檢查是否有相同文件名,若無則使用一個文件目錄表項,然后依次檢測FAT中的每個表項對應的簇中,同時將該簇號寫入文件目錄表項相的26-27字節(jié),如文件長度不止一簇,則繼續(xù)向后尋找可用簇,找到后將其簇號寫入上一次找到的表項中,如此直到文件結束,在*一簇的表項里填上FFF8H,形成單向鏈表。
DOS刪除文件時只是把文件目錄表中的該文件的表項第0個字節(jié)改為E5H,表此項已被刪除,并在文件分配表中把該文件占用的各簇的表項清0,并釋放空間。其文件的內容仍然在盤上,并沒有被真正刪除,這就是undelete.exe,unerase.exe等一類恢復刪除工具能起作用的原因。
文件分配表在系統(tǒng)中的地位十分重要,用戶*不要去修改它,以免誤操作帶來嚴重的后果。
典型的FAT32表:
F8 FF FF FF FF FF FF FF 96 C4 00 00 FF FF FF 0F
FF FF FF 0F 06 00 00 00 FF FF FF 0F 08 00 00 00
09 00 00 00 0A 00 00 00 0B 00 00 00 0C 00 00 00
0D 00 00 00 0E 00 00 00 0F 00 00 00 10 00 00 00
FF FF FF 0F 00 00 00 00 FF FF FF 0F 14 00 00 00
15 00 00 00 FF FF FF 0F FF FF FF 0F FF FF FF 0F
19 00 00 00 1A 00 00 00 1B 00 00 00 FF FF FF 0F
00 00 00 00 1E 00 00 00 FF FF FF 0F 20 00 00 00
FF FF FF 0F 22 00 00 00 23 00 00 00 24 00 00 00
25 00 00 00 26 00 00 00 27 00 00 00 28 00 00 00
文件目錄表(File Directory Table),即根目錄區(qū),又稱為ROOT區(qū):
緊跟在FAT2的下一個扇區(qū),長度為32個扇區(qū)(256個表項)。如果支持長文件名,則每個表項為64個字節(jié),其中,前32個字節(jié)為長文件鏈接說明;后32個字節(jié)為文件屬性說明,包括文件長度、起始地址、日期、時間等。如不支持長文件名,則每個表項為32個字節(jié)的屬性說明。
值得注意的是:
1,FAT32沒有儲存目錄的目錄區(qū),而 FAT16儲存根目錄并把子目錄放到數(shù)據(jù)區(qū)。
2,表示目錄的目錄項指出根目錄地址同時長度字節(jié)為0,表示文件的目錄項指出數(shù)據(jù)地址。
典型的FAT32根目錄:
30 30 30 30 30 30 20 20 20 20 20 10 00 12 3C 7C
39 2B 39 2B 05 00 3D 7C 39 2B 3A 34 00 00 00 00
44 4D 32 4B 44 49 53 4B 49 4D 47 20 00 96 DB 40
39 2B 39 2B 0A 00 DC 40 39 2B 88 02 5B 72 13 00
42 49 4E 42 49 4E 20 20 20 20 20 08 00 00 00 00
00 00 00 00 00 00 47 65 09 2B 00 00 00 00 00 00
000000子目錄
注意OS7前的怪字符為E5H,表示被刪除,被刪除文件仍舊能夠找到開始簇,數(shù)據(jù)恢復就依靠這一特點。
數(shù)據(jù)區(qū)(Data Area): 緊跟在FDT的下一個扇區(qū),直到邏輯盤的結束地址。
由上圖可以想到,即使目錄被破壞仍舊可能從磁盤里把信息讀出。
到現(xiàn)在為止,硬盤數(shù)據(jù)結構的理論部分已經(jīng)講完。
數(shù)據(jù)恢復主要是手動找出FAT、目錄、數(shù)據(jù)的對應關系或直接找到數(shù)據(jù),現(xiàn)在已經(jīng)有完善的磁盤編輯器幫助我們做到這一點,使工作大大簡化了。
有只能化的恢復工具能不依靠FAT而恢復被刪除文件,比如RECOVERNT,估計是依靠Win2000的文件使用記錄。這種方法在沖啟動之前恢復文件的