Ext4

此頁由 Mr.Lonely 於 2014年4月19日 (星期六) 17:48 的最後更改。 在Linux Wiki用戶Chenxing的工作基礎上。

從 Linux Wiki

提示:此文已超过 10 年(3901 天)未更新,如发现内容过时或有误,欢迎改进:)

Ext4的名稱來源於4th extended filesystem,它是廣泛應用於LinuxExt3文件系統的後繼。同Ext3類似,Ext4也是日誌文件系統。[1] [2]而與Ext3僅僅是將日誌功能加入到Ext2中不同,Ext4對Ext3做了很多深層次的改進,文件系統的數據結構也有變化。目前的Ext4文件系統設計更合理、性能有所提高、可靠性得到增強,還引入了一些新功能。[3]

在Windows也可訪問Ext4文件系統,見從Windows訪問ext文件系統

目錄

新特性

做為新一代文件系統,Ext4文件系統具有很多新特性:

新功能

大文件系統與大文件支持
Ext4文件系統最大支持1 exabyte(10006B=10003GB)[4]的卷,最大文件可達16TB。
在線碎片整理(Online defragmentation)
(開發中)儘管ext4引入了很多避免碎片產生的技術,一個用了很長時間的文件系統總歸要產生一些碎片。Ext4將提供一個可以為單個文件及整個文件系統進行碎片整理的工具。雖然目前已經有不少在線整理磁盤的解決方法,但主流內核還未加入對他們的支持。
打破子文件夾數限制
ext3中一個文件夾的子文件夾數不能超過32000,在ext4中,這一限制被取消。
時間戳的改進
由於計算機總是越來越快,不過任務對時間精度的要求不斷提升,精確到「秒」的時間戳越來越顯得不夠用了。為此,Ext4引入了精確到「納秒」的時間戳。另外,ext4還在將秒的表示增加了2個比特,這就避免了「2038年問題」,使時間的表示範圍增加了約500年。ext4還引了對文件創建時間戳的支持。不過正如Theodore Ts'o所指出的,要使更多的程序支持這一特性,可能還需要修改諸如stat()之類的系統調用函數,而如glibc等依賴於它們的庫也需要做相應的更新。正因如此,「文件創建時間戳」走入用戶應用程序可能還需要一段時間。[5]
無日誌模式
有些特殊應用可能希望通過取消日誌來提高性能,Ext4提供無日誌模式以適應這些特殊需求(從2.6.29內核開始支持)。

性能提升

更快速的文件系統檢查
fsck檢查磁盤速度慢的一個重要原因是它在第一步要掃描所有的inode。ext4對未分配的inode做了適當標記,這讓fsck檢查磁盤時可以將它們整塊地忽略掉,大大加快了磁盤檢查的時間。[6]
Extents
Ext2/3等老Linux文件系統使用間接塊映射模式(block mapping),文件的每一個塊都要被記錄下來,這使得對大文件的操作(如刪除)效率低下。Ext4引入Extents這一概念來代替ext2/3使用的傳統的塊映射(block mapping)方式。「extent」是一個大的連續的物理塊區域,它的引入加快了處理大文件的性能、減少了碎片。當塊大小為4KB時,ext4中的一個extent最大可以映射128MB的連續物理存儲空間。
持續預分配空間(Persistent pre-allocation)
ext4文件系統允許為文件預分配磁盤空間。目前多數文件系統實現這一功能的方法是在要分配的空間中添滿0。 在ext4中不再採用這一方法,而是用一個新的fallocate()內核系統調用來實現(支持ext4和XFS),且其分配的空間很可能是連續的。這一技術在流媒體、P2P等多種場合中都有廣泛應用。
延時分配(Delayed allocation)
該技術也稱為allocate-on-flush,可以提升文件系統的性能。只有數據將要被真正寫入磁盤時,文件系統才為其分配塊,這與其它文件系統在早期就分配好必要的塊是不同的。另外,由於ext4的這種做法可以根據真實的文件大小做塊分配決策,它還減少了碎片的產生。
多塊分配(Multiblock allocator)
Ext3文件系統為每次寫操作最多分配一個4K塊(block),在處理大文件時會導致性能的下降。Ext4在一次操作中可以分配多個塊,並儘力讓這些塊連續,這有助於減少磁盤碎片。當啟用了延時分配或使用O_DIRECT時這一功能即被啟用。

