分类: LINUX
2008-07-02 09:33:23
Ext4 是众多 Linux® 文件系统中的最新版本,它将像以前的版本一样重要和流行。作为 Linux 系统管理员,您应该知道迁移到 ext4 的优缺点和基本步骤。本文将介绍何时应采用 ext4、如何在 ext4 中使用传统的文件系统维护工具以及如何充分利用该文件系统。
Linux 支持几个不同的文件系统。这些文件系统中,一些是专用的网络文件系统或为其他操作系统开发的文件系统,但绝大部分还是用作 Linux 本地文件系统 — 您可以将 Linux 根(/
)和系统目录放在这种文件系统里。目前,这一类文件系统包括 ext2、ext3、ReiserFS、XFS 和 Journaled File System (JFS)。但是文件系统一直在不断设计和开发中,新的文件系统也将陆续问世。
目前正在开发的最重要的 Linux 文件系统是 ext4 — 它是专门为 Linux 开发的原始的扩展文件系统(ext 或 extfs)的第四版。由于继承了以前版本,ext4 在不久的将来很可能会成为一个重要的 Linux 标准文件系统(可能是 标准文件系统)。
扩展文件系统(ext 或 extfs)第四版产生的原因是开发人员在 ext3 中并入了新的高级功能。但在实现的过程出现了几个问题:
由于这些原因,从 2006 年 6 月份开始,开发人员决定把 ext4 从 ext3 中分离出来进行独立开发。Ext4 的开发工作从那时起开始进行,但大部分 Linux 用户和管理员都不怎么注意这件事情。随着 2.6.19 内核在 2006 年 11 月的发布,ext4 第一次出现在主流内核里,但是它当时还处于试验阶段(现在还是),因此很多人都忽视了它。
由于还处于开发阶段,从 2.6.24.4 内核开始,ext4 的功能列表就一直在变动。 Ext4 的当前和预期功能包括从 ext3 发展而来的功能,见表 1。
功能 | 优势 |
---|---|
更大的文件系统 | 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 的用户是那些磁盘空间大小为几个 TB 的用户。然而表 1 中的功能列表还展示了其他一些吸引人的改进。例如,如果您的目录带有大量子目录,或者要求时间戳的精确度小于一秒,您可能希望尝试使用 ext4。
因为 ext4 目前处于试验阶段,要使用它就必须重新编译内核,否则,使用 ext4 时将会出现麻烦。事实上,ext4 处于试验阶段意味着只有希望为 ext4 的开发做贡献,或者非常渴望它的某些功能,这些情况下才有必要使用它。如果想在稳定的 ext4 发布之前获得可靠的大磁盘支持,可以考虑使用 XFS 或 JFS。
当然,ext4 不可能永远处于试验阶段。它不久将成为一个稳定的文件系统。届时,ext4 将像 ext3 一样成为所有用户的最佳选择,但需要注意几个问题。首先,ext4 还存在一些独有的 bug,因此当首次发行 ext4 稳定版时要多加注意。其次,使用 ext4 可能导致一些老版本的工具无法访问磁盘。这将涉及到紧急恢复工具,因此在确定您使用的工具支持 ext4 之前不要进行更新。好的一面是,应该可以从 ext3 顺利迁移到 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 所示。
$ 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
包,因此,只有确定要使用这些工具的最新(也可能是不稳定的)版本时,才执行此操作。
当系统在 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 文件系统,就必须使用 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 或执行基准测试以外,您不会觉察到任何差别。
可以使用 tune2fs
程序调优 ext4 文件系统,与调优 ext2 或 ext3 文件系统的方式一样。目前, tune2fs
不提供任何特定于 ext4 的选项,但是可以使用标准的 -O
参数设置 ext4 选项,例如 extent
。
当把文件系统挂载为 ext4 时,内核开始使用特定于文件系统的功能,如 extent。这样做的结果是不能再把文件系统挂载为 ext3 文件系统,至少会变得非常困难。
尽管把 ext3 文件系统挂载为 ext4 能够实现特定于 ext4 的功能,挂载本身并不把旧数据结构转换为新的格式。例如,现有文件保持块状方式分配, 而不是使用 extent 进行分配。因此,旧文件没有从新功能获得好处。然而,ext4 的开发人员已经考虑到这种情况并且提供了一种解决办法:可以使用(正处于 试验阶段的)e4defrag
工具(随后将介绍)转换分配方式来利用 extent 功能。另一个新工具(尚不可用)将改变 inode 的大小,使它变为新的格式。
可以使用标准的 e2fsprogs
工具来维护 ext4 文件系统,例如使用 tune2fs
在创建文件系统之后调整选项,使用 fsck.ext4
执行文件系统检查等等。这些程序在 ext4 与 ext3 之间没有很大的差别。但是,如前面提到的一样,ext4 包含一些能够提升 fsck
性能的增强功能。
除了这些工具以外,有一个新工具特别值得注意:e4defrag
。该程序能够对已挂载的 ext4 文件系统进行磁盘碎片整理。这能够提高性能,尤其是文件系统空间快要用完的时候。同时,这也有利于将 ext2/3 样式的分配转换为基于 extent 的 ext4 样式的分配,因此能够提高曾经作为 ext3 文件系统的文件系统的性能。不幸的是,e4defrag
还不是标准的 e2fsprogs
包的一部分,因此需要单独下载(参考资料 小节提供了链接)。