34.2. Linux 的主要檔案系統

不像兩、三年前,選擇 Linux 的檔案系統不再是幾秒鐘的事了 (Ext2 或 ReiserFS?)。從 2.4 開始的核心,提供各種檔案系統可供選擇。下面是這些檔案系統基本工作方式以及其優點的概觀。

世上沒有符合所有應用程式類型的檔案系統,這一點很重要,要牢記於心。每一種檔案系統都有自己特殊的優、缺點,必須考慮在內。即使最尖端的檔案系統,也無法取代合理的備份策略。

資料整合性資料一致性這兩個詞彙,用在本章節時,不是指使用者空間資料的一致性 (應用程式寫入檔案中的資料)。此資料是否一致,必須由應用程式本身控制。

[Important]設定檔案系統

除非在本章節中提及,否則設定或變更分割以及檔案系統的一切步驟,都可以使用 YaST 模組來執行。

34.2.1. ReiserFS

ReiserFS 在 2.4 核心版本是正式的重要功能,而從 SUSE Linux 6.4 版的 2.2.x SUSE 核心的核心修補程式就已經可以使用。ReiserFS 是由 Hans Reiser 和 Namesys 開發小組設計。ReiserFS 已經證實是舊有 Ext2 的強大替代方案。它的關鍵價值是較佳的磁碟空間利用、較好的磁碟存取效能以及快速損毀復原。

詳細說明 ReiserFS 的長處,包括:

更佳的磁碟空間利用

在 ReiserFS,所有資料按照稱為 B*-平衡樹的結構整理的。樹狀結構提供更佳的磁碟空間利用,因為小的檔案可以直接儲存在 B* 樹葉節點,而不是儲存在別處,而且只維護實際磁碟位置的指標。此外,未以 1 或 4 kB 的區塊配置儲存體,而是按需要的正確大小。另一項優點則依賴 inode 的動態配置。這樣會使得檔案系統比傳統的檔案系統更有彈性,例如在 Ext2,inode 密度必須在檔案系統建立期間指定。

更佳的磁碟存取效能

至於小的檔案,檔案資料和「stat_data」(inode) 資訊兩者通常儲存在一起。它們可以使用單一磁碟 I/O 作業來讀取,表示只需要存取一次磁碟,便能擷取所有需要的資訊。

快速損毀復原

使用日誌來追蹤最新的中繼資料變更,只要幾秒便能檢查檔案系統,即使很大的檔案系統也沒問題。

透過資料日誌的可靠性

ReiserFS 也支援資料日誌,以及 ordered 資料模式,此模式類似 Ext3 章節中 (節 34.2.3, "Ext3") 描述的概念。預設模式為 data=ordered 可以確保資料和中繼資料的完整性,但是日誌僅適用中繼資料。

34.2.2. Ext2

Ext2 的起源要回到 Linux 歷史的古早年代。它的前輩 - 延伸檔案系統,是在 1992 年 4 月落實並整合至 Linux 0.96c。延伸檔案系統已經過多次修改,而到了 Ext2,成為多年來最受歡迎的 Linux 檔案系統。有了日誌檔案系統的建立以及其驚人的快速回復時間,Ext2 就變得不那麼重要了。

簡短的 Ext2 功能摘要可以協助了解為什麼它 (以及在某些領域) 是很多 Linux 使用者最喜愛的 Linux 檔案系統。

穩固性

Ext2 經過多次改良和密集測試,已經算是「老前輩」了。這可能是為什麼人們通常稱它堅如磐石的原因。在檔案系統無法完全取消裝載而導致系統中斷後,e2fsck 會開始分析檔案系統資料。中繼資料會進入一致性狀態而且待處理的檔案或資料區塊會寫入指定的目錄 (稱為 lost+found)。與日誌檔案系統相比,e2fsck 會分析整個檔案系統,不只是中繼資料最近修改的位元而已。這比檢查日誌檔案系統的記錄資料,要花費更多時間。按照檔案系統大小,此程序會花半小時或更長的時間。因此,不要為任何需要高可用性的伺服器選擇 Ext2。不過,因為 Ext2 不會維護日誌,而且使用相當少的記憶體,因此有時候比其他檔案系統較快速一些。

升級容易

Ext3 以 Ext2 的程式碼做為強大的基礎,因此可以成為眾人喝采的下一代檔案系統。它的可靠性和穩固性,巧妙地結合了日誌檔案系統的優點。

34.2.3. Ext3

