官术网_书友最值得收藏!

基礎(chǔ)篇

本篇主要介紹 NTFS文件系統(tǒng)的基本特性和扇區(qū)存儲(chǔ)特征。同時(shí),為了能與其他主流文件系統(tǒng)進(jìn)行比較,以加深對(duì)NTFS文件系統(tǒng)的認(rèn)識(shí),本篇還介紹了FAT16和FAT 32兩種文件系統(tǒng)的基本特性,以及它們?cè)谟脖P(pán)扇區(qū)中的存儲(chǔ)規(guī)律。

NTFS文件系統(tǒng)雖然與兩種 FAT文件系統(tǒng)不同,但它們?cè)谏葏^(qū)存儲(chǔ)規(guī)律上,還是有某些共通或相似的地方的。

本書(shū)講述的兩大主題,第一是使用作者編寫(xiě)的WIN32工具程序,對(duì)硬盤(pán)扇區(qū)進(jìn)行各種操作;第二是使用讀寫(xiě)物理硬盤(pán)扇區(qū)的方法,去探索NTFS文件系統(tǒng)的扇區(qū)存儲(chǔ)規(guī)律。掌握了NTFS文件系統(tǒng)的扇區(qū)存儲(chǔ)規(guī)律,就能使操作者不受操作系統(tǒng)和文件系統(tǒng)的限制,實(shí)現(xiàn)一些用其他方法無(wú)法完成的操作目的。譬如從系統(tǒng)已被破壞的硬盤(pán)上恢復(fù)文件;排除一些常見(jiàn)的由于系統(tǒng)數(shù)據(jù)受損,而出現(xiàn)的硬盤(pán)邏輯故障;通過(guò)修改位圖文件的扇區(qū)數(shù)據(jù),來(lái)達(dá)到隱藏機(jī)密文件的目的;移植被EFS加密的文件數(shù)據(jù);移植被壓縮的文件數(shù)據(jù);通過(guò)直接修改扇區(qū)的字節(jié)數(shù)據(jù),取得原先沒(méi)有的操作權(quán)限,等等。

1FAT文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)

硬盤(pán)在分區(qū)以后,其每一個(gè)邏輯驅(qū)動(dòng)器都必須建立起完整的數(shù)據(jù)結(jié)構(gòu),才能正常使用。FAT文件系統(tǒng)和NTFS文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)大部分都不相同,只在存儲(chǔ)系統(tǒng)分區(qū)數(shù)據(jù)的扇區(qū)上,有某些相同或相似的地方。

FAT文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)由6部分組成,分別是主引導(dǎo)記錄、主分區(qū)表或分區(qū)鏈表、分區(qū)引導(dǎo)記錄、文件分配表、文件目錄表和數(shù)據(jù)區(qū)。這里需要說(shuō)明的是,主引導(dǎo)記錄和主分區(qū)表都只有一個(gè),共同存儲(chǔ)在一個(gè)扇區(qū)中。如果使用CHS(柱面數(shù)、磁頭數(shù)、扇區(qū)數(shù))尋址方式,這個(gè)扇區(qū)是0柱面0磁頭1扇區(qū);如果使用線性尋址方式,這個(gè)扇區(qū)是0號(hào)扇區(qū)。從硬盤(pán)分區(qū)后的區(qū)域結(jié)構(gòu)上劃分的話,該扇區(qū)可以認(rèn)為是屬于第1個(gè)邏輯驅(qū)動(dòng)器,也就是通常所說(shuō)的C盤(pán)。而其他的邏輯驅(qū)動(dòng)器就沒(méi)有主引導(dǎo)記錄和主分區(qū)表了,在這些邏輯驅(qū)動(dòng)器所屬的第1個(gè)系統(tǒng)隱藏扇區(qū)上,只有分區(qū)鏈表。

NTFS文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)中,用于系統(tǒng)引導(dǎo)的部分基本與FAT文件系統(tǒng)相同,如主引導(dǎo)記錄、主分區(qū)表或分區(qū)鏈表、分區(qū)引導(dǎo)記錄這3部分。不過(guò)在這3部分中,很多字段的數(shù)據(jù)所表示的內(nèi)容是完全不同的,只是都有相同的稱呼罷了。

FAT文件系統(tǒng)的另外3部分,即文件分配表、文件目錄表和數(shù)據(jù)區(qū),在NTFS文件系統(tǒng)中則不存在。NTFS文件系統(tǒng)使用的是“磁盤(pán)上的任何事物都為文件”的存儲(chǔ)模式,甚至連系統(tǒng)使用的引導(dǎo)文件數(shù)據(jù),都作為文件存儲(chǔ)在磁盤(pán)上。

了解文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)和扇區(qū)存儲(chǔ)規(guī)律,是對(duì)物理硬盤(pán)扇區(qū)進(jìn)行讀寫(xiě)操作的基礎(chǔ),也是將扇區(qū)讀寫(xiě)技術(shù)應(yīng)用于系統(tǒng)修復(fù)和文件恢復(fù)的先決條件。因?yàn)橐粋€(gè)硬盤(pán)上有很多邏輯驅(qū)動(dòng)器,這些邏輯驅(qū)動(dòng)器可能使用不同的文件系統(tǒng),而對(duì)于不同的文件系統(tǒng),讀寫(xiě)與分析扇區(qū)數(shù)據(jù)的方法是完全不相同的。

本章先介紹FAT文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)。

1.1 主引導(dǎo)記錄

