fsck
fsck 是 "file system check"(文件系统检查)的缩写,它用于检查和可选地修复一个或多个 Linux 文件系统。通常,fsck 程序会尝试并行处理不同物理磁盘驱动器上的文件系统,以减少检查所有文件系统所需的总时间(参见 fsck(8))。
Arch Linux 的启动过程 会很方便地为您处理 fsck 程序,并在每次启动时自动检查您驱动器上所有相关分区。因此,通常无需诉诸命令行。
启动时检查
机制
有两个参与者
- mkinitcpio 在挂载根文件系统之前,通过
fsckhook 为您提供了 fsck 根文件系统的选项。如果您这样做,则应通过适当的rw内核参数将根目录挂载为读写。 [1] - 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 中检查。但是,通过这种方式检查根文件系统会导致启动过程延迟,因为文件系统需要重新挂载。
forcefsck 的文件到每个文件系统的根目录或使用带 -F 标志的 shutdown 命令的旧技巧,仅适用于旧的 SysVinit 和早期版本的 Upstart,并且不适用于 systemd。因此,上述解决方案是 Arch Linux 中唯一有效的方法。自动回答修复问题的所有是
启动时的 fsck 检查可能会显示 "UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY."(意外不一致;请手动运行 fsck。)
当需要对文件系统进行一些修复更改,但这些更改不被认为完全安全,因此需要手动运行 fsck 时,会发生这种情况。
您可以通过将 fsck.repair 内核命令行选项设置为 yes 来设置 fsck 自动应用所有建议的更改(即,对所有问题回答是)。(其他可能的值是 no 和 preen。)有关这些选项的含义,请参阅文档 systemd-fsck@.service(8)。
技巧与提示
尝试修复损坏的块
要自动修复 ext2/ext3/ext4 或 FAT 文件系统的损坏部分,请运行
# fsck -a
交互式修复损坏的块
当启动分区上的文件发生更改,并且日志未能正确更新时,此方法很有用。在这种情况下,卸载启动分区,然后运行以下代码来修复损坏的部分
# fsck -r drive
更改检查频率
默认情况下,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
- 确保您在
/etc/mkinitcpio.conf中具有所需的 hooks,并且您记得在编辑此文件后重新生成 initramfs 映像。 - 检查您的 fstab!只有根分区需要在末尾有
1,其他所有分区都应有2或0。仔细检查是否有其他拼写错误。
ext2fs: 无外部日志
有时(由于电源故障),ext(3/4) 文件系统可能会损坏到无法正常修复。通常,fsck 会发出提示,表明找不到外部日志。在这种情况下,请运行以下命令
根据目录卸载分区
# umount directory
向分区写入新日志
# tune2fs -j /dev/partition
运行 fsck 修复分区
# fsck -p /dev/partition