FAT32文件系統詳解

   硬盤是用來存儲數據的,爲了使用和管理方便,這些數據以文件的形式存儲在硬盤上。任何操作系統都有自己的文件管理系統,不同的文件系統又有各自不同的邏輯組織方式。例如:常見的文件系統有FAT,NTFS,EXT,UFS,HFS+等等。作者後面的文章會一一講到,下面就來學習一下基於Windows的FAT32文件系統。

FAT32文件系統由DBR及其保留扇區,FAT1,FAT2和DATA四個部分組成,其機構如下圖:

wKioL1LLT7nxfthkAAArvJ7ngmE694.jpg

這些結構是在分區被格式化時創建出來的,含義解釋如下:

DBR及其保留扇區:DBR的含義是DOS引導記錄,也稱爲操作系統引導記錄,在DBR之後往往會有一些保留扇區。

FAT1:FAT的含義是文件分配表,FAT32一般有兩份FAT,FAT1是第一份,也是主FAT。

FAT2:FAT2是FAT32的第二份文件分配表,也是FAT1的備份。

DATA:DATA也就是數據區,是FAT32文件系統的主要區域,其中包含目錄區域。


一、分析FAT32文件系統的DBR

   FAT32文件系統的DBR有5部分組成,分別爲跳轉指令,OEM代號,BPB,引導程序和結束標誌。如下圖是一個完整的FAT32文件系統的DBR。

wKiom1LLUHGgknhHAAGkc-UgO5Q090.jpg

跳轉指令:本身佔2字節它將程序執行流程跳轉到引導程序處。

OEM代號:這部分佔8字節,其內容由創建該文件系統的OEM廠商具體安排。

BPB:FAT32的BPB從DBR的第12個字節開始,佔用79字節,記錄了有關該文件系統的重要信息,各參數解釋如下表:

wKioL1LLUOyRCx8vAAB2zWiNedE813.jpg

wKiom1LLe2DwevFzAACqRwFUOUY487.jpg

FAT32文件系統在DBR的保留扇區中安排了一個文件系統信息扇區,用以記錄數據區中空閒簇的數量及下一個空閒簇的簇號,該扇區一般在分區的1號扇區,也就是緊跟着DBR後的一個扇區,其內如下:

wKiom1LLUZOQTvOJAAF1cveUbmw760.jpg

各參數解釋如下:

wKioL1LLUayjqXzeAAB_VWKMAuo360.jpg

引導程序代碼:FAT32的DBR引導程序佔用420字節,對於沒有安裝操作系統的分區來說這段程序是沒有用處的。

結束標誌:DBR的結束標誌與MBR,EBR的結束標誌相同,爲“55 AA”。


二、分析FAT32文件系統的FAT表

FAT1的內容如下:

由於分區格式化之後沒有寫入太多的數據,所以FAT項很少。

wKiom1LLUnaTOkgJAACCopPnP58159.jpg

FAT表結構及作用

1、FAT32文件一般有兩份FAT,他們由格式化程序在對分區進行格式化時創建,FAT1是主,FAT2是備份。

2、FAT1跟在DBR之後,其具體地址由DBR的BPB參數中指定,FAT2跟在FAT1的後面。

3、FAT表由FAT表項構成,我們把FAT表項簡稱FAT項,每個FAT項佔用4字節。

4、每個FAT項都有一個固定的編號,這個編號從0開始。

5、FAT表項的前兩個FAT項爲文件系統保留使用,0號FAT爲介質類型,1號FAT爲文件系統錯誤標誌。

6、分區的數據區中每個簇都會映射到FAT表中的唯一一個FAT項,因爲0號FAT和1號FAT被系統佔用,用戶的數據從2號FAT開始記錄。

7、如果某個文件佔用很多個簇,則第一個FAT項記錄下一個FAT項的編號(既簇號),如果這個文件結束了,則用“0F FF FF FF”表示。

8、分區格式化後,用戶文件以簇爲單位存放在數據區中,一個文件至少佔用一個簇。

9、FAT的主要作用是標明分區存儲的介質以及簇的使用情況。


定位FAT絕對位置的方法如下:

1、首先從MBR的分區表中得知分區的起始扇區,偏移到此扇區。

2、從DBR的BPB中得知DBR的保留扇區數,FAT表的個數,FAT表的大小。