硬盤(pán)的主引導(dǎo)記錄也稱MBR,存儲(chǔ)在0柱面0磁頭1扇區(qū)。如果讀寫(xiě)扇區(qū)時(shí)采用線性尋址方式,則該扇區(qū)的編號(hào)為“0”。在本書(shū)后面的章節(jié)里,扇區(qū)地址全部使用線性尋址方式來(lái)表示。該扇區(qū)的512字節(jié)有3部分內(nèi)容,除了主引導(dǎo)記錄外,還有分區(qū)表和結(jié)束標(biāo)志55 AA。

主引導(dǎo)記錄的作用非常重要,它是硬盤(pán)啟動(dòng)時(shí)最先加載的扇區(qū)數(shù)據(jù)。下面通過(guò)分析硬盤(pán)的啟動(dòng)過(guò)程,來(lái)說(shuō)明它的重要性。

(1)計(jì)算機(jī)系統(tǒng)接通電源以后,主板BIOS加電進(jìn)行自檢。自檢的內(nèi)容很多,是一個(gè)很復(fù)雜的過(guò)程,這里只介紹與硬盤(pán)有關(guān)的部分。

(2)將硬盤(pán)第1個(gè)扇區(qū),也就是0柱面0磁頭1扇區(qū)(線性尋址時(shí)是0號(hào)扇區(qū))的內(nèi)容

讀入內(nèi)存。

(3)檢查結(jié)束標(biāo)志,也就是扇區(qū)最后兩個(gè)字節(jié)的值是否等于“aa55H”(存儲(chǔ)順序是低字節(jié)在前,高字節(jié)在后)。若不等則打印屏幕提示,然后死機(jī)。

(4)執(zhí)行主引導(dǎo)記錄中的程序,將控制權(quán)轉(zhuǎn)交給主引導(dǎo)程序。

(5)主引導(dǎo)程序首先將自己讀入內(nèi)存,然后查找在分區(qū)表中是否有活動(dòng)分區(qū)。找到活動(dòng)分區(qū)以后,將分區(qū)引導(dǎo)記錄讀入內(nèi)存。

(6)檢查結(jié)束標(biāo)志是否等于“aa55H”,然后執(zhí)行分區(qū)引導(dǎo)記錄中的啟動(dòng)程序,將控制權(quán)交給操作系統(tǒng)。

(7)操作系統(tǒng)加載系統(tǒng)文件,計(jì)算機(jī)啟動(dòng)。

通過(guò)對(duì)以上過(guò)程的分析可以看出,如果主引導(dǎo)記錄不正常,后面所有的啟動(dòng)過(guò)程都不可能正常執(zhí)行。

有一種特殊情況,使計(jì)算機(jī)啟動(dòng)過(guò)程的前兩步與上面介紹的不一樣。如果硬盤(pán)上安裝了多系統(tǒng)引導(dǎo)軟件,如Partition Magician分區(qū)軟件,則該軟件將主引導(dǎo)記錄替換成自己的一段程序。這段程序?qū)IOS引向軟件設(shè)置的專用分區(qū),然后根據(jù)操作者的選擇激活某一個(gè)分區(qū),再進(jìn)入正常的啟動(dòng)過(guò)程。類似Partition Magician這樣的分區(qū)軟件還有很多,它們各有自己的特點(diǎn),這些第三方軟件都不在本書(shū)的討論范圍之內(nèi)。通常情況下,一塊硬盤(pán)上只有一個(gè)主引導(dǎo)記錄。

現(xiàn)在用“讀硬盤(pán)扇區(qū)數(shù)據(jù).EXE”程序?qū)⒁粔K硬盤(pán)的主引導(dǎo)記錄讀出,程序運(yùn)行界面如圖1-1所示。“讀硬盤(pán)扇區(qū)數(shù)據(jù).EXE”程序?qū)⒃凇豆ぞ咂分薪榻B,現(xiàn)在先使用該程序的運(yùn)行結(jié)果。

圖1-1

圖1-1所示的左圖是程序運(yùn)行的主窗口。在主窗口的編輯框中顯示了數(shù)值“10084”,這是主引導(dǎo)記錄所在扇區(qū)中,全部字節(jié)的累加算術(shù)和。為什么要取這個(gè)數(shù)值的原因?qū)⒃凇豆ぞ咂分性敿?xì)說(shuō)明。

圖1-1所示的右圖是程序運(yùn)行后彈出的對(duì)話框。該對(duì)話框中顯示了512字節(jié)的十六進(jìn)制值,每行顯示16字節(jié),共顯示32行。

在圖1-1中,位移從00H到1bdH就是主引導(dǎo)記錄。如果用扇區(qū)內(nèi)的字節(jié)編號(hào)來(lái)表示某一字節(jié),設(shè)起始號(hào)為1,就是從第1到第446字節(jié)。為什么要使用位移和扇區(qū)內(nèi)編號(hào)這兩種計(jì)算方式呢?因?yàn)樵诮窈蠓治錾葏^(qū)數(shù)據(jù)時(shí),或者是手工編制扇區(qū)中的字節(jié)數(shù)據(jù)時(shí),某些場(chǎng)合用編號(hào)計(jì)算是比較方便的。

譬如在《工具篇》中介紹的“修改扇區(qū)文件數(shù)據(jù).EXE”程序,可以將每個(gè)扇區(qū)的512字節(jié),按照每行16字節(jié),一共32行的格式顯示在屏幕上。如果從1開(kāi)始編號(hào),則感覺(jué)很有對(duì)稱性,容易查找某一字節(jié)。如果用位移值計(jì)算,就感覺(jué)不太方便。

