fsck
fsck 是 “file system check” 的缩写,意为“文件系统检查”,用于检查 Linux 上的文件系统并尝试修复发现的错误。通常,fsck 会并行检查不同物理磁盘上的文件系统来节省时间(请参阅 fsck(8))。
在 Arch 的启动流程中,fsck 会在您每次开机时自动检查相关的驱动器,因此您无需使用命令行。
启动时检查[编辑 | 编辑源代码]
方法[编辑 | 编辑源代码]
有两种做法:
- mkinitcpio 为您提供了一个选择,即在通过
fsck
钩子挂载您的根文件系统前检查它。若如此做,您应当用rw
内核参数将根文件系统挂载为可读写[1]。 - systemd 会检查所有 fsck 选项大于 0 的文件系统(使用 #fstab 选项或用户提供的单元文件)。对于根文件系统,它必须在开始时被使用
ro
内核参数被挂载为只读,然后再通过 fstab 被重新挂载为可读写(请注意defaults
挂载选项包含了rw
)。
默认推荐第一种做法,如果您遵循了安装指南,将会自动这样。若您想使用第二种做法,您应当从 mkinitcpio.conf
中移除 fsck
钩子并在内核命令行中使用 ro
。使用 fsck.mode=skip
内核参数可在两种做法中完全禁用 fsck。
强制检查[编辑 | 编辑源代码]
如果您使用 base
的 mkinitcpio 钩子,您可以向内核传递 fsck.mode=force
内核参数以在启动时强制执行 fsck,这会检查您的设备上的每一个文件系统。
此外,systemd 提供了 systemd-fsck@.service(8),用于检查已配置的文件系统,且不在 initramfs 中执行。然而,用这种方法检测根文件系统会推迟启动流程,因为要重新挂载根文件系统。
forcefsck
文件或使用 shutdown -F
关机命令等旧方法,但它们仅适用于 SysVinit 和早期版本的 Upstart,但不适用于 systemd。因此上述方法是 Arch Linux 上唯一的解决方法。在修复询问中自动回答 yes[编辑 | 编辑源代码]
启动时的 fsck 检查可能会停止并返回 "UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY."
。
当您需要允许某些更改以修复系统,而这些更改并不被认为是完全安全的时候,它就会发生。因此需要手动执行 fsck。
您可以通过将 fsck.repair
内核命令行选项设为 yes
来让 fsck
自动接受所有建议的更改(即对所有问题回答 yes)。
提示和技巧[编辑 | 编辑源代码]
尝试修复坏块[编辑 | 编辑源代码]
欲自动修复 ext2/ext3/ext4 或 FAT 文件系统上损坏的部分,请执行:
# fsck -a
交互式地修复坏块[编辑 | 编辑源代码]
这在 boot 分区上的文件被改动而日志未能正确更新时会很有用。在这种情况下,请取消挂载 boot 分区,然后执行以下命令以修复损坏的部分:
# fsck -r 设备
更改检查频率[编辑 | 编辑源代码]
默认情况下,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
— 所有要检查的其他文件系统。
Troubleshooting[编辑 | 编辑源代码]
Can't run fsck on a separate /usr partition[编辑 | 编辑源代码]
- Make sure you have the required hooks in
/etc/mkinitcpio.conf
and that you remembered to re-generate your initramfs image after editing this file. - Check your fstab! Only the root partition needs
1
at the end, everything else should have either2
or0
. Carefully inspect it for other typos, as well.
ext2fs: no external journal[编辑 | 编辑源代码]
There are times (due to power failure) in which an ext(3/4) file system can corrupt beyond normal repair. Normally, there will be a prompt from fsck indicating that it cannot find an external journal. In this case, run the following commands:
Unmount the partition based on its directory
# umount directory
Write a new journal to the partition
# tune2fs -j /dev/partition
Run an fsck to repair the partition
# fsck -p /dev/partition