【51CTO独家翻译】Ext3是一种日志式文件系统,是对ext2系统的扩展,它兼容ext2。日志式文件系统的优越性在于:由于文件系统都有快取层参与运作,如不使用时必须将文件系统卸下,以便将快取层的资料写回磁盘中。因此每当系统要关机时,必须将其所有的文件系统全部shutdown后才能进行关机。如果在文件系统尚未shutdown前就关机 (如停电) 时,下次重开机后会造成文件系统的资料不一致,故这时必须做文件系统的重整工作,将不一致与错误的地方修复。然而,此一重整的工作是相当耗时的,特别是容量大的文件系统,而且也不能百分之百保证所有的资料都不会流失。为了克服此问题,使用所谓‘日志式文件系统 (Journal File System) ’。此类文件系统最大的特色是,它会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回溯追踪。由于资料的写入动作包含许多的细节,像是改变文件标头资料、搜寻磁盘可写入空间、一个个写入资料区段等等,每一个细节进行到一半若被中断,就会造成文件系统的不一致,因而需要重整。然而,在日志式文件系统中,由于详细纪录了每个细节,故当在某个过程中被中断时,系统可以根据这些记录直接回溯并重整被中断的部分,而不必花时间去检查其他的部分,故重整的工作速度相当快,几乎不需要花时间。
Ext4是Karmic Koala的默认文件系统。Ext4是一种针对ext3系统的扩展日志式文件系统,是专门为 Linux 开发的原始的扩展文件系统(ext 或 extfs)的第四版。
相对于Ext3,特点如下:
兼容性
Ext3升级到ext4能提供系统更高的性能,消除存储限制,和获取新的功能,并且不需要重新格式化分区,ext4会在新的数据上用新的文件结构,旧的文件保留原状。以ext3 文件系统的方式mount到ext4上会不用新的磁盘格式,而且还能再用ext3来重新挂载,这样仅仅失去了ext4的优势。
大文件系统/文件大小
现在ext3支持最大16TB的文件系统。单个文件最大2TB。Ext4增加了48位块地址,最大支持1EB文件系统,和单个16TB的文件。
1EB = 1024PB = 2^50;
1PB = 1024TB = 2^40;
1TB = 1024GB = 2^30。
子目录可伸缩性
EXT3每个目录最大包含32000个子目录。减去.和..也就是31998
ext4打破了这个限制可以无限制数量的子目录
Extents
传统的Unix派生文件系统,使用间接块映射方案,以跟踪每块用于块相应的数据文件,这对大文件来说是低效率的。现代文件系统使用不同的方法称为“extends” 。extends基本上指一串连续的物理快。通常叫做数据在下面的N个块中。一个100MB的文件可以分配到一extends中。而不需要创建一个间接映射表为256000个blocks,(每个block 4kb)大文件被分割为很多范围。Extends改进了性能并且减少了碎片。因为extends鼓励在磁盘上连续布局。
Multiblock 分配
ext4使用了一个多块分配来在一次调用中分配很多块。替换掉每次分配一个块,减少系统开销。在延时分配和extends上十分有用。
延迟分配
延迟分配是一个性能特性(它不修改磁盘格式)。现代文件系统例如XFS,ZFS,btrfs or Reiser 4 并且它尽可能多的延时块的分配。相对于传统文件系统(例如Ext3 reiser3 etc)所做的立刻分配块提供了更好的性能。
日志校验和
日志是磁盘中最常用的一部分,组成日志的这部分也是最容易出现硬件故障的。并且从一个受损的日志上恢复数据会导致巨大的数据损坏。Ext4 校验和提供了改进,它允许将EXt3的双向提交日志格式转换为单向的,加速文件系统操作,在某些情况下达到20%---因此可靠性和性能同时被改进。
在线碎片整理
当延迟分配,extents 和 multiblock 分配 帮助减少碎片的时候,使用中的文件系统依然会产生碎片。为了解决这个问题,Ext4 将会支持在线碎片整理,并且有一个e4defrag工具可以整理个别文件在整个文件系统中。
索引节点-关联
拥有大索引节点,纳秒时间戳,快速扩展属性,索引节点保留的特点。Ext3 支持 可设置的索引节点大小(通过 mkfs -l参数)但是默认索引节点大小是128字节。Ext4将默认为256字节。这需要适应一些额外的字段(比如纳秒时间戳或者索引节点版本)并且剩余索引节点空间会被用于存放扩展属性为那些足够小的对象来适合空间。这样使访问那些属性更快,提高那些使用扩展属性的应用程序性能3-7倍。在目录创建的时候保留若干索引节点在里面,预期它们在未来使用。这样改进性能,因为新文件被创建在目录中他们可以使用保留索引节点。文件创建和删除因此更高效。纳秒时间戳意味着索引节点字段例如修改时间可以用纳秒分辨率替代Ext3中的秒。
持续预分配
这个特性在ext3最新的内核版本中已经可用了,由glic仿真来实现文件系统不支持的功能,允许应用程序预分配磁盘空间:应用程序告诉文件系统来预分配空间,文件系统预分配需要的块和数据结构。
默认启用 barrier
磁盘上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写 commit 记录,若 commit 记录写入在先,而日志有可能损坏,那么就会影响数据完整性。Ext4 默认启用 barrier,只有当 barrier 之前的数据全部写入磁盘,才能写 barrier 之后的数据。(可通过 "mount -o barrier=0" 命令禁用该特性。)
关于Ext4文件系统更多详细信息可以参看:下一代Linux文件系统前瞻:是BTRFS还是ext4
#p#也许你注意到了,现在已经可以在Ubuntu Jaunty(9.04)上使用Ext4系统。Ext4文件系统对于Ext3文件系统来说是一次巨大的升级。它向下兼容Ext3,因此它非常的稳定。但是近期这个文件系统出现了几个问题,因此使用的时候需要小心翼翼。
坚持使用Ext3的理由:
1.Ext3是*buntus的的默认文件系统
2.Ext3十分稳定,不必担心由于系统崩溃造成的文件丢失
3.Ext3是Ubuntu工作站的推荐系统
Ext4的一些问题:
1.有时在Ext4系统中会产生更多的配置文件崩溃报告
2.问题大部分出现在kernel 2.6.30中,因此它不会对Ubuntu Jaunty造成影响,但是会影响Ubuntu Karmic及后续产品
3.其它的一些问题可以参看:http://www.ubuntu.com/getubuntu/releasenotes/904
因此,虽然Ext4是非常出色的文件系统,但是它仍然存在一些缺陷有待解决。但是总体而言,这个系统对于桌面用户来说还是非常稳定的。如果你采用定期备份的方法,就不会有什么后顾之忧。另外文件丢失的问题也不能完全归罪与Ext4文件系统,这个问题很大程度上来源于不规范的I/O磁盘设备。关于文件丢失的详细说明可以参看这里:当心: Ext4 可能造成数据丢失
【编辑推荐】