13.2. Linux 的主要檔案系統

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

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

本章內容所提到的資料整合性資料一致性兩個詞彙,並不是指使用者空間資料的一致性 (應用程式寫入檔案中的資料)。這項資料是否一致必須由應用程式本身控制。

[Important]設定檔案系統

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

13.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 章節中 (節 13.2.3, "Ext3") 描述的概念。預設模式為 data=ordered,這個模式可以確保資料和中繼資料的完整性,但是日誌僅適用中繼資料。

13.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 的程式碼做為強大的基礎,因此可以成為眾人喝采的下一代檔案系統。它的可靠性和穩固性,巧妙地結合了日誌檔案系統的優點。

13.2.3. Ext3

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

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

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

可靠性和效能

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

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

若要將 Ext2 檔案系統轉換成 Ext3,請依照下列程序執行:

  1. 以 root 身分執行 tune2fs -j 來建立 Ext3 日誌。這樣會以預設參數建立 Ext3 日誌。

    若要由自己決定日誌大小以及它所在的位置,請執行 tune2fs -J,而不要同時使用需要的日誌選項 size=device=。如需更多 tune2fs 程式的詳細資訊,請參閱 tune2fs man 頁面。

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

  3. 若要為設定為 Ext3 分割區的根目錄檔案系統進行開機,請在 initrd 中包含 (Include) 模組 ext3jbd。若要執行這個動作,請以 root 身分編輯 /etc/sysconfig/kernel、將 ext3jbd 新增到 INITRD_MODULES 變數中。儲存這些變更之後,再執行 mkinitrd 指令。這樣就可以建置新的 initrd,並準備使用。

13.2.5. Reiser4

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

詳細的安全性概念

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

透過外掛程式的延伸性

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

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

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

13.2.6. 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 會保留 (預先配置) 檔案需要的可用空間。因此,可大幅降低檔案系統零散化。因為檔案的內容是分佈在檔案系統中,所以效能就會提高。