Installation et configuration de GRUB

09/02/2000

Florian Hatat


Cette page vous fera découvrir ce formidable gestionnaire d'amorçage qu'est GRUB. Elle décrit les aspects nécessaires à une installation et à une utilisation simple. D'autres documents sont disponibles, comme le manuel et le HOWTO de Thierry Laronde. Rien ne sera donc vraiment expliqué en détail ici.

L'utilisation de ce document se fait à vos risques et périls. Même s'il est souvent propable que tout ce passe correctement, un problème peut toujours survenir. Agissez donc avec précaution, faites quelques sauvegardes.


1. Ce qu'il faut savoir pour utiliser GRUB

1.1. La notation des disques et des partitions

GRUB possède sa propre manière de noter les disques et les partitions. Commençons par le nommage des disques.

Les disques durs sont représentés sous la forme (hdn) où n représente le numéro du disque. C'est bien gentil tout cela, mais comment sont attribués les numéros de disques ? La réponse : dans leur ordre de détection. Le compteur de disques de GRUB commence à zéro. Le premier disque dur aura donc le numéro 0, le deuxième 1, etc. GRUB ne fait aucune distinction entre les disques IDE et SCSI puisqu'il passe par le BIOS qui lui non plus ne les différencie pas. Les disques IDE se situent généralement avant les disques SCSI, mais ce n'est pas le cas si le SCSI précède l'IDE dans la séquence de démarrage du BIOS.

Par exemple, si vous possédez deux disques durs IDE et un disque dur SCSI, cela pourrait donner :

(hd0) Premier disque SCSI
(hd1) Premier disque IDE
(hd2) Second disque IDE

L'exemple précédent est le plus courant, mais cela pourrait très bien être :

(hd0) Premier disque SCSI
(hd1) Premier disque IDE
(hd2) Second disque IDE

Le lecteur de disquette est désigné, lui, par (fd0). Voyons maintenant pour les partitions.

Les partitions sont nommées sous la forme (hdn,p) où hdn est le disque dur et p le numéro de partition, simple ! Les partitions principales sont numérotées de 0 à 3, les partitions étendues à partir de 4. Par exemple, votre partition hda2 sous Linux sera désignée (hd0,1) sous GRUB. En effet, Linux numérote les partitions à partir de 1 et GRUB à partir de 0.

1.2. Interfaces de GRUB

GRUB dispose de deux interfaces au démarrage. La première est une ligne de commandes toute simple, semblable à votre shell. Quelques uns de ses comportements sont hérités de BASH. Elle s'affiche si GRUB ne trouve pas de fichier de configuration, mais elle est aussi accessible à n'importe quel moment grâce à la touche c. Voici à quoi elle ressemble :

    GRUB  version 0.5.96.1  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename. ]

grub>

Cette ligne de commande vous permet d'exécuter n'importe quelle action au démarrage, ce qui est bien utile dans certains cas.

GRUB dispose aussi d'un menu qui vous permet de choisir le système à démarrer. Les entrées de ce menu sont définies dans le fichier de configuration /boot/grub/menu.lst. Ce fichier contient les mêmes commandes que celles disponible dans la ligne de commandes, mais avec deux différences principales : la commande boot est sous-entendue dans le fichier de configuration, et chaque entrée du fichier de configuration est introduite par la commande title.

2. Téléchargement de GRUB

Si vous ne l'avez pas déjà fait, récupérez les dernières sources de GRUB depuis le serveur CVS :

# cvs -d :pserver:anoncvs@subversions.gnu.org:/cvsroot/grub login
# cvs -d :pserver:anoncvs@subversions.gnu.org:/cvsroot/grub co grub

Cette commande téléchargera les dernières sources de GRUB depuis le serveur CVS et les placera dans un répertoire grub/.

Une fois que vous avez obtenu les sources, décompressez-les, puis compilez et installez GRUB en suivant les instructions du fichier INSTALL. Pour plus d'informations sur la compilation, consultez le manuel de GRUB.

3. Installation de GRUB sur disquette

Une fois GRUB compilé et installé correctement, copiez les fichiers stage1, stage2 et *stage1.5, qui se trouvent normalement dans /usr/share/grub/i386-pc/, vers le répertoire /boot/grub/ :

# mkdir /boot/grub
# cd /usr/share/grub/i386-pc
# cp stage1 stage2 *stage1.5 /boot/grub/

Vous devez être root pour exécuter ces actions.

Mettez une disquette vierge (toute donnée sera effacée) dans le lecteur. Nous allons la formater, copier les images de GRUB et l'installer :

# mkfs.ext2 /dev/fd0
(...)
# mount -t ext2 /dev/fd0 /mnt/floppy
# mkdir /mnt/floppy/boot
# mkdir /mnt/floppy/boot/grub
# cp /boot/grub/* /mnt/floppy/boot/grub
# umount /mnt/floppy
# grub
Probing devices to guess BIOS drives. This may take a long time.

    GRUB  version 0.5.96.1  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename. ]

grub> root (fd0)
 Filesystem type is ext2fs, using whole disk

