FAT16
用來記錄文件所在位置的表格
FAT(File Allocation Table)是“文件分配表”的意思。顧名思義,就是用來記錄文件所在位置的表格,它對於硬碟的使用是非常重要的,假若丟失文件分配表,那麼硬碟上的數據就會因無法定位而不能使用了。不同的操作系統所使用的文件系統不盡相同,在個人計算機上常用的操作系統中,MS-DOS 6.x及以下版本使用FAT16。操作系統根據表現整個磁碟空間所需要的簇數量來確定使用多大的FAT。所謂簇就是磁碟空間的配置單位,就象圖書館內一格一格的書架一樣。FAT16使用了16位的空間來表示每個扇區(Sector)配置文件的情形,故稱之為FAT16。
FAT16由於受到先天的限制,因此每超過一定容量的分區之後,它所使用的簇(Cluster)大小就必須擴增,以適應更大的磁碟空間。所謂簇就是磁碟空間的配置單位,就象圖書館內一格一格的書架一樣。每個要存到磁碟的文件都必須配置足夠數量的簇,才能存放到磁碟中。FAT16各分區與簇大小的關係如下表:
分區大小 FAT16簇大小
16MB-127MB 2KB
128MB-255MB 4KB
256MB-511MB 8KB
512MB-1023MB16KB
1024MB-2047MB 32KB
如果你在一個1000MB的分區中存放50KB的文件,由於該分區簇的大小為16KB,因此它要用到4個簇才行。而如果是一個1KB的文件,它也必須使用一個簇來存放。那麼每個簇中剩下的空間可否拿來使用呢?答案是不行的,所以在使用磁碟時,無形中都會或多或少損失一些磁碟空間。
由上可知,FAT16文件系統有兩個最大的缺點:
(1)磁碟分區最大隻能到2GB。當前只要你添購計算機的話,想必其中的硬碟大小必定至少有2GB,而現在300GB,700GB以上的硬碟比比皆是,且物美價廉。FAT16文件系統已不能適應當前這種大容量的硬碟,必須被迫分區成幾個磁碟空間。而分區磁碟的大小又牽扯出簇的問題來,可謂影響頗大。
(2)使用簇的大小不恰當。試想,如果一個只有1KB大小的文件放置在一個1000MB的磁碟分區中,它所佔的空間並不是1KB,而是16KB,足足浪費了15KB!當前流行的HTML文件,其大小几乎多為1KB、2KB,而製作一個網站往往用到數十個HTML文件。如果你的硬碟中有100個這種小文件的話,你浪費的磁碟空間可從700KB(511MB的分區),到3.1MB(2047MB的分區)。
以上這兩個問題常常使得用戶在“分多大的分區,才能節省空間,同時又可使硬碟的使用更加方便有效”的抉擇中徘徊不定。
在Dos2.0的使用過程中,對更大的磁碟的管理能力的需求已經出現了,所以在Dos3.0中,微軟推出了新的文件系統Fat16。除了採用了16位字長的分區表之外,Fat16和Fat12在其他地方都非常的相似。實際上,隨著字長增加4位,可以使用的簇的總數增加到了65536。在總的簇數在4096之下的時候,應用的還是Fat12的分區表,當實際需要超過4096簇的時候,應用的是Fat16的分區表。剛推出的Fat16文件系統管理磁碟的能力實際上是32M。這在當時是看來是足夠大的。1987年,硬碟的發展推動了文件系統的發展,Dos4.0之後的Fat16可以管理128M的磁碟。然後這個數字不斷的發展,一直到2G。在整整的10年中,2G的磁碟管理能力都是大大的多於了實際的需要。需要指出的是,在windows95系統中,採用了一種比較獨特的技術,叫做VFat來解決長文件名等問題。FAT16分區格式存在嚴重的缺點:大容量磁碟利用效率低。在微軟的DOS和Windows系列中,磁碟文件的分配以簇為單位,一個簇只分配給一個文件使用,不管這個文件佔用整個簇容量的多少。這樣,即使一個很小的文件也要佔用一個簇,剩餘的簇空間便全部閑置,造成磁碟空間的浪費。由於分區表容量的限制,FAT16分區創建的越大,磁碟上每個簇的容量也越大,從而造成的浪費也越大。
磁碟上最小可定址存儲單元稱為扇區,通常每個扇區為512個位元組(或字元)。由於多數文件比扇區大得多,因此如果對一個文件分配最小的存儲空間,將使存儲器能存儲更多數據,這個最小存儲空間即稱為簇。根據存儲設備(磁碟、閃卡和硬碟)的容量,簇的大小可以不同以使存儲空間得到最有效的應用。在早期的360KB磁碟上,簇大小為2個扇區(1,024位元組);第一批的10MB硬碟的簇大小增加到8個扇區(4,096位元組);小型快閃記憶體設備上的典型簇大小是8KB或16KB。2GB以上的硬碟驅動器有32KB的簇。表2列出在給定簇大小和FAT類型的最大分區。
為什麼採用簇呢?通常,存儲設備上的空間分配是隨機的。在一個新存儲設備上,文件連續存儲,並知道開始和結束扇區和長度,在讀取時可以根據這些信息重新得到所存儲的文件。但是,過一段時間后,有些文件將會被擦掉,同時可能有些文件增大,這時不能保證同一個文件存儲在連續的一系列扇區里。因此,需要一種方法來辨別哪個扇區被分配到某些文件,以及還有哪些扇區可用。這時可以採用一種表結構來實現這種功能,使每個扇區對應一個表記錄。然而,由於大多數文件存儲在多個扇區,一個記錄對應一個扇區的作法將造成一些浪費。因此,採用每個記錄代表一個固定數量扇區將更有意義,這個固定扇區被稱為簇。
如果給一個文件(簇)分配的最小存儲空間大小取決於保存該文件的介質類型,我們必須有一種方法來標明某個簇是否可用或者已分配給一個文件。如果已將一個簇分配給一個文件,我們必須知道這個簇分配給文件的哪部分了,這就是通過一個鏈接列表來實現,即文件分配表(FAT)。FAT僅僅是一個包含N個整數的列表,N是存儲設備上最大的簇數。表中每個記錄的位數稱為FAT大小,是12、16或32三個數之一。早期的存儲設備使用12位(1.5位元組)FAT以減少浪費,12位可以提供4,096個簇。假定一個簇具有兩個扇區(1,024位元組),則代表存儲設備將近有4.2MB存儲容量。更大的簇就能實現更大的存儲空間,但是在存儲較小文件時,由於簇沒有完全裝滿而將造成存儲空間的浪費。
操作系統根據表現整個磁碟空間所需要的簇數量來確定使用多大的FAT。如果磁碟要求的簇少於4,096個,則可以使用12位FAT;如果小於65,536但大於4,096個簇,就使用16位FAT;否則,必須採用32位FAT。在存儲設備的第一個扇區內以數據列表的形式定義了簇的大小,該數據列表被稱為BIOS參數塊。在系統引導期間操作系統可以讀該扇區,這樣就能設定如何從存儲設備中讀取文件。
FAT是一種鏈接列表,鏈接列表中相關記錄之間互相指向對方。在存儲設備目錄中包含了FAT表名稱、該文件大小和分配給該文件的第一個簇的編號。存儲該文件的第一個簇所對應的表記錄中包含了該文件的第二個簇號碼。同樣,第二個簇對應的記錄里包含有存儲該文件的第三個簇編號,以此類推直到該文件的最後一個簇。在新存儲設備上存儲的第一個文件將保存在連續的簇內,因此第一個簇會指向第二個,第二個指向第三個,如此類推。
實際上,第一個簇(簇0)總是保留用於存儲操作系統信息、根目錄和兩份FAT。系統建立兩份FAT,其目的是在當修改其中一個時如果系統發生中斷(崩潰),另一份還完整無缺,恢復程序會檢查FAT並使用這份FAT來恢復。
FAT16
一個存儲設備可以分成多個區(其中每個區看起來像單獨的存儲設備),每個區有自己的目錄和FAT。大多數工程師在自己的PC硬碟上已經體驗過多分區,通常僅有一個硬碟的計算機具有“C:”和“D:”盤。
多數攜帶型設備如數碼相機和MP3播放器都沒有設計成採用存儲器分區,而PDA是真正的計算機,其文件系統程序是按分區來設計的。以數碼相機市場為例,存儲器必須只有單個分區才能兼容。對用戶來說,每個區有自己的邏輯驅動器字母,通常指定為驅動器“C:”、 “D:”和“E:”等。
在一個兼容FAT32的主機里可以無縫使用FAT16存儲設備,因為支持FAT32的操作系統也支持FAT16。唯一需要注意的是在對FAT16設備重新格式化的時候,有些兼容FAT32的主機(如一些PDA)在沒有特別選擇下會默認為FAT32格式。第一次對存儲設備格式化時,必須認真觀察提示以保證用的是FAT16格式,除非你的相機/PDA/MP3播放器支持FAT32。
在一個只兼容FAT16的主機里使用FAT32設備會有幾個可能結果,最普遍的是在顯示屏上顯示的“CF錯誤”指示。如果4GB的存儲器在只兼容FAT16的主機里格式化,將可能不出現錯誤提示,但顯示的容量將為2G。通常,不同的程序設計工程師會採用不同的方法來處理這個問題,對於這個特例,其結果不是總可預測的。如果4GB設備是用FAT16來格式化,就能在兼容FAT32的主機里對這個設備重新格式化,只要在格式化期間規定了FAT32。這樣,用戶可以在兼容FAT32的主機里恢復整個4GB容量。
Microsoft MS-DOS 4.0 版及更新版本允許 FDISK 給硬碟劃分最大為 4 千兆位元組 (GB) 的分區。然而,MS-DOS 文件分配表 (FAT) 文件系統僅支持每分區為 2 GB 大小。基於這一事實,大小在 2 到 4 GB 的硬碟必須劃分為多個分區,而且每一個分區都不能超過 2 GB。
注意:Windows 95 OEM Service Release 版本 2 和更新版本支持大小超過 2 GB 的使用 FAT32 文件系統的驅動器。有關 FAT32 文件系統的更多信息,請參見下面的 Microsoft 知識庫文章:
文章 ID:154997
標題:FAT32 文件系統說明
FAT 文件系統支持的最大簇數目和簇的最大大小決定了 2-GB 這一分區限制。FAT 文件系統限於 65,525 個簇。簇大小必須為 2 的次方而且小於 65,536 位元組,結果是最大簇大小為 32,768 位元組(32K)。將最大簇數(65,525)乘以最大簇大小(32,768)等於 2 GB。
注意:為用 FDISK 對硬碟進行分區,硬碟驅動器必須受計算機 ROM BIOS API 的支持,後者有 1024 柱面這一限制。
因為每個簇 32K 會浪費寶貴的硬碟空間,所以 FAT 文件系統並非總是最好的硬碟管理方案。Microsoft Windows NT 使用 NT 文件系統 (NTFS),它使用另一不同的文件/簇方案。Microsoft OS/2 版本 1.3 支持 HPFS,後者也使用了一種更保守的分配磁碟資源的方式。
注意:Microsoft Windows NT 也支持 FAT 驅動器。Windows NT 3.51支持最大 4 GB 大小的 FAT 驅動器。MS-DOS 或 Windows 不支持 2 GB 至 4 GB 大小的 FAT 驅動器。換句話說,如果希望從 MS-DOS 或 Windows 95/98 以及 Windows NT 都能訪問 FAT 驅動器,那麼 FAT 驅動器不能夠大於 2 GB。如果只從 Windows NT 上訪問 FAT 驅動器,則驅動器大小可以在 2 GB 到 4 GB 之間。
由於相機和MP3播放器在處理多分區上有困難,FAT32是提供它們超過2GB存儲容量的唯一途徑。所以,有些公司推出新的4GB微驅動器在出廠前將採用FAT32格式化。為實現與更多設備的兼容,2GB的微驅動器將繼續使用FAT16,其他容量超過2GB的CF設備必須採用FAT32。有幾家公司已經在其相機和MP3播放器中支持FAT32,多數有CF插槽的PDA都支持FAT32。如果你計劃要購買一台新的數碼相機或MP3播放器,最好能驗證它是否支持FAT32,以便將來與最新的CF存儲設備兼容。FAT32文件系統佔大多數,還有更新的NTFS。