FAT32檔案系統之結構初探(一)
FAT32檔案系統總結
FAT32能夠支援大於32M小於32G的分割槽。雖然第三方的格式化程式可以把超過32G的分割槽格式化為FAT32,會是微軟的系統不允許將大於32G的分割槽格式化為FAT32檔案系統。
FAT32檔案系統由DBR及保留扇區,FAT1,FAT2,DATA區四個部分組成,結構如圖
DBR及保留扇區:DOS Boot Record,含義是DOS結構引導記錄,也稱為作業系統引導記錄,在DBR之後往往有一些保留扇區存在
FAT1: File AllocationTable,含義是檔案分配表。FAT32一般有兩份FAT表,
FAT2:FAT32的第二份分配表,也就是FAT1的備份,稱為備份FAT。
DATA:資料區,是FAT32檔案系統的主要區域,其中也包含目錄區。
FAT32檔案系統的DBR分析
1:跳轉指令
跳轉指令本身佔用2位元組,它將程式執行流程跳轉到載入程式處。例如,當前DBR中的“EB 58”,就是代表組合語言中的“JMP 58”。需要注意該指令本身佔用2個位元組,計算跳轉目標地址時該指令的下一個位元組為基準,所以實際上執行的下一條指令應該位於 5A。緊接著跳轉是一條空的指令NOP(90H)
2:OEM代號
佔用8個位元組,這個說明了微軟不同的作業系統版本。修改這個值不影響檔案系統的使用。
3:BPB(BIOSParameter Block,BIOS引數塊)
BPB從DBR的第12個位元組開始,佔用79個位元組,記錄了有關該檔案系統的重要資訊,其中各個引數的含義見下表
位元組偏移 |
欄位長度(位元組) |
欄位名與定義 |
0X0B |
2 |
每扇區位元組數 |
0X0D |
1 |
每簇扇區數 |
0X0E |
2 |
DOS保留扇區數 |
0X10 |
1 |
FAT個數 |
0X11 |
2 |
未用 |
0X13 |
2 |
未用 |
0X15 |
1 |
介質描述符 |
0X16 |
2 |
未用 |
0X18 |
2 |
每磁軌扇區數 |
0X1A |
2 |
磁頭數 |
0X1C |
4 |
隱藏扇區數 |
0X20 |
4 |
該分割槽的扇區總數 |
0X24 |
4 |
每FAT扇區數 |
0X28 |
2 |
標記 |
0X2A |
2 |
版本 |
0X2C |
4 |
根目錄首簇號 |
0X30 |
2 |
檔案系統資訊扇區號 |
0X32 |
2 |
DBR備份扇區號 |
0X34 |
12 |
保留 |
0X40 |
1 |
BIOS驅動器號 |
0X41 |
1 |
未用 |
0X42 |
1 |
擴充套件引導標記 |
0X43 |
4 |
卷序死列號 |
0X47 |
11 |
卷標 |
0X52 |
8 |
檔案系統型別 |
下面對這些引數做詳細的分析
(1)每扇區位元組數
每扇區位元組數記錄每個邏輯扇區的大小,其常見的值為512,但是並不是固定的值。該值可以由程式定義,合法值包括512,1024,2048,4096。
(2)每簇扇區數
每簇扇區數記錄著檔案系統的簇大小,即由多少個扇區組成一個簇。
簇是FAT12,FAT16及FAT32檔案系統下資料的最小儲存單元,一個簇由一組連續的扇區組成,簇所含的扇區數必須是2的整數次冪,如1,2,4,8,16,32,64,128.
在Windows 2000以前族最大值為64扇區,之後最大值為128.
在FAT檔案系統中,所有的族是從2開始編號,每個簇都有一個自己的地址編號,但是所有的族都位於資料區,在資料區之前沒有族。
(3)DOS保留扇區數
DBR及保留扇區數是DBR到FAT1表之間的扇區數,或者說是FAT1的開始扇區號
對於FAT32檔案系統來說,該值的範圍是32扇區到38扇區之間。
(4)FAT個數
一般為2.
(5)未用
(6)未用
(7)介質描述符
介質描述符是描述磁碟介質的引數,根據磁碟性質的不同,取不同的值
(8)未用
(9)每磁軌扇區數 一般其值為63.
(10)磁頭數 其值一般為255.
(11)隱藏扇區數
是MBR到DBR之間的扇區數,對於擴充套件分割槽中邏輯驅動順來說,是其EBR到DBR
(12)分割槽總扇區數
扇區總數是指分割槽的總扇區數,也就是FAT32分割槽的大小。
(1) 每FAT扇區數
略
(14)標誌
FAT2是否可用,2為可用。
(15)版本 通常為0.
(16)根目錄首簇號
.分割槽在格式化的時候,格式化程式會在資料區中指派一個簇作為FAT32的根目錄的開始,並把該簇號記錄在BPB中。通常都是把資料區中的第一人簇分配給根目錄使用,也就是2號簇。
(17)檔案系統資訊扇區號
FAT32檔案系統在DBR的保留扇區中安排了一個檔案系統資訊扇區,用以記錄資料區中空閒簇的數量及下一個可用的空閒簇的簇號,該扇區一般在分割槽的1號扇區,也就是緊跟在DBR之後的一個扇區。
位元組偏移 |
欄位長度(位元組) |
欄位名與定義 |
0x00 |
4 |
擴充套件引導標籤52 52 61 41“RRaA” |
0X04 |
480 |
未用 |
0X1E4 |
4 |
檔案系統簽名72 72 41 61“rrAa” |
0X1E8 |
4 |
空閒簇數 |
0X1EC |
4 |
下一個空閒簇號 |
0X1F0 |
14 |
未用 |
0X1FE |
2 |
結束標誌“55 AA” |
(18)DBR備份扇區號
FAT32檔案系統在DBR的保留扇區中安排了一個DBR的備份,一般在6號扇區,也就是分割槽的第7個扇區,該備份扇區與原DBR扇區的內容完全一樣,如果原DBR遭到破壞,可以用備份扇區號修復。
(19)未用
(20)BIOS驅動器號
這是BIOS的INT 13H所描述的裝置號碼,一般把硬碟定義為8xh.
(21)未用
(22)擴充套件引導標記
用來確認後面的三個引數是否有效,一般值為29H
(23)卷序列號
(24)卷標
不在這裡進行記錄,放到目錄項中來管理
(25)檔案系統型別
使用ASCII碼記錄當前分割槽的檔案系統型別
4:載入程式
Fat32的DBR載入程式佔用420個位元組,在98 之前的系統之下,這段程式碼負責完成DOS三個系統檔案的裝入; 2000之後的系統中,其負責完成將系統檔案NTLDR裝入。對於一個沒有作業系統的分割槽來講,這段程式碼是沒有作用的。
5:結束標誌