Ext3 是由 Stephen Tweedie 設計。不像其他所有下一代檔案系統,Ext3 不依循全新的設計原則。它是以 Ext2 為基礎。這兩個檔案系統彼此關係十分密切。Ext3 檔案系統可以輕易地在 Ext2 檔案系統的最上層建立。Ext2 和 Ext3 最重要的差別是 Ext3 支援日誌處理。簡而言之,Ext3 提供三個主要優點:

可輕易從 Ext2 升級,並具有很高的可靠性

因為 Ext3 是以 Ext2 程式碼為基礎,而且共用它的磁碟格式以及中繼資料格式,所以從 Ext2 升級至 Ext3 十分簡單。不像轉換至其他日誌檔案系統 (例如 ReiserFS、JFS 或 XFS) 那麼冗長乏味 (備份整個檔案系統,然後從頭建立),轉換至 Ext3 只是數分鐘的事。它也非常安全,因為重新建立整個檔案系統,不保證萬無一失。思考一下現有 Ext2 系統等候升級至日誌檔案系統的數量,您就可以輕易地發現為什麼 Ext3 對很多系統管理員具有一定的重要性。從 Ext3 降級至 Ext2 就和升級一樣容易。只要乾淨取消掛載 Ext3 檔案系統,然後重新掛載成 Ext2 檔案系統就可以了。

可靠性和效能

其他日誌檔案系統,有些會依照「僅中繼資料」日誌方法。這表示您的中繼資料永遠會保存在一致的狀態,但是同樣地無法自動保證檔案系統資料本身。Ext3 的設計是妥善管理中繼資料和資料二者。「管理」的程度可以自訂。在 data=journal 模式啟用 Ext3,可提供最大的安全性 (資料整合性),不過因為中繼資料和資料是記錄為日誌,所以系統速度會減慢。較新的方法是使用 data=ordered 模式,可以確定資料和中繼資料整合性,不過限中繼資料使用日誌處理。檔案系統驅動程式會收集所有對應至某一中繼資料更新的所有資料區塊。更新中繼資料前,這些資料區塊會寫入硬碟。如此一來便可以達到中繼資料和資料的一致性,不會犧牲效能。第三個要使用的選項是 data=writeback,允許在其中繼資料已經提交至日誌後,將資料寫入主要檔案系統。一般認為此選項的效能最好。不過,它可以允許在損毀和復原舊資料後,重新顯示舊資料,同時又維護內部檔案系統整合性。除非您另有其他指定,否則 Ext3 是預設與 data=ordered 一起執行的。

34.2.4. 將 Ext2 檔案系統轉換成 Ext3

Ext2 轉換成 Ext3,涉及兩個個別步驟:

建立日誌

root 登入,然後執行 tune2fs -j。這樣會以預設參數建立 Ext3 日誌。要由自己決定日誌大小以及它所在的位置,執行 tune2fs -J 取代想要的日誌選項 size=device=。關於 tune2fs 程式的詳細資訊,可以從它的手冊頁面 (tune2fs(8)) 取得。

在 /etc/fstab 指定檔案系統類型

要確定 Ext3 檔案系統可以依此識別,請編輯檔案 /etc/fstab,將指定給相應分割區的檔案系統類型從 ext2 變更成 ext3。所做的變更會在下次啟動時生效。

根目錄使用 ext3

要啟動根目錄檔案設定為 Ext3 分割區,請在 initrd 中包括模組 ext3jbd。要執行此步驟,請編輯檔案 /etc/sysconfig/kernel,將這將這兩個模組包含在 INITRD_MODULES,再執行指令 mkinitrd

34.2.5. Reiser4

核心 2.6 發行後,有其他成員加入日誌檔案系統系列:Reiser4。Reiser4 與前一代產品 ReiserFS (版本 3.6) 全然不同。它導入調整檔案系統功能插件的概念,以及更詳細的安全性概念。

詳細的安全性概念

在設計 Reiser4 方面,它的開發人員強調安全性相關功能的實作。因此 Reiser4 會隨附一組專用的安全性插件。最重要的部分是導入檔案「項目」的概念。目前每個檔案都會定義檔案存取控制。如果大型檔案的資訊與多個使用者、群組或應用程式相關,則包含所有相關人員的存取權會相當不明確。在 Reiser4 中,您可以將那些檔案分成較小部分的 (「項目」)。可以分別設定每個項目和每位使用者的存取權,如此可擁有更明確的檔案安全性管理。完整的例子會是 /etc/passwd。以前,只有 root 可以讀取和編輯檔案,而非 root 使用者僅有讀取該檔案的權限。使用 Reiser4 的項目概念,您可以將該檔案分成一組項目 (每位使用者一個項目), 讓使用者或應用程式修該他們自己的資料,但是不允許存取其他使用者的資料。此概念兼顧了安全性和彈性。

