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

基礎(chǔ)篇

本篇主要介紹 NTFS文件系統(tǒng)的基本特性和扇區(qū)存儲特征。同時,為了能與其他主流文件系統(tǒng)進行比較,以加深對NTFS文件系統(tǒng)的認識,本篇還介紹了FAT16和FAT 32兩種文件系統(tǒng)的基本特性,以及它們在硬盤扇區(qū)中的存儲規(guī)律。

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

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

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

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

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

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

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

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

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

1.1 主引導記錄

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

主引導記錄的作用非常重要,它是硬盤啟動時最先加載的扇區(qū)數(shù)據(jù)。下面通過分析硬盤的啟動過程,來說明它的重要性。

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

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

讀入內(nèi)存。

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

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

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

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

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

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

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

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

圖1-1

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

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

在圖1-1中,位移從00H到1bdH就是主引導記錄。如果用扇區(qū)內(nèi)的字節(jié)編號來表示某一字節(jié),設(shè)起始號為1,就是從第1到第446字節(jié)。為什么要使用位移和扇區(qū)內(nèi)編號這兩種計算方式呢?因為在今后分析扇區(qū)數(shù)據(jù)時,或者是手工編制扇區(qū)中的字節(jié)數(shù)據(jù)時,某些場合用編號計算是比較方便的。

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

字節(jié)位移是從0開始計數(shù),而字節(jié)編號是從1開始編號,所以對同一字節(jié)來說,字節(jié)編號的值要比字節(jié)位移的值大1。

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

最后兩字節(jié)是結(jié)束標志“55 AA”。因為兩字節(jié)組成一個字,寫入磁盤的順序是低字節(jié)在前,高字節(jié)在后,所以“55 AA”寫成十六進制應(yīng)為“aa55H”。

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

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

主引導記錄和主分區(qū)表的數(shù)據(jù),只占用了0磁道的第1個扇區(qū),系統(tǒng)對其他的62個扇區(qū)棄之不用。正因為如此,0磁道的剩余62個扇區(qū)就成了一些病毒程序代碼、操作系統(tǒng)的引導代碼、應(yīng)用軟件用于自我保護的識別標記、BIOS功能擴展程序代碼的棲息之地。

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

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

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

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

這三款軟件中的每一款軟件安裝以后,都會向0磁道的第32扇區(qū)寫入一部分識別代碼。當操作者對邏輯盤進行格式化,或是對整個硬盤重新分區(qū)時,所運行的程序都不會訪問第32扇區(qū),所以軟件的時間限制仍然有效。

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

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

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

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

圖1-2

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

從圖1-2所示的扇區(qū)字節(jié)算術(shù)和可以看出,只有第1扇區(qū)寫有數(shù)據(jù),其他62個扇區(qū)全部為0。這是因為該硬盤使用不久,還沒有寫入其他程序的垃圾代碼。

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

圖1-3

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

1.2 主分區(qū)表

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

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

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

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

下面將圖1-1所示的兩個分區(qū)表項單獨列出來進行分析。

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

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

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

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

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

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

第7段是一個雙字,存儲順序低字節(jié)在前,高字節(jié)在后,寫成十六進制是“0000003fH”,十進制是“63”。

第8段是一個雙字,它的值是十六進制為“003ffa86H”,十進制為“4192902”。

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

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

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

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

1.3分區(qū)引導記錄

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

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

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

(2)磁盤標志記錄表。

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

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

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

BIOS參數(shù)記錄塊BPB(簡稱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é)束標志“55 AA”是系統(tǒng)識別引導扇區(qū)的標識,也是使用工具程序?qū)τ脖P扇區(qū)進行搜索,用于尋找分區(qū)引導記錄所在扇區(qū)地址的依據(jù)。

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

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

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

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

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

圖1-4

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

從第12字節(jié)開始,將25字節(jié)按表1-2的格式分為12段,分別進行說明。

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

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

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

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

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

第5段是1個字,值為512,說明有512個根目錄登記項數(shù)。因為每個根目錄登記項固定占用32字節(jié),據(jù)此可算出FDT表總共占用32個扇區(qū)。

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

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

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

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

