Linux下如何選擇檔案系統:EXT4、Btrfs 和 XFS

linux.cn發表於2016-03-10

老實說,人們最不曾思考的問題之一是他們的個人電腦中使用了什麼檔案系統。Windows 和 Mac OS X 使用者更沒有理由去考慮,因為對於他們的作業系統,只有一種選擇,那就是 NTFS 和 HFS+。相反,對於 Linux 系統而言,有很多種檔案系統可以選擇,現在預設的是廣泛採用的 ext4。然而,現在也有改用一種稱為 btrfs 檔案系統的趨勢。那是什麼使得 btrfs 更優秀,其它的檔案系統又是什麼,什麼時候我們又能看到 Linux 發行版作出改變呢?

首先讓我們對檔案系統以及它們真正幹什麼有個總體的認識,然後我們再對一些有名的檔案系統做詳細的比較。

如何選擇檔案系統:EXT4、Btrfs 和 XFS

檔案系統是幹什麼的?

如果你不清楚檔案系統是幹什麼的,一句話總結起來也非常簡單。檔案系統主要用於控制所有程式在不使用資料時如何儲存資料、如何訪問資料以及有什麼其它資訊(後設資料)和資料本身相關,等等。聽起來要程式設計實現並不是輕而易舉的事情,實際上也確實如此。檔案系統一直在改進,包括了更多的功能、更高效地完成它需要做的事情。總而言之,它是所有計算機的基本需求、但並不像聽起來那麼簡單。

為什麼要分割槽?

由於每個作業系統都能建立或者刪除分割槽,很多人對分割槽都有模糊的認識。Linux 作業系統即便使用標準安裝過程,在同一塊磁碟上仍使用多個分割槽,這看起來很奇怪,因此需要一些解釋。擁有不同分割槽的一個主要目的就是為了在災難發生時能獲得更好的資料安全性。

通過將硬碟劃分為分割槽,資料會被分隔以及重組。當事故發生的時候,只有儲存在被損壞分割槽上的資料會被破壞,很大可能上其它分割槽的資料能得以保留。這個原因可以追溯到 Linux 作業系統還沒有日誌檔案系統、任何電力故障都有可能導致災難發生的時候。

使用分割槽也考慮到了安全和健壯性原因,因此作業系統部分損壞並不意味著整個計算機就有風險或者會受到破壞。這也是當前採用分割槽的一個最重要因素。舉個例子,使用者建立了一些會填滿磁碟的指令碼、程式或者 web 應用,如果該磁碟只有一個大的分割槽,如果磁碟滿了那麼整個系統就不能工作。如果使用者把資料儲存在不同的分割槽,那麼就只有那個分割槽會受到影響,而系統分割槽或者其它資料分割槽仍能正常執行。

記住,擁有一個日誌檔案系統只能在掉電或者和儲存裝置意外斷開連線時提供資料安全性,並不能在檔案系統出現壞塊或者發生邏輯錯誤時保護資料。對於這種情況,使用者可以採用廉價磁碟冗餘陣列(RAID:Redundant Array of Inexpensive Disks)的方案。

為什麼要切換檔案系統?

ext4 檔案系統由 ext3 檔案系統改進而來,而後者又是從 ext2 檔案系統改進而來。雖然 ext4 檔案系統已經非常穩定,是過去幾年中絕大部分發行版的預設選擇,但它是基於陳舊的程式碼開發而來。另外, Linux 作業系統使用者也需要很多 ext4 檔案系統本身不提供的新功能。雖然通過某些軟體能滿足這種需求,但效能會受到影響,在檔案系統層次做到這些能獲得更好的效能。

Ext4 檔案系統

ext4 還有一些明顯的限制。最大檔案大小是 16 tebibytes(大概是 17.6 terabytes),這比普通使用者當前能買到的硬碟還要大的多。使用 ext4 能建立的最大卷/分割槽是 1 exbibyte(大概是 1,152,921.5 terabytes)。通過使用多種技巧, ext4 比 ext3 有很大的速度提升。類似一些最先進的檔案系統,它是一個日誌檔案系統,意味著它會對檔案在磁碟中的位置以及任何其它對磁碟的更改做記錄。縱觀它的所有功能,它還不支援透明壓縮、重複資料刪除或者透明加密。技術上支援了快照,但該功能還處於實驗性階段。

Btrfs 檔案系統

