Le problème

Si vous avez un serveur sans console hébergé un peu loin, non accessible, et sans KVM, vous pourriez avoir un problème. Si un boot se passe mal (disons pour l'exercice que votre hébergeur, farceur, a eu une coupure de courant pendant un boot), alors grub le détecte et passe dans un mode RECORDFAIL.

Cela peut également survenir sur vous cliquez sur le bouton reboot de votre console de gestion alors que le serveur est déjà en cours de reboot.

Le plus drôle (façon de parler), c'est qu'à cet effet les solution dites de "monitoring proactif" peuvent avoir un effet désastreux suite à une coupure de courant, en provoquant un reboot de votre serveur pendant qu'il est justement en train de booter, et conduisant donc à un boot avorté.

Et il se trouve que par défaut, sous ubuntu, lorsque cela arrive, les boot suivants ont un timeout de grub infini. Cela veut dire que votre machine ne boote pas et que grub attend une interraction sur la console... que vous n'avez pas.

C'est très bien pour une machine de bureau, parce que si un boot s'est mal passé, il est important d'éviter la spirale infernale de reboot en boucle, mais pour un serveur distant sans console, c'est plus embêtant.

Bref, si ça vous arrive, c'est bien la m..., votre machine ne démarre plus.

Les solutions

La préventive

Pour ne pas que cela se produise, c'est assez simple, il suffit d'ajouter dans le fichier /etc/default/grub la ligne suivante :

GRUB_RECORDFAIL_TIMEOUT=3

Puis, pour mettre à jour la configuration de grub avec ce nouveau paramètre, il suffit de faire un

root@localhost:~$ sudo update-grub

Ainsi, même après un boot infructueux, grub conservera un timeout de 3 secondes. Et Hop, plus de plantage. Cela devrait être standard sur les distributions installées par les hébergeurs (online, OVH, ...) sur les serveurs sans KVM (entrée de gamme).

La curative

Si cela vous est déjà arrivé et que votre serveur ne boote plus, vous pouvez booter en mode rescue, monter les partitions de votre machine et supprimer de l'environnement de grub l'information recordfail de la façon suivante :

root@rescue:/# mount /dev/sdaX /mnt
root@rescue:/# mount /dev/sdaY /mnt/boot
root@rescue:/# grub-editenv /mnt/boot/grub/grubenv unset recordfail
root@rescue:/# umount /mnt/boot
root@rescue:/# umount /mnt
root@rescue:/# reboot

Il vous restera a appliquer la solution préventive ci-dessus pour ne pas que cela recommence.


Comments

comments powered by Disqus