Table des matières
Introduction
Vous avez sur votre ordinateur un système d'exploitation. Ce peut être un windows ou une distribution GNU/Linux. Et puis, vous installez (ou vous avez installé) en plus une distribution GNU/Linux. Cette distribution installe (ou vous a installé) un nouveau chargeur de démarrage, pour pouvoir démarrer les 2 systèmes. Et puis l'envie vous prend d'installer un troisième système… C'est comme ça, la curiosité, ça s'explique pas ! Et puis éventuellement encore un autre ! Et à chaque fois le chargeur de démarrage du dernier système installé a remplacé le précédent, et à la fin on ne sait plus qui fait quoi !
Cet article explique comment réaliser une installation propre en chainant les chargeurs de démarrage, de manière à simplifier les installations et les désinstallations ultérieures. Il ne s'adresse qu'aux utilisateurs de Grub, qui est un chargeur de démarrage (booloader) très souple et permet de réaliser ce que décrit cet article ; il est possible que Lilo (un autre chargeur) puisse aussi le faire, et il faudrait alors compléter l'article.
ATTENTION : Cet article s'adresse à des utilisateurs qui savent entrer correctement des lignes de commandes dans un terminal. Comme certaines des commandes utilisées ici peuvent causer des dégâts sur vos systèmes d'exploitation si elles sont mal utilisées, nous ne recommandons pas l'utilisation de cette procédure aux débutants. Cependant des dégâts éventuels sont réparables, pour autant que l'on ait pris la précaution de disposer de disquettes de démarrage, distribution nomade (Live-CD) et autres outils classiques de dépannage.
Comment démarre un PC
Lorsque le PC est mis sous tension, le processeur lit le Bios, teste les différents circuits de la carte-mère (bus, mémoire, etc.), reconnaît les périphériques et lit ensuite le premier disque dur pour démarrer un système d'exploitation. Il va donc lire le premier secteur situé en tout début du premier disque, qui est appelé secteur de démarrage (MBR, pour Master Boot Record). Ce disque doit être évidemment démarrable (bootable).
Comme le secteur de démarrage contient seulement 512 octets, cela ne permet pas d'y enregistrer tout le chargeur de démarrage. De ce fait, un chargeur de démarrage est fonctionnellement divisé en deux parties : le Stage1 et le Stage2 (on parle aussi de Stage1.5, mais on ne va pas aller ici jusqu'à ce niveau de détail).
Le processeur lit donc le secteur de démarrage, et y trouve le Stage1 du chargeur de démarrage. Ce Stage1 indique à quel endroit il faudra lire le Stage2 du chargeur de démarrage, qui se trouve dans le système d'exploitation lui-même (par ex. pour Linux : /usr/sbin/grub). Le Stage2 lit alors le fichier de configuration du chargeur (/boot/grub/menu.lst), et affiche sur l'écran les différents choix de systèmes d'exploitation à démarrer. L'utilisateur choisit le système désiré avec les touches Flèche haut et Flèche bas, et le système choisi démarre : démarrage du noyau, etc.
Le fichier de configuration du chargeur de démarrage grub
Le fichier de configuration du chargeur (/boot/grub/menu.lst) est un fichier texte composé de plusieurs sections.
La section des options générales définit des informations telles que le système à démarrer par défaut (si l'on n'utilise pas les touches Flèche pour choisir), le délai pendant lequel on peut utiliser ces touches, le mot de passe éventuel, etc.
Chaque section des options individuelles définit les paramètres pour chaque système à démarrer ; elle contient des entrées donnant le titre du système (qui s'affichera sur l'écran des choix), le nom de la partition où se trouve le système, le nom du noyau à démarrer, etc.
Par exemple, on peut avoir, pour un système :
title Debian kernel 2.6.22-3-486 root (hd0,0) kernel /boot/vmlinuz-2.6.22-3-486 root=/dev/hda1 ro initrd /boot/initrd.img-2.6.22-3-486
Attention : ce type d'entrée est très spécifique, il peut n'y avoir aucun initrd et les périphériques peuvent être nommés suivant leur UUID …
On a autant de sections comme celles-ci que l'on a de systèmes à démarrer. Le nombre de systèmes que l'on peut démarrer ainsi n'est pas limité, ou ne serait limité que par la taille du fichier de configuration…
Je vous conseille de lire le manuel en français (version 0.92) http://www.linux-france.org/article/sys/chargeurs/ix86/grub/grub-manual-fr.html (en particulier la section “Convention de nommage”, qui explique les différences de notation utilisées dans Linux et dans Grub), ou bien le manuel en anglais (version 0.97) sur http://www.gnu.org/software/grub/manual/grub.html .
Le chaînage des chargeurs de démarrage
A chaque fois que l'on installe un système d'exploitation supplémentaire sur son PC, la procédure d'installation installe Grub ou Lilo (le plus souvent au choix de l'utilisateur) par défaut sur le secteur de démarrage, puis détecte les autres systèmes installés, définit dans le fichier de configuration la section des options individuelles de démarrage pour chaque système trouvé (ou pas, selon la distribution !). S'il ne les détecte pas tous, il faut alors ajouter à la main dans ce fichier la section avec les entrées adéquates : cela n'est pas toujours simple, et il vaut mieux ne pas se tromper… Le chargeur de démarrage installé est alors celui fourni par le dernier système installé. Ce qui fait que si, par exemple, l'on désinstalle ce système, on n'a plus de chargeur de démarrage (Stage2), alors que son Stage1 subsiste dans le secteur de démarrage et il pointe sur un Stage2 qui n'existe plus ! Le PC ne peut donc plus démarrer…
Le principe du chaînage est qu'un chargeur de démarrage appelé chargeur principal lance les autres chargeurs situés au début des partitions des autres systèmes installés.
Dans notre cas, nous proposons d'installer un chargeur de démarrage principal sur une petite partition au début du prmeier disque et sur son secteur de démarrage (MBR), et que chaque système d'exploitation installe son propre chargeur de démarrage au début de sa propre partition racine. Le chargeur de démarrage principal est alors destiné uniquement à lancer les différents chargeurs de démarrage des systèmes d'exploitation installés. Il sera donc configuré uniquement pour donner le choix des différents systèmes d'exploitation, et contiendra donc différentes sections pour lancer le chargeur de démarrage de chaque système. Les chargeurs seront donc chaînés.
Installation de Grub sur une disquette
Nous supposons ici que Grub est déjà installé sur votre système, que c'est le chargeur de démarrage utilisé, et que vous disposez déjà d'une disquette de démarrage de secours (pour cela, référez vous aux outils de votre système Linux installé). Si votre PC n'a pas de lecteur de disquette, d'autres solutions sont possibles et sont à développer ici.
Ensuite, il vous faut créer une autre disquette de démarrage et d'installation de Grub, qui permettra aussi de sortir de situations difficiles en cas de problèmes. Le principe est de copier sur la disquette les fichiers stage1 et stage 2 du répertoire grub, puis de rendre cette disquette démarrable. Cette procédure est décrite de différentes manières :
- soit dans la section “Créer une disquette de démarrage” de la page http://www.linux-france.org/article/sys/chargeurs/ix86/grub/grub-manual-fr.html#Installation,
- soit dans la section 3 “Installation de GRUB sur disquette” de la page http://www.linux-france.org/article/sys/chargeurs/ix86/grub/installation.html .
Ces deux procédures sont équivalentes et tout aussi efficaces. Cependant la première ne copie pas de fichier de configuration, et au démarrage on devra entrer les paramètres manuellement. Attention, il est possible que les fichiers à copier stage1 et stage2 ne se trouvent pas dans /usr/share/grub/i386-pc/ , mais dans /usr/lib/grub/i386-pc/ . On les trouve aussi le plus souvent dans /boot/grub/ .
Une troisième procédure équivalente existe, qui permet en plus d'avoir un clavier francisé, un fichier de configuration menu.lst évolué et de disposer de documentation : http://www.citic74.fr/linux/howto/grub-howto-11.html ,
Si vous n'avez pas besoin de ces dernières améliorations, sous root, tapez seulement :
# mke2fs /dev/fd0 (formatage de la disquette en ext2) # mkdir /mnt/floppy (création du répertoire de montage) # mount -t ext2 /dev/fd0 /mnt/floppy (montage de la disquette) # mkdir /mnt/floppy/grub (création du répertoire grub) # cp /boot/grub/stage? /mnt/floppy/grub/ (copie des fichiers stage1 et stage2) # cp /boot/grub/menu.lst /mnt/floppy/grub/ (copie du fichier de configuration menu.lst) # umount /mnt/floppy (démontage de la disquette) # grub grub> root (fd0) (déclarer la disquette) grub> setup (fd0) (rendre la disquette démarrable) grub> quit
Vous avez maintenant une disquette de démarrage de Grub avec le fichier de configuration menu.lst de votre système. Redémarrez votre ordinateur avec cette disquette pour vérifier son bon fonctionnement. S'il y a un problème, vous pourrez redémarrer normalement sans la disquette.
Création d'une petite partition en début de disque (partition_grub)
Attention !!! Cette opération est délicate car en cas de coupure de courant pendant le redimensionnement de la partition, la table de partitionnement peut être endommagée. Il est donc INDISPENSABLE d'avoir au prélable SAUVEGARDÉ TOUTES VOS DONNÉES SENSIBLES !!!
On crée une petite partition, que nous appellerons partition_grub, au tout début du disque hda (ou sda, ou du 1er disque démarré par le bios). Pour cela, utiliser le partitionneur de disques Gparted, sous la forme du CD démarrable :
- Gparted LiveCD http://www.linuxpedia.fr/doku.php/gparted#live_cd , ou
- Parted Magic http://partedmagic.com/wiki/PartedMagic.php
Graver le fichier téléchargé au format .iso sur un CDrom, puis démarrer le PC sur le CD, et lancer le partitionneur :
- réduire la première partition du disque pour laisser suffisamment de place en début de disque. L'espace libre pour la partition_grub doit être de 2 Mo minimum, mais plus de 5 Mo n'est pas nécessaire. La durée de la réduction de la partition peut être longue si la partition est importante.
- créer une nouvelle partition dans l'espace ainsi créé en début de disque. Cette partition doit être une partition primaire et démarrable (bootable), et son système de fichiers au format ext2.
- une fois ces opérations terminées, noter le nom de la partition_grub, et celui de la partition racine de vos systèmes installés. Ces noms sont du style hda1 ou sda1 en notation Linux et sont indiqués par gparted.
Il est probable que la partition_grub ainsi créée, bien qu'étant en début de disque, ne soit pas numérotée 1, si elle a été créée après les autres. Cela n'est pas un problème. Nous appellerons G ce numéro, ce qui donnera hdaG ou sdaG dans la notation Linux, ou hd0,G-1 ou sd0,G-1 dans la notation Grub (voir plus haut les Conventions de Nommage).
Installation du chargeur de démarrage principal en début de disque
Le principe est, comme pour la création de la disquette, de copier les fichiers nécessaires (au minimum stage1, stage2 et menu.lst) sur la partition_grub, puis de rendre cette partition démarrable.
Comme plus haut, la procédure d'installation du chargeur est très bien décrite :
- dans la section “Installer GRUB nativement” de la page http://www.linux-france.org/article/sys/chargeurs/ix86/grub/grub-manual-fr.html#Installation,
- ou bien dans la section “Enfin, l'installation sur disque dur” de la page http://www.linux-france.org/article/sys/chargeurs/ix86/grub/installation.html
En pratique, redémarrez votre PC, et dans un terminal sous root, tapez :
# mkdir /mnt/partition_grub (création du répertoire de montage) # mount -t ext2 /dev/hdaG /mnt/partition_grub (hda ou sda, suivant le type de disque, pour monter la partition) # mkdir /mnt/partition_grub/boot (création des répertoires boot et grub dans la partition_grub) # mkdir /mnt/partition_grub/boot/grub # cp /boot/grub/stage? /mnt/partition_grub/boot/grub (copie des fichiers stage1 et stage2) # cp /boot/grub/menu.lst /mnt/partition_grub/boot/grub (copie du fichier menu.lst)
G étant le numéro de la partition_grub en notation Linux, soit G-1 en notation Grub. Ce qui fait que le disque appelé hda sous Linux est appelé hd0 sous Grub, et sa première partition hdaG sous Linux est appelée hd0,G-1 sous Grub.
Puis démarrez le PC à partir de la disquette de démarrage de Grub ; à l'affichage du menu de Grub, taper “c” pour obtenir la ligne de commande de Grub (l'invite est grub>), et tapez les commandes suivantes :
grub> root (hd0,G-1) (déclarer la partition) grub> setup (hd0) (rendre la partition démarrable)
Attention, le clavier est configuré par défaut en mode qwerty. Si l'on veut absolument avoir un clavier azerty, il faut modifier le fichier menu.lst de la disquette ; ce n'est pas expliqué ici, car cela n'est pas strictement nécessaire, vu qu'il y a peu de caractères à taper et qu'on peut assez facilement les trouver sur un clavier configuré en qwerty.
Sortez de grub par la touche Échappement ou Escape, et redémarrez l'ordinateur (maintenant il devra démarrer à partir de la partition_grub, car elle contient le fichier de configuration /boot/grub/menu.lst).
Vous pouvez lister maintenant le contenu de la partition hdaG : ouvrez une console en mode administrateur, et tapez :
# mount -t ext2 /dev/hdaG /mnt/partition_grub # ls -al /mnt/partition_grub/boot/grub/ total 133 drwxr-xr-x 3 root root 1024 2008-02-17 11:02 . drwxr-xr-x 3 root root 1024 2007-12-23 12:52 .. -rw-r--r-- 1 root root 5547 2007-12-23 11:02 menu.lst -rw-r--r-- 1 root root 512 2007-12-23 12:53 stage1 -rw-r--r-- 1 root root 108360 2007-12-23 12:53 stage2
Configuration du démarrage des systèmes déjà installés
Le fichier menu.lst de la partition_grub est celui d'origine de votre distribution Linux, donc il en contient déjà les entrées qui permettent son démarrage en direct, sans chaînage. Donc ne les supprimez pas pour l'instant, car c'est par ce moyen que vous pourrez à coup sûr redémarrer votre ordinateur !
Pour ajouter un chaînage de démarrage d'un système d'exploitation, il faudra :
1) ajouter dans ce fichier, dans la section des options individuelles, les entrées de ce système :
Montez la partition_grub comme plus haut, ouvrez le fichier /boot/grub/menu.lst dans un éditeur de texte en mode administrateur (root) et ajoutez les entrées de démarrage dans la section des options individuelles.
Pour un système Windows, ajoutez la section suivante :
title Windows root (hdx,y) makeactive chainloader +1
Avec pour paramètres x,y le nom du disque et de la partition qui ont été indiqués par Gparted, transposés en format Grub : voir au chapitre “Création d'une petite partition en début de disque”.
Pour un système Linux, ajoutez la section suivante :
title Mon système Linux root (hdx,y) chainloader +1
Avec pour paramètres x,y le nom du disque et de la partition qui ont été indiqués par Gparted, transposés en format Grub : voir au chapitre “Création d'une petite partition en début de disque”.
Voir aussi la section “Démarrage” de http://www.linux-france.org/article/sys/chargeurs/ix86/grub/grub-manual-fr.html#Demarrage
2) installer son propre chargeur de démarrage dans sa propre partition racine.
Pour un système windows, son chargeur de démarrage est déjà le plus souvent dans sa propre partition d'installation. Il n'y a donc rien à faire.
Pour un système Linux, il reste à installer son propre chargeur de démarrage sur sa propre partition racine. Comme vous êtes toujours dans votre système Linux, vous pouvez :
- soit procéder selon la section “Installer GRUB avec grub-install” dans la page http://www.linux-france.org/article/sys/chargeurs/ix86/grub/grub-manual-fr.html#Installation, mais cette méthode n'est pas très conseillée.
- soit installer Grub nativement (voir la section plus haut dans la même page), mais cette fois-ci dans la partition racine ; dans un terminal sous root, tapez :
# grub grub> root (hdx,y) (déclarer la partition) grub> makeactive (rendre active la partition) grub> setup (hdx,y) (rendre démarrable la partition) grub> quit
Avec pour paramètres x,y le nom du disque et de la partition qui ont été indiqués par Gparted, transposés en format Grub : voir au chapitre “Création d'une petite partition en début de disque”.
Votre premier redémarrage en mode chaîné
Vous pouvez alors redémarrer l'ordinateur et vérifier si le chaînage fonctionne, pour chaque système d'exploitation installé.
Redémarrez votre PC. Vous avez alors un démarrage en 2 temps :
- le démarrage du chargeur principal, qui affiche les différents systèmes d'exploitation installés
- pour chaque système, le démarrage de son propre chargeur, qui affiche sa propre page de démarrage du système
Si le chaînage ne fonctionne pas pour une raison quelconque, vous pourrez toujours démarrer votre système Linux grâce aux entrées que vous n'avez pas effacées ! ou bien redémarrer à partir de la disquette. Si tout fonctionne correctement, vous pouvez alors supprimer du fichier de configuration /boot/grub/menu.lst dans la partition_grub les entrées correspondant au démarrage en direct, sans chaînage (notez qu'au lieu de les supprimer, il est plus habile de rendre inopérantes ces entrées, en ajoutant un caractère # en début de chaque ligne).
Une fois démarré votre système Linux, vous pouvez alors changer les couleurs des caractères et du fond dans les pages de démarrage, les délais de lancement par défaut, etc, dans le fichier de configuration menu.lst du chargeur correspondant.
Si le chargeur de démarrage principal ne fonctionne pas, vous pouvez vous dépanner grâce à la disquette de démarrage de Grub. D'où son importance…
Si le chargeur de démarrage d'un des systèmes ne fonctionne pas, vous pouvez le redémarrer avec sa propre disquette de démarrage, ou bien démarrer une distribution nomade sur CD (Live-CD), et corriger le fichier de configuration en cause.
Dans tous les cas, Grub permet d'exécuter les commandes manuellement en mode commande, ou bien d'éditer les commandes elles-mêmes. C'est ce qui fait toute sa souplesse et le rend bien plus pratique pour la mise au point ou le dépannage…
Installation d'un système d'exploitation supplémentaire
Lorsque l'on installe un système d'exploitation supplémentaire, il suffit, au moment adéquat, de demander à installer Grub dans la propre partition racine du système ; par exemple, si le système est installé sur la partition 6 du deuxième disque, soit hdb6 en notation linux, Grub devra être installé sur cette partition, soit hd1,5 en notation Grub.
Ensuite il suffira de copier les entrées adéquates au système dans le fichier /boot/grub/menu.lst de la partition_grub. Pour un systèmes Linux, c'est le plus souvent du genre :
title Mandriva 2008 One root (hd1,5) chainloader +1
Evidemment, il vous faudra adapter les numéros du disque et de la partition.
Si vous rencontrez des difficultés, ce site (en anglais) explique comment sont installés 145 systèmes d'exploitation sur une seule machine ! (http://www.justlinux.com/forum/showthread.php?p=861282#post861282). Dans sa section “Here is the Grub menu.lst that boots 145 systems”, il donne les entrées qu'il faudra insérer dans le fichier menu.lst du chargeur de démarrage principal, pour à peu près n'importe quel système Linux, Unix, Windows, etc.
Désinstallation d'un système d'exploitation
La désinstallation d'un système d'exploitation est on ne peut plus simple ; il suffit de :
- supprimer les entrées du système dans le fichier /boot/grub/menu.lst de la partition_grub. Le système n'est alors plus démarrable (du moins avec le chargeur principal).
- si nécessaire, formater ou détruire la partition où était installé ce système, y installer autre chose, etc.
Remerciements
Je remercie ici les différents auteurs sur les sites internet cités ici, qui m'ont permis d'expérimenter le chainage des chargeurs de démarrage et d'écrire cette procédure pour la partager avec d'autres.
J'espère que cette procédure vous permettra d'installer efficacement grub en mode chaîné. Si vous avez des remarques ou des propositions d'amélioration sur cette procédure, veuillez me joindre à :
Jean-Luc DUFLOT, Root66.net
jld78 CHEZ @tele2 POING fr