跳转至内容

fsck

来自 ArchWiki

fsck 代表 "file system check"(文件系统检查),用于检查并可选地修复一个或多个 Linux 文件系统。通常,fsck 程序会尝试并行处理不同物理磁盘驱动器上的文件系统,以减少检查所有文件系统所需的总时间(参见 fsck(8))。

Arch Linux 引导过程会方便地为您处理 fsck 程序,并在每次引导时自动检查驱动器上的所有相关分区。因此,通常无需诉诸于命令行。

引导时检查

机制

这里涉及两个参与者

  1. mkinitcpio 通过 fsck 钩子为您提供了在挂载根文件系统之前对其进行 fsck 的选项。如果您这样做,应通过相应的 rw 内核参数将根目录挂载为读写模式。[1]
  2. systemd 将对所有 fsck 传递次数(pass number)大于 0 的文件系统执行 fsck(无论是通过 #fstab 选项 还是 用户提供的单元文件)。对于根文件系统,它必须最初使用内核参数 ro 挂载为只读,然后才根据 fstab 重新挂载为读写(请注意,defaults 挂载选项隐含了 rw)。

第一种方案是推荐的默认设置,也是您按照 安装指南 操作后得到的结果。如果您想选择方案 2,则应从 mkinitcpio.conf 中移除 fsck 钩子,并在内核命令行中使用 ro。可以使用内核参数 fsck.mode=skip 来确保两种方案都完全禁用 fsck

强制检查

如果您使用 base mkinitcpio 钩子,可以通过传递 fsck.mode=force 作为 内核参数 来强制在引导时进行 fsck。这将检查机器上的每个文件系统。

或者,systemd 提供了 systemd-fsck@.service(8),它会检查所有已配置但未在 initramfs 中检查的文件系统。然而,以这种方式检查根文件系统会导致引导过程延迟,因为文件系统必须重新挂载。

本文章或章节需要扩充。

原因: 是否可以通过 systemd 钩子在 initramfs 中运行 fsck?(在 Talk:Fsck 中讨论)
注意 对于习惯使用其他 GNU/Linux 发行版的用户,以往在每个文件系统的根目录下写入名为 forcefsck 的文件,或使用带有 -F 标志的 shutdown 命令等技巧,仅适用于旧的 SysVinit 和早期版本的 Upstart,在 systemd 中不再起作用。因此,上述解决方案是 Arch Linux 中唯一有效的方法。

自动对所有修复问题回答“是”

引导时的 fsck 检查可能会提示 "UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY."(出现意外的不一致;请手动运行 fsck)。

当您需要对文件系统应用一些不被认为完全安全地修复更改时,就会发生这种情况,因此需要手动运行 fsck

您可以通过将内核命令行选项 fsck.repair 设置为 yes,来让 fsck 自动应用所有建议的更改(即对所有问题回答“是”)。(其他可能的值为 nopreen。)请查阅文档 systemd-fsck@.service(8) 以了解这些选项的含义。

技巧与提示

尝试修复损坏的数据块

要自动修复 ext2/ext3/ext4 或 FAT 文件系统 的损坏部分,请运行

警告 这将不会询问您是否要进行修复,因为运行它时默认答案就是 Yes(是)。
# fsck -a

交互式修复损坏的数据块

当引导分区上的文件发生更改且日志未能正确更新时,此操作很有用。在这种情况下,请卸载引导分区并运行以下代码来修复损坏的部分

# fsck -r drive

更改检查频率

注意 以下 tune2fsdumpe2fs 命令仅适用于 ext2/ext3/ext4 文件系统。

默认情况下,fsck 每 30 次引导检查一次文件系统(每个分区独立计算)。要更改检查频率,请运行

# tune2fs -c 20 /dev/sda1

在这个例子中,20 是两次检查之间的引导次数。

请注意,1 将使其在每次引导时扫描,而 0 将完全停止扫描。

如果您想查看特定分区的频率数值和当前挂载次数,请使用

# dumpe2fs -h /dev/sda1 | grep -i 'mount count'

fstab 选项

fstab 是一个系统配置文件,用于告知 Linux 内核挂载哪些分区(文件系统)以及在文件系统树的什么位置挂载。

一个典型的 /etc/fstab 条目可能如下所示

/dev/sda1   /         ext4      defaults       0  1
/dev/sda2   /other    ext4      defaults       0  2
/dev/sda3   /win      ntfs-3g   defaults       0  0

第 6 列(加粗部分)是 fsck 选项。

  • 0 — 不检查。
  • 1 — 第一个要检查的文件系统(分区);/(根分区)应设置为 1
  • 2 — 所有其他要检查的文件系统。

故障排除

无法在独立的 /usr 分区上运行 fsck

  1. 请确保您在 /etc/mkinitcpio.conf 中配置了所需的 钩子,并且在编辑此文件后记得重新生成 initramfs 镜像。
  2. 检查您的 fstab!只有根分区末尾需要 1,其他所有分区应为 20。同时仔细检查是否有其他拼写错误。

ext2fs: no external journal

有时(由于电源故障),ext(3/4) 文件系统可能会损坏到无法通过常规方式修复。通常,fsck 会提示找不到外部日志。在这种情况下,请运行以下命令

根据目录卸载分区

# umount directory

向分区写入新日志

# tune2fs -j /dev/partition

运行 fsck 修复分区

# fsck -p /dev/partition

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.