Linux 支持几个不同的文件系统。这些文件系统中,一些是专用的网络文件系统或为其他操作系统开发的文件系统,但绝大部分还是用作 Linux 本地文件系统 — 您可以将 Linux 根(/)和系统目录放在这种文件系统里。目前(2008年),这一类文件系统包括 ext2、ext3、ReiserFS、XFS 和 Journaled File System (JFS)。但是文件系统一直在不断设计和开发中,新的文件系统也将陆续问世。
目前正在开发的最重要的 Linux 文件系统是 ext4 — 它是专门为 Linux 开发的原始的扩展文件系统(ext 或 extfs)的第四版。由于继承了以前版本,ext4 在不久的将来很可能会成为一个重要的 Linux 标准文件系统(51CTO编辑注:本文撰写于2008年,当时ext4尚处于试验阶段。截至到2010年6月,ext4目前已在多种发行版中被接受为默认文件系统之一,红帽的RHEL 6也将采用ext4作为默认文件系统,可以说ext4技术现在已经成熟)。
Ext4 与 ext3 的对比
扩展文件系统(ext 或 extfs)第四版产生的原因是开发人员在 ext3 中并入了新的高级功能。但在实现的过程出现了几个问题:
由于这些原因,从 2006 年 6 月份开始,开发人员决定把 ext4 从 ext3 中分离出来进行独立开发。Ext4 的开发工作从那时起开始进行,但大部分 Linux 用户和管理员都不怎么注意这件事情。随着 2.6.19 内核在 2006 年 11 月的发布,ext4 第一次出现在主流内核里,但是它当时还处于试验阶段(现在还是),因此很多人都忽视了它。
由于还处于开发阶段,从 2.6.24.4 内核开始,ext4 的功能列表就一直在变动。 Ext4 的当前和预期功能包括从 ext3 发展而来的功能,见下表:
◆大型文件系统
ext4文件系统可支持最高1 Exbibyte的分区区与最大16 Tebibyte的文件。
◆Extents
ext4引进了Extent文件存储方式,以取代ext2/3使用的block mapping方式。Extent指的是一连串的连续物理block,这种方式可以增加大型文件的效率并减少分裂文件。ext4支持的单一Extent,在单一block为4KB的系统中最高可达128MB[1]。单一inode中可存储4笔Extent;超过四笔的Extent会以Htree方式被索引。
◆向下兼容
ext4向下兼容于ext3与ext2,因此可以将ext3和ext2的文件系统挂载为ext4分区区。由于某些ext4的新功能可以直接运用在ext3和ext2上,直接挂载即可提升少许效能。
ext3文件系统可以部分向上兼容于ext4(也就是说ext4文件系统可以被挂载为ext3分区区)。然而若是使用到Extent技术的ext4将无法被挂载为ext3。
◆预留空间
ext4允许对一文件预先保留软盘空间。目前大多数文件系统做到这点的方式是直接产生一个填满0的文件;ext4和XFS可以使用Linux内核中的一个新的系统调用“fallocate()”取得足够的预留空间。
◆延迟取得空间
ext4使用一种称为allocate-on-flush的方式,可以在数据将被写入软盘(sync)前才开始取得空间;大多数文件系统会在之前便取得需要的空间。这种方式可以增加效能并减少文件分散程度。
◆突破32000子目录限制
ext3的一个目录下最多只能有32000个子目录。ext4的子目录最高可达64000,且使用“dir_nlink”功能后可以达到更高(虽然父目录的link count会停止增加)。为了避免效能受到大量目录的影响,ext4默认打开Htree(一种特殊的B-tree)索引功能。该功能已经实现于Linux内核2.6.23版。
◆日志校验和
Ext4使用校验和特性来提高文件系统可靠性,因为日志是磁盘上被读取最频繁的部分之一。这个特性还有一个好处就是可以安全地避免日志处理时磁盘I/O的等待,而稍微提高一些性能。日志校验和的技术源于威斯康辛大学的一篇名为IRON File Systems的研究论文(见第六节 transaction checksums校验和处理)[5]
◆在线磁盘整理
对于在线磁盘整理工具有许多草案,但是这些草案都没有被包含在主流的内核当中。即使Ext4包含有许多避免磁盘碎片的技术,但是磁盘碎片还是难免会在一个长时间使用过的文件系统中存在。Ext4将会有一个具有磁盘整理功能的工具[来源请求].
◆快速文件系统检查
Ext4将未使用的区块标记在inode当中,这样可以使诸如e2fsck之类的工具在磁盘检查时将这些区块完全跳过,而节约大量的文件系统检查的时间。这个特性已经在2.6.24版本的Linux内核中实现。
(以上列表引用自维基百科)
功能列表的一些功能在实际使用中不具备与 ext3 的向后兼容性 — 即可能无法使用 ext3 文件系统类型的代码挂载 ext4 文件系统。但是 ext4 保留了向前兼容性 — 您可以像挂载 ext4 文件系统一样挂载 ext3 文件系统。