Ext4 是众多 Linux® 文件系统中的最新版本,它将像以前的版本一样重要和流行。作为 Linux 系统管理员,您应该知道迁移到 ext4 的优缺点和基本步骤。本文将介绍何时应采用 ext4、如何在 ext4 中使用传统的文件系统维护工具以及如何充分利用该文件系统。
Ext4 的功能
Linux 支持几个不同的文件系统。这些文件系统中,一些是专用的网络文件系统或为其他操作系统开发的文件系统,但绝大部分还是用作 Linux 本地文件系统 -- 您可以将 Linux 根(/)和系统目录放在这种文件系统里。目前,这一类文件系统包括 ext2、ext3、ReiserFS、XFS 和 Journaled File System (JFS)。但是文件系统一直在不断设计和开发中,新的文件系统也将陆续问世。
目前正在开发的最重要的 Linux 文件系统是 ext4 -- 它是专门为 Linux 开发的原始的扩展文件系统(ext 或 extfs)的第四版。由于继承了以前版本,ext4 在不久的将来很可能会成为一个重要的 Linux 标准文件系统(可能是 标准文件系统)。
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 发展而来的功能,见表 1。
表 1. Ext4 的当前功能和未来功能使它超越了 ext3
功能 优势
更大的文件系统 Ext3 最多只能容纳 32 TiB 的文件系统和 2 TiB 的文件,根据使用的具体架构和系统设置,实际容量上限可能比这个数字还要低 -- 或许只能容纳 2 TiB 的文件系统和 16 gibibyte(GiB)的文件。相反,Ext4 的文件系统容量达到 1024 pebibyte(PiB), 或 1 exbibyte(EiB),而文件容量则达到 16 TiB。对一般的台式计算机和服务器而言,这可能并不重要,但对大磁盘阵列的用户而言,这就非常重要了。
extent extent 是一种提高磁盘文件描述符效率的方法,它能够减少删除大型文件所需的时间等等。
持久性预分配 如果一个应用程序需要在实际使用磁盘空间之前对它进行分配,大部分文件系统都是通过向未使用的磁盘空间写入 0 来实现分配。而 ext4 允许提前分配,无需进行上述操作,这能提高某些数据库和多媒体工具的性能。
延迟分配 Ext4 能够尽量延迟磁盘空间的分配,这能够提高性能。
更多的子目录 如果 ext3 中一个目录只能包含 32,000 个子目录还不能满足您的需求,那么不必担心,因为 ext4 取消了这一限制。
日志 checksum Ext4 给日志数据添加了检查和(checksum)功能,这能提高可靠性和性能。
在线磁盘整理 虽然 ext3 一般不会受到碎片的影响,但是存储在它里面的文件多少会产生一些碎片。Ext4 支持在线磁盘整理,这能够改善总体性能。
恢复删除文件 虽然这一功能尚未实现,但 ext4 将支持恢复删除文件。当文件被意外删除时,此功能将极为有用。
更快的文件系统检查 Ext4 添加了新的数据结构,允许 fsck 在检查中跳过磁盘中未使用的部分,因此加快了文件系统的检查。
纳秒级时间戳 大部分的文件系统(包括 ext3)都包含有精确到秒的时间戳数据,而 ext4 把精确度提高到了纳秒。一些资料还表明 ext4 的时间戳支持的日期达到 2514 年 4 月 25 日,而 ext3 只达到 2038 年 1 月 18 日。
由于 ext4 目前还处于开发阶段,这个功能表还会有所变动。功能列表的一些功能在实际使用中不具备与 ext3 的向后兼容性 -- 即可能无法使用 ext3 文件系统类型的代码挂载 ext4 文件系统。但是 ext4 保留了向前兼容性 -- 您可以像挂载 ext4 文件系统一样挂载 ext3 文件系统。
ext4 的使用对象
Ext4 最为显著的改进是文件和文件系统的大小。因此,最可能需要 ext4 的用户是那些磁盘空间大小为几个 TB 的用户。然而表 1 中的功能列表还展示了其他一些吸引人的改进。例如,如果您的目录带有大量子目录,或者要求时间戳的精确度小于一秒,您可能希望尝试使用 ext4。
因为 ext4 目前处于试验阶段,要使用它就必须重新编译内核,否则,使用 ext4 时将会出现麻烦。事实上,ext4 处于试验阶段意味着只有希望为 ext4 的开发做贡献,或者非常渴望它的某些功能,这些情况下才有必要使用它。如果想在稳定的 ext4 发布之前获得可靠的大磁盘支持,可以考虑使用 XFS 或 JFS。
当然,ext4 不可能永远处于试验阶段。它不久将成为一个稳定的文件系统。届时,ext4 将像 ext3 一样成为所有用户的最佳选择,但需要注意几个问题。首先,ext4 还存在一些独有的 bug,因此当首次发行 ext4 稳定版时要多加注意。其次,使用 ext4 可能导致一些老版本的工具无法访问磁盘。这将涉及到紧急恢复工具,因此在确定您使用的工具支持 ext4 之前不要进行更新。好的一面是,应该可以从 ext3 顺利迁移到 ext4,如果需要保存现有数据,这将实现轻松的转移。
编译和激活 ext4 支持
了解了这些内容,您大概想体验一下 ext4。但在体验之前您必须重新编译内核并添加必要的支持。我推荐使用最新的内核(撰写本文时的最新版本为 2.6.24.4)。先解压缩内核源代码并手动设置所有选项或复制旧版本内核的 .config 文件,接着输入 make oldconfig 复制以前的设置,最后输入首选配置命令(如 make xconfig)查看内核选项。您将在主 File Systems 区域看到 ext4 选项,Ext4dev/ext4 extended fs support development (EXPERIMENTAL)(该名称将来很可能会改变,尤其是宣布 ext4 稳定以后)。注意,必须查看 General 区域的 Prompt for development and/or incomplete code/drivers 选项,在这里也能够看到 ext4 选项。
选择 ext4 支持之后,保存对内核的修改,通过输入 make 编译内核,并通过输入 make modules_install 把模块安装为 root。然后将已编译的内核(在 arch/i386/boot 或其他目录下)复制到适当的位置(如 /boot),编辑 GRand Unified Bootloader(GRUB)或 Linux Loader(LILO)配置并重启计算机。如果使用的是启动 RAM 磁盘,在准备过程中还需用到实用程序 mkinitrd。
除了内核模块之外,还要查看 e2fsprogs 的一个版本,它支持 ext4 文件系统的功能。您可以下载一个压缩文件(参考资料 一节提供了相关的链接)或使用 git,如清单 1 所示。
清单 1. 通过 git 获取最新版本的 e2fsprogs 的命令
$ git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
$ cd e2fsprogs
$ git checkout -b pu
Switched to a new branch "pu"
$ git branch
master
* pu
$ git pull git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git pu
注意,您有可能需要使用发行版的包管理器安装 git。这些工具有待进一步测试,因此不推荐在生产系统中使用,并且就目前而言,并没有添加很多特别针对 ext4 的工具。因此,您可能更喜欢使用随发行版一起交付的 stock e2fsprogs 包。
e2fsprogs 的编译过程非常标准:将 cd 包解压缩到生成的目录,输入 ./configure,输入 make,并输入(作为 root)make install。 这个过程将覆盖发行版的常规 e2fsprogs 包,因此,只有确定要使用这些工具的最新(也可能是不稳定的)版本时,才执行此操作。
把 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 包的一部分,因此需要单独下载(参考资料 小节提供了链接)。
deepwhite 于 2008-07-06 22:13:36发表:
等待ext4成熟以后再用……
不能拿硬盘上的数据做实验,出了问题就OVER了。