如何让fsck在启动时以非交互方式运行?

我在1500英里外的数据中心有一个无头的Ubuntu 12.04服务器。 现在两次重启系统决定它必须fsck。 不幸的是,Ubuntu以交互模式运行fsck,所以我不得不让我数据中心的某个人过来,插上一个控制台,然后按下Y键。 如何设置它以便fsck在启动时以非交互模式运行-y-p (aka -a )标志?

如果我正确理解Ubuntu的启动过程,init会调用mountall ,而mountall又会调用fsck。 但是,我没有看到任何方法来配置如何调用fsck。 这可能吗?

(关闭一个建议;我知道我可以使用tune2fs -i 0 -c 0来防止定期fscks。这可能会有所帮助但我需要系统尝试重新启动,即使它有真正的理由fsck,电源故障后说。)

在回答后续问题时,这是我的/ etc / fstab的相关细节。 我不相信我已经根据Ubuntu放在那里编辑了这个。

 UUID=3515461e-d425-4525-a07d-da986d2d7e04 / ext4 errors=remount-ro 0 1 UUID=90908358-b147-42e2-8235-38c8119f15a6 /boot ext4 defaults 0 2 UUID=01f67147-9117-4229-9b98-e97fa526bfc0 none swap sw 0 0 

我正在寻找的设置在/ etc / default / rcS , FSCKFIX=yes 。 这意味着“在引导期间自动修复具有不一致性的文件系统”并使fsck与-y标志一起运行。 在我的两个Ubuntu系统中都设置为no

即使设置为no ,启动时间fsck仍然有点不相容。 mountall使用-a运行fsck, -a-p的同义词,这意味着“自动修复任何文件系统问题,无需人为干预即可安全修复”。 显然,如果要进行不安全的修复, -p将退回到交互模式。 要完全自动运行,您需要-yFSCKFIX=yes

这是mountall.c的相关代码

 if (fsck_fix || mnt->fsck_fix) { NIH_MUST (nih_str_array_add (&args, NULL, &args_len, "-y")); } else { NIH_MUST (nih_str_array_add (&args, NULL, &args_len, "-a")); } 

确保在fstab中没有可能导致此问题的任何标志,并检查您的init脚本。 (尝试使用’fsck’的初始化程序来查找它的使用位置)我的系统运行fsck非交互式,所以这里是我的fstab的副本和/ etc / init / mountall脚本的一部分供你比较

 $ cat /etc/fstab #       proc /proc proc nodev,noexec,nosuid 0 0 UUID=acbe3514-33a3-4170-b1be-df7b8460a49a / ext4 errors=remount-ro 0 1 UUID=d361f696-7abc-11e1-9043-5711de71ade6 /home ext4 defaults 0 2 UUID=213e032c-fce9-4e1b-9d64-0779f0db4208 none swap sw 0 0 

来自/ etc / init / mountall的代码段

 script . /etc/default/rcS [ -f /forcefsck ] && force_fsck="--force-fsck" [ "$FSCKFIX" = "yes" ] && fsck_fix="--fsck-fix" # set $LANG so that messages appearing in plymouth are translated if [ -r /etc/default/locale ]; then . /etc/default/locale export LANG LANGUAGE LC_MESSAGES LC_ALL fi exec mountall --daemon $force_fsck $fsck_fix end script 

对于Ubuntu 15,16,17+,FSCKFIX值设置位于lib / init / vars.sh中

可以使用命令grep -r FSCKFIX * 2>/dev/null来完成它。