9.2. Amorçage à l'aide de GRUB

GRUB (Grand Unified Bootloader) comprend deux niveaux (stages). Le premier (stage1) comporte 512 octets ; sa seule tâche consiste à charger le deuxième niveau du chargeur d'amorçage. Ensuite, le programme charge le niveau 2 (stage2). Ce niveau correspond à la partie principale du chargeur d'amorçage.

Dans certaines configurations, un niveau intermédiaire (stage1.5) peut être utilisé : il repère le niveau 2 et le charge à partir d'un système de fichiers approprié. Si possible, cette méthode est sélectionnée par défaut à l'installation ou lors de la configuration initiale de GRUB avec YaST.

Le niveau stage2 permet d'accéder à de nombreux systèmes de fichiers. Actuellement, Ext2, Ext3, ReiserFS, Minix et le système de fichiers DOS FAT utilisé par Windows sont pris en charge. Dans une certaine mesure, JFS, XFS, et UFS et FFS (utilisés par les systèmes BSD) sont également pris en charge. Depuis la version 0.95, GRUB est également capable d'effectuer un amorçage à partir d'un CD ou d'un DVD contenant un système de fichiers ISO 9660, conforme à la spécification « El Torito ». Avant même l'amorçage du système, GRUB peut accéder aux systèmes de fichiers des lecteurs de disque BIOS pris en charge (disquettes ou disques durs, et lecteurs de CD et de DVD détectés par le BIOS). Il est donc inutile de réinstaller le gestionnaire d'amorçage si vous modifiez le fichier de configuration GRUB (menu.lst). Lors de l'amorçage du système, GRUB recharge le fichier de menu contenant les chemins (et les données de partition) valides du kernel ou du disque virtuel initial (initrd), puis il repère ces fichiers.

La configuration proprement dite de GRUB repose sur les trois fichiers suivants :

/boot/grub/menu.lst

Ce fichier contient toutes les informations relatives aux partitions ou aux systèmes d'exploitation qui peuvent être amorcés avec GRUB. Sans ces informations, la ligne de commande GRUB indique à l'utilisateur comment continuer (pour plus d'informations, reportez-vous à Section 9.2.1.3, « Modification des entrées de menu au cours de la procédure d'amorçage »).

/boot/grub/device.map

Ce fichier traduit les noms de périphérique écrits en notation GRUB et BIOS en noms de périphérique Linux.

/etc/grub.conf

Ce fichier contient les commandes, paramètres et options dont le shell GRUB a besoin pour installer correctement le chargeur d'amorçage.

Vous contrôlez GRUB de différentes manières. Vous sélectionnez les entrées d'amorçage d'une configuration existante depuis le menu graphique de l'écran de démarrage. La configuration est chargée à partir du fichier menu.lst.

