Intéressé par des cours d'informatique en ligne ?
Visitez mon nouveau site https://www.yesik.it !

Voici un petit problème que j'ai rencontré après avoir installé une seconde carte RAID dans un serveur partitionné avec LVM.

Celui-ci ne voulait plus booter avec le message d'erreur suivant (oui: le message apparaissait plusieurs fois):

Volume group "knuth" not found.
Volume group "knuth" not found.

Ensuite, le système semblait attendre que le volume logique racine (dans mon cas knuth-root) soit montée. Enfin, après quelques instants (bon, en fait deux ou trois minutes), le système abandonnait et passait la main à un shell busybox dans l'espoir que l'utilisateur puisse faire quelque-chose.

Après plusieurs manipulations infructueuses, j'ai finalement tenté ce qui était suggéré dans le message d'accueil de ce shell: modifier l'option de boot rootdelay.

Tout d'abord en éditant la "ligne de boot" dans grub au démarrage (commande e) – puis, ayant constaté que ça marchait, en modifiant la configuration de grub en conséquence.

Si vous utilisez Debian ou une autre distribution possédant l'utilitaire update-grub il vous suffit pour cela de modifier la ligne suivante du fichier /boot/grub/menu.lst pour ajouter le rootdelay aux options du kernel:

# kopt=root=/dev/mapper/knuth-root ro rootdelay=5

Piège:

N'enlevez pas le commentaire (dièse – #) devant la ligne kopt = ...!

Puis d'exécuter update-grub:

sh# update-grub 
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found Xen hypervisor 3.2-1-i386,  kernel: /vmlinuz-2.6.26-2-xen-686
Found kernel: /vmlinuz-2.6.26-2-xen-686
Found kernel: /vmlinuz-2.6.26-2-686
Found kernel: /vmlinuz-2.6.18-6-686
Updating /boot/grub/menu.lst ... done

Vous pouvez vous assurer que la nouvelle option est bien prise en compte pour tous les kernels:

sh# grep '/dev/mapper'  menu.lst
# kopt=root=/dev/mapper/knuth-root ro rootdelay=5
module          /vmlinuz-2.6.26-2-xen-686 root=/dev/mapper/knuth-root ro rootdelay=5 console=tty0
kernel          /vmlinuz-2.6.26-2-xen-686 root=/dev/mapper/knuth-root ro rootdelay=5 
kernel          /vmlinuz-2.6.26-2-xen-686 root=/dev/mapper/knuth-root ro rootdelay=5 single
kernel          /vmlinuz-2.6.26-2-686 root=/dev/mapper/knuth-root ro rootdelay=5 
kernel          /vmlinuz-2.6.26-2-686 root=/dev/mapper/knuth-root ro rootdelay=5 single
kernel          /vmlinuz-2.6.18-6-686 root=/dev/mapper/knuth-root ro rootdelay=5 
kernel          /vmlinuz-2.6.18-6-686 root=/dev/mapper/knuth-root ro rootdelay=5 single

Note:

Si votre distribution n'utilise pas update-grub, vous devrez faire ces modifications à la main en ajoutant l'option rootdelay pour chaque kernel dans le fichier de configuration de grub. C'est juste un peu plus long.

Et il faudra ne pas oublier de modifier aussi les nouvelles entrées lorsque vous ajouterez un nouveau kernel à votre machine.

Contrairement à d'autres bootloaders comme LILO par exemple, GRUB est capable de lire son fichier de configuration directement dans le filesystem. Inutile donc de re-installer grub après la modification de menu.lst. Vous pouvez directement booter et constater que le nouveau paramètre est bien pris en compte.

sh# reboot

Remarque:

La valeur 5 pour rootdelay est totalement empirique! Cette valeur est le temps en seconde pendant lequel le noyau attendra avant de tenter de monter le root file system. Il peut donc être nécessaire de l'ajuster en fonction de votre cas particulier.

En effet, certains pilotes peuvent nécessiter plus de temps que les autres pour s'initialiser. C'est en particulier vrai avec les disques SCSI ou USB. Ou (c'est sans doute ce qui s'est passé dans mon cas) quand vous avez de nombreux disques et/ou contrôleurs sur votre machine.

Enfin, j'ai aussi remarqué qu'installer l'hyperviseur Xen provoquait les mêmes symptômes. Dans tous les cas, l'utilisation d'un rootdelay adapté a permis de résoudre la situation de compétition (race condition) à l'origine du problème.

Références