字節(jié)位移是從0開(kāi)始計(jì)數(shù),而字節(jié)編號(hào)是從1開(kāi)始編號(hào),所以對(duì)同一字節(jié)來(lái)說(shuō),字節(jié)編號(hào)的值要比字節(jié)位移的值大1。

位移從1beH到1fdH是分區(qū)表,字節(jié)編號(hào)為447到510。有關(guān)分區(qū)表的內(nèi)容在下一節(jié)討論。

最后兩字節(jié)是結(jié)束標(biāo)志“55 AA”。因?yàn)閮勺止?jié)組成一個(gè)字,寫(xiě)入磁盤(pán)的順序是低字節(jié)在前,高字節(jié)在后,所以“55 AA”寫(xiě)成十六進(jìn)制應(yīng)為“aa55H”。

結(jié)束標(biāo)志“55 AA”是查找系統(tǒng)數(shù)據(jù)扇區(qū)的標(biāo)志,據(jù)此對(duì)扇區(qū)進(jìn)行搜索,可用于尋找主引導(dǎo)記錄、主分區(qū)表或分區(qū)鏈表所在的扇區(qū)地址,也可以具此查找分區(qū)引導(dǎo)記錄的扇區(qū)地址。

主引導(dǎo)記錄扇區(qū)所在的磁道,通常稱為0磁道,它屬于隱藏磁道,這個(gè)磁道的63個(gè)扇區(qū)屬于隱藏扇區(qū)。操作系統(tǒng)的所有命令,除了FDISK以外都不能訪問(wèn)它們。就連格式化程序FORMAT,對(duì)這些隱藏扇區(qū)也無(wú)能為力。

主引導(dǎo)記錄和主分區(qū)表的數(shù)據(jù),只占用了0磁道的第1個(gè)扇區(qū),系統(tǒng)對(duì)其他的62個(gè)扇區(qū)棄之不用。正因?yàn)槿绱?0磁道的剩余62個(gè)扇區(qū)就成了一些病毒程序代碼、操作系統(tǒng)的引導(dǎo)代碼、應(yīng)用軟件用于自我保護(hù)的識(shí)別標(biāo)記、BIOS功能擴(kuò)展程序代碼的棲息之地。

經(jīng)常監(jiān)測(cè)并分析0磁道的扇區(qū)數(shù)據(jù)變化,就能發(fā)現(xiàn)很多不為人知的秘密,作者舉一例來(lái)說(shuō)明這個(gè)問(wèn)題。

美國(guó)的MACROMEDIA公司堪稱網(wǎng)頁(yè)制作軟件的鼻祖,該公司的三大軟件頗具影響力。這三款軟件是:網(wǎng)頁(yè)制作軟件DREAMWEAVER MX、圖象處理軟件FIREWORKS MX和動(dòng)畫(huà)制作軟件FLASH MX。

這三款軟件有試用版,從操作者安裝使用開(kāi)始,時(shí)間限制為30天。超過(guò)試用期后,軟件就不能運(yùn)行了。即使重新安裝操作系統(tǒng)和這三款軟件,甚至將硬盤(pán)格式化或重新分區(qū),也無(wú)濟(jì)于事。

那么這三款軟件采用了什么保護(hù)機(jī)制呢?作者通過(guò)對(duì)0磁道扇區(qū)數(shù)據(jù)的監(jiān)測(cè),發(fā)現(xiàn)了這三款軟件的一個(gè)秘密。

這三款軟件中的每一款軟件安裝以后,都會(huì)向0磁道的第32扇區(qū)寫(xiě)入一部分識(shí)別代碼。當(dāng)操作者對(duì)邏輯盤(pán)進(jìn)行格式化,或是對(duì)整個(gè)硬盤(pán)重新分區(qū)時(shí),所運(yùn)行的程序都不會(huì)訪問(wèn)第32扇區(qū),所以軟件的時(shí)間限制仍然有效。

作者用扇區(qū)清零程序?qū)?2扇區(qū)的數(shù)據(jù)清掉,然后再安裝這三款軟件的試用版,則可以繼續(xù)使用了。

采取這種保護(hù)方式的軟件還有很多,只要經(jīng)常監(jiān)測(cè)0磁道并用心去分析,就能發(fā)現(xiàn)許多不為人知的秘密。

下面用作者使用的兩塊硬盤(pán)運(yùn)行“監(jiān)視0磁道變化.EXE”程序,將兩塊硬盤(pán)的0磁道63個(gè)扇區(qū)的數(shù)據(jù)分別讀出,然后進(jìn)行比較。所使用的工具程序在《工具篇》中再詳細(xì)介紹。

先看一塊新硬盤(pán)的顯示數(shù)據(jù),如圖1-2所示。

圖1-2

圖1-2所示的扇區(qū)編號(hào)沒(méi)有使用線性尋址的表示方法,而是使用了1~63的編號(hào)方式,這是為了強(qiáng)調(diào)在硬盤(pán)的結(jié)構(gòu)中,每磁道有63個(gè)扇區(qū)的虛擬物理概念。

從圖1-2所示的扇區(qū)字節(jié)算術(shù)和可以看出,只有第1扇區(qū)寫(xiě)有數(shù)據(jù),其他62個(gè)扇區(qū)全部為0。這是因?yàn)樵撚脖P(pán)使用不久,還沒(méi)有寫(xiě)入其他程序的垃圾代碼。

再看一塊老硬盤(pán)的顯示數(shù)據(jù),如圖1-3所示。

圖1-3

