查看源代码
出自Linux Wiki
对
Ext4
的源代码
根据以下的原因,您无权限进行编辑这个页面操作:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
Ext4的名称来源于'''4'''th '''ext'''ended filesystem,它是广泛应用于[[Linux]]的[[Ext3]]文件系统的后继。同Ext3类似,Ext4也是日志文件系统。<ref>http://kernelnewbies.org/Ext4 </ref> <ref>http://en.wikipedia.org/wiki/Ext4 </ref>而与Ext3仅仅是将日志功能加入到[[Ext2]]中不同,Ext4对Ext3做了很多深层次的改进,文件系统的数据结构也有变化。目前的Ext4文件系统设计更合理、性能有所提高、可靠性得到增强,还引入了一些新功能。<ref>[http://www.ibm.com/developerworks/linux/library/l-anatomy-ext4/index.html?S_TACT=105AGX52&S_CMP=content IBM Developer Networks上的Anatomy of ext4]</ref> 在Windows也可访问Ext4文件系统,见[[从Windows访问ext文件系统]]。 ==新特性== 做为新一代文件系统,Ext4文件系统具有很多新特性: ===新功能=== ;大文件系统与大文件支持:Ext4文件系统最大支持1 exabyte(1000<sup>6</sup>B=1000<sup>3</sup>GB)<ref>[http://www.ibm.com/developerworks/linux/library/l-ext4/ "Migrating to Ext4"]. ''DeveloperWorks''. IBM. http://www.ibm.com/developerworks/linux/library/l-ext4/. Retrieved on 2008-12-14.</ref>的卷,最大文件可达16TB。 ;在线碎片整理(Online defragmentation):(开发中)尽管ext4引入了很多避免碎片产生的技术,一个用了很长时间的文件系统总归要产生一些碎片。Ext4将提供一个可以为单个文件及整个文件系统进行碎片整理的工具。虽然目前已经有不少在线整理磁盘的解决方法,但主流内核还未加入对他们的支持。 ;打破子文件夹数限制:ext3中一个文件夹的子文件夹数不能超过32000,在ext4中,这一限制被取消。 ;时间戳的改进:由于计算机总是越来越快,不过任务对时间精度的要求不断提升,精确到“秒”的时间戳越来越显得不够用了。为此,Ext4引入了精确到“纳秒”的时间戳。另外,ext4还在将秒的表示增加了2个比特,这就避免了“2038年问题”,使时间的表示范围增加了约500年。ext4还引了对'''文件创建时间戳'''的支持。不过正如Theodore Ts'o所指出的,要使更多的程序支持这一特性,可能还需要修改诸如''stat()''之类的系统调用函数,而如glibc等依赖于它们的库也需要做相应的更新。正因如此,“文件创建时间戳”走入用户应用程序可能还需要一段时间。<ref name="osdirmailinglistext4timestamps">[http://osdir.com/ml/file-systems.ext3.user/2006-10/msg00015.html Theodore Ts'o answer on creation time stamps for ext4]</ref> ;无日志模式:有些特殊应用可能希望通过取消日志来提高性能,Ext4提供无日志模式以适应这些特殊需求(从2.6.29内核开始支持)。 ===性能提升=== ;更快速的文件系统检查:fsck检查磁盘速度慢的一个重要原因是它在第一步要扫描所有的[[inode]]。ext4对未分配的inode做了适当标记,这让fsck检查磁盘时可以将它们整块地忽略掉,大大加快了磁盘检查的时间。<ref>[http://kerneltrap.org/Linux/Improving_fsck_Speeds_in_Ext4 Improving fsck Speeds in Ext4(英文)]</ref> ;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文件系统的测试结果,可以参考[http://www.phoronix.com/scan.php?page=article&item=ext4_benchmarks&num=1 Phoronix上的文章],或者可以看[http://linuxtoy.org/archives/ext4-benchmarks.html LinuxToy上的翻译]。 另外,在“知道分子”博客上也有一篇文章[http://hutuworm.blogspot.com/2009/02/ext2-vs-ext3-vs-ext4.html Ext2 v.s. Ext3 v.s. Ext4 性能比拼]可供查阅。 ===已知问题=== 虽然ext4已经正式进入2.6.28版内核,但近来出现了ext4丢失数据的报道<ref>[http://linuxtoy.org/archives/ext4-data-loss.html LinuxToy有关ext4可能丢失数据的报道]</ref>,目前这一问题的原因已经查明<ref>[http://www.h-online.com/open/Ext4-data-loss-explanations-and-workarounds--/news/112892 对Ext4文件丢失数据原因的介绍]</ref>,补丁会加入到2.6.30版本内核中。 ==使用ext4== 要使用ext4,推荐在新建分区时将其格式化为ext4。也可以将ext3升级为ext4,参见 http://ext4.wiki.kernel.org/index.php/Ext4_Howto ==相关资料== <references /> ==详情== <pre> 开发者 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) </pre> [[Category: 文件系统]]
返回到
Ext4
。
导航
首页
社区入口
当前事件
最近更改
随机页面
帮助
查看
页面
讨论
查看源代码
历史
个人工具
登录/创建账户
搜索
简体繁体转换
不转换
简体
繁體
工具箱
链入页面
链出更改
特殊页面