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 中并入了新的高级功能。但在实现的过程出现了几个问题:
- 一些新功能违背向后兼容性。
- Ext3 代码变得更加复杂并难以维护。
- 这些更改使原本十分可靠的 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 文件系统。
#p#
ext4 的使用对象
Ext4 最为显著的改进是文件和文件系统的大小。因此,最可能需要 ext4 的用户是那些磁盘空间大小为几个 TB 的用户。然而表 1 中的功能列表还展示了其他一些吸引人的改进。例如,如果您的目录带有大量子目录,或者要求时间戳的精确度小于一秒,您可能希望尝试使用 ext4。
从2.6.28版本开始,Linux Kernel开始正式支持新的文件系统EXT4。
把 ext3 迁移到 ext4
当系统在 ext4 的支持下启动到内核时,您就可以使用新的文件系统了。为此,必须准备一个分区、独立磁盘的冗余阵列(RAID)设备或其他存储空间。然后就可以把它用作 ext4 文件系统并调整文件系统选项。
准备一个设备
如果希望从简单的入手,可以使用新版或旧版的 e2fsprogs 包(即 mkfs.ext3 或 mkfs.ext4)附带的工具格式化分区或其他设备。例如, mkfs.ext4 -j /dev/sda6 准备了 /dev/sda6 分区以供使用。使用 mkfs.ext4 可以产生一个文件系统,并激活了很多特定于 ext4 的功能。
目前,e2fsprogs 程序还没有完全跟上内核文件系统的步伐。幸运的是,大部分内核驱动程序的功能都不需要对 mkfs.ext4 或其他实用程序进行特殊准备。当挂载文件系统时,将激活 ext4 功能。如果要在大媒体上使用 ext4, 就必须进行大胆的探索,确保记录和报告所遇到的问题!
如果想把现有的 ext2 或 ext3 文件系统用作 ext4 文件系统,也不难实现。只需要按照随后描述的方法挂载设备即可。然而如果使用某些新的功能,如 extent,该文件系统就不能和 ext2 或 ext3 的驱动程序一起使用。
使用 ext4
要把一个设备用作 ext4 文件系统,就必须使用 ext4dev 文件系统类型代码挂载它(当 ext4 变得稳定时,文件系统类型代码将变为 ext4)。例如,mount -t ext4dev /dev/sda6 /mnt/point 在 /mnt/point 中把 /dev/sda6 挂载为 ext4 文件系统。这些都是 ext4 的基本用法。注意,默认的挂载选项启用了 extent,这会导致文件系统在作为 ext3 文件系统使用时变得不可用。如果您想尝试一下 ext4 同时可以返回到 ext3,则使用 -o noextents 选项禁用 extent 功能。
一旦挂载以后,可以像其他任何文件系统一样使用 ext4:复制文件、直接创建文件等等。 除了遇到 bug 或执行基准测试以外,您不会觉察到任何差别。
调整 ext4 性能选项
可以使用 tune2fs 程序调优 ext4 文件系统,与调优 ext2 或 ext3 文件系统的方式一样。目前, tune2fs 不提供任何特定于 ext4 的选项,但是可以使用标准的 -O 参数设置 ext4 选项,例如 extent。
当把文件系统挂载为 ext4 时,内核开始使用特定于文件系统的功能,如 extent。这样做的结果是不能再把文件系统挂载为 ext3 文件系统,至少会变得非常困难。
尽管把 ext3 文件系统挂载为 ext4 能够实现特定于 ext4 的功能,挂载本身并不把旧数据结构转换为新的格式。例如,现有文件保持块状方式分配, 而不是使用 extent 进行分配。因此,旧文件没有从新功能获得好处。然而,ext4 的开发人员已经考虑到这种情况并且提供了一种解决办法:可以使用(正处于 试验阶段的)e4defrag 工具(随后将介绍)转换分配方式来利用 extent 功能。另一个新工具(尚不可用)将改变 inode 的大小,使它变为新的格式。
维护 ext4 文件系统
可以使用标准的 e2fsprogs 工具来维护 ext4 文件系统,例如使用 tune2fs 在创建文件系统之后调整选项,使用 fsck.ext4 执行文件系统检查等等。这些程序在 ext4 与 ext3 之间没有很大的差别。但是,如前面提到的一样,ext4 包含一些能够提升 fsck 性能的增强功能。
除了这些工具以外,有一个新工具特别值得注意:e4defrag。该程序能够对已挂载的 ext4 文件系统进行磁盘碎片整理。这能够提高性能,尤其是文件系统空间快要用完的时候。同时,这也有利于将 ext2/3 样式的分配转换为基于 extent 的 ext4 样式的分配,因此能够提高曾经作为 ext3 文件系统的文件系统的性能。不幸的是,e4defrag 还不是标准的 e2fsprogs 包的一部分,因此需要单独下载。
【编辑推荐】