如圖1-3所示,除了第1扇區(qū)寫(xiě)有系統(tǒng)引導(dǎo)數(shù)據(jù)以外,還有很多扇區(qū)也寫(xiě)有數(shù)據(jù)。與第1扇區(qū)字節(jié)算術(shù)和相同的,如第6扇區(qū),是作者備份的系統(tǒng)數(shù)據(jù),目的是日后出現(xiàn)引導(dǎo)故障時(shí)修復(fù)硬盤(pán)。與第1扇區(qū)字節(jié)算術(shù)和不相同的扇區(qū),就是硬盤(pán)使用三年多來(lái),各種應(yīng)用軟件寫(xiě)入的垃圾代碼。

1.2 主分區(qū)表

主分區(qū)表占用0號(hào)扇區(qū)(線性尋址)的64字節(jié),位移從1beH到1fdH,字節(jié)編號(hào)為447到510。它共有4個(gè)分區(qū)表項(xiàng),每個(gè)分區(qū)表項(xiàng)占16字節(jié)。一般只使用2個(gè)分區(qū)表項(xiàng),另外2個(gè)分區(qū)表項(xiàng)全為0。分區(qū)表項(xiàng)的格式見(jiàn)表1-1。

表1-1分區(qū)表項(xiàng)各字段值的內(nèi)容

注:偏移量和字節(jié)編號(hào)是第1個(gè)分區(qū)表項(xiàng)的值,后面的分區(qū)表項(xiàng)按照相同的規(guī)律遞增。

通常說(shuō)的分區(qū)表指的是主分區(qū)表,另外在擴(kuò)展分區(qū)的每一個(gè)邏輯驅(qū)動(dòng)器中,都有一個(gè)分區(qū)鏈表,對(duì)它們的解讀方法基本是相同的。

下面將圖1-1所示的兩個(gè)分區(qū)表項(xiàng)單獨(dú)列出來(lái)進(jìn)行分析。

分區(qū)表項(xiàng)一。(位移1beH至1cdH,編號(hào)447到462)

第1個(gè)分區(qū)表項(xiàng)記錄的是本分區(qū)的有關(guān)參數(shù)。

將16字節(jié)按表1-1的格式分為8段,分別進(jìn)行說(shuō)明。

第1、2、4、5段與表中的內(nèi)容一樣,不必重復(fù)。

第3段是2字節(jié),表示扇區(qū)值和柱面值,因?yàn)楸緯?shū)介紹的工具程序使用線性尋址方式,所以對(duì)本字段的內(nèi)容就沒(méi)有必要詳細(xì)解讀了。

第6段是2字節(jié),也表示扇區(qū)值和柱面值。

第7段是一個(gè)雙字,存儲(chǔ)順序低字節(jié)在前,高字節(jié)在后,寫(xiě)成十六進(jìn)制是“0000003fH”,十進(jìn)制是“63”。

第8段是一個(gè)雙字,它的值是十六進(jìn)制為“003ffa86H”,十進(jìn)制為“4192902”。

分區(qū)表項(xiàng)二。(位移1ceH至1ddH,編號(hào)463到478)

第2個(gè)分區(qū)表項(xiàng)記錄的是下一分區(qū)的有關(guān)參數(shù)。

將16字節(jié)按表1-1的格式分為8段,各字段的解讀方法與第1個(gè)分區(qū)表項(xiàng)相同,就不重復(fù)說(shuō)明了。

分區(qū)鏈表的字段組成與解讀方法與主分區(qū)表基本相同,讀者可自行分析研究。需要說(shuō)明的是,最后一個(gè)邏輯驅(qū)動(dòng)器的分區(qū)鏈表中,只使用了1個(gè)分區(qū)表項(xiàng),其他3個(gè)分區(qū)表項(xiàng)的字節(jié)數(shù)據(jù)全為0。

1.3分區(qū)引導(dǎo)記錄

硬盤(pán)的主引導(dǎo)記錄只有一個(gè),存儲(chǔ)在硬盤(pán)的線性0號(hào)扇區(qū)上。而硬盤(pán)的分區(qū)引導(dǎo)記錄不止一個(gè),每一個(gè)邏輯驅(qū)動(dòng)器都有一個(gè)分區(qū)引導(dǎo)記錄。如果將一個(gè)硬盤(pán)分為C、D、E、F、G5個(gè)邏輯驅(qū)動(dòng)器,就應(yīng)該有5個(gè)分區(qū)引導(dǎo)記錄,分別存儲(chǔ)在各個(gè)邏輯驅(qū)動(dòng)器的第1個(gè)邏輯扇區(qū)中。

分區(qū)引導(dǎo)記錄主要由4部分組成。

(1)BIOS參數(shù)記錄塊BPB(BIOS Parameter Block)。

(2)磁盤(pán)標(biāo)志記錄表。

(3)分區(qū)引導(dǎo)記錄代碼區(qū)。

(4)結(jié)束標(biāo)志“55 AA”。

與本書(shū)內(nèi)容相關(guān)的是第1和第4部分,對(duì)第2和第3部分不進(jìn)行討論。

BIOS參數(shù)記錄塊BPB(簡(jiǎn)稱BPB表)所記錄的有關(guān)參數(shù),能幫助操作者確定分區(qū)的容量大小、文件分配表FAT的位置和大小、文件目錄表FDT的位置。BPB表的結(jié)構(gòu)與使用的文件系統(tǒng)有關(guān),本節(jié)討論FAT16和FAT32兩種文件系統(tǒng)的BPB表結(jié)構(gòu)。

