如何使fsck在启动时非交互式运行?


19

我在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

1
这个问题及其涉及的答案/etc/default/rcS在2019年并不是真的有效,因为Ubuntu 16和Ubuntu 18现在使用systemd。我不了解systemd的全部内容,但fsck.repair配置/内核命令行选项似乎很重要。目前,文档称其默认值为preen,即-p。也可以将其设置yes-y/etc/default/grub可能是设置此位置的地方。如果有更多知识渊博的人可以提供现代的系统答案,我将不胜感激。
尼尔森

Answers:


29

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

即使将其设置为no,引导时间fsck仍然是非交互式的。mountall使用带有-a的同义词运行fsck -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"));
}

对于具有systemd的最新操作系统,可以通过在fsck.repair=yesGRUB_CMDLINE_LINUX_DEFAULT/etc/default/grub
Maxxer

2

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

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


1
谢谢!我不太肯定,但是该文件中的注释建议您仍应在中配置设置/etc/default/rcS/lib/init/vars.sh有一个默认值,FSCKFIX但是/etc/default/rcS可以覆盖它的来源。OTOH是一个新安装的Ubuntu 18系统,根本没有rcS文件。
尼尔森

1

确保在fstab中没有任何可能导致此问题的标志,然后检查您的初始化脚本。(尝试对'fsck'的grip'ing初始脚本进行重复查找,以发现其使用位置)我的系统非交互式地运行fsck,因此这是fstab的副本以及/ etc / init / mountall脚本的一部分,供您比较

$ cat /etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
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

1
谢谢您的帮助。您能告诉我grep FSCKFIX /etc/default/rcS系统上的内容吗?
尼尔森2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.