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
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"));
}
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.
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