Ext4
從 Linux Wiki
提示:此文已超过 10 年(3870 天)未更新,如发现内容过时或有误,欢迎改进:)
Ext4的名稱來源於4th extended filesystem,它是廣泛應用於Linux的Ext3文件系統的後繼。同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後向兼容與ext3和ext2,即可以將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
相關資料
- ↑ http://kernelnewbies.org/Ext4
- ↑ http://en.wikipedia.org/wiki/Ext4
- ↑ IBM Developer Networks上的Anatomy of ext4
- ↑ "Migrating to Ext4". DeveloperWorks. IBM. http://www.ibm.com/developerworks/linux/library/l-ext4/. Retrieved on 2008-12-14.
- ↑ Theodore Ts'o answer on creation time stamps for ext4
- ↑ Improving fsck Speeds in Ext4(英文)
- ↑ LinuxToy有關ext4可能丟失數據的報道
- ↑ 對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)
本文对您有帮助?分享给更多朋友!
反馈与讨论
发现文档不全面、有错误却没时间编辑文档?想分享自己的经验或见解?欢迎在此留言、讨论。