徹底研究exFAT

exFAT與先前檔案系統的區隔


exFAT(Extended File Allocation Table)是適用於隨身碟或隨身型攜帶裝置(如PDA)的新格式,最早出現在2006年的WinCE 6.0,為了增進與桌上型作業系統的相容性還有便於隨身裝置的同步需求,到了Vista SP1正式被納入桌機作業系統所支援的檔案系統,但跟一般玩家息息相關的,還是在於隨身碟上的應用。以往在隨身碟上,FAT32/FAT是比較常見的格 式。然而FAT32在目前大體積的檔案應用下逐漸產生問題,它的單檔容量最多只有4GB,在某些用途上還要分割檔案才放得進隨身碟裡,而且XP的抽取式媒 體讀寫快取是限定NTFS格式才支援,在拷貝大量且零碎的小檔案時,往往要耗上漫長的等待時間。那為什麼不用NTFS來當隨身碟的主流格式呢? 



一、NTFS相容性不如FAT32


FAT32/FAT已經被大多數的作業系統所廣泛支援,不論是OS X、Linux或是隨身PMP裝置,雖然部份非Winodws系統加上外掛也能做NTFS的讀寫,但是畢竟沒有原生支援來得方便。 



二、存取效能的差異


NTFS是採用「日誌式」的檔案系統,因為要記錄磁碟的詳細讀寫動作,對隨身碟這種快閃記憶體會造成較大負擔,比如同樣存取一個檔案或目 錄,在NTFS磁區上的讀寫次數就會比FAT32來得多,「相較」之下理論上使用NTFS格式存放檔案的隨身碟比較容易損壞,而且在400MB以下的分割 區也比較浪費空間。 



三、XP預設的格式化選項不是NTFS


一般來說除非手動修改原則,不然XP預設不能把隨身碟格式化成NTFS系統,使用者找不到此選項,自然很順理成章的使用FAT32來格式 化。在XP下對抽取式媒體有兩種存取方式:「快速移除最佳化(預設值)」與「效能最佳化」,前者適用於FAT32,後者即是因應NTFS寫入快取的設定, 我們常常聽說不要直接拔除隨身碟,其中一個原因就是考量到後者需要把快取中的資料確實寫入隨身碟,因此使用快速移除最佳化時,就不能直接格式化成 NTFS。 



exFAT有什麼用?


如果不是很在意隨身碟的存取效能,那麼現在市面上4G、8G的MLC隨身碟可以說一點都不貴,這種容量對FAT32支援的單一分割最大容量(32GB)並不成問題,不過超過4GB的單檔就有點麻煩。 



雖然說很少有單一檔案超過4GB的機會,但不代表完全沒有:如BD影片的Remux檔、BD/HD影片的原始檔、無失真音樂愛好者的未壓縮音訊檔、DVD光碟的ISO檔、從DV上擷取下來的AVI檔等等,想要完整備份就得選擇NTFS或exFAT做為儲存格式。 



大部份讀者可能會問:那用NTFS就好了,為什麼要選擇一個相容性更差的檔案系統呢?exFAT原本設計的目的是在FAT32與NTFS之 間取得一個折衷,有FAT32的輕便、不需要耗損太多的效能及記憶體來處理檔案運作,又有類似NTFS的CAL存取控制機制(很可惜在SP1下找不到 exFAT對於CAL的支援),以及類似HPFS系統可快速整理可用叢集空間的Free Space Bitmap,來將檔案破碎的情況盡量減少。 



然而要真正比較出使用FAT32、NTFS及exFAT時的檔案破碎情況很難做到客觀的評比,剩下所能測試的就是存取效能了,尤其是 exFAT最大的叢集大小達到了驚人的32MB,連NTFS都只有64KB,如果隨身碟真的拿來存放BD Remux動輒上GB的大檔案,那麼將exFAT的叢集設大時,將會有多少效能增進呢? 



大叢集有用嗎?


叢集(cluster)在檔案系統上是指比檔案還小的邏輯分割單位,比如說一個檔案的大小是64KB,叢集大小設為4KB的話就是用了16 個叢集。叢集的大小與實體磁碟區的大小成正比,比如說FAT32在4~8GB及8~16GB的預設叢集大小分別為4KB與8KB,基本上叢集愈小愈能節省 磁碟空間,例如一個檔案為12KB,因為叢集是以自然整數的方式存在,如果這時的叢集大小是8K的話就必須動用到兩個叢集(16KB)的空間來存放檔案, 當中的4KB就算浪費掉了。 



