GRUB (Grand Unified Bootloader) comporte deux niveaux. Le premier niveau (stage1) est stocké sur 512 octets dans le MBR ou le secteur d'amorçage d'une partition de disque ou d'une disquette. Le deuxième niveau (stage 2) est ensuite chargé et contient le véritable code du programme. La seule tâche qu'effectue le premier niveau consiste à charger le deuxième niveau du chargeur d'amorçage.
stage2 peut accéder à des systèmes de fichiers. Actuellement, Ext2, Ext3,
ReiserFS, Minix et le système de fichiers DOS FAT utilisé par Windows sont
pris en charge. Bien qu'avec des limitations, JFS, XFS ainsi que UFS et FFS,
utilisés par les systèmes BSD, sont également pris en charge. Depuis sa
version 0.95, GRUB peut également amorcer depuis un CD ou un DVD avec un
système de fichiers standard conforme à la norme ISO 9660 selon les
spécifications « El Torito ». GRUB peut aussi accéder avant
le démarrage du système à des systèmes de fichiers de disques pris en
charge par le BIOS (disquette ou disques durs, lecteurs de CD ou lecteurs de
DVD reconnus par le BIOS). C'est pourquoi il n'est plus nécessaire de
réinstaller le chargeur d'amorçage après avoir modifié le fichier de
configuration de GRUB (menu.lst). À l'amorçage,
GRUB relit le fichier de menu contenant les chemins actuels et les
déclarations de partitions du noyau ou du disque virtuel initial
(initrd) et trouve ces fichiers.
Pour la configuration en soi de GRUB, trois fichiers sont nécessaires ; ils sont décrits ci-après :
/boot/grub/menu.lst
Ce fichier contient toutes les données relatives aux partitions ou aux systèmes d'exploitation qui peuvent être amorcés avec GRUB. Sans ces données, la prise de contrôle du système par le système d'exploitation n'est pas possible.
/boot/grub/device.map
Ce fichier « traduit » les noms de périphériques utilisés par la notation de GRUB et du BIOS en noms de périphériques Linux.
/etc/grub.conf
Ce fichier contient les paramètres et options dont l'interpréteur de commandes de GRUB a besoin pour d'installer correctement le chargeur d'amorçage.
GRUB peut être contrôlé de différentes façons. Les choix d'amorçage
d'une configuration existante sont sélectionnées à l'aide de l'écran de
démarrage (splash screen). La configuration est chargée depuis
le fichier menu.lst.
GRUB permet la modification de tous les paramètres d'amorçage avant
l'amorçage. Par exemple, si une erreur a été faite lors de l'édition du
fichier de menu, celui-ci peut être réparé par ce biais. Des commandes
d'amorçage peuvent aussi être saisies interactivement dans une sorte
d'invite de commande (voir Section 8.3.1.3, « Modifier des éléments du menu pendant la procédure d'amorçage »). GRUB
permet aussi de connaître l'emplacement du noyau et de
initrd avant l'amorçage. Ainsi, vous pouvez même
amorcer un système d'exploitation qui n'a pas été enregistré dans la
configuration du chargeur d'amorçage.
Enfin, il existe, avec l'interpréteur de commandes GRUB, une émulation de GRUB dans le système installé. Vous pouvez l'utiliser afin d'installer GRUB ou bien pour tester une nouvelle configuration avant de la mettre en place. Voir Section 8.3.4, « L'interpréteur de commandes de GRUB »).
L'écran de bienvenue graphique avec le menu d'amorçage s'appuie sur le
fichier de configuration de GRUB
/boot/grub/menu.lst qui contient toutes les
informations à propos des partitions ou des systèmes d'exploitation
pouvant être démarrés à l'aide du menu.
GRUB relit à chaque démarrage du système le fichier de menu depuis le système de fichiers. Il n'est donc pas nécessaire de réinstaller GRUB après chaque modification du fichier. Utilisez le module chargeur d'amorçage de YaST pour procéder aux modifications de la configuration de GRUB, comme cela est expliqué dans Section 8.4, « Configurer le chargeur d'amorçage avec YaST ».
Le fichier de menu comporte des commandes. La syntaxe est très simple.
Chaque ligne comporte une commande, suivie de paramètres optionnels,
séparés comme pour l'interpréteur de commandes par des espaces. Quelques
instructions admettent pour des raisons historiques un signe égal
= avant le premier paramètre. Les commentaires sont
introduits par un dièse (#).
Pour identifier les éléments de menu dans l'aperçu du menu, vous devez
attribuer un titre (title) à chaque choix. Le texte se
trouvant après le mot-clé title, y compris les
espaces, est affiché dans le menu comme une option pouvant être choisie.
Toutes les instructions jusqu'au prochain title sont
exécutées si cette sélection est effectuée dans le menu.
Le cas le plus simple est la redirection vers des chargeurs d'amorçage
d'autres systèmes d'exploitation. La commande s'appelle
chainloader et l'argument est normalement le bloc
d'amorçage d'une autre partition dans la notation des blocs (angl.
Block-Notation) de GRUB, par exemple :
chainloader (hd0,3)+1
Les noms de périphériques sous GRUB sont expliqués dans Section 8.3.1.1, « Conventions de nom pour disques durs et partitions ». L'exemple ci-dessus désigne le premier bloc de la quatrième partition sur le premier disque dur.
La commande kernel permet d'indiquer une image du
noyau. Le premier argument est le chemin vers l'image du noyau sur une
partition. Les arguments restants sont transmis au noyau sur la ligne de
commande.
Quand le noyau ne dispose pas des pilotes intégrés nécessaires pour
l'accès à la partition racine, il faut utiliser
initrd. Il s'agit là d'une commande GRUB
séparée, qui a comme seul argument le chemin vers le fichier
initrd. Comme l'adresse de démarrage de
initrd est donnée à l'image du noyau déjà
chargée, la commande initrd doit suivre directement la
commande kernel.
La commande root permet d'indiquer plus facilement
l'emplacement des fichiers du noyau et de initrd. root
prend un unique argument, soit un périphérique de GRUB, soit une
partition sur un tel périphérique. Tout chemin de fichiers du noyau, de
initrd ou autres, auquel aucun autre périphérique
n'a été associé de façon explicite, est associé à ce périphérique
jusqu'à la commande root suivante. Cette commande
n'apparaît pas dans le fichier menu.lst qui est
généré pendant l'installation. Elle sert à simplifier la modification
manuelle.
À la fin de chaque élément de menu, la commande boot
est toujours implicite, si bien que celle-ci ne doit pas nécessairement
être écrite dans le fichier menu. S'il vous arrivait cependant d'utiliser
GRUB de façon interactive pour démarrer, vous devez saisir à la fin la
commande boot. La commande en elle-même n'a pas
d'argument. Elle exécute simplement l'image du noyau chargée ou le
gestionnaire chaîné indiqué.
Lorsque vous avez écrit tous les éléments du menu, vous devez définir un
élément par défaut (default). En son absence, le
premier (élément 0) est utilisé. Vous pouvez aussi
indiquer un délai en secondes après lequel l'amorçage de l'élément par
défaut doit s'effectuer. timeout et
default apparaissent généralement avant les
éléments du menu. Vous trouverez un fichier d'exemple et les explications
associées dans Section 8.3.1.2, « Exemple d'un fichier de menu ».
GRUB utilise pour la désignation de disques durs et de partitions
d'autres conventions que celles utilisées pour les périphériques Linux
normaux. GRUB numérote les partitions à partir de zéro. Ainsi,
(hd0,0) correspond à la première partition sur le
premier disque dur. Sur un ordinateur habituel avec un disque connecté
comme maître sur le premier contrôleur, le nom du périphérique sous
Linux est /dev/hda1.
Les quatre partitions primaires possibles prennent les numéros de
partition 0 à 3. Les partitions
logiques sont numérotées à partir de 4 :
(hd0,0) première partition primaire sur le premier disque dur
(hd0,1) deuxième partition primaire
(hd0,2) troisième partition primaire
(hd0,3) quatrième partition primaire (et souvent étendue)
(hd0,4) première partition logique
(hd0,5) deuxième partition logique
GRUB ne différencie pas les périphériques IDE, SCSI ou RAID. Tous les disques durs reconnus par le BIOS ou d'autres contrôleurs sont numérotés conformément à l'ordre d'amorçage préréglé dans le BIOS.
Malheureusement, GRUB ne peut pas établir une correspondance simple en
entre les noms de périphériques Linux et les noms de périphériques du
BIOS. Il utilise un certain algorithme pour générer cette correspondance
et l'enregistre dans le fichier device.map qui peut
être modifié si nécessaire. Vous trouverez les informations sur le
fichier device.map dans
Section 8.3.2, « Le fichier device.map ».
Un chemin GRUB complet comprend un nom de périphérique écrit entre parenthèses ainsi que le chemin du fichier dans le système de fichiers sur la partition indiquée. Le chemin commence par une barre oblique (angl. slash). Par exemple, sur un système avec un seul disque dur IDE et Linux sur la première partition, le noyau amorçable pourrait se présenter comme suit :
(hd0,0)/boot/vmlinuz
Pour mieux comprendre la structure d'un fichier de menu de GRUB, nous
présentons un court exemple. Cet exemple d'installation comprend une
partition d'amorçage Linux sous /dev/hda5, une
partition racine sous /dev/hda7 et une installation
Windows sous /dev/hda1.
gfxmenu (hd0,4)/message color white/blue black/light-gray default 0 timeout 8 title linux kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 initrd (hd0,4)/initrd title windows chainloader(hd0,0)+1 title disquette chainloader(fd0)+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
Le premier bloc concerne la configuration de l'écran de démarrage :
L'image de fond se trouve dans /dev/hda5 et porte
le nom de message
Le schéma de couleurs : blanc (premier plan), bleu (fond), noir (sélection) et gris clair (fond de la sélection). Le schéma de couleur n'a aucun effet sur l'écran de bienvenue (angl. splash screen), uniquement sur le menu modifiable de GRUB dans lequel vous arrivez lorsque vous quittez l'écran de bienvenue à l'aide de Échap.
Le premier élément du menu avec title linux
correspond à l'amorçage par défaut.
Après huit secondes sans réaction de la part de l'utilisateur, GRUB amorce le système automatiquement.
Le deuxième bloc, et le plus grand, énumère les différents systèmes
d'exploitation amorçables ; les sections de chaque système
d'exploitation sont introduites par title.
Le premier élément (title linux) s'occupe de
l'amorçage de SUSE LINUX. Le noyau (vmlinuz) se
trouve sur la première partition logique (ici la partition d'amorçage)
du premier disque dur. Les paramètres du noyau comme, par exemple,
l'indication de la partition racine et du mode VGA y sont rattachés. La
partition racine est indiquée selon la convention de nommage de Linux
(/dev/hda7/) puisque cette information est
destinée au noyau et n'a rien à voir avec GRUB.
initrd se trouve également sur la première
partition logique du premier disque dur.
Le deuxième élément s'occupe du chargement de Windows. Windows est
démarré à partir de la première partition du premier disque dur
(hd0,0). chainloader +1 gère
la lecture et l'exécution du premier secteur de la partition indiquée.
Le paragraphe suivant a pour but de permettre le démarrage depuis une disquette, sans avoir à modifier le BIOS.
L'option d'amorçage failsafe sert à démarrer
Linux avec un ensemble donné de paramètres du noyau qui permettent
d'amorcer Linux même sur des systèmes problématiques.
Le fichier de menu peut être modifié à tout moment. GRUB utilise alors les nouveaux réglages lors de l'amorçage suivant. Éditez ce fichier de façon permanente avec YaST ou avec l'éditeur de votre choix. Sinon, vous pouvez effectuer des modifications temporaires de façon interactive par la fonction d'édition de GRUB. Voir Section 8.3.1.3, « Modifier des éléments du menu pendant la procédure d'amorçage ».
À partir du menu d'amorçage graphique GRUB, sélectionnez, à l'aide des flèches, le système d'exploitation à amorcer. Si vous choisissez un système Linux, vous pouvez ajouter, à l'invite d'amorçage, vos propres paramètres de démarrage. Si vous appuyez sur Échap et quittez l'écran de bienvenue, vous pouvez, après avoir appuyé sur E, modifier directement et séparément des éléments du menu. Les modifications que vous effectuez de cette manière ne sont valables que pour ce seul processus d'amorçage et ne sont pas conservées de façon durable.
![]() | Disposition du clavier pendant le démarrage |
|---|---|
Notez que seul la disposition de clavier américain est disponible pour le démarrage. | |
Une fois le mode d'édition activé, choisissez à l'aide des flèches l'élément du menu dont la configuration est à modifier. Pour pouvoir modifier la configuration, appuyez à nouveau sur E. Corrigez ainsi les erreurs de désignation de partition ou de chemin avant qu'elles n'aient un impact négatif sur le processus de démarrage. En appuyant sur Entrée, vous quittez le mode d'édition et vous revenez dans le menu. Vous pouvez amorcer cette configuration avec B. D'autres actions possibles sont indiquées dans le texte d'aide en bas.
Si vous voulez enregistrer de façon durable des options de démarrage
modifiées et les faire parvenir au noyau, ouvrez en tant qu'utilisateur
root le fichier menu.lst et
ajoutez à la ligne existante les paramètres de noyau supplémentaires,
séparés par un espace :
title linux kernel (hd0,0)/vmlinuz root=/dev/hda3 paramètre supplémentaire initrd (hd0,0)/initrd
GRUB prend en compte automatiquement les nouveaux paramètres lors du démarrage suivant. Sinon, il est aussi possible de faire appel au module chargeur d'amorçage de YaST pour cette modification. Ajoutez les nouveaux paramètres à la ligne existante, séparés par des espaces.
Tout particulièrement lorsque vous développez ou utilisez des noyaux
personnalisés, vous devez changer les entrées dans menu.lst
ou modifier la ligne de commande pour être en harmonie avec les noms
de noyau et de fichier initrd courants. Afin de simplifier cette procédure,
utilisez des caractères joker pour mettre à
jour dynamiquement la liste de noyaux de GRUB. Toutes les images de
noyau qui correspondent à ce schéma spécifique sont alors automatiquement
ajoutées à la liste des images amorçables. Veuillez noter qu'il n'y a pas d'assistance
technique pour cette fonctionnalité.
Activez l'option caractère joker en créant une entrée de menu supplémentaire
dans menu.lst. Pour être utiles, toutes les images noyau
et initrd doivent avoir un nom de base commun et un identificateur qui correspond
au noyau avec son initrd associé. Considérez la configuration suivante :
initrd-default initrd-test vmlinuz-default vmlinuz-test
Dans ce cas, vous pouvez ajouter les deux images d'amorçage dans une configuration
GRUB. Pour avoir les entrées de menu
linux-default et
linux-test, l'entrée suivante est nécessaire dans
menu.lst :
title linux-* wildcard (hd0,4)/vmlinuz-* kernel (hd0,4)/vmlinuz-* root=/dev/hda7 vga=791 initrd (hd0,4)/initrd-*
Dans cet exemple, GRUB recherche des entrées qui correspondent au
caractère joker dans la partition (hd0,4). Ces entrées sont utilisées pour
générer de nouvelles entrées dans le menu GRUB. Dans l'exemple précédent,
GRUBse comportera comme si les entrées suivantes existaient dans
menu.lst:
title linux-default
wildcard (hd0,4)/vmlinuz-default
kernel (hd0,4)/vmlinuz-default root=/dev/hda7 vga=791
initrd (hd0,4)/initrd-default
title linux-test
wildcard (hd0,4)/vmlinuz-test
kernel (hd0,4)/vmlinuz-test root=/dev/hda7 vga=791
initrd (hd0,4)/initrd-test
Des problèmes peuvent surgir avec cette configuration si les noms de fichiers ne sont pas utilisés de façon cohérente ou si l'un des fichiers étendus, comme une image initrd, manque.
Le fichier device.map contient les correspondances
entre les noms de périphériques de GRUB et de Linux. Si vous travaillez
sur un système mixte avec des disques durs IDE et SCSI, GRUB doit
essayer, à l'aide d'un processus particulier, de déterminer la séquence
d'amorçage. GRUB n'a pas accès aux informations du BIOS à ce sujet.
GRUB enregistre le résultat de ce contrôle dans
/boot/grub/device.map. Pour un système particulier,
en supposant que la séquence d'amorçage configurée dans le BIOS soit IDE
avant SCSI, le fichier device.map se présente
ainsi :
(fd0) /dev/fd0 (hd0) /dev/hda (hd1) /dev/sda
Comme la séquence des disques IDE, SCSI et autres dépend de différents
facteurs et que Linux ne peut reconnaître cet ordonnancement, il est
possible de configurer la séquence manuellement dans
device.map. Si vous avez des problèmes à
l'amorçage, vérifiez que l'ordre dans ce fichier correspond à celui du
BIOS et, si nécessaire, modifiez-le temporairement avec l'interpréteur de
commandes de GRUB décrit dans Section 8.3.4, « L'interpréteur de commandes de GRUB ». Si le
système Linux est amorcé, vous pouvez modifier de façon durable le
fichier device.map avec le module chargeur
d'amorçage de YaST ou un éditeur de votre choix.
Après modification manuelle de device.map, exécutez
la commande suivante pour
réinstaller GRUB. Avec cette commande, le fichier
device.map sera lu à nouveau et les commandes
contenues dans grub.conf seront exécutées :
grub --batch < /etc/grub.conf
Le troisième fichier de configuration important de GRUB outre
menu.lst et device.map est
/etc/grub.conf. Les paramètres et les options dont
la commande grub a besoin pour installer correctement
le chargeur d'amorçage y sont énumérés :
root (hd0,4) install /grub/stage1 d (hd0) /grub/stage2 0x8000 (hd0,4)/grub/menu.lst quit
La signification des différentes choix en détails :
Cette commande indique à GRUB de se référer pour les commandes suivantes à la première partition logique du premier disque dur sur lequel il trouve ses fichiers de démarrage.
paramètres
La commande grub devrait être démarrée avec le
paramètre install. stage1 en
tant gestionnaire de la première étape d'amorçage doit être installé
dans le MBR du premier disque dur (/grub/stage1 d
(hd0)). stage2 doit être chargé à
l'adresse mémoire 0x8000 (/grub/stage2 0x8000). Le
dernier élément ((hd0,4)/grub/menu.lst) indique à
GRUB où se trouve le fichier menu.
GRUB existe en fait en deux versions : en tant que gestionnaire
d'amorçage, et en tant que programme Linux normal dans
/usr/sbin/grub. Ce programme sera désigné par le
terme interpréteur de commandes (shell)
GRUB. La fonctionnalité permettant d'installer GRUB comme
chargeur d'amorçage sur un disque dur ou sur une disquette est intégrée
dans GRUB par le biais des commandes install et
setup. Elle est donc disponible dans l'interpréteur de
commandes GRUB lorsque Linux est chargé.
Toutefois, les commandes setup et
install sont également disponibles pendant la
procédure d'amorçage avant que Linux ne soit amorcé. Ceci facilite le
sauvetage d'un système défectueux qui ne peut plus être amorcé, étant
donné que le fichier de configuration défectueux du chargeur d'amorçage
peut être évité en saisissant manuellement les paramètres. La saisie
manuelle des paramètres au moment de l'amorçage est également
intéressante pour tester les nouvelles configurations sans affecter le système
original. Saisissez simplement les commandes de
configuration expérimentales avec la même syntaxe que dans
menu.lst. Testez ensuite le bon fonctionnement de ce
réglage sans modifier le fichier de configuration existant. Si vous
souhaitez, par exemple, tester un nouveau noyau, saisissez la commande
kernel avec le chemin d'accès au nouveau noyau. Si la
procédure d'amorçage échoue, vous reprendrez la prochaine procédure
d'amorçage avec le fichier menu.lst intact. De la
même façon, l'interface en ligne de commande peut aussi servir à amorcer
le système malgré un fichier menu.lst défectueux
en saisissant les paramètres corrigés. Une fois que le système
fonctionne, vous pouvez corriger ces paramètres dans
menu.lst pour rendre système amorçable de façon
permanente.
L'algorithme de correspondance entre les périphériques de GRUB et les
noms de périphériques de Linux n'entre en jeu que lorsque l'interpréteur
de commandes GRUB est utilisé en tant que programme Linux (lancé avec la
commande grub comme expliqué dans
Section 8.3.2, « Le fichier device.map »). Pour ce faire, le programme lit le fichier
device.map. Pour de plus amples informations, voir
Section 8.3.2, « Le fichier device.map ».
GRUB prend déjà en charge au moment du démarrage l'accès aux systèmes de fichiers. Les utilisateurs sans droit de super-utilisateur peuvent accéder à des fichiers de votre système Linux auxquels ils n'auraient pas accès une fois le système démarré. Configurez un mot de passe pour bloquer ce genre d'accès ou pour interdire aux utilisateurs d'amorcer certains systèmes d'exploitation.
Pour mettre en place un mot de passe de démarrage, procédez, en tant
qu'utilisateur root, comme décrit ici :
Saisissez la commande grub à l'invite de super-utilisateur.
Chiffrez le mot de passe dans l'interpréteur de commandes de GRUB :
grub> md5crypt Password: **** Encrypted: $1$lS2dv/$JOYcdxIn7CJk9xShzzJVw/
Ajoutez la valeur chiffrée dans la section globale du fichier
menu.lst :
gfxmenu (hd0,4)/message
color white/blue black/light-gray
default 0
timeout 8
password --md5 $1$lS2dv/$JOYcdxIn7CJk9xShzzJVw/
L'exécution de commandes de GRUB depuis l'invite d'amorçage est protégée. Cette possibilité n'est à nouveau autorisée qu'après avoir saisi p ainsi que le mot de passe. Le démarrage d'un système d'exploitation à partir du menu de démarrage reste possible pour tous les utilisateurs.
Pour empêcher le démarrage d'un ou de plusieurs systèmes d'exploitation
à partir du menu d'amorçage, ajoutez la ligne lock
dans le fichier menu.lst pour chaque section ne
devant pas être démarrée sans mot de passe. Par exemple :
title linux kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 initrd (hd0,4)/initrd lock
Après avoir redémarré le système et choisi Linux dans le menu d'amorçage, le message d'erreur suivant apparaît :
Error 32: Must be authenticated
Appuyez sur Enter pour arriver au menu, puis sur p pour accéder à l'invite de mot de passe. Après avoir saisi le mot de passe et appuyé sur Enter, le système d'exploitation désiré (dans ce cas Linux) est amorcé automatiquement.
![]() | Mot de passe d'amorçage et écran de démarrage (splash screen) |
|---|---|
Si vous utilisez un mot de passe d'amorçage pour GRUB, vous ne disposez pas de l'écran de démarrage habituel. | |