4.8. Amorçage du système et configuration multiboot

Lorsque vous aurez installé votre système de base, vous devrez faire en sorte qu'il puisse démarrer. Pour cela, il existe plusieurs possibilités, les principales étant les deux suivantes :

Il va de soi que c'est la deuxième solution qui est recommandée. Cependant, la première solution pourra être utile si d'aventure votre MBR se trouvait être écrasé ou endommagé. Seule l'utilisation des gestionnaires d'amorçage de Linux et de Windows NT/2000 et XP sera décrite ici.

Le gestionnaire d'amorçage le plus utilisé sous Linux se nomme « LILO » (pour « LInux LOader »). LILO permet de démarrer un grand nombre de systèmes, dont DOS, Windows 95/98/Millenium, Windows NT/2000/XP et OS/2. Linux dispose également d'un autre gestionnaire d'amorçage également très performant : le « GRUB » (abréviation de l'anglais « GRand Unified Bootloader »). Vous êtes libre de choisir celui que vous voulez. Le GRUB est quelque peu plus moderne que LILO, mais le choix du gestionnaire d'amorçage est ici une question de goût. Windows NT, Windows 2000 et Windows XP disposent également d'un gestionnaire d'amorçage nommé « NTLDR », capable de démarrer d'autres systèmes d'exploitation. Vous aurez donc également la possibilité d'utiliser ce gestionnaire à la place de LILO ou du GRUB si un de ces systèmes est installé sur votre machine.

Quel que soit le gestionnaire d'amorçage que vous désirez utiliser, il vous faudra activer la partition sur laquelle il est installé. Cette opération peut être réalisée à l'aide de l'utilitaire fdisk et a déjà été décrite dans la Section 4.4. Cela permettra au bootstrap loader de sélectionner le secteur de boot de cette partition et de lancer le gestionnaire d'amorçage qui y est installé. Bien entendu, cela suppose que ce gestionnaire soit installé sur cette partition, ce qui est normalement le cas (rappelons qu'il n'est en général pas conseillé d'installer le gestionnaire d'amorçage directement sur le MBR du disque dur).

4.8.1. Réalisation d'un multiboot avec LILO

LILO est un gestionnaire d'amorçage extrêmement performant, puisqu'il permet de démarrer Linux comme tout autre système d'exploitation très simplement, en donnant le nom du système à lancer lors de l'amorçage. Il est bien entendu possible de lancer un système par défaut, et de donner un temps d'attente avant de choisir ce système si l'utilisateur n'intervient pas.

LILO est constitué de deux parties. La première partie peut s'installer sur le secteur d'amorçage principal du disque dur ou sur le secteur de boot de n'importe quelle partition. Comme on l'a déjà indiqué plus haut, il est fortement recommandé d'installer cette partie de LILO sur le secteur de boot de la partition racine de Linux, afin d'éviter qu'elle ne soit écrasée par le DOS ou par une quelconque version de Windows installée ultérieurement. La deuxième partie de LILO est enregistrée directement dans la partition Linux. Elle contient les informations nécessaires pour pouvoir charger les différents systèmes d'exploitation gérés. Bien entendu, la première partie est capable de retrouver directement la deuxième sur le disque dur de manière autonome car, lors de l'amorçage, les systèmes de fichiers de Linux ne sont pas encore chargés.