結(jié)束標(biāo)志“55 AA”是系統(tǒng)識(shí)別引導(dǎo)扇區(qū)的標(biāo)識(shí),也是使用工具程序?qū)τ脖P(pán)扇區(qū)進(jìn)行搜索,用于尋找分區(qū)引導(dǎo)記錄所在扇區(qū)地址的依據(jù)。

1.3.1 FAT16文件系統(tǒng)的BPB表

FAT16文件系統(tǒng)BPB表從扇區(qū)字節(jié)位移0bH開(kāi)始,用字節(jié)編號(hào)計(jì)算,就是第12字節(jié), BPB表共占用25字節(jié)。

FAT16文件系統(tǒng)BPB表的結(jié)構(gòu)見(jiàn)表1-2。

表1-2 FAT16文件系統(tǒng)BPB表的結(jié)構(gòu)

下面用“讀硬盤(pán)扇區(qū)數(shù)據(jù).EXE”程序?qū)⒁粋€(gè)邏輯驅(qū)動(dòng)器的引導(dǎo)記錄讀出來(lái),然后結(jié)合表1-2進(jìn)行分析,程序運(yùn)行界面如圖1-4所示。

圖1-4

BPB表占用的字節(jié)數(shù)較多,各個(gè)字段值所表示的內(nèi)容也較為復(fù)雜。為了便于分析,下面將BPB表的內(nèi)容單獨(dú)列出來(lái)。

從第12字節(jié)開(kāi)始,將25字節(jié)按表1-2的格式分為12段,分別進(jìn)行說(shuō)明。

第1段是1個(gè)字,它的值為200H,等于512,說(shuō)明每個(gè)扇區(qū)有512字節(jié)。

第2段是1字節(jié),值為64,說(shuō)明每個(gè)簇包含64個(gè)扇區(qū),則每個(gè)簇的字節(jié)數(shù)是:

64×512=32768。關(guān)于簇的概念,在后面有關(guān)章節(jié)中再作介紹。

第3段是1個(gè)字,值為1,說(shuō)明有1個(gè)保留扇區(qū)。

第4段是1字節(jié),值為2,說(shuō)明有2個(gè)FAT表。

第5段是1個(gè)字,值為512,說(shuō)明有512個(gè)根目錄登記項(xiàng)數(shù)。因?yàn)槊總€(gè)根目錄登記項(xiàng)固定占用32字節(jié),據(jù)此可算出FDT表總共占用32個(gè)扇區(qū)。

第6段是1字,在硬盤(pán)中設(shè)為0。

第7段是1字節(jié),固定為f8H。

第8段是1個(gè)字,值為256,說(shuō)明每個(gè)FAT表占用256個(gè)扇區(qū)。

第9段是1個(gè)字,值為63,說(shuō)明每個(gè)磁道劃分成63個(gè)扇區(qū)。

第10段是1個(gè)字,值為255,說(shuō)明磁頭數(shù)最大是255,這個(gè)數(shù)值的含義需要進(jìn)一步解釋。這個(gè)參數(shù)并不是硬盤(pán)的物理磁頭數(shù),它是BIOS磁盤(pán)服務(wù)程序?yàn)榱斯芾泶笕萘坑脖P(pán),采用位移變換后形成的值。在CHS扇區(qū)尋址方式中,柱面用10位二進(jìn)制數(shù)表示,其最大值為1024。硬盤(pán)的柱面數(shù)一般都超過(guò)了1024,因此BIOS磁盤(pán)服務(wù)程序采用了減少柱面數(shù),增加磁頭數(shù)的移位算法。

舉例說(shuō)明一下,假如一個(gè)硬盤(pán)有8192個(gè)柱面和16個(gè)磁頭。很明顯在CHS尋址方式中,無(wú)法表示全部柱面數(shù)。這時(shí)由BIOS磁盤(pán)服務(wù)程序?qū)⒅鏀?shù)換算成8192÷8=1024,將磁頭數(shù)換算成16×8=128。這樣既保證硬盤(pán)的容量不變,又能使操作系統(tǒng)或應(yīng)用程序訪問(wèn)到所有的硬盤(pán)扇區(qū)。

第11段是1個(gè)雙字,值為63,說(shuō)明有63個(gè)隱藏扇區(qū)。

第12段是1個(gè)雙字,值為4192865,這是邏輯驅(qū)動(dòng)器的總扇區(qū)數(shù),但它不包含第11段中的隱藏扇區(qū)數(shù)。

1.3.2 FAT32文件系統(tǒng)的BPB表

FAT32文件系統(tǒng)BPB表也從扇區(qū)字節(jié)位移0bH開(kāi)始,占用53字節(jié)。因?yàn)镕AT16文件系統(tǒng)中的有些磁盤(pán)參數(shù)在FAT32文件系統(tǒng)中已不適用,必須進(jìn)行擴(kuò)充。具體做法是將FAT16文件系統(tǒng)中使用的25字節(jié)仍然保留,適用的數(shù)據(jù)項(xiàng)繼續(xù)使用,需要擴(kuò)充的數(shù)據(jù)項(xiàng)移到后面的28字節(jié)里去。目前這28字節(jié)只使用了很少一部分,剩下的字節(jié)全為0,供系統(tǒng)繼續(xù)擴(kuò)充時(shí)使用。

FAT32文件系統(tǒng)BPB表的結(jié)構(gòu)見(jiàn)表1-3。

表1-3 FAT32文件系統(tǒng)BPB表的結(jié)構(gòu)

