Ext4

此页由Mr.Lonely于2014年4月19日 (星期六) 17:48的最后更改。 在Linux Wiki用户Chenxing的工作基础上。

出自Linux Wiki

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)

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

反馈与讨论

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