GRUB 2 (version Compatibles PC)
GRand Unified Bootloader, version 2 (ou GRUB 2) est la seconde version de GNU GRUB. C'est un logiciel permettant de charger un système d'exploitation. Il pourra amorcer lui-même des systèmes compatibles avec la norme POSIX (GNU/Linux, *BSD, Mac OS, etc.) ou enchaîner vers un autre chargeur d’amorçage pour les autres systèmes.
Plus qu’une continuité du projet GRUB Legacy précédent, GRUB 2 en est une réécriture complète. Il a pour but d’être un chargeur d’amorçage plus modulaire et portable que son prédécesseur avec notamment une interface graphique et une portabilité vers diverses architectures matérielles (BIOS, EFI, Coreboot…).
GRUB 2 est le chargeur d'amorçage installé par défaut, ce document concerne la version de GRUB 2 pour les ordinateurs Compatibles PC (la plupart des ordinateurs actuels) ; des paquets grub-efi et grub-coreboot existent pour les architectures basées sur EFI (tels les MacIntel) et sur Coreboot/LinuxBIOS. Pour le moment, il n'est pas conçu pour démarrer une architecture ARM.
Pré-requis
- Disposer des droits d'administration ;
- Disposer d'une connexion à Internet configurée et activée.
Installation
Lors d’une installation classique d'Ubuntu (depuis un support d'installation), si vous n’avez pas paramétré les options avancées, GRUB 2 est installé automatiquement et est votre chargeur d’amorçage principal pour Ubuntu.
Une vérification peut être faite depuis un terminal avec la commande :
grub-install -V
Si vous voyez GNU GRUB 1.98 ou +, vous avez GRUB 2, si c’est 0.97, vous avez Grub Legacy.
Si vous souhaitez installer Grub 2 sur le MBR ou le réinstaller après un souci, référez vous à cette explication.
Fonctionnement général
La configuration finale de grub est dans le fichier /boot/grub/grub.cfg
Ce fichier est généré automatiquement par la commande update-grub à partir des entrées suivantes :
- Le fichier de paramétrage général : /etc/default/grub
- Tous les fichiers dans : /etc/grub.d/
- dont le fichier /etc/grub.d/40_custom qui contient votre configuration personnelle en option
Plus d'information sur le paramétrage manuel de Grub.
Pour un paramétrage avec interface graphique :
- Sous KDE pour les versions jusqu'à Kubuntu Wily (15.10) : kde-config-grub2
- Sous d'autres environnements ou pour les versions Kubuntu Xenial (16.04) et ultérieures :
Utilisation du menu
Par défaut, le menu de Grub ne s'affiche pas dans les configurations ne comportant qu'un seul système.
Pour l'afficher, il faut, au démarrage, maintenir enfoncée la touche Majuscule (shift) ( ou la touche ECHAP).
Un comportement différent peut être obtenu en modifiant le fichier /etc/default/grub avec les droits d'administrateur : GRUB_TIMEOUT_STYLE=menu (au lieu de "hidden") et GRUB_TIMEOUT=10 (au lieu de 0) puis en faisant la mise à jour de grub par la commande "sudo update-grub".
Dans les autres cas, Grub affiche le menu qui permet de choisir le système désiré :
- sans intervention aucune, le système sélectionné par défaut est lancé automatiquement après quelques secondes.
- un autre des systèmes affichés peut être choisi puis lancé par l'utilisation des flèches du clavier : navigation par les flèches 'vers le bas' ou 'vers le haut' puis lancement avec la touche 'entrée' (ou la flèche vers la droite).
Il est également possible :
- de modifier la ligne du menu avec la touche 'e' pour, par exemple, ajouter un paramètre (Ctrl X : lance le système en appliquant la modification, Echap permet de revenir en arrière sans changement)
- de basculer Grub en ligne de commande avec la touche 'c' (Echap pour revenir au menu)
Habillage et thèmes
Veuillez consulter le tutoriel cité plus haut pour :
- l'habillage (mode texte) : image de fond et couleurs d'affichage
- l'utilisation des Thèmes Grub2 : où les trouver et comment les mettre en oeuvre
Astuce
En cas de dual-boot / multi-système d'exploitation : au lieu de redémarrer la machine et d'aller au menu Grub pour choisir le système d'exploitation à démarrer, on peut le faire directement à partir d'Ubuntu avec cette commande. L'action est temporaire et valable uniquement pour le prochain redémarrage. Le chiffre étant le numéro de ligne du choix du menu Grub (0 étant la première ligne). Par exemple, si Ubuntu est la première ligne du menu Grub et Windows la deuxième ligne, alors cette commande, exécutée sous Ubuntu, va directement redémarrer la machine sous Windows. Rq : reboot nécessite sudo sur les anciens Ubuntu.
sudo grub-reboot 1 ; reboot
Réparation & maintenance
Réinstaller/Restaurer GRUB 2
Avant de réparer Grub par quelque méthode que ce soit, il peut s'avérer nécessaire d'installer la version la plus récente du logiciel et de ses commandes (grub-install, grub-mkconfig, update-grub, …) :
sudo apt purge grub grub-pc grub-common -y && sudo apt install grub-pc -y
Plusieurs options sont offertes pour restaurer le fonctionnement correct de Grub après qu'il a été effacé ou détérioré :
Via le Réparateur de Démarrage
La méthode la plus simple est l'utilisation du réparateur de Démarrage (outil graphique).
Depuis votre Ubuntu ayant démarré
Si vous avez la possibilité de démarrer le système qui contient le grub que vous souhaitez rétablir (avec une clé USB de secours, un autre menu Grub,..), alors tapez dans un terminal ces commandes :
sudo fdisk -l # -L pour identifier le disque contenant Ubuntu, relevez son code, par exemple /dev/sda sudo os-prober sudo update-grub sudo grub-install /dev/CodeDuDisqueUbuntu # par exemple sda sans chiffre
Si vous voulez définir une partition en particulier (ou un disque en particulier) :
sudo grub-install --force /dev/sda7
Dans cette commande l'exemple considère qu'il s'agit du disque a, partition 7.
Pour avoir une liste des systèmes installés à jour, on ajoutera éventuellement un 'sudo update-grub'.
Depuis un autre système
Si vous réussissez à lancer un autre linux contenant Grub2 (live-cd, système sur un autre disque,..), vous avez 2 cas de figure :
- pour une installation classique la commande à lancer est :
sudo grub-install --root-directory=/media/NomUtilisateur/pointMontagePartitionContenantBoot /dev/sdb
- pour une installation ayant un boot sur une partition séparée, la commande est (boot au lieu de root) :
sudo grub-install --boot-directory=/media/NomUtilisateur/pointMontagePartitionBoot /dev/sdb
Il faut que la partition cible soit montée (ouverte via le gestionnaire de fichiers par exemple). Pour savoir si le disque est bien /dev/sdb, on peut lancer la commande 'sudo blkid'.
Cas particulier de la version 21.04
Cette version installe automatiquement la structure de boot EFI y compris lorsque l'ordinateur n'est pas équipé de cette fonctionnalité. La réparation à faire est la suivante:
- Booter avec le support d'installation.
- Lancer gparted
- Mettre le drapeau bios_grub dans la partition de boot FAT32 afin de la transformer en partition bios-boot
- En profiter pour mémoriser la partition contenant le logiciel ubuntu. Par exemple /dev/sda2
- Quitter gparted et monter la partition ubuntu grâce à cette commande
sudo mount -v /dev/sda2 /mnt
- Faire l'installation du grub légacy grâce à cette commande
sudo grub-install --boot-directory=/mnt /dev/sda
Démarrer Ubuntu à partir de grub> et grub rescue>
Si Ubuntu est bien installé mais que seul Grub est cassé, alors vous devriez arriver sur une ligne de commande de grub> ou grub rescue>. Voici comment faire pour démarrer Ubuntu afin de réparer Grub par la suite.
Suivez les instructions en fonction du Grub que vous voyez.
A partir de grub rescue>
Il faut identifier la partition Ubuntu et définir les commandes pour arriver au Grub normal.
ls # lister les partitions # le résultat sera du genre : (hd0) (hd0,msdos1) (hd0,msdos2)... # utilisez LS pour chaque partition afin d'identifier celle d'Ubuntu ls (hd0,msdos1) ls (...) # la partition Ubuntu donnera un résultat du genre : # ... Filesystem is ext2 # Une fois la partition Ubuntu trouvée, tapez ces commandes en utilisant la bonne identification # Pour l'exemple, on utilisera (hd0,msdos1) set root=(hd0,msdos1) set prefix=(hd0,msdos1)/usr/lib/grub insmod normal normal
En validant la dernière commande, Grub va alors démarrer en grub normal. Suivez la suite des instructions pour grub normal.
A partir de grub> normal
Il faut identifier la partition Ubuntu et définir les commandes pour démarrer Ubuntu.
ls # lister les partitions # le résultat sera du genre : (hd0) (hd0,msdos1) (hd0,msdos2)... # utilisez LS pour chaque partition afin d'identifier celle d'Ubuntu ls (hd0,msdos1) ls (...) # la partition Ubuntu donnera un résultat du genre : # ... Filesystem is ext2 # Une fois la partition Ubuntu trouvée, tapez ces commandes en utilisant la bonne identification # Pour l'exemple, on utilisera (hd0,msdos1) set root=(hd0,msdos1) linux /vmlinuz root=/dev/sda1 ro initrd /initrd.img boot
set root=(hd0,msdos1) linux /boot/vmlinuz root=/dev/sda1 ro initrd /boot/initrd.img boot
En validant la dernière commande, Ubuntu va alors démarrer. Ensuite, suivez le paragraphe § 7.1.2 pour réparer Grub à partir d'Ubuntu.
A partir de grub> error : unknownfile system Entering rescue mode…
ls # lister les partitions # le résultat sera du genre : (hd0) (hd0,msdos1) (hd0,msdos2) # utilisez LS pour chaque partition afin d'identifier celle d'Ubuntu ls (hd0,msdos1) ls (hd0,msdos2) # Donc si les partitions Ubuntu donnent un résultat du genre : unknownfile system # utiliser SET pour rechercher le chemin qui devrait afficher par exemple (le numéro de partition n'est pas le même suivant le cas) : grub rescue> set cmdpath=(hd0) prefix=(hd0,msdos5)/boot/grub root=hd0,msdos5 # Une fois la partition Ubuntu trouvée, tapez ces commandes en utilisant la bonne identification # Pour l'exemple, (hd0,msdos5) set root=(hd0,msdos5) set prefix=(hd0,msdos5)/boot/grub insmod normal normal
En validant la dernière commande, Ubuntu va alors démarrer. Ensuite, suivez le paragraphe § 7.1.2 pour réparer Grub à partir d'Ubuntu.
Créer une clé USB de secours
Avant toute installation de nouveau système, il peut être judicieux de faire une clé USB de secours pour pouvoir remettre en route votre Grub, au cas où.
Pour cela, vous pouvez suivre ce tutoriel.
Ajouter du rootdelay au démarrage
Si vous tombez sur une Busybox au démarrage, il est possible que le système n’ait pas attendu assez longtemps pour que les disques durs s’initialisent. Vous pouvez continuer le démarrage par un simple CTRL+D dans la Busybox. Si cela fonctionne, une solution sera d'insérer un rootdelay dans grub.
Pour cela éditer /etc/default/grub avec les droits d'administration (voir tuto "Comment modifier un fichier ?") pour mettre par exemple :
GRUB_CMDLINE_LINUX_DEFAULT="rootdelay=40 quiet splash"
Pour prendre en compte ce changement, on lancera la commande de mise à jour :
sudo update-grub
Lancement depuis un Grub-Legacy
En plaçant ces lignes (avec l’UUID correspondant à la partition souhaitée) dans le menu.lst d’un Grub-Legacy, on pourra lancer un Grub-pc derrière un grub-legacy.
title Xenial via GRUB-pc uuid 70e29811-71a3-4553-a16c-1cce2ff334ed kernel /boot/grub/i386-pc/core.img
Amorçage multiple : privilégier un grub
En cas d'installation en parallèle de plusieurs versions d'Ubuntu sur le même disque dur, la dernière installation impose son grub. Mais si vous souhaitez imposer au démarrage le grub d'une autre installation (celle que vous utilisez par défaut, par exemple) :
- allez dans cette autre installation,
- ouvrez le terminal, et tapez :
sudo os-prober sudo update-grub sudo grub-install /dev/sda
avec /dev/sda
si on veut pointer sur le disque sda
avec /dev/sdb
si on veut pointer sur le disque sdb
avec /dev/sdc
si on veut pointer sur le disque sdc
etc…
Démarrer sur le dernier OS chargé
Souvent les mises à jour de certains OS propriétaires demandent plusieurs reboots après un temps de calcul conséquent.
Pour éviter de redémarrer sur Ubuntu, il faut modifier la ligne :
GRUB_DEFAULT="0"
par
GRUB_DEFAULT=saved GRUB_SAVEDEFAULT=true
Suivi d'un :
sudo update-grub
Problèmes connus
Grub n'apparaît pas au démarrage
En cas de double boot, le menu de grub doit s’afficher par défaut, si l’écran de l’ordinateur reste noir au démarrage avec un message d’erreur de l’écran, il faut changer une option dans grub pour obliger un affichage non graphique.
Pour cela éditer /etc/default/grub avec les droits d'administration (voir tuto "Comment modifier un fichier ?") pour enlever le croisillon « # » au début de la ligne
#GRUB_TERMINAL=console
Enregistrer le fichier et quitter l’éditeur de texte puis dans le terminal :
sudo update-grub
Redémarrer le pc.
Windows ou d'autres système n'apparaissent plus dans le menu
Depuis Ubuntu Jammy 22.04 OS Prober est désactivé par défaut, donc Windows n'est plus détecté automatiquement.
Pour modifier ce comportement vous pouvez ajouter la ligne suivante au fichier /etc/default/grub
:
- grub
GRUB_DISABLE_OS_PROBER=false
Pour en savoir plus à ce sujet vous pouvez consulter ce sujet sur le forum.
grub:sh (Shell GRUB 2 à l'amorçage)
Vous démarrez votre ordinateur et au lieu de charger directement Ubuntu ou afficher un menu vous permettant de choisir un système d’exploitation à charger, votre écran vous montre une ligne grub:sh>. Ce que vous obtenez ici est un shell, une interface en ligne de commande qui permet de dépanner le chargeur d’amorçage GRUB 2. Si vous obtenez, de manière non-intentionnelle, une telle invite de commande, il y a de fortes chances que le fichier de menu de GRUB 2 soit corrompu. L’invite de commande vous permet d’exécuter des commandes, malgré les erreurs des fichiers de menu, afin de tout de même charger Ubuntu.
Pour charger tout de même Ubuntu, entrez la suite de commandes suivante.
- Faites très attention à la structure et la graphie des commandes. Un espace mal placé ou une lettre majuscule inscrite en minuscule peut rendre la commande inopérante ;
- Chaque ligne doit être entrée séparément. À la fin de chaque ligne de commande, appuyez sur la touche [Entrée] de votre clavier pour la valider.
Inscrivez chacune des commandes suivantes sur une seule ligne, après l’invite grub:sh> :
search -f --set=Root /boot/grub/core.img set root=(${Root}) probe -u (${Root}) --set=UUID linux /vmlinuz root=UUID=${UUID} ro initrd /initrd.img boot
Ceci effectué, Ubuntu se charge. Pour regénérer le menu de GRUB 2, vous exécuterez ensuite la commande suivante dans un terminal :
sudo update-grub
Error 15
Si au boot, ou plutôt au lancement de grub, vous vous retrouvez avec ce message (empêchant tout démarrage du système) :
GRUB Error 15.
réinstallez GRUB2 comme décrit dans le paragraphe de cette page qui traite ce sujet.
Long temps de chargement
Si au boot, le lancement de grub est long et que le disque dur fait du bruit, vous souffrez probablement du bug 420933. Le problème semble être que GRUB2 cherche les UUID de toutes les partitions au démarrage, jusqu’à trouver celle contenant /boot/grub. Cela prend du temps.
Solution 1 : installer une version plus récente de GRUB, par exemple via les Options avancées de Boot-Repair.
Solution 2 : modifier le disque de démarrage dans le BIOS pour démarrer sur le disque où se trouve votre Ubuntu. Plus de détails dans ce sujet du forum.
Long temps de chargement / grub.cfg trop gros
Ca peut se produire en présence de multiboot avec plusieurs systèmes GNU/Linux utilisant aussi GRUB. Cela semble dû au fait que grub-mkconfig (appelé par update-grub) lit le fichier grub.cfg des autres systèmes mais ne traite pas correctement les entrées de menu de ce fichier provenant elles-mêmes d'autres systèmes. Il les ajoute, et ça reboucle, ça s'allonge… Plus de détail dans ce post de www.debian-fr.xyz
Contournement 1 :
- Désactiver tous les fichiers /boot/grub/grub.cfg de toutes les distributions installées en les renommant en grub.cfg.old
- Mettre à jour Grub : sudo update-grub
Cette méthode est rapide mais sera potentiellement annulée lors des prochaines mis à jour de grub dans les autres distributions
Contournement 2 :
- Suivre la procédure de Plus ce post de www.debian-fr.xyz
Utilisation du clavier freeze Grub-PC
Description : sur certains portables (Compaq 21xx, HP ZE4600, Packard Bell iGo 3581) le démarrage se déroule bien si on le laisse se faire sans intervention, par contre toute pression sur le clavier (que ce soit pour changer de ligne, configurer le démarrage ou passer le compte à rebours) provoque un blocage complet du PC. Seul un redémarrage « sauvage » permet de démarrer l’ordinateur.
Origine : incompatibilité de GrUB-PC et de la gestion de l’USB par certains BIOS (Pheonix KAM 1.60 ?)
Solution : entrer dans les options de BIOS (presser F2 pendant l'affichage du BIOS sur les Compaq 21xx), et désactiver l’option de prise en charge « USB legacy». Sauvegarder et redémarrer. Le démarrage ne devrait plus bloquer.
Grub attend pour rien après un petit crash serveur
Problème gênant quand le dit serveur n’a pas de clavier/écran.
Solution : dans le fichier /etc/default/grub ajoutez :
GRUB_RECORDFAIL_TIMEOUT=0
Dans le fichier /etc/default/rcS ajoutez pour vérifier les disques automatiquement :
FSCKFIX=yes
Finissez par le sudo update-grub évidemment.
Apparition d’images au boot
Certains noyaux affichent une image lors du chargement du système (manchot, tux…). Une image est générée par processeur que possède la machine (l’HyperThreading sur les processeurs Intel double ce nombre).
Solution : Éditez le fichier /etc/default/grub et ajoutez « logo.nologo » à la ligne GRUB_CMDLINE_LINUX_DEFAULT.
Le résultat devrait ressembler à ceci :
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash logo.nologo"
Finissez par le sudo update-grub évidemment.
Via un CD-Live ou USB-Live
Possible que vous obteniez cette erreur :
/usr/sbin/grub-probe: error: failed to get canonical path of /cow.
ou
impossible d'obtenir le chemin canonique de "/cow"
Pour y remédier, la solution est le chroot (si vous obtenez une erreur, arrêtez de suite la procédure) :
sudo -s mkdir -p /tmp/newroot mount -t ext4 /dev/sda3 /tmp/newroot mount --bind /proc /tmp/newroot/proc mount --bind /dev /tmp/newroot/dev mount --bind /sys /tmp/newroot/sys chroot /tmp/newroot/ /usr/sbin/update-grub /usr/sbin/grub-install /dev/sda exit
* remplacer sda3 par la réponse que vous donne
sudo os-prober
Source de cette astuce.
Error: diskfilter writes are not supported
Si vous rencontrez au boot le message d'erreur : "Error: diskfilter writes are not supported" sur Ubuntu 14.10, récupérer le code du patch sur https://bugs.debian.org/754921 et l'enregistrer dans le fichier "00_header_754921.patch" (par exemple).
Ou attendre le paquet "grub-common" version "2.02~beta2-26ubuntu3" cf. https://bugs.launchpad.net/bugs/1274320/
Lancer les commandes suivantes :
patchFile=~/00_header_754921.patch sed -i "s/00_header.in/00_header/g" $patchFile cd /etc/ && sudo patch -p2 < $patchFile sudo chmod +x ./grub.d/00_header sudo update-grub
Au prochain reboot, le message ne devrait plus apparaître.
Liens externes
Autres pages en rapport
- rEFInd, un chargeur de boot alternatif à Grub
Contributeurs : Frombenny (rédaction de la page), Theozzfancometh, f.x0, albanmartel, perco.