透過插件的擴充性

檔案系統會使用到的一般檔案系統功能和外部功能,Reiser 4 會以插件的方式執行。這些插件可以輕鬆地新增到基本系統。您不再需要重新編譯核心或重新格式化硬碟,就可以新增功能到您的檔案系統。

透過延緩的配置獲得較佳的檔案系統配置

Reiser4 和 XFS 一樣,支援延緩的配置。請參閱 節 34.2.7, "XFS"。使用延緩的配置,就算是中繼資料,也可以產生較佳的整體配置。

34.2.6. JFS

JFS,是由 IBM 開發的日誌檔案系統。JFS Linux 連接埠的第一個 beta 版本,在 2000 年夏天進入 Linux 社群。1.0.0 版在 2001 年問世。JFS 經過量身訂製後,可以符合以效能為最終目標的高運能伺服器的環境需求。JFS 是完整的 64 位元檔案系統,可支援大型檔案以及分割區,這是它用在伺服器環境的另一個原因。

仔細觀察 JFS 就知道為什麼這個檔案系統是您的 Linux 伺服器不錯的選擇:

有效率的日誌處理

JFS 依照「僅中繼資料」方法。不需要密集檢查,只會檢查由最近檔案系統活動所產生的中繼資料變更,節省大量的復原時間。需要多個並行記錄項目的並行作業,可以結合成一個群組,大大降低透過過多重寫入作業,所造成的檔案系統效能損失。

有效率的目錄組織

JFS 保存兩種不同的目錄組織。對於小型目錄,它允許目錄的內容直接儲存至它的 inode。對於大型目錄,它使用 B+樹,大大改善目錄管理。

透過動態 inode 配置取得較佳的空間利用

以 Ext2 為例,您必須事先定義 inode 密度 (管理資訊佔用的空間),如此限制檔案系統的檔案或目錄數量上限。JFS 讓您不用擔心這些 -- 它動態配置 inode 空間,在不需要的時候會釋放 inode 空間。

34.2.7. XFS

1990 年代早期,SGI 開始對原先要當成 IRIX OS 的檔案系統 XFS 進行研發。XFS 背後的想法是建立高效能 64 位元日誌檔案系統,配合今日嚴格的計算挑戰。XFS 對於操控大型檔案以及執行高階硬體,具備良好功能。不過,XFS 還是有一個缺點。和 ReiserFS 一樣,XFS 在專注於中繼資料整合性,不重視資料整合性。

以下是 XFS 關鍵特性的快速回顧,說明為什麼它可在高階計算中,對其他日誌檔案系統顯現強大的競爭能力。

利用配置群組,取得高擴充性

建立 XFS 檔案系統時,檔案系統所屬的區塊裝置,會分割成 8 或更多等同大小的線性區域。這些稱為配置群組。每一個配置群組管理自己的 inode 以及可用的磁碟空間。事實上,配置群組可以看成是檔案系統中的檔案系統。因為配置群組彼此各自獨立,所以核心可以同時處理一個以上的配置群組。此特性是 XFS 具有優良擴充性的關鍵。當然,獨立配置群組的概念符合多處理器系統的需求。

透過有效率的磁碟空間管理取得高效能

可用空間和 inode 是由配置群組裡面的 B + 樹處理。使用 B + 樹可大大改良 XFS 的效能和擴充性。XFS 會使用延緩的配置。它會將程序分成兩個部分來處理配置。待處理的交易會儲存在 RAM 並保留適當的空間。XFS 仍然沒有決定資料到底要儲存在什麼地方 (提到檔案系統區塊的時候)。此決策會盡量延緩至最後時刻。部分暫時資料永遠不會儲存至磁碟,因為當決定 XFS 決定實際儲存位置時,它可能已經過時了。 因此 XFS 會增加寫入效能並降低檔案系統零散化。因為延緩的配置會造成寫入事件比其他檔案系統要來得少,因此寫入情況較嚴重時,發生損毀之後,有可能會遺失資料。

預先配置來避免檔案系統零散化

寫入資料至檔案系統前,XFS 會保留 (預先配置) 檔案需要的可用空間。因此,可大幅降低檔案系統零散化。因為檔案的內容是分佈在檔案系統中,所以效能就會提高。