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