LFCS : Comment configurer et résoudre les problèmes de Grand Unified Bootloader (GRUB) – Partie 13

En raison des récents changements dans les objectifs de l’examen de certification LFCS en vigueur à partir du 2 février 2016, nous ajoutons les sujets nécessaires à la série LFCS publiée ici. Pour vous préparer à cet examen, il est fortement recommandé de suivre également la série LFCE.

LFCS: Configure and Troubleshoot Grub Boot Loader – Part 13

Dans cet article, nous vous présenterons GRUB et expliquerons pourquoi un chargeur de démarrage est nécessaire et comment il ajoute de la polyvalence au système.

Le processus de démarrage de Linux, depuis le moment où vous appuyez sur le bouton d’alimentation de votre ordinateur jusqu’à l’obtention d’un système pleinement opérationnel, suit cette séquence de haut niveau :

  1. 1. Un processus appelé POST (Power-On Self Test) effectue une vérification globale des composants matériels de votre ordinateur.
  2. 2. Lorsque le POST est terminé, il passe le contrôle au chargeur de démarrage, qui charge ensuite le noyau Linux en mémoire (avec initramfs) et l’exécute. Le chargeur de démarrage le plus utilisé dans Linux est le GRand Unified Boot loader, ou GRUB pour faire court.
  3. 3. Le noyau vérifie et accède au matériel, puis lance le processus initial (souvent connu sous le nom générique d’« init ») qui termine le démarrage du système en lançant des services.

Dans la Partie 7 de cette série (« SysVinit, Upstart et Systemd »), nous avons introduit les systèmes de gestion de services et les outils utilisés par les distributions Linux modernes. Vous voudrez peut-être revoir cet article avant de continuer.

Introduction au chargeur d’amorçage GRUB

Deux versions majeures de GRUB (v1 parfois appelé GRUB Legacy et v2) peuvent être trouvées dans les systèmes modernes, bien que la plupart des distributions utilisent v2 par défaut dans leurs dernières versions. Seule Red Hat Enterprise Linux 6 et ses dérivées utilisent encore v1 aujourd’hui.

Nous nous concentrerons donc principalement sur les fonctionnalités de v2 dans ce guide.

Peu importe la version de GRUB, un chargeur d’amorçage permet à l’utilisateur de :

  1. 1). modifier le comportement du système en spécifiant différents noyaux à utiliser,
  2. 2). choisir entre des systèmes d’exploitation alternatifs à démarrer, et
  3. 3). ajouter ou éditer des stances de configuration pour modifier les options de démarrage, entre autres choses.

Aujourd’hui, GRUB est maintenu par le projet GNU et est bien documenté sur leur site Web. Vous êtes encouragé à utiliser la documentation officielle de GNU tout en suivant ce guide.

Lorsque le système démarre, vous êtes présenté avec l’écran GRUB dans la console principale. Initialement, vous êtes invité à choisir entre des noyaux alternatifs (par défaut, le système démarrera en utilisant le dernier noyau) et vous êtes autorisé à saisir une ligne de commande GRUB (avec c) ou à modifier les options de démarrage (en appuyant sur la touche e).

GRUB Boot Screen

Une des raisons pour lesquelles vous pourriez envisager de démarrer avec un ancien noyau est un périphérique matériel qui fonctionnait correctement et qui a commencé à « poser problème » après une mise à niveau (consultez ce lien dans les forums AskUbuntu pour un exemple).

La configuration GRUB v2 est lue au démarrage à partir de /boot/grub/grub.cfg ou /boot/grub2/grub.cfg, tandis que /boot/grub/grub.conf ou /boot/grub/menu.lst sont utilisés dans la v1. Ces fichiers NE doivent PAS être édités manuellement, mais sont modifiés en fonction du contenu de /etc/default/grub et des fichiers trouvés dans /etc/grub.d.

Dans un CentOS 7, voici le fichier de configuration qui est créé lors de l’installation initiale du système:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

En plus de la documentation en ligne, vous pouvez également trouver le manuel GNU GRUB en utilisant info comme suit :

# info grub

Si vous êtes spécifiquement intéressé par les options disponibles pour /etc/default/grub, vous pouvez invoquer directement la section de configuration :

# info -f grub -n 'Simple configuration'

En utilisant la commande ci-dessus, vous découvrirez que GRUB_TIMEOUT définit le temps entre le moment où l’écran initial apparaît et le démarrage automatique du système commence, sauf s’il est interrompu par l’utilisateur. Lorsque cette variable est définie sur -1, le démarrage ne se fera pas tant que l’utilisateur n’aura pas fait une sélection.

Lorsque plusieurs systèmes d’exploitation ou noyaux sont installés sur la même machine, GRUB_DEFAULT nécessite une valeur entière indiquant quel système d’exploitation ou entrée de noyau dans l’écran initial de GRUB doit être sélectionné pour démarrer par défaut. La liste des entrées peut être consultée non seulement dans l’écran de démarrage affiché ci-dessus, mais aussi en utilisant la commande suivante :

Dans CentOS et openSUSE :

# awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg

Dans Ubuntu :

# awk -F\' '$1=="menuentry " {print $2}' /boot/grub/grub.cfg

