歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> ext4文件系統新特性

ext4文件系統新特性

日期:2017/2/27 16:06:19   编辑:Linux教程

Linux文件系統的 歷史中,Ext4可以說是一次革命。很多方面來看,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的優秀特性,您將無法體會。

Copyright © Linux教程網 All Rights Reserved