Fichtre ! Ce n’est pas le résultat escompté. On procède parfois à tâtons, avec trop d’assurance ou à brûle-pourpoint à des aménagements ou des installations. On reboot, et là paf ! On se retrouve face à un grub rescue>
qui nous regarde droit dans les yeux. Et un frisson de nous parcourir l’échine.
Il ne faut pas se leurrer, quand on se retrouve dans cette situation c’est qu’on l’a provoquée. Ce sont nos dernières actions d’administrateur système plus ou moins averti qui portent leur fruit pourri. Cet article présente quelques grandes lignes pour se sortir de ce mauvais pas, avec des vrais morceaux de pédagogie dedans.
Vous trouverez facilement la liste des commandes grub, et nous ne verrons ici que celle qui nous intéresse.
Où est le boot ?
Pour répondre à cette question, on va commencer par lister les devices reconnues et la valorisation des variables d’environnement par :
ls
set
Par convention les devices sont mises entre parenthèses. Que ce soit les disques physiques ou les volumes logiques, le ls
sans argument vous les liste tous. C’est vous l’administrateur système, vous devriez savoir sur laquelle votre répertoire /boot
se trouve.
La commande set
ne devrait pas être trop bavarde et vous y lirez les valeurs de prefix
et root
.
Le premier est la localisation en absolu du répertoire /grub
contenant le grub.cfg
.
Le second est la localisation par défaut des fichiers lorsque le système les cherchera.
Dans la majorité des cas, ce sont ces valeurs qu’il faudra corriger.
Petite astuce : On peut faire appel à ces variables en le faisant précéder du $ voire en définir de nouvelles, ce qui permet d’éviter les longues valorisations. Dans la suite je le mettrai en pratique.
Démarrer
L’idée est d’arriver à démarrer son système pour ensuite réparer ses erreurs avec tous les outils et les facilités. On procédera à un démarrage manuel, entendre qu’on va passer les commandes grubiennes à la main, Allez c’est parti !
Pour notre cas pratique, voici les informations nécessaires à la compréhension
L’unique disque est partitionné par LVM avec un volume groupe portant le même nom que la machine : Ethalanie
Les volumes logiques qui nous intéressent sont lv_boot
qui contient le /boot
et lvo2_root
qui contient une racine / d’une Debian déjà installée et opérationnelle.
Ce dont nous avons besoin, c’est de l’image du noyau Linux vmlinuz
ainsi que son disque virtuel initrd
. On les trouvera en procédant ainsi :
set root=Ethalanie-lvo2_root
set boot=Ethalanie-lv_boot
ls ($boot)/boot
set prefix=($boot)/boot/grub
Valorisation des variables d’environnement root
et prefix
. Petite touche personnelle, je définis une variable boot
pour éviter la difficulté de taper ce long nom en qwerty. Notez la syntaxe <Volume groupe>-<Volume logique>. Puis je liste le contenu du fameux répertoire contenant les recherchés vmlinuz-3.2.0-4-686-pae
et initrd-3.2.0-4-686-pae
. Toujours par flemme, je déclare : set version=3.2.0-4-686-pae
D’où sort cette extension 4-686-pae ?
Il faut savoir que les architectures 32 bit ne peuvent pas prendre en compte plus de 4Go de RAM. Et oui 2 puissance 32 = 4 Giga. Il est possible de contourner cette limitation en utilisant ce qu’on appelle le 686 bigmem pour peu que le processeur prenne en charge le PAE (Physical Address Extension). Les plus curieux pousseront plus avant.
Nous disposons de toutes les informations nécessaires pour procéder.
insmod linux
linux ($boot)/boot/vmlinuz-$version root=/dev/mapper/$root
initrd ($boot)/boot/initrd.img-$version
boot
Lors de l’appel linux
l’argument root
contient /dev/mapper
par exigence de la convention LVM. Peut-être que dans votre cas, il faut préciser directement root=$root
.
Quoiqu’il en soit, cette séquence de 4 commandes devrez vous permettre de démarrer votre système, si ce n’est pas le cas, il faut se pencher sur la pertinence des trois localisations.
Réparer
Si vous avez réussi à redémarrer, vous serez apte à recommencer. Je conseille tout de même de procéder à quelques prises de notes cette fois-ci.
Il faut prendre aussi le soin d’aller dans le fichier /boot/grub/grub.cfg
pour y apporter définitivement les valeurs que vous avez utilisées à la volée pour ce démarrage de sauvetage.
Dernière étape, une remise en ordre de l’installation du grub.
Pour retrouver le nom du disque physique, on procède au très verbeux : fdisk –l
. Si comme sur mon système, votre disque dispose de plusieurs volumes logiques, la réponse va être particulièrement longue, il faut se concentrer sur les toutes premières lignes. Pour notre exemple, je lis le disque /dev/sda, et je poursuis donc avec une remise en ordre par : sudo grub-install /dev/sda
.