歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux文件系統EXT3簡介

Linux文件系統EXT3簡介

日期:2017/2/28 15:46:15   编辑:Linux教程

Daniel Robbins

總裁兼 CEO, Gentoo Technologies, Inc.

2001 年 11 月

Linux 的 2.4 發行版帶來了使用多種新文件系統的可能性,包括 Reiserfs、XFS、GFS 以及其它文件系統。這些文件系統聽起來很酷,但是它們到底能做什麼,它們擅長於什麼,還有,您到底如何著手在 Linux 生產環境下安全地使用它們呢?Daniel Robbins 通過向您展示如何在 Linux 2.4 上設置這些新的高級文件系統來回答這些問題。在這一部分,Daniel 研究了 ext3,它是 ext2 的新改進版,具有日志記錄能力。

在前面幾部分中,我們花費了一些精力去研究非傳統文件系統(譬如 tmpfs 和 devfs)。現在,是時候回到基於磁盤的文件系統上來了,我們將通過研究 ext3 來實現這個目的。ext3 文件系統(由 Stephen Tweedie 博士設計)構建在現有的 ext2 文件系統的框架上;實際上,除了一個微小(但重要)的區別 ― ext3 支持日志記錄以外,ext3 和 ext2 非常相似。但正是因為具有了這個小小的增加,您會發現 ext3 具有幾種令人驚訝和富有吸引力的能力。在本文中,我將讓您充分了解與當前可用的其它日志記錄文件系統相比,ext3 有哪些優缺點。在我的下一篇文章中,我們將設置和運行 ext3。

理解 Ext3

那麼,與 ReiserFS 相比,ext3 到底如何呢?在以前的文章中,我解釋了 ReiserFS 是如何充分適合處理小文件的(4K 以下),並且,在某些情況下,ReiserFS 處理小文件的能力比 ext2 和 ext3 強十到十五 倍。但盡管 ReiserFS 有許多長處,它還是有弱點。在當前的 ReiserFS(版本 3.6)實現中,與 ext2 和 ext3 相比,尤其是讀取大的郵件目錄時,特定文件訪問模式實際上可能導致 特別糟糕的性能。還有,ReiserFS 沒有好的 NFS 兼容性跟蹤記錄,同時稀疏文件性能也較差。 相反,ext3 是一個非常 全面的文件系統。ext3 很象 ext2;它不會為您提供象 ReiserFS 那樣特別快的小文件性能,但是,它也不會給您帶來意外的性能或功能性瓶頸。

ext3 最妙的特性之一是:因為 ext3 基於 ext2 的代碼,所以它的磁盤格式和 ext2 的相同;這意味著,一個干淨卸裝的 ext3 文件系統可以作為 ext2 文件系統毫無問題地重新掛裝。並且不僅如此。應該感謝 ext2 和 ext3 都使用相同的元數據,因而有可能執行 ext2 到 ext3 文件系統的現場升級。是的,您的理解是正確的。通過升級一些關鍵系統實用程序、安裝新的 2.4 內核,並在每個文件系統上輸入單條 tune2fs 命令,就可以把現有的 ext2 服務器轉換成日志記錄 ext3 系統。甚至可以在 ext2 文件系統 已掛裝的情況下進行這些操作。轉換是安全的、可逆的、並且令人難以置信地簡單,和到 XFS、JFS 或 ReiserFS 的轉換不同,您不必備份和從頭創建文件系統。現在花一些時間思考一下,有數以千計的 ext2 生產服務器,只要幾分鐘時間就能升級到 ext3;那麼,您就會充分理解 ext3 對於 Linux 社區的重要性了。

如果非要用一個詞來描述 ext3,我會說“舒適”。在已有的 ext2 系統上安裝啟用 ext3 的過程輕松得令人難以置信,並且升級以後,也不會導致任何意外的性能急劇下降。並且,ext3 在舒適方面還有一個優點,那就是,ext3 恰巧又是 Linux 可用的最 可靠的日志記錄文件系統之一,我將在下面解釋這一點。

Ext3 可靠性

