关机时(而不是启动时)进行 fsck

关机时(而不是启动时)进行 fsck

通常,fsck每隔 30 次重启后自动执行一次。有时,它会非常慢,并且可能会延迟启动半个小时以上。

有没有办法在关机时运行 fsck?(我不介意关机延迟。启动时间更重要。)

我希望这个适用于 Debian 或 Scientific Linux 发行版。

答案1

虽然您可以在关机期间检查某些内容,但您无法有效地fsck在根文件系统上运行。您会看到,fsck要求文件系统未挂载,然后才能尝试修复。这仅在启动期间才有可能,同时仍在从 运行initramfs

答案2

对于 Debian,你可以使用自动文件系统检查 但该软件包不再受支持(上次更新于 2010 年)。所以请记住这一点。

另一种方法是将 FSCK/bash 脚本放入关机脚本中。对于 SE linux/centos 等,我将使用 chkconfig 级别 0(停止)和 6(重新启动)。chkconfig --levels 0 rc.local-shutdown on将脚本放入/etc/rc.d/init.d/.(级别 6 用于重新启动)

对于 Debian,我会将创建的脚本放在 /etc/rc6.K00scriptname 和 /etc/rc0.d/K00scriptname 中,

至于脚本,您可以使用如下内容:

#!/bin/bash
NETFS="nonfs,nosmbfs,nocifs,nocodafs,noncpfs,nosysfs,nousbfs,noshfs,nofuse,nofuseblk"

if (( `tune2fs -l /dev/sda2 | awk '/Mount count/{print $3}'` > `tune2fs -l /dev/sda2 | awk '/Maximum mount count/{print $4-1}' ))
then /sbin/fsck -A -T -C -a -t $NETFS 2>/dev/null
fi

这段代码不是我写的,而是由linux 系统论坛。我还没有试过这个代码。所以也请记住这一点。

或者您可以像/sbin/fsck -A -T -C -a -- -f在脚本中一样执行一些简单的操作。

答案3

关机时执行 fsck 的问题在于,您会看到,关机时您正在卸载文件系统。即使 fs 很脏,卸载 fs 也不会强制它检查其完整性。在挂载它时,您正在执行 fsck 以检查数据的元数据是否正确,以及 fs 是否具有它报告的正确信息。这可以在挂载 fs 时进行。因为检查 fs 完整性的代码在挂载 fs 时开始发挥作用。

我猜想这就是我们可以在 fs 脏的时候进行延迟卸载,但是在 fs 脏的时候无法进行延迟或强制卸载的原因;)

通常,除非严重损坏,否则日志记录 fs 不会花费很长时间。xfs_repair 非常巧妙,可以在 btrfs 正常时在线完成,这是另一个故事。

相关内容