Dans l’exemple montré dans l’image ci-dessous, si nous souhaitons démarrer avec la version du noyau 3.10.0-123.el7.x86_64 (4ème entrée), nous devons définir GRUB_DEFAULT sur 3 (les entrées sont numérotées en interne à partir de zéro) comme suit :

GRUB_DEFAULT=3
Boot System with Old Kernel Version

Une variable de configuration GRUB finale qui suscite un intérêt particulier est GRUB_CMDLINE_LINUX, qui est utilisée pour transmettre des options au noyau. Les options qui peuvent être transmises via GRUB au noyau sont bien documentées dans le fichier des paramètres du noyau et dans man 7 bootparam.

Les options actuelles de mon serveur CentOS 7 sont :

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"

Pourquoi voudriez-vous modifier les paramètres du noyau par défaut ou transmettre des options supplémentaires ? En termes simples, il peut arriver que vous ayez besoin d’indiquer au noyau certains paramètres matériels qu’il ne peut pas déterminer par lui-même, ou de remplacer les valeurs qu’il détecterait.

Cela m’est arrivé il n’y a pas si longtemps lorsque j’ai essayé Vector Linux, un dérivé de Slackware, sur mon ordinateur portable vieux de 10 ans. Après l’installation, il n’a pas détecté les bons réglages pour ma carte vidéo, donc j’ai dû modifier les options du noyau transmises via GRUB pour le faire fonctionner.

Un autre exemple est lorsque vous devez passer le système en mode utilisateur unique pour effectuer des tâches de maintenance. Vous pouvez le faire en ajoutant le mot single à GRUB_CMDLINE_LINUX et en redémarrant :

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet single"

Après avoir modifié /etc/defalt/grub, vous devrez exécuter update-grub (Ubuntu) ou grub2-mkconfig -o /boot/grub2/grub.cfg (CentOS et openSUSE) par la suite pour mettre à jour grub.cfg (sinon, les modifications seront perdues au démarrage).

Cette commande va traiter les fichiers de configuration de démarrage mentionnés précédemment pour mettre à jour grub.cfg. Cette méthode garantit que les modifications sont permanentes, alors que les options passées à travers GRUB au démarrage ne dureront que pendant la session en cours.

Résolution des problèmes de GRUB sous Linux

Si vous installez un deuxième système d’exploitation ou si votre fichier de configuration GRUB est corrompu en raison d’une erreur humaine, il existe des moyens de remettre votre système sur pied et de pouvoir démarrer à nouveau.

Dans l’écran initial, appuyez sur c pour obtenir une ligne de commande GRUB (n’oubliez pas que vous pouvez également appuyer sur e pour modifier les options de démarrage par défaut), et utilisez l’aide pour afficher les commandes disponibles dans l’invite GRUB:

Fix Grub Configuration Issues in Linux

Nous allons nous concentrer sur ls, qui listera les périphériques et systèmes de fichiers installés, et nous examinerons ce qu’il trouve. Sur l’image ci-dessous, nous pouvons voir qu’il y a 4 disques durs (hd0 à hd3).

Seul hd0 semble avoir été partitionné (comme en témoignent msdos1 et msdos2, où 1 et 2 sont les numéros de partition et msdos est le schéma de partitionnement).

Examinons maintenant la première partition sur hd0 (msdos1) pour voir si nous pouvons y trouver GRUB. Cette approche nous permettra de démarrer Linux et d’utiliser d’autres outils de haut niveau pour réparer le fichier de configuration ou réinstaller GRUB complètement si nécessaire:

# ls (hd0,msdos1)/

Comme on peut le voir dans la zone surlignée, nous avons trouvé le répertoire grub2 dans cette partition:

Find Grub Configuration

Une fois que nous sommes sûrs que GRUB réside dans (hd0,msdos1), disons à GRUB où trouver son fichier de configuration, puis demandons-lui de tenter de lancer son menu :

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal
Find and Launch Grub Menu

Ensuite, dans le menu GRUB, choisissez une entrée et appuyez sur Entrée pour démarrer avec celle-ci. Une fois que le système a démarré, vous pouvez exécuter la commande grub2-install /dev/sdX (remplacez sdX par le périphérique sur lequel vous souhaitez installer GRUB). Les informations de démarrage seront alors mises à jour et tous les fichiers associés seront restaurés.

# grub2-install /dev/sdX

D’autres scénarios plus complexes sont documentés, avec leurs correctifs suggérés, dans le Guide de dépannage d’Ubuntu GRUB2. Les concepts expliqués là-bas sont valables pour d’autres distributions également.

Résumé

Dans cet article, nous vous avons présenté GRUB, indiqué où vous pouvez trouver de la documentation en ligne et hors ligne, et expliqué comment aborder un scénario où un système ne démarre plus correctement en raison d’un problème lié au chargeur de démarrage.

Heureusement, GRUB est l’un des outils les mieux documentés et vous pouvez facilement trouver de l’aide soit dans la documentation installée, soit en ligne en utilisant les ressources que nous avons partagées dans cet article.

Avez-vous des questions ou des commentaires ? N’hésitez pas à nous en faire part en utilisant le formulaire de commentaire ci-dessous. Nous avons hâte de vous lire !

Source:
https://www.tecmint.com/configure-and-troubleshoot-grub-boot-loader-linux/