L’installateur Debian est très peu explicite sur les causes d’échec d’installation de GRUB. Ce dernier a des exigences parfois assez obscures. Dernière en date dans mon cas : il a refusé de s’installer car il a trouvé un “double label” sur le disque, la raison étant qu’il restait une trace (signature) d’un ancien formatage du disque en UDF qui n’avait pas été effacée par la création d’une table de partition standard. Après détection et nettoyage de la signature UDF par wipefs, plus d’erreur.
Parfois, un message d’erreur plus ou moins clair est visible dans la console des logs d’installation accessible par Ctrl+Alt+F4. S’il a déjà défilé hors de l’écran, on peut lancer un shell dans une console avec Ctrl+Alt+F2 et examiner le contenu du fichier /var/log/syslog.
Oui, ou du moins une partie. “Installer GRUB dans tel emplacement” est trompeur, car le chargeur de GRUB est divisé en trois parties qui peuvent être situées dans des emplacements différents.
- l’amorce (boot image) de moins de 512 octets est installée dans le MBR d’un disque ou le secteur de boot d’une partition de type compatible (comprendre : connu pour ne rien mettre dans le secteur de boot). C’est cet emplacement qu’on spécifie à l’installation du chargeur
- le noyau (core image) d’une trentaine de kilo-octets peut être installé dans l’espace entre le MBR contenant la boot image et la première partition dans le cas d’un disque partitionné au format MSDOS ou dans une partition dédiée de type “BIOS boot” dans le cas d’un disque partitionné au format GPT, ou à défaut sous firme d’un fichier normal dans la partition qui contient /boot/grub (non recommandé) à condition qu’elle soit sur le même disque que l’amorce. C’est cette partie qui affiche le message d’erreur que tu as eu et l’invite “grub rescue” lorsqu’elle n’arrive pas à trouver la partition qui contenait /boot/grub lors de l’installation.
- la troisième partie (fichier de config du menu, modules…) est constituée de fichiers situés dans /boot/grub. Elle peut être située sur un autre disque que les deux précédentes. Cette partie est nécessaire pour afficher le menu de démarrage.
Quand on installe le chargeur GRUB sur plusieurs disques, seules la boot image et la core image sont installées sur chaque disque. La troisième partie n’est installée que dans le système de fichiers monté contenant /boot/grub/, et n’est dupliqué que s’il est dans un ensemble RAID dont un membre est présent sur chaque disque.
Les possibilités d’actions dans le shell de secours de GRUB sont très limités. Basiquement, cela se limite à
- afficher les variables de configuration avec la commande
set, notamment “prefix” qui contient la position de la troisième partie.
- afficher la liste des partitions avec la commande
ls pour identifier la position réelle de la troisième partie
- modifier la valeur de la variable “prefix” avec la bonne position
- activer le mode normal avec la command
normal.
Typiquement, si /boot/grub est sur la partition n° 1 qui est la racine, la valeur à donner sera
set prefix=(hd0,1)/boot/grub
Si /boot/grub est sur la partition n° 2 qui est montée sur /boot, la valeur à donner sera (on enlève /boot qui ne fait pas partie de la partition)
set prefix=(hd0,2)/grub
Cela n’a une chance de marcher que si la troisième partie a effectivement été installée (sachant que les erreurs se produisent surtout lors de l’installation de la boot image ou de la core image qui a lieu après) et si elle est compatible avec la core image qui a été amorcée (inutile d’essayer avec une core image de Wheezy et /boot/grub de Jessie).
Si tout cela permet d’accéder au menu de démarrage et de lancer le système, ce n’est pas fini car rien n’a été modifié. Il faudra réinstaller la boot image et la core image avec grub-install /dev/sdX après avoir réglé les éventuels problèmes qui provoquent l’échec de la commande.
Si on veut faire plus simple, la méthode classique consiste à redémarrer l’installateur Debian en mode “rescue”, sélectionner la racine du système installé et réparer le chargeur GRUB. On peut aussi lancer un shell sur la racine du système pour exécuter manuellement grub-install /dev/sdX.