ext4

ext4

EXT4是第四代擴展文件系統(英語:Fourth extended filesystem,縮寫為ext4)是Linux系統下的日誌文件系統,是ext3文件系統的後繼版本。

Ext4是由Ext3的維護者Theodore Tso領導的開發團隊實現的,並引入到Linux2.6.19內核中。

Ext4產生原因是開發人員在Ext3中加入了新的高級功能,但在實現的過程出現了幾個重要問題:

(1)一些新功能違背向後兼容性。

(2)新功能使Ext3代碼變得更加複雜並難以維護。

(3)新加入的更改使原來十分可靠的Ext3變得不可靠。

由於這些原因,從2006年6月份開始,開發人員決定把Ext4從Ext3中分離出來進行獨立開發。Ext4的開發工作從那時起開始進行,但大部分Linux用戶和管理員都沒有太關注這件事情,直到2.6.19內核在2006年11月的發布。Ext4第一次出現在主流內核里,但是它當時還處於試驗階段,因此很多人都忽視了它。

2008年12月25日,Linux Kernel2.6.28的正式版本發布。隨著這一新內核的發布,Ext4文件系統也結束實驗期,成為穩定版。

系統特點


更大

Ext3文件系統最多只能支持32TB的文件系統和2TB的文件,根據使用的具體架構和系統設置,實際容量上限可能比這個數字還要低,即只能容納2TB的文件系統和16GB的文件。而Ext4的文件系統容量達到1EB,而文件容量則達到16TB,這是一個非常大的數字了。對一般的台式機和伺服器而言,這可能並不重要,但對於大型磁碟陣列的用戶而言,這就非常重要了。

更多

Ext3目前只支持32000個子目錄,而Ext4取消了這一限制,理論上支持無限數量的子目錄。

更多i-節點

Ext3文件系統使用32位空間記錄塊數量和i-節點數量,而Ext4文件系統將它們擴充到64位。

多塊分配

當數據寫入到Ext3文件系統中時,Ext3的數據塊分配器每次只能分配一個4KB的塊,如果寫一個100MB的文件就要調用25600次數據塊分配器,而Ext4的多塊分配器“Multiblock Allocator(MBAlloc)”支持一次調用分配多個數據塊。

持久性預分配

如果一個應用程序需要在實際使用磁碟空間之前對它進行分配,大部分文件系統都是通過向未使用的磁碟空間寫入0來實現分配,比如P2P軟體。為了保證下載文件有足夠的空間存放,常常會預先創建一個與所下載文件大小相同的空文件,以免未來的數小時或數天之內磁碟空間不足導致下載失敗。而Ext4在文件系統層面實現了持久預分配並提供相應的API,比應用軟體自己實現更有效率。

延遲分配

Ext3的數據塊分配策略是儘快分配,而Ext4的策略是儘可能地延遲分配,直到文件在緩衝中寫完才開始分配數據塊並寫入磁碟,這樣就能優化整個文件的數據塊分配,顯著提升性能。

盤區結構

Ext3文件系統採用間接映射地址,當操作大文件時,效率極其低下。例如,一個100MB大小的文件,在Ext3中要建立25600個數據塊(以每個數據塊大小為4KB為例)的映射表;而Ext4引入了盤區概念,每個盤區為一組連續的數據塊,上述文件可以通過盤區的方式表示為“該文件數據保存在接下來的25600個數據塊中”,提高了訪問效率。

新i-節點結構

Ext4支持更大的i-節點。之前的Ext3默認的i-節點大小128位元組,Ext4為了在i-節點中容納更多的擴展屬性,默認i-節點大小為256位元組。另外,Ext4還支持快速擴展屬性和i-節點保留。

日誌校驗功能

日誌是文件系統最常用的結構,日誌也很容易損壞,而從損壞的日誌中恢複數據會導致更多的數據損壞。Ext4給日誌數據添加了校驗功能,日誌校驗功能可以很方便地判斷日誌數據是否損壞。而且Ext4將Ext3的兩階段日誌機制合併成一個階段,在增加安全性的同時提高了性能。

無日誌模式

日誌總歸會佔用一些開銷。Ext4允許關閉日誌,以便某些有特殊需求的用戶可以藉此提升性能。

默認啟用Barrier

