Multiboot avec GRUB2

Last update
2010-11-03

Le GRUB nouveau est arrivé

C'est devenu une habitude, au bout de quelques années de bons et loyaux services, une équipe de développeurs open source jette aux orties toute une base de code pour repartir de zéro. C'est ce qui semble s'être produit avec le passage de GRUB à GRUB2. Là vous êtes bons pour un rude réveil. Mais ne vous affolez pas, au bout de quelques semaines, (mois ? années ?), GRUB2 vous deviendra aussi familier que le furent LILO ou bien GRUB.

multiboot2.jpg

Avions-nous besoin d'un nouveau bootloader ? Probablement non. (Avions-nous besoin d'aller sur la lune ?). Selon l'équipe de développeurs, le code de GRUB était vieillissant et devenu difficile à maintenir. La nécessité de supporter de nouveaux matériels et de nouvelles plateformes semblaient hors d'atteinte à partir du code originel.

C'est ce qui semble avoir entraîné la décision de le "poubelliser" et de repartir sur de nouvelles bases. Les développeurs ont saisi cette opportunité pour pratiquer une politique de rupture (on dit aussi faire table rase) totale avec ce qui a précédé. Ainsi, le schéma général et la syntaxe des fichiers de configuration ont été entièrement repensés. Il a aussi été enrichi de nouvelles possibilités, telles que le mode rescue, un menu graphique amélioré, support du splash screen, support de plateformes non x86 (Power PC), support complet des UUIDs.


Quelques larmes sur le passé

Avant de découvrir les spécificités de GRUB2, penchons-nous une dernière fois sur ce qui a précédé. GRUB, et avant lui LILO, ont été des bootloaders très populaires et adoptés par la plupart des distributions Linux. Rappelons pour les néophytes que GRUB permet de choisir, au démarrage de votre ordinateur, entre un ou plusieurs operating systems, de charger les kernels et initrd respectifs en mémoire et lancer la suite du processus de démarrage, que ce soit pour Linux, Windows ou autre. GRUB est entièrement configurable et s'organise lui-même en quelques programmes centraux et répertoires.

/boot/grub/menu.lst
Fichier de configuration par défaut, sur certaines distribs c'est un lien symbolique vers /boot/grub/grub.conf . Toute la config de GRUB est dans ce fichier, lequel peut être édité directement pour changer les options.

/usr/sbin/grub
C'est le binaire de GRUB qui vous permet de l'installer sur votre disque.

/usr/sbin/grub-install
Un front-end qui rend plus simple l'installation

/usr/sbin/update-grub
Permet d'automatiser la configuration de menu.lst, détecte les kernels disponibles sur votre système et construit menu.lst pour vous. Peut aussi lire les options dans les commentaires de menu.lst et automatiser la mise disposition des modes rescue, memtest86+ et autres personalisations.

Malgré la présence du fichier de configuration menu.lst , GRUB permet de changer toute option à partir du prompt de boot. Lorsque le menu de GRUB est affiché, en pressant et maintenant Escape, vous pouvez changer au vol les options de boot.

Découverte de GRUB2

Voilà ! Après vous être rafraîchi la mémoire à propos de GRUB oubliez tout cela promptement, car tout a changé. D'abord la touche par défaut pour éditer les options de GRUB2 au boot est Shift et non Escape. Ensuite, le fichier de configuration principal n'est plus /boot/grub/menu.lst mais /boot/grub/grub.cfg , dont la syntaxe est très différente de celle de menu.lst .

Un changement notoire de syntaxe concerne la numérotation des partitions. Là ou GRUB numérotait les partitions à partir de 0 (zéro) inclus, GRUB2 part de 1. Sans doute pour ajouter à la confusion ambiante le numérotage des disques (devices) commence toujours, lui, à 0 (zéro).

Ainsi:
GRUB: /dev/sda1 = (hd0,0)
devient
GRUB2: /dev/sda1 = (hd0,1)

