剖析ext4檔案系統

2022-04-01 23:21:37 字數 4545 閱讀 2110

簡介

第 4 個擴充套件檔案系統,即 

ext4

,是下一代的日誌檔案系統,它與上一代檔案系統 ext3 是向後相容的。儘管 ext4 目前還不是標準檔案系統,但它將成為大部分下一代 linux® 發行版的預設檔案系統。了解 ext4,以及它為什麼將成為您最喜歡的新檔案系統。

linux 核心的每次發行都伴隨一些驚喜,今年 12 月份發行的 2.6.28 也不例外。這個發行版是首個穩定的 ext4 檔案系統(它還包含其他出色的特性,比如正在開發的 btrfs)。這個下一代擴充套件檔案系統提供更好的伸縮性、可靠性和許多新功能。ext4 的伸縮性如此之大,以致最大的檔案系統所用的磁碟空間將達到 100 萬 tb。

擴充套件檔案系統的簡史

vfs 是乙個從上層檔案系統使用者提取底層檔案系統細節的層。在提取過程中,vfs 允許在特定 linux 系統上同時支援多檔案系統。

第乙個受 linux 支援的檔案系統是 minix 檔案系統。這個檔案系統有嚴重的效能問題,因此出現了另乙個針對 linux 的檔案系統,即擴充套件檔案系統。第 1 個擴充套件檔案系統(ext1)由 remy card 設計,並於 1992 年 4 月引入到 linux 中。ext1 檔案系統是第乙個使用虛擬檔案系統(vfs)交換的檔案系統。虛擬檔案系統交換是在 0.96c 核心中實現的,支援的最大檔案系統為 2 gb。

第 2 個擴充套件檔案系統(ext2)也是由 remy card 實現的,並於 1993 年 1 月引入到 linux 中。它借鑑了當時檔案系統(比如 berkeley fast file system [ffs])的先進想法。ext2 支援的最大檔案系統為 2tb,但是 2.6 核心將該檔案系統支援的最大容量提公升到 32tb。

第 3 個擴充套件檔案系統(ext3)是 linux 檔案系統的重大改進,儘管它在效能方面遜色於某些競爭對手。ext3 檔案系統引入了日誌 概念,以在系統突然停止時提高檔案系統的可靠性。雖然某些檔案系統的效能更好(比如 silicon graphics 的 xfs 和 ibm® journaled file system [jfs]),但 ext3 支援從使用 ext2 的系統進行就地(in-place)公升級。ext3 由 stephen tweedie 實現,並於 2001 年 11 月引入。

今天,我們已經擁有第 4 個擴充套件檔案系統(ext4)。ext4 在效能、伸縮性和可靠性方面進行了大量改進。最值得一提的是,ext4 支援 1 eb 的檔案系統。ext4 是由 theodore tso(ext3 的維護者)領導的開發團隊實現的,並引入到 2.6.19 核心中。目前,它在 2.6.28 核心中已經很穩定(到 2008 年 12 月為止)。

ext4 從競爭對手那裡借鑑了許多有用的概念。例如,在 jfs 中已經實現了使用區段(extent)來管理塊。另乙個與塊管理相關的特性(延遲分配)已經在 xfs 和 sun microsystems 的 zfs 中實現。

在 ext4 檔案系統中,您可以發現各種改進和創新。這些改進包括新特性(新功能)、伸縮性(打破當前檔案系統的限制)和可靠性(應對故障),當然也包括效能的改善。

功能ext4 引入了大量新功能,但最重要的是與 ext3 的向後和向前相容性,以及在時間戳上的改進。這些改進立足於提高未來的 linux 系統的效能。

向後和向前相容性

由於 ext3 是 linux 上最受歡迎的檔案系統之一,因此應該能夠輕鬆遷移到 ext4。為此,ext4 被設計為在 extent 方面具有向後和向前相容性(參見圖 1)。ext4 與 ext3 是向前相容的,這樣就可以將 ext3 檔案系統掛載為 ext4 檔案系統。為了充分利用 ext4 的優勢,必須實現檔案系統的遷移,以轉換和利用新的 ext4 格式。您還可以將 ext4 掛載為 ext3(向後相容),但前提是 ext4 檔案系統不能使用區段(將在效能小節對其進行討論)。

