在 Linux 中使用 ReiserFS 文件系统

查看 ext2(第二版扩展文件系统)、ext3(第三版扩展文件系统)和 Reiser4 文件系统,并研究如何创建您自己的 Reiser4 文件系统。ext2 是最常用的文件系统,也是传统 UNIX® 风格的文件系统,它对最新式硬盘大小的兼容性不是很好。ext3 文件系统添加了日记记录功能,而其他方面并没有多大变化。如果您想获得真正的高级技术,那么您可能打算研究最近的 Reiser4 文件系统。

引言

九十年代早期我曾为当时所使用的计算机花了很多钱购买了一块 80MB 的大容量(在当时是这样)硬盘,从那时起,文件系统和硬盘就总是很令我着迷。让我乐在其中的事情就是通过总线来回传输大块的数据,读取和写入大量的文件,并进行标准检查。

也许您并不像我这样沉迷于硬盘和那些跟踪文件、目录的软件,但是您至少会关心如何保护数据安全、高效地使用驱动器、以及从系统贫瘠的 I/O 子系统中设法挤出尽可能多的性能。

是的,我把它称作“贫瘠”。除非您有大笔的资金用来购买非同一般的硬件,否则与 CPU、RAM 和显示卡等设备相比,磁盘 I/O 子系统方面取得的进步非常之小。著名的摩尔定律在这里并不适用,它仅适用于微型磁学和高级制造过程。

作 为使用最广泛的操作系统,Linux® 具有对各种不同文件系统最好的支持。Linux 在这方面和其他的 UNIX® 系统不同,这些 UNIX 系统传统上只支持它们的本机文件系统和在标准的 CD-ROM 中使用的 ISO-9660 文件系统。我的 Fedora Core 4 系统具有支持二十几种文件系统的可加载式内核模块。它们主要用来提供良好的兼容性。您可以将磁盘插入到几乎任何其他的系统中,并在 Linux 中对其进行操作。但是如果您正在向 Linux 系统添加另一块磁盘,并且不打算让它和 Windows®、QNX、Mac OS X 或者 Minix 通信,那么应该怎么办呢?

您至少需要了解一些关于常用的 Linux 文件系统的基本知识,如 ext2(第二版扩展文件系统)、ext3(第三版扩展文件系统)和 ReiserFS 4(一种支持许多独特特性的有趣的、高级的文件系统,这些特性可以提高系统的文件处理能力)。
开始之前

如 果您所运行的 Linux 分发版恰好不支持 Reiser4(如 Arch、Linspire 或 SUSE),那么您需要完成下列这些可能很棘手的工作:重新编译您的内核。如何对内核进行重新编译,这本身就可以作为一个单独的教程,您需要查找所使用的 分发版的“How-to”文章,它将引导您完成重新编译内核所需的步骤。

在您实际开始编译全新的 Linux 内核之前,还需要访问 Reiser4 在 Namesys 的主页(请参阅参考资料)并为您的内核下载 Reiser4 修补程序。这些修补程序中说明了在配置和编译内核之前应该如何应用它们。

所以,您将可以创建和操作 Reiser4 文件系统,请确保已经安装了 Reiser4progs 包。此外,如果您的分发版中没有 Resier4progs,请浏览 Namesys 站点以下载这个软件包(请参阅参考资料)。

如果您想对 Reiser4 进行简单的试验,可以使用支持 Reiser4 的优秀的 Gentoo Linux Live CD。请参阅参考资料部分中相应的链接。
Linux 文件系统

在 Linux 诞生之初(实际上是在 1993 年末),其内核只支持一种文件系统,即非常微型的 Minix 文件系统的入口。这种文件系统有一些缺点,包括 14 个字符的文件名和最大 64MB 的文件系统大小。它甚至不支持 UNIX 文件系统属性全集,特别是符合 POSIX(可移植操作系统接口)文件系统的全集中所需的创建、修改和访问时间戳。

因为 Minix 文件系统的这些局限性,所以人们开始研究替代的文件系统,并产生了附加的虚拟文件系统 (VFS) 抽象层,该抽象层使得 Linux 能够更容易地读取文件系统中的数据。使用新的 VFS,Minix 文件系统允许使用更长的文件名和更大的文件系统容量(最大可到 2 GB)。这就成为了扩展文件系统 (ext),但它仍然具有其局限性。

相应的解决方案是 ext2,现在许多系统中仍然使用这种文件系统,它在相当长的时间内一直作为 Linux 中缺省的文件系统。通过在 ext2 文件系统中添加日记记录功能以对其进行改进,这样就创建了 ext3 文件系统作为其后继文件系统。

ReiserFS(也 称为 Reiser3 文件系统)是 Linux 中第一种支持日记记录和更高效磁盘使用率的高级文件系统,它比 Linux 中使用的任何其他进行日记记录的文件系统都早。它的后继文件系统 Reiser4,对其进行了彻底的重新设计和重新编写,在维护数据安全和高效的同时,主要关注于扩展性、安全性和性能。Reiser4 目前尚未集成到 Linux 2.6 内核中,这表示了可能存在不稳定性或其他需要逐步过渡的原因。无论您所使用的是何种文件系统,请记住对重要的数据进行备份。

