硬盤的數(shù)據(jù)結(jié)構(gòu) 
 初買來一塊硬盤,我們是沒有辦法使用的,你需要將它分區(qū)、格式化,然后再安裝上操作系統(tǒng)才可以使用。一個(gè)完整硬盤的數(shù)據(jù)應(yīng)該包括五部分:MBR,DBR,F(xiàn)AT,DIR區(qū)和DATA區(qū)。其中只有主引導(dǎo)扇區(qū)是*的,其它的隨你的分區(qū)數(shù)的增加而增加。 
 主引導(dǎo)扇區(qū) 
 主引導(dǎo)扇區(qū)位于整個(gè)硬盤的0磁道0柱面1扇區(qū),包括硬盤主引導(dǎo)記錄MBR(Main Boot Record)和分區(qū)表DPT(Disk Partition Table)。其中主引導(dǎo)記錄的作用就是檢查分區(qū)表是否正確以及確定哪個(gè)分區(qū)為引導(dǎo)分區(qū),并在程序結(jié)束時(shí)把該分區(qū)的啟動(dòng)程序(也就是操作系統(tǒng)引導(dǎo)扇區(qū))調(diào)入內(nèi)存加以執(zhí)行。至于分區(qū)表,很多人都知道,以80H或00H為開始標(biāo)志,以55AAH為結(jié)束標(biāo)志,共64字節(jié),位于本扇區(qū)的最末端。值得一提的是,MBR是由分區(qū)程序(例如DOS 的Fdisk.exe)產(chǎn)生的,不同的操作系統(tǒng)可能這個(gè)扇區(qū)是不盡相同。如果你有這個(gè)意向也可以自己去編寫一個(gè),只要它能完成前述的任務(wù)即可,這也是為什么能實(shí)現(xiàn)多系統(tǒng)啟動(dòng)的原因(說句題外話:正因?yàn)檫@個(gè)主引導(dǎo)記錄容易編寫,所以才出現(xiàn)了很多的引導(dǎo)區(qū)病毒)。 
 操作系統(tǒng)引導(dǎo)扇區(qū) 
 OBR(OS Boot Record)即操作系統(tǒng)引導(dǎo)扇區(qū),通常位于硬盤的0磁道1柱面1扇區(qū)(這是對(duì)于DOS來說的,對(duì)于那些以多重引導(dǎo)方式啟動(dòng)的系統(tǒng)則位于相應(yīng)的主分區(qū)/擴(kuò)展分區(qū)的*個(gè)扇區(qū)),是操作系統(tǒng)可直接訪問的*個(gè)扇區(qū),它也包括一個(gè)引導(dǎo)程序和一個(gè)被稱為BPB(BIOS Parameter Block)的本分區(qū)參數(shù)記錄表。其實(shí)每個(gè)邏輯分區(qū)都有一個(gè)OBR,其參數(shù)視分區(qū)的大小、操作系統(tǒng)的類別而有所不同。引導(dǎo)程序的主要任務(wù)是判斷本分區(qū)根目錄前兩個(gè)文件是否為操作系統(tǒng)的引導(dǎo)文件(例如MSDOS或者起源于MSDOS的Win9x/Me的IO.SYS和MSDOS.SYS)。如是,就把*個(gè)文件讀入內(nèi)存,并把控制權(quán)交予該文件。BPB參數(shù)塊記錄著本分區(qū)的起始扇區(qū)、結(jié)束扇區(qū)、文件存儲(chǔ)格式、硬盤介質(zhì)描述符、根目錄大小、FAT個(gè)數(shù)、分配單元(Allocation Unit,以前也稱之為簇)的大小等重要參數(shù)。OBR由高級(jí)格式化程序產(chǎn)生(例如DOS 的Format.com)。 
 文件分配表 
 FAT(File Allocation Table)即文件分配表,是DOS/Win9x系統(tǒng)的文件尋址系統(tǒng),為了數(shù)據(jù)安全起見,F(xiàn)AT一般做兩個(gè),第二FAT為*FAT的備份, FAT區(qū)緊接在OBR之后,其大小由本分區(qū)的大小及文件分配單元的大小決定。關(guān)于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配合才能準(zhǔn)確定位文件的位置。DIR記錄著每個(gè)文件(目錄)的起始單元(這是最重要的)、文件的屬性等。定位文件位置時(shí),操作系統(tǒng)根據(jù)DIR中的起始單元,結(jié)合FAT表就可以知道文件在磁盤的具體位置及大小了。在DIR區(qū)之后,才是真正意義上的數(shù)據(jù)存儲(chǔ)區(qū),即DATA區(qū)。 
 數(shù)據(jù)區(qū) 
 DATA雖然占據(jù)了硬盤的絕大部分空間,但沒有了前面的各部分,它對(duì)于我們來說,也只能是一些枯燥的二進(jìn)制代碼,沒有任何意義。在這里有一點(diǎn)要說明的是,我們通常所說的格式化程序(指高級(jí)格式化,例如DOS下的Format程序),并沒有把DATA區(qū)的數(shù)據(jù)清除,只是重寫了FAT表而已,至于分區(qū)硬盤,也只是修改了MBR和OBR,絕大部分的DATA區(qū)的數(shù)據(jù)并沒有被改變,這也是許多硬盤數(shù)據(jù)能夠得以修復(fù)的原因。但即便如此,如MBR/OBR/FAT/DIR之一被破壞的話,也足夠咱們那些所謂的DIY老鳥們忙乎半天了……需要提醒大家的是,如果你經(jīng)常整理磁盤,那么你的數(shù)據(jù)區(qū)的數(shù)據(jù)可能是連續(xù)的,這樣即使MBR/FAT/DIR全部壞了,我們也可以使用磁盤編輯軟件(比如DOS下的DiskEdit),只要找到一個(gè)文件的起始保存位置,那么這個(gè)文件就有可能被恢復(fù)(當(dāng)然了,這需要一個(gè)前提,那就是你沒有覆蓋這個(gè)文件……)。 
 硬盤分區(qū)方式 
 我們平時(shí)說到的分區(qū)概念,不外乎三種:主分區(qū)、擴(kuò)展分區(qū)和邏輯分區(qū)。主分區(qū)是一個(gè)比較單純的分區(qū),通常位于硬盤的最前面一塊區(qū)域中,構(gòu)成邏輯C磁盤。在主分區(qū)中,不允許再建立其它邏輯磁盤。 
 擴(kuò)展分區(qū)的概念則比較復(fù)雜,也是造成分區(qū)和邏輯磁盤混淆的主要原因。由于硬盤僅僅為分區(qū)表保留了64個(gè)字節(jié)的存儲(chǔ)空間,而每個(gè)分區(qū)的參數(shù)占據(jù)16個(gè)字節(jié),故主引導(dǎo)扇區(qū)中總計(jì)可以存儲(chǔ)4個(gè)分區(qū)的數(shù)據(jù)。操作系統(tǒng)只允許存儲(chǔ)4個(gè)分區(qū)的數(shù)據(jù),如果說邏輯磁盤就是分區(qū),則系統(tǒng)最多只允許4個(gè)邏輯磁盤。對(duì)于具體的應(yīng)用,4個(gè)邏輯磁盤往往不能滿足實(shí)際需求。為了建立更多的邏輯磁盤供操作系統(tǒng)使用,系統(tǒng)引入了擴(kuò)展分區(qū)的概念。 
 所謂擴(kuò)展分區(qū),嚴(yán)格地講它不是一個(gè)實(shí)際意義的分區(qū),它僅僅是一個(gè)指向下一個(gè)分區(qū)的指針,這種指針結(jié)構(gòu)將形成一個(gè)單向鏈表。這樣在主引導(dǎo)扇區(qū)中除了主分區(qū)外,僅需要存儲(chǔ)一個(gè)被稱為擴(kuò)展分區(qū)的分區(qū)數(shù)據(jù),通過這個(gè)擴(kuò)展分區(qū)的數(shù)據(jù)可以找到下一個(gè)分區(qū)(實(shí)際上也就是下一個(gè)邏輯磁盤)的起始位置,以此起始位置類推可以找到所有的分區(qū)。無論系統(tǒng)中建立多少個(gè)邏輯磁盤,在主引導(dǎo)扇區(qū)中通過一個(gè)擴(kuò)展分區(qū)的參數(shù)就可以逐個(gè)找到每一個(gè)邏輯磁盤。 
 需要特別注意的是,由于主分區(qū)之后的各個(gè)分區(qū)是通過一種單向鏈表的結(jié)構(gòu)來實(shí)現(xiàn)鏈接的,因此,若單向鏈表發(fā)生問題,將導(dǎo)致邏輯磁盤的丟失。 
 既然要進(jìn)行數(shù)據(jù)的恢復(fù),當(dāng)然數(shù)據(jù)的存儲(chǔ)原理我們不能不提,在這之中,我們還要介紹一下數(shù)據(jù)的刪除和硬盤的格式化相關(guān)問題…… 
 文件的讀取 
 操作系統(tǒng)從目錄區(qū)中讀取文件信息(包括文件名、后綴名、文件大小、修改日期和文件在數(shù)據(jù)區(qū)保存的*個(gè)簇的簇號(hào)),我們這里假設(shè)*個(gè)簇號(hào)是0023。 
 操作系統(tǒng)從0023簇讀取相應(yīng)的數(shù)據(jù),然后再找到FAT的0023單元,如果內(nèi)容是文件結(jié)束標(biāo)志(FF),則表示文件結(jié)束,否則內(nèi)容保存數(shù)據(jù)的下一個(gè)簇的簇號(hào),這樣重復(fù)下去直到遇到文件結(jié)束標(biāo)志。 
 文件的寫入 
 當(dāng)我們要保存文件時(shí),操作系統(tǒng)首先在DIR區(qū)中找到空區(qū)寫入文件名、大小和創(chuàng)建時(shí)間等相應(yīng)信息,然后在Data區(qū)找到閑置空間將文件保存,并將Data區(qū)的*個(gè)簇寫入DIR區(qū),其余的動(dòng)作和上邊的讀取動(dòng)作差不多。 
 文件的刪除 
 Win9x的文件刪除工作卻是很簡單的,簡單到只在目錄區(qū)做了一點(diǎn)小改動(dòng)——將目錄區(qū)的文件的*個(gè)字符改成了E5就表示將改文件刪除了.
 初買來一塊硬盤,我們是沒有辦法使用的,你需要將它分區(qū)、格式化,然后再安裝上操作系統(tǒng)才可以使用。一個(gè)完整硬盤的數(shù)據(jù)應(yīng)該包括五部分:MBR,DBR,F(xiàn)AT,DIR區(qū)和DATA區(qū)。其中只有主引導(dǎo)扇區(qū)是*的,其它的隨你的分區(qū)數(shù)的增加而增加。 
 主引導(dǎo)扇區(qū) 
 主引導(dǎo)扇區(qū)位于整個(gè)硬盤的0磁道0柱面1扇區(qū),包括硬盤主引導(dǎo)記錄MBR(Main Boot Record)和分區(qū)表DPT(Disk Partition Table)。其中主引導(dǎo)記錄的作用就是檢查分區(qū)表是否正確以及確定哪個(gè)分區(qū)為引導(dǎo)分區(qū),并在程序結(jié)束時(shí)把該分區(qū)的啟動(dòng)程序(也就是操作系統(tǒng)引導(dǎo)扇區(qū))調(diào)入內(nèi)存加以執(zhí)行。至于分區(qū)表,很多人都知道,以80H或00H為開始標(biāo)志,以55AAH為結(jié)束標(biāo)志,共64字節(jié),位于本扇區(qū)的最末端。值得一提的是,MBR是由分區(qū)程序(例如DOS 的Fdisk.exe)產(chǎn)生的,不同的操作系統(tǒng)可能這個(gè)扇區(qū)是不盡相同。如果你有這個(gè)意向也可以自己去編寫一個(gè),只要它能完成前述的任務(wù)即可,這也是為什么能實(shí)現(xiàn)多系統(tǒng)啟動(dòng)的原因(說句題外話:正因?yàn)檫@個(gè)主引導(dǎo)記錄容易編寫,所以才出現(xiàn)了很多的引導(dǎo)區(qū)病毒)。 
 操作系統(tǒng)引導(dǎo)扇區(qū) 
 OBR(OS Boot Record)即操作系統(tǒng)引導(dǎo)扇區(qū),通常位于硬盤的0磁道1柱面1扇區(qū)(這是對(duì)于DOS來說的,對(duì)于那些以多重引導(dǎo)方式啟動(dòng)的系統(tǒng)則位于相應(yīng)的主分區(qū)/擴(kuò)展分區(qū)的*個(gè)扇區(qū)),是操作系統(tǒng)可直接訪問的*個(gè)扇區(qū),它也包括一個(gè)引導(dǎo)程序和一個(gè)被稱為BPB(BIOS Parameter Block)的本分區(qū)參數(shù)記錄表。其實(shí)每個(gè)邏輯分區(qū)都有一個(gè)OBR,其參數(shù)視分區(qū)的大小、操作系統(tǒng)的類別而有所不同。引導(dǎo)程序的主要任務(wù)是判斷本分區(qū)根目錄前兩個(gè)文件是否為操作系統(tǒng)的引導(dǎo)文件(例如MSDOS或者起源于MSDOS的Win9x/Me的IO.SYS和MSDOS.SYS)。如是,就把*個(gè)文件讀入內(nèi)存,并把控制權(quán)交予該文件。BPB參數(shù)塊記錄著本分區(qū)的起始扇區(qū)、結(jié)束扇區(qū)、文件存儲(chǔ)格式、硬盤介質(zhì)描述符、根目錄大小、FAT個(gè)數(shù)、分配單元(Allocation Unit,以前也稱之為簇)的大小等重要參數(shù)。OBR由高級(jí)格式化程序產(chǎn)生(例如DOS 的Format.com)。 
 文件分配表 
 FAT(File Allocation Table)即文件分配表,是DOS/Win9x系統(tǒng)的文件尋址系統(tǒng),為了數(shù)據(jù)安全起見,F(xiàn)AT一般做兩個(gè),第二FAT為*FAT的備份, FAT區(qū)緊接在OBR之后,其大小由本分區(qū)的大小及文件分配單元的大小決定。關(guān)于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配合才能準(zhǔn)確定位文件的位置。DIR記錄著每個(gè)文件(目錄)的起始單元(這是最重要的)、文件的屬性等。定位文件位置時(shí),操作系統(tǒng)根據(jù)DIR中的起始單元,結(jié)合FAT表就可以知道文件在磁盤的具體位置及大小了。在DIR區(qū)之后,才是真正意義上的數(shù)據(jù)存儲(chǔ)區(qū),即DATA區(qū)。 
 數(shù)據(jù)區(qū) 
 DATA雖然占據(jù)了硬盤的絕大部分空間,但沒有了前面的各部分,它對(duì)于我們來說,也只能是一些枯燥的二進(jìn)制代碼,沒有任何意義。在這里有一點(diǎn)要說明的是,我們通常所說的格式化程序(指高級(jí)格式化,例如DOS下的Format程序),并沒有把DATA區(qū)的數(shù)據(jù)清除,只是重寫了FAT表而已,至于分區(qū)硬盤,也只是修改了MBR和OBR,絕大部分的DATA區(qū)的數(shù)據(jù)并沒有被改變,這也是許多硬盤數(shù)據(jù)能夠得以修復(fù)的原因。但即便如此,如MBR/OBR/FAT/DIR之一被破壞的話,也足夠咱們那些所謂的DIY老鳥們忙乎半天了……需要提醒大家的是,如果你經(jīng)常整理磁盤,那么你的數(shù)據(jù)區(qū)的數(shù)據(jù)可能是連續(xù)的,這樣即使MBR/FAT/DIR全部壞了,我們也可以使用磁盤編輯軟件(比如DOS下的DiskEdit),只要找到一個(gè)文件的起始保存位置,那么這個(gè)文件就有可能被恢復(fù)(當(dāng)然了,這需要一個(gè)前提,那就是你沒有覆蓋這個(gè)文件……)。 
 硬盤分區(qū)方式 
 我們平時(shí)說到的分區(qū)概念,不外乎三種:主分區(qū)、擴(kuò)展分區(qū)和邏輯分區(qū)。主分區(qū)是一個(gè)比較單純的分區(qū),通常位于硬盤的最前面一塊區(qū)域中,構(gòu)成邏輯C磁盤。在主分區(qū)中,不允許再建立其它邏輯磁盤。 
 擴(kuò)展分區(qū)的概念則比較復(fù)雜,也是造成分區(qū)和邏輯磁盤混淆的主要原因。由于硬盤僅僅為分區(qū)表保留了64個(gè)字節(jié)的存儲(chǔ)空間,而每個(gè)分區(qū)的參數(shù)占據(jù)16個(gè)字節(jié),故主引導(dǎo)扇區(qū)中總計(jì)可以存儲(chǔ)4個(gè)分區(qū)的數(shù)據(jù)。操作系統(tǒng)只允許存儲(chǔ)4個(gè)分區(qū)的數(shù)據(jù),如果說邏輯磁盤就是分區(qū),則系統(tǒng)最多只允許4個(gè)邏輯磁盤。對(duì)于具體的應(yīng)用,4個(gè)邏輯磁盤往往不能滿足實(shí)際需求。為了建立更多的邏輯磁盤供操作系統(tǒng)使用,系統(tǒng)引入了擴(kuò)展分區(qū)的概念。 
 所謂擴(kuò)展分區(qū),嚴(yán)格地講它不是一個(gè)實(shí)際意義的分區(qū),它僅僅是一個(gè)指向下一個(gè)分區(qū)的指針,這種指針結(jié)構(gòu)將形成一個(gè)單向鏈表。這樣在主引導(dǎo)扇區(qū)中除了主分區(qū)外,僅需要存儲(chǔ)一個(gè)被稱為擴(kuò)展分區(qū)的分區(qū)數(shù)據(jù),通過這個(gè)擴(kuò)展分區(qū)的數(shù)據(jù)可以找到下一個(gè)分區(qū)(實(shí)際上也就是下一個(gè)邏輯磁盤)的起始位置,以此起始位置類推可以找到所有的分區(qū)。無論系統(tǒng)中建立多少個(gè)邏輯磁盤,在主引導(dǎo)扇區(qū)中通過一個(gè)擴(kuò)展分區(qū)的參數(shù)就可以逐個(gè)找到每一個(gè)邏輯磁盤。 
 需要特別注意的是,由于主分區(qū)之后的各個(gè)分區(qū)是通過一種單向鏈表的結(jié)構(gòu)來實(shí)現(xiàn)鏈接的,因此,若單向鏈表發(fā)生問題,將導(dǎo)致邏輯磁盤的丟失。 
 既然要進(jìn)行數(shù)據(jù)的恢復(fù),當(dāng)然數(shù)據(jù)的存儲(chǔ)原理我們不能不提,在這之中,我們還要介紹一下數(shù)據(jù)的刪除和硬盤的格式化相關(guān)問題…… 
 文件的讀取 
 操作系統(tǒng)從目錄區(qū)中讀取文件信息(包括文件名、后綴名、文件大小、修改日期和文件在數(shù)據(jù)區(qū)保存的*個(gè)簇的簇號(hào)),我們這里假設(shè)*個(gè)簇號(hào)是0023。 
 操作系統(tǒng)從0023簇讀取相應(yīng)的數(shù)據(jù),然后再找到FAT的0023單元,如果內(nèi)容是文件結(jié)束標(biāo)志(FF),則表示文件結(jié)束,否則內(nèi)容保存數(shù)據(jù)的下一個(gè)簇的簇號(hào),這樣重復(fù)下去直到遇到文件結(jié)束標(biāo)志。 
 文件的寫入 
 當(dāng)我們要保存文件時(shí),操作系統(tǒng)首先在DIR區(qū)中找到空區(qū)寫入文件名、大小和創(chuàng)建時(shí)間等相應(yīng)信息,然后在Data區(qū)找到閑置空間將文件保存,并將Data區(qū)的*個(gè)簇寫入DIR區(qū),其余的動(dòng)作和上邊的讀取動(dòng)作差不多。 
 文件的刪除 
 Win9x的文件刪除工作卻是很簡單的,簡單到只在目錄區(qū)做了一點(diǎn)小改動(dòng)——將目錄區(qū)的文件的*個(gè)字符改成了E5就表示將改文件刪除了.