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