科技周報

訂閱【新聞快遞】 訂閱【新聞快遞】
訂閱【熱門排行】 訂閱【熱門排行】
訂閱【科技雜誌】 訂閱【科技雜誌】

數位資訊 創意生活 名家專論 網路新知 科技革命 科技雜誌
NOVA情報誌數位時代電腦家庭電腦王時報周刊PCshopper

2008.05.30 

徹底研究exFAT
《電腦王五月號》文=電腦王編輯部

    適用於隨身儲存裝置的檔案系統釋疑與效能實測

    嗯……想不出什麼引言來,不如我們就直接開始吧!在前幾期的雜誌裡有提到,Vista SP1的某些新功能不怎麼吸引人,尤其exFAT好像特別冷門,根本沒什麼人會興奮,但隨著大容量平價隨身碟的逐漸普及,勢必有需要了解這個新一代的檔案系統,究竟只是SP1的伴遊新噱頭,還是能為隨身儲存裝置帶來更廣泛的應用?

    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的叢集設大時,將會有多少效能增進呢?
exFAT與FAT32、NTFS的比較

 

FAT32NTFSexFAT
適用作業系統Win95OSR2之後皆可Windows 2000之後的NTFS5為較成熟版本Vista SP1、Windows CE 6.0
最小叢集512bytes512bytes512bytes
最大叢集64KB64KB32,768KB
最大單檔大小4GB-2bytes受最大分割容量影響16EB(理論值)
最大分割容量32GB、2TB2TB16EB(理論值)
檔案數限制4194304單一目錄至少大於1000個
支援CALSP1並無採用
最少叢集數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的隨身碟。
圖說:SP1原生不支援用GUI將Fixed Media格式化成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的存取效能差異(單位:MB/s)

 

讀取NTFS_4K寫入NTFS_4K讀取FAT32_4K寫入FAT32_4K讀取exFAT_32K寫入exFAT_32K

exFAT

_32K

116.671940.8114.324839.26114.926439.112

exFAT

_32M

119.843841.99414118.9241.836118.6342.82

exFAT

_512K

117.531341.88477117.1341.274116.2341.63

exFAT

_4K

126.453141.91602124.5240.998125.4241.1

exFAT

_16K

117.890641.9116.92341.219117.79242.25

FAT32

_4K

141.945340.8129.6539.23131.42739.5

NTFS

_4K

129.601642.19129.342.361129.301242.92

NTFS

_64K

127.453140.26126.3740.293127.980440.96

FAT

_16K

120.039141.9120.0241.57119.86341.77

    tfat運作

    左右分別為TFAT與一般FAT檔案系統的運作模式示意,FAT通常會有一個或多個Tables來做備份。TFAT會等原始資料確實在FAT1上完成存取動作後,再把FAT1複製到FAT0,如果動作進行中發生中斷,FAT1->FAT0的動作就不會發生。而FAT則是在原始資料存到任何一層的FAT Table時,同時更新其它Table的資料,當然如果發生中斷,兩邊的資料都是不完整的。需要注意的是,TFAT不能百分百防止資料遺失,也無法復原遺失的資料,只是確保目的地的原始資料與配置表完整無缺,不受影響。

    exFAT的附加功能

    exFAT的另一個特點是支援TFAT(Transaction-Safe Fat),TFAT是為了彌補原本FAT系統缺陷而生。就拿一般FAT格式的隨身碟來說,如果在拷貝或搬移、建立檔案或目錄時,突然將隨身碟拔除或是電力流失等等任何因素都會造成資料的中斷,也就是無法確保資料是否完整的寫入到了磁碟中。可以做一個實驗:將一個體積較大的檔案拷貝到隨身碟中,在複製到一半時將隨身碟拔除,放到另外一台電腦上看,能看見檔案的大小、資訊與原始檔一模一樣,並沒有減少,實際上此檔案的內容卻是不完整的,但在Explorer裡看起來就像已經複製成功了一樣。重點是:雖然沒有人會真的無聊到去拔除正在存取中的隨身碟,但不管是NTFS或FAT,都沒有一個確保檔案存取完整性的機制,可以看做是在檔案真正存取完畢前就先將資訊寫入檔案配置表或MFT。

    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,要成為一個理想的跨平台檔案系統?理由似乎還不夠充份。
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

    讓XP也能讀exFAT

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

    何謂「日誌式」檔案系統?

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

    

    第二屆2008爆漿大魔考電腦知識益智答題比賽等你來!

《《 TOP 回上一頁 》》
晚報電腦半導體網路資訊家電遊戲電玩雜誌閱讀熱門排行
創意生活名家專欄網路新知科技革命科技知識線上測驗好站推薦