8.3. Amorcer avec GRUB

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 »).

8.3.1. Le menu de démarrage 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 ».

8.3.1.1. Conventions de nom pour disques durs et partitions

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

8.3.1.2. Exemple d'un fichier de menu

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 :

gfxmenu (hd0,4)/message

L'image de fond se trouve dans /dev/hda5 et porte le nom de message

color white/blue black/light-gray

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.

default 0

Le premier élément du menu avec title linux correspond à l'amorçage par défaut.

timeout 8

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 ».

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.

[Important]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.

8.3.1.4. Utilisation de caractères joker pour sélectionner le noyau d'amorçage

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.

8.3.2. Le fichier device.map

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
   

8.3.3. Le fichier /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 :

root (hd0,4)

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.

install 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.

8.3.4. L'interpréteur de commandes de GRUB

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 ».

8.3.5. Créer un mot de passe d'amorçage

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 :

  1. Saisissez la commande grub à l'invite de super-utilisateur.

  2. Chiffrez le mot de passe dans l'interpréteur de commandes de GRUB :

    grub> md5crypt 
    Password: **** 
    Encrypted: $1$lS2dv/$JOYcdxIn7CJk9xShzzJVw/
  3. 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.

  4. 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.

[Important]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.


SUSE LINUX Guide de l'administrateur 9.2