~~Title: Réparer le GRUB ~~ ~~SNIPPET_O1777454101~~info:faq:title~~ {{page>info:title}} .
===== Foire Aux Questions =====
~~SNIPPET_C~~info:faq:title~~ ===== Démarrer un poste bloqué sur le GRUB ===== {{INLINETOC 3}} ==== Les symptômes ==== 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 : {{ :info:faq:linux:grub-stuck-1.png?direct&400 |}} Le poste ne démarre donc pas et l'environnement minimaliste n'est pas intuitif pour un non initié. ==== Explication ==== Lorsque le poste est bloqué sur cette interface, cela signifie que le [[https://fr.wikipedia.org/wiki/GNU_GRUB|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, ...) * Le noyau Linux, ce sont les fichiers élémentaires qui permettent de faire fonctionner l'ordinateur ==== Concrètement, on fait quoi ? ==== 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 : * Chaque zone a une fonction dédiée et il y en a une dont le rôle est de permettre à l'ordinateur de démarrer * Cette zone possède une information spécifique indiquant que le poste commence par regarder ce qu'il y a dedans * Chaque zone a un format de fichier spécifique : c'est en quelque sorte, une manière pour lire et écrire ses fichiers Le clavier connu dans le GRUB est UNIQUEMENT le clavier QWERTY et ce n'est pas modifiable. 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)/ Le ''/'' à la fin est indispensable pour savoir ce que contient la partition. Correspondance de touches : * ( : S+9 (de la rangée du haut et non du pavé numérique) * ) : S+0 (de la rangée du haut et non du pavé numérique) * m : , * , : ; * $ : S+4 (de la rangée du haut et non du pavé numérique) * ''_'' : S+° 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'' * ... Pour éviter de donner le nom complet de la version kernel et initrd, saisir ''/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 ==== Cas du grub-rescue ==== 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 ==== Le cas de l'UEFI ==== La partition de démarrage est alors dans le chemin suivant : (hd0,1)/efi/boot/grub ==== Remettre en place une solution permanente ==== Il faut ensuite mettre à jour le système de démarrage. Il existe des solutions telles que [[https://help.ubuntu.com/community/Boot-Repair|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 Attention : il faut indiquer le disque ''/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 [[https://github.com/arvidjaar/bootinfoscript|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 : {{ :info:faq:linux:bootinfoscript.zip |}} ==== Si ce n'est pas réglé ==== Il faut dans ce cas se tourner vers des solutions plus complexes ou vers un professionnel. Nous pouvons noter notamment [[https://www.supergrubdisk.org/|Super GRUB2 live rescue disk]] Vous pouvez aussi consulter la documentation officielle [[https://www.gnu.org/software/grub/manual/grub/grub.html|GNU GRUB Manual]]. ==== Pour aller plus loin ==== 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.