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

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 :

Utilisation du menu

Si vous n'avez qu'un seul système d'installé, Grub ne s'affiche pas !

Pour le voir, il suffit de maintenir la touche Majuscule (shift) ( ou la touche ECHAP) enfoncée au démarrage de l'ordinateur.

Appuyer 3 ou 4 fois sur la touche Maj ou Echap à l'apparition du logo du bios fonctionne aussi.

On peut aussi forcer l'affichage du menu Grub : pour cela, il faut éditer le fichier /etc/default/grub avec les droits d'administration pour faire les modifications suivantes : 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, vous verrez la liste des systèmes installés :

  • Si vous ne faites rien, le système sélectionné par défaut sera lancé automatiquement au bout de quelques secondes.
  • Vous pouvez en choisir un autre avec les flèches du clavier et le lancer avec la touche 'entrée' (ou la flèche vers la droite).

Autres actions possibles :

  • avec la touche 'e' vous pouvez éditer la ligne du menu 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)
  • avec la touche 'c' vous pourrez intervenir sur Grub en ligne de commande (Echap pour revenir au menu)

Habillage et thèmes

Veuillez consulter le tutoriel cité plus haut pour :

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

S'il a été effacé ou désactivé suite à l’installation d’un autre système d’exploitation ou une autre raison, voici comment vous pouvez le récupérer :

Via le Réparateur de Démarrage

La méthode la plus simple est d'utiliser le réparateur de Démarrage (outil graphique).

Depuis votre Ubuntu ayant démarré

- Optionnel - supprimer, purger et réinstaller Grub :

sudo apt purge grub grub-pc grub-common -y && sudo apt install grub-pc -y

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 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
il est possible que les bonnes commandes soient
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) :

  1. allez dans cette autre installation,
  2. 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…

:-) Lorsque l'on souhaite faire cohabiter Ubuntu avec un autre système, tel que Windows®, il peut être opportun d'installer Grub sur un disque différent de celui où est installé le chargeur d'origine. Il suffira de changer dans le BIOS l'ordre d'examen des disques (lors du démarrage de l'ordinateur) pour privilégier Grub ou un autre système. Ainsi, le disque d'origine n'est pas modifié et le retour en arrière est plus simple.

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.

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 :

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.

La désactivation de cette option n’a pas d'influence sur l’utilisation des ports USB par la suite.

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


Contributeurs : Frombenny (rédaction de la page), Theozzfancometh, f.x0, albanmartel, perco.