SDB:Le gestionnaire d'amorçage GRUB
Cet article fait référence à la version '8.1' et il est maintenant obsolète ! Référez-vous à la page de discussion pour plus de renseignements. |
Version: 8.1
Sommaire
- 1 Situation
- 2 Contexte et fonctionnement
- 2.1 Le processus d'amorçage et les parties de GRUB associées
- 2.2 Les possibilités du menu d'amorçage de GRUB
- 2.3 La configuration de GRUB avec YaST2
- 2.4 Le fichier du menu
- 2.5 Désignation des disques durs et des partition
- 2.6 Exemple de fichier de menu
- 2.7 Le fichier de correspondance
- 2.8 Le fichier /etc/grub.conf
- 2.9 Installation manuelle de GRUB
- 2.10 Documentation
Situation
Vous voulez savoir ce qu'il est possible de faire et comment fonctionne le gestionnaire d'amorçage GRUB qui est devenu le gestionnaire d'amorçage par défaut de SUSE Linux depuis la version 8.1.
Contexte et fonctionnement
Le nom GRUB signifie Grand Unified Bootloader - Grand Chargeur d'amorçage Unifié. GRUB se compose, comme le gestionnaire d'amorçage Lilo, de deux parties : un premier niveau (de 512 octets) écrit dans l'enregistrement d'amorçage maître (MBR) ou dans le secteur d'amorçage d'une partition, et un deuxième niveau plus volumineux (stage2) qui est chargé à la suite et qui contient le code réel du programme.
La plus grande différence avec LILO est que GRUB prend en charge directement plusieurs systèmes de fichiers (entre autres tous les systèmes de fichiers avec lesquels SUSE Linux peut être utilisé, ainsi que vfat). Puisque GRUB peut accéder au système de fichiers avant l'amorçage, il n'est pas nécessaire de réinstaller Grub après avoir modifié le fichier de configuration de GRUB. Grub relit à l'amorçage le contenu du fichier de menus.
De même, lorsqu'un nouveau noyau (/boot/vmlinuz) est installé ou lorsque le disque virtuel initial (/boot/initrd) est modifié, GRUB s'en rend compte par lui-même. GRUB ne se soucie pas de l'endroit où se situe physiquement le noyau tant que la partition et le chemin vers le noyau à amorcer sont bien saisis dans le fichier de menu. C'est pourquoi il est inutile de réinstaller du chargeur d'amorçage par exemple après avoir compilé un noyau.
Un autre très gros avantage de GRUB est de pouvoir éditer tous les paramètres d'amorçage avant l'amorçage. C'est pratique si vous obtenez des erreurs après avoir modifié le fichier de menu.
Il existe de plus un moyen de donner des ordres à la commande d'amorçage. On peut par ce biais amorcer des systèmes d'exploitation pour lesquels il n'existe pas (encore) de ligne dans le menu d'amorçage. GRUB permet de paramétrer l'emplacement et la désignation du noyau et de l'initrd avant l'amorçage.
Dans la suite nous présenterons un aperçu du processus d'amorçage de GRUB, puis la configuration grâce à YaST2. Nous expliquerons ensuite comment le fichier de configuration réel (le fichier /boot/grub/menu.lst) est construit. Nous expliquerons ensuite le fichier /boot/grub/device.map, dans lequel l'ordre des périphérique de stockage de masse est configuré en fonction des noms de périphériques du BIOS, ainsi que le fichier /etc/grub.conf, utilisé principalement par YaST2. Puis nous aborderons brièvement la manière dont GRUB peut être installé à la main. Pour terminer, nous expliquerons ce qu'il est possible de faire avec le menu d'amorçage de GRUB.
Le processus d'amorçage et les parties de GRUB associées
Deux parties de GRUB sont associées à l'amorçage de l'ordinateur :
- Chargement du premier niveau de GRUB ("stage 1")
Le premier niveau de GRUB se situe après l'installation de SuSE Linux dans le secteur d'amorçage maître, dans le secteur d'amorçage d'une partition du disque dur ou dans le secteur d'amorçage d'une disquette. Comme ce premier niveau ne peut être que très petit puisqu'il n'y a que peu de place à disposition dans l'enregistrement d'amorçage maître ou dans les secteurs d'amorçage, la seule tâche de ce niveau est de charger le deuxième niveau de GRUB.
- Chargement du deuxième niveau de GRUB ("stage 2")
Le deuxième niveau de GRUB fournit les fonctions réelles du chargeur d'amorçage : entre autres le menu de choix (ou cache l'interpréteur de commandes, voir ci-dessous) et le code du programme avec lequel le contrôle de l'ordinateur est passé au système d'exploitation. Le fichier de second niveau se trouve sous SuSE Linux dans /boot/grub/stage2. Lors de l'installation du chargeur d'amorçage, l'emplacement physique du disque dur dans lequel se trouve le second niveau est signalé dans le fichier du premier niveau.
Lorsque GRUB apparaît à l'écran après le démarrage, on peut (comme pour le gestionnaire d'amorçage Lilo) simplement choisir un élément du menu pour démarrer le système d'exploitation correspondant. Pour les systèmes Linux on peut comme d'habitude passer des options d'amorçage. GRUB propose toutefois des fonctions supplémentaires. En appuyant sur Échap vous quittez l'écran de bienvenue et vous pouvez éditer les éléments de menu individuels avec "e" (éditer).
Il n'est dans la plupart des cas nécessaire d'éditer les paramètres que dans les "situations d'urgence", par exemple lorsqu'un système d'exploitation n'est pas amorçable. Les modifications ne sont valables que pour une fois et ne sont pas prises en compte pour le long cours. Notez qu'à l'amorçage seule la disposition de clavier américaine est disponible. Les emplacements de certains caractères sont donc intervertis.
Pour éditer un élément du menu, appuyez comme décrit sur Échap. Choisissez à l'aide des touches du curseur l'élément à éditer et appuyez sur "e". Si vous avez par exemple choisi l'élément "Linux", vous obtiendrez les lignes suivantes :
kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 initrd (hd0,4)/initrd
Choisissez une des lignes avec les touches du curseur. Vous pouvez éditer la ligne avec un nouvel appui sur "e". Vous pouvez par exemple de cette manière corriger la déclaration de la partition et du chemin. Si vous appuyez sur Entrée vous revenez au menu, à partir duquel vous pouvez amorcer en appuyant sur "b". Vous trouverez des possibilités supplémentaires dans le texte d'aide dans la partie en bas (en anglais).
Une possibilité supplémentaire pour les experts, qui est toutefois très rarement nécessaire : avec "c" (pour "ligne de Commande") vous vous retrouvez dans l'interpréteur de commandes de GRUB qui est un moyen de lui donner des ordres. Vous trouverez un aperçu des commandes avancées à votre disposition avec "help". Vous revenez au menu d'amorçage avec la touche Échap.
L'interpréteur de commandes de GRUB permet de démarrer des systèmes d'exploitation qui ne se trouvent pas dans le menu de GRUB. Cette possibilité est pratique par exemple pour tester l'amorçage d'un noyau compilé par vos soins pour lequel la ligne correspondante dans le menu GRUB n'a pas (encore) été ajoutée.
Pour amorcer un système grâce à l'interpréteur de commande GRUB vous pouvez par exemple saisir la commande suivante à la main (dans ce cas on amorcera un système Linux avec une partition d'amorçage sur /dev/hda5 et une partition racine sur /dev/hda7) :
grub> kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791
[Linux-bzImage, setup=0x1400, size=0xe9a45]
grub> initrd (hd0,4)/initrd [Linux-initrd @ 0x369000, 0x863c9 bytes]
grub> boot
La syntaxe est inspirée de celle du fichier /boot/grub/menu.lst de votre système. Vous trouverez une explication dans le chapitre Exemple de fichier de menu plus loin dans l'article. Important : La saisie de "boot" à la fin est nécessaire pour démarrer le système.
Point pratique : Comme GRUB peut accéder à l'amorçage directement au système de fichier Linux, la touche de tabulation peut être utilisée (comme dans bash) lorsque vous saisissez des noms de fichiers pour compléter automatiquement des noms incomplets. C'est utile lorsque vous ne connaissez pas l'emplacement exact des fichiers. Également utile : Si vous ne savez pas sur quelle partition se trouve le noyau Linux, vous pouvez le rechercher avec la commande
find /boot/vmlinuz
ou
find /vmlinuz
Cette commande nous renvoie le résultat suivant dans notre exemple :
(hd0,4)
Vous pouvez bien sûr rechercher avec la commande find tout autre fichier (comme l'initrd..).
Vous pouvez aussi grâce à la commande cat visualiser le contenu d'un fichier. Vous pouvez par exemple afficher le contenu d'un fichier de configuration GRUB, mais aussi de tout autre fichier. Un utilisateur sans droits root dans le système démarré pourrait voir le contenu de n'importe quel fichier !
Comme ceci n'est pas toujours souhaitable pour des raisons de sécurité, un mot de passe peut être configuré dans le fichier /boot/grub/menu.lst. Le démarrage d'un système d'exploitation par le menu est alors encore possible, mais les possibilités interactives ("e" et "c") sont interdites aux personnes non autorisées. Elles ne sont autorisées qu'après avoir appuyé sur "p" et saisi le mot de passe. Si vous voulez configurer un mot de passe reportez vous à la section La configuration de GRUB avec YaST2 plus loin dans le texte.
La configuration de GRUB avec YaST2
La manière la plus simple de configurer GRUB est d'utiliser YaST2. Démarrez le centre de contrôle YaST2 avec la boîte de dialogue
- Système -->
- Configuration du chargeur d'amorçage
Vous pouvez éditer les paramètres globaux ainsi que d'autres options du démarrage d'un système d'exploitation donné dans l'élément de menu Modifier la configuration actuelle. Après avoir choisi ce menu vous pouvez paramétrer l'endroit où GRUB doit être installé : dans le secteur d'amorçage maître du premier disque dur, sur une disquette, dans le secteur d'amorçage de la partition d'amorçage ou de la partition racine ou dans une autre partition.
Avec Suivant vous passez dans une boîte de dialogue dans laquelle vous pouvez définir le temps pendant lequel l'invite d'amorçage attend ainsi qu'un mot de passe pour GRUB. Notez que ce mot de passe protège la saisie de commandes GRUB spéciales à l'invite d'amorçage. Cela n'influe pas le choix d'un système d'exploitation (vous trouverez plus d'informations sur les commandes spéciales de GRUB à l'invite d'amorçage dans le chapitre "Les possibilités du menu d'amorçage de GRUB" plus loin dans l'article).
Vous trouverez des options supplémentaires dans Configuration pour experts.
Vous accédez avec Suivant à la configuration du tableau Sections. Chaque section représente un élément du menu d'amorçage. Vous pouvez ajouter des sections, en supprimer ou paramétrer la section par défaut. En choisissant Modifier vous pouvez par exemple renommer une section ou (dans Configuration pour experts) modifier les paramètres du noyau.
Un appui sur Suivant vous ramène à la configuration des sections.
Choisissez Enregistrer la configuration actuelle et appuyez sur Terminer pour enregistrer les modifications sur le disque dur.
Dans la partie Configuration manuelle pour experts, les fichiers de configuration de GRUB /boot/grub/menu.lst et /etc/grub.conf peuvent être modifiés manuellement. Vous trouverez des explications pour cela dans le chapitre suivant.
Choisissez Restaurer la configuration initiale pour récupérer les réglages proposés pendant l'installation.
Après une installation effectuée avec succès, le fichier de menu est le plus important des fichiers de configuration. Il se trouve sous SuSE Linux dans /boot/grub/menu.lst. Il contient toutes les informations à propos des partitions et des systèmes d'exploitation qui peuvent être amorcés à l'aide du menu.
Désignation des disques durs et des partition
Préalable : GRUB a une seule notation pour les disques durs et les partitions. On n'utilise pas les désignations habituelles sous Linux (par exemple /dev/hda1) mais des notations particulières. Le lecteur de disquettes est désigné par fd0, les disques durs par hd0, hd1, etc. L'identification de la partition suit, séparée par une virgule : hd0,0 représente la première partition du premier disque dur. Il est important de remarquer que la numérotation des périphériques et des partitions commence à zéro.
Exemple :
(fd0) Lecteur de disquette (hd0) Premier disque du système (disque dur d'amorçage) (hd1) Deuxième disque dur (hd0,0) Première partition du premier disque dur
Les quatre partitions primaires sont numérotées de 0 à 3. Les partitions logiques sont numérotées à partir du chiffre 4.
(hd0,0) La première partition partition du premier disque dur (hd0,1) La deuxième partition primaire (hd0,2) La troisième partition primaire (hd0,3) La quatrième partition primaire et en règle générale la partition étendue (hd0,4) La première partition logique (hd0,5) La deuxième partition logique (hd0,6) La troisième partition logique etc.
Il est également important de savoir que GRUB ne fait pas la différence en désignant les disques durs entre les disques IDE, SCSI ou autres. Tous les disques durs reconnus par le BIOS ou par d'autres contrôleurs (SCSI, RAID, etc) sont numérotés d'après l'ordre d'amorçage. (hd0,0) est toujours le disque dur qui vient le premier dans la séquence d'amorçage, qu'il soit IDE, SCSI ou RAID.
Nous aimerions éclaircir ceci encore une fois au moyen d'un exemple : dans un système avec deux disques durs IDE et deux disques durs SCSI, la séquence d'amorçage est paramétrée à "IDE avant SCSI". GRUB fournit alors les désignations suivantes :
(hd0) Premier disque dur IDE (hd1) Second disque dur IDE (hd2) Premier disque dur SCSI (hd3) Second disque dur SCSI
Vous trouverez d'autres détails à ce propos dans le chapitre Le fichier de correspondance
Dans la suite nous voudrions à présent expliquer grâce à un exemple la construction d'un fichier de menu /boot/grub/menu.lst. Dans mon exemple la partition d'amorçage de Linux est /dev/hda5, la partition racine est /dev/hda7 et il y a un système d'exploitation Windows sur /dev/hda1.
gfxmenu (hd0,4)/message color white/green black/light-gray default 0 timeout 8
title linux kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 initrd (hd0,4)/initrd title windows root (hd0,0) makeactive chainloader +1 title floppy root (fd0) chainloader +1 title failsafe kernel (hd0,4)/vmlinuz.shipped root=/dev/hda7 ide=nodma apm=off acpi=off vga=normal nosmp maxcpus=0 3 initrd (hd0,4)/initrd.shipped
Les différentes déclarations ont la signification suivante :
- Comme il est facile de le deviner, les deux premières lignes traitent de la configuration du menu de bienvenue : l'image de fond se situe sur /dev/hda5 et a pour nom "message". Avant-plan : blanc, arrière-plan : vert, choix : noir, arrière-plan du choix : gris clair.
- L'élément "default 0" de la troisième ligne signifie que la première ligne du menu ("title linux") est choisie par défaut à l'amorçage.
- Quatrième ligne : le délai avant amorçage est de 8 secondes.
Après ces déclarations viennent celles des systèmes d'exploitations à amorcer :
- La première déclaration ("title linux") amorcera SuSE Linux.
- Le noyau Linux se trouve sur le disque dur 1 sur la partition logique (hd0,4) (qui est dans cet exemple la partition d'amorçage) et s'appelle vmlinuz. Les paramètres du noyau (comme la spécification de la partition racine, du vga, etc) sont ajoutés directement.
Attention : La partition racine est donnée sous la forme de son nom de périphérique Linux car elle est donnée comme paramètre au noyau Linux. - Pour finir l'information sur l'emplacement de l'initrd : celui-ci se situe également sur le premier disque dur dans la première partition logique.
- Windows, dans mon exemple sur la première partition du disque dur (hd0,0) est amorcé à l'aide de la section suivante. Dans la ligne suivante l'option "makeactive" est activée par précaution car Windows ne peut être amorcé que depuis une partition marquée visible et active.
La ligne "chainloader +1" signifie que le premier secteur de la partition donnée doit être lu et exécuté. - La section suivante peut être utilisée pour amorcer un système à partir d'une Disquette sans avoir à modifier le BIOS.
- La dernière section démarre Linux en mode sans échec (failsafe).
Comme nous l'avons déjà dit les modifications apportées à ce menu seront actives au prochain amorçage sans action supplémentaire.
Vous trouverez des informations supplémentaires sur l'amorçage des systèmes d'exploitation DOS/Windows dans les articles SDB:Amorcer Windows à partir du deuxième disque dur
Le fichier de correspondance
Le fichier de correspondance est le deuxième fichier de configuration important pour GRUB. Il n'est toutefois nécessaire de le modifier que dans de rares cas.
Revenons à la manière dont GRUB numérote les disques durs dans un système hétérogène. Dans un système dans lequel les disques durs sont connectés à de différents contrôleurs (si par exemple des disques IDE et des disques SCSI sont connectés), GRUB doit déterminer à l'aide d'une procédure spéciale la séquence d'amorçage (GRUB ne peut pas regarder dans le BIOS). GRUB doit calculer s'il doit amorcer depuis le disque IDE ou depuis le disque SCSI.
GRUB enregistre le résultat dans un fichier. Celui-ci se trouve dans /boot/grub/device.map. Il a dans notre exemple (dans le BIOS l'ordre d'amorçage configuré est IDE avant SCSI) le contenu suivant :
(fd0) /dev/fd0 (hd0) /dev/hda (hd1) /dev/hdb (hd2) /dev/sda (hd3) /dev/sdb
Important : Dans le cas où (si vous avez des problème d'amorçage) vous éditez à la main le contenu du fichier,
grub --batch --device-map=/boot/grub/device.map </etc/grub.conf
doit être appelé à la fin pour réinstaller GRUB. L'option --device-map indique que GRUB doit relire le fichier de correspondance existant. La suite des commandes sera tirée du fichier /etc/grub.conf, qui sera expliqué dans la section suivante.
Le fichier /etc/grub.conf
Le fichier /etc/grub.conf contient des paramètres pour la commande "grub". Vous pouvez par exemple avoir le contenu suivant :
root (hd0,4) install /grub/stage1 d (hd0) /grub/stage2 0x8000 (hd0,4)/grub/menu.lst quit
La ligne root permet de "monter" la partition sur laquelle les fichiers de GRUB se trouvent. La commande install permet d'installer GRUB. Dans cet exemple le fichier du premier niveau est installé dans l'enregistrement d'amorçage maître sur le premier disque dur (d (hd0)). Le fichier de second niveau doit être chargé à l'adresse mémoire 0x8000 (/grub/stage2 0x8000). L'élément (hd0,4)/grub/menu.lst fournit l'emplacement du fichier de menu.
Installation manuelle de GRUB
On peut installer GRUB depuis la ligne de commande Linux de deux manières : la commande "setup" ou la commande "install". La commande "setup" n'est pas utilisée sous SuSE Linux (par exemple par YaST) mais est néanmoins décrite ci-dessous.
La commande setup
Saisissez la commande "grub". L'invite de commande de GRUB apparaît et vous pouvez y saisir des commandes supplémentaires :
grub>
Astuce : Sur une machine sans lecteur de disquette, GRUB peut être appelé avec l'option "--no-floppy". Le système ne cherchera alors pas de lecteur de disquette.
Dans notre exemple nous supposons que la partition d'amorçage se trouve sur /dev/hda5 ; GRUB doit être installé dans l'enregistrement d'amorçage maître du premier disque dur.
grub> root (hd0,4) Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 23 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd0) (hd0)1+23 p (hd0,4)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded Done.
grub> quit
La première commande fournit l'emplacement de la partition d'amorçage et l'endroit où se trouvent les fichiers du chargeur d'amorçage. La deuxième installe GRUB dans l'enregistrement d'amorçage maitre. Un fichier stage1_5 est utilisé grâce auquel GRUB peut accéder au système de fichiers sur la partition d'amorçage.
Astuce : Si GRUB doit être installé sur le secteur d'amorçage d'une partition (supposons sur /dev/hda5) au lieu de sur l'enregistrement d'amorçage maître, la commande est setup (hd0,4).
Encore une astuce : Dans l'interpréteur de commande GRUB, comme dans celui de bash, vous pouvez utiliser le mécanisme appelé auto-complètement (tab completion). Si vous tapez par exemple "root (" suivi de la touche de tabulation, la liste des périphériques apparaît (par exemple hd0). Lorsque vous tapez "root (hd0," suivi de la touche de tabulation, une liste des partitions apparaît.
La troisième commande termine l'interpréteur de commandes GRUB.
La commande install
Vous pouvez aussi installer GRUB en utilisant la commande install :
grub> root (hd0,4) Filesystem type is ext2fs, partition type 0x83
grub> install --stage2=/boot/grub/stage2 /boot/grub/stage1 d (hd0) /boot/grub/stage2 0x8000 (hd0,4)/boot/grub/menu.lst
grub> quit
La commande "install" est d'ailleurs également utilisée par YaST. Elle se retrouve dans le fichier /etc/grub/conf. La syntaxe de cette commande vous est expliquée plus haut dans l'article.
Astuce : Comme la commande install complète se trouve déjà dans le fichier /etc/grub.conf, le plus simple est de lancer GRUB dans un interpréteur de commande Linux en mode "batch" et de lui faire lire le fichier /etc/grub.conf :
grub --batch --device-map=/boot/grub/device.map </etc/grub.conf
Documentation
Vous trouverez une vaste documentation en anglais à l'adresse http://www.gnu.org/software/grub/manual/grub.html. Vous pouvez obtenir les mêmes informations sur un système installé en lançant info grub dans un interpréteur de commande. Une FAQ existe à l'adresse http://www.gnu.org/software/grub/grub-faq.en.html. Vous trouverez plus d'informations dans les pages de manuel correspondantes : man grub et man grub-install.
SDB:Le système d'amorçage à partir de SuSE Linux Version 8.1
en:SDB:Setting a Password for the Boot Manager GRUB
SDB:Désinstaller le gestionnaire d'amorçage GRUB du MBR
SDB:Amorcer Windows à partir du deuxième disque dur
SDB:Amorcer plusieurs installations de Windows à partir d'un disque dur
SDB:Passer au chargeur d'amorçage GRUB après une mise à jour de SuSE 8.1
SDB:Amorcer Linux au moyen du gestionnaire d'amorçage de Windows NT/2000/XP
en:SDB:Booting from the Network with GRUB
<keyword>grub,amorcer,bootmanager,bootloader,overview,gestionnaired'amorçage</keyword>