3、因此FAT1=分區起始扇區+DBR保留扇區,FAT2=分區起始扇區+DBR保留扇區+FAT1。


三、分析FAT32文件系統的數據區

數據區的位置在FAT2的後面,具體定位方式如下;

1、通過MBR中的分區表信息得知分區的起始位置。

2、通過分區中DBR得知DBR的保留扇區數以及FAT表的大小,FAT表的個數。

3、通過上面的信息就可以找到數據區的起始位置,根目錄=數據區的起始扇區+(簇大小*2)。


數據區的類容主要由三部分組成:根目錄,子目錄和文件內容。在數據區中是以“簇”爲單位進行存儲的,2號簇被分配給根目錄使用。

根目錄的定位方式爲:根目錄=分區起始扇區+DBR保留扇區+(FAT表*2)+(簇大小*2)

wKiom1LLWxKSM0PwAACNLrmNTVc897.jpg

FAT32文件系統中,分區根目錄下的文件和目錄都放在根目錄區中,子目錄中的文件和目錄都放在子目錄區中,並且沒每32個字節爲一個目錄項,每個目錄項紀錄着一個目錄或文件(也可能是多個目錄項記錄一個文件或目錄),如上圖所示就是一個目錄項。

在FAT32文件系統中,目錄項可以分爲四類:卷標目錄項、“.”和“..”目錄項、短文件名目錄項、長文件名目錄項。

卷標目錄項:卷標就是分區的名字,可以在格式化分區時創建,也可以隨意修改,長度爲11字節。

“.”和“..”目錄項:“.”表示當前目錄,“..”表示上一層目錄。這兩個目錄項多存在子目錄中。

短文件名目錄項:所謂短文件名既文件名的“8.3”格式,此格式支持主文件名不能超過8字節,擴展名不能超過3字節。短文件名目錄始終存放在一個目錄項中。

短文件名的各參數解釋如下:

wKioL1LLZaryRrZbAAEU013v_ho125.jpg

其中關於時間的表達方式如下:

wKioL1LLaIKhSRWBAABJ-d63uVU365.jpg

關於日期的表達方式如下:

wKiom1LLaM7AfCeHAABJ0UIbWsc692.jpg

長文件名目錄項:由於短文件名“8.3”的格式遠遠不能滿足現實中的需求,所以就出現了長文件名,長文件名其實就是將文件名進行分段,分成若干個短文件名進行存儲。

wKiom1LLdkTjJJoeAAChWw_qpQo810.jpg

長文件名在進行分段存儲的時候,遵循一下三個處理原則:

1、系統取長文件名的前6個字符加上“~1”形成短文件名,其擴展名不變;

2、如果已存在這個名字的文件,則符號“~”後的數字自動增加;

3、如果文件名內存在windows非法的字符,則以下劃線“_”代替;

4、長文件名目錄項採用倒敘的方式進行記錄,如上圖。

如下:是長文件名目錄的各參數的解釋

wKioL1LLbN3DTdvXAABXaWgL6jM246.jpg

wKioL1LLbKOxoS_oAABFm_xFUtY021.jpg


FAT32文件系統總結

上述的內容已經簡單的介紹了FAT32文件系統,下面根據定位某個文件來詳細的瞭解FAT32文件系統是如何存儲數據的。

1、根據磁盤0號扇區MBR的分區表得知分區的起始位置,既DBR;

2、根據DBR中BPB記錄的信息,得知DBR保留扇區數,FAT的大小,FAT的個數;

3、根據上述信息可以算出數據的起始位置,數據區=分區起始扇區+DBR保留扇區+(FAT表*2);

4、計算根目錄所在的絕對位置,根目錄=數據區的起始扇區+(簇大小*2);

5、根據根目錄中的目錄項信息得知,根目錄下的文件以及子目錄等所對應的簇;

6、根據文件的簇號就可以找到文件內容的絕對扇區;

7、如果一個文件佔用多個簇,則需要根據FAT表項得知下一個數據簇的簇號。

7、如果根目錄下的目錄項是子目錄的話,則根據子目錄中的文件目錄項得知文件內容的簇號;

8、如果子目錄中還有子目錄的話,則根據這種方法一直找下去即可。


至此FAT32文件系統就簡紹完畢了,希望對那些喜歡數據底層的朋友們有所幫助。


作者:鄧奇

TEL:18911808630



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章