FAT12

FAT12

FAT12是DOS時代就開始使用的文件系統(File System),直到2009年仍然在軟盤上使用。

主磁碟結構


• 引導扇區(Boot Sector)
• 位於第一個扇區,在軟盤上就是0柱面(磁軌)0磁頭1扇區。
• 文件分配表(FAT
• 緊接著引導扇區的是兩個完全相同的FAT表,每個FAT表佔用9個扇區
• 根目錄區
• FAT表之後是根目錄區,根目錄區長度不固定
• 數據區
• 根目錄後面就是數據區

引導扇區格式


格式如下:
名稱偏移長度內容軟盤參考值
BS_jmpBoot3
jmp LABEL_START
nop
BS_OEMName38廠商名'ForrestY'
BPB_BytsPerSec112每扇區位元組數0x200(即十進位512)
BPB_SecPerClus131每簇扇區數0x01
BPB_RsvdSecCnt142Boot記錄佔用多少扇區0x01
BPB_NumFATs161共有多少FAT表0x02
BPB_RootEntCnt172根目錄文件數最大值0xE0 (224)
BPB_TotSec16192扇區總數0xB40(2880)
BPB_Media211介質描述符0xF0
BPB_FATSz16222每FAT扇區數0x09
BPB_SecPerTrk242每磁軌扇區數0x12
BPB_NumHeads262磁頭數0x02
BPB_HiddSec284隱藏扇區數
BPB_TotSec32324如果BPB_TotSec16是0,由這個值記錄扇區數0xB40(2880)
BS_DrvNum361中斷13的驅動器號
BS_Reserved1371未使用
BS_BootSig381擴展引導標記0x29
BS_VolD394卷序列號
BS_VolLab4311卷標'OrangeS0.02'
BS_FileSysType548文件系統類型'FAT12'
引導代碼62448引導代碼、數據及其他填充字元等
結束標誌51020xAA55

文件分配表


它包含有兩份文件分配表,這是出於系統冗餘考慮,儘管它很少使用,即使是磁碟修復工具也很少使用它。它是分區信息的映射表,指示簇是如何存儲的。
每個FAT項佔12bit,這也所被成為FAT12的原因,FAT項的值代表的是文件下一個簇號,但如果值大於等於0xFF8,則表示當前簇已經是本文件的最後一個簇。如果值是0xFF7,表示它是一個壞簇。
一個FAT項可能跨越兩個扇區,編碼實現的過程要考慮在內。

根目錄區


根目錄區位於第二個FAT表之後,開始扇區號為19,它由若干個目錄條目(Directory Entry)組成,條目最多有BPB_RootEntCnt個。每個條目佔用32個位元組,它的格式如下:
名稱偏移長度描述
DIR_Name0xB文件名8位元組,擴展名3位元組
DIR_Attr0xB1文件屬性
保留0xC10
DIR_WrtTime0x162最後修改時間
DIR_WrtDate0x182最後修改日期
DIR_FstClus0x1A2此條目對應的開始簇號
DIR_FileSize0x1C4文件大小

數據區


數據區在根目錄區后,數據區開始扇區號為根目錄區起始扇區號+根目錄區大小,即19+BPB_RootEntCnt * 32 / BPB_BytsPerSec。