天天看點

ext4檔案系統新特性

Ext4是核心版本2.6.28的重要部分。

介紹

Ext4是Linux檔案系統的一次革命。在很多方面,Ext4相對于Ext3的進步要遠超過Ext3相對于Ext2的進步。Ext3相對于 Ext2的改進主要在于日志方面,但是Ext4相對于Ext3的的改進是更深層次的,是檔案系統資料結構方面的優化。一個高效的、優秀的、可靠的和極具特點的檔案系統就此誕生。

相容性

任何Ext3檔案系統都可以輕松的遷移到Ext4檔案系統,你隻需要在隻讀模式下運作幾條指令即可。這就意味着你完全可以不格式化硬碟、不重裝作業系統、不重裝軟體環境,就能夠順利的更新到Ext4檔案系統。這種更新方法不會損害到你硬碟上的資料和資料,因為Ext4僅會在新的資料上使用,而基本不會改動原有資料。

更大的檔案系統/檔案大小

Ext3支援最大16TB的檔案系統,2TB的檔案大小。Ext4将支援最大1EB的檔案系統,16TB的檔案大小。

1EB=1024PB=1024*1024TB=1024*1024*1024GB

上述這個特性是由于Ext4采用了48位尋址。有人會問,為什麼不是64位呢?因為就目前的開發進展來看,實作64位尋址存在一些技術限制,但是Ext4已經在考慮這個問題了,在不久的将來,Ext4将實作完全的64位支援。

子目錄可擴充性

目前的Ext3中,單個目錄下的子目錄數目的上限是32000個。而在Ext4中打破了這種限制,可以建立無限多個子目錄。

Extents

傳統的類UNIX檔案系統,比如Ext3,都是使用一個間接資料塊映射表來記錄每一個資料塊的配置設定情況的。但是這種機制對于超大檔案的存儲是有缺陷

的,特别是當對超大檔案進行删除和截斷操作時。映射表會對每一個資料塊進行記錄,而一個超大檔案将占有很多的資料塊,是以造成映射表将變得無比臃腫,難于

維護。Ext4引入了一個新的概念,叫做“Extents”。一個Extents是一個位址連續的資料塊的集合。比如一個100MB的檔案将被配置設定給一個

單獨的Extents,這樣就不用像Ext3那樣新增25600個資料塊的記錄(一個資料塊是4KB)。而超大型檔案會被分解在多個extents裡。

Extents的實作提高了檔案系統的性能,減少了檔案碎片。

多塊配置設定

在Ext3中,“将新的資料寫入磁盤的哪些空閑塊”是由塊配置設定器來控制的。但是Ext3的塊配置設定器存在一定缺陷,那就是它一次隻能夠配置設定一個資料塊

(4KB),這就意味着,如果系統需要向磁盤中寫入100MB的資料,那麼需要調用塊配置設定器25600次,而且由于塊配置設定器無法獲知總的配置設定塊數,是以也

無法對配置設定空間和配置設定位置進行優化。

在Ext4中,使用了“多塊配置設定器”,即一次調用可以配置設定多個資料塊,這種機制提高了系統的性能,而且使得配置設定器有了充足的優化空間。

延遲配置設定

延遲配置設定(Delayed allocation)是一項僅僅少數現代檔案系統才具有的優秀特性,比如XFS、ZFS、btrfs(better

FS)以及Reiser4。它能夠盡可能的積累更多的資料塊再配置設定出去,相對比,傳統的檔案系統則會盡快的将資料塊配置設定出去,如Ext3,reiser3

等。

這項特性會和Extents特性以及多塊配置設定特性相結合,使得磁盤IO性能得到顯著提高。

更快速的FSCK

在Ext3中,Fsck本身是個速度很慢的操作,因為它要檢查檔案系統裡的每一個“i節點”。但是,Ext4會維護一個未使用的“i節點”表,在進行

fsck操作時,會跳過表中節點,隻檢查正在使用中的i節點。這種機制使得fsck的效率提高為原有Ext3檔案系統的2到20倍。不過,你要注意到一

點,那就是這個未使用的i節點表是由fsck來維護的,而不是由Ext4,是以你必須要首先運作一次fsck來生成,這樣,在下次再運作fsck時才可以

享受提速。(雖然表是由fsck來維護的,但你還是需要從Ext3更新到Ext4才能夠享受這項功能)

日志校驗

日志要算是磁盤中最常用的部分了,也是最容易使硬碟出問題的機制之一。如果你不幸使用一個已經崩潰的日志來恢複系統的話,将導緻更大規模的系統崩潰。

Ext4提供校驗日志資料的功能,可以檢視其潛在錯誤。而且,Ext4還會将Ext3日志機制中的“兩階段送出”動作合并為一個步驟,這種改進将使檔案系

統的操作性能提升20%。這就是Ext4在日志機制方面對可靠度和性能的雙重提升。

線上磁盤整理

這個特性沒有包括在核心版本2.6.28之中,但是它很有可能會在下一個版本中引入。

雖然Extents、多塊配置設定和延遲配置設定都有助于減少磁盤碎片,但是磁盤碎片仍然會産生。舉例來說:你在一個目錄下建立了三個檔案 (f1,f2,f3),它們被按序寫入到連續的一段記憶體之

中。然而幾天之後,你想要更新檔案f2,也就是位于這段連續記憶體的中間那一段的那個檔案。我要向

這個檔案中增加一些字元。很明顯,在這段連續記憶體之中已經沒有地方放下增加的這些字元,這别無選擇,隻能将這個f2檔案移動到一個能容納下的新的連續記憶體

之中。這導緻了f2檔案和f1、f3檔案離的非常遠,讀取也相對緩慢了。看,這就産生了磁盤碎片了。

還有,可引導檔案應該被放在連續的記憶體之中,但是磁盤整理機制并不知道哪些檔案是可引導檔案。

為了解決上述問題,Ext4将支援線上磁盤整理,e4defrag工具也被用來支援更智能的磁盤碎片整理功能。

結點相關特性

更大的i結點:Ext3支援自定義i結點大小,但是預設的i結點大小是128位元組,Ext4将預設大小提升到256位元組。增加的空間用來存儲更多的結點資訊,這樣有利于提升磁盤性能。

i結點預留機制:當建立一個目錄時,若幹i結點會被預留下來,等新的檔案在此目錄中建立時,這些預留的i結點就可以立即被使用。檔案的建立和删除将變得更加高效。

毫微秒級的時間戳:在Ext3中,時間精度是秒。在Ext4中,時間精度提升到了毫微秒。

可持續預配置設定

這個特性,已經出現在了Ext3的最後幾個核心版本中,并且也可以由glibc在不支援此功能的檔案系統中模拟産生,允許應用程式去預配置設定磁盤空間。應用程式告知檔案系統給預留出一定的空間,檔案系統會據此預配置設定必要的資料塊,但是這些資料塊将會是空的,直到應用程式向裡面寫入資料為止。這個機制會常常在P2P應用程式中用到,因為P2P應用程式下載下傳文

件常常需要幾天的時間。這種機制也防止了磁盤碎片的産生,因為檔案系統會一次性配置設定盡可能連續的資料塊給應用程式。再者,這種機制對于實時系統非常重要,

因為一旦沒有這種機制,可能将會導緻在一次重要操作的半截,磁盤空間已滿。這項特性是通過調用posix_fallocate()來實作的。

如何使用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的優秀特性,您将無法體會….

本文轉自葉金榮51CTO部落格,原文連結:http://blog.51cto.com/imysql/1879722,如需轉載請自行聯系原作者