GRUB permet de modifier tous les paramètres d'amorçage avant de lancer l'amorçage. Vous pouvez ainsi corriger les erreurs commises lors de la modification du fichier de menu, par exemple. Les commandes d'amorçage peuvent également être entrées de manière interactive, à l'aide d'une sorte d'invite de saisie (reportez-vous à Section 9.2.1.3, « Modification des entrées de menu au cours de la procédure d'amorçage »). GRUB permet aussi de déterminer l'emplacement du kernel et du fichier initrd avant de lancer l'amorçage. Ainsi, vous pouvez même amorcer un système d'exploitation installé qui ne figure pas dans la configuration du chargeur d'amorçage.

GRUB est en fait disponible en deux versions : en tant que chargeur d'amorçage et en tant que programme Linux standard dans /usr/sbin/grub. Ce programme est appelé shell GRUB. Il fournit une fonction d'émulation de GRUB dans le système installé, que vous pouvez utiliser pour installer GRUB ou pour tester de nouveaux paramètres avant de les appliquer. La fonctionnalité qui permet d'installer GRUB en tant que chargeur d'amorçage sur un disque dur ou une disquette est intégrée à GRUB, et inclut les commandes install et setup. Elle est disponible dans le shell GRUB une fois Linux chargé.

9.2.1. Menu d'amorçage GRUB

L'écran graphique de démarrage où figure le menu d'amorçage repose sur le fichier de configuration de GRUB, /boot/grub/menu.lst ; ce dernier contient toutes les informations relatives aux partitions ou systèmes d'exploitation qui peuvent être amorcés à partir du menu.

À chaque amorçage du système, GRUB charge le fichier de menu depuis le système de fichiers. Il est donc inutile de réinstaller GRUB après chaque modification de ce fichier. Utilisez le chargeur d'amorçage YaST pour modifier la configuration de GRUB, comme le décrit à la Section 9.3, « Configuration du chargeur d'amorçage à l'aide de YaST ».

Le fichier de menu contient des commandes. Leur syntaxe est très simple. Chaque ligne contient une commande suivie de paramètres facultatifs séparés par un espace, comme dans le shell. Pour des raisons historiques, certaines commandes autorisent l'ajout du signe = avant le premier paramètre. Les commentaires sont introduits par le signe dièse (#).

Pour identifier les éléments de menu dans l'aperçu du menu, attribuez un titre (title) à chaque entrée. Le texte (espaces compris) qui suit le mot-clé title apparaît dans le menu sous forme d'option à sélectionner. Toutes les commandes incluses avant l'argument de titre (title) suivant sont exécutées lors de la sélection de l'élément de menu correspondant.

Le cas le plus simple est la redirection vers des chargeurs d'amorçage d'autres systèmes d'exploitation. La commande est chainloader et l'argument est généralement le bloc d'amorçage d'une autre partition, exprimé dans la notation de blocs GRUB. Par exemple :

chainloader (hd0,3)+1

Les noms de périphérique dans GRUB sont présentés à Section 9.2.1.1, « Conventions d'assignation de nom pour les disques durs et les partitions ». Cet exemple désigne le premier bloc de la quatrième partition du premier disque dur.

Utilisez la commande kernel pour spécifier une image de kernel. Le premier argument est le chemin de l'image de kernel dans une partition. Les autres arguments sont transmis au kernel sur la ligne de commande.

Si le kernel ne comporte pas les pilotes intégrés nécessaires pour accéder à la partition racine ou si vous utilisez un système Linux récent comportant des fonctionnalités d'enfichage à chaud plus avancées, vous devez spécifier le fichier initrd via une commande GRUB distincte, dont l'unique argument est le chemin du fichier initrd. Comme l'adresse de chargement du fichier initrd est écrite dans l'image de kernel chargée, la commande initrd doit suivre immédiatement la commande kernel.

La commande root simplifie la spécification des fichiers de kernel et du fichier initrd. Le seul argument de la commande root est un périphérique ou une partition. Ce périphérique est utilisé pour les chemins du fichier initrd, du fichier de kernel et de tout autre fichier pour lequel aucun périphérique n'est spécifié de manière explicite, jusqu'à la commande root suivante.

La commande boot est incluse de manière implicite à la fin de chaque entrée de menu ; par conséquent, il est inutile de l'ajouter dans le fichier de menu. Toutefois, si vous utilisez GRUB de manière interactive pour l'amorçage, vous devez ajouter la commande boot à la fin. Cette commande ne comporte aucun argument. Elle amorce simplement l'image de kernel chargée ou le chargeur chaîné indiqué.

Après avoir écrit toutes les entrées de menu, définissez l'une d'elles comme entrée par défaut (default). Sinon, le système utilise la première entrée (entrée 0). Vous pouvez également préciser le timeout (en seconde) au bout duquel l'entrée par défaut doit être amorcée. Les entrées timeout et default précèdent généralement les entrées de menu. Un fichier d'exemple est fourni à Section 9.2.1.2, « Exemple de fichier de menu ».

9.2.1.1. Conventions d'assignation de nom pour les disques durs et les partitions

Les conventions d'assignation de nom utilisées par GRUB pour les disques durs et les partitions sont différentes de celles employées pour les périphériques Linux standard. Dans GRUB, la numérotation des partitions commence à zéro. Par conséquent, (hd0,0) désigne la première partition du premier disque dur. Sur un ordinateur de bureau standard doté d'un disque dur connecté en tant que maître primaire, le nom Linux du même périphérique est /dev/hda1.

Les quatre partitions primaires possibles portent les numéros de partition 0 à 3. Les partitions logiques sont numérotées à partir de 4 :

 
(hd0,0)   première partition primaire du premier disque dur 
(hd0,1)   deuxième partition primaire 
(hd0,2)   troisième partition primaire 
(hd0,3)   quatrième partition primaire (généralement, une partition étendue) 
(hd0,4)   première partition logique 
(hd0,5)   deuxième partition logique 

Dépendant des périphériques BIOS, GRUB ne fait aucune distinction entre les périphériques IDE, SATA, SCSI et les périphériques matériels RAID. Tous les disques durs reconnus par le BIOS (ou autres contrôleurs) sont numérotés en fonction de la séquence d'amorçage prédéfinie dans le BIOS.

Il est toutefois rarement possible d'assigner correctement les noms de périphérique Linux aux noms de périphérique BIOS. Il génère cette assignation à l'aide d'un algorithme et l'enregistre dans le fichier device.map, que vous pouvez modifier si nécessaire. Pour obtenir des informations sur le fichier device.map, reportez-vous à la Section 9.2.2, « Fichier device.map ».

Un chemin GRUB complet est composé d'un nom de périphérique entre parenthèses, avec le chemin du fichier tel qu'il est défini dans le système de fichiers de la partition indiquée. Le chemin commence par une barre oblique. Par exemple, le kernel amorçable sera spécifié de la manière suivante sur un système avec un seul disque dur IDE où Linux est installé dans la première partition :

(hd0,0)/boot/vmlinuz

9.2.1.2. Exemple de fichier de menu

L'exemple suivant illustre la structure d'un fichier de menu GRUB. Dans notre exemple, l'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 floppy
   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 définit la configuration de l'écran de démarrage :

gfxmenu (hd0,4)/message

L'image d'arrière-plan message se trouve dans /dev/hda5.

color white/blue black/light-gray

Modèle de couleurs : blanc (premier plan), bleu (arrière-plan), noir (sélection) et gris clair (arrière-plan de la sélection). Le modèle de couleurs ne s'applique pas à l'écran de démarrage, mais uniquement au menu GRUB personnalisable ; pour accéder à ce dernier, quittez l'écran de démarrage à l'aide de la touche Échap.

default 0

La première entrée de menu title linux est celle à amorcer par défaut.

timeout 8

Au bout de huit secondes sans saisie de la part de l'utilisateur, GRUB amorce automatiquement l'entrée par défaut. Pour désactiver l'amorçage automatique, supprimez la ligne timeout. Si vous entrez timeout 0, GRUB amorce immédiatement l'entrée par défaut.

Le second bloc (le plus volumineux) répertorie les différents systèmes d'exploitation amorçables. Les sections de chaque système d'exploitation commencent par title.

  • La première entrée (title linux) contrôle l'amorçage de SUSE Linux. Le kernel (vmlinuz) se trouve dans la première partition logique (partition d'amorçage) du premier disque dur. Les paramètres de kernel, comme la partition racine et le mode VGA, sont ajoutés à la fin de cette ligne. La partition racine est spécifiée en utilisant la convention d'assignation de nom Linux (/dev/hda7/), car ces informations sont lues par le kernel et ne concernent pas GRUB. Le fichier initrd se trouve également dans la première partition logique du premier disque dur.

  • La deuxième entrée concerne le chargement de Windows. Windows est amorcé à partir de la première partition du premier disque dur (hd0,0). La commande chainloader +1 ordonne à GRUB de lire et d'exécuter le premier secteur de la partition indiquée.

  • L'entrée suivante permet l'amorçage à partir d'une disquette, sans modification des paramètres du BIOS.

  • L'option d'amorçage failsafe lance Linux avec un ensemble de paramètres de kernel permettant l'amorçage de Linux même sur des systèmes problématiques.