現(xiàn)在將使用FAT32文件系統(tǒng)的一個(gè)邏輯驅(qū)動(dòng)器的引導(dǎo)記錄讀出來(lái),結(jié)合表1-3進(jìn)行分析。程序運(yùn)行界面如圖1-5所示。

圖1-5

為了便于分析,將BPB表內(nèi)容分兩部分單獨(dú)列出來(lái),分段進(jìn)行介紹。

(1)前25字節(jié)。

與FAT16的BPB表相同的數(shù)據(jù)項(xiàng)不再分析,只分析不同的部分。

第2段的值是8,即每簇有8個(gè)扇區(qū)。可以看出FAT32的簇比FAT16的簇小得多,這就是FAT32能夠節(jié)省磁盤(pán)空間的原因。因?yàn)閿?shù)據(jù)是按簇存儲(chǔ)的,即使一個(gè)很小的文件也必須至少分配給它一個(gè)簇的存儲(chǔ)空間,這個(gè)簇里沒(méi)有使用的扇區(qū)就不能再分配給其他文件使用了。而FAT16的簇比較大,所以浪費(fèi)的磁盤(pán)空間就多一些。

第3段的值是32,即保留了32個(gè)扇區(qū)。因?yàn)镕AT32文件系統(tǒng)的引導(dǎo)記錄要占用多個(gè)扇區(qū),所以將原來(lái)的1個(gè)保留扇區(qū)增加到32個(gè)。

第5段和第8段因需要擴(kuò)充,所以棄之不用,將有關(guān)數(shù)據(jù)轉(zhuǎn)移到后面的28字節(jié)里去。

(2)后28字節(jié)。

第1段的參數(shù)是每個(gè)FAT表占用的扇區(qū)數(shù),值是7994。可以看出FAT32文件系統(tǒng)的簇雖然小了,但FAT表占用的扇區(qū)數(shù)卻增加了很多。這就是FAT32文件系統(tǒng)的文件檢索速度比FAT16文件系統(tǒng)慢的原因。

第3段是根目錄起始簇號(hào),值為2。有2個(gè)簇被系統(tǒng)占用。

第5段的值是6,說(shuō)明引導(dǎo)記錄占用6個(gè)扇區(qū)。

1.4文件分配表FAT

FAT文件系統(tǒng)在管理磁盤(pán)上的用戶文件時(shí),使用了文件分配表的管理方式。不過(guò)系統(tǒng)引導(dǎo)所需要的數(shù)據(jù),不在文件分配表的管理范圍之內(nèi)。在這一點(diǎn)上與NTFS文件系統(tǒng)的存儲(chǔ)方式是完全不相同的,NTFS文件系統(tǒng)將磁盤(pán)上的所有事物都看作文件,不管是用戶的還是系統(tǒng)的。

文件分配表在FAT文件系統(tǒng)中占有非常重要的地位,對(duì)文件的所有操作,包括讀、寫(xiě)、修改和復(fù)制,都要依賴于文件分配表中的有關(guān)記錄。正因?yàn)槿绱?當(dāng)初設(shè)計(jì)者將文件分配表作了兩份相同的拷貝存儲(chǔ)在磁盤(pán)上。

1.4.1扇區(qū)分簇管理

操作系統(tǒng)或應(yīng)用程序在將數(shù)據(jù)寫(xiě)入一個(gè)磁盤(pán)文件時(shí),必須在磁盤(pán)上找到可以使用的未用扇區(qū)。反過(guò)來(lái)要將數(shù)據(jù)從磁盤(pán)文件中讀出時(shí),也要在磁盤(pán)上找到已經(jīng)儲(chǔ)存了相應(yīng)數(shù)據(jù)的有關(guān)扇區(qū)。要查找扇區(qū)必須知道扇區(qū)的地址,文件分配表FAT就是記錄扇區(qū)地址的。

因?yàn)橛脖P(pán)的扇區(qū)非常多,如果將每個(gè)扇區(qū)的地址都記錄在文件分配表里,勢(shì)必造成文件分配表體積龐大,查找時(shí)效率將會(huì)很低。為解決這個(gè)問(wèn)題,采用了將扇區(qū)分組管理的方法。分組的過(guò)程稱作扇區(qū)分簇,是由高級(jí)格式化程序在格式化磁盤(pán)時(shí)完成的。

扇區(qū)分簇以后,將每個(gè)簇的地址記錄到文件分配表FAT里去。由于一個(gè)簇能包含很多扇區(qū),所以文件分配表的體積減小了,查找的速度就提高了。

一個(gè)簇能包含多少扇區(qū),是由文件系統(tǒng)和分區(qū)的大小決定的,在使用FAT16和FAT32兩種文件系統(tǒng)時(shí),分區(qū)大小和簇大小以及每簇扇區(qū)數(shù)的關(guān)系見(jiàn)表1-4。

表1-4分區(qū)大小與簇的對(duì)應(yīng)關(guān)系

1.4.2 簇鏈和文件檢索過(guò)程

當(dāng)使用一個(gè)新格式化的邏輯驅(qū)動(dòng)器時(shí),文件數(shù)據(jù)存放的簇號(hào)是連續(xù)的。使用一段時(shí)間以后,由于經(jīng)常對(duì)文件進(jìn)行刪除、拷貝和修改操作,每個(gè)文件分配的簇號(hào)就不一定是連續(xù)的了。為了確保在存取文件時(shí)能夠檢索到所有連續(xù)或不連續(xù)的扇區(qū)地址,文件分配表采用了“簇鏈”的記錄方式。