第10段是1個字,值為255,說明磁頭數(shù)最大是255,這個數(shù)值的含義需要進一步解釋。這個參數(shù)并不是硬盤的物理磁頭數(shù),它是BIOS磁盤服務(wù)程序為了管理大容量硬盤,采用位移變換后形成的值。在CHS扇區(qū)尋址方式中,柱面用10位二進制數(shù)表示,其最大值為1024。硬盤的柱面數(shù)一般都超過了1024,因此BIOS磁盤服務(wù)程序采用了減少柱面數(shù),增加磁頭數(shù)的移位算法。

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

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

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

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

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

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

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

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

圖1-5

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

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

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

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

第3段的值是32,即保留了32個扇區(qū)。因為FAT32文件系統(tǒng)的引導記錄要占用多個扇區(qū),所以將原來的1個保留扇區(qū)增加到32個。

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

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

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

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

第5段的值是6,說明引導記錄占用6個扇區(qū)。

1.4文件分配表FAT

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

文件分配表在FAT文件系統(tǒng)中占有非常重要的地位,對文件的所有操作,包括讀、寫、修改和復制,都要依賴于文件分配表中的有關(guān)記錄。正因為如此,當初設(shè)計者將文件分配表作了兩份相同的拷貝存儲在磁盤上。

1.4.1扇區(qū)分簇管理

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

因為硬盤的扇區(qū)非常多,如果將每個扇區(qū)的地址都記錄在文件分配表里,勢必造成文件分配表體積龐大,查找時效率將會很低。為解決這個問題,采用了將扇區(qū)分組管理的方法。分組的過程稱作扇區(qū)分簇,是由高級格式化程序在格式化磁盤時完成的。

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

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

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

1.4.2 簇鏈和文件檢索過程

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

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

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

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

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

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

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

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

當需要對文件進行擴展時,先檢索FAT表,找到1可用簇。將簇項的內(nèi)容置為結(jié)束標志,并將文件原來的最后簇項值修改為指向此可用簇。以此類推,直到滿足文件的全部擴展要求。

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

FAT表記錄了磁盤文件對磁盤使用情況的信息,其中包含所有未分配的、已分配的或標記為壞的盤簇的信息。

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

1.4.3 FAT表扇區(qū)尋址

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

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

但是當這些控制信息嚴重損壞,譬如分區(qū)表鏈和分區(qū)引導記錄嚴重損壞時,上述方法就無能為力了。一般來說,在這種情況下只有重新分區(qū)、格式化,硬盤上的所有數(shù)據(jù)也就全部丟失了。

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

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

1.5文件目錄表FDT

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

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

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

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

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

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

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

第4段對FAT16和FAT32兩種文件系統(tǒng)有所不同,FAT32因為需要管理大于16位的簇,所以將簇的高16位存儲在這個字段中,低16位的存儲位置與FAT16相同。

第7段是文件的起始簇號,FAT文件系統(tǒng)一系列的尋址過程都是由此開始的。

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

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

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

在對硬盤的引導故障進行修復時,一般只訪問主引導記錄、分區(qū)表和分區(qū)引導記錄,極個別的情況下可能訪問到FAT表和FDT表,而DATA區(qū)是訪問不到的。

FAT16文件系統(tǒng)的DATA區(qū)緊接在FDT表之后。FAT32文件系統(tǒng)因為沒有FDT表,所以緊接在第二個FAT表之后的就是DATA區(qū)。

主站蜘蛛池模板: 绥棱县| 溆浦县| 来安县| 新乡市| 甘谷县| 文水县| 达日县| 丹东市| 浦江县| 临沭县| 江孜县| 澎湖县| 三江| 邳州市| 望江县| 光泽县| 奉新县| 黑龙江省| 当阳市| 平顶山市| 鹤山市| 永安市| 西吉县| 武宣县| 新泰市| 青州市| 沙河市| 永新县| 通化市| 柯坪县| 樟树市| 固原市| 遂平县| 新闻| 太和县| 德阳市| 嘉善县| 井研县| 冀州市| 修武县| 隆子县|