圖 1. ext4 的向後和向前相容性

提高時間戳解析度和擴充套件範圍

令人驚訝的是,ext4 之前的擴充套件檔案系統的時間戳都是以秒為單位的。這已經能夠應付大多數設定,但隨著處理器的速度和整合程度(多核處理器)不斷提公升,以及 linux 開始向其他應用領域發展(比如高效能計算),基於秒的時間戳已經不夠用。ext4 設計時間戳時考慮到未來的發展,它將時間戳的單位提公升到納秒。ext4 給時間範圍新增了兩個位,從而讓時間壽命再延長 500 年。

伸縮性檔案系統未來發展的乙個重要方面就是伸縮性,即根據需求進行伸縮的能力。ext4 以多種方式現實了強大的伸縮性,它的伸縮性超越了 ext3,並且在檔案系統元資料管理方面開闢了新領域。

突破檔案系統的限制

ext4 的乙個明顯差別就是它支援更大的檔案系統、檔案和子目錄。ext4 支援的最大檔案系統為 1 eb(1000 pb)。雖然根據今天的標準這個檔案系統已經非常巨大,但儲存空間的消費會不斷增長,因此 ext4 必須考慮到未來的發展。ext4 支援最大 16 tb 的檔案(假設由 4kb 的塊組成),這個容量是 ext3 的 8 倍。

最後,ext4 也擴充套件了子目錄的容量,將其從 32kb 擴充套件到無窮大。這是極端情況,我們還需要考慮檔案系統的層次結構,因為它的最大儲存容量為 1 eb。此外,目錄索引也優化為類似於雜湊 b 樹結構,因此儘管限制更加多,但 ext4 支援更快的查詢。

區段ext3 分配空間的方式是其主要缺點之一。ext3 使用空閒空間位對映來分配檔案,這種方式不是很快,並且伸縮性不強。ext3 的格式對小檔案而言是很高效的,但對於大檔案則恰恰相反。ext4 使用區段取代 ext3 的機制,從而改善了空間的分配,並且支援更加高效的儲存結構。區段 是一種表示一組相鄰塊的方式。使用區段減少了元資料,因為區段維護關於一組相鄰塊的儲存位置的資訊(從而減少了總體元資料儲存),而不是乙個塊的儲存位置的資訊。

ext4 的區段採用分層的方法高效地表示小檔案,並且使用區段樹高效地表示大檔案。例如,單個 ext4 inode 有足夠的空間來引用 4 個區段(每個區段表示一組相鄰的塊)。對於大檔案(包括片段檔案),乙個 inode 能夠引用乙個索引節點,而每個索引節點能夠引用乙個葉節點(引用多個區段)。這種持續的區段樹為大檔案(尤其是分散的檔案)提供豐富的表示方式。這些節點還包含自主檢查機制,以阻止檔案系統損壞帶來威脅。

效能衡量乙個新檔案系統的最重要指標就是它的根本效能。這常常是最難實現的指標,因為當檔案系統變得龐大並且要求實現高可靠性時,將會以損害效能為代價。但是,ext4 不僅解決了伸縮性和可靠性,它還提供各種改善效能的方法。

檔案級預分配

某些應用程式,比如資料庫或內容流,要求將檔案儲存在相鄰的塊上(利用相鄰塊的讀優化和最大化讀的命令-塊比率)。儘管區段能夠將相鄰塊劃分為片段,但另一種更強大的方法是按照所需的大小預分配比較大的相鄰塊(xfs 以前就是採用這種方法)。ext4 通過乙個新的系統呼叫來實現這個目的,這個呼叫將按照特定的大小預分配並初始化檔案。然後,您就可以寫入必要的資料,並為資料提供不錯的讀效能。

延遲塊分配

另乙個基於檔案大小的優化是延遲分配。這種效能優化延遲磁碟上的物理塊的分配,直到塊被刷入到磁碟時才進行分配。這種優化的關鍵是延遲物理塊的分配,直到需要在磁碟上寫這些物理塊時才對其進行分配並寫到相鄰的塊。這類似於持久化預分配,惟一的區別是檔案系統會自動執行這項任務。不過如果預先知道檔案的大小時,持久化預分配是更好的選擇。