磁碟上配有內部緩存,以便重新調整批量數據的寫操作順序,優化寫入性能,因此文件系統必須在日誌數據寫入磁碟之後才能寫Commit記錄。若Commit記錄寫入在先,而日誌有可能損壞,那麼就會影響數據完整性。Ext4文件系統默認啟用Barrier,只有當Barrier之前的數據全部寫入磁碟,才能寫Barrier之後的數據。

在線碎片整理

儘管延遲分配、多塊分配和盤區功能可以有效減少文件的碎片,但碎片還是不可避免會產生。Ext4支持在線碎片整理,並將提供e4defrag工具進行個別文件或整個文件系統的碎片整理。

支持快速fsck

以前的文件系統版本執行fsck時很慢,因為它要檢查所有的i-節點,而Ext4給每個塊組的i-節點表中都添加了一份未使用i-節點的列表,所以Ext4文件系統做一致性檢查時就可以跳過它們而只去檢查哪些在使用的i-節點,從而提高了速度。

納秒級時間

Ext4之前的擴展文件系統的時間戳都是以秒為單位的,這已經能夠應付大多數設置,但隨著處理器的速度和集成程度(多核處理器)不斷提升,以及Linux開始向其他應用領域發展,它將時間戳的單位提升到納秒。
Ext4給時間範圍增加了兩個位,從而讓時間壽命在延長500年,Ext4的時間戳支持的日期到2514年4月25日,而Ext3隻達到2038年1月18日。

向前向後兼容


Ext4文件系統在Ext3的基礎之上做了很多改進,引入了大量新功能,這些改進主要是為了提高未來的Linux系統的性能。
雖然Ext4做了很多改進,但依然能夠與Ext3實現向後和向前的兼容性,這一點的確很難得。
因為Ext3文件系統是Linux操作系統上最受歡迎的文件系統之一,所以Ext4的研發人員考慮到應該讓Ext3用戶能夠輕鬆遷移到Ext4,為此,Ext4被設計為在盤區結構方面具有向後和向前的兼容性。
首先Ext4是可以向前兼容的,也就是說Ext3文件系統可以掛載為Ext4文件系統使用,不過為了充分利用Ext4的優勢,必須實現文件系統的遷移,以轉換和利用新的Ext4格式。
Ext3文件系統可以在線轉換為Ext4,但這樣並不能用到Ext4的全部新特性,只有將文件系統重新創建為Ext4才比較徹底。
Ext4的向後兼容,向後兼容就是指可以將Ext4文件系統掛載為Ext3文件系統使用,但是前提是Ext4文件系統不能使用盤區功能。

如何使用


目前的Ext4文件系統是第一個穩定版本,整個的開發進度和發布計劃都被放緩了,就是為了保證用戶可以享受到“和使用Ext3同等級”的穩定。
一個非常重要的事情是,目前還沒有Ext4 Grub。更準確的說,就是目前沒有grub支持ext4。換句話說,就是你目前的發行版本的grub不支持ext4。目前我們的Grub2正在開發之中,在ubuntu和debian發行版中已經有了grub2的grub-pc軟體包了,但是目前官方仍沒有宣布正式支持。在Google SoC中也包含了一個開發版本,且發布了相關補丁。你可以試用一下,你自己選擇嘍。
在你的發行版本的下一個新版本之中,可能會有相關的支持出現。所以安全起見,盡量保持你的/boot目錄為Ext3文件系統類型。
警告歸警告,轉換到Ext4其實是件很容易的事情,如下方法均可:
1建立文件系統。
這是最簡單的方法,你只需要升級你的e2fsprogs到Ext4,並且使用mkfs.ext4命令創建文件系統即可。
2遷移。
你需要使用tune2fs命令和fsck命令,並且當前文件系統需要被卸載才可以。運行命令
tune2fs-O extents,uninit_bg,dir_index/dev/yourfilesystem
此後,你務必運行fsck命令,否則Ext4將無法掛載你的新文件系統。在fsck過程中,可能會有一些error需要你的確認。你可以考慮使用-p選項,來告訴fsck你想要的是“automatic repair”,即fsck-pf/dev/yourfilesystem
3掛載。
你可以使用mount-text4/dev/yourpartition/mnt來將一個Ext3文件系統用Ext4來掛載,但你將享受不到那些需要改變磁碟格式才可以享受得到的特性,比如Extents。你可以享受到的只有那些不需要改變磁碟格式即可享受得到的特性,比如多塊分配、延遲分配等。我們當然不建議您這麼做,因為Ext4的優秀特性,您將無法體會。