为什么即使从未发生过异常关机,FSCK 也会运行?

为什么即使从未发生过异常关机,FSCK 也会运行?

FSCK据我所知,如果发生非正常关机(例如电源故障),系统会检查并修复文件系统(我不确定)。我有一台服务器,从未发生过非正常关机,但几个月后仍然在某个时间点运行 FSCK。即使从未发生过非正常关机,FSCK 真的有必要吗?

答案1

man 8 tune2fs实际上回答了你的两个问题:

-C 最大挂载次数

调整文件系统检查的挂载次数e2fsck(8)如果 max-mount-counts 为 0 或 -1,则文件系统挂载的次数将被忽略e2fsck(8)和内核。

交错强制检查文件系统的挂载计数将避免在使用日志文件系统时一次检查所有文件系统。

您应该认真考虑完全禁用依赖挂载计数的检查的后果。坏的磁盘驱动器、电缆、内存和内核错误都可能损坏文件系统,而不会将文件系统标记为脏或错误。如果您在文件系统上使用日志记录,则文件系统将绝不被标记为脏,因此通常不会被检查。内核检测到的文件系统错误仍会在下次重新启动时强制执行 fsck,但此时可能已经太迟了,无法防止数据丢失。

另请参阅-我时间相关检查选项。

-我 检查间隔[d|m|w]

调整两次文件系统检查之间的最大时间。无后缀或d将解释数字 检查间隔随着日子的流逝,几个月,以周为单位。零值将禁用时间相关检查。

强烈建议-C(取决于挂载数量)或-我 (时间相关)检查启用以强制定期全量e2fsck(8)检查文件系统。如果不这样做,可能会导致文件系统损坏(由于磁盘、电缆、内存或内核错误)而不被察觉,最终导致数据丢失或损坏。


至于查找检查频率(在最大挂载次数或者检查间隔若要在自己的 ext2/ext3/ext4 文件系统上设置阈值,可以运行以下命令:

sudo dumpe2fs /dev/YOURDEV | grep -Ei '(mount count|interval|check)'

替换/dev/YOURDEV为您要检查的分区。

示例输出:

deltik@node51 [~]$ sudo dumpe2fs /dev/nvme0n1p3 | grep -Ei '(mount count|interval|check)'
dumpe2fs 1.42.13 (17-May-2015)
Mount count:              1
Maximum mount count:      -1
Last checked:             Tue Mar 15 13:30:00 2018
Check interval:           0 (<none>)

答案2

即使您从未发生过异常关机,是否真的需要 FSCK ?

那要看情况。你能 100% 肯定地保证你永远不会任何文件系统下方的存储系统中的数据损坏?

一般而言,在某些文件系统(特别是较旧的文件系统,最常见的是 ext4)发生非正常关机后,文件系统检查在功能上是强制性的,但不正常关机并不是唯一可能导致文件系统内部数据结构损坏的情况。非灾难性的设备故障(坏扇区、坏固件等)可能会导致完全相同类型的损坏,因此即使您的系统没有崩溃或断电,偶尔检查一下通常也是个好主意。

这对于 ext4 尤其重要,因为:

  • 当使用日志功能时(如果您不知道是否使用日志功能,那么您可能正在使用),文件系统可能永远不会被检查,因为即使在非正常关机后,日志文件系统也被认为是自洽的。
  • 在运行时遇到文件系统元数据中的错误时,默认行为是仅记录问题并继续运行,就像什么都没发生一样。这意味着与其他文件系统(例如 XFS、BTRFS 或 ZFS)相比,您不太可能注意到文件系统是否存在问题,直到为时已晚才能修复。

相关内容