Wie kann ich fsck beim Booten nicht interaktiv ausführen lassen?

19

Ich habe einen kopflosen Ubuntu 12.04-Server in einem 1500 Meilen entfernten Rechenzentrum. Zweimal beim Neustart entschied das System, dass es fsck musste. Leider ließ Ubuntu fsck im interaktiven Modus laufen, so dass ich jemanden in meinem Rechenzentrum bitten musste, zu mir zu gehen, eine Konsole anzuschließen und die Y-Taste zu drücken. Wie richte ich es so ein, dass fsck beim Booten im nicht interaktiven Modus mit der Markierung -yoder -p(aka -a) ausgeführt wird?

Wenn ich Ubuntus Bootprozess richtig verstehe, ruft init mountall auf, was wiederum fsck aufruft. Allerdings sehe ich keine Möglichkeit zu konfigurieren, wie fsck aufgerufen wird. Ist das möglich?

(Um einen Vorschlag abzulehnen: Ich bin mir bewusst, dass ich ihn verwenden kann tune2fs -i 0 -c 0 abzulehnen: regelmäßige fscks verhindern kann. Das kann ein wenig helfen, aber ich muss das System versuchen, wieder hochzufahren, selbst wenn es einen echten Grund für fsck hatte, etwa nach einem Stromausfall .)

Als Antwort auf nachfolgende Fragen finden Sie hier die Details zu meiner / etc / fstab. Ich glaube nicht, dass ich das von dem, was Ubuntu dort veröffentlicht hat, bearbeitet habe.

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
Nelson
quelle
1
Diese Frage und die damit verbundenen Antworten /etc/default/rcSsind 2019 nicht wirklich gültig, da Ubuntu 16 und Ubuntu 18 jetzt systemd verwenden. Ich kenne die ganze Geschichte für systemd nicht, aber die fsck.repairBefehlszeilenoption configuration / kernel scheint relevant zu sein. In den Dokumenten heißt es derzeit "Standard" preen, was bedeutet -p. Es kann auch eingestellt werden yesfür -y. /etc/default/grubkann der Ort sein, um dies einzustellen. Ich wäre dankbar, wenn jemand, der mehr darüber weiß, eine moderne Systemantwort liefern würde.
Nelson

Antworten:

29

Die Einstellung ich suche ist in / etc / default / rcS , FSCKFIX=yes. Dies bedeutet "Dateisysteme beim Booten automatisch mit Inkonsistenzen reparieren" und bewirkt, dass fsck mit dem -yFlag ausgeführt wird. Es wurde noin beiden meiner Ubuntu-Systeme eingestellt.

Auch wenn auf gesetzt, noist die Startzeit fsck immer noch nicht interaktiv. mountall läuft mit fsck -a, einem Synonym für -p, was bedeutet "automatisch alle Dateisystemprobleme beheben, die ohne menschliches Eingreifen sicher behoben werden können". Wechselt anscheinend -pin den interaktiven Modus, wenn unsichere Korrekturen vorgenommen werden müssen. Um vollautomatisch zu laufen, benötigen Sie -yoder FSCKFIX=yes.

Hier ist das relevante Codebit aus 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"));
}
Nelson
quelle
Für neuere Betriebssysteme mit systemd kann dasselbe erreicht werden, indem fsck.repair=yesparam GRUB_CMDLINE_LINUX_DEFAULTin/etc/default/grub
Maxxer
2

Für Ubuntu 15,16,17+ befindet sich die FSCKFIX-Werteinstellung in lib / init / vars.sh

Kann den Befehl verwenden, grep -r FSCKFIX * 2>/dev/nullum es zu beenden.

setec
quelle
1
Vielen Dank! Ich bin nicht positiv, aber die Kommentare in dieser Datei legen nahe, dass Sie die Einstellung weiterhin in konfigurieren sollten /etc/default/rcS. /lib/init/vars.shhat FSCKFIXaber dann einen default für quellen /etc/default/rcSdie diesen überschreiben können. OTOH, ein neu installiertes Ubuntu 18-System, hatte überhaupt keine rcSDatei.
Nelson
1

Stellen Sie sicher, dass Sie keine Flags haben, die dies in fstab verursachen könnten, und überprüfen Sie Ihre Init-Skripte. (Versuchen Sie, Ihre Init-Skripte nach 'fsck' zu durchsuchen, um herauszufinden, wo sie verwendet werden.) Auf meinem System wird fsck nicht interaktiv ausgeführt. Hier finden Sie eine Kopie meiner fstab und einen Teil meines Skripts / etc / init / mountall, den Sie vergleichen können

$ 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

Snippet aus / 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
Sepero
quelle
1
Danke für die Hilfe. Könnten Sie mir bitte sagen, was grep FSCKFIX /etc/default/rcSauf Ihrem System steht?
Nelson