Linux 中的主要文件系统

与两三年前不同,为 Linux 系统选择文件系统不再是花几秒钟就能完成的操作(选择 Ext2 或 ReiserFS)。 从版本 2.4 开始,内核提供了多种供选择的文件系统。 下面概述了这些文件系统的基本工作原理以及它们的优点。

您一定要记住一点,即没有任何一个文件系统能适合所有应用环境。 每个文件系统都有各自的特定优点和缺点,必须将这些因素考虑在内。 但是,即使是最复杂的文件系统也不能替代合理的备份策略。

本章中使用的术语数据完整性数据一致性并不是指用户空间数据(您的应用程序写入其文件的数据)的一致性。 此数据是否一致必须由应用程序本身控制。

[Important]设置文件系统

除非本章另行声明,否则可以使用 YaST 执行设置或更改分区和文件系统所需的所有步骤。

ReiserFS

作为 2.4 内核版本的正式的重要功能之一,ReiserFS 作为 2.2.x SUSE 的内核增补程序提供,因为 V6.4. ReiserFS 是由 Hans Reiser 和 Namesys 开发团队设计的。 ReiserFS 已证明它自己是 Ext2 功能强大的替代系统。 ReiserFS 的主要优点是更高的磁盘空间利用率、更高的磁盘访问性能以及更快的崩溃恢复速度。

以下内容是对 ReiserFS 优点的详细说明:

更高的磁盘空间利用率

在 ReiserFS 中,采用一种名为 B*-Tree(平衡树)的结构组织所有数据。 这种树结构有助于提高磁盘空间的利用率,这是因为可以将小文件直接储存在 B* 树叶节点而不是其他位置,并且只维护一个指向实际磁盘位置的指针。 此外,不按照 1 KB 或 4 KB 的大块来分配储存区,而是根据所需的准确大小进行。 另一个优点是 inode 的动态分配。 这使得此文件系统比传统的文件系统(例如 Ext2)更灵活,而传统文件系统中的 inode 密度必须在创建文件系统时指定。

更高的磁盘访问性能

对于小文件,文件数据和 “stat_data” (inode) 信息经常被储存在相邻的位置。 这样通过一个磁盘 I/O 操作就可以访问它们,这意味着只需访问磁盘一次就可以检索到所有需要的信息。

更快的崩溃恢复速度

使用日记来跟踪最近的元数据更改使对文件系统的检查可以很快完成,即使对大型文件系统也是如此。

通过数据日记确保可靠性

ReiserFS 还支持与 Ext3 一节 第 25.2.3 节 “Ext3” 中介绍过的概念类似的数据日记和有序数据方式。 默认方式是 data=ordered,它确保了数据和元数据的完整性,但只对元数据使用日记。

Ext2

Ext2 的起源可以追溯到 Linux 历史的早期。 1992 年 4 月推出了 Ext2 的前身 Extended File System(扩展文件系统),并将其集成到 Linux 0.96c 中。 扩展文件系统经过多次修改,并(像 Ext2 一样)成为多年来最流行的 Linux 文件系统。 但随着日记文件系统的创建以及其恢复时间的大大缩短,Ext2 的重要性逐渐降低。

简要总结 Ext2 的优点有助于您了解为什么它以前是(在某些领域现在仍是)许多 Linux 用户最喜欢使用的 Linux 文件系统。

可靠性

Ext2 确实是一个“老古董”,它经历了许多改进和频繁的测试。 这可能是人们将其称之为坚如磐石的文件系统的原因。 在系统中断后,如果无法彻底卸装文件系统,则 e2fsck 将开始分析文件系统数据。 系统使元数据恢复一致的状态,并将挂起的文件或数据块写入指定的目录(名为 lost+found)。 与日记文件系统相比,e2fsck 会分析整个文件系统,而不仅仅是最近修改的元数据位。 这种操作所花的时间要远远超过检查日记文件系统的日志数据所花的时间。 根据文件系统的大小,此过程可能需要半小时或更长时间。 因此,对于任何要求高可用性的服务器,不要选择 Ext2。 但是,因为 Ext2 不维护日记且使用的内存也少得多,所以其速度常常超过其他文件系统。

可方便地升级

Ext2 的代码是 Ext3 成为广受欢迎的下一代文件系统的坚实基础。 它的可靠性和稳定性与日记文件系统的优点完美地结合在一起。

Ext3

Ext3 是由 Stephen Tweedie 设计的。 与所有其他下一代文件系统不同,Ext3 并没有采用全新的设计原则。 它是在 Ext2 的基础上设计的。 这两个文件系统密切关联。 可以方便地在 Ext2 文件系统上建立 Ext3 文件系统。 Ext2 和 Ext3 最重要的区别是 Ext3 支持日记。 总之,Ext3 有三个主要优点:

方便并高度可靠地从 Ext2 升级

因为 Ext3 以 Ext2 代码为基础并且共享 Ext2 的磁盘上格式和元数据格式,所以从 Ext2 升级到 Ext3 非常简单。 与转换到其他日记文件系统不同,转换到 Ext3 只需要花几分钟,而转换到其他日记文件系统(如 ReiserFS 或 XFS)会相当繁琐(备份整个文件系统并从头开始重创建文件系统)。这样操作还很安全,因为从头重创建整个文件系统很可能会出现问题。考虑到等待升级到日记文件系统的现有 Ext2 系统的数量,就很容易明白为什么 Ext3 对许多系统管理员来说如此重要。 从 Ext3 降级到 Ext2 与升级一样简单。 只需彻底卸载 Ext3 文件系统,然后作为 Ext2 文件系统重装入即可。

可靠性和性能