Vous pouvez modifier le fichier de menu chaque fois que cela s'avère nécessaire. Lors de l'amorçage suivant, GRUB utilise les paramètres modifiés. Pour modifier définitivement le fichier, utilisez YaST ou l'éditeur de votre choix. Vous pouvez aussi appliquer de manière interactive des modifications temporaires, via la fonction de modification de GRUB. Reportez-vous à Section 9.2.1.3, « Modification des entrées de menu au cours de la procédure d'amorçage ».

9.2.1.3. Modification des entrées de menu au cours de la procédure d'amorçage

Dans le menu graphique d'amorçage, sélectionnez le système d'exploitation à amorcer, à l'aide des touches fléchées. Si vous sélectionnez un système Linux, vous pouvez entrer des paramètres d'amorçage supplémentaires à l'invite d'amorçage. Pour modifier directement des entrées de menu précises, appuyez sur Échap pour quitter l'écran de démarrage et accéder au menu texte de GRUB, puis appuyez sur E. Les modifications effectuées ainsi ne s'appliquent qu'à l'amorçage actuel et ne sont pas définitives.

[Important]disposition du clavier au cours de la procédure d'amorçage

Seul le clavier américain est disponible lors de la procédure d'amorçage.

La modification des entrées de menu facilite le dépannage d'un système défectueux qui ne peut plus être amorcé ; en effet, vous pouvez résoudre le problème posé par le fichier de configuration du chargeur d'amorçage en entrant les paramètres manuellement. La saisie manuelle des paramètres au cours de la procédure d'amorçage s'avère également utile pour tester de nouveaux paramètres sans risquer de détériorer le système natif.

