Problème de génération de config grub lié à LVM
Par RaphAstronome le samedi, 10 juin 2023, 12:06 - Linux - Lien permanent
Imaginez que vous mettiez à jour votre serveur comme d'habitude. Il y a une mise à jour noyau ce qui arrive parfois donc le fichier grub.cfg est automatiquement régénéré. Seulement voila des messages d'erreurs peu rassurantes apparaissent :
/usr/sbin/grub-probe : erreur : disque « lvmid/123456-7890-abcd-ef01-2345-6789-0abcde/fedcba-9876-5432-10fe-dcba-9876-543210 » non disponible.
Naturellement, vous vérifiez l'uuid et vous vous rendez compte que c'est bien la partition LVM qui sert au boot. Les disques ne semblent pas être en train de lâcher, le système fonctionne normalement, le RAID indique que tout va bien. Une rapide lecture du "/boot/grub/grub.cfg" montre clairement qu'il y a un problème, il n'y a (quasiment) pas de "insmod" et rebooter comme cela et le système de se relancera pas.
Ceci à eu lieu sur un serveur Debian 11 utilisant LVM, au vue du rapport de bug sur le site de Debian, il devrait être réglé pour la version 12 de Debian qui devrait arriver dans très peu de temps au moment où j'écris ce billet. A notez que le bug ne se produit pas seulement après un renommage de partition mais lorsqu'un certain nombre d'actions (création, suppression, agrandissement, réduction ou renommage de partitions et snapshots) ont eu lieu sur un volume LVM. Le LVM en lui même va bien mais sa gestion par grub pose soucis.
Toute commande indiquée sur cette page est à adapter à votre cas. Les noms et identifiants des volume group, volumes logiques, partitions seront différents selon votre configuration. Certaines commandes suivantes sont très dangereuses, n'entrez aucune commande sans avoir lu et compris la man page (commande man
) qui la concerne.
La source du problème
La commande qui dysfonctionne est le grub-probe avec l'option "-t abstraction". Elle n'arrive pas à voir le type de partition :
grub-probe -t abstraction -d /dev/mapper/monvg-root
Donnera la même erreur.
La correction
La bonne nouvelle c'est qu'il est du coup très simple de le corriger, il suffit pour cela de faire une (ou plusieurs) nouvelles actions, n'importe laquelle, sur le groupe de volume LVM fautif, par exemple créer une partition de petite taille puis la supprimer :
lvcreate --size 100M --name non-au-bug /dev/monvg lvremove /dev/monvg/non-au-bug
Après ceci vous devriez pouvoir voir quel type de partition est utilisé avec grub-probe :
grub-probe -t abstraction -d /dev/mapper/monvg-root
Devrait retourner "lvm
". Cette commande pourra éventuellement être lancée avant la mise à jour noyau afin de s'assurer que l'on ne tombera pas dans le bug en cours de mise à jour.
Démonter la partition os-prober plantée
Petite remarque en passant, parfois grub monte des partitions pour voir quel système est installé dedans. Il peut donc être utile de faire un mount
pour savoir si une partition de ce genre est déjà montée puis la démonter avec umount
. Par exemple :
mount
[...] grub-mount on /var/lib/os-prober/mount type fuse.grub-mount (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
umount /var/lib/os-prober/mount
Retour à la normale
Normalement vous pouvez maintenant régénérer la configuration de grub :
update-grub
Vérifiez que tout c'est bien passé puis vous devriez pouvoir rebooter comme d'habitude en espérant que tout aille bien.
Que faire si vous avez redémarré alors que le grub n'était pas régénéré correctement ?
Je n'ai pas été confronté à ce problème donc je ne pourrais pas vous dire ce qui se passe dans ce cas ni quoi faire. Toutefois, en général, ce genre de chose peut être décoincé depuis un LiveCD (ou LiveUSB, ou mode secours des hébergeurs) en montant les partitions nécessaires dans un dossier (ex : "/mnt") puis faire un chroot dessus pour réparer le problème.
Étant donné que ce sont des partitions LVM il faudra scanner les partitions avec "vgscan
" puis les lister "lvdisplay
" plutôt que "fdisk -l
". Vous aurez aussi besoin du "/dev" dans votre chroot donc à priori faire mount --bind /dev/ /mnt/dev
sera nécessaire. Une fois dans le chroot (chroot /mnt
) il devrait être possible de récupérer la situation comme indiqué plus tôt.
Encore une fois je n'ai pas été confronté à ce problème donc je ne pourrais pas vous en dire plus que ces quelques pistes que je donnes totalement à titre indicatif.
Commentaires