web-dev-qa-db-fra.com

Comment puis-je faire en sorte que fsck ne s'exécute pas de manière interactive au démarrage?

J'ai un serveur sans tête Ubuntu 12.04 dans un centre de données situé à 1500 km. Deux fois maintenant, lors du redémarrage, le système a décidé de fsck. Malheureusement, Ubuntu exécutait fsck en mode interactif, j'ai donc dû demander à quelqu'un de mon centre de données de passer en revue, de brancher une console et d'appuyer sur la touche Y. Comment puis-je le configurer pour que fsck s'exécute en mode non interactif au démarrage avec l'indicateur -y ou -p (alias -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 appelé. Est-ce possible?

(Pour écarter une suggestion, je sais que je peux utiliser tune2fs -i 0 -c 0 pour éviter les fscks périodiques. Cela peut aider un peu, mais j’ai besoin du système pour essayer de revenir même s’il avait une vraie raison de fsck, par exemple après une alimentation. échec.)

En réponse aux questions suivantes, voici les détails pertinents de mon/etc/fstab. Je ne pense pas avoir édité cela du tout à partir de ce que Ubuntu a mis 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
19
Nelson

Le paramètre que je recherche est situé dans / etc/default/rcS , FSCKFIX=yes. Cela signifie "répare automatiquement les systèmes de fichiers comportant des incohérences au démarrage" et provoque l'exécution de fsck avec l'indicateur -y. Il a été défini sur no dans mes deux systèmes Ubuntu.

Même lorsqu'il est défini sur no, le temps de démarrage fsck est toujours quelque peu non interactif. mountall exécute fsck avec -a, un synonyme de -p, ce qui signifie "corrige automatiquement tous les problèmes de système de fichiers qui peuvent être résolus en toute sécurité sans intervention humaine". Apparemment, -p bascule en mode interactif si des correctifs non sécurisés doivent être apportés. Pour une exécution entièrement automatique, vous avez besoin de -y ou FSCKFIX=yes.

Voici le bit 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"));
}
28
Nelson

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

Peut utiliser la commande grep -r FSCKFIX * 2>/dev/null pour y remédier.

2
setec

Assurez-vous de ne pas avoir d’indicateurs susceptibles de causer cela dans fstab, et vérifiez vos scripts d’initialisation. (Essayez de mettre vos scripts d'initialisation dans 'fsck' pour trouver où il est utilisé) Mon système exécute fsck non interactif, voici donc une copie de mon fstab et une partie de mon script/etc/init/mountall à 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
1
Sepero