某些其他日记文件系统采用“仅元数据”的日记方法。 这意味着元数据始终保持一致的状态,但无法自动保证文件系统数据本身一致。 Ext3 的设计既可以照顾到元数据,又可以照顾到数据。 “照顾”的程度可以自定义。 在 data=journal 方式中启用 Ext3 可以提供最大的安全性(数据完整性),但因为要将元数据和数据都记入日记,所以可能降低系统的速度。 一个相对较新的方法是采用 data=ordered 方式,这种方式确保了数据和元数据的完整性,但只对元数据使用日记。 文件系统驱动程序收集与一次元数据更新对应的所有数据块。 这些数据块在更新元数据之前被写入磁盘中。 这样,在不牺牲性能的情况下,元数据和数据的一致性得以实现。 第三个可以使用的选项是 data=writeback,它允许在将某些数据的元数据提交给日记后,将这些数据写入主文件系统。 在性能方面,此选项常被认为是最佳选项。 但它在维护内部文件系统完整性的同时,允许以前的数据在系统崩溃并恢复后再次出现在文件中。 除非指定了其他选项,否则运行 Ext3 时,data=ordered 为默认设置。

Ext2
文件系统转换为 Ext3

要将 Ext2 文件系统转换为 Ext3,请按如下所示继续:

  1. 通过作为 root 运行 tune2fs -j 创建 Ext3 日志。 此命令将用默认参数创建 Ext3 日记。

    要自己确定日志的大小和所在的设备,请改为运行 tune2fs -j,同时带所需的日志选项 size=device=。 可以在 tune2fs 程序的 tune2fs 手册页中获得关于此程序的更多信息。

  2. 要确保正确地识别 Ext3 文件系统,请作为 root 编辑文件 /etc/fstab,将为对应的分区指定的文件系统类型从 ext2 更改为 ext3。 此更改将在下次重引导后生效。

  3. 要引导设置为 Ext3 分区的根文件系统,请将模块 ext3jbd 包含在 initrd 中。 要执行此操作,请作为 root 编辑 /etc/sysconfig/KERNEL,将 ext3jbd 添加到 INITRD_MODULES 变量。 保存更改后,请运行 mkinitrd 命令。 这将构建一个新的 initrd,并准备使用它。

XFS

SGI 在 20 世纪 90 年代初开始开发 XFS,最初计划将 XFS 作为 IRIX OS 的文件系统。 开发 XFS 的目的是创建一个高性能的 64 位日记文件系统来满足当今对计算能力的极高要求。 XFS 适合操纵大型文件,在高端硬件上表现优异。 但即使是 XFS 也有缺点。 与 ReiserFS 类似,XFS 非常注重元数据的完整性,但不太注重数据的完整性。

快速回顾 XFS 的关键功能将解释为什么此文件系统被证明是在高端计算方面其他日记文件系统的强大竞争对手。

通过使用分配组实现高伸缩性

在创建 XFS 文件系统时,文件系统底层的块设备被分成 8 个或 8 个以上相同大小的线性区域。 这些线性区域被称为分配组。 每个分配组管理自己的 inode 和可用空间。 实际上,可以将分配组看作文件系统中的文件系统。 因为分配组相互独立,所以内核可同时对多个分配组进行寻址。 此功能对 XFS 优异的可伸缩性非常关键。 独立分配组的概念自然适合多处理器系统的需要。

通过有效管理磁盘空间获得高性能

可用空间和 inode 是由分配组内的 B+ 树处理的。 使用 B+ 树将大大增强 XFS 的性能和可伸缩性。 XFS 使用延迟分配。 它通过将进程分成两部分来处理分配。 将挂起事务储存在 RAM 中并保留适当数量的空间。 XFS 仍不决定应储存数据的准确位置(指出文件系统块)。 此决定将被延迟到最后的时刻。 某些生存期很短的临时数据可能永远不会被储存到磁盘上,这是因为在 XFS 决定保存它们的实际位置时,这些数据可能已经过时了。 这样,XFS 增强了写性能,并减少了文件系统碎片的数目。 因为延迟分配引起写事件的频率比其他文件系统引起写事件的频率要低,所以如果写操作期间发生系统崩溃,则数据丢失可能会更加严重。

进行预分配以避免文件系统碎片

在将数据写入文件系统前,XFS 保留(预分配)文件所需的可用空间。 这样会大大减少文件系统碎片的数目。 因为文件的内容不会分散在整个文件系统中,所以性能得以提高。

Oracle Cluster File System 2

OCFS2 是一个日志文件系统,此文件系统是为群集设置量身定制的。与标准的单节点文件系统(如 Ext3)相反,OCFS2 能够管理多个节点。OCFS2 允许跨共享储存区扩展文件系统,如 SAN 或多路径安装。

OCFS2 设置中的每个节点都具有对所有数据的并发读写访问权。这需要 OCFS2 支持群集,表示 OCFS2 必须包含一种方法来确定群集由哪些节点组成以及这些节点是否真正存在并可用。为了计算群集的成员资格,OCFS2 包含一个节点管理器 (NM)。为了监视群集中节点的可用性,OCFS2 包含一个简单的检测信号实施工具。为避免各节点直接访问文件系统而导致的混乱,OCFS2 还包含一个锁管理器,DLM(分布式锁管理器)。节点之间的通讯通过基于 TCP 的消息交换系统处理。

OCFS2 的主要功能和优点包括:

  • 元数据缓存和日记

  • 异步和直接 I/O 支持已提高了数据库性能的数据库文件

  • 支持最大为 4 KB 的多块大小(每个卷可以有不同的块大小),支持最大为 16 TB 的卷大小

  • 跨节点的文件数据一致性

  • 支持最多 255 个群集节点

有关 OCFS2 的进一步详细信息,请参见第 14 章 Oracle Cluster File System 2