grub> setup (fd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Running "install /boot/grub/stage1 d (fd0) /boot/grub/stage2 p /boot/grub/menu
.lst"... succeeded
Done.

grub> quit
#

Voilà ! GRUB est installé sur votre disquette ! Vous pouvez la retirer pour le moment, elle nous servira plus tard. Notez que vous pouvez la conserver comme disquette de dépannage.

4. Configuration de GRUB

GRUB possède un fichier de configuration lu à chaque démarrage, ce qui signifie donc qu'à chaque modification, il est inutile de réinstaller GRUB, contrairement à LILO.

C'est ce fichier de configuration qui définit les entrées du menu de GRUB, en leur donnant un nom et en prédéfinissant les commandes à exécuter. Ce fichier s'appelle /boot/grub/menu.lst. Modifiez-le avec votre éditeur de textes préféré (pas de mise en forme !). Comme dans beaucoup de fichiers de configuration, les commentaires sont préfixés du caractère #, et sont simplement ignorés. Ajoutez le texte ci-dessous, en l'adaptant à votre configuration :

timeout 10    # Indique qu'il faut démarrer sur l'entrée
              # par défaut au bout de 10 secondes

default 0     # Numéro de l'entrée par défaut

# Voici l'entrée 0
title GNU/Linux                 # Titre qui apparaîtra au démarrage
root (hdx,x)                    # Adaptez selon votre partition racine
kernel /boot/vmlinuz-qqchose root=/dev/hdxx read-only
          # Adaptez selon le nom de l'image du noyau et selon votre partition
          # racine (attention, ici il faut utiliser la notation de Linux
          # puisque l'argument est destiné au noyau !).

# L'entrée 1
title Windows
root (hdx,x)                    # Adaptez la partition racine
makeactive
chainloader +1

# L'entrée 2 pour le GNU/Hurd
title GNU/Hurd
root (hdx,x)                    # Adaptez la partition racine
kernel /boot/gnumach root=hdxsx
module /boot/serverboot

Vous pouvez bien sûr ne pas entrer certaines sections si vous ne possédez pas par exemple Windows ou le GNU/Hurd. La commande root de GRUB indique le disque/la partition où réside l'image du noyau à charger. Si l'image de Linux était installée sur hda3, vous écririez root (hd0,2).

Adaptez aussi le nom de l'image de votre noyau Linux à la commande kernel. Profitez de la touche TAB qui permet de compléter le nom de fichier/partition s'il est unique, ou d'afficher les différentes possibilités, s'il y en a plusieurs.

Sauvez ce chef-d'œuvre et quittez votre éditeur.

5. Enfin, l'installation sur disque dur

Avant de vous lancez, vous devez vérifier certaines choses. Il faut d'abord savoir sur quelle partition se trouve le répertoire /boot. Pour cela, la commande mount peut vous aider :

# mount
/dev/hda6 on / type ext2 (rw)
none on /proc type proc (rw)
/dev/hdb2 on /usr type ext2 (rw)
/dev/hda1 on /boot type ext2 (rw)

Chez moi, /boot est sur une partition dédiée, comme l'indique la dernière ligne, la partition est donc /dev/hda1, ce qui fait (hd0,0) pour GRUB. Dans l'exemple suivant, /boot appartient à la partition racine :

# mount
/dev/hda2 on / type ext2 (rw)
none on /proc type proc (rw)
/dev/hdb5 on /usr type ext2 (rw)

La partition à retenir est donc cette fois-ci (hd0,1).

Redémarrez ensuite votre machine avec la disquette de démarrage de GRUB. Si tout se passe bien, la ligne de commandes apparaît. Vous pouver alors entrer (hd0,0 est la partition cherchée plus haut) :

grub> root (hd0,0)
      
 Filesystem type is ext2fs, partition type 0x83

grub> setup (hd0)
      
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Running "install /boot/grub/stage1 d (hd0) /boot/grub/stage2 p /boot/grub/menu
.lst"... succeeded
Done.

grub>

Comme il est courant d'avoir une partition de démarrage /boot, la commande setup prend en charge ce cas de figure :

grub> root (hd0,0)
      
 Filesystem type is ext2fs, partition type 0x83

grub> setup (hd0)
      
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Running "install /grub/stage1 d (hd0) /grub/stage2 p /grub/menu.lst"...
succeeded
Done.

grub>

Et voilà ! GRUB est installé sur votre disque dur ! Redémarrez votre machine sans la disquette et le menu de GRUB devrait s'afficher (souvenez-vous du fichier de configuration écrit un peu plus tôt).

Tout fonctionne ? Félicitations !

6. Le mot de la fin

6.1. FAQ

La FAQ (Questions fréquemment posées) fait partie du Manuel de GRUB, dont la traduction est disponible sur ce site.

6.2. En cas de problème

Avant toute chose, lisez le Manuel, qui est beaucoup plus détaillé que cette page, la FAQ et les autres pages parlant de GNU GRUB sur le Web. Je veux bien répondre à certaines questions sauf si elles sont déjà traitées dans ces documents.

Si vous pensez avoir trouvé un bug, suivez les instructions du chapitre "Signaler des bugs" du Manuel de GRUB.