Si, à l'aide de votre éditeur favori, vous regardez comment se présente le grub.cfg de GRUB2, c'est sûr que vous serez désorienté, car il ne resemble en rien à ce qui vous était familier précédemment. Avant de reprendre votre souffle et d'étudier cette nouvelle syntaxe, tenez vous pour dit qu'il est vivement déconseillé d'éditer grub.cfg . Ce fichier est maintenant généré à partir d'une série de scripts et de fichiers de configuration (voir ci-après) et toute modification serait surchargée (overwritten) chaque fois qu'une mise à jour d'un package lancerait un update de GRUB2.

Voici quelques fichiers qui définissent la configuration de GRUB2

/boot/grub/grub.cfg
Ceci est le coeur de la configuration de GRUB2 , ne doit pas être édité.

/etc/default/grub
Fichier principal de configuration que l'utilisateur final peut éditer. Vous pouvez y configurer un sous-ensemble limité des options de GRUB2 : timeouts, options de base de boot du kernel, usage d'une console graphique, usage des UUIDs. Tout changement dans ce fichier implique un run de /usr/sbin/update-grub afin que les changements soient pris en compte dans /boot/grub/grub.cfg . Voici un aperçu de la syntaxe de /etc/default/grub

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=0
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR='lsb_release -i -s >2 /dev/null || echo Debian'
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

/etc/grub.d/
Ce répertoire contient une série de scripts, lesquels, exécutés dans l'ordre croissant de leur numérotation, configurent diverses parties de grub.cfg. Voici un exemple susceptible de varier selon les distributions.

$ ls /etc/grub.d

00_header	10_linux	30_os-prober	README
05_debian_theme	20_memtest86+	40_custom

L'ordre dans lequel ces scripts apparaissent dans ce répertoire commande l'ordre dans laquel les options apparaissent dans grub.cfg . Ainsi, si voulez faire apparaître un autre OS immédiatement après Linux dans le menu de GRUB2, vous devrez nommer votre script

15_windows

(par exemple). Si vous désirez créer des options personalisées, non susceptibles d'être surchargées lors d'un update, utilisez

40_custom

/usr/sbin/grub-install
Comme avec GRUB c'est la méthode recommandée pour installer GRUB2 sur un device. Il fait appel divers scripts et effectue les tests nécessaires pour intaller GRUB2 et rendre votre device bootable.

/usr/sbin/update-grub
Toujours d'actualité et reste la voie recommandée pour mettre à jour /boot/grub.cfg , mais maintenant il existe un petit script shell qui exécute grub-mkconfig. Quand vous avez édité un fichier de configuration lancez cette commande sans arguments afin de reconstruire grub.cfg .

/usr/sbin/grub-mkconfig
C'est lui qui procède à la reconstruction de grub.cfg en exécutant les divers scripts contenus dans /etc/grub.d/

En plus des changement signalés ci-dessus

- GRUB2 ne comporte plus de stage 1.5 dans le process de boot

- dans les dernières moutures de Ubuntu, si aucun autre OS n'est présent dans grub.cfg , le menu n'est pas affiché et Linux est lancé directement.

- enfin rappelons que c'est Shift qui doit être maintenu au lieu de Escape pour changer les options au boot.

Voilà! Maintenant à vous d'apprivoiser GRUB2. Et souvenez-vous... il ne mord pas.

Bibliographie

Les informations ci-dessus sont tirées de diverses publications et en particulier de:
Break in Your boots, Kyle Rankin, Linux Journal, September 2010, p.32

Sur le web: linuxpedia.fr/doku.php/expert/grub2

Configurateur graphique

GRUB2 peut maintenant être configuré en mode graphique avec startupmanager. Celui-ci est un projet Ubuntu adapté pour Debian, il procure un interface facile à utiliser.

linuxappfinder.com/package/startupmanager
packages.debian.org/fr/sid/startupmanager


          
File: grub2.html - Robert L.E. Billon, 2010-08-27 - Last update : 2011-12-20