Ceci est une ancienne révision du document !
GRUB 2 (version Compatibles PC)
GRUB 2 pour (GRand Unified Bootloader, version 2) est la seconde version de GNU GRUB. C'est un logiciel permettant de charger un système d'exploitation.
Il affiche un menu pendant quelques secondes au démarrage, qui permet de choisir des options, une version particulière du noyau à charger avec Ubuntu, ou de sélectionner le système à démarrer dans le cadre d'un dual-boot.
GRUB 2 est le chargeur d'amorçage installé par défaut. Il prend en charge les systèmes EFI. Il n'est donc pas nécessaire d'installer le paquet grub-efi manuellement.
Plus qu'une continuité du projet GRUB Legacy précédent, GRUB 2 en est une réécriture complète. Il est plus modulaire et portable que son prédécesseur avec notamment une interface graphique et une portabilité vers diverses architectures matérielles (BIOS, EFI, ARM, Coreboot…). Il peut amorcer lui-même des systèmes compatibles avec la norme POSIX (GNU/Linux, *BSD, macOS, etc.) ou enchaîner vers un autre chargeur d'amorçage pour les autres systèmes.
Installation
GRUB 2 est installé automatiquement avec Ubuntu et est votre chargeur d'amorçage principal.
Une vérification peut être faite depuis un terminal avec la commande :
sudo grub-install -V
Si vous voyez GNU GRUB 2 ou +, vous avez GRUB 2.
Si vous souhaitez réinstaller après un souci, référez vous au chapitre Réinstaller/Restaurer GRUB 2.
Fonctionnement général
La configuration finale de GRUB est stockée dans le fichier /boot/grub/grub.cfg, mais ce fichier ne doit pas être modifié manuellement !
Il est généré automatiquement par la commande update-grub à partir des entrées suivantes :
- Le fichier de configuration général :
/etc/default/grub(mieux vaut éviter de le modifier directement, les modifications pourraient être écrasées lors d'une mise à jour majeure). - Les fichiers de configuration personnalisés : tous les fichiers
*.cfgprésents dans le répertoire/etc/default/grub.d/. - Tous les fichiers dans :
/etc/grub.d/- dont le fichier
/etc/grub.d/40_customqui contient votre configuration personnelle en option
Plus d'information sur la Configuration de GRUB.
Il existe une interface graphique proposant de configurer grub mais celle-ci est largement déconseillée (rarement à jour, incorrectement conçue, elle est connue pour poser plus de problèmes qu'elle en résout) : Grub Customizer.
Utilisation du menu
Pour l'afficher, il faut maintenir enfoncée la touche Echap (ou esc) au démarrage (ou la touche Maj – shift – si vous démarrez en Legacy BIOS).
GRUB affiche alors 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.
- on peut selectionner un autre des systèmes affichés à l'aide des flèches du clavier
↑↓, puis le lancer avec la toucheEntrée ↵(ou la flèche→).
Il est également possible :
- de modifier la ligne du menu avec la touche
epour, par exemple, ajouter un paramètre (Ctrl+X: lance le système en appliquant la modification,Échappermet de revenir en arrière sans changement) - de basculer GRUB en ligne de commande avec la touche
c(Échappour revenir au menu).
Configuration
Un comportement différent peut être obtenu en modifiant le fichier /etc/default/grub avec les permissions 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.
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
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
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
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'.
Démarrer Ubuntu à partir de grub> et grub rescue>
Si Ubuntu est bien installé mais que seul GRUBub 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.
Amorçage multiple : privilégier un GRUB
En cas d'installation en parallèle de plusieurs versions d'Ubuntu sur le même support de sotckage, la dernière installation impose son GRUB. Mais si vous souhaitez utiliser 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
etc.
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 live USB
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, Theozzfancometh, f.x0, albanmartel, perco.