不過叢集設太小理論上也會造成存取效能遲緩,一個64KB的檔案只需要存取4個16KB的叢集,換成1K的叢集就變成了64個。從 FAT16、FAT32、到NTFS,在一定的磁碟空間範圍內預設的叢集愈來愈小,但使用者能自訂的最小底限都是512Bytes,如果用安裝光碟來格式 化硬碟,一定也是使用512bytes的預設值,因為512bytes是剛好對齊FAT結構的界限;換成Windows桌面的格式化,則會由系統自行挑選 適當的預設值來決定。 



上述的檔案系統最大叢集都是到64KB,對存取單一大檔案時算不算是理想的設置呢?而且小叢集在進行磁碟重組時會花上比較久的時間。 



然而就這次的測試結果來看,叢集的大小對於檔案的存取並沒有多大影響,而且真的把叢集開到32MB是瘋狂的行為,放一個1KB的檔案,32MB的空間就被吃掉了,尤其是1GB的隨身碟格式化完成,光配置表就用掉了96MB的容量。 



那麼究竟多大的分割會需要用到32MB的叢集呢?SP1需在命令列模式才能把實體硬碟格式化成exFAT,筆者將320GB的硬碟以 exFAT格式化,所得的預設叢集是128KB,真正需要用到32MB叢集的「大」硬碟要問世應該還早。何況微軟目前就沒有把它用在一般固定式媒體 (Fixed Media)的打算,叢集大小對於抽取式媒體來說暫無意義。 








































































exFAT與FAT32、NTFS的比較





FAT32


NTFS


exFAT

適用作業系統 Win95 OSR2之後皆可 Windows 2000之後的NTFS5為較成熟版本 Vista SP1、Windows CE 6.0
最小叢集 512bytes 512bytes 512bytes
最大叢集 64KB 64KB 32,768KB
最大單檔大小 4GB-2bytes 受最大分割容量影響 16EB(理論值)
最大分割容量 32GB、2TB 2TB 16EB(理論值)
檔案數限制 4194304 單一目錄至少大於1000個
支援CAL SP1並無採用
最少叢集數 65,527 (註a) 至少大於127 (註b) 至少大於13 (註c)
最大叢集數 4,177,918
註a:FAT32系統的叢集數不可少於65,527個,也就是說磁碟容量小於 32MB左右(最小叢集 (512bytes) x 65527)的話,就不能用FAT32檔案系統。筆者手邊有一顆31.2MB的隨身碟就無法格式化成FAT32。而FAT(16)系統所能支援的叢集數最 多為65,525,單一叢集容量最大為64KB,所以最大分割區容量大約是4GB(65,525x64)。

註b:在Windows下無法做出小於8MB的NTFS分割區,以8MB的容量用64K叢集來格式化得到的叢集數是127個,但此數字不具意義,因為這種分割容量不太可能會出現,而且採用NTFS格式太浪費空間。(NTFS適用400MB以上空間)

註c:以2048KB(不含)以上的叢集大小無法格式化31.2MB的隨身碟。


exFAT的附加功能

exFAT的另一個特點是支援TFAT(Transaction-Safe Fat),TFAT是為了彌補原本FAT系統缺陷而生。


就拿一般FAT格式的隨身碟來說,如果在拷貝或搬移、建立檔案或目錄時,突然將隨身碟拔除或是電力流失等等任何因素都會造成資料的中斷,也就是無法確保資料是否完整的寫入到了磁碟中。


可以做一個實驗:將一個體積較大的檔案拷貝到隨身碟中,在複製到一半時將隨身碟拔除,放到另外一台電腦上看,能看見檔案的大小、資訊與原始檔一模一樣,並沒有減少,實際上此檔案的內容卻是不完整的,但在Explorer裡看起來就像已經複製成功了一樣。

重點是:雖然沒有人會真的無聊到去拔除正在存取中的隨身碟,但不管是NTFS或FAT,都沒有一個確保檔案存取完整性的機制,可以看做是在檔案真正存取完畢前就先將資訊寫入檔案配置表或MFT。

exFAT、NTFS、FAT32的存取效能差異 (單位:MB/s)
讀取NTFS_4K 寫入NTFS_4K 讀取FAT32_4K 寫入FAT32_4K 讀取exFAT_32K 寫入exFAT_32K
exFAT_32K 116.6719 40.8 114.3248 39.26 114.9264 39.112
exFAT_32M 119.8438 41.99414 118.92 41.836 118.63 42.82
exFAT_512K 117.5313 41.88477 117.13 41.274 116.23 41.63
exFAT_4K 126.4531 41.91602 124.52 40.998 125.42 41.1
exFAT_16K 117.8906 41.9 116.923 41.219 117.792 42.25
FAT32_4K 141.9453 40.8 129.65 39.23 131.427 39.5
NTFS_4K 129.6016 42.19 129.3 42.361 129.3012 42.92
NTFS_64K 127.4531 40.26 126.37 40.293 127.9804 40.96
FAT_16K 120.0391 41.9 120.02 41.57 119.863 41.77
測試環境皆為Vista SP1