可靠性增強

日誌校驗
日誌通常用於在硬件故障發生後恢複數據,它是日誌文件系統中最重要的部分之一,按照損壞的日誌執行恢復操作可能導致嚴重的後果。所以Ext4為日誌增加了校驗和以提升可靠性。這一特性還可以安全地避免寫日誌進程的磁盤I/O等待時間,並略微提高了性能。

兼容性

前向兼容
ext4文件系統與ext3部分向前兼容。即只要不啟用extents(ext4的一項新特性),ext4文件系統就可以做為ext3文件系統掛載。
後向兼容
ext4後向兼容與ext3ext2,即可以將ext3或ext2文件系統做為ext4分區掛載。由於此時可以使用ext4的一些新特性(如新的塊分配算法),這樣做時還可以稍稍提升性能。


評價

測試數據

有關ext4文件系統的測試結果,可以參考Phoronix上的文章,或者可以看LinuxToy上的翻譯

另外,在「知道分子」博客上也有一篇文章Ext2 v.s. Ext3 v.s. Ext4 性能比拼可供查閱。

已知問題

雖然ext4已經正式進入2.6.28版內核,但近來出現了ext4丟失數據的報道[7],目前這一問題的原因已經查明[8],補丁會加入到2.6.30版本內核中。

使用ext4

要使用ext4,推薦在新建分區時將其格式化為ext4。也可以將ext3升級為ext4,參見 http://ext4.wiki.kernel.org/index.php/Ext4_Howto

相關資料

  1. http://kernelnewbies.org/Ext4
  2. http://en.wikipedia.org/wiki/Ext4
  3. IBM Developer Networks上的Anatomy of ext4
  4. "Migrating to Ext4". DeveloperWorks. IBM. http://www.ibm.com/developerworks/linux/library/l-ext4/. Retrieved on 2008-12-14.
  5. Theodore Ts'o answer on creation time stamps for ext4
  6. Improving fsck Speeds in Ext4(英文)
  7. LinuxToy有關ext4可能丟失數據的報道
  8. 對Ext4文件丟失數據原因的介紹

詳情

开发者	Mingming Cao, Andreas Dilger, Alex Zhuravlev (Tomas), Dave Kleikamp, Theodore Ts'o, Eric Sandeen, Sam Naghshineh, others
全称	Fourth extended file system
发布	稳定版: 2008年10月21日<br>
不稳定版: 2006年10月10日 (Linux 2.6.28, 2.6.19)
分区标识	0x83 (MBR)
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (GPT)
结构<br>
目录内容	链表, hashed B-tree
文件分配	Extents/Bitmap
坏块	表格
限制
最大文件尺寸	16 TiB (for 4k block filesystem)
最大文件数量	40亿 (在文件系统创建时指定)
最长文件名	256字节
最大卷容量	1 EiB
文件名字符集	除 NULL ('\0') 和 '/' 外之所有字符
功能
日期记录	修改(mtime), 属性修改 (ctime), 读取 (atime), 删除 (dtime), 创建 (crtime)
日期范围	1901年12月14日 - 2514年4月25日
日期分辨率	纳秒
岔流	否
属性	extents, noextents, mballoc, nomballoc, delalloc, nodelalloc, data=journal, data=ordered, data=writeback, commit=nrsec, orlov, oldalloc, user_xattr, nouser_xattr, acl, noacl, bsddf, minixdf, bh, nobh, journal_dev
文件系统权限	POSIX
透明压缩	否<
透明加密	否
单一实例存储(SIS)	否
操作系统支持	Linux、Windows(通过Ext2Fsd)

本文对您有帮助?分享给更多朋友!

反馈与讨论

发现文档不全面、有错误却没时间编辑文档?想分享自己的经验或见解?欢迎在此留言、讨论。
個人工具
简体繁体转换