LILO utilise le fichier de configuration /etc/lilo.conf pour y retrouver tous ses paramètres de configuration. Ce fichier contient la description des différents systèmes d'exploitation que LILO doit proposer au démarrage. Vous pourrez consulter ce fichier avec un des nombreux éditeurs de fichiers texte présents sur toute installation de Linux. Toutefois, si vous installez Linux pour la première fois, il est possible que vous n'en connaissiez aucun et que vous soyez un peu perdu. Cela est normal, et dans ce cas je vous recommande de vous familiariser un peu avec le système et l'environnement utilisateur avant de vous lancer dans l'édition de ce fichier. Il existe bon nombre d'éditeurs graphiques ou en mode texte et il est hors de question de tous les décrire ici. Toutefois, toutes les distributions Linux installent un éditeur historique, j'ai nommé l'affreux « vi ». Cet éditeur n'est pas du tout convivial pour les nouveaux utilisateurs, mais il dépannera toujours quand tous les autres seront inutilisables ou inaccessibles. En fait, on finit même par l'apprécier à l'usage... La manière d'utiliser vi sera décrite ultérieurement, dans le chapitre donnant les notions de base d'Unix à la Section 5.8. Vous devriez donc jeter un coup d'½il à cette section si vous désirez modifier immédiatement le fichier /etc/lilo.conf, ou revenir ultérieurement à la présente section une fois que vous vous serez familiarisé avec un autre éditeur.

Quoi qu'il en soit, les options les plus importantes du fichier /etc/lilo.conf sont les suivantes :

La suite du fichier lilo.conf décrit les différentes configurations que LILO peut lancer. Les sections de configuration permettant de charger Linux ont le format suivant :

image = noyau
root = root_device
label = nom
noyau est le chemin complet sur le noyau de Linux à charger, root_device est le nom complet du fichier spécial de périphérique contenant le système de fichier racine et nom est le nom de la configuration tel qu'il devra être saisi à l'invite de LILO. L'exemple donné ci-dessous permet de charger le noyau /boot/vmlinuz en utilisant la partition /dev/hda2 comme partition racine :

image = /boot/vmlinuz
root = /dev/hda2
label = linux

Si vous désirez créer une section de configuration permettant de lancer un autre système d'exploitation que Linux (DOS ou Windows par exemple), vous pouvez utiliser la possibilité de passer le relai au chargeur de ces systèmes, qu'il s'agisse d'un simple secteur de boot ou d'un gestionnaire d'amorçage complet. Cela se fait avec la syntaxe suivante :

other = partition
table = disque
loader = relai
label = nom
partition est la partition sur laquelle le secteur de boot de l'autre système est installé, disque est le disque dur contenant la table des partitions utilisée par ce système, relai est le nom d'un chargeur spécial permettant de simplement passer la main au chargeur du système, et nom est le nom de la configuration. Le chargeur à utiliser pour demander à LILO de passer le relai au chargeur de l'autre système d'exploitation est le chargeur contenu dans le fichier chain.b de LILO. Ce fichier se trouve généralement dans le répertoire /boot/, aussi doit-on spécifier /boot/chain.b pour le champ relai.

Note : Prenez garde au fait que Windows NT/Windows 2000/XP installent NTLDR dans la première partition à laquelle il savent accéder en général. Donc, si un DOS ou Windows 95, Windows 98 ou Millenium est installé en premier, ils installeront NTLDR dans la partition de ces systèmes. Dans ce cas, la configuration permettant de lancer le DOS ou le Windows 95, Windows 98 ou Millenium qui se trouve sur cette partition risque fort de lancer NTLDR qui proposera, à son tour, de lancer les différents systèmes d'exploitation Microsoft installés.

Cela peut être relativement gênant et peut être corrigé en déplaçant NTLDR sur la partition de Windows NT/Windows 2000/XP et en reconstruisant les secteurs de boot des différentes partition pour que leur chargeurs s'occupent de leurs systèmes respectifs, mais il s'agit là d'une opération extrêmement technique d'une part, et qui ne concerne absolument pas Linux d'autre part. Cela ne sera donc pas décrit dans ce document. Il existe toutefois des documents sur Internet qui décrivent la manière de procéder et je vous invite à vous y référer (avec une prudence extrême cependant).

L'exemple donné ci-dessous permet de donner la possibilité de charger Linux ou Windows NT, en lançant Linux par défaut au bout de 10 secondes. Windows NT est installé sur la troisième partition, et Linux utilise la deuxième et la quatrième partition respectivement pour y stocker sa partition racine et la partition des répertoires personnels des utilisateurs. LILO est ici installé sur la partition racine de Linux :