Une fois le mode de modification activé, utilisez les touches fléchées pour sélectionner l'entrée de menu dont vous souhaitez modifier la configuration. Pour pouvoir modifier la configuration, appuyez à nouveau sur la touche E. Procédez ainsi pour modifier les partitions ou les spécifications de chemin incorrectes, avant qu'elles aient une incidence néfaste sur le processus d'amorçage. Appuyez sur Entrée pour quitter le mode de modification et revenir au menu. Appuyez ensuite sur B pour amorcer cette entrée. Les autres actions possibles sont affichées dans le texte d'aide, au bas de la page.

Pour modifier définitivement des options d'amorçage et les transmettre au kernel, ouvrez le fichier menu.lst en tant qu'utilisateur root, puis ajoutez à la ligne existante les paramètres de kernel voulus, séparés par des espaces :

title linux
   kernel (hd0,0)/vmlinuz root=/dev/hda3 additional parameter
   initrd (hd0,0)/initrd
    

GRUB adopte automatiquement les nouveaux paramètres lors de l'amorçage suivant du système. Vous pouvez également apporter ces modifications à l'aide du module de chargeur d'amorçage YaST. Ajoutez les nouveaux paramètres à la ligne existante, en les séparant par des espaces.

9.2.2. Fichier device.map

Le fichier device.map assigne des noms de périphérique GRUB et BIOS à des noms de périphérique Linux. Dans un système mixte comprenant à la fois des disques durs IDE et SCSI, GRUB doit tenter de déterminer la séquence d'amorçage à l'aide d'une procédure spéciale, car il n'a pas systématiquement accès aux informations du BIOS concernant cette séquence. GRUB enregistre le résultat de cette analyse dans le fichier /boot/grub/device.map. Dans le cas d'un système où la séquence d'amorçage du BIOS est paramétrée sur « IDE avant SCSI », le fichier device.map peut apparaître sous la forme suivante :

(fd0)  /dev/fd0
(hd0)  /dev/hda
(hd1)  /dev/sda
   

Étant donné que l'ordre « IDE, SCSI, puis autres disques durs » dépend de divers facteurs et que Linux est incapable d'identifier l'assignation effectuée, vous pouvez définir manuellement la séquence dans le fichier device.map. Si vous rencontrez des problèmes lors de l'amorçage, vérifiez que la séquence figurant dans ce fichier correspond à celle du BIOS et, si tel n'est pas le cas, utilisez l'invite GRUB pour modifier temporairement cette séquence. Une fois le système Linux amorcé, vous pouvez modifier définitivement le fichier device.map à l'aide du module de chargeur d'amorçage YaST ou de l'éditeur de votre choix.

