Comment booter sur un linux depuis un shell grub


Cet article est entièrement pompé de celui-ci avec quelques ajouts.

Identifier les disques

Comme dans un shell normal unix, ls permet de lister des fichiers, ou ici des disques :

grub> ls
(proc) (hd0,gpt1) (hd0,gpt2) (hd0,gpt3) ...

Trouver le kernel et l’initrd

Il va d’abord falloir identifier sur quel disque se trouve le kernel que l’on veut utiliser. Pour cela il faut regarder dans chaque partition de disque jusqu’à ce que l’on trouve un fichier nommé vmlinuz-blablabla. Personnellement je le trouve dans la deuxième partition de mon SSD :

grub> ls (hd0,gpt2)/
...
vmlinuz-3-...
initrd
...

Chez moi l’initrd correspondant, avec les même numéros de version que le fichier vmlinuz est au même endroit.

Booter

Trois commandes sont nécessaires avant de booter. La première identifie le kernel à utiliser et le “device” à monter pour en faire votre système de fichier. Dans l’article cité au début il est dit que ce device correspond à la partition dans laquelle on a trouvé le kernel et l’initrd selon la règle suivante :

,gpt1 ,gpt2 ,gpt3
hd0 sda1 sda2 sda3
hd1 sdb1 sdb2 sdb3
hd2 sdc1 sdc2 sdc3

A noter que les partitions peuvent apparemment ne comporter que des numéros (hd0,1) au lieu de (hd0,gpt1). La même logique s’applique.

Donc mon device devrait être /dev/sda2. Sauf que mon disque est chiffré et il faut s’adapter. J’ai fait toute la procédure comme indiqué dans l’article source ce qui m’a permis de passer l’étape du déchiffrement. A partir de là une erreur s’est produite puisque /dev/sda2 ne contenait pas mon système de fichier. J’ai utilisé le shell busybox qui nous est donné à ce moment là pour constater que dans /dev se trouvait un device un peu particulier :

>ls /dev
...
arthur-dnum-vg
...

Ce dosser est créé au déchiffrement. A l’intérieur se trouvait deux devices, root avec mes fichiers et swap pour une partition de swap. C’est donc /dev/arthur-dnumèvg/root qu’il fallait indiquer au grub shell.

Après un redémarrage, de retour dans le grub shell, on fait :

>grub set root=(hd0,gpt2)
>grub linux /vmlinuz.... root=/dev/arthur-dnum/vg/root
>grub initrd /initrd....
>grub boot

Et tout boot comme il faut ! :)

Corriger la configuration grub

Je pense que le souci provient du changement d’UUID du disque lorsqu’il a été déplacé d’un PC à l’autre (ou quelque chose du style). Pour le corriger j’ai opté de pointer dessus en utilisant le nom de la partition directement, à savoir mettre :

configfile (hd0,gpt2)/grub/grub.cfg

dans /boot/efi/EFI/debian/grub.cfg.