GRUB (GRand Unified Bootloader) est le chargeur de démarrage qui permet au PC de booter sur une distribution Linux (Ubuntu, Mint, Debian, Fedora, …).
Comme toute application Linux, il possède des fichiers de configuration qui se trouvent dans /boot et /etc avec notamment /etc/default/grub.
Il fournit aussi des commandes comme grub-install, update-grub et grub-mkconfig pour notamment réparer ou restaurer GRUB.
Cet article vous explique comment fonctionne Grub, vous aide à comprendre le contenu du fichier de configuration grub.cfg, comment il est générer et son contenu.
Enfin la liste des commandes les plus utiles de Grub.
Table des matières
Introduction au chargeur de démarrage GRUB
Un chargeur de démarrage est le premier programme logiciel qui s’exécute au démarrage d’un ordinateur.
Il est responsable du chargement du le logiciel du noyau du système d’exploitation (tel que Hurd ou Linux).
Le noyau, à son tour, initialise le reste du système d’exploitation.
En 1995 GRUB 1 est publié, mais c’est en 2002 que GRUB 2 fait son apparition.
Il est alors devenu rapidement le chargeur de démarrage pour la plupart des distributions Linux.
A cette époque, il remplace alors LILO (LInux LOader) pour ceux qui ont connu 🙂
Le Bootloader se doit de permettre de charger le système d’exploitation Linux.
Lors du démarrage du PC, le BIOS lit les informations du Bootloader :
- soit depuis le secteur de boot pour un disque MBR
- soit depuis la partition EFI pour un PC en UEFI
Puis GRUB se charge avec boot.img et core.img, puis charge le noyau Linux en mémoire, puis retourne l’exécution au noyau.
Une fois que le noyau prend le relais, GRUB a fait son travail et il n’est plus nécessaire.
Enfin GRUB prend en charge plusieurs noyaux Linux et permet à l’utilisateur de choisir entre eux au démarrage à l’aide d’un menu.
Il permet aussi de charger d’autres OS comme Windows dans le cas d’un dual-boot ou multiboot.
Cela se fait grâce au mécanisme de chargement en chaîne (chain loading) qui permet de charger un autre loader en l’occurrence Windows Boot Manager.
Les éléments à savoir sur le fonctionnement de GRUB
Quelques fonctionnalités supportées par GRUB :
- Conformité avec la spécification Multiboot
- Les fonctions de base sont faciles à utiliser pour un utilisateur final. Bonne fonctionnalité pour les experts / concepteurs OS.
- Compatibilité pour démarrer FreeBSD, NetBSD, OpenBSD et GNU / Linux. Les systèmes d’exploitation propriétaires tels que la plupart des versions actuelles de Windows sont pris en charge via une fonction de chargement en chaîne (chain loader) .
- Fournit un mode rescue avec un shell limité pour pouvoir booter lorsque les fichiers de configuration sont manquants, corrompus
- Peut se charger par le réseau
Ce qu’il faut aussi savoir :
GRUB n’a pas besoin d’être réinstallé pour mettre à jour sa configuration. Il prend en compte les modifications de son fichier de configuration dynamiquement.
Ainsi, lorsque vous saisissez la commande grub-install pour réinstaller GRUB, cela agrège différents fichiers de configurations et scripts pour construire le fichier final grub.cfg.
On peut aussi tout simplement mettre à jour la configuration du chargeur de démarrage avec update-grub.
Lorsque que la configuration de grub est incorrect, manquante ou corrompue, GRUB fournit un interpréteur de commandes pour permettre à l’utilisateur de charger un système d’exploitation manuellement.
Il s’agit de GRUB Rescue Shell.
Le dossier /boot avec les fichiers de configuration GRUB
Ce tableau donne les principaux dossiers et fichiers de configuration.
Emplacement | Description |
/boot/grub/grub.cfg | C’est le fichier de configuration principal qui remplace l’ancien menu.lst de Grub 1. |
/etc/grub.d/ | Ce dossier stocke les scripts GRUB. Ces scripts sont des blocs de construction à partir desquels le fichier grub.cfg est construit. Lorsque la commande GRUB appropriée est exécutée, les scripts sont lus dans une certaine séquence et grub.cfg est créé |
/etc/default/grub | Contient les paramètres du menu GRUB qui sont lus par les scripts GRUB et écrits dans grub.cfg. C’est la partie de personnalisation du GRUB, similaire à l’ancien menu.lst, à l’exception des entrées de démarrage réelles. |
Ainsi :
- /etc/default/ grub contient la personnalisation.
- Les scripts /etc/grub.d/ contiennent des informations de menu GRUB et des scripts de démarrage du système d’exploitation.
Lorsque la commande update-grub est exécutée, elle lit le contenu du fichier grub et des scripts grub.d et crée le fichier grub.cfg.
/etc/grub.d/
Les scripts sont numérotés pour respecter un ordre d’exécution lors de la construction du fichier.
Voici quelques exemples de scripts. Ils ne sont pas forcément présents chez vous, cela dépend de la distribution Linux.
- 00_header est le script qui charge les paramètres GRUB à partir de / etc / default / grub, y compris le délai d’expiration, l’entrée de démarrage par défaut et autres. Nous en parlerons plus en détail bientôt.
- 05_debian_theme définit l’arrière-plan, les couleurs et les thèmes. Le nom de ce script va définitivement changer pour lorsque d’autres distributions adopteront GRUB 2.
- 10_linux charge les entrées de menu pour la distribution installée.
- 20_memtest86+ charge l’utilitaire memtest.
- 30_os-prober est le script qui analysera les disques durs pour d’autres systèmes d’exploitation et les ajoutera au menu de démarrage.
- 40_custom est un modèle que vous pouvez utiliser pour créer des entrées supplémentaires à ajouter au menu de démarrage.
Ci-dessous, on voit que le contenu du répertoire /etc/grub.d/ entre un serveur sur Debian et un PC sur Ubuntu diffère.
Le fichier de configuration /etc/default/grub et grub.cfg
/etc/default/grub
Pour modifier le fichier grub.cfg, vous devez éditer les fichiers et scripts grub ou les scripts sous grub.d.
Cela signifie qu’ils ont le bit d’exécution activé. Si vous désactivez le bit d’exécution, ils ne s’exécuteront pas.
Le fichier /etc/default/grub modifie le fonctionnement de update-grub.
Il donne la possibilité de personnaliser certaines configurations.
Les premières clés et valeurs de configuration /etc/default/grub :
clés | Descriptions |
GRUB_TIMEOUT | Le temps en secondes après l’affichage du menu pour démarrer l’entrée par défaut, sauf si une touche est enfoncée. La valeur par défaut est 5. Définissez sur 0 pour démarrer immédiatement sans afficher le menu, ou sur -1 pour attendre indéfiniment |
GRUB_DISTRIBUTOR | Défini par les distributeurs de GRUB et utilisé pour générer des titres d’entrée de menu plus informatifs. L’exemple évalue à CentOS Linux Server |
GRUB_DEFAULT | L’entrée de menu par défaut pour démarrer. Une valeur de 0 démarre la première entrée de menu. Une valeur de 1 démarre la deuxième entrée de menu. Une valeur de saved indique à GRUB 2 de charger le dernier système d’exploitation chargé avec succès |
GRUB_DISABLE_SUBMENU | Par défaut, la commande grub2-mkconfig génère une entrée de menu de niveau supérieur pour le noyau avec le numéro de version le plus élevé et place tous les autres noyaux trouvés ou entrées de menu alternatives pour le mode de récupération dans un sous-menu. La définition de GRUB_DISABLE_SUBMENU = true le désactive |
GRUB_TERMINAL_OUTPUT | Le périphérique de sortie du terminal. Lorsque vous spécifiez plusieurs périphériques, séparez les noms de sortie de terminal valides par des espaces |
GRUB_CMDLINE_LINUX | Paramètres de démarrage du noyau. |
GRUB_DISABLE_RECOVERY | Par défaut, deux entrées de menu sont générées pour chaque noyau Linux: une entrée par défaut et une entrée pour le mode de récupération |
Le menuentry est un bloc qui commence par { et se termine par }.
Il stocke la configuration d’une entrée de démarrage sur laquelle le PC peut booter par l’intermédiaire de GRUB.
Ci-dessus, une entrée Ubuntu avec le kernel sur lequel démarrer avec la configuration.
Même chose ci-dessous avec un menuentry Debian.
Le menuentry pour un boot Linux contient en général :
- Les lignes insmod pour charger les modules du noyau nécessaires au boot
- Le set root avec l’UID de la partition de boot
- Le chemin du noyau Linux sous la forme d’un fichier vmlinuz
- Le chemin du de l’image en mémoire (initramfs) qui contient le minimum pour accéder aux systèmes de fichiers
- des paramètres de démarrage du noyau. Par exemple, on peut très bien demander à désactiver l’IPv6 via un paramètre du noyau, désactiver APIC ou ACPM, etc.
La directive linux suivie du chemin vers le noyau et une directive initrd. La directive linux spécifie le numéro de version du noyau à démarrer ainsi que les paramètres de démarrage du noyau.
Ici /boot se trouve dans la partition racine de Linux.
Dans le cas où /boot est unre partition de disque, le chemin vers le noyau (ainsi que vers l’image initramfs) est relatif à / de / boot.
soit donc linux /vmlinuz-[kernel_version].
La directive initrd doit pointer vers l’emplacement du fichier initramfs correspondant à la même version du noyau.
En d’autres termes, le noyau tel qu’il est indiqué sur la ligne linux / vmlinuz- [kernel_version] doit correspondre au numéro de version de l’image initramfs donnée sur la ligne initrd /initramfs-[kernel_version circular .img de chaque strophe.
Générer un nouveau fichier grub.cfg
Pour mettre à jour une configuration Grub, on utilise la commande update-grub.
Aucun paramètre particulier n’est à donner.
La commande indique alors les fichiers sources et les images et entrées trouvées.
Enfin il créé le fichier de configuration GRUB.
mak@mak-virtual-machine:~$ sudo update-grub
[sudo] Mot de passe de mak :
Sourcing file /etc/default/grub' Sourcing file/etc/default/grub.d/init-select.cfg'
Création du fichier de configuration GRUB…
Image Linux trouvée : /boot/vmlinuz-5.4.0-48-generic
Image mémoire initiale trouvée : /boot/initrd.img-5.4.0-48-generic
Image Linux trouvée : /boot/vmlinuz-5.4.0-26-generic
Image mémoire initiale trouvée : /boot/initrd.img-5.4.0-26-generic
Adding boot menu entry for UEFI Firmware Settings
fait
Pour générer un nouveau fichier grub.cfg, on utilise la commande grub-mkconfig.
Par exemple :
grub-mkconfig -o /boot/grub/grub.cfg
Cette commande prend les fichiers de configuration situés dans /etc/grub.d dans l’ordre pour construire le fichier grub.cfg, et utilise le contenu du fichier par défaut de grub pour modifier la sortie afin d’obtenir la configuration finale souhaitée.
La commande grub-mkconfig tente de localiser tous les noyaux installés et crée une entrée pour chacun dans la section 10_Linux du fichier grub.cfg.
Il crée également une entrée “de secours” pour fournir une méthode de récupération après des problèmes importants qui empêchent Linux de démarrer.
Les principales commandes GRUB
Voici les principales commandes utiles pour grub qu’il faut connaître.
Commandes | Description |
grub-install | Installe Grub sur le disque. Cela restaure les fichiers manquants dans le dossier grub mais ne restaurera pas les fichiers supprimés ou corrompus intentionnellement. Le programme grub-install génère une image de base GRUB à l’aide de grub-mkimage et l’installe sur votre système |
grub-mkconfig | Génère le fichier de configuration grub.cfg |
update-grub | Mets à jour la configuration GRUB |
grub-setup | Configure un appareil pour démarrer à l’aide de GRUB Cela réinstalle les fichiers GRUB 2 sur la partition montée à l’emplacement approprié et sur le MBR du périphérique désigné. |
grub-mount | Effectue un montage en lecture seule de tout système de fichiers ou image de système de fichiers que GRUB comprend, en utilisant les pilotes de système de fichiers de GRUB via FUSE |
grub-mkimage | Créer une image bootable de GRUB |
grub-mkrescue | Créer une image de récupération de GRUB |
grub-mkrelpath | Crée un chemin d’accès au système de fichiers par rapport à la racine de son système de fichiers contenant. Par exemple |
grub-probe | Sonde les informations de périphérique pour un chemin ou un périphérique donné |
grub-reboot | Redémarrer l’appareil sur une entrée spécifique de GRUB |
grub-script-check | prend un fichier de script GRUB (voir Script de type Shell) et le vérifie pour les erreurs de syntaxe, similaires aux commandes telles que sh -n. Il peut prendre un chemin comme argument non optionnel; si aucun n’est fourni, il lira à partir de l’entrée standard. |
os-prober | Détecter la présence d’un système d’exploitation (OS) autre que Linux pour créer le fichier de configuration nécessaire au démarrage. Il est utile dans une installation en Dual-Boot. |
Comment ajouter une entrée au démarrage GRUB
Voici les étapes à suivre pour ajouter une entrée manuellement au démarrage de GRUB :
- Éditez le fichier à éditer est /etc/grub.d/40_custom. Il est important d’ajouter l’entrée à la fin du fichier
- Ajouter l’entrée souhaitée
- Mettez à jour la configuration de GRUB à l’aide de la commande grub-update
Pour cela, suivez ce guide avec des exemples :
Comment réparer GRUB
Enfin il peut arriver à la suite d’une mauvaise procédure que GRUB soit endommagé.
Le démarrage de Linux (Debian, Ubuntu, Mint, …) ne fonctionne plus et impossible donc d’accéder au bureau.
Le site regroupe plusieurs aides pour réparer, réinitialiser et réinstaller GRUB :
Enfin Ubuntu propose un outil de réparation du démarrage et de GRUB : Boot-Repair.
Voici un tutoriel complet :
Liens
- Qu’est-ce qu’un chargeur de démarrage (Boot Loader)
- GRUB : la configuration grub.cfg, les commandes et le fonctionnement
- GRUB : ajouter une entrée manuellement
- GRUB : Utiliser le mode rescue shell pour corriger les erreurs de démarrage Linux
- Réparer Debian en mode rescue et récupération
- Dual-boot : Supprimer Grub pour rétablir Windows au démarrage
- os-prober et grub-mkconfig : configurer GRUB automatiquement
- Réparer/restaurer GRUB et le démarrage de Linux
- Réparer GRUB avec Rescatux pour corriger le démarrage Linux
- Grub : Réparer le Dual-boot Ubuntu et Windows 11/10
- Comment modifier le délai d’attente de GRUB sous Linux
- Thème GRUB : personnaliser GRUB
- Réparer Debian en mode rescue et récupération
- Comment réparer et réinstaller Ubuntu avec le mode rescue
- Réinitialiser le mot de passe root perdu ou oublié Ubuntu
- Réinitialiser le mot de passe root perdu ou oublié avec un Live USB de secours
- Comment réinitialiser le mot de passe root depuis GRUB
- 5 façons de démarrer Linux en mode récupération et dépannage (rescue)
- efibootmgr : ajouter, supprimer, changer le démarrage d’un PC UEFI
- Qu’est-ce qu’un chargeur de démarrage (Boot Loader)