FAT32文件系統詳解

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

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

wKioL1LLT7nxfthkAAArvJ7ngmE694.jpg

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

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

FAT1:FAT的含義是文件分配表,FAT32通常有兩份FAT,FAT1是第一份,也是主FAT。操作系統

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

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


1、分析FAT32文件系統的DBR內存

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

wKiom1LLUHGgknhHAAGkc-UgO5Q090.jpg

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

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」。


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

FAT1的內容以下:

因爲分區格式化以後沒有寫入太多的數據,因此FAT項不多。

wKiom1LLUnaTOkgJAACCopPnP58159.jpg

FAT表結構及做用

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

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

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

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

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

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

七、若是某個文件佔用不少個簇,則第一個FAT項記錄下一個FAT項的編號(既簇號),若是這個文件結束了,則用「0F FF FF FF」表示。

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

九、FAT的主要做用是標明分區存儲的介質以及簇的使用狀況。


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

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

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

三、所以FAT1=分區起始扇區+DBR保留扇區,FAT2=分區起始扇區+DBR保留扇區+FAT1。


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

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

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

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

三、經過上面的信息就能夠找到數據區的起始位置,根目錄=數據區的起始扇區+(簇大小*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

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

一、系統取長文件名的前6個字符加上「~1」造成短文件名,其擴展名不變;

二、若是已存在這個名字的文件,則符號「~」後的數字自動增長;

三、若是文件名內存在windows非法的字符,則如下劃線「_」代替;

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

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

wKioL1LLbN3DTdvXAABXaWgL6jM246.jpg

wKioL1LLbKOxoS_oAABFm_xFUtY021.jpg


FAT32文件系統總結

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

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

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

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

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

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

六、根據文件的簇號就能夠找到文件內容的絕對扇區;

七、若是一個文件佔用多個簇,則須要根據FAT表項得知下一個數據簇的簇號。

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

八、若是子目錄中還有子目錄的話,則根據這種方法一直找下去便可。


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


做者:鄧奇

TEL:18911808630

相關文章
相關標籤/搜索