让我们来简单地看一下 ext2、ext3 和 Reiser4 文件系统。

传统的文件系统:ext2

ext2 文件系统是 Linux 的缺省文件系统,也是传统的 UNIX 文件系统(即基于 Berkeley 的快速文件系统,FFS)。在 ext2 中,文件名最大长度为 255 个字符,并且理论上的最大文件系统大小为 4 TB。(Linux 的块设备驱动器则不能超过 2047 GB,什么时候可以买到具有如此之大的存储空间的单块磁盘,别忘了告诉我一声)。

由于其使用广泛,市场上出现了针对 Windows 和 Mac OS X 的 ext2 驱动器,允许您直接从这些操作系统中读取和写入 ext2 文件系统,这使它成为了共享设备(如移动硬盘)极好的格式。

ext2 文件系统支持所有的标准 UNIX 特性:

  • 所有者用户 ID 和组 ID。
  • 用来控制用户、组以及其他权限和操作系统标志的模式位。
  • 条目创建、修改和访问时间(尽管大多数系统为了提高性能,在运行过程中没有开启访问时间跟踪,但这样就丧失了纯 POSIX 1003.1 的兼容性)的存储。

ext2 文件系统的最大缺点在于,与其最初的设计相比,硬盘的大小变大了许多。系统崩溃或出现电源故障后,需要使用 fsck 对文件系统进行检查,而对于具有大量目录和文件的新式硬盘来说,该操作过程非常耗时。

传统的但包括日记记录功能的文件系统:ext3

Linux 的 ext3 文件系统是大部分流行分发版的新的缺省文件系统。与 ext2 相比,它增加了:

  • 元数据日记,以确保文件系统的结构总能保持有效状态。这样一来,在系统崩溃或掉电后,基本上不再需要冗长的 fsck 处理过程了。
  • 经过散列的树目录索引,用来加速对大型目录的访问时间。
  • 联机文件系统大小调整和从 ext2 到 ext3 的免格式化升级能力。
  • 更大的最大文件和文件系统大小(分别为 2 和 32 TB)。

尽管与其竞争者(如 Reiser3 或 SGI 优秀的 XFS)相比,ext3 速度并不块,并且可伸缩性也不是很好,但是因为大量成熟的 ext2 维护和管理实用工具的存在,所以对 ext2 的良好兼容性使得它更具有吸引力。

蝙蝠侠跑车式的选择:Reiser4

在 Reiser3 文件系统因为其速度和日记记录支持(甚至到现在,它仍是许多 Linux 分发版的缺省文件系统)而获得普遍认可之后,它的设计人员并不满足。于是对其进行了重写,从而得到了 Reiser4,其中添加了一些附加的并且有趣的特性:

  • 通过移动日志来实现有效的日记记录功能。
  • 在磁盘空间和速度方面提供对小文件的有效支持。
  • 快速处理具有大量文件的超大型目录(的确如此,即使单个目录中包含数百万文件,也不会影响其性能)。
  • 源代码级的灵活插件结构,它允许将来很容易地在某个位置添加压缩和加密功能。
  • 原子文件系统修改,它确保了磁盘上的文件系统总能保持有效状态。
  • 通过刷新分配 (allocate-on-flush) 实现磁盘布局动态优化。
  • 支持类似数据库的文件系统事务处理。

但 请稍等,为什么我把它称为蝙蝠侠跑车式的选择呢?Reiser4 支持许多有趣的特性,但这些特性您可能根本不需要使用或者甚至无法使用,因为 Linux 的 VFS 层并没有公开其功能,这就像蝙蝠侠跑车,虽然它具有各种各样的功能,但是您在上班途中根本用不上这些功能。
开始使用 Reiser4

在使用 Reiser4 文件系统进行任何有趣的工作之前,首先您需要用它来格式化一个分区。如图 1 所示,我有一个专门用于该用途的空闲分区:
图 1. 等待进行格式化的分区
等待进行格式化的分区

您需要在这个分区上创建新的 Reiser4 文件系统,并且将它装入。

创建 Reiser4 文件系统

要创建该文件系统,您需要以 root 用户登录(或使用 sudo 命令来模拟 root 用户),并使用 mkfs.reiser4 命令:

  1. /sbin/mkfs.reiser4 -L myLabel /dev/hda1

这个命令在指定分区(在我的示例中是 /dev/hda1)上创建了 Reiser4 文件系统,并且具有卷标“myLabel”和一个随机的唯一标识符,如图 2 所示。
图 2. 创建 Reiser4 文件系统
创建 Reiser4 文件系统

等待着我们的是一个全新的、空白的 Reiser4 文件系统!让我们将它装入,以便可以真正地使用它。

将它装入

要装入这个新的文件系统,您需要以 root 用户登录(或使用 sudo 命令来模拟 root 用户),并使用 mkdirmount 命令:

  1. mkdir /mnt/reiser4
  2. mount /dev/hda1 /mnt/reiser4

