fat16 文件系统的结构
1.引言
FAT文件系統在Windows比較常見,相對于ext系統而言,也比較簡單。是學習文件系統的切入點。
2.FAT16的基本結構
? ? 首先先了解下FAT16文件系統的基本結構依次為:DBR扇區、FAT表1、FAT表2、根目錄和數據區。
? ? DBR扇區:DBR是操作系統可以直接訪問的第一個扇區,包括一個引導程序和一個稱為BPB的本分區參數記錄表。引導程序的主要任務是當MBR將系統控制權交給它時,判斷本分區跟目錄前兩個文件是不是操作系統的引導文件。如果確定是,就將其讀入內存,并把控制權交給該文件。BPB參數塊記錄著本分區的啟始扇區、結束扇區、文件存儲格式、硬盤介質描述符、根目錄大小、FAT個數、分配單元的大小等重要參數。
? ? FAT1,FAT2:是簇的鏈表。在根據目錄項獲取文件的首簇號后,在FAT 找到對應的簇,可以找到下一個簇,一直到文件結束。對于FAT16,每個簇用16Bit來表示,而對于FAT32,使用32Bit來表示。這應該是兩者之間的重要區別。
? ? 根目錄:根目錄的作用就是有文件或者目錄的首簇號,以及文件的長度(目錄的長度是0)。FAT16中,根目錄的所占空間可以根據BPB中的參數——Maximum Root Directory Entries(0x11,2bytes)。
? ? 數據區:文件等數據待的地方。緊跟著根目錄。從2號簇開始。
3.查找文件的過程
? ? 根據DBR中的一些參數得到FAT和根目錄的位置。根據根目錄得到次級目錄的簇號(對于更多級的目錄依此類推),來到該簇后,再根據文件名得到查到對應的文件的首簇和文件長度。根據文件長度得到文件所占的簇的數量。由首簇號到FAT查看文件的簇鏈表,依次得到文件的各個簇,從而也就得到了文件的全部內容。
4.查找文件示例
? ? 選取安卓手機中modem 分區作為對象。modem 在機臺里的掛載點是firmware,可以adb ?shell 進去系統之后,cd firmware看看里面的內容。里面有兩個文件夾:image和verinfo。而我的目的就是要讀到verinfo文件夾里面的文件ver_info.txt。將modem dd出來,然后使用winhex查看二進制文件。
4.1 DBR
? ? 先看通過winhex查看的結果。這個扇區里面基本上能得到大部分的文件系統的參數。(特別注意,存儲是按照小端模式)
下面的表,解釋了一些主要參數的意義。
4.2 FAT
? ? 根據上面的參數,我們可以算出FAT1的偏移地址以及根目錄的偏移值。
FAT1偏移地址:保留扇區(FAT1之前的扇區,包括引導扇區)之后就是FAT1。因此可以得到,FAT1的偏移地址就是1個扇區的位置,也就是512。
FAT2偏移地址:FA1偏移地址+FAT1的大小,512+21*512 = 11264
2字節表示一個簇的狀態。具體意義如下表所示:
每個簇對應的0x0002-0xFFEF之間的值,表示要讀取文件那么下一個簇的簇號。
4.3 根目錄
? ? 根目錄偏移地址: FAT2偏移地址+ FAT2的大小,11264+21*512= 22016
下面看一下根目錄的前面部分:
看到這里,就可以看到前面提到的兩個文件夾了。在根目錄中,一個文件或者一個目錄用32字節來表示。
? ? 因此,可以得到,verinfo目錄的首簇號是 9F 12 也就是 0x129F = 4767號簇。
根目錄的偏移地址是22016,根目錄占32個扇區,所以,2號簇的位置是:22016+32*512=38400 。可以得到verinfo的偏移地址是38400 +(4767-2)*512*32 = 78108160
看看這個位置的二進制:
? ? 顯然,接下來可以看到這個目錄下面,會有ver_info.txt的文件的首簇號和文件的長度。首簇號是 A0 12 也就是0x12A0=4768。文件長度是1F 也就是31<<512*32,因此只占一個簇,不需要回去查看FAT來找到剩下的簇。
根據簇號,又可以得到這個文件所在位置:(4768-2)*512*32+38400 = 78124544
看看這個位置的二進制:
? ? 到這里,也就看到了我們要查看的文件的內容。事實上,這和用mount掛載出來看到的結果是一樣的,撒花~~
看這個還是花了很多時間的。FAT16和FAT32也有所區別,但是實際上大同小異。下篇寫ext2文件系統的結構。
參考文章:http://www.xuebuyuan.com/598485.html
http://blog.csdn.net/menghnhhuan/article/details/4270168??
非常感謝!
總結
以上是生活随笔為你收集整理的fat16 文件系统的结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pc端调试使用微信环境
- 下一篇: java信息管理系统总结_java实现科