kanotix logo
Version Francophone maj. 03/11/2006

Grub

Grub, pour "Grand Unified Boot Loader", autrement dit Grand Chargeur de Démarrage, est un outil très puissant qui va vous permettre de démarrer les systèmes d'exploitation de votre ordinateur, éventuellement en entrant des options spéciales.

Vous gagnerez à lire le Manuel en français de Grub, qui vous détaillera les nombreuses possibilités d'application du logiciel (permettre aux utilisateurs masochistes et avertis l'installation de plusieurs versions de Windows sur un même disque dur, en cachant des partitions et en trompant les systèmes en question sur leurs adresses, par exemple).

GNU/linux a besoin d'un tel programme de démarrage du fait qu'étant un système modulaire largement paramétrable, son usage permette d'opérer à la volée des changements tels que la mise-à-jour du noyau Linux et le lancement immédiat du système à partir du nouveau noyau, et plein d'autres réglages impossibles à réaliser avec d'autres systèmes. Son installation permet aussi de pouvoir aisément démarrer au choix Windows ou GNU/linux sur machine embarquant ces deux systèmes.

Grub se décompose en deux parties logicielles :

Configuration de Grub

Grub, contrairement à GNU/linux, ne tient pas compte du standard de vos disques durs et les numérote tous 'hd' les uns après les autres dans l'ordre de préférences de démarrage assigné par les BIOS modernes.

Contrairement à Linux, Grub numérote les partitions de disque en commençant par 0. Ainsi (hd0,0) dans Grub signifie-il la même chose que hda1 (si l'on est en ATA) ou sda1 (si l'on est en SATA ou SCSI) dans linux. C'est tout simplement la première partition du premier disque démarrable de la machine.

Grub numérote tout à partir du Zéro. Nous le verrons.

Grub distingue les partitions primaires des partitions logiques. Suivant son principe de numérotation à partir du Zéro, il numérotera les partitions primaires de 0 à 3, et les partitions logiques à partir de 4. Ainsi par exemple sda5 pour Linux, pourra être (hd0,4) pour Grub.

Le fichier principal auquel vous aurez le plus affaire pour configurer Grub est /boot/grub/menu.lst

Ce fichier est un simple fichier de texte, éditable dans n'importe quel éditeur de texte (nano, kate, gvim, etc.) par l'administrateur de la machine (root).

Vous pouvez lire ce fichier en tant qu'utilisateur. Par exemple en mode console, en lançant la commande:

$ cat /boot/grub/menu.lst

Les lignes qui le composent commençant par # sont des lignes de commentaires. Ce signe # dit au système de ne pas interprêter leur contenu comme des commandes.
Cette règle de syntaxe distingant le commentaires prévaut pour tous les fichiers de configuration sous GNU/Linux. Les lignes "actives" de configuration sont donc celles n'étant pas commentées.
Rappel
Pour obtenir le signe # entrez au clavier :
Touche Alt Gr + Touche 3 dièse

Nous nous intéresserons surtout à deux fonctionnalités d'un intérêt immédiat pour vous : choisir quel système vous préférez voir démarrer par défaut et régler le délai de chargement automatique du système à démarrer par défaut (en bref, régler le délai de compte-à-rebours).

Les entrées

La ligne:

default 0

définit l'entrée par défaut qui sera activée. Bien sûr dans grub, 0 signifie que la première entrée sera activée par défaut.

