跳转至内容

fsck

来自 ArchWiki

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

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

启动时检查

机制

有两个参与者

  1. mkinitcpio 在挂载根文件系统之前,通过 fsck hook 为您提供了 fsck 根文件系统的选项。如果您这样做,则应通过适当的 rw 内核参数将根目录挂载为读写。 [1]
  2. systemd 将 fsck 所有具有大于 0 的 fsck pass 编号的文件系统(通过 #fstab 选项或用户提供的 unit 文件)。对于根文件系统,它还必须首先以只读模式挂载(内核参数 ro),然后再从 fstab 重新挂载为读写(请注意,defaults 挂载选项意味着 rw)。

第一个选项是推荐的默认选项,如果您遵循 安装指南,您最终会得到它。如果您想改用第二个选项,则应从 mkinitcpio.conf 中删除 fsck hook,并在内核命令行中使用 ro。内核参数 fsck.mode=skip 可用于确保 fsck 在两个选项中都被完全禁用。

强制检查

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

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

本文章或章节需要扩充。

原因: 是否可以使用 systemd hook 从 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 文件系统的损坏部分,请运行

警告 运行此命令时不会询问您是否要修复它,因为答案是 **是**。
# 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 中具有所需的 hooks,并且您记得在编辑此文件后重新生成 initramfs 映像。
  2. 检查您的 fstab!只有根分区需要在末尾有 1,其他所有分区都应有 20。仔细检查是否有其他拼写错误。

ext2fs: 无外部日志

有时(由于电源故障),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.