除了與 ext2 兼容之外,ext3 還通過共享 ext2 的元數據格式繼承了 ext2 的其它優點。譬如,ext3 用戶可以使用一個穩固的 fsck 工具。您會回想起使用日志記錄文件系統的要點之一是首先避免對徹底的 fsck 的需求,但是如果您確實要從脆弱的內核、壞的硬盤或者別的什麼地方獲得毀壞的元數據,您將非常感激 ext3 從 ext2 繼承了 fsck 這個事實。相反,ReiserFS 的 fsck 還很幼稚,當脆弱的元數據 真的出現時,對脆弱元數據的修復過程將是困難和危險的。

僅元數據日志記錄

有趣的是,ext3 處理日志記錄的方式與 ReiserFS 和其它日志記錄文件系統所用的方式迥異。使用 ReiserFS、XFS 和 JFS 時,文件系統驅動程序記錄 元數據,但不提供 數據日志記錄。使用 僅元數據日志記錄,您的文件系統元數據將會異常穩固,因而可能永遠不需要執行徹底 fsck。然而,意外的重新引導和系統鎖定可能會導致最近修改 數據的明顯毀壞。Ext3 使用一些創新的解決方案來避免這些問題,我們將對此做稍微深入的研究。

但首先,重要的是確切理解僅元數據日志記錄最終是如何危害您的。舉例來說,假設您正在修改名為 /tmp/myfile.txt 的文件時,機器意外鎖定,被迫需要重新引導。如果您使用的是僅元數據日志記錄文件系統,譬如 ReiserFS、XFS 或者 JFS,文件系統元數據將容易地修復,這要感謝元數據日志,您不必耐著性子等待艱苦的 fsck 了。

但是,存在一種明顯的可能性:在將 /tmp/myfile.txt 文件裝入到文本編輯器時,文件不僅僅丟失最近的更改,而且還包含許多亂碼甚至可能完全不可讀的信息。這種情況並不總會發生,但它 可能並且經常發生。

下面解釋原因。典型的日志記錄文件系統(譬如 ReiserFS、XFS 和 JFS)對元數據有特別處理,但是對數據不夠重視。在上述示例中,文件系統驅動程序處於修改一些文件系統塊的過程中。文件系統驅動程序更新適當的元數據,但是沒有時間將其緩存中的數據刷新到磁盤的新塊中。因此,當您將 /tmp/myfile.txt 文件裝入文本編輯器時,文件的部分或全部包含亂碼 ― 在系統鎖定之前來不及初始化的數據塊。

ext3 方法

既然我們對這個問題已經有了一個總的很好的理解,讓我們來看 ext3 是如何實現日志記錄的。在 ext3 裡,日志記錄代碼使用一個特殊的稱為“日志記錄塊設備”層或 JBD 的 API。JBD 被設計成在任何塊設備上實現日志的特殊目的。Ext3 通過“鉤入(hooking in)”JBD API 來實現其日志記錄。例如,ext3 文件系統代碼將正在執行的修改告知 JBD,並且還會在修改磁盤上包含的特定數據之前請求 JBD 的許可。通過執行這些操作,給予了 JBD 代表 ext3 文件系統驅動程序管理日志的適當機會。這是很好的安排,因為 JBD 是作為一個單獨的、一般實體而開發的,將來它可以用於向其它文件系統添加日志記錄能力。

關於 JBD 管理的 ext3 日志有一些巧妙的特性。其中之一是,ext3 的日志存儲在一個索引節點中 ― 基本上是個文件。能否看到這個位於 /.journal 的文件,取決於您是如何在文件系統上“啟用 ext3”的。當然,通過將日志存儲在索引節點中,ext3 可以向文件系統添加必要的日志,而不需要對 ext2 元數據進行不兼容擴展。 這是 ext3 文件系統保持對 ext2 元數據,以及 ext2 文件系統驅動程序的向後兼容性的關鍵方式之一。

不同的日志記錄方法