Ces entrées sont énumérées à la fin du fichier, et c'est donc l'ordre de leur énumération (en comptant à partir du zéro pour la première d'entre elles) qui servira de repère pour choisir celle qui s'activera dans Grub à la fin du compte-à-rebours, sans intervention des utilisateurs.

Chaque entrée comporte un titre (que vous pouvez changer indifféremment pour le rendre plus explicite). Puis l'entrée est définie sur quelques lignes :
Une ligne 'root', indique à Grub dans sa syntaxe - exemple (hd0,0) - le secteur du périphérique où se trouve l'ensemble des éléments permettant de lancer un système d'exploitation.
Une ligne 'kernel', qui indique en syntaxe GNU/linux où se trouve le noyau kernel. Cette ligne permet également d'adresser des paramètres à ce noyau, notamment pour charger ou désactiver certains de ses modules.
Une ligne 'initrd', qui spécifie l'emplacement de initrd, la commande de lancement du premier 'démon' linux, processus père de tous les processus du système GNU/linux.

Ce qui donne par exemple :

titleDebian GNU/Linux, kernel 2.6.17.13-kanotix-2
root(hd0,5)
kernel/boot/vmlinuz-2.6.17.13-kanotix-2 root=/dev/hda6 ro quiet vga=791
initrd/boot/initrd.img-2.6.17.13-kanotix-2

Pour démarrer GNU/Linux, GRUB doit savoir où est situé le noyau à booter et l'emplacement du fichier initrd.

L'emplacement de la partition root est spécifié en syntaxe Grub.

Le chemin vers le noyau et le fichier initrd sont écrits dans la syntaxe GNU/Linux.

L'entrée pour un éventuel 'Windows' utilise une syntaxe un peu différente, qui appelle l'exécutable de démarrage spécifique à ce type de système, auquel Grub laisse la main :

titleWindows 95/98/ME (hdb1)
root(hd0,0)
makeactive
chainloader +1

Dans cette entrée, il est indispensable que la syntaxe de la ligne 'root' soit la bonne et pointe vers le bon disque dur et la bonne partition. Ici dans l'exemple, le Windows quelconque est sensé se trouver sur la première partition du premier disque dur (pour le BIOS) de l'ordinateur

Après une installation de Kanotix, figurent généralement deux entrées ou trois, si vous utilisez Windows. Suivant la numérotation Grub, dans un exemple où Windows est la troisième entrée valide, il suffira de remplacer default 0 par

default 	2

pour booter par défaut sous Windows.

Compte-à-rebours

Le délai du compte-à-rebours se fixe en secondes en haut du fichier à la ligne :

timeout		5

Il suffit d'augmenter ou de diminuer la valeur en secondes pour changer à votre convenance, le délai d'activation de l'entrée par défaut. Si vous entrez 0, le compte-à-rebours sera désactivé et Grub attendra que vous validiez l'entrée voulue en appuyant sur "Entrée" démarrer un système d'exploitation.

Pour ajouter des entrées à Grub

L'aide des notes que vous aurez prises au moment de votre installation vous sera certainement très utile pour vous dépatouiller avec le chargeur de vos systèmes d'exploitation ; en particulier pour bien repérer et indiquer les correspondances d'adresses des partitions appelées dans les syntaxes respectives de Grub et de GNU/linux.

Grâce à Grub, vous pourrez aisément installer plusieurs distributions de GNU/Linux et configurer le seul fichier de texte /boot/grub/menu.lst en ajoutant toutes les entrées nécessaires (copiés-collés de menu.lst des installations antérieures pour démarrer l'une ou l'autre de ces distributions.

Attention ! si vous déplacez matériellement le disque racine d'un système GNU/Linux, entrainant le changement de son adresse de périphérique /dev, celui-ci, même en changeant les entrées de Grub, ne pourra plus démarrer !

C'est très pratique pour, par exemple, garder un système robuste tout en se donnant la possibilité d'en tester d'autres plus innovants, ou des versions orientées vers certaines applications multimédias (mao notamment), qui ne peuvent pas toujours être adaptées à des travaux de production bureautique ou autre, à rester polyvalentes, ou qui demeureraient encore trop instables tout en valant la peine d'être essayées.

Séparez bien vos entrées comme le sont celles d'origine de vos fichiers. Sauvegardez éventuellement quelque part, le menu.lst originel, afin de pouvoir en le restaurant, remédier instantannément à des erreurs.

Voici un exemple de double-entrée valide :

titleAncienne Kanotix, kernel 2.6.17.13-kanotix-2
root(hd0,5)
kernel/boot/vmlinuz-2.6.17.13-kanotix-2 root=/dev/hda6 ro quiet vga=791
initrd/boot/initrd.img-2.6.17.13-kanotix-2
titleNouvelle Kanotix, kernel 2.6.17.13-kanotix-2
root(hd1,0)
kernel/boot/vmlinuz-2.6.17.13-kanotix-2 root=/dev/hdc1 ro quiet vga=791
initrd/boot/initrd.img-2.6.17.13-kanotix-2

Comme on peut le constater :

Difficultés

Le MBR

Il est important de savoir que tout disque dur est susceptible d'héberger le MBR. Par Master Boot Record, il est entendu le premier secteur du premier disque appelé par le BIOS. Les ennuis commencent lorsque par erreur, après avoir installé un nouveau disque ou modifié la configuration du BIOS, le MBR appelé n'est pas celui sur lequel l'amorçage de grub a été installé ou que l'amorçage par le MBR n'interroge pas le bon disque pour trouver /boot/grub et retourne une erreur. Cela a beau être complètement logique, cela reste très décourageant pour qui débute. Pourtant, avec un peu d'attention cela se résoud facilement.

Le plus important dans un multi-démarrage avec Windows reste que le disque sur lequel se trouve ce système soit réellement celui paramétré en priorité pour démarrer dans le BIOS.

Si Grub ne parvient même pas à afficher son écran de choix, et renvoit une erreur 18, c'est que le stage 1 n'a pas réussi à trouver le stage 2 pour le charger. C'est le cas le moins ennuyeux qui signifie qu'au moins Grub est bien installé sur le MBR du bon disque de l'ordinateur. L'erreur provient probablement de mauvaises indications dans les entrées 'root' du fichier 'menu.lst'. Dans ce cas démarrez en mode live-CD et en tant qu'administrateur, puis éditez simplement le fichier menu.lst de l'installation sur disque dur en y corrigeant vos entrées.

Si vous n'obtenez rien dutout, pas même un retour d'erreur de Grub, c'est qu'il s'est installé sur un MBR qui n'est pas celui du premier disque dur appelé par le BIOS.

Si suite à une erreur de manipulation quelconque c'est sur un autre disque maître que Grub a été installé il faudra simplement réinstaller sa partie 'amorçage' au bon endroit avec le Live CD de Kanotix, en lui demandant de pointer vers le bon répertoire /boot/grub de l'installation initiale ; pour ce faire on utilise un script, grub-install.sh, qui utilise la syntaxe GNU/Linux et non celle de Grub pour désigner les disques, permettant d'être sûr du moment qu'on lui spécifie les adresses correctes, de remédier au problème.

GNU/Linux utilisant toujours une syntaxe très claire et dépourvue d'ambiguité pour identifier les partitions, pourra se trouver reconnecté facilement à son chargeur de démarrage. C'est la procédure que nous décrivons dans ce qui suit.

Réinstaller Grub

Sur le MBR

Pour réinstaller Grub sur le MBR, démarrez le CD-ROM de Kanotix, puis ouvrez une console administrateur (root shell). Montez tout d'abord la partition où se trouve le répertoire /boot/grub que vous voulez reactiver (votre partition racine, si vous n'avez pas de partition /boot ; dans l'exemple d'installation des chapitre précédents ce serait /dev/hda6) :

# mount /dev/hda6 /media/hda6

Vous allez entrer :

# grub-install --root-directory=/media/hda6 /dev/xda

où l'adresse de votre répertoire racine est à adapter à partir de l'exemple donné
où l'expression /dev/xda est elle aussi à adapter pour désigner le périphérique sur le MBR duquel vous souhaitez installer grub (sda ou hda suivant le cas). Dans ce dernier argument, on ne précise évidemment pas de nombre : nous pointons vers l'ensemble du périphérique et non vers une partition.

Cette procédure reste valide pour réinstaller Grub à tout moment, soit suite à une réinstallation de Windows qui l'aurait forcément effacé du MBR, soit pour des besoins liés à vos choix de configuration.

Rappel : Pour ce qui concerne ensuite le réglage de l'erreur décrite en fin de section précédente, vous chercherez en priorité les incohérences d'adresses que Grub peut garder dans les lignes root des entrées Linux. Il suffit souvent dans ce cas, Grub ne distinguant pas IDE de SATA ou SCSI, de remplacer dans les entrées de /boot/grub/menu.lst une adresse root (hd0,x) par (hd1,x) ou l'inverse, pour que tout rentre dans l'ordre. Réflechissez à ce que vous avez changé pour corriger l'erreur de manière pertinente.
Vous comprendrez sûrement l'intérêt d'utiliser ici le script grub-install : à la différence du shell grub, ce script GNU/linux identifie en syntaxe claire le support de destination du stage 1 de Grub. Ainsi installé sur, par exemple, /dev/sda, on prévient une erreur assez fréquente liée à l'architecture de Grub.

Effacer Grub du MBR

Pour simplement effacer Grub du MBR, entrez dans une console la commande administreur :

# lilo -M /dev/Xda -s /dev/null (où vous remplacerez "X" dans l'adresse de périphérique, par le bon code de type de contrôleur du premier disque maître de l'ordinateur.)

Créer une disquette de démarrage GRUB

Lors du processus d'installation dans l'onglet "GRUB" de l'installeur Kanotix vous avez la possibilité de créer une disquette de démarrage. Nous décrivons ici comment la créer après cette installation.

Voici la procédure étape par étape :

  1. Formattez une disquette :

    # fdformat /dev/fd0

  2. Créez un système de fichier sur cette disquette (Ext2 ou vfat) :

    # mkfs -t ext2 -c /dev/fd0u1440

    ou

    # mkfs.vfat /dev/fd0u1440

  3. Montez la disquette :

    # mount /dev/fd0 /floppy

  4. Créez l'arborescence de répertoires appropriée sur la disquette :

    # mkdir -p /floppy/boot/grub

  5. Copiez les fichiers nécessaires sur la disquette :

    # cp /boot/grub/stage1 /floppy/boot/grub
    # cp /boot/grub/stage2 /floppy/boot/grub

  6. Pour être en mesure de démarrer les bons systèmes depuis les bonnes partitions, vous devez ensuite copier votre menu.list sur la disquette :

    # cp /boot/grub/menu.lst /floppy/boot/grub/menu.lst

  7. Démontez ensuite la disquette :

    # umount /dev/fd0

  8. Et pour finir lancez le shell GRUB pour achever la réinstallation de GRUB sur la disquette :

    # grub
    grub> root (fd0)
    grub> setup (fd0)
    grub> quit

Vous venez de créer une disquette de démarrage GRUB qui permettra de lancer votre ordinateur.

Depuis le Live-CD de Kanotix la procédure est un peu différente. Il faut bien entendu en préalable à l'étape 7, monter la partition Kanotix sur laquelle est située GRUB (dans cet exemple /dev/sda6) :

# mount /dev/sda6 /media/sda6

depuis laquelle nous copions notre fichier /boot/grub/menu.lst vers la disquette :

# cp /mnt/sda6/boot/grub/menu.lst /floppy/boot/grub/menu.lst

Démontez ensuite votre partition Kanotix :

# umount /dev/sda6

Puis effectuez sur la disquette les étapes 7 et 8 du descriptif précédent.

(Pour les versions de KANOTIX antérieures à 2005-04 pensez écrire dans vos chemins /mnt et non /media)

Installer plusieurs versions de GNU/Linux.

Si vous avez beaucoup d'espace disque et l'esprit curieux, tenter d'installer plusieurs versions de GNU/Linux pourrait vous séduire.

Au moyen des explications précédentes, vous devriez être en mesure d'adapter GRUB afin qu'il permette d'activer toutes les entrées valides vers les systèmes présents dans votre machine :
on combine les entrées de différents fichiers "menu.lst" en un seul et on fait pointer la partie MBR de GRUB vers le répertoire /boot/grub où la menu.lst composée est située. Mais...

Il est très important de ne pas chercher à partager le même répertoire /home entre différentes distributions de GNU/Linux. Si vous tentez cela avec Kanotix par exemple, vous avez toutes les chances de ravager toutes les préférences de vos logiciels ainsi que, c'est le moindre mal, de provoquer un échec du démarrage de KDE ou d'autres environnements fenêtrés, qui stockent dans des sous-répertoires cachés des répertoires utilisateurs des paramètres spécifiques pour leur configuration.

Installer Kanotix sur un disque dur USB.

Des étapes particulières sont à ajoûter à la procédure normale d'installation, si vous souhaitez réaliser celle-ci sur un disque dur USB.

On démarre l'installation normalement en choisssant la (ou les) partition(s) du Disque Dur USB où nous voulons installer. (Dans cet exemple, nous parlerons de "sda1" mais la procédure est valable pour toute adresse de partition pertinente du disque USB)

Les changements suivants doivent ensuite être opérés dans une console administrateur (root) :

# mount /dev/sda1 /media/sda1

# mount --bind /proc /media/sda1/proc

# chroot /media/sda1

# echo ehci-hcd >> /etc/mkinitrd/modules

# echo usb-storage >> /etc/mkinitrd/modules

Dans le fichier /etc/mkinitrd/mkinitrd.conf la variable DELAY doit être fixée à 10 par la commande :

# perl -pi -e 's/^(DELAY)=.*/\1=10/' /etc/mkinitrd/mkinitrd.conf

Pour Kanotix 2005-04 ou supérieure, vous devrez également entrer :

# perl -pi -e 's/mkext2fs/mkcramfs/' /etc/mkinitrd/mkinitrd.conf

Nous créons alors une nouvelle image initrd :

# mkinitrd -o /boot/initrd.img-$(uname -r)

(Les erreurs concernant les modules manquants peuvent être ignorées)

Il faut ensuite adapter le fichier /boot/grub/menu.lst. Pour ce faire nous examinons le fichier /boot/grub/device.map :

# cat /boot/grub/device.map

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

et en fonction des indications fournies nous adaptons le fichier /boot/grub/menu.lst pour y ajoûter le bon disque dur :

# perl -pi -e 's/hd1/hdX/' /boot/grub/menu.lst

# perl -pi -e 's/hd0/hd1/' /boot/grub/menu.lst

# perl -pi -e 's/hdX/hd0/' /boot/grub/menu.lst

Nous voilà en mesure de démarrer notre installation sur disque USB.