[Important]disques SATA

En fonction du contrôleur utilisé, les disques SATA sont reconnus soit comme des périphériques IDE (/dev/hdx), soit comme des périphériques SCSI (/dev/sdx).

Après avoir modifié manuellement le fichier device.map, exécutez la commande suivante pour réinstaller GRUB. Cette commande provoque le rechargement du fichier device.map et l'exécution des commandes répertoriées dans grub.conf :

grub --batch < /etc/grub.conf

9.2.3. Fichier /etc/grub.conf

Un troisième fichier de configuration GRUB important vient s'ajouter à menu.lst et device.map : /etc/grub.conf. Ce fichier contient les commandes, paramètres et options dont le shell GRUB a besoin pour installer correctement le chargeur d'amorçage :

root (hd0,4)
   install /grub/stage1 (hd0,3) /grub/stage2 0x8000 (hd0,4)/grub/menu.lst
   quit
   

Signification de chaque entrée :

root (hd0,4)

Cette commande demande à GRUB d'appliquer les commandes suivantes à la première partition logique du premier disque dur (emplacement des fichiers d'amorçage).

install parameter

Vous devez exécuter la commande grub avec le paramètre install. Le niveau stage1 du chargeur d'amorçage doit être installé dans le conteneur de partition étendue (/grub/stage1 (hd0,3)). Le niveau stage2 doit être chargé vers l'adresse mémoire 0x8000 (/grub/stage2 0x8000). La dernière entrée ((hd0,4)/grub/menu.lst) indique à GRUB où rechercher le fichier de menu.

9.2.4. Définition d'un mot de passe d'amorçage

Même avant l'amorçage du système d'exploitation, GRUB permet d'accéder à des systèmes de fichiers. Les utilisateurs sans autorisation racine (root) peuvent ainsi accéder à des fichiers de votre système Linux, auxquels ils n'ont plus accès une fois le système amorcé. Pour bloquer ce type d'accès ou empêcher les utilisateurs d'amorcer certains systèmes d'exploitation, définissez un mot de passe d'amorçage.

[Important]mot de passe d'amorçage et écran de démarrage

Si vous utilisez un mot de passe d'amorçage pour GRUB, l'écran de démarrage habituel n'apparaît pas.

En tant qu'utilisateur root, définissez le mot de passe d'amorçage de la manière suivante :

  1. À l'invite « root », entrez la commande grub.

  2. Codez le mot de passe dans le shell GRUB :

    grub> md5crypt 
    Mot de passe : **** 
    Version codée : $1$lS2dv/$JOYcdxIn7CJk9xShzzJVw/
  3. Collez la chaîne codée dans la section « global » du fichier menu.lst :

    gfxmenu (hd0,4)/message
    color white/blue black/light-gray
    default 0
    timeout 8
    password --md5 $1$lS2dv/$JOYcdxIn7CJk9xShzzJVw/
         

    Les commandes GRUB ne peuvent désormais être exécutées qu'à l'invite d'amorçage, après avoir appuyé sur P et saisi le mot de passe. Cependant, les utilisateurs peuvent toujours amorcer tous les systèmes d'exploitation à partir du menu d'amorçage.

  4. Pour empêcher les utilisateurs d'amorcer un ou plusieurs systèmes d'exploitation à partir du menu d'amorçage, ajoutez l'entrée lock à chaque section du fichier menu.lst, afin que l'amorçage ne soit possible qu'après saisie d'un mot de passe. Par exemple :

    title linux
       kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791
       initrd (hd0,4)/initrd
       lock
         

    Si vous réamorcez le système et sélectionnez l'entrée Linux dans le menu d'amorçage, le message d'erreur suivant apparaît :

    Error 32: Must be authenticated (vous devez vous authentifier)

    Appuyez sur Entrée pour entrer dans le menu. Appuyez ensuite sur P pour obtenir une invite de saisie de mot de passe. Une fois que vous avez saisi le mot de passe et appuyé sur Entrée, le système d'exploitation sélectionné (Linux, ici) doit s'amorcer.