Menu Fermer

GRUB : la configuration grub.cfg, les commandes et le fonctionnement

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.

GRUB : la configuration grub.cfg, les commandes et le fonctionnement

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.

Naviguer dans les dossiers depuis GRUB rescue shell

Le dossier /boot avec les fichiers de configuration GRUB

Ce tableau donne les principaux dossiers et fichiers de configuration.

EmplacementDescription
/boot/grub/grub.cfgC’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/grubContient 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.
Le dossier /boot avec les fichiers de configuration de GRUB

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 répertoire /etc/grub.d/ stocke les scripts pour création de grub.cfg
Le répertoire /etc/grub.d/ stocke les scripts pour création de grub.cfg
Ainsi pour changer l’ordre de démarrage de GRUB, il faut simplement changer le numéro des entrées de démarrage de ce dossier.

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.

Le fichier /etc/default/grub

Les premières clés et valeurs de configuration /etc/default/grub :

clésDescriptions
GRUB_TIMEOUTLe 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_DISTRIBUTORDé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_DEFAULTL’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_SUBMENUPar 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_OUTPUTLe 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_LINUXParamètres de démarrage du noyau.
GRUB_DISABLE_RECOVERYPar 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
Les valeurs du fichier de configuration /etc/default/grub

Le menuentry de grub.cfg

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.

Le menuentry de grub.cfg et la configuration de démarrage

Même chose ci-dessous avec un menuentry Debian.

Le menuentry de grub.cfg et la configuration de démarrage

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
La commande update-grub pour mettre à jour la configuration GRUB

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.

CommandesDescription
grub-installInstalle 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-mkconfigGénère le fichier de configuration grub.cfg
update-grubMets à jour la configuration GRUB
grub-setupConfigure 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-mountEffectue 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-mkimageCréer une image bootable de GRUB
grub-mkrescueCréer une image de récupération de GRUB
grub-mkrelpathCré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-probeSonde les informations de périphérique pour un chemin ou un périphérique donné
grub-rebootRedémarrer l’appareil sur une entrée spécifique de GRUB
grub-script-checkprend 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-proberDé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.
Liste des principales commandes GRUB

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 ajouter une entrée manuellement dans GRUB

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 :