當(dāng)需要從磁盤(pán)上讀取一個(gè)文件時(shí),首先從文件目錄表中找到該文件的目錄登記項(xiàng)。繼而從目錄登記項(xiàng)的有關(guān)字段,查到分配給該文件的第一個(gè)簇號(hào),根據(jù)第一簇號(hào)的內(nèi)容可以計(jì)算出兩組數(shù)據(jù)。

其中一組數(shù)據(jù)指出了文件在數(shù)據(jù)區(qū)DATA里的第一簇扇區(qū)首地址,從第一簇扇區(qū)首地址開(kāi)始,數(shù)據(jù)是連續(xù)存放的,連續(xù)存放多少個(gè)扇區(qū)由分區(qū)格式和分區(qū)大小決定,表1-4中列出了它們的對(duì)應(yīng)關(guān)系。

另外一組數(shù)據(jù)指出了FAT表內(nèi)簇登記項(xiàng)的地址,如果其值是結(jié)束標(biāo)志“ffffH”(FAT16格式)或“0fffffffH”(FAT32格式),說(shuō)明文件至此已經(jīng)結(jié)束。如果不是結(jié)束標(biāo)志,則該登記項(xiàng)的值為第二個(gè)簇號(hào),據(jù)此又可以計(jì)算出兩組數(shù)據(jù),繼而確定文件在數(shù)據(jù)區(qū)里第二簇扇區(qū)首地址和FAT表內(nèi)第二個(gè)簇登記項(xiàng)的地址。

繼續(xù)重復(fù)上面的過(guò)程,就可以得到文件在DATA區(qū)里的全部數(shù)據(jù),以及文件在FAT表里所有簇登記項(xiàng)的地址。

詳細(xì)了解文件數(shù)據(jù)存取的全過(guò)程,就可以從遭到破壞、不能啟動(dòng)的硬盤(pán)上,利用讀取物理硬盤(pán)扇區(qū)的工具程序把文件數(shù)據(jù)讀出來(lái)。

當(dāng)需要在磁盤(pán)上建立一個(gè)新文件時(shí),首先順序檢索FAT表,找到第一個(gè)可用簇,可用簇登記項(xiàng)的值為“0000H”(FAT16)或“00000000H”(FAT32)。將該簇作為起始簇,寫(xiě)入文件目錄表FDT的相關(guān)登記項(xiàng)的起始簇字段中。然后繼續(xù)檢索后面的可用簇,找到以后將其簇號(hào)寫(xiě)入第一個(gè)可用簇項(xiàng)內(nèi)。

按照以上過(guò)程進(jìn)行下去,將滿足文件長(zhǎng)度所需的簇?cái)?shù)全部找到。使每一個(gè)簇項(xiàng)的值指向下一個(gè)所需簇項(xiàng),在最后的簇登記項(xiàng)內(nèi)寫(xiě)入結(jié)束標(biāo)志“ffffH”(FAT16)或“0fffffffH”(FAT32),于是一條能夠檢索整個(gè)文件的“簇鏈”就形成了。

當(dāng)需要對(duì)文件進(jìn)行擴(kuò)展時(shí),先檢索FAT表,找到1可用簇。將簇項(xiàng)的內(nèi)容置為結(jié)束標(biāo)志,并將文件原來(lái)的最后簇項(xiàng)值修改為指向此可用簇。以此類推,直到滿足文件的全部擴(kuò)展要求。

當(dāng)刪除文件時(shí),除了將文件目錄表中登記項(xiàng)的第1字節(jié)改為e5H,還要把該文件在FAT表的“簇鏈”中所對(duì)應(yīng)的簇項(xiàng)全部清零,這些被清零的簇項(xiàng)又可以供其他文件使用。不過(guò)在刪除文件的操作結(jié)束以后,目錄登記項(xiàng)的其他字段仍然保存完好,只是文件名的第1字節(jié)變成了e5H,并且文件存儲(chǔ)在扇區(qū)里的所有數(shù)據(jù)仍然存在。這時(shí)只要FAT表中被清零的簇項(xiàng)沒(méi)有被新文件使用,就可以運(yùn)行相關(guān)軟件恢復(fù)被刪除的文件。

FAT表記錄了磁盤(pán)文件對(duì)磁盤(pán)使用情況的信息,其中包含所有未分配的、已分配的或標(biāo)記為壞的盤(pán)簇的信息。

FAT表只記錄磁盤(pán)文件對(duì)磁盤(pán)的占用信息,對(duì)于系統(tǒng)保留的控制信息并不由FAT表中的盤(pán)簇表示。這些保留信息包括引導(dǎo)扇區(qū)、分區(qū)表、FAT表本身占用的扇區(qū)以及文件目錄表FDT占用的扇區(qū)。

1.4.3 FAT表扇區(qū)尋址

FAT表在磁盤(pán)文件系統(tǒng)中的地位是非常重要的,為了使磁盤(pán)文件的操作安全可靠,文件系統(tǒng)的設(shè)計(jì)者們制訂了兩個(gè)內(nèi)容相同的FAT表。雖然當(dāng)?shù)谝粋€(gè)FAT表出錯(cuò)時(shí),操作系統(tǒng)并不利用第二個(gè)FAT表去修復(fù)它,但技術(shù)人員可以使用有關(guān)的軟件,用第二個(gè)FAT表去修復(fù)它。

當(dāng)硬盤(pán)的系統(tǒng)控制信息遭到輕微的破壞時(shí),可以通過(guò)各種方法去修復(fù)它。如上面所講的四部分系統(tǒng)保留信息,在某一部分出現(xiàn)錯(cuò)誤時(shí),可以采用從其他計(jì)算機(jī)上移植的方法,或是采用手工編制扇區(qū)數(shù)據(jù)的方法進(jìn)行修復(fù)。

