全面掌握Ext4文件系統(tǒng)新特性
在Linux文件系統(tǒng)的歷史中,Ext4可以說是一次革命。很多方面來看,Ext4相對于Ext3的進(jìn)步要遠(yuǎn)超過Ext3相對于Ext2的進(jìn)步。Ext3相比Ext2的改進(jìn)主要在日志方面,但是Ext4相對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)境,就能夠順利的升級到Ext4文件系統(tǒng)。這種升級方法不會(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ì)問,為什么不是64位呢?因?yàn)榫湍壳暗拈_發(fā)進(jìn)展來看,實(shí)現(xiàn)64位尋址存在一些技術(shù)限制,但是Ext4已經(jīng)在考慮這個(gè)問題了,在不久的將來,Ext4將實(shí)現(xiàn)完全的64位支持。
子目錄可擴(kuò)展性
目前的Ext3中,單個(gè)目錄下的子目錄數(shù)目的上限是32000個(gè)。而在Ext4中打破了這種限制,可以創(chuàng)建無限多個(gè)子目錄。
Extents
傳統(tǒng)的類UNIX文件系統(tǒng),比如Ext3,都是使用一個(gè)間接數(shù)據(jù)塊映射表來記錄每一個(gè)數(shù)據(jù)塊的分配情況的。但是這種機(jī)制對于超大文件的存儲(chǔ)是有缺陷 的,特別是當(dāng)對超大文件進(jìn)行刪除和截?cái)嗖僮鲿r(shí)。映射表會(huì)對每一個(gè)數(shù)據(jù)塊進(jìn)行記錄,而一個(gè)超大文件將占有很多的數(shù)據(jù)塊,因此造成映射表將變得無比臃腫,難于 維護(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ù)寫入磁盤的哪些空閑塊”是由塊分配器來控制的。但是Ext3的塊分配器存在一定缺陷,那就是它一次只能夠分配一個(gè)數(shù)據(jù)塊(4KB),這就意味著,如果系統(tǒng)需要向磁盤中寫入100MB的數(shù)據(jù),那么需要調(diào)用塊分配器25600次,而且由于塊分配器無法獲知總的分配塊數(shù),所以也無法對分配空間和分配位置進(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ù)塊再分配出去,相對比,傳統(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ì)跳過表中節(jié)點(diǎn),只檢查正在使用中的i節(jié)點(diǎn)。這種機(jī)制使得fsck的效率提高為原有Ext3文件系統(tǒng)的2到20倍。不過,你要注意到一點(diǎn),那就是這個(gè)未使用的i節(jié)點(diǎn)表是由fsck來維護(hù)的,而不是由Ext4,因此你必須要首先運(yùn)行一次fsck來生成,這樣,在下次再運(yùn)行fsck時(shí)才可以享受提速。(雖然表是由fsck來維護(hù)的,但你還是需要從Ext3升級到Ext4才能夠享受這項(xiàng)功能。)
日志校驗(yàn)
日志要算是磁盤中最常用的部分了,也是最容易使硬盤出問題的機(jī)制之一。如果你不幸使用一個(gè)已經(jīng)崩潰的日志來恢復(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ī)制方面對可靠度和性能的雙重提升。
在線磁盤整理
這個(gè)特性沒有包括在內(nèi)核版本2.6.28之中,但是它很有可能會(huì)在下一個(gè)版本中引入。
雖然Extents、多塊分配和延遲分配都有助于減少磁盤碎片,但是磁盤碎片仍然會(huì)產(chǎn)生。舉例來說:你在一個(gè)目錄下建立了三個(gè)文件 (f1,f2,f3),它們被按序?qū)懭氲竭B續(xù)的一段內(nèi)存之中。然而幾天之后,你想要更新文件f2,也就是位于這段連續(xù)內(nèi)存的中間那一段的那個(gè)文件。我要向 這個(gè)文件中增加一些字符。很明顯,在這段連續(xù)內(nèi)存之中已經(jīng)沒有地方放下增加的這些字符,這別無選擇,只能將這個(gè)f2文件移動(dòng)到一個(gè)能容納下的新的連續(xù)內(nèi)存 之中。這導(dǎo)致了f2文件和f1、f3文件離的非常遠(yuǎn),讀取也相對緩慢了???,這就產(chǎn)生了磁盤碎片了。
還有,可引導(dǎo)文件應(yīng)該被放在連續(xù)的內(nèi)存之中,但是磁盤整理機(jī)制并不知道哪些文件是可引導(dǎo)文件。
為了解決上述問題,Ext4將支持在線磁盤整理,e4defrag工具也被用來支持更智能的磁盤碎片整理功能。
節(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é)。增加的空間用來存儲(chǔ)更多的結(jié)點(diǎn)信息,這樣有利于提升磁盤性能。
i節(jié)點(diǎn)預(yù)留機(jī)制:當(dāng)新建一個(gè)目錄時(shí),若干i節(jié)點(diǎn)會(huì)被預(yù)留下來,等新的文件在此目錄中創(chuàng)建時(shí),這些預(yù)留的i節(jié)點(diǎn)就可以立即被使用。文件的建立和刪除將變得更加高效。
毫微秒級的時(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ī)制對于實(shí)時(shí)系統(tǒng)非常重要,因?yàn)橐坏]有這種機(jī)制,可能將會(huì)導(dǎo)致在一次重要操作的半截,磁盤空間已滿。這項(xiàng)特性是通過調(diào)用posix_fallocate()來實(shí)現(xiàn)的。
如何使用Ext4?
目前的Ext4文件系統(tǒng)是***個(gè)穩(wěn)定版本,整個(gè)的開發(fā)進(jìn)度和發(fā)布計(jì)劃都被放緩了,就是為了保證用戶可以享受到“和使用Ext3同等級”的穩(wěn)定。
一個(gè)非常重要的事情是,目前還沒有Ext4 Grub。更準(zhǔn)確的說,就是目前沒有g(shù)rub支持ext4。換句話說,就是你目前的發(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)。
這是最簡單的方法,你只需要升級你的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將無法掛載你的新文件系統(tǒng)。在fsck過程中,可能會(huì)有一些error需要你的確認(rèn)。你可以考慮使用 -p選項(xiàng),來告訴fsck你想要的是“automatic repair”,即fsck -pf /dev/yourfilesystem
3.使用Ext4來掛載一個(gè)Ext3文件系統(tǒng)。
你可以使用mount -t ext4 /dev/yourpartition /mnt來將一個(gè)Ext3文件系統(tǒng)用Ext4來掛載,但你將享受不到那些需要改變磁盤格式才可以享受得到的特性,比如Extents。你可以享受到的只有 那些不需要改變磁盤格式即可享受得到的特性,比如多塊分配、延遲分配等。我們當(dāng)然不建議您這么做,因?yàn)镋xt4的優(yōu)秀特性,您將無法體會(huì)。
【編輯推薦】















 
 
 

 
 
 
 