Ext3

来自 ArchWiki
注意: ext3 已被 ext4 取代,仅应用于依赖于它的旧系统。如有疑问,请始终使用 ext4。

当 ext3 文件系统在 2001 年因引入日志功能而被添加时,它曾经是一个很好的选择。然而,除非旧版软件需要,否则应使用 ext4。有关 ext4 相对于 ext3 的改进,请参阅 Wikipedia:Ext3#ext4

使用 tune2fs 和 e2fsck

在我们开始之前,我们需要确保您熟悉使用 tune2fs 实用程序来更改 ext2 或 ext3 分区(或将 ext2 转换为 ext3)的文件系统选项。请阅读 tune2fs(8)

通常,在完成您希望对文件系统进行的更改后,最好使用 e2fsck 实用程序运行文件系统检查。这将验证您的文件系统是否干净并在需要时修复它。如果您尚未阅读 e2fsck 实用程序的手册页,您也应该阅读它。

警告: 只能在未挂载时运行! 在使用 tune2fse2fsck 实用程序更改文件系统之前,请确保所有文件系统都已干净地卸载!在文件系统挂载时更改或调整文件系统可能会导致严重损坏!考虑从 LiveCD 启动,例如 Parted Magic 或 Arch Linux LiveCD。

使用目录索引

此功能通过使用哈希二叉树存储目录信息,改进大型目录或包含许多文件的目录中的文件访问。使用它是完全安全的,并且在大多数情况下,它提供了相当大的改进;因此启用它是一个好主意。

# tune2fs -O dir_index /dev/sdXY

这仅对在运行 tune2fs 后在该文件系统上创建的目录生效。为了将此应用于当前已存在的目录,我们必须运行 e2fsck 实用程序来优化和重新索引文件系统上的目录。

# e2fsck -D -f /dev/sdXY
注意
  • 这应该适用于 ext2、ext3 和 ext4 文件系统。根据您的文件系统大小,这可能需要很长时间。
  • 目录索引在 Arch Linux 中默认通过 /etc/mke2fs.conf 激活。

启用完整日志

警告: 如果同时启用延迟分配和完整日志(例如 journal=data),ext4 分区将无法挂载。

默认情况下,ext3 分区以“ordered”数据模式挂载。在此模式下,所有数据都写入主文件系统,其元数据提交到日志,日志的块在逻辑上分组到事务中以减少磁盘 I/O。这对于大多数人来说往往是一个不错的默认设置。但是,我发现了一种方法,可以提高可靠性和性能(在某些情况下):记录所有内容,包括文件数据本身(称为“journal”数据模式)。通常,人们会认为记录所有数据会降低性能,因为数据写入磁盘两次:一次写入日志,然后稍后提交到主文件系统,但这似乎并非如此。我已在我所有的九个分区上启用了它,并且只在删除大型文件时看到轻微的性能损失。实际上,这样做实际上可以提高在需要同时进行大量读写的文件系统上的性能。有关更多信息,请参阅 IBM 网站上 Daniel Robbins 撰写的这篇文章

有两种不同的方法可以激活日志数据模式。第一种方法是在 /etc/fstab 中添加 data=journal 作为挂载选项。如果您以这种方式操作并希望您的根文件系统也使用它,您还应该在引导加载程序的配置中传递 rootflags=data=journal 作为内核参数。在第二种方法中,您将使用 tune2fs 修改文件系统超级块中的默认挂载选项。

# tune2fs -O has_journal -o journal_data /dev/sdXY

请注意,第二种方法可能不适用于较旧的内核。特别是 Linux 2.4.20 及更低版本可能会忽略超级块上的默认挂载选项。如果您感觉冒险,您可能还想调整日志大小。(我将日志大小保留为默认值。)更大的日志可能会给您带来更好的性能(以占用更多磁盘空间和更长的恢复时间为代价)。在执行此操作之前,请务必阅读 tune2fs 手册的相关部分。

# tune2fs -J size=$SIZE /dev/sdXY

禁用冗长的启动时间检查

警告: 仅在日志文件系统(如 ext3/4)上执行此操作。这可能适用于也可能不适用于其他日志文件系统(如 ReiserFS 或 XFS),但尚未经过测试。这样做可能会损坏或其他方式破坏其他文件系统。您需要自行承担风险

似乎我们的 ext3 文件系统仍然每 30 次挂载左右检查一次。对于许多人来说,这是一个很好的默认设置,因为它有助于在您遇到硬件问题(例如不良的 IDE/SATA/SCSI 电缆、电源故障等)时防止文件系统损坏。创建日志文件系统的驱动力之一是,文件系统可以通过恢复和重放所需的日志事务轻松恢复到一致状态。因此,如果我们确定文件系统将在需要时快速检查以恢复日志以恢复文件系统和数据一致性,我们可以安全地禁用这些挂载计数和与时间相关的检查。在执行此操作之前,请确保您的文件系统在 /etc/fstab 中的第 6 个字段(pass)中有一个正整数,以便在启动时自动检查它。您可以使用以下命令执行此操作

# tune2fs -c 0 -i 0 /dev/sdXY

如果您只是想限制检查发生的频率,而不是完全禁用它们(为了安心)。一个好方法是将计数检查的次数更改为时间范围检查。请参阅 tune2fs(8)。以下是每月一次

# tune2fs -c 0 -i 1m /dev/sdXY

回收保留的文件系统空间

默认情况下,Ext3 分区包含 5% 的已用空间用于特殊原因。主要原因是帮助减少文件系统上的碎片。这种空间的另一个原因是,即使文件系统 100% 已用,root 也可以登录。如果没有此选项,root 用户可能无法登录以“清理”,因为系统可能会变得不稳定,例如尝试将日志写入 100% 已满的系统。

问题在于硬盘越来越大,5% 的空间加起来可能相当大,造成空间浪费。(例如,100 GB = 5 GB 保留)。现在,如果您将文件系统分隔到像 /home 这样的位置,那么调整这些设置并回收长期存档分区上浪费的空间可能是一个好主意(有关更多信息,请参阅这封电子邮件)。将您的 / 文件系统保留为 5% 的保留空间以防万一是一个安全的选择。也为包含 /var 和 /tmp 的文件系统保留空间,否则您将遇到问题。

现在将您的保留空间更改为驱动器的 1%,这对非 root 文件系统来说是合理的。

# tune2fs -m 1 /dev/sdXY

分配标签

创建并格式化分区后,您可以使用 e2label 命令为其分配标签。这允许您使用标签而不是设备路径将分区添加到 /etc/fstab(对于 USB 驱动器很有用)。要向分区添加标签,请以 root 身份键入以下命令

# e2label /dev/sdXY new-label

如果可选参数 new-label 不存在,e2label 将仅显示当前文件系统标签。如果可选参数 new-label 存在,则 e2label 将文件系统标签设置为 new-labelq。Ext2 和 ext3 文件系统标签最多可以包含 16 个字符;如果 new-label 长度超过 16 个字符,e2label 将截断它并打印警告消息。