btrfs 有很多不同的叫法,例如 Better FS、Butter FS 或者 B-Tree FS。它是一個幾乎完全從頭開發的檔案系統。btrfs 出現的原因是它的開發者起初希望擴充套件檔案系統的功能使得它包括快照、池化(pooling)、校驗以及其它一些功能。雖然和 ext4 無關,它也希望能保留 ext4 中能使消費者和企業受益的功能,並整合額外的能使每個人,尤其是企業受益的功能。對於使用大型軟體以及大規模資料庫的企業,讓多種不同的硬碟看起來一致的檔案系統能使他們受益並且使資料整合變得更加簡單。刪除重複資料能降低資料實際使用的空間,當需要映象一個單一而巨大的檔案系統時使用 btrfs 也能使資料映象變得簡單。

使用者當然可以繼續選擇建立多個分割槽從而無需映象任何東西。考慮到這種情況,btrfs 能橫跨多種硬碟,和 ext4 相比,它能支援 16 倍以上的磁碟空間。btrfs 檔案系統一個分割槽最大是 16 exbibytes,最大的檔案大小也是 16 exbibytes。

XFS 檔案系統

XFS 檔案系統是擴充套件檔案系統(extent file system)的一個擴充套件。XFS 是 64 位高效能日誌檔案系統。對 XFS 的支援大概在 2002 年合併到了 Linux 核心,到了 2009 年,紅帽企業版 Linux 5.4 也支援了 XFS 檔案系統。對於 64 位檔案系統,XFS 支援最大檔案系統大小為 8 exbibytes。XFS 檔案系統有一些缺陷,例如它不能壓縮,刪除大量檔案時效能低下。目前RHEL 7.0 檔案系統預設使用 XFS。

總結

不幸的是,還不知道 btrfs 什麼時候能到來。官方說,其下一代檔案系統仍然被歸類為“不穩定”,但是如果使用者下載最新版本的 Ubuntu,就可以選擇安裝到 btrfs 分割槽上。什麼時候 btrfs 會被歸類到 “穩定” 仍然是個謎, 直到真的認為它“穩定”之前,使用者也不應該期望 Ubuntu 會預設採用 btrfs。有報導說 Fedora 18 會用 btrfs 作為它的預設檔案系統,因為到了釋出它的時候,應該有了 btrfs 檔案系統校驗器。由於還沒有實現所有的功能,另外和 ext4 相比效能上也比較緩慢,btrfs 還有很多的工作要做。

那麼,究竟使用哪個更好呢?儘管效能幾乎相同,但 ext4 還是贏家。為什麼呢?答案在於易用性以及廣泛性。對於桌面或者工作站, ext4 仍然是一個很好的檔案系統。由於它是預設提供的檔案系統,使用者可以在上面安裝作業系統。同時, ext4 支援最大 1 exabytes 的卷和 16 terabytes 的檔案,因此考慮到大小,它也還有很大的進步空間。

btrfs 能提供更大的高達 16 exabytes 的卷以及更好的容錯,但是,到現在為止,它感覺更像是一個附加的檔案系統,而部署一個整合到 Linux 作業系統的檔案系統。比如,儘管 btrfs 支援不同的發行版,使用 btrfs 格式化硬碟之前先要有 btrfs-tools 工具,這意味著安裝 Linux 作業系統的時候它並不是一個可選項,即便不同發行版之間會有所不同。

儘管傳輸速率非常重要,評價一個檔案系統除了檔案傳輸速度之外還有很多因素。btrfs 有很多好用的功能,例如寫複製(Copy-on-Write)、擴充套件校驗、快照、清洗、自修複資料、冗餘刪除以及其它保證資料完整性的功能。和 ZFS 相比 btrfs 缺少 RAID-Z 功能,因此對於 btrfs, RAID 還處於實驗性階段。對於單純的資料儲存,和 ext4 相比 btrfs 似乎更加優秀,但時間會驗證一切。

迄今為止,對於桌面系統而言,ext4 似乎是一個更好的選擇,因為它是預設的檔案系統,傳輸檔案時也比 btrfs 更快。btrfs 當然值得嘗試、但要在桌面 Linux 上完全取代 ext4 可能還需要一些時間。資料場和大儲存池會揭示關於 ext4、XCF 以及 btrfs 不同的場景和差異。

如果你有不同或者其它的觀點,在下面的評論框中告訴我們吧。

相關文章