SP1原生不支援用GUI將Fixed Media格式化成exFAT格式,需自行到命令列下指令來處理。

TFAT的優點

TFAT的運作方式剛好相反,它 將FAT原始的分層概念(Second Copy):FAT0與FAT1做了有效運用。當檔案系統有變動時先在FAT1上進行存取操作,迨執行完畢後再把FAT1的資料複製到FAT0,如果在 FAT1進行存取時被中斷了,那麼原本的FAT0並不會有變動,拿上面舉的例子來看就是如果檔案沒有複製完成,隨身碟中就看不到該檔案的資訊,雖然實體資 料確實有被寫入磁碟區,但該區塊仍然是被標示為「空」的,對之後的檔案存取並不產生影響,也沒有消耗磁碟空間。這對隨身碟的壽命及檔案系統的健全性有一定 幫助,如果上述情況發生在FAT的話,不但容易流失資料,而且整個配置表會破碎不完整,有時會出現明明刪除了檔案,磁碟空間卻沒有挪出來;或是檔案名稱還 在,卻無實體內容的情況,這時就得靠chkdsk或重新格式化來解決問題。


說了那麼多,其實有點枉然,因為Windows桌面作業系統並不支援TFAT,一切還是以WinCE為主,而XP或Vista會把TFAT 當作FAT來使用,而且沒有辦法刪除TFAT建立的目錄,總之現在TFAT與桌機系統無關,硬是要結合在一起不會有好結果就是了。TFAT是依存在 exFAT之下的檔案系統,並沒有獨立出來。

總結:現在真的需要exFAT嗎?

延續上一段的結論,Vista SP1支援的exFAT不但沒有存取控制的機制,也沒有把TFAT的應用帶到一般桌面作業系統上,毋須逃避的Vista就是要裝在桌機或筆電,沒有人會去 裝在PDA或手機上面,玩家最常接觸的媒介就是記憶卡、硬碟外接盒或隨身碟,如果exFAT帶來的是不怎麼明顯的效能節省與速度提昇,現階段又缺乏相容 性,尤其是無法支援自己的ReadyBoost,要成為一個理想的跨平台檔案系統?理由似乎還不夠充份。


XP硬灌了兩個系統檔之後,可以辨別exFAT格式並做存取,但無法格式化。

讓XP也能讀exFAT

雖然exFAT對大檔案沒有明顯效能增益,但因為相容性而放棄使用還蠻可惜的,至少它可以支援4GB以上的檔案。有個已經不是秘密的公開撇 步可以讓XP認識exFAT,讀取exFAT格式的磁碟,不過只限於讀取,仍然無法直接在XP下格式化或轉換(Convert.exe)磁碟成exFAT 格式。作法很簡單,將exfat.sys及uexfat.dll兩個檔案從Vista SP1的系統目錄下抽出,分別放在XP目錄的system32及system32\driver資料夾下,再把以下登錄檔內容匯入即可。














































Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\exfat]
"Description"="exFAT File System Driver"
"DisplayName"="exFAT File System Driver"
"ErrorControl"=dword:00000001
"Group"="Boot File System"
"Start"=dword:00000002
"Type"=dword:00000002
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\System\exfat]
"EventMessageFile"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,\
00,6f,00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,\
5c,00,49,00,6f,00,4c,00,6f,00,67,00,4d,00,73,00,67,00,2e,00,64,00,6c,00,6c,\
00,00,00
"TypesSupported"=dword:00000007



何謂「日誌式」檔案系統?
日誌式(Journaling File System)主要是用來記錄檔案的詳細變動,不管是複製、搬移、刪除等動作,如果在這些動作進行時遭遇不正常的中斷,在中斷狀況解除後仍能依照記錄來進 行復原或繼續的操作,也不必重新掃描一次來修復亂掉的檔案系統結構,這是大部份日誌式檔案系統的重點。如果電腦中的FAT32磁碟遭受不正當的關機程序, 重開機時會對FAT磁區做一次掃描檢查,如果磁碟區容量愈大回復的動作就會愈久。NTFS卻不會,因為日誌式檔案系統已經有做紀錄,只要按圖索驥去重整 MFT就好,不需要重新整個掃描一次,不過NTFS並沒有回復資料狀態(RollBack)的功能。


轉自:PChomeAdvance電腦王46期

0 意見: