8.4. Utilisation de GRUB pour paramétrer le processus de démarrage

8.4.1. Introduction

Le chargement au démarrage est un domaine complexe. Tout d'abord, quelques mots de mise en garde sont nécessaires. Vous devez vraiment connaître le chargeur actuel et tout autre système d'exploitation présent sur le disque dur amorçable. Assurez-vous d'avoir une disquette de démarrage de façon à pouvoir « sauver » l'ordinateur si, par malheur, celui-ci devenait inutilisable (non amorçable).

La procédure implique d'écrire quelques fichiers GRUB spéciaux à des endroits sur le disque dur. Nous vous recommandons hautement de créer une disquette de démarrage GRUB de sauvegarde. Insérez une disquette vierge et lancez les commandes suivantes :

cd /tmp
grub-mkrescue --output=grub-img.iso
dd if=grub-img.iso of=/dev/fd0 bs=1440 count=1

Vous pouvez aussi créer un CD d'amorçage en utilisant le outils de gravure de CD de votre système hôte pour graver grub-img.iso sur un CD vierge.

Grub utilise sa propre structure de nommage des disques et partitions, de la forme (hdn,m), où n est le numéro du disque dur et m le numéro de la partition. Le numéro du disque dur commence à zéro, mais le numéro de la partition commence à un pour des partition normales et à cinq pour les partitions étendues. Notez que ceci change des versions des versions précédentes où les deux numéros commençaient à zéro. Par exemple, la partition sda1 signifie (hd0,1) pour GRUB et sdb3 signifie (hd1,3). Contrairement à Linux, Grub ne considère pas les lecteurs de CDRoms comme des disques durs. Par exemple, si un CD se trouve sur hdb et un second disque dur sur hdc, ce dernier disque sera malgré tout (hd1).

Vous pouvez déterminer la façon de voir vos lecteurs de disque par GRUB en lançant :

grub-mkdevicemap --device-map=device.map
cat device.map

L'emplacement de la partition de démarrage est un choix de l'utilisateur qui change la configuration. Une recommendation est d'avoir une petite (la taille suggérée est de 100 Mio) partition à part pour les informations d'amorçage. De cette façon, chaque construction, que ce soit LFS ou d'autres distributions commerciales, peut accéder aux mêmes fichiers de démarrage et on peut y accéder à partir n'importe quel système amorcé. Si vous choisissez de faire cela, vous aurez besoin de monter la partition à part, de déplacer tous les fichiers du répertoire /boot actuel (par exemple, le noyau linux que vous venez de construire à la section précédente) vers la nouvelle partition. Vous aurez ensuite besoin de démonter la partition puis de la remonter en tant que /boot. Si vous le faites, assurez-vous de mettre à jour /etc/fstab.

L'utilisation de la partition lfs actuelle fonctionnera également, mais la configuration pour plusieurs systèmes est plus difficile.

8.4.2. Paramétrage de la configuration

En utilisant les informations ci-dessus, déterminez le nom adapté à la partition racine (ou partition de démarrage, s'il en existe une à part). Pour l'exemple suivant, on suppose que la partition racine (ou (de démarrage à part) est sda2.

Installez les fichiers de GRUB dans /boot/grub :

grub-install --grub-setup=/bin/true /dev/sda

Nous utilisons pour l'instant --grub-setup=/bin/true pour empêcher la mise à jour du Master Boot Record (MBR). De cette façon, nous pouvons tester notre installation avant de faire un changement sur lequel il est difficile de revenir.

Générez /boot/grub/grub.cfg :

grub-mkconfig -o /boot/grub/grub.cfg

Ici grub-mkconfig utilise les fichiers de /etc/grub.d/ pour déterminer le contenu de ce fichier. Le fichier de configuration ressemblera à quelque chose comme :

#
# N'ÉDITEZ PAS CE FICHIER
#
# Il est généré automatiquement par /usr/sbin/grub-mkconfig en utilisant
# les modèles de /etc/grub.d et les paramètres de /etc/default/grub

### DÉBUT /etc/grub.d/00_header ###
set default=0
set timeout=5
### FIN DE /etc/grub.d/00_header ###

### DÉBUT DE /etc/grub.d/10_linux ###
menuentry "GNU/Linux, Linux 2.6.32.44-lfs-SVN-20110821" {
        insmod ext2
        set root=(hd0,2)
        search --no-floppy --fs-uuid --set 915852a7-859e-45a6-9ff0-d3ebfdb5cea2
        linux   /boot/vmlinux-2.6.32.44-lfs-SVN-20110821 root=/dev/sda2 ro
}
menuentry "GNU/Linux, Linux 2.6.32.44-lfs-SVN-20110821" (recovery mode)" {
        insmod ext2
        set root=(hd0,2)
        search --no-floppy --fs-uuid --set 915852a7-859e-45a6-9ff0-d3ebfdb5cea2
        linux   /boot/vmlinux-2.6.32.44-lfs-SVN-20110821 root=/dev/sda2 ro single
}
menuentry "GNU/Linux, Linux 2.6.28-11-server" {
        insmod ext2
        set root=(hd0,2)
        search --no-floppy --fs-uuid --set 6b4c0339-5501-4a85-8351-e398e5252be8
        linux   /boot/vmlinuz-2.6.28-11-server root=UUID=6b4c0339-5501-4a85-8351-e398e5252be8 ro
        initrd  /boot/initrd.img-2.6.28-11-server
}
menuentry "GNU/Linux, Linux 2.6.28-11-server (recovery mode)" {
        insmod ext2
        set root=(hd0,2)
        search --no-floppy --fs-uuid --set 6b4c0339-5501-4a85-8351-e398e5252be8
        linux   /boot/vmlinuz-2.6.28-11-server root=UUID=6b4c0339-5501-4a85-8351-e398e5252be8 ro single
        initrd  /boot/initrd.img-2.6.28-11-server
}
### FIN DE /etc/grub.d/10_linux ###

### DÉBUT DE /etc/grub.d/30_os-prober ###
### FIN DE /etc/grub.d/30_os-prober ###

### DÉBUT DE /etc/grub.d/40_custom ###
# Ce fichier fournit une façon facile d'ajouter des
# entrées de menu personnalisées. Tapez simlement 
# les entrées de menu que vous voulez à ajouter après ce
# commentaire. Prenez garde à ne pas modifier la ligne
# 'exec tail' 
### FIN DE /etc/grub.d/40_custom ###

[Remarque]

Remarque

  • Remarquez que même s'il y a un avertissement pour que vous n'éditiez pas le fichier, vous pouvez le faire tant que vous ne relancez pas grub-mkconfig.

  • Les lignes search ne servent en général à rien dans des systèmes LFS car cette commande ne fait que paramétrer une une variable interne de GRUB utilisée pour trouver l'image du noyau. La commande set root offre la même possibilité sans l'overhead de ;a recherche..

  • Vous pouvez déplacer les commandes set root et insmod ext2 à l'extérieur des sections menuentry pour l'appliquer à toutes les sections du fichier. Cela conduit à une section simple comme :

menuentry "Linux 2.6.32.44-lfs-SVN-20110821" {
linux   /boot/vmlinux-2.6.32.44-lfs-SVN-20110821 root=/dev/sda2 ro
}

  • Passer un UUID au noyau exige un disque RAM initial (initrd) qui n'est pas construit par LFS.

  • Si la partition /boot est installée sur une partition séparée, les lignes linux et initrd ne devraient pas avoir de chaîne /boot en préfixe des noms de fichiers.

  • Dans cet exemple les fichiers du noyau pour une installation Ubuntu se trouvent aussi dans /boot.

8.4.3. Tester la configuration

L'image cœoeur de GRUB est aussi un noyau multiboot (multiamorçage), donc si vous avez déjà chargé GRUB Legacy, vous pouvez charger GRUB-1.98 à travers votre ancien chargeur de démarrage. Pour faire cela, vous devrez quitter l'environnement chroot et revenez-y pour finir le peu qui reste à faire dans le livre.

/sbin/reboot
...
grub> root (hd0,1)
grub> kernel /boot/grub/core.img
grub> boot

Remarquez que les commandes GRUB ci-dessus sont supposées liées à GRUB. À ce moment, l'invite de GRUB apparaîtra (très semblable à GRUB Legacy) et vous pourrez explorer l'interface ou démarrer sur un des systèmes du fichier grub.cfg.

8.4.4. Mettre à jour le Master Boot Record

Si vous avez testé la configuration de GRUB comme indiqué ci-dessus, ré-entrez dans l'environnement chroot.

[Avertissement]

Avertissement

La commande suivante va écraser le chargeur de démarrage actuel. Ne lancez pas la commande si vous ne désirez pas cela, par exemple si vous utilisez un gestionnaire de démarrage tiers pour gérer le Master Boot Record (MBR).

Mettez à jour la MBR avec :

grub-setup '<DEVICE>'

Modifiez DEVICE ci-dessus selon votre disque d'amorçage, en principe '(hd0)' ou /dev/sda. Si vous utilisez (hd0) assurez-vous d'exclure l'interprétation des parenthèses avec des anti-slashs ou des guillemets simples pour empêcher le shell de les voir comme un sous-shell.

Ce programme utilise les paramètres par défaut suivant, qui sont corrects si vous n'avez pas dévié des instructions ci-dessus :

  • image de démarrage - boot.img

  • image principale - core.img

  • répertoire - /boot/grub

  • plan de périphériques - device.map

  • paramètre racine par défaut - deviné

[Remarque]

Remarque

Le paramètre racine est la valeur par défaut de si une instruction 'set root' n'est pas trouvée dans grub.cfg. C'est la partition qui est explorée pour trouver le noyau et d'autres fichiers de soutien. Il est différent du paramètre 'root=' de la ligne 'linux' dans la ligne configuration. La dernière est la partition que le noyau monte en tant que '/'. Dans l'exemple de grub.cfg ci-dessus, les deux valeurs pointent vers /dev/sda2, mais s'il y a une partition d'amorçage distincte, elles seront différentes.