Comment puis-je faire fonctionner fsck de manière non interactive au démarrage?

19

J'ai un serveur Ubuntu 12.04 sans tête dans un centre de données à 1500 miles de distance. Deux fois maintenant au redémarrage, le système a décidé qu'il devait fsck. Malheureusement, Ubuntu a exécuté fsck en mode interactif, j'ai donc dû demander à quelqu'un de mon centre de données de passer, de brancher une console et d'appuyer sur la touche Y. Comment le configurer pour que fsck s'exécute en mode non interactif au démarrage avec l' indicateur -yor -p(aka -a)?

Si je comprends bien le processus de démarrage d'Ubuntu, init invoque mountall qui à son tour appelle fsck. Cependant, je ne vois aucun moyen de configurer la façon dont fsck est invoqué. Est-ce possible?

(Pour éviter une suggestion, je sais que je peux utiliser tune2fs -i 0 -c 0pour éviter les fscks périodiques. Cela peut aider un peu, mais j'ai besoin que le système essaie de revenir même s'il avait une vraie raison de fsck, disons après une panne de courant .)

En réponse aux questions de suivi, voici les détails pertinents de mon / etc / fstab. Je ne pense pas avoir édité cela du tout à partir de ce qu'Ubuntu y a mis.

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
la source
1
Cette question et ses réponses /etc/default/rcSne sont pas vraiment valables en 2019, avec Ubuntu 16 et Ubuntu 18 utilisant désormais systemd. Je ne connais pas l'histoire complète de systemd mais l' fsck.repairoption de ligne de commande configuration / kernel semble pertinente. Les documents indiquent actuellement que sa valeur par défaut est preen, ce qui signifie -p. Il peut également être défini sur yesfor -y. /etc/default/grubpeut être le lieu de régler cela. Je serais reconnaissant à quelqu'un de plus compétent de fournir une réponse système moderne.
Nelson

Réponses:

29

Le réglage Je cherche est dans / etc / default / rcS , FSCKFIX=yes. Cela signifie «réparer automatiquement les systèmes de fichiers avec des incohérences lors du démarrage» et entraîner l'exécution de fsck avec l' -yindicateur. Il a été configuré sur nomes deux systèmes Ubuntu.

Même lorsqu'il est défini sur no, le temps de démarrage fsck n'est toujours pas interactif. mountall exécute fsck avec -a, synonyme de -p, ce qui signifie "corriger automatiquement tous les problèmes de système de fichiers qui peuvent être résolus en toute sécurité sans intervention humaine". Apparemment, -ppasse en mode interactif s'il y a des correctifs dangereux à apporter. Pour fonctionner de manière entièrement automatique, vous avez besoin de -you FSCKFIX=yes.

Voici le morceau de code pertinent de 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
la source
Pour les systèmes d' exploitation récents avec systemd même peut être obtenue en ajoutant fsck.repair=yesPARAM GRUB_CMDLINE_LINUX_DEFAULTen/etc/default/grub
Maxxer
2

Pour Ubuntu 15,16,17+, le paramètre de valeur FSCKFIX se trouve dans lib / init / vars.sh

Peut utiliser la commande grep -r FSCKFIX * 2>/dev/nullpour le définir.

setec
la source
1
Merci! Je ne suis pas positif, mais les commentaires dans ce fichier suggèrent que vous devez toujours configurer le paramètre /etc/default/rcS. /lib/init/vars.sha une valeur par défaut pour FSCKFIXmais des sources /etc/default/rcSqui peuvent la remplacer. OTOH, un système Ubuntu 18 nouvellement installé n'avait pas de rcSfichier du tout.
Nelson
1

Assurez-vous que vous n'avez aucun indicateur pouvant provoquer cela dans fstab, et vérifiez vos scripts d'initialisation. (Essayez de grep'ing vos scripts init pour 'fsck' pour trouver où il est utilisé) Mon système exécute fsck non interactif, alors voici une copie de mon fstab et une partie de mon script / etc / init / mountall que vous pouvez comparer

$ 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

Extrait de / 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
la source
1
Merci pour l'aide. Pourriez-vous me dire ce qui se trouve grep FSCKFIX /etc/default/rcSsur votre système?
Nelson