一,fat32的保留區
1,引導扇區 :引導扇區是fat32檔案系統的第乙個扇區,也稱為dbr扇區。它包含這樣一些檔案系統的基本資訊:
每扇區位元組數 每簇扇區數 保留扇區數 fat表個數 檔案系統大小(扇區數) 每個fat表大小(扇區數) 根目錄起始簇號 其他一些附加資訊
邊看說明,邊看不太方便,我就按照說明內容,把說明直接標註在上了。
我的sd卡是手機裡的tf卡+sd卡套。之前沒有問題。當我第一次格式化後,就發現不正常了。雖然訪問檔案都沒問題。但是放在我的開發板上測試sd的時候,資料顯示不正確。
現在我初步發現問題在這裡
0x1c~0x1f:4個位元組,分割槽前已使用扇區數,137(0x00 00 00 89)。(這個資料要尤其的重視,檔案系統初始化的第一步要找的就是這玩意兒。因為我們的sd卡沒有分割槽,預設就是乙個分割槽,這個資料就是相對於mbr(關於mbr的介紹請讀者參看8.4小節的doc 分割槽)的位址偏移量,mbr的扇區位址才是整個sd卡的物理扇區號為0的那個位址,也就是說檔案系統並不是處在整個sd卡最開始的地方,它處在mbr所處的保留區之後,於是我們可以對使用fat32檔案系統的sd卡整體布局給出如下圖示)
但是我0x1c到0x1f的4個位元組為0.不知道是不是問題。
2,引導**
fat32檔案系統引導扇區的512位元組中,90~509位元組為引導**,而fat12/16則是62~509位元組為引導**。同時,fat32還可以利用引導扇區後的山區空間存放附加的引導**。
乙個fat卷即使不是可引導檔案檔案系統,也會存在引導**。
3,fsinfo資訊扇區
fsinfo資訊扇區結構
省略二,fat32的fat表
1 fat表概述
位於保留區後的是fat區,有兩個完全相同的fat(file allocation table, 檔案分配表)表組成,fat檔案系統的名字也是因此而來。
重要說明:
2. 通常情況下,乙個fat把檔案系統會有兩個fat表,但有時也允許只有乙個fat表,fat表的具體個數記錄在引導扇區的偏移0x10位元組處。
3. 由於fat區緊跟在檔案系統保留區後,所以fat1在檔案系統中的位置可以通過引導記錄中偏移0x0e~0x0f位元組處的「保留扇區數」得到。
4. fat2緊跟在fat1之後,它的位置可以通過fat1的位置加上fat表的大小扇區數計算出來。
2 fat表的特性
fat表由一系列大小相等的fat表項組成,總的說來fat表有如下特性:
1. fat32中每個簇的簇位址,是有32bit(4個位元組)記錄在fat表中。fat表中的所有位元組位置以4位元組為單位進行劃分,並對所有劃分後的位置由0進行位址編號。0號位址與1號位址被系統保留並儲存特殊標誌內容。從2號位址開始,每個位址對應於資料區的簇號,fat表中的位址編號與資料區中的簇號相同。我們稱fat表中的這些位址為fat表項,fat表項中記錄的值稱為fat表項值。
2. 當檔案系統被建立,也就是進行格式化操作時,分配給fat區域的空間將會被清空,在fat1與fat2的0號表項與1號表項寫入特定值。由於建立檔案系統的同時也會建立根目錄,也就是為根目錄分配了乙個簇空間,通常為2號簇,所以2號簇所對應的2號fat表項也會被寫入乙個結束標記。如下圖所示:
3. 如果某個簇未被分配使用,它所對應的fat表項內的fat表項值即用0進行填充,表示該fat表項所對應的簇未被分配。
4. 當某個簇已被分配使用時,則它對應的fat表項內的fat表項值也就是該檔案的下乙個儲存位置的簇號。如果該檔案結束於該簇,則在它的fat表項中記錄的是乙個檔案結束標記,對於fat32而言,代表檔案結束的fat表項值為0x0fffffff。
5. 如果某個簇存在壞扇區,則整個簇會用fat表項值0xffffff7標記為壞簇,不再使用,這個壞簇標記就記錄在它所對應的fat表項中。
6. 由於簇號起始於2號,所以fat表項的0號表項與1號表項不與任何簇對應。fat32的0號表項值總是「f8ffff0f」。如上圖所示。
7. 1號表項可能被用於記錄髒標誌,以說明檔案系統沒有被正常解除安裝或者磁碟表面存在錯誤。不過這個值並不重要。正常情況下1號表項的值為「ffffffff」或「ffffff0f」。
8. 在檔案系統中新建檔案時,如果新建的檔案只占用乙個簇,為其分配的簇對應的fat表項將會寫入結束標記。如果新建的檔案不只占用乙個簇,則在其所占用的每個簇對應的fat表項中寫入為其分配的下一簇的簇號,在最後乙個簇對應的fat表象中寫入結束標記。
9. 新建目錄時,只為其分配乙個簇的空間,對應的fat表項中寫入結束標記。當目錄增大超出乙個簇的大小時,將會在空閒空間中繼續為其分配乙個簇,並在fat表中為其建立fat錶鏈以描述它所占用的簇情況。
10. 對檔案或目錄進行操作時,他們所對應的fat表項將會被清空,設定為0以表示其所對應的簇處於未分配狀態。
要找乙個簇的fat表項,只要用它的簇號乘以每個fat表項的位元組數即可。winhex提供了直接跳轉到某個指定fat表項的功能,單擊position|go to fat entry,即可彈出轉到fat項對話方塊,在對話方塊輸入目標fat項號碼後單擊ok,游標即會在該fat項的第乙個位元組上閃爍。
看到這裡,我明白了簇位址就是乙個大檔案,被拆分成小塊後的乙個個個像鍊錶一樣的位址。儲存在fat表中。
今天主要看了保留區和fat表區。明天繼續看資料區。
FAT32檔案系統
windows95 osr2和windows 98開始支援fat32檔案系統,它是對早期dos的fat16檔案系統的增強,由於檔案系統的核心 檔案分配表fat由16位擴充為32位,所以稱為fat32檔案系統。在一邏輯盤 硬碟的一分割槽 超過 512 兆位元組時使用這種格式,會更高效地儲存資料,減少硬...
解析Fat32檔案系統
1.第一分區的起始扇區 2.第乙個檔案檔案配置表 fat 的位置 3.資料區域的位置 4.檔案 file1.txt 所在的簇 1 首先,用hxd開啟所要解析的fat32的檔案 2 選擇所要分析的檔案,開啟後,在起始的sector0,也就是0扇區我們就會看到該系統的主引導,在結束標誌的55aa之前的6...
NTFS與FAT32檔案系統
磁碟 包括行動硬碟 u盤 軟盤等 在格式化時都必須指定檔案系統,目前常用的檔案系統有ntfs和fat32。一 ntfs 1 概述 ntfs,即nt檔案系統。是微軟在windows nt作業系統上使用的一種檔案系統。ntfs不斷在改進,現在主流的版本是v3.1,來自windows xp。由於windo...