但是當(dāng)這些控制信息嚴(yán)重?fù)p壞,譬如分區(qū)表鏈和分區(qū)引導(dǎo)記錄嚴(yán)重?fù)p壞時(shí),上述方法就無(wú)能為力了。一般來(lái)說(shuō),在這種情況下只有重新分區(qū)、格式化,硬盤(pán)上的所有數(shù)據(jù)也就全部丟失了。

硬盤(pán)的系統(tǒng)控制信息遭到破壞時(shí),一般情況下FAT表被破壞的可能性比較小。特別是第2個(gè)FAT表一般能夠保存完好,因?yàn)榈?個(gè)FAT表很少受到應(yīng)用程序的訪問(wèn)。這時(shí)如果使用物理硬盤(pán)扇區(qū)的讀寫(xiě)技術(shù),就有可能從硬盤(pán)上恢復(fù)出重要數(shù)據(jù)來(lái)。這種操作的對(duì)象是針對(duì)整個(gè)硬盤(pán),而不用考慮硬盤(pán)的分區(qū)情況,也不用考慮硬盤(pán)上安裝的是什么操作系統(tǒng)。

查找FAT表首扇區(qū)地址的方法很簡(jiǎn)單,可以根據(jù)FAT表的特征標(biāo)記,使用查找扇區(qū)特征的工具程序進(jìn)行查找。不管是FAT16文件系統(tǒng)還是FAT32文件系統(tǒng),每個(gè)FAT表的首扇區(qū)里前兩字節(jié)都是F8 FF。

1.5文件目錄表FDT

操作系統(tǒng)為了管理磁盤(pán)上的目錄和文件,在特定的扇區(qū)上建立了一個(gè)文件目錄表FDT,它是由高級(jí)格式化程序FORMAT在格式化磁盤(pán)時(shí)建立的。

FAT16分區(qū)格式的FDT表占用固定的32個(gè)扇區(qū),扇區(qū)地址緊跟在第2個(gè)FAT表之后。FAT32分區(qū)格式?jīng)]有固定的FDT表,在第2個(gè)FAT表之后就是數(shù)據(jù)區(qū)DATA。目錄名和文件名也作為數(shù)據(jù)對(duì)待,存放在數(shù)據(jù)區(qū)內(nèi)。

兩種分區(qū)格式都使用一個(gè)32字節(jié)長(zhǎng)的“目錄登記項(xiàng)”,來(lái)說(shuō)明目錄或文件的有關(guān)特性。FAT16分區(qū)的目錄登記項(xiàng)存放在FDT表里,FAT32分區(qū)的目錄登記項(xiàng)存放在數(shù)據(jù)區(qū)里。表1-5列出了目錄登記項(xiàng)的各字段內(nèi)容。

表1-5目錄登記項(xiàng)各字段值的內(nèi)容

表1-5將一個(gè)目錄登記項(xiàng)的32字節(jié)劃分為8個(gè)字段,下面對(duì)其中比較重要的字段進(jìn)行分析。

第1段是文件名,占用8字節(jié)。如果一個(gè)文件名不足8字節(jié),則不足的部分填充空格,文件名與擴(kuò)展名中間的圓點(diǎn)忽略。

第2段是文件擴(kuò)展名,同樣遵守上述規(guī)定,不過(guò)擴(kuò)展名不足3個(gè)字符的情況較少。

第4段對(duì)FAT16和FAT32兩種文件系統(tǒng)有所不同,FAT32因?yàn)樾枰芾泶笥?6位的簇,所以將簇的高16位存儲(chǔ)在這個(gè)字段中,低16位的存儲(chǔ)位置與FAT16相同。

第7段是文件的起始簇號(hào),FAT文件系統(tǒng)一系列的尋址過(guò)程都是由此開(kāi)始的。

第8段用一個(gè)雙字記錄文件的字節(jié)長(zhǎng)度。

1.6數(shù)據(jù)區(qū)DATA

數(shù)據(jù)區(qū)DATA的所有扇區(qū)都劃分成以簇為單位的邏輯結(jié)構(gòu),每一個(gè)簇在FAT表里都有一個(gè)簇登記項(xiàng)與之對(duì)應(yīng)。

在對(duì)硬盤(pán)的引導(dǎo)故障進(jìn)行修復(fù)時(shí),一般只訪問(wèn)主引導(dǎo)記錄、分區(qū)表和分區(qū)引導(dǎo)記錄,極個(gè)別的情況下可能訪問(wèn)到FAT表和FDT表,而DATA區(qū)是訪問(wèn)不到的。

FAT16文件系統(tǒng)的DATA區(qū)緊接在FDT表之后。FAT32文件系統(tǒng)因?yàn)闆](méi)有FDT表,所以緊接在第二個(gè)FAT表之后的就是DATA區(qū)。

主站蜘蛛池模板: 时尚| 义马市| 镇康县| 南皮县| 澄迈县| 株洲县| 武强县| 渭源县| 永丰县| 伊春市| 南投县| 子长县| 刚察县| 灵寿县| 和顺县| 都安| 德惠市| 惠州市| 安阳县| 金山区| 新田县| 巴青县| 南部县| 西畴县| 济源市| 霍山县| 绥棱县| 石首市| 阿瓦提县| 扎囊县| 普安县| 仁寿县| 新邵县| 永兴县| 黑山县| 海伦市| 定州市| 阜城县| 迭部县| 新田县| 林西县|