多個塊分配

這是最後乙個與相鄰塊相關的優化,即針對 ext4 的塊分配器。在 ext3 中,塊分配器的工作方式是每次分配乙個塊。當需要分配多個塊時,非相鄰塊中可能存在相鄰的資料。ext4 使用塊分配器修復了這個問題,它能夠在磁碟上一次分配多個塊。與前面其他優化一樣,這個優化在磁碟上收集相關的資料,以實現相鄰讀優化。

多個塊分配的另乙個方面是分配塊時需要的處理量。記住,ext3 一次只分配乙個塊。在最簡單的情況下,每個塊的分配都要有乙個呼叫。如果一次分配多個塊,對塊分配器的呼叫就會大大減少,從而加快分配並減少處理量。

可靠性ext4 檔案系統可能會擴充套件得比較大,這將導致可靠性問題。但 ext4 通過許多自主保護和自主修復機制來解決這個問題。

執行檔案系統日誌校驗和

和 ext3 一樣,ext4 也是乙個日誌檔案系統。日誌記錄 就是通過日記(磁碟上相鄰區域的專門迴圈記錄)記錄檔案系統的變更的過程。因此,根據日誌對物理儲存執行實際變 更更加可靠,並且能夠確保一致性,即使在操作期間出現系統崩潰或電源中斷。這樣做可以減少檔案系統損壞的機率。

但是即使進行日誌記錄,如果日誌出現錯誤仍然會導致檔案系統損壞。為了解決這個問題,ext4 對日誌執行校驗和,確保有效變更能夠在底層檔案系統上正確完成。在 參考資料 小節可以找到其他關於日誌記錄(ext4 的重要部分)的資料。

ext4 支援根據使用者需求採用多種模式的日誌記錄。例如,ext4 支援 writeback 模式,它僅記錄元資料;或 ordered 模式,它記錄元資料,但寫為元資料的資料是從日誌中寫入的;或 journal 模式(最可靠的模式),它同時記錄元資料和資料。注意,雖然 journal 模式是確保檔案系統一致的最佳選擇,但它也是最慢的,因為所有資料都要經過日誌。

結束語針對 linux 的擴充套件檔案系統有著漫長而豐富的歷史 — 從 1992 年首次引入 ext1 到 2008 年引入 ext4。ext4 是首個專門為 linux 設計的檔案系統,並且事實證明它是高效、穩定、強大的檔案系統。ext4 隨著檔案系統研究的深入而不斷發展,並且借鑑其他新檔案系統的先進思想(比如 xfs、jfs、reiser 和 iron 容錯檔案系統技術)。儘管目前** ext5 將會是什麼樣子還為時過早,但有一點是很明確的,它將主導企業級 liunx 系統。

此文是**,源位址見:

ext4檔案系統綜述

從本篇部落格起,我們開始研究現代檔案系統ext4,說其現代是因為其相比傳統檔案系統,有著更現代化的設計。這些先進的特性體現在本文所要敘述的以下方面。ext4是linux檔案系統的一次革命。在很多方面,ext4相對於ext3的進步要遠超過ext3相對於ext2的進步。ext3相對於 ext2的改進主要...

EXT4檔案組織 EXT4檔案系統詳解2

ext4 檔案系統是從 ext2 和 ext3 上發展而來的,這裡我們來分析它們是如何將乙個檔案的內容組織起來,從而在磁碟上 拼湊出乙個檔案 出於對ext4檔案系統相容性的考慮,我們嘗試在先從ext2檔案系統的檔案組織方式說起。ext2檔案節點定義 ext2 檔案節點變數有點多,我們需要關注i bl...

ext4 檔案系統的優化

ext4作為ext3的下一代,是linux上的經典檔案系統,功能上雖不及zfs btrfs那麼花哨,但是可靠實用,被廣泛部署在企業級的生產環境中。ext4 作為乙個通用檔案系統,預設情況下已經工作良好。通過下面的調優,可以獲得額外的效能。掛載選項 1 noatime atime,它通常沒有用處,尤其...