不必驚訝,確實有許多方法用於實現日志。例如,文件系統開發者可能會設計出一種日志,該日志存儲在主機文件系統上需要修改的 字節范圍。這種方法的好處在於,日志能夠以一種非常高效的方式存儲許多對文件系統的微小修改,這是因為它只記錄需要修改的個別字節,而不記錄除此以外的任何信息。

JBD 使用另外一種(從某種意義來說是更好的)方法。JBD 存儲完整的被修改的文件系統塊本身,而不是記錄必定會被更改的字節范圍。ext3 文件系統驅動程序也使用這種方法,存儲內存中被修改的塊(大小為 1K、2K 或 4K)的完整副本,以跟蹤暫掛的 IO 操作。開始,這看起來有點浪費。畢竟,包含已修改數據的完整塊中還可能包含 未修改的(已經在磁盤上)數據。

JBD 所使用的方法稱為 物理日志記錄,這意味著 JBD 使用完整的物理塊,作為實現日志的主要媒介。相反,只存儲已修改的字節范圍而非完整塊的方法稱為 邏輯日志記錄,這是 XFS 所使用的方法。因為 ext3 使用物理日志記錄,所以 ext3 日志 將具有比其它文件系統日志(例如,XFS 日志)更大的相對磁盤占用。但是,因為 ext3 在文件系統內部和日志中使用完整塊,ext3 處理的復雜度比實現邏輯日志記錄的要小。另外,完整塊的使用允許 ext3 執行一些額外的優化,譬如,將多個暫掛的 IO 操作“壓扁”到同一內存數據結構的單個塊中。 接下來,這種優化允許 ext3 將這多個更改在一次寫操作中寫到磁盤上,而不需要多次寫操作。此外,因為文字塊數據存儲在內存中,這些內存數據在寫到磁盤之前,不必或只需作很少更改,大大減少了 CPU 開銷。

Ext3,數據保護者

現在,我們最後來了解一下 ext3 文件系統是如何高效地提供元數據 和數據日志記錄,以避免在本文前面部分所描述的數據毀壞問題的。實際上,ext3 有兩種確保數據和元數據完整性的方法。

最初,ext3 被設計用來執行完整數據和元數據日志記錄。在這種方式下(稱之為“data=journal”方式),JBD 將所有對數據和元數據的更改都記錄到文件系統中。因為數據和元數據都被記錄,JBD 可以使用日志將元數據 和數據恢復到一致狀態。完整數據日志記錄的缺點是它可能會比較慢,但可以通過設置相對較大日志來減少性能損失。

最近,ext3 添加了一種新的日志記錄方式,該方式提供完整日志記錄的好處而不會帶來嚴重的性能損失。這種新方式只對元數據進行日志記錄。但是,ext3 文件系統驅動程序保持對與每個元數據更新對應的特殊 數據塊的跟蹤,將它們分組到一個稱為事務的實體中。當事務應用於適當的文件系統時,數據塊首先被寫到磁盤。一旦寫入數據塊,元數據將隨後寫入日志。通過使用這種技術(稱為“data=ordered”方式),即使只有元數據更改被記錄到日志中,ext3 也能夠提供數據和元數據的一致性。ext3 缺省使用這種方式。

結束語

最近,有許多人在嘗試確定哪種 Linux 日志記錄文件系統是“最好的”。實際上,沒有一個針對每個應用程序都“合適的”文件系統,每個文件系統都有自身的長處。這是有這麼多下一代 Linux 文件系統供選擇的好處之一。所以,理解每種文件系統的長處和弱點,以便對使用哪種文件系統作出一個有根據的選擇,遠遠優於選出一個絕對的“最好的”文件系統,並將它用於所有可能的應用程序。

Ext3 具有許多長處。它被設計得極易部署。它基於穩固的 ext2 文件系統代碼,並繼承了一個很好的 fsck 工具。還有,ext3 的日志記錄能力經過特別設計,以確保元數據��數據的完整性。總之,ext3 確實是一個很棒的文件系統,並且是現在仍受到推崇的 ext2 文件系統的一個合格的繼承者。請關注我的下一篇文章,那時我們將設置和運行 ext3。在那之前,您可能會需要查看下列參考資料。

Copyright © Linux教程網 All Rights Reserved