Come posso far funzionare fsck in modo non interattivo all'avvio?


19

Ho un server Ubuntu 12.04 senza testa in un datacenter a 1500 miglia di distanza. Due volte ora al riavvio il sistema ha deciso che doveva fsck. Sfortunatamente Ubuntu ha eseguito fsck in modalità interattiva, quindi ho dovuto chiedere a qualcuno del mio datacenter di passare, collegare una console e premere il tasto Y. Come posso impostarlo in modo che fsck funzioni in modalità non interattiva all'avvio con il flag -yo -p(aka -a)?

Se capisco correttamente il processo di avvio di Ubuntu, init invoca mountall che a sua volta invoca fsck. Tuttavia non vedo alcun modo per configurare come viene invocato fsck. È possibile?

(Per evitare un suggerimento; sono consapevole che posso usare tune2fs -i 0 -c 0per prevenire fsck periodici. Ciò potrebbe aiutare un po ', ma ho bisogno del sistema per provare a tornare indietro anche se avesse un vero motivo per fsck, diciamo dopo un'interruzione di corrente .)

In risposta alle domande di follow-up, ecco i dettagli pertinenti di my / etc / fstab. Non credo di averlo modificato affatto da ciò che Ubuntu ha messo lì.

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
Questa domanda e le relative risposte /etc/default/rcSnon sono realmente valide nel 2019, con Ubuntu 16 e Ubuntu 18 ora utilizzano systemd. Non conosco la storia completa di systemd ma l' fsck.repairopzione della riga di comando di configurazione / kernel sembra rilevante. I documenti attualmente dicono che il suo valore predefinito è preen, il che significa -p. Può anche essere impostato su yesper -y. /etc/default/grubpotrebbe essere il posto giusto per impostarlo. Le sarei grato se qualcuno più esperto fornisse una risposta moderna e sistematica.
Nelson,

Risposte:


29

L'impostazione che sto cercando è in / etc / default / rcS , FSCKFIX=yes. Questo significa "ripara automaticamente i filesystem con incoerenze durante l'avvio" e fa funzionare fsck con il -yflag. Era impostato su noentrambi i miei sistemi Ubuntu.

Anche quando impostato su no, il tempo di avvio fsck è ancora in qualche modo non interattivo. mountall esegue fsck con -a, sinonimo di -p, che significa "risolve automaticamente tutti i problemi del filesystem che possono essere risolti in sicurezza senza intervento umano". Apparentemente -ppassa alla modalità interattiva se ci sono correzioni non sicure da fare. Per funzionare in modo completamente automatico, è necessario -yo FSCKFIX=yes.

Ecco il bit di codice rilevante di 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"));
}

Per i recenti sistemi operativi con systemd si può ottenere lo stesso risultato aggiungendo fsck.repair=yesa param GRUB_CMDLINE_LINUX_DEFAULTin/etc/default/grub
Maxxer il

2

Per Ubuntu 15,16,17+ l'impostazione del valore di FSCKFIX si trova in lib / init / vars.sh

Può usare il comando grep -r FSCKFIX * 2>/dev/nullper finirlo.


1
Grazie! Non sono positivo ma i commenti in quel file suggeriscono che dovresti comunque configurare l'impostazione in /etc/default/rcS. /lib/init/vars.shha un valore predefinito per FSCKFIXma quindi fonti /etc/default/rcSche possono sovrascriverlo. OTOH un sistema Ubuntu 18 appena installato non aveva affatto un rcSfile.
Nelson,

1

Assicurati di non avere alcun flag che possa causare questo in fstab e controlla i tuoi script init. (Prova a visualizzare i tuoi script di inizializzazione per 'fsck' per trovare dove viene utilizzato) Il mio sistema esegue fsck non interattivo, quindi ecco una copia del mio fstab e parte del mio script / etc / init / mountall da confrontare

$ 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 da / 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
Grazie per l'aiuto. Potresti dirmi cosa grep FSCKFIX /etc/default/rcSdice sul tuo sistema?
Nelson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.