多平臺大型文件系統比較

概述

由於業務需求,需要評估嵌入式設備的外置存儲,例如U盤、SD卡等,適用的大型存儲系統。出於兼容考慮,常見的會使用 FAT32exFATNTFS。在尋找三者的特徵過程中,也帶出了其他的文件系統對比,例如ReFSHFS+等。

文件系統的往事今生

目前常見的系統平臺就3類,分別是 微軟的Windows,蘋果的MacOS,開源社區的Linux,每個操作系統都有設計自己的文件系統,以本文討論的幾款文件系統來說,他們的歸屬如下:

Dev FAT32 exFAT NTFS ReFS HFS/HFS+ APFS Ext2/3/4
Window
Mac
Linux

Window系列的文件系統,最廣爲人知的是FAT32,在古老的Win XP上就是用的這文件系統。但由於歷史侷限性,其設計存在不可能避免的缺陷,例如無法支持大於32G的存儲分區和大於4G的文件,微軟又提出了NTFSNTFS的確非常強大,支持加密、壓縮、權限控制等等,且還支持日誌保證數據一致性,目前(2020年)在PC上主要用的依然是NTFS。在NTFS.com上能找到NTFS的特性和元數據的詳細介紹。

NTFS的確強大了,但兼容性反而比不上FAT32,按網上的資料說,因爲NTFS支持日誌,大量寫會影響Flash的壽命,例如U盤、TF卡等,於是微軟又推出了exFAT,作爲FAT32NTFS的折中。NTFS的日誌對Flash的壽命的影響,我是存疑的,就好像在手機的emmc上用的ext4,也是帶日誌的,且這些flash本身有磨損平衡,等用到壽命上限的之前,我們早已更新換代了。在磁盤上,不管是功能多樣性、性能和穩定性,exFAT都比不上NTFS,因此在Win7上測試,發現磁盤分區只能格式化爲NTFS,U盤可以選擇exFATNTFS

ReFS雖然也是微軟推出來的,據說是NTFS的替代品,但是並沒有太普及,目前功能還比不上NTFSNTFS.com上也有ReFS的介紹

HFS是蘋果設備上專用的文件系統,後來迭代出了HFS+,反正是功能越來越強大了。後來蘋果又推出了APFS,用於替代HFS+

Ext系列則是Linux社區上設計的文件系統,由於Linux稱霸服務器端,大部分開發者其實都或多或少接觸過Ext系列文件系統。在5.xLinux內核上,依然存在有ext2ext4的代碼,如果你非得用ext3,也只是用ext4的代碼。網上有許多ext2/3/4之間差異的文章,簡單來說,ext3首先引入了日誌,解決了ext2掉電不一致問題,ext4又在ext3的基礎上,添加了新功能和擴大了大小上限,提供更好的性能和可靠性。

Linux上其實還有很多新系統,例如使用COW而非日誌的btrfs,還支持鏡像等,功能非常強大,但感覺還不夠穩定。

文件系統的兼容性

我們經常需要跨平臺工作,例如從 Win10 拷貝個文件到U盤,然後插入到 Mac Book中,或者 Linux 電腦中,這時候如果U盤的文件系統兼容性不夠好,就會導致有的平臺能識別U盤的文件,有的電腦無法識別。因此,我們需要討論下,文件系統的兼容性!

參考資料《What File System Should I Use for My USB Drive?》,不同文件系統的兼容性總結如下:

FS Win XP Win 7/8/10 Mac (<= v10.6.4) Mac (>=v10.6.5) Linux
FAT32
exFAT × √ (after v5.7)
NTFS Read Only √ (with 3party tools) √ (with 3party tools)
HFS+ × Read Only with Boot Camp ×
APFS × × × ×
EXT4 × √ (with 3party tools) × ×

NTFS的支持上,使用第三方工具,例如ntfs-3g後可實現讀寫。其中在Linux有原生的NTFS驅動,支持讀,但對寫支持不太好。

在個人電腦端,微軟的Window佔了絕大比例,因此在U盤和TF上使用的文件系統,我們更需要考慮的是Window的兼容性。可以發現,FAT32畢竟是老大哥了,它的兼容性是最高的,但是侷限性也的確很明顯。從兼容性考慮,作爲替代,可以考慮exFAT,畢竟不管是Mac還是Linux都已經原生支持了,而NTFS還需要安裝第三方工具。但查閱資料發現,exFAT設計時有兩份FAT,但微軟不知道哪根筋搭錯了,默認只使用一份FAT,也就意味着,作爲可插拔的U盤和TF卡,如果隨意插拔,FAT異常卻沒有鏡像備份,還是有可能會導致文件系統的損壞的。

從RTOS這樣的小嵌入式設備的角度來說,大部分設備通過移植第三方文件系統都可以快速支持FAT32exFAT,例如微軟2020年開源的FileX,例如RT-Thread上使用的elmfat。在嵌入式設備的角度來看,exFAT的兼容性明顯要比NTFS要好。

上文也有提到,網上有人說NTFS的日誌會加劇Flash的磨損。關於這點我是存疑的,理論上的確會加劇磨損,但Flash的壽命相對TF卡和U盤的使用頻率來說,是不需要擔心的。就好像安卓手機上默認使用的ext4文件系統也是帶日誌的,從磨損的角度來說,問題也不大。

所以呢,在U盤和TF卡上使用的文件系統,我的建議是:

  • 希望更高的兼容性,使用exFAT
  • 希望保證數據安全的前提下,儘可能高的兼容性,使用NTFS

文件系統的限制

文件系統的限制,在設計的時候就確定了。例如FAT32用32位的變量記錄文件大小,就限制了一個文件最大不超過2^32=4G大小。在遠古時候,存儲介質還只有幾十上百兆,此時FAT32的限制是綽綽有餘的,但在現今磁盤1TB起步的時代,FAT32的時代侷限性讓其不再適用於最新的設備,所以催生了新的文件系統。

《刨根問底:ext3/ext4文件系統最大空間及單個文件大小演算法則》ext3ext4上的文件大小限制和分區大小限制的計算原理講的挺好的。

我先來看看在計算機端,大小單位的進制關係:

B KB MB GB TB PB EB ZB YB DB NB
2^0 2^10 2^20 2^30 2^40 2^50 2^60 2^70 2^80 2^90 2^100

《計算機存儲單位:Byte、KB、MB、GB、TB、PB、EB、ZB、YB、DB、NB介紹》NB的描述挺有意思的,假設1TB的硬盤重670g,那麼要存儲1NB容量的數據,共需要1152921504606846976個1TB硬盤,共計77245740809萬噸。目前最大的船 諾克耐維斯號 載重量爲56萬噸,1000個 諾克耐維斯號 拉到報廢都拉不完。

我們再看看各個文件系統的限制是怎麼樣的。由於大多數人對 PB 及以上的單位並不敏感,下表改用 TB 來表示。

FS 最大分區大小 最多文件個數 最大文件大小 備註
FAT32 32G 2^22 4G 有些定製的FAT32可以支持更大的分區
NTFS 5 (16 * 1024 * 1024) TB 2^32 - 1 (16 * 1024 * 1024) TB 前提:假設1K簇大小,簇越大,值越大
exFAT (128 * 1024) TB Unlimited (16 * 1024 * 1024) TB
ReFS 1 YB = (1024)^4 TB 2^64 - 1 2^64 - 1
HFS+ (8 * 1024 * 1024) TB / (8 * 1024 * 1024) TB
ext4 (1024 * 1024) TB Unlimited 16TB 格式化時有幾個inode,就支持多少個文件

大部分數據來自於NTFS.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章