如何负责任地避免“fsck forced”?

如何负责任地避免“fsck forced”?

所以我刚刚在服务器上更换了一个 RAID HDD。我收到了“X 天未检查,强制 fsck”消息,现在正在耐心等待。

这让我很疑惑:我该如何负责任地避免这种情况?我知道我可以跳过强制 fsck,但在系统运行时我无法真正执行 fsck。

那么有没有办法在晚上对服务器进行在线 fsck,只是为了检查是否存在任何潜在问题?如果没有,让系统不运行强制 fsck?

在线只读 fsck 是否会检测(而不是修复)与全面 fsck 相同的问题?

这是一个 ext3。

答案1

您可以使用e2croncheckDebian 错误报告 773267)如果你的 fs 在 lvm 上。

答案2

切换到更现代的日志文件系统,例如 XFS 或 ext4。在这些系统中,如果文件系统不干净,则无需进行完整的 fsck;日志只会重播,这需要一秒钟左右。即使强制进行完整的 fsck,ext4 是显著地fsck 速度更快比 ext3 要好。

你需要一款支持 ext4 的 Linux 系统。具体来说,内核版本2.6.24或更高版本。听起来你的系统相当古老,所以它甚至可能不支持 ext4。如果是这样的话,它几乎肯定已经过时了……

(注意:虽然 ext3 有日志记录,但它缺少 ext4 中的几项优化,这会导致 fsck 运行得更快。)

答案3

您可以通过几种不同的方式修改系统是否在重启时强制执行 fsck:

  • 瞬态:: grub.conf

    grub.conf在内核行末尾将 fastboot 添加到文件中

  • 永久 :: fstab

    fstab您挂载的条目中,最后一列(两个编号列之一)可以切换为 0。根据 fstab 手册页:

    The sixth field (fs_passno).
          This field is used by fsck(8) to determine the order in which filesystem  checks  are  done  at  boot
          time.   The root filesystem should be specified with a fs_passno of 1.  Other filesystems should have
          a fs_passno of 2.  Filesystems within a drive will be checked sequentially, but filesystems  on  dif‐
          ferent  drives  will  be  checked  at the same time to utilize parallelism available in the hardware.
          Defaults to zero (don't fsck) if not present.
    

至于检查实时/已挂载的文件系统,有些文章指出您可以尝试将所有内容设置为只读(将相关文件系统挂载为只读并以只读方式运行 fsck),但大多数文章也不建议这样做,主要是因为结果不可靠。

我发现这个建议提到了一个巧妙的技巧,如果您碰巧使用 LVM 分区,您可以尝试一下。但是,如果您碰巧没有这样的奢侈,您很可能想要 A:让 fsck 自行运行(通常推荐);或者 B:在您提到的运行离线 fsck 的那个夜间时段计划停机时间。此外,正如 Michael Hampton 提到的,也许是时候考虑一​​些比 ext3 更新的东西了 :D

答案4

一个负责任的做法是确保存在一个备份,并且您已挂载读写并运行该备份e2fsck。例如存档到长期媒体的 LVM 快照。(务必有时进行备份恢复测试!)

如果备份副本的 fsck 返回干净,并且足够新,可以满足您的恢复时间目标,那么您可以放心不进行强制 fsck。如果返回脏,那么理想情况下它会标记主卷以进行完整 fsck,就像 e2croncheck 所做的那样,请参阅 Mario 的回答。

每年至少进行一次或两次基于时间的 fsck 仍然是个好主意。用于tune2fs -i 设置低于典型重启频率的天数。无论如何您都需要重启以使更新生效,请在计划维护期间留出足够的时间进行 fsck。

相关内容