.
Suite à une modification du fichier de démarrage (grub) ou suite à une mise à jour (typiquement, lors d'une mise à jour de kernel sur un poste assez ancien), lors du redémarrage, nous obtenons un écran noir similaire à celui-ci :
Le poste ne démarre donc pas et l'environnement minimaliste n'est pas intuitif pour un non initié.
Lorsque le poste est bloqué sur cette interface, cela signifie que le GRUB n'a pas réussi à trouver les éléments qui lui permettent de proposer les systèmes d'exploitation installés sur le poste.
Le GRUB est ce que l'on nomme communément un chargeur d'amorçage. Ce chargeur est spécifique aux environnements basés sur GNU Linux.
Par comparaison, il est comparable au lanceur de Microsoft qui permet par exemple de basculer sur l'environnement de récupération.
Pour fonctionner, le GRUB a besoin de charger en mémoire des informations spécifiques à l'environnement sur lequel il est installé :
initrd ou initramfs : c'est la structure des fichiers contenus sur le disque qui permettent au GRUB de savoir ce qu'il doit afficher (et surtout, où trouver les fichiers de configuration)vmlinuz : c'est un noyau compressé qui permet au GRUB d'interagir avec les périphérique (écran, clavier, souris, son, …)Nous allons commencer par identifier les emplacements dont nous avons besoin et les fichiers à utiliser.
Lors de l'installation du système d'exploitation, l'installeur a partitionné le disque ; c'est-à-dire qu'il a virtuellement “découpé” l'ensemble de l'espace en plusieurs zones :
Soyez bien vigilant(e)s à ce qui est saisi et affiché à l'écranavant de cliquer sur ↵ Enter
Nous devons donc identifier la partition de démarrage qui doit contenir un dossier nommé boot :
ls
Nous obtenons la liste des partitions et nous allons les explorer pour trouver celle qui nous intéresse :
ls (hd0)/ ls (hd0,msdos1)/
/ à la fin est indispensable pour savoir ce que contient la partition.
_ : Shift+°
Lorsque nous avons identifié la partition qui contient /boot/grub nous pouvons continuer. Dans notre cas par exemple :
ls (hd0,msdos1)/boot/grub
Nous permet de savoir que c'est la partition msdos1 du disque hd0 qui est celle que nous cherchons.
Nous allons donc créer 2 variables qui nous permettront de charger l'environnement en mémoire :
set root=(hd0,msdos1)
Il nous faut maintenant activer le noyau Linux et l'image de démarrage initrd.
Nous avons besoin pour cela de savoir quelle partition est notre partition de démarrage. L'identification se fait à partir du nom de l'espace assigné à root :
(hd0,*1) ⇔ /dev/sda1 (hd0,*2) ⇔ /dev/sda2 (hd1,*1) ⇔ /dev/sdb1 (hd2,*1) ⇔ /dev/sdc1 /boot/vmlinuz- puis appuyer sur Tab ⇆
linux $root/boot/vmlinuz-5.15.0-92-generic root=/dev/sda1 initrd $root/boot/initrd.img-5.15.0-92-generic boot
Si ce qui est affiché à l'écran n'est pas grub> mais grub-rescue il faut repasser en mode normal pour pouvoir démarrer le poste.
set prefix=(hd0,msdos1)/boot/grub set root=(hd0,msdos1)
Nous allons ensuite activer les modules linux et normal :
insmod normal normal insmod linux
Nous pouvons alors reprendre le fonctionnement décrit pour grub :
linux $root/boot/vmlinuz-5.15.0-92-generic root=/dev/sda1 initrd $root/boot/initrd.img-5.15.0-92-generic boot
La partition de démarrage est alors dans le chemin suivant :
(hd0,1)/efi/boot/grub
Il faut ensuite mettre à jour le système de démarrage.
Il existe des solutions telles que Boot-Repair. Cependant, il est toujours préférable de savoir ce qu'il se passe.
La première information consiste à connaitre le contenu du fichier de configuration :
cat /etc/default/grub
C'est souvent suite à une manipulation de ce fichier que la problématique intervient.
Dans l'un de nos cas de figure, il s'agissait “simplement” de l'ordre des options ajoutées qui a généré le blocage.
Nous avons simplement eu à remplacer nouveau.noaccel=1 acpi_osi=linux par acpi_osi=linux nouveau.noaccel=1
Si vous avez mis à jour ce fichier récemment, il peut être pertinent de vérifier ce qu'il contient.
Il faut ensuite mettre à jour le système d'amorçage :
sudo update-grub
Et réinstaller la partition sur le disque :
sudo grub-install /dev/sda
/dev/sda et non la partition /dev/sda1.
Le système est installé pour l'ensemble du disque.
Effectuer un redémarrage pour vérifier que c'est bien corrigé :
sudo reboot -fn
Il existe aussi un utilitaire boot-info-script qui permet d'identifier la configuration de démarrage.
Cela permet ensuite d'identifier les éventuels problèmes de configuration.
Voici un ZIP qui contient la version 0.78 du 9 octobre 2019 : bootinfoscript.zip
Il faut dans ce cas se tourner vers des solutions plus complexes ou vers un professionnel.
Nous pouvons noter notamment Super GRUB2 live rescue disk
Vous pouvez aussi consulter la documentation officielle GNU GRUB Manual.
Pour mieux comprendre le fonctionnement du GRUB, vous pouvez consulter la page de documentation ubuntu en français ici : https://doc.ubuntu-fr.org/tutoriel/grub2_parametrage_manuel
Elle contient des informations relatives à la configuration manuelle du GRUB.