Recherche de site Web

LFCS : Comment configurer et dépanner Grand Unified Bootloader (GRUB) - Partie 13


En raison des récents changements apportés aux objectifs de l'examen de certification LFCS, entrés en vigueur le 2 février 2016, nous ajoutons les sujets nécessaires à la série LFCS publiée ici. Pour vous préparer à cet examen, vous êtes fortement encouragés à suivre également la série LFCE.

Dans cet article, nous allons vous présenter GRUB et expliquer 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'à ce que vous obteniez un système entièrement fonctionnel, 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. Une fois le POST terminé, il passe le contrôle au chargeur de démarrage, qui à son tour charge le noyau Linux en mémoire (avec initramfs ) et l'exécute. Le chargeur de démarrage le plus utilisé sous Linux est le GRand Unified Boot Loader, ou GRUB en abrégé.
  3. 3. Le noyau vérifie et accède au matériel, puis exécute le processus initial (principalement connu sous son nom générique « init ») qui à son tour termine le démarrage du système en démarrant prestations de service.

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

Présentation du chargeur de démarrage GRUB

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

Ainsi, nous nous concentrerons principalement sur les fonctionnalités de la v2 dans ce guide.

Quelle que soit la version de GRUB, un chargeur de démarrage permet à l'utilisateur de :

  1. 1). modifier le comportement du système en spécifiant différents noyaux à utiliser,
  2. 2). choisissez entre d'autres systèmes d'exploitation pour démarrer, et
  3. 3). ajoutez ou modifiez des sections de configuration pour modifier les options de démarrage, entre autres.

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 parcourant ce guide.

Lorsque le système démarre, l'écran GRUB suivant s'affiche 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 êtes autorisé à entrer une ligne de commande GRUB (avec c). ou modifiez les options de démarrage (en appuyant sur la touche e).

L'une des raisons pour lesquelles vous envisageriez de démarrer avec un noyau plus ancien est un périphérique matériel qui fonctionnait correctement et qui a commencé à « agir » après une mise à niveau (reportez-vous à ce lien dans la AskUbuntu forums pour un exemple).

La configuration GRUB v2 est lue au démarrage depuis /boot/grub/grub.cfg ou /boot/grub2/grub.cfg, alors que /boot/grub/grub.conf ou /boot/grub/menu.lst sont utilisés dans la v1. Ces fichiers ne doivent PAS être édités à la main, 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 créé lors de la première installation 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 les informations suivantes :

info grub

Si vous êtes spécifiquement intéressé par les options disponibles pour /etc/default/grub, vous pouvez appeler 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, sauf interruption par l'utilisateur. Lorsque cette variable est définie sur -1, le démarrage ne démarrera 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 qui indique quelle entrée de système d'exploitation ou de noyau dans l'écran initial de GRUB doit être sélectionnée pour démarrer par défaut. La liste des entrées peut être consultée non seulement dans l'écran de démarrage illustré ci-dessus, mais également à l'aide de la commande suivante :

Sous CentOS et openSUSE :

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

Sous 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 à 3 (les entrées sont numérotées en interne commençant par zéro) comme suit :

GRUB_DEFAULT=3

Une dernière variable de configuration GRUB particulièrement intéressante 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 de paramètres du noyau et dans le bootparam de man 7.

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 par défaut du noyau 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 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 de 10 ans. Après l'installation, il n'a pas détecté les bons paramètres pour ma carte vidéo, j'ai donc dû modifier les options du noyau transmises via GRUB afin de le faire fonctionner.

Un autre exemple est lorsque vous devez mettre le système en mode mono-utilisateur 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) pour mettre à jour grub.cfg (sinon, les modifications seront perdues au démarrage).

Cette commande traitera 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, tandis que les options transmises via GRUB au démarrage ne dureront que pendant la session en cours.

Résoudre les problèmes de Linux GRUB

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 redémarrer.

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

Nous nous concentrerons sur ls, qui listera les périphériques et systèmes de fichiers installés, et nous examinerons ce qu'il trouve. Dans 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 complètement GRUB si cela est nécessaire :

ls (hd0,msdos1)/

Comme nous pouvons le voir dans la zone en surbrillance, nous avons trouvé le répertoire grub2 dans cette partition :

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

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal

Ensuite, dans le menu GRUB, choisissez une entrée et appuyez sur Entrée pour démarrer en l'utilisant. Une fois le système démarré, vous pouvez émettre la commande grub2-install /dev/sdX (changez sdX avec 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, ainsi que les correctifs suggérés, dans le guide de dépannage Ubuntu GRUB2. Les concepts qui y sont expliqués sont également valables pour d'autres distributions.

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 dans lequel un système a cessé de démarrer 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 le faire savoir en utilisant le formulaire de commentaires ci-dessous. Nous avons hâte d'avoir de tes nouvelles!