首先使用 mkdir 来创建一个装入点,然后使用 mount 将包含文件系统的设备装入到这个刚创建的装入点。

您可以使用不带参数的 mount 命令来获取当前已经装入的文件系统的列表,此时,其中应该包括了新的 Reiser4 文件系统(请参见图 3)。
图 3. 已装入的文件系统,包括 Reiser4
已装入的文件系统,包括 Reiser4

既然已经装入了新的文件系统,您应该确保系统能够自动地装入这个文件系统。

自动地装入该文件系统

要让系统自动地装入新的 Reiser4 卷,您需要在 /etc/fstab 文件中对其进行描述。

以 root 用户登录(或使用 sudo 命令来模拟 root 用户),然后使用您最喜爱的编辑器对 /etc/fstab 进行编辑,在该文件的底部添加下面的代码:

  1. /dev/hda1    /mnt/reiser4    reiser4    defaults    0 0

在 /etc/fstab 中,需要为您的文件系统使用合适的设备和装入点。在设备和装入点之后,需要指定文件系统类型和文件系统选项(缺省的通常是最好的,除非您真正地了解您所进 行的工作,并且可以找到针对您的文件系统的很好的文档资料)。最后的两个参数是用于历史原因所需的“转储频率”和“并行 fsck 传递数值”。

通过卸载该文件系统并使用 mount 命令来自动装入所有的文件系统,您可以对经过编辑的 /etc/fstab 文件的正确性进行测试:

  1. umount /mnt/resier4
  2. mount -a

现在,当您使用不带参数的 mount 命令时,其结果应该和前一次的结果(图 3)完全一致。新的 Reiser4 文件系统将在系统启动时和其他的文件系统一起被自动地装入。
对性能和行为进行调整

与大部分其他的 Linux 文件系统一样,可以通过一些选项来提高 Reiser4 的整体性能并修改它的行为。这些选项可以在 mount 命令行中使用 -o 选项来传递,如下面的代码所示:

  1. mount -t reiser4 -o option1,option2,…,optionn /dev/hda1 /mnt/reiser4

可以在该命令中包括以逗号分隔的多个文件系统选项。

这样一来,系统就可以在启动的时候读取这些参数,也可以在 /etc/fstab 文件中包含这些文件系统选项:

  1. /dev/hda1    /mnt/reiser4    reiser4    option1,option2,…,optionn    0 0

最常用的选项包括:

  • defaults——缺省 Linux 文件系统设置。这和直接指定 rwsuiddevexecautonouserasync 是一样的。这些选项分别表示:该文件系统将以读写模式装入,set-UID 位将生效,将正常处理特殊字符或块设备,可以执行二进制文件,可以自动装入该文件系统,并且所有的 I/O 都以异步方式完成。
  • noatime——当读取文件或目录时,不要更新访问时间字段。这并不是严格的 POSIX 行为,但是它可以显著地提高文件系统的操作速度,特别是对于具有大量目录和文件且读取操作远多于写入操作的文件系统。
  • noexec——不要从该文件系统中运行二进制文件。它被视为仅包含数据的文件系统,如果您并不完全相信文件或可执行文件的来源,那么使用这种方式是很方便的。
  • nosuid——忽略存储在该目录中的文件上的 set-user-ID 和 set-group-ID 位,同样地,当您并不相信这些文件的来源时,这也是一个可用的安全特性。
  • ro——文件系统以只读方式装入。写入文件、创建新的文件或目录的尝试都将失败。
  • data=journal——在向文件系统中写入数据之前,将会对所有的数据进行日记记录,而不仅仅将文件系统元数据写入到日记。这样就确保了灾难发生时的数据完整性,但却严重地降低了写入操作的性能。

通常情况下,您可以使用这些选项的缺省值,但可以添加 noatime 选项以安全地提高执行速度。对于重要的 CVS 服务器或用于进行备份的文件系统,使用 data=journal 选项可能是个好主意,因为拥有有效的数据比原始吞吐量更重要。
总结

向 Linux 集合中添加一种文件系统可能令人生畏,特别当您想要试用 Linux 所支持的许多不同文件系统之一时。了解常用的文件系统的相关特性和设计上的局限性,这将帮助您对文件系统作出明智地选择。

Reiser4 目前仍被认为处于试验阶段(即使许多人正在使用它,并且没有出现什么问题),因为它尚未集成到 Linux 内核中。Namesys 的工作人员正在努力地让他们的代码成为内核中的一部分,因此基于 Reiser4 的分发版的出现只是个时间问题。

使用 mkfs 命令创建新的文件系统,然后使用 mount 命令(并将该命令添加到 /etc/fstab 文件中)对其进行装入,这样您就可以开始使用该文件系统了。完成这些工作后,请记住对重要的数据进行定期备份,而不要等到硬盘出现故障。

参考资料

学习

出处:http://www.ibm.com/developerworks/cn/aix/library/au-unix-reiserFS/index.html

发表评论