參考文件
FAT32文件系統有幾個基本的幾個概念:
先拿一個真實的4G SD卡分析數據:
使用winhex物理方式查看,截一部分圖:
全稱Master Boot Record,即主引導記錄。
主引導記錄分為兩個部分,一個部分是前446位元組,另外一個部分是後64位元組。
前446個位元組,一般取值為0,不過有的時候也會有其他的設置值。
這部分也叫DPT,全稱Disk Partition Table,即磁碟分區表。
磁碟分區表有4個區,每個區有16位元組,總體是64位元組。因此,MBR位元組數為512位元組,剛好是一個扇區的數量。
DPT的4個部分,每一個部分的16位元組含義如下表:
00 82 03 00 0B E6 DC CA 00 20 00 00 00 E0 ED 00(16進制)
這里,就貼出來上面截圖的數據內容。(我們使用的是小位元組序)
0x00 :
通常的取值。
0x82 :
開始磁頭。
0x03 0x00 :
實際為0x0003,按照2進制編碼為0000 0000 0000 0011。
那麼開始扇區為:0。
開始柱面為:3。
0x0B :
分區類型,為Win95 FAT32類型。
0xE6 :
結束磁頭為230。
0xDC 0xCA:
實際為0xCADC,按照2進制編碼為1101 1100 1100 1010。
那麼結束扇區為:55。
結束柱面為:220。
0x00 0x20 0x00 0x00 :
實際為:0x00002000,也就是8192,為分區的開始扇區地址。那麼我們後面就可以從這里去找DBR。
0x00 0xE0 0xED 0x00 :
實際為:0x00EDE000,也就是15589376,為分區的總扇區數。
從這里其實可以算出SD卡的容量。
也就是:
分區大小:15589376x512 = 7981760512。這個值大約是7.612G。
從物理0地址到起始地址:8192*512 = 4194304
那麼總容量為:7981760512+4194304 = 7985954816。
該部分包括一個叫BPB的內容。
先截出DBR部分的實際SD卡上的內容:
在WinHex下使用邏輯磁碟打開FAT32文件系統的存儲介質來看,偏移位置與表示的含義有如下表所示:
25位元組的分區塊(BPB):
擴展分區BPB:
按照定義,將實際的圖 MBR.png分析如下:
從偏移為0x0BH地址開始:
00 02 10 96 04 02 00 00 00 00 F8 00 00 3F 00 FF 00 00 20 00 00 00 E0 ED 00 B5 1D 00 00
00 02 :
即0x0200,表示扇區位元組數,也就是512位元組。
10:
即0x10,每簇扇區數為16。也就是16 512=8 1024=8K。
96 04:
即0x0496,保留扇區數為1174。
02:
即0x02,FAT表份數為2。
00 00:
即0x0000,為保留。
00 00:
即0x0000,為保留。
F8:
即為本地硬碟。
00 00:
即0x0000,為保留。
3F 00:
即0x003F,即每磁軌扇區數為63。
FF 00:
即0x00FF,即磁頭數為255。
00 20 00 00:
即0x00002000,即隱藏扇區數為8192。
00 E0 ED 00:
即0x00EDE000,即磁碟總扇區數為15589376。
B5 1D 00 00 :
即0x001DB5,即FAT表佔用扇區數為7605。
好了,根據這些內容,可以計算出兩個參數:
FAT1的開始扇區 = 分區開始扇區+ 保留扇區=8192+1174 = 9366。
FAT2的開始扇區 = FAT1的開始扇區+FAT表佔用的大小 = 9366 + 7605 = 16971。
首目錄簇 = FAT1的開始扇區+FAT的表份數 x FAT表佔用的大小=9366+2*7605 = 24576。
繼續追蹤,找到首目錄簇中的已經新建的文件。
現在,先解析粘貼出來的每個部分的內容的含義。
具體內容下面的FAT中會說。
a.txt部分的解析:
41 20 20 20 20 20 20 20 54 58 54 20 18 8B 2A 90
96 4A A1 4A 00 00 0F 8C A1 4A 03 00 10 00 00 00
41 20 20 20 20 20 20 20:
表示文件名:「A TXT」
20 :
表示的是文件的屬性。歸檔。
18:
為系統保留。
8B:
創建時間的10ms位。也就是1390ms。
2A 90:
也就是0x902A,換成2進制為1001 0000 0010 1010 。表示的是創建時間。
細分如下:
則時間值為:
時:0x12 = 18,
分:0x1 = 1,
秒:0xAx 2s + 1390ms= 10x 2s + (1390ms) = 21s,
所以創建時間為18:01:21。
96 4A:
也就是0x4A96,換成2進制為0100 1010 1001 0110,表示的是創建日期。
細分如下:
則日期值為:
年:1980+0x25 = 2017,
月:0x4 = 4,
日:0x16= 22,
所以,創建日期為2017年4月22日。
A1 4A:
也就是0x4AA1,換成2進制為0100 1010 1010 0001,表示的是最後訪問日期。
則日期為:
年:1980+0x25 = 2017,
月:0x5 = 5,
日:0x1= 1,
所以,最後訪問日期為2017年5月1日。
00 00:
起始簇高16位。
0F 8C:
也就是0x8C0F,換成2進制為1000 1100 0000 1111,表示的是最近修改時間。
時:0x11 = 17,
分:0x20 = 32,
秒:0xf x 2 = 30s,
所以最近修改時間為17:32:30。
A1 4A:
也就是0x4AA1,換成2進制為0100 1010 1010 0001,表示的是最近修改日期。
則日期為:
年:1980+0x25 = 2017,
月:0x5 = 5,
日:0x1= 1,
所以,最近修改日期為2017年5月1日。
03 00:
即0x0003,表示起始簇低16位,也就是說,起始簇高位與起始簇低位相或,得到0x00000003,起始簇為3。
10 00 00 00:
即0x00000010,表示文件數據長度,也就是16位元組。
分析完a.txt,b.txt也一樣分析即可。
從而可以得到的是,a.txt的內容位置在:(3-2)*16+24576 = 24592上。
後使用winhex進行驗證,確認是正確的。
文件分配表(FAT),是FAT文件系統中用於磁碟數據索引和定位而引進的一種鏈式結構。在FAT文件系統中,文件的存儲依照FAT表制定的簇鏈式數據結構來進行。同時,FAT文件系統將組織數據時使用的目錄也抽象為文件,以簡化對數據的管理。
如DBR所述,偏移0EH處存儲了保留扇區的個數,而保留扇區數指的就是當前分區內DBR到FAT表之間的所有扇區的個數(包括DBR但不包括FAT表)。據此,可以定位FAT表所在的起始偏移位置了。
如DBR所述,偏移24H處存儲了保留扇區的個數,知道FAT2是緊鄰FAT1的。那麼FAT2表的位置為:FAT1的起始偏移地址+FAT1的大小。
FAT表由一系列大小相等的FAT表項組成,它有如下特性:
在FAT32文件系統中,根目錄的位置不再硬性地固定,可以存儲在分區內可定址的任意簇內,不過通常根目錄是最早建立的(格式化就生成了)目錄表。所以,我們看到的情況基本上都是根目錄首簇緊鄰FAT2,占簇區順序上的第1個簇(即2號簇)。同時,FAT32文件系統將根目錄當做普通的數據文件來看,所有沒有了目錄項數的限制,在需要的時候可以分配空簇,存儲更多的目錄項。
對於短文件名格式的目錄項:
注意:*表示此欄位在段文件目錄項中,不可取值0FH。若取值為0FH,目錄段為長文件名目錄段。
0BH欄位取值如下:
FAT32的一個重要的特點是完全支持長文件名。長文件名依然是記錄在目錄項中的。為了低版本的OS或程序能正確讀取長文件名文件,系統自動為所有長文件名文件創建了一個對應的短文件名,使對應數據既可以用長文件名定址,也可以用短文件名定址。不支持長文件名的OS或程序會忽略它認為不合法的長文件名欄位,而支持長文件名的OS或程序則會以長文件名為顯式項來記錄和編輯,並隱藏起短文件名。
長文件名的實現有賴於目錄項第12位元組屬性位元組,當此位元組的值為0FH時,支持長文件名的系統會將其當做長文件名的依據,而只支持短文件名的系統會認為是異常而忽略掉。系統將長文件名以13個字元為單位進行切割,每一組占據一個目錄項。所以可能一個文件需要多個目錄項,這時長文件名的各個目錄項按倒序排列在目錄表中,以防與其他文件名混淆。
長文件名中的字元採用unicode形式編碼,每個字元占據2位元組的空間。其目錄項定義如:
❷ fat32的啟動扇區系統由哪三部分組成
簡單理解文件系統,就是文件的儲存方式。也可以理解為一個門牌系統,為儲存設備劃分門牌號,每個文件分配一個門牌,然後就能按照門牌找到文件。
今天主要介紹一下windows的三種文件系統。
FAT32
NTFS
exFAT
格式化硬碟的時候,Windows 系統會提供這三種文件系統讓你選。這時應該選哪一種呢?
1、FAT32
FAT(File Allocation Table,文件分配表)文件系統是windows操作系統所使用的一種文件系統,它的發展過程經歷了FAT12、FAT16、FAT32三個階段。FAT文件系統用「簇」作為數據單元。一個「簇」由一組連續的扇區組成,簇所含的扇區數必須是2的整數次冪。簇的最大值為64個扇區,即32KB。所有簇從2開始進行編號,每個簇都有一個自己的地址編號。用戶文件和目錄都存儲在簇中。
FAT文件系統的數據結構中有兩個重要的結構:文件分配表和目錄項:
文件分配表:文件和文件夾內容儲存在簇中,如果一個文件或文件夾需要多於一個簇的空間,則用FAT表來描述,如何找到另外的簇。FAT結構用於指出文件的下一個簇,同時也說明了簇的分配狀態。FAT12、FAT16、FAT32這三種文件系統之間的主要區別在與FAT項的大小不同。
目錄項:FAT文件系統的每一個文件和文件夾都被分配到一個目錄項,目錄項中記錄著文件名、大小、文件內容起始地址以及其他一些元數據。
FAT32 是最老的文件系統,所有操作系統都支持,兼容性最好。但是,它是為32位計算機設計的,文件不能超過 2 32 - 1 個位元組,也就是不能超過 4GB,分區不能超過 8TB。目前來看,這個文件系統有點過時了,只適合小文件,如果有大的視頻文件,就不能使用它。
特點:
FAT32文件系統用4個位元組(32位)空間來表示每個扇區配置文件的情形,所以叫FAT32。分區容量最低是512M,而上限的話不同的操作系統都不一樣,WinXP系統最大可以做到2TB的FAT32分區。
2、NTFS
NTFS 是 Windows 的默認文件系統,用來替換 FAT32。Windows 的系統盤只能使用這個系統,移動硬碟買來裝的也是它。與FAT32對比如下:
特點:
NTFS文件系統是windows NT核心和高級伺服器網路操作系統環境的文件系統。NTFS系統比FAT32的可靠性更高,可以支持更大的分區和更大的文件,此外還有不少FAT32沒有的功能,比如壓縮分區、文件索引、數據保護和恢復、加密訪問等。
3、exFAT
exFAT 可以看作是 FAT32 的64位升級版, ex 就是 extended 的縮寫(表示"擴展的 FAT32"),功能不如 NTFS,但是解決了文件和分區的大小問題,兩者最大都可以到 128PB。由於 Mac 和 linux 電腦可以讀寫這種系統,所以移動硬碟的文件系統可以改成它。 (全稱Extended File Allocation Table File System,擴展FAT,即擴展文件分配表)是Microsoft在 Windows Embeded 5.0 以上(包括 Windows CE 5.0 、6.0、 Windows Mobile5、6、6.1)中引入的一種適合於快閃記憶體的文件系統,為了解決 FAT32 等不支持4G及其更大的文件而推出。對於快閃記憶體, NTFS文件系統不適合使用,exFAT更為適用。
特點:
exFAT文件系統是微軟在windows embeded5.0以上引入的一種適合於快閃記憶體的文件系統,主要是為了解決FAT32不支持4G或更大文件的問題而推出的。
FAT32與exFAT可用4GB文件的區別
大多數U盤在格式化時默認FAT32,最大優點就是在一個不超過8GB的分區中,FAT32的每個簇容量都固定為4KB,與前代相比可以大大地減少磁碟的浪費,提高磁碟利用率。
雖然對於最大分區容量的支持上面,FAT32的2TB最大分區容量至今仍不過時,但FAT32無法傳輸並存放超過4GB容量的光碟ISO鏡像、高清視頻、各種圖形作品文件等等,這是最致命的弊端。而exFAT格式在蘋果本或者是Windows電腦上都可以格式化,並且在兩個系統之間可以互相無障礙使用。相比之下,exFAT格式就沒有4GB文件傳輸限制了。
其實FAT32與exFAT存在著一個升級關系,這兩種文件系統都支持OS X系統與Windows系統,如果你將U盤格式化成這兩種文件系統,在不同操作系統電腦上可以暢通無阻地使用。
NTFS相比FAT會讓快閃記憶體性能降低
NTFS是相當流行的,但多見於硬碟。XP、Vista、Win7默認都會將分區格式化為NTFS系統,可以說NTFS是目前最好的磁碟文件系統。
U盤在格式化為NTFS時,實際可用容量與其他文件系統形式也有所差別,雖然使用中感受並不是很大。另外,在格式化U盤時,容量在64G甚至更大規格時,系統識別自動格式化為exFAT與NTFS格式,會便於優盤在不同操作系統電腦上無障礙使用。
但是,NTFS也有他的缺點,NTFS分區採用「日誌式」,因為要記錄磁碟的詳細讀寫操作,對U盤這種快快閃記憶體儲介質會造成較大的負擔,比如同樣存取一個文件或目錄,在NTFS上的讀寫次數就會比FAT32更多,理論上NTFS格式的U盤比較容易損壞。並且由於U盤帶寬有限,NTFS頻繁讀寫占據通道會讓磁碟性能降低。
總結
FAT32與exFAT之間最大的差別在於能否支持4GB及以上容量單個文件的傳輸、查看與編輯;而FAT系列文件系統與NTFS之間最大的區分在於文件存取的方式,後者長期使用可能會讓快閃記憶體類存儲產品性能降低.
❸ FAT結構!
FAT 概述文件配置表(英文:File Allocation Table,首字母縮略字:FAT)又稱文檔分配表,是一種由微軟發明並擁有部分專利的文檔系統,供MS-DOS使用,也是所有非NT內核的微軟窗口使用的文件系統。FAT文檔系統考慮當時計算機性能有限,所以未被復雜化,因此幾乎所有個人計算機的操作系統都支持。 歷史FAT文件系統遵行已用了多年的軟體方法來進行規范。它在1977年由比爾·蓋茨和馬斯·麥當勞為了管理磁碟而發明,並在1980年被添·彼得遜的86-DOS操作系統採用。這也是86-DOS操作系統與CP/M操作系統最大的不同點,若非此項差異,86-DOS操作系統與CP/M操作系統幾乎可說完全相同。 FAT12 初期的FAT就是現在俗稱的FAT12。作為軟盤的文件系統,它有幾項限制:不支持分層性結構,叢集定址只有12位(這使得控制FAT有些棘手)而且只支持最多32M(216)的分區。 當時入門級的磁碟是5.25"、單面、40磁軌、每個磁軌8個扇區、容量略少於160KB。上面的限制超過了這個容量一個或幾個數量級,同時允許將所有的控制結構放在第一個磁軌,這樣在讀寫操作時移動磁頭。這些限制在隨後的幾年時間里被逐步增大。 由於唯一的根目錄也必須放在第一個磁軌,能夠存放的文件個數就限制在了幾十個。 目錄 為了很好地支持以帶有10MB硬碟為特色的IBM PC XT新計算機,在1983年年初MS-DOS 2.0幾乎與該計算機在同時發布,它引進了層次目錄結構。除了允許更好地組織文件外,目錄允許在硬碟上存儲更多的文件,這是因為最大文件個數不再受制於(仍然是固定的)根目錄大小。這個數目現在能夠等同於簇的數目(甚至更大,這是考慮到長度為0的文件並不佔據任何FAT簇)。 FAT本身的格式並沒有改變。PC XT的10MB的硬碟有4KB大小的簇。如果後來安裝了一個20MB的硬碟,並且使用MS-DOS 2.0格式化,最後的簇大小將變為8KB,硬碟容量將變為15.9MB。 FAT16的開始 在1984年,IBM發布PC AT,這是一個20 MB的硬碟。微軟公司也同步發布了MS-DOS 3.0。簇集地址增加至16位,允許更大數量的簇(最大 65,517),所以有更大的文件系統大小。但是,最大數量磁區及最大分割區(相當於磁碟)的大小仍是32 MB。所以,盡管技術上已經是「FAT16」,這種格式並不是我們今天常見到的這個名字所代表的格式。在MS-DOS 3.0格式化一個20 MB的硬碟,這硬碟將不能被MS-DOS 2.0或之前的版本所存取。當然,MS-DOS 3.0 仍然可存取MS-DOS 2.0的格式(8 KB簇的分割區)。 MS-DOS 3.0也開始支持高密度1.2MB 5.25"磁碟,最著名的是每個磁軌有15個扇區,這樣就允許FAT有更大的空間。這或許促進了一個對於簇大小的不確定的優化,簇大小從2個扇區減到1個。這樣做的最後結果是高密度磁碟比舊的雙密度磁碟的速度大幅度降低。 擴展分區和邏輯驅動器 除了改進FAT文件系統本身的結構之外,一個並行的提高FAT存儲空間的開發路線是支持多個磁碟分區。最初,由於主引導分區中文件分配表的固定結構的原因一個硬碟只能使用多達4個分區。然而,由於DOS設計要求只能有一個分區標識為「活動的」,它也是主引導代碼啟動所用的分區。使用DOS工具不可能創建幾個「主」DOS分區,並且第三方的工具也至少會警告這樣一個機制將與DOS不兼容。 為了用一種兼容的方式使用更多的分區,一種新的分區類型被開發出來(1986年]1月的MS-DOS 3.2),擴展分區它實際上是另外稱為邏輯分區的一個容器。最初它裡面只允許有一個邏輯分區、支持最大64MB的硬碟。在MS-DOS 3.3(1987年8月)這個限制更改到24個分區;它可能來自於強制性的C:-Z:的磁碟命名規則。邏輯分區表使用盤上的數據結構來描述,可能是為了簡化編碼它與主引導記錄非常相似,並且它們組織成類似於俄羅斯套娃那樣的結構。系統中只能有一個擴展分區。 在擴展分區引入之前,一些硬碟控制器(當時是獨立的板子,因為還沒有IDE標准)能夠將大硬碟顯示為兩個獨立的硬碟。作為一種選擇,如Ontrack[1]的磁碟管理員這樣的一些特殊軟體可以用於同樣目的。 最終的FAT16 1987年11月我們今天稱為FAT的格式最終到來,它在康柏 DOS 3.31中去掉了磁碟扇區的16位計數器。這個結果曾經一度被稱為DOS 3.31大文件系統。盡管看起來磁碟上的變動很小,這個DOS的磁碟代碼都必須檢查並轉換到32位的扇區數,由於它全部是16位的匯編語言這樣一個現實,這項工作就變得非常復雜。 1988年這項改進通過MS-DOS 4.0得到廣泛應用。現在分區大小受限於每個簇的8位有符號扇區計數,它最大能達到2的64次方,對於一個常用的有32KB個簇每扇區512位元組的硬碟來說,將FAT16分區大小的「明顯」限制擴充到2GB。在磁光碟媒體上,它能使用1或者2KB的扇區,這樣大小限制也就成比例地增大。 後來,視窗NT通過將每個簇的扇區數當作無符號數將最大的簇大小增加到64KB。然而這個格式與當時其它的任何FAT實現都不兼容並且產生了大量內部碎片。視窗98也支持這種格式的讀寫操作但是它的磁碟管理工具不支持這種格式。 長文件名(VFAT, LFN) Windows 95設計人員的一個用戶體驗目標就是除了傳統的8.3文件名以外在新操作系統中使用長文件名(LFN)。長文件名通過在目錄條目排列時使用一個工作區來實現(參見下面)。按照Windows 95VxD設備驅動程序的命名規則這個新擴充的文件系統通常稱為VFAT。 有意思的是,VFAT驅動在早於Windows 95的Windows for Groups 3.11中就已經出現,但它僅僅用於實現32位文件訪問,一個繞過DOS的視窗自帶高性能保護模式文件管理系統,它能夠直接使用BIOS或者更好的32位磁碟訪問,如視窗自帶的保護模式磁碟驅動程序。它是一個後門;微軟為Windows for Groups 3.11所作的廣告說32位文件訪問基於「芝加哥項目的32位文件系統」。 在Windows NT中,FAT文件系統對於長文件名的支持從3.5版就已經開始了。 FAT32 為了解決FAT16對於卷大小的限制同時讓DOS的真實模式在非必要情況下不減少可用常規內存狀況下處理這種格式,微軟公司決定實施新一代的FAT,它被稱為FAT32,帶有32位的簇數,目前用了其中的28位。 理論上,這將支持總數達268,435,438(<228)的簇,允許磁碟容量達到2位元組。然而,由於微軟公司scandisk工具的限制,FAT不能大於4,177,920(<222)個簇,這將卷的容量限制在了124.55GB,除非不再使用「scandisk」。[2] FAT32隨著視窗95 OSR2發布,盡管需要重新格式化才能使用這種格式並且DriverSpace 3(視窗95 OSR2和視窗98所帶版本)從來都不支持這種格式。視窗98提供了一個工具用來在不丟失數據的情況下將現有的硬碟從FAT16轉到FAT32格式。在NT產品線上對於它的支持從視窗2000開始。 視窗2000和視窗XP能夠讀寫任何大小的FAT32文件系統,但是這些平台上的格式化程序只能創建最大32GB的FAT32文件系統。Thompson and Thompson (2003)寫道「奇怪的是微軟公司說這種現象是故意設計的」[3] 微軟公司知識庫文章 184006[4]的確是這么說的,但是沒有提出任何關於這個限制的合理解釋。Peter Norton的觀點是「微軟公司在有意地削弱FAT32文件系統」[5]。 第三方支持 其它IBM PC的可選操作系統—如Linux、FreeBSD和BeOS—都支持FAT格式,並且大部分都在相應的視窗版本發布以後很快就支持VFAT和FAT32格式。早期的Linux發布版本還包括稱為UMSDOS的格式,它是保存在一個獨立的稱為--linux-.---的帶有Unix文件屬性(如長文件名和訪問許可)的FAT。UMSDOS在VFAT發布以後就不再使用從Linux內核2.5.7開始就禁止了這項功能。Mac OS X操作系統在除啟動盤之外的其它卷上也支持FAT文件系統。 FAT和其它數據流 FAT文件系統本身不是為支持ADS而設計的,但是一些高度依賴它們的操作系統創造出不同的方法在FAT驅動器上處理它們。這些方法或者在額外的文件或路徑中存儲附加的信息(Mac OS),或者給那些磁碟數據結構中以前沒有使用的變數賦予新的含義(OS/2和視窗NT)。第二種設計,盡管想像起來會更有效率,但是它們不能被不認識這種格式的工具復制或者備份;使用不能識別這種格式的磁碟工具(如碎片整理或CHKFSK)控制這些磁碟可能會破壞這些信息。 Mac OS使用PC Exchange存儲不同的數據,文件屬性和文件名存在一個名為FINDER.DAT的隱藏文件中,資源分支(ADS)存在名為RESSOURCE.FRK的子目錄中,這些數據都存在使用它們的每個目錄中。從PC Exchange 2.1開始,它們將Mac OS的長文件名保存為標準的FAT長文件名,並且將超過31個字元的FAT長文件名轉換為唯一的31字元能夠被Macintosh應用程序識別的文件名。 Mac OS X將元數據(資源分支、不同的ADS、文件屬性)保存在與所有人相同並以「._」開始的名字的隱藏文件中,並且Finder將一些文件夾和文件元數據存在名為「.DS_Store」的隱藏文件中。 OS/2高度依賴於擴展屬性(EA)並且將它們存在位於FAT12或FAT16的根目錄下名為「EA DATA. SF」的隱藏文件中。這個文件使用以前文件(或者目錄)的目錄清單中的兩個保留位元組索引。在FAT32格式中,這些位元組中存有文件或者目錄開始簇號的高16位,這樣就使它難於在FAT32上保存EA。擴展屬性可以通過Workplace Shell桌面、REXX腳本、許多系統圖形用戶介面和命令行工具(如4DOS|4OS2]]來訪問。 Windows NT支持HPFS、NTFS和FAT中所有擴展屬性的處理(所用處理機制完全類似於OS/2),但是不能處理其它一些存於NTFS驅動器的ADS數據。試圖從復制帶有與NTFS驅動器屬性不同擴展屬性的ADS到FAT驅動器將報告一個警告信息提示ADS將會丟失。 Windows 2000以後產品的處理類似於視窗NT但復制到FAT32時它們沒有顯示任何警告信息直接丟棄擴展屬性(但報告其它象「Macintosh Finder Info」和「Macintosh Resource Fork」這些ADS引起的警告)。 前景 微軟公司最近獲得了VFAT和FAT32的專利(但沒有得到最初的FAT的專利),這引起人們對於微軟將會尋求從Linux OS發布和初始化他們產品的媒體廠商收取專利費的擔憂(參見下面的FAT授權協議)。盡管最初的裁定不利於微軟公司,但是微軟仍然取得了勝利並且得到了專利授權。 由於微軟公司已經宣布不再開發基於MS-DOS的消費用操作系統視窗Me的後續版本,所以不再有可能會有新版的FAT。對於大多數用途來說,為視窗NT系列開發的NTFS文件系統從效率、性能和可靠性來說都優於FAT;它的主要缺點是小容量文件所佔的額外空間以及除了基於NT的視窗之外的很少有其他操作系統支持。由於確切的規范是微軟公司的商業秘密,這就使得使用一個DOS軟盤用於恢復目的很困難。微軟公司提供了一個恢復界面來解決這個問題,由於安全的原因它嚴重限制了預設情況下它能解決的問題。 FAT仍然是活動媒體的常用文件系統(CD和DVD是例外),軟碟使用的是FAT12,其它多數活動媒體用的是FAT16(如用於數位相機的快閃記憶卡和USB隨身碟)。許多活動媒體還沒有達到能夠享用FAT32。出於兼容性和存儲空間利用率的考慮FAT仍然用在這些驅動器上,同時也是由於這些活動媒體上的文件的許可更容易遇到麻煩而不是更重要這樣一個事實。 視窗2000和XP支持的FAT32格式化的限制是32GB,這非常有效地強迫使用現代硬碟的用戶或者使用NTFS或者在視窗之外格式化驅動器。一個解決的辦法是使用從Linux移植到視窗平台的一個工具version of mkdosfs。 這里也有一個自由開源的工具。
❹ FAT文件系統目錄和子目錄的關系是如何關聯的
一個文件系統包括四個不同的部分。
保留扇區,位於最開始的位置。第一個保留扇區是引導區(分區啟動記錄)。它包括一個稱為基本輸入輸出參數塊的區域(包括一些基本的文件系統信息尤其是它的類型和其它指向其它扇區的指針),通常包括操作系統的啟動調用代碼。保留扇區的總數記錄在引導扇區中的一個參數中。引導扇區中的重要信息可以被DOS和OS/2中稱為驅動器參數塊的操作系統結構訪問。
FAT區域。它包含有兩份文件分配表,這是出於系統冗餘考慮,盡管它很少使用,即使是磁碟修復工具也很少使用它。它是分區信息的映射表,指示簇是如何存儲的。
根目錄區域。它是在根目錄中存儲文件和目錄信息的目錄表。在FAT32下它可以存在分區中的任何位置,但是在早期的版本中它永遠緊隨FAT區域之後。
數據區域。這是實際的文件和目錄數據存儲的區域,它占據了分區的絕大部分。通過簡單地在FAT中添加文件鏈接的個數可以任意增加文件大小和子目錄個數(只要有空簇存在)。然而需要注意的是每個簇只能被一個文件佔有,這樣的話如果在32KB大小的簇中有一個1KB大小的文件,那麼31KB的空間就浪費掉了。 例外情況
Apricot PC的MS-DOS所用FAT的實現有一個不同的啟動扇區組織以使用計算機與IBM不兼容的基本輸入輸出系統。跳轉指令和OEM名被省略並且MS-DOS文件系統參數位於0x50(在標准扇區中偏移為0x0B - 0x17)。後來的Apricot MS-DOS版本除了Apricot特有的引導區之外也具有了讀寫標准啟動分區的能力。
BBC Master 512 上的DOS Plus根本就不使用傳統的引導區。數據磁碟省略了引導區並且以一個單份的FAT開始(FAT的第一個位元組用來確定磁碟容量),啟動磁碟使用一個包含啟動調用程序的小型ADFS文件系統,後面跟隨一個單份的FAT。
文件分配表
一個分區分成同等大小的簇,也就是連續空間的小塊。簇的大小隨著FAT文件系統的類型以及分區大小而不同,典型的簇大小介於2KB到32KB之間。每個文件根據它的大小可能佔有一個或者多個簇;這樣,一個文件就由這些這些(稱為單鏈表)簇鏈所表示。然而,這些鏈並不一定一個接著一個在磁碟上存儲,它們經常是在整個數據區域零散的儲存。
文件分配表(FAT)是映射到分區每個簇的條目列表。每個條目記錄下面五種信息中的一種。
鏈中下一個簇的地址
一個特殊的文件結束符(EOF)符號指示鏈的結束
一個特殊的符號標示壞簇
一個特殊的符號標示保留簇
0來表示空閑簇
每個版本的FAT文件系統使用不同大小的FAT條目。這個大小已經由名字表示出來,例如FAT16文件系統的每個條目使用16位表示,32位文件系統使用32位表示。這個不同意味著FAT32系統的文件分配表能比FAT16映射更多的簇,它也允許FAT32有更大的分區大小。這也使得FAT32比FAT16更能有效地利用磁碟空間,因為每個驅動器能夠定址更小的簇,這也就意味著更少的空間浪費。
目錄表
目錄表是一個表示目錄的特殊類型文件(現今通常稱為文件夾)。它裡面保存的每個文件或目錄使用表中的32位條目表示。每個條目記錄名字、擴展名、屬性(檔案、目錄、隱藏、只讀、系統和卷)、創建的日期和時間、文件/目錄數據第一個簇的地址,最後是文件/目錄的大小。
除了FAT12和FAT16文件系統中的根目錄表占據特殊的根目錄區域位置之外,所有其它的目錄表都存在數據區域。
合法的DOS文件名包括下面一些字元:
大寫字母A-Z
數字0-9
空格(盡管結尾的空格被作為填充而不是文件名的一部分)
! # $ % & ( ) - @ ^ _ ` { } ~ '
數值 128-255
DOS文件名位於OEM字元集。
長文件名(LFN)使用一個技巧存儲在FAT文件系統上——在目錄表中添加假的條目。這些條目使用一個普通文件無法使用的卷標屬性標識,普通文件無法使用是由於它們被大多數舊的MS-DOS程序忽略。很顯然,一個只包含卷標的目錄被當作空卷,這樣就允許刪除;使用長文件名創建的文件在從普通的DOS刪除就會發生這樣的情形。
校驗和也允許檢驗長文件名是否與8.3文件名匹配;當一個文件刪除之後使用DOS在同一個目錄位置重新創建之後就會出現不匹配現象。校驗和使用下面的演算法計算。(注意pFcbName是指向如正常目錄條目中所顯示的文件名的指針,例如前八個字元是文件名,最後三個是擴展名。點是隱含的。文件名中沒有使用的空間將使用空格(ASCII 0x20)補齊。例如,「Readme.txt」將記錄為"README TXT"。
unsigned char lfn_checksum(const unsigned char *pFcbName)
{
int i;
unsigned char sum=0;
for (i=11; i; i--)
sum = ((sum & 1) ? 0x80 : 0) + (sum >> 1) + *pFcbName++;
return sum;
}
舊版的PC-DOS錯誤地將根目錄中的長文件名當作卷標,這樣它們就會顯示錯誤的卷標。
每個假條目包含13UTF-16個字元(26位元組),通過使用包含文件大小或者時間記錄的區域獲得除了舊的8+3之外的另外15個位元組(但是出於安全和磁碟檢查工具的考慮開始簇的區域沒有使用保留值為0)。參見8.3中另外的解釋。
如果一個文件名只包含小寫字母、或者是一個小寫字母的名加上大寫擴展名的混合或者與此相反,沒有特殊的字元並且滿足8.3的限制,在視窗NT上就不創建VFAT的條目。相反,在目錄條目的偏移0x0c處的沒有說明的位用來指示文件名全部或者部分是小寫字母。特別明確的是,位4意味著小寫字母的擴展名,位3意味著名是小寫字母,這樣就允許如「example.TXT」和「HELLO.txt」這樣的組合,但是不允許「Mixed.txt」這樣的組合。很少有操作系統支持這種功能。非NT視窗版本當這個擴展使用時將把文件名當作大寫字母。預設情況下,Linux的最近版本將認識這個擴展但是在寫時並不使用它。
第三方擴展
在微軟公司添加長文件名和創建/訪問時間戳之前,其它的操作系統使用目錄表位元組0x0C-0x15存儲其它的元數據。
❺ FAT是什麼格式
FAT不是指格式,FAT是文件配置表(全稱是File Allocation Table),是一種由微軟發明並擁有部分專利的文件系統,供MS-DOS使用,也是所有非NT核心的微軟窗口使用的文件系統。
一個FAT文件系統包括四個不同的部分。保留扇區,位於最開始的位置。第一個保留扇區是引導區(分區啟動記錄);FAT區域,它包含有兩份文件分配表,是分區信息的映射表;根目錄區域,它是在根目錄中存儲文件和目錄信息的目錄表;數據區域,是實際的文件和目錄數據存儲的區域。
(5)fat系統文件目錄結構擴展閱讀:
FAT的最大分區
在FAT16中,採用了16bit寬的簇地址,32bit寬扇區地址。雖然32bit的扇區地址可以定址2^32*512,約2個TB的容量,但於由規定每簇最大的容量不超過1024*32,所以FAT16文件系統的容量也就限制到了2^16*1024*32,大約2.1GB的空量。
FAT32文件系統使用了32bit寬的簇地址,所以稱為FAT32。但在微軟體的文件系統中只使用了低28位,最大容量為2^28*1024*32,約8.7TB的空量。
雖然FAT32具有容納近乎8.7TB的容量,但實際應用中通常不使用超過32GB的FAT32分區。WIN2000及之上的OS已經不直接支持對超過32GB的分區格式化成FAT32,但WIN98依然可以格式化大到127GB的FAT32分區。