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