硬碟是用來儲存資料的,為了使用和管理方便,這些資料以檔案的形式儲存在硬碟上。任何作業系統都有自己的檔案管理系統,不同的檔案系統又有各自不同的邏輯組織方式。例如:常見的檔案系統有FAT,NTFS,EXT,UFS,HFS+等等。作者後面的文章會一一講到,下面就來學習一下基於Windows的FAT32檔案系統。
FAT32檔案系統由DBR及其保留扇區,FAT1,FAT2和DATA四個部分組成,其機構如下圖:
這些結構是在分區被格式化時建立出來的,含義解釋如下:
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。
跳轉指令:本身佔2位元組它將程式執行流程跳轉到引導程式處。
OEM代號:這部分佔8位元組,其內容由建立該檔案系統的OEM廠商具體安排。
BPB:FAT32的BPB從DBR的第12個位元組開始,佔用79位元組,記錄了有關該檔案系統的重要訊息,各參數解釋如下表:
FAT32檔案系統在DBR的保留扇區中安排了一個檔案系統資訊扇區,用以記錄資料區中空閑簇的數量及下一個空閑簇的簇號,該扇區一般在分區的1號扇區,也就是緊跟著DBR後的一個扇區,其內如下:
各參數解釋如下:
引導程式碼:FAT32的DBR引導程式佔用420位元組,對於沒有安裝作業系統的分區來說這段程式是沒有用處的。
結束標誌:DBR的結束標誌與MBR,EBR的結束標誌相同,為“55 AA”。
二、分析FAT32檔案系統的FAT表
FAT1的內容如下:
由於分區格式化之後沒有寫入太多的資料,所以FAT項很少。
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)
FAT32檔案系統中,分區根目錄下的檔案和目錄都放在根目錄區中,子目錄中的檔案和目錄都放在子目錄區中,並且沒每32個位元組為一個目錄項,每個目錄項紀錄著一個目錄或檔案(也可能是多個目錄項記錄一個檔案或目錄),如上圖所示就是一個目錄項。
在FAT32檔案系統中,目錄項可以分為四類:卷標目錄項、“.”和“..”目錄項、短檔案名稱目錄項、長檔名目錄項。
卷標目錄項:卷標就是分區的名字,可以在格式化分區時建立,也可以隨意修改,長度為11位元組。
“.”和“..”目錄項:“.”表示目前的目錄,“..”表示上一層目錄。這兩個目錄項多存在子目錄中。
短檔案名稱目錄項:所謂短檔案名稱既檔案名稱的“8.3”格式,此格式支援主檔案名不能超過8位元組,副檔名不能超過3位元組。短檔案名稱目錄始終存放在一個目錄項中。
短檔案名稱的各參數解釋如下:
其中關於時間的表達方式如下:
關於日期的表達方式如下:
長檔名目錄項:由於短檔案名稱“8.3”的格式遠遠不能滿足現實中的需求,所以就出現了長檔名,長檔名其實就是將檔案名稱進行分段,分成若干個短檔案名稱進行儲存。
長檔名在進行分段儲存的時候,遵循一下三個處理原則:
1、系統取長檔名的前6個字元加上“~1”形成短檔案名稱,其副檔名不變;
2、如果已存在這個名字的檔案,則符號“~”後的數字自動增加;
3、如果檔案名稱記憶體在windows非法的字元,則以底線“_”代替;
4、長檔名目錄項採用倒敘的方式進行記錄,如上圖。
如下:是長檔名目錄的各參數的解釋
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
本文出自 “鄧奇的Blog” 部落格,請務必保留此出處http://dengqi.blog.51cto.com/5685776/1349327