# Exemple de fichier de configuration /etc/lilo.conf :

# Options générales :
boot = /dev/hda2
read-only
prompt
timeout=100
keytable = /boot/fr-latin1.klt

# Première configuration (Linux) :
image = /boot/vmlinuz
root = /dev/hda2
label = linux

# Deuxième configuration (NT) :
other = /dev/hda3
table = /dev/hda
loader = /boot/chain.b
label = NT

L'installation de LILO est très simple une fois que l'on a écrit le fichier lilo.conf. En effet, il suffit tout simplement de taper la commande suivante :

lilo [-L]
L'option -L permet de demander à LILO d'utiliser le mode d'adressage LBA pour accéder au disque dur pendant la phase d'amorçage. Cette option est nécessaire si vous disposez d'un grand disque dur et que certaines partitions disposant de systèmes à lancer sont situées au delà du cylindre 1024. Il est recommandé de l'utiliser systématiquement étant donné les tailles des disques durs actuels.

Note : Comprenez bien que si votre BIOS est incapable d'utiliser le mode LBA ou le si bootstrap loader est incapable d'utiliser ce mode, cette option ne vous sera d'aucune utilité. En effet, dans ce cas, le bootstrap loader ne parviendrait même pas à charger le secteur de boot de la partition Linux. C'est pour cette raison qu'il a été recommandé de placer la partition du système principal en deçà de cette limite des 1024 cylindres. Cette limitation est donc bien une limitation du BIOS, mais vous ne devriez plus rencontrer ce genre de problème que sur de vieilles machines sur lesquelles un nouveau disque dur de grande capacité a été installé.

Si lilo signale une erreur, il vaut mieux ne pas insister et corriger le fichier lilo.conf.

Lorsque la machine démarre, LILO affiche son invite de démarrage : LILO boot:

Il attend ici que vous indiquiez le nom du système que vous désirez démarrer. Vous devez ici taper le nom du système à charger et valider : LILO boot:linux

Si vous ne tapez rien, et que vous avez donné un délai d'attente dans le fichier de configuration de LILO, la première configuration sera lancée automatiquement après ce délai.

LILO permet de spécifier des paramètres de démarrage complémentaires pour Linux à la suite du nom de la configuration qui permet de le lancer. Ces paramètres servent principalement à renseigner le noyau sur la configuration matérielle (en particulier les ports d'entrée/sortie et les lignes d'interruption des périphériques non Plug and Play), pour le cas où il ne parviendrait pas à les déterminer automatiquement. L'un des paramètres les plus intéressants est sans doute mem, qui permet d'indiquer au noyau la taille de la mémoire vive dont dispose l'ordinateur. Ce paramètre peut être nécessaire si vous disposez de plus de 64 Mo de mémoire, parce que les fonctions du BIOS ne permettent pas d'indiquer les tailles de mémoire plus grandes (la plupart des BIOS récents n'ont toutefois plus ce problème). Par exemple, si votre ordinateur dispose de 256 Mo de mémoire, vous devrez taper la ligne de paramètres suivante au démarrage : LILO boot:linux mem=256M

Bien entendu, il est possible d'enregistrer ces paramètres dans le fichier de configuration de LILO afin de ne pas avoir à les saisir à chaque démarrage. Pour cela, il suffit d'indiquer le paramètre de démarrage du noyau dans une ligne append de la section de configuration de Linux :

append="paramètre"

Ainsi, la section de configuration de Linux du fichier lilo.conf exemple donné ci-dessus pourrait être remplacée par celle-ci sur une machine disposant de 256 Mo de mémoire :

# Première configuration (Linux) :
image = /boot/vmlinuz
root = /dev/hda2
label = linux
append="mem=256M"

La liste des paramètres que l'on peut fournir au noyau est relativement grande et ne sera pas décrite ici. Les plus utiles seront présentés en temps et en heure, notamment dans le chapitre décrivant la configuration du système.

4.8.2. Réalisation d'un multiboot avec le GRUB

Le « GRUB » (abréviation de l'anglais « GRand Unified Bootloader ») est le gestionnaire d'amorçage développé par la Free Software Foundation pour amorcer le noyau Hurd du projet GNU. Il est capable de faire démarrer tous les systèmes utilisant un protocole de démarrage standard initialement défini pour le Hurd. Bien entendu, il sait aussi amorcer les systèmes Linux, qui n'utilisent pas ce protocole, ainsi que la plupart des autres systèmes d'exploitation en passant le relai à leurs propres gestionnaires d'amorçage.

En fait, le GRUB fournit la possibilité de contrôler totalement l'amorçage de son système par l'intermédiaire d'un interpréteur de commandes simplifié. Il est possible, par l'intermédiaire de cet interpréteur de commandes, d'effectuer nombre d'opérations dans le but de charger un noyau de système d'exploitation et de l'amorcer. Bien entendu, ces commandes peuvent être écrites dans un fichier de configuration afin d'automatiser le processus de chargement.

Le GRUB est normalement installé dans le répertoire /boot/grub/. Ce répertoire contient, outre les fichiers binaires du GRUB lui-même, son fichier de configuration. Ce fichier se nomme normalement menu.lst, en raison du fait qu'il permet de définir les différentes configurations correspondantes aux systèmes d'exploitation à charger et qui apparaîtront dans le menu de démarrage lors de l'amorçage de la machine.

Contrairement à LILO, qui enregistre l'emplacement des fichiers des différents noyaux à charger dans une liste de blocs du disque dur, le GRUB sait interpréter les systèmes de fichiers classiques de Linux. En particulier, il est capable de retrouver son fichier de configuration et les fichiers images des noyaux Linux dans les systèmes de fichiers FAT, EXT2/EXT3 et ReiserFS. Cette particularité fait qu'il n'est pas nécessaire, lorsqu'on modifie le fichier de configuration menu.lst, de réinstaller le GRUB.

Tout comme le fichier de configuration de LILO, le fichier menu.lst se compose d'une partie contenant les options globales et d'une ou plusieurs parties contenant la description des différents systèmes d'exploitation à proposer au démarrage. Les options générales les plus utiles sont les suivantes :

Les configurations spécifiques aux systèmes d'exploitation suivent la syntaxe suivante :

title titre
root partition
kernel noyau options
titre est le titre de la configuration tel qu'il doit apparaître dans le menu de démarrage du GRUB, partition est la partition dans laquelle se trouve le noyau à charger, et noyau est le chemin sur le fichier image de ce noyau dans cette partition. Attention, ce chemin est défini dans la partition elle-même et peut donc être différent du chemin utilisé sous Linux. En effet, il faut définir ce chemin par rapport au point de montage de la partition, faute de quoi le GRUB ne retrouverait pas le fichier image du noyau à charger.

Comme le GRUB n'est pas un chargeur spécifique à Linux mais a été écrit au contraire avec comme principal objectif une généricité absolue, la manière de spécifier la partition dans laquelle le noyau se trouve utilise une syntaxe différente de celle utilisée sous Linux. Cette syntaxe, propre au GRUB donc, est la suivante :

(hdn,m)
n est le numéro du disque dans l'ordre énuméré par le BIOS de la machine et m est le numéro de la partition. Ce dernier numéro est facultatif (ainsi que la virgule qui le précède), ce qui permet de référencer un disque complet et non une partition. La numérotation des disques et des partitions commence toujours à 0 dans le GRUB, ce qui fait que la première partition du premier disque est référencée par (hd0,0), la deuxième partition du premier disque par (hd0,1), la première partition du deuxième disque par (hd1,0), etc.

Tout comme avec LILO, il est possible de spécifier des options de démarrage qui devront êtres fournies au noyau. Ces options devront être spécifiées immédiatement après le nom de l'image du noyau. Comme vous pouvez le constater, la définition d'une configuration de démarrage pour un système Linux est très simple, puisqu'il suffit quasiment de donner la ligne de commande pour lancer ce noyau ! Par exemple, pour charger le noyau /boot/vmlinuz d'un système situé sur la deuxième partition du premier disque, la configuration suivante doit être définie :

title Linux
root (hd0,1)
kernel /boot/vmlinuz mem=256M

Cet exemple présente également comment spécifier la taille de la mémoire disponible dans la machine (cela n'est normalement pas nécessaire avec les BIOS récents et avec le GRUB).

Bien entendu, le GRUB est capable de charger le secteur de boot d'une partition afin de passer le relai au gestionnaire d'amorçage d'un autre système d'exploitation. Pour cela, il faut utiliser la commande chainloader, plutôt que la commande kernel, dans la description de la configuration de démarrage de ce système. La forme générale d'une configuration de ce type est donc la suivante :

title titre
root partition
chainloader +1
Le +1 qui suit la commande chainloader indique au GRUB de charger le premier secteur de la partition indiquée par la commande root et d'exécuter le gestionnaire d'amorçage normalement stocké dans ce secteur. Comme pour les configurations Linux, la syntaxe utilisée pour spécifier la partition où ce secteur est situé est la syntaxe du GRUB et non celle utilisée sous Linux.

Le fichier de configuration d'exemple suivant correspond au fichier de configuration de LILO vu dans la section précédente. Il permet de démarrer un Linux installé sur la deuxième partition ou un Windows NT installé sur la troisième partition du premier disque dur de la machine :

# Exemple de fichier de configuration /boot/grub/menu.lst :

# Options générales :
default 0
timeout 10

# Première configuration (Linux) :
title Linux
root (hd0,1)
kernel /boot/vmlinuz root=/dev/hda2 mem=256M

# Deuxième configuration (NT) :
title NT
root (hd0,2)
chainloader +1

L'installation du GRUB sur une nouvelle machine ne pose quant à elle pas de problème particulier. Il suffit de s'assurer que le fichier de configuration menu.lst se situe bien dans le répertoire /boot/grub/, de même que les fichiers binaires du GRUB. Ces fichiers sont respectivement les fichiers stage1, stage2 et tous les fichiers *_stage1_5. S'ils ne s'y trouvent pas, vous pourrez les copier à partir du répertoire /usr/share/grub/i386-pc/, dans lequel le programme d'installation du GRUB les place par défaut.

Lorsque tous les fichiers sont en place, il n'y a plus qu'à lancer le GRUB en mode interactif avec la commande suivante :

grub
et à définir le secteur où il doit installer son fichier d'amorçage principal stage1 (c'est-à-dire dans le secteur de boot d'une partition ou directement sur le MBR du premier disque dur). Pour cela, vous devrez utiliser les deux commandes suivantes :
root source
setup destination
source est ici la partition où est installé le GRUB (il s'agit donc de la partition où se trouvent le répertoire /boot/grub/), et destination est le disque dur ou la partition dont le premier secteur doit recevoir le code d'amorçage du GRUB. Ces deux informations doivent suivre la syntaxe utilisée par le GRUB pour spécifier les disques durs et les partitions. Par exemple, pour installer le GRUB sur le secteur de boot de la deuxième partition du premier disque dur, on utilisera les deux commandes suivantes :

root (hd0,1)
setup (hd0,1)

Cet exemple suppose que le GRUB est également installé dans cette partition. Si ce n'est pas le cas pour vous, vous devrez modifier la partition spécifiée dans la commande root. Vous pourrez quitter le grub avec la commande quit une fois l'installation terminée.

4.8.3. Réalisation d'un multiboot avec NTLDR

Le gestionnaire d'amorçage de Windows NT, Windows 2000 et XP se nomme « NTLDR ». Ce gestionnaire d'amorçage permet de démarrer ces systèmes, bien entendu, mais également les autres systèmes d'exploitation les plus courants, dont Linux. Cette section ne traitera bien entendu que de la manière d'utiliser NTLDR pour démarrer Linux, pour de plus amples informations sur la manière d'ajouter les autres systèmes d'exploitation, veuillez consulter la documentation de Microsoft.

Tout comme LILO, NTLDR dispose d'un fichier de configuration qui permet de décrire les différentes options de son menu de démarrage. Il s'agit du fichier boot.ini, qui est normalement placé à la racine du disque où NTLDR est installé. Il s'agit donc généralement du répertoire racine du disque C:\.

Le fichier boot.ini contient la définition du système d'exploitation à lancer par défaut et du délai d'attente à attendre avant de le sélectionner. Ces deux informations sont écrites dans la section [boot loader] du fichier et sont introduites respectivement par les options default et timeout. La valeur de l'option default doit être l'une des entrées de la section [operating systems], qui contient la définition de tous les systèmes d'exploitation que NTLDR devra proposer au démarrage.

La syntaxe des entrées pour les systèmes d'exploitation dans la section [operating systems] est la suivante :

emplacement = "Nom"
emplacement est la description de l'emplacement où se trouve le système d'exploitation, et Nom est le nom avec lequel ce système devra apparaître dans le menu de démarrage de NTLDR. Cette syntaxe est très simple, mais pour les systèmes NT4, Windows 2000 et XP, la définition de l'emplacement du système est assez compliquée. En effet, elle nécessite de définir complètement le disque physique et sa partition, ainsi que le répertoire du système. Pour les autres systèmes d'exploitation, le plus simple est de spécifier un fichier contenant l'image du secteur de boot de leur partition, et de laisser leur chargeur prendre en charge leur amorçage.

Pour cela, il faut bien entendu disposer d'un tel fichier. Il faut donc copier le premier secteur de la partition du système dans un fichier accessible à NTLDR, donc, en pratique, situé dans le répertoire C:\. Vous pourrez extraire le contenu du secteur de boot de votre partition Linux avec la commande suivante sous Linux :

dd if=/dev/hda3 of=linux.sec bs=512 count=1
Cette commande suppose que LILO ait été installé sur la partition /dev/hda3. Elle permet de lire un bloc de 512 octets de la troisième partition du premier disque dur et de l'enregistrer dans le fichier linux.sec. Vous pourrez ensuite transférer ce fichier dans le répertoire C:\ de Windows, soit en passant par une partition FAT, soit tout simplement à l'aide d'une disquette (rappelons que le système de fichiers NTFS n'est utilisable qu'en lecture seule sous Linux).

Une fois ce fichier obtenu, vous pourrez simplement ajouter la ligne suivante dans votre fichier boot.ini :

C:\linux.sec="Linux"
Le contenu de votre fichier boot.ini devrait alors ressembler à ceci :
[boot loader]
timeout=10
default=multi(0)disk(0)rdisk(0)partition(2)\WINNT

[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINNT="Microsoft Windows 2000 Professionnel" /fastdetect
C:\linux.sec="Linux"

Vous devriez alors pouvoir démarrer Linux directement à partir du menu de démarrage de NTLDR.

Note : Prenez soin à utiliser un nom court pour le fichier contenant le secteur de Linux (c'est-à-dire un nom ne comprenant pas plus de huit caractères et une extension d'au plus trois caractères). En effet, Windows, même dans ses versions les plus récentes, a toujours du mal à prendre en charge les noms longs et il se peut que le gestionnaire d'amorçage NTLDR ne puisse pas localiser le fichier si vous ne respectez pas cette règle.