Ext4是Linux文件系統(tǒng)的一次革命。在很多方面,Ext4相對于Ext3的進步要遠超過Ext3相對于Ext2的進步。Ext3相對于 Ext2的改進主要在于日志方面,但是Ext4相對于Ext3的的改進是更深層次的,是文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)方面的優(yōu)化。一個高效的、優(yōu)秀的、可靠的和極具特點的文件系統(tǒng)就此誕生。 兼容性 任何Ext3文件系統(tǒng)都可以輕松的遷移到Ext4文件系統(tǒng),你只需要在只讀模式下運行幾條命令即可。這就意味著你完全可以不格式化硬盤、不重裝操作系統(tǒng)、不重裝軟件環(huán)境,就能夠順利的升級到Ext4文件系統(tǒng)。這種升級方法不會損害到你硬盤上的數(shù)據(jù)和資料,因為Ext4僅會在新的數(shù)據(jù)上使用,而基本不會改動原有數(shù)據(jù)。 更大的文件系統(tǒng)/文件大小 Ext3支持最大16TB的文件系統(tǒng),2TB的文件大小。Ext4將支持最大1EB的文件系統(tǒng),16TB的文件大小。 1EB=1024PB=1024*1024TB=1024*1024*1024GB 上述這個特性是由于Ext4采用了48位尋址。有人會問,為什么不是64位呢?因為就目前的開發(fā)進展來看,實現(xiàn)64位尋址存在一些技術(shù)限制,但是Ext4已經(jīng)在考慮這個問題了,在不久的將來,Ext4將實現(xiàn)完全的64位支持。 子目錄可擴展性 目前的Ext3中,單個目錄下的子目錄數(shù)目的上限是32000個。而在Ext4中打破了這種限制,可以創(chuàng)建無限多個子目錄。 Extents 傳統(tǒng)的類UNIX文件系統(tǒng),比如Ext3,都是使用一個間接數(shù)據(jù)塊映射表來記錄每一個數(shù)據(jù)塊的分配情況的。但是這種機制對于超大文件的存儲是有缺陷 的,特別是當對超大文件進行刪除和截斷操作時。映射表會對每一個數(shù)據(jù)塊進行記錄,而一個超大文件將占有很多的數(shù)據(jù)塊,因此造成映射表將變得無比臃腫,難于 維護。Ext4引入了一個新的概念,叫做“Extents”。一個Extents是一個地址連續(xù)的數(shù)據(jù)塊的集合。比如一個100MB的文件將被分配給一個 單獨的Extents,這樣就不用像Ext3那樣新增25600個數(shù)據(jù)塊的記錄(一個數(shù)據(jù)塊是4KB)。而超大型文件會被分解在多個extents里。 Extents的實現(xiàn)提高了文件系統(tǒng)的性能,減少了文件碎片。 多塊分配 在Ext3中,“將新的數(shù)據(jù)寫入磁盤的哪些空閑塊”是由塊分配器來控制的。但是Ext3的塊分配器存在一定缺陷,那就是它一次只能夠分配一個數(shù)據(jù)塊(4KB),這就意味著,如果系統(tǒng)需要向磁盤中寫入100MB的數(shù)據(jù),那么需要調(diào)用塊分配器25600次,而且由于塊分配器無法獲知總的分配塊數(shù),所以也無法對分配空間和分配位置進行優(yōu)化。 在Ext4中,使用了“多塊分配器”,即一次調(diào)用可以分配多個數(shù)據(jù)塊,這種機制提高了系統(tǒng)的性能,而且使得分配器有了充足的優(yōu)化空間。 延遲分配 延遲分配(Delayed allocation)是一項僅僅少數(shù)現(xiàn)代文件系統(tǒng)才具有的優(yōu)秀特性,比如XFS、ZFS、btrfs(better FS)以及Reiser4。它能夠盡可能的積累更多的數(shù)據(jù)塊再分配出去,相對比,傳統(tǒng)的文件系統(tǒng)則會盡快的將數(shù)據(jù)塊分配出去,如Ext3,reiser3 等。 這項特性會和Extents特性以及多塊分配特性相結(jié)合,使得磁盤IO性能得到顯著提高。 更快速的FSCK 在Ext3中,F(xiàn)sck本身是個速度很慢的操作,因為它要檢查文件系統(tǒng)里的每一個“i節(jié)點”。但是,Ext4會維護一個未使用的“i節(jié)點”表,在進行 fsck操作時,會跳過表中節(jié)點,只檢查正在使用中的i節(jié)點。這種機制使得fsck的效率提高為原有Ext3文件系統(tǒng)的2到20倍。不過,你要注意到一點,那就是這個未使用的i節(jié)點表是由fsck來維護的,而不是由Ext4,因此你必須要首先運行一次fsck來生成,這樣,在下次再運行fsck時才可以享受提速。(雖然表是由fsck來維護的,但你還是需要從Ext3升級到Ext4才能夠享受這項功能) 日志校驗 日志要算是磁盤中最常用的部分了,也是最容易使硬盤出問題的機制之一。如果你不幸使用一個已經(jīng)崩潰的日志來恢復(fù)系統(tǒng)的話,將導(dǎo)致更大規(guī)模的系統(tǒng)崩潰。 Ext4提供校驗日志數(shù)據(jù)的功能,可以查看其潛在錯誤。而且,Ext4還會將Ext3日志機制中的“兩階段提交”動作合并為一個步驟,這種改進將使文件系統(tǒng)的操作性能提升20%。這就是Ext4在日志機制方面對可靠度和性能的雙重提升。 在線磁盤整理 這個特性沒有包括在內(nèi)核版本2.6.28之中,但是它很有可能會在下一個版本中引入。 雖然Extents、多塊分配和延遲分配都有助于減少磁盤碎片,但是磁盤碎片仍然會產(chǎn)生。舉例來說:你在一個目錄下建立了三個文件 (f1,f2,f3),它們被按序?qū)懭氲竭B續(xù)的一段內(nèi)存之中。然而幾天之后,你想要更新文件f2,也就是位于這段連續(xù)內(nèi)存的中間那一段的那個文件。我要向 這個文件中增加一些字符。很明顯,在這段連續(xù)內(nèi)存之中已經(jīng)沒有地方放下增加的這些字符,這別無選擇,只能將這個f2文件移動到一個能容納下的新的連續(xù)內(nèi)存 之中。這導(dǎo)致了f2文件和f1、f3文件離的非常遠,讀取也相對緩慢了。看,這就產(chǎn)生了磁盤碎片了。 還有,可引導(dǎo)文件應(yīng)該被放在連續(xù)的內(nèi)存之中,但是磁盤整理機制并不知道哪些文件是可引導(dǎo)文件。 為了解決上述問題,Ext4將支持在線磁盤整理,e4defrag工具也被用來支持更智能的磁盤碎片整理功能。 結(jié)點相關(guān)特性 更大的i結(jié)點:Ext3支持自定義i結(jié)點大小,但是默認的i結(jié)點大小是128字節(jié),Ext4將默認大小提升到256字節(jié)。增加的空間用來存儲更多的結(jié)點信息,這樣有利于提升磁盤性能。 i結(jié)點預(yù)留機制:當新建一個目錄時,若干i結(jié)點會被預(yù)留下來,等新的文件在此目錄中創(chuàng)建時,這些預(yù)留的i結(jié)點就可以立即被使用。文件的建立和刪除將變得更加高效。 毫微秒級的時間戳:在Ext3中,時間精度是秒。在Ext4中,時間精度提升到了毫微秒。 可持續(xù)預(yù)分配 這個特性,已經(jīng)出現(xiàn)在了Ext3的最后幾個內(nèi)核版本中,并且也可以由glibc在不支持此功能的文件系統(tǒng)中模擬產(chǎn)生,允許應(yīng)用程序去預(yù)分配磁盤空間。應(yīng)用程序告知文件系統(tǒng)給預(yù)留出一定的空間,文件系統(tǒng)會據(jù)此預(yù)分配必要的數(shù)據(jù)塊,但是這些數(shù)據(jù)塊將會是空的,直到應(yīng)用程序向里面寫入數(shù)據(jù)為止。這個機制會常常在P2P應(yīng)用程序中用到,因為P2P應(yīng)用程序下載文件常常需要幾天的時間。這種機制也防止了磁盤碎片的產(chǎn)生,因為文件系統(tǒng)會一次性分配盡可能連續(xù)的數(shù)據(jù)塊給應(yīng)用程序。再者,這種機制對于實時系統(tǒng)非常重要,因為一旦沒有這種機制,可能將會導(dǎo)致在一次重要操作的半截,磁盤空間已滿。這項特性是通過調(diào)用posix_fallocate()來實現(xiàn)的。 如何使用Ext4 目前的Ext4文件系統(tǒng)是第一個穩(wěn)定版本,整個的開發(fā)進度和發(fā)布計劃都被放緩了,就是為了保證用戶可以享受到“和使用Ext3同等級”的穩(wěn)定。 一個非常重要的事情是,目前還沒有Ext4 Grub。更準確的說,就是目前沒有g(shù)rub支持ext4。換句話說,就是你目前的發(fā)行版本的grub不支持ext4。目前我們的Grub2正在開發(fā)之中,在ubuntu和debian發(fā)行版中已經(jīng)有了grub2的grub-pc軟件包了,但是目前官方仍沒有宣布正式支持。在Google SoC中也包含了一個開發(fā)版本,且發(fā)布了相關(guān)補丁。你可以試用一下,你自己選擇嘍。 在你的發(fā)行版本的下一個新版本之中,可能會有相關(guān)的支持出現(xiàn)。所以安全起見,盡量保持你的/boot目錄為Ext3文件系統(tǒng)類型。 警告歸警告,轉(zhuǎn)換到Ext4其實是件很容易的事情,如下方法均可: 1 建立一個全新的Ext4文件系統(tǒng)。 這是最簡單的方法,你只需要升級你的e2fsprogs到Ext4,并且使用mkfs.ext4命令創(chuàng)建文件系統(tǒng)即可。 2 從Ext3遷移到Ext4。 你需要使用tune2fs命令和fsck命令,并且當前文件系統(tǒng)需要被卸載才可以。運行命令 tune2fs -O extents,uninit_bg,dir_index /dev/yourfilesystem 此后,你務(wù)必運行fsck命令,否則Ext4將無法掛載你的新文件系統(tǒng)。在fsck過程中,可能會有一些error需要你的確認。你可以考慮使用 -p選項,來告訴fsck你想要的是“automatic repair”,即fsck -pf /dev/yourfilesystem 3 使用Ext4來掛載一個Ext3文件系統(tǒng)。 你可以使用mount -t ext4 /dev/yourpartition /mnt來將一個Ext3文件系統(tǒng)用Ext4來掛載,但你將享受不到那些需要改變磁盤格式才可以享受得到的特性,比如Extents。你可以享受到的只有 那些不需要改變磁盤格式即可享受得到的特性,比如多塊分配、延遲分配等。我們當然不建議您這么做,因為Ext4的優(yōu)秀特性,您將無法體會…. over~ 翻譯/aleng@chinaunix 本文翻譯并改進自http://kernelnewbies.org/Ext4,謝謝原文作者的精彩評析。 |