Wednesday, March 19, 2008

科技:淺談FAT

FAT,全名是File Allocation Table,也就是檔案配置表。提到FAT,免不了扯到DOS,Disc Operating System,是的,早期的IBM PC用的是微軟的作業系統,DOS,就是用來管理磁碟的。事過境遷,3 1/2"的Floppy disc在許多準系統上已經被淘汰掉,硬碟目前也多不再使用FAT來管理檔案,不過,在隨身碟或記憶卡依然可見到FAT的身影。FAT,概念上很簡單,只要有人講過一次就會明瞭,並沒有什麼神奇的地方。

磁碟物理上以磁柱Cylinder、磁軌Track、磁區Sector的方式組成,但是MS_DOS是以LBA,Logical Block Address,也就是0, 1, 2 ...等連續號碼來指定Sector。第0 Track所有的Sector讀完後會繼續讀下一面第0 Track的Sector,如此可以減少讀寫頭的移動。

一般一個Sector為512Bytes,幾個Sector合為一個Cluster,檔案存取以Cluster為一單位。雖然會浪費掉一些空間,但是對大量資料的配置比較有利,此外Cluster由連續磁區組成,資料不易散置各處,也可減少讀寫頭的移動。或許你會認為把磁區的容量加大就可解決問題,但是磁區大小是磁片規劃的基本,以Cluster方式可保有彈性與相容性。

磁片的基本單元,如BOOT磁區、FAT、根目錄等是以磁區為單位配置,這幾個磁區後面存放檔案或子目錄(也視為檔案),以Cluster配置。

1. BOOT磁區與BPB(BIOS Parameter Block)
磁片第0軌一開始是BOOT磁區,放置BOOT程式開機時由ROM BIOS讀入MS_DOS其他部分,BOOT程式前的BPB放置的資訊包含每一磁區的Byte數、每一Cluster的磁區數、FAT之前的磁區數、FAT之個數、根目錄的容量、邏輯磁區的總數與FAT所佔的磁區數等等。

2. FAT
FAT為磁片的Cluster配置表表格上劃分為欄,FAT16每欄佔16位元,FAT32每欄佔32位元。一個FAT的欄對應到一個Cluster,若此欄的值為0表示未使用,否則是使用中。FAT欄的真正用途是:用來指出下一個Cluster之所在。譬如第004號FAT欄的值是005,則表示資料放在第004個Cluster,而後續的部分放在第005個Cluster,如果第005號FAT欄的值是FFFFH(@FAT16),則表示結束,否則繼續搜尋下去。由於FAT保留前兩欄,因此Cluster的配置由No.2開始。

3. 目錄與FDB(File Description Block)
FDB存放有檔名、日期、檔案長度等,每個FDB是32位元,其中的指位器一欄則指向第一個存放檔案的Cluster。



瞭解了FAT的原理,則可以配置Cluster給檔案使用,至於刪除檔案,只要把檔名第一個字元改成@(E5H),檔案就看不見了,要救回也方便。另外快速格式化則清理根目錄與清空FAT即可。

延伸閱讀:
FAT: General Overview of On-Disk Format

參考資料:
IBM PC MS_DOS 技術手冊(二)徹底研究篇 / 施威銘 / 波前

No comments: