背景
FAT32作為一個文件系統,有着廣泛的應用。在安裝操作系統時,許多個人用戶默認都選擇FAT32文件系統,因此,了解FAT32文件系統下的文件、目錄的管理方式就顯得非常必要了。
FAT32文件系統與FAT16文件系統有着較大的區別。其中,FAT32采用4字節共32位來表示文件的FAT項,因此,一個FAT32文件系統管理的分區最多可管理的簇數目為:2^32= 4294967296,若選擇4K大小的簇,則該分區的最大容量可達:16384G。
FAT32文件系統分布圖
DBR及保留扇區:DBR的含義是DOS引導記錄,也稱為操作系統引導記錄,在DBR之后往往會有一些保留扇區。
FAT1:FAT的含義是文件分配表,FAT32一般有兩份FAT,FAT1是第一份,也是主FAT。
FAT2:FAT2是FAT32的第二份文件分配表,也是FAT1的備份。
DATA:DATA也就是數據區,是FAT32文件系統的主要區域,其中包含目錄區域。
FAT表項
FAT表即文件分配表(File Allocation Table)。FAT32文件表是由一個個表項組成的一張表,其中每一個表項由一個32位的二進制組成,其值對應了相應簇的使用情況,如2號表項對應了2號簇的使用情況,3號表項對應了3號簇的使用情況。
表項數值 | 對應含義 |
0x00000000 | 空閑簇,即表示可用 |
0x00000001 | 保留簇 |
0x00000002 - 0x0FFFFFEF | 被占用的簇,其值指向下一個簇號 |
0x0FFFFFF0 - 0x0FFFFFF6 | 保留值 |
0x0FFFFFF7 | 壞簇 |
0x0FFFFFF8 - 0x0FFFFFFF | 文件最后一個簇 |
如果某簇是文件的最后一簇,填入的值為0x0FFFFFFF;如果該簇不是文件的最后一簇,則填入的值為該文件占用的下一簇號
任務
1)新建目錄、文件,觀察硬盤分區的變化,比較新建項目前與新建項目后分區的變化,掌握FAT32文件系統下目錄、文件的管理方式。
2)理解FAT32下長文件名的處理方式
3)了解FAT32下子目錄的管理
4)理解FAT32下目錄、文件刪除的實質
操作步驟及工作要點
1. 文件的管理
1) 打開一個FAT32分區,拷貝一個大於20K的文件到根目錄下,更名為”shun.txt”
2) 打開WINHEX,打開文件所在的分區。
FAT表第0項 : 0x0FFFFFF8
FAT表第1項 : 0xFFFFFFFF
這兩項不代表任何簇的使用情況,而是FAT表的表頭,表征了介質描述,是固定值,所以0x00和0x01這兩個簇號是不用的
3) 查找文件目錄。抓圖
4) 計算出起始簇的FAT表項在FAT表中的偏移量
表1 FAT32短文件名目錄項參數表
由此表知,0x0005為其簇號,查看FAT表,其內容為“06 00 00 00”
5) 查找FAT表中該文件的相應紀錄項,抓圖
6) 記錄文件的所有簇號。
文件大小為34KB,一個簇8個扇區,合計4KB,所以需要9個簇,如下所示,最后的為0x0FFFFFFF,為文件最后一個簇
記錄文件的所有簇號
2. 長文件名的處理
1) 新建一個文本文件,文件名稱超過8個字符。
建立文件"cptbtptpbcptdtptp.txt",內容為Hello pt!
2) 在WINHEX中,查找該文件的各種目錄項(短文件目錄項和長文件目錄項)。抓圖
了解到:
當創建一個長文件名文件時,系統會自動加上對應的短文件名,其原則如下:
(1)、取長文件名的前6個字符加上"~1"形成短文件名,擴展名不變。
(2)、如果已存在這個文件名,則符號"~"后的數字遞增,直到5。
那么系統是如何判斷當前目錄項是短文件名目錄項呢還是長文件名目錄項,這里關鍵是看目錄項的第12個字節的值,如果為0x0F時則系統認為是長目錄項。
故對應的短文件名為cptbtp~1
3) 在圖形中間標出相應的短文件目錄項,和長文件目錄項。
長目錄項:
表2 FAT32長文件名目錄項參數表
參考上表,
第一部分
第1目錄項unicode為tptp
第2目錄項unicode為cptbtptpbcptd
由於逆序,合起來就是我們的文件名
短目錄項:長文件名目錄項后面還會跟一個短文件名目錄項,這個目錄項記錄了除文件名以外的這個文件的信息,而文件名部分則用上面提到的短文件名目錄項替換。
4) 分析數據:比較長目錄項和短文件名目錄項的差別
3. 子目錄的管理
1) 新建一個文件夾,更名成“qwer”
2) 在WINHEX中間查找該子目錄的目錄項。抓圖
3) 計算該目錄項中起始簇在fat表中的紀錄項偏移量,使用WINHEX跳到相應的位置。抓圖
由上圖,記錄項偏移量為0010,為16號簇,FAT對應值為0x0FFFFFFF
4) 分析數據:比較文件和子目錄的目錄項的區別和相同的地方。
4. 文件和目錄的刪除
1) 新建一個文本文件。
2) 使用兩種方法刪除文件:delete和shift+delete,對比兩種方法的區別。
delete只是普通刪除文件,可以從回收站之中找回來,而shift+delete是徹底刪除文件,不經過回收站,類似於linux的rm指令
3) 徹底刪除第1部分和第2部分中的文件,然后查找相應的文件目錄和FAT表中的表項,抓圖對比刪除前后的區別。
可以看到文件目錄已經不存在了.
原來的5號簇也全部變成0,表示未占用
4) 徹底刪除第3部分中新建的文件夾,然后查找該目錄的目錄項和FAT表項。抓圖,對比刪除前后的區別。
文件夾的目錄表也被刪去
至於FAT表,原始簇號為16,現16簇為0000 0000,未被占用
參考
1.https://www.cnblogs.com/fantacity/p/3897933.html
2.https://www.cnblogs.com/fantacity/p/3900237.html
3.https://blog.csdn.net/yangyang031213/article/details/79030247
簇