GRUB : utilisation d'une partition BOOT

De Wiki de la communauté Mandriva.


Attention !
L'astuce décrite ici suppose que le MBR du disque ait été écrit par la version traditionnelle de GRUB, GRUB Legacy, version 0.97 de GRUB qui est utilisée par diverses distributions : Mandriva (2010.2/2011), Mageia, Fedora 15, OpenSuse 11.4 etc. Cette astuce ne fonctionnera pas telle quelle, en revanche, si le MBR a été écrit par GRUB2, qui est utilisé, par exemple, par les versions récentes d'Ubuntu. Si votre démarrage multiple contient Ubuntu, ou une autre distribution utilisant GRUB2, pour faire fonctionner l'astuce décrite dans cette page, veillez à ce que le MBR contienne le GRUB d'une autre distribution, utilisant GRUB Legacy.

Sommaire

Introduction

Cet article indique la procédure pour installer un programme d'amorçage sur une partition dédiée BOOT.

Cette procédure est intéressante pour le cas d'un disque système accueillant plusieurs versions d'un système d'exploitation, ici Mandriva. Le cas de cohabitation de distributions différentes n'est pas abordé ici, à cause de contraintes spécifiques, telles que partage de /home et numérotation UID/GID en particulier. Pour Mandriva, par exemple, on peut imaginer la configuration d'un disque avec la version de cette année (la 2009.0), celle du printemps (2009.1) et une version cooker (2010) pour tester la version à venir.

Pré-requis

Je suppose que le lecteur sait générer un système Linux, distribution Mandriva. Sinon aller visiter les liens ci-dessous:

Une introduction au multi-boot : http://www.bellamyjc.org/fr/theoriemultiboot1.html

Générer un système Linux - Mandriva - Free Edition --> Installer_Mandriva_Linux_Free

On trouve de la documentation sur GRUB aux adresses suivantes :

:Sur le wiki de mandriva : --> Grub

:Sur sa machine : /usr/share/doc/grub-doc

:Sur sa console > info grub


GRUB : GRand Unified Bootloader

GRUB est le chargeur par défaut installé par Mandriva. Le processus qui conduit de la mise sous tension de l'ordinateur jusqu'à l'apparition de l'écran de login de son gestionnaire de fenêtres préféré est une opération complexe (probablement la plus complexe de tout le fonctionnement de l'ordinateur) et met en branle de nombreuses étapes gérées par le BIOS, GRUB, les scripts d'init. Toutes ces opérations agissent au plus près de la configuration matérielle, d'où sa difficulté. Tout comme LILO, il y a avec GRUB un problème de vocabulaire. En général, quand on parle de GRUB, on adresse le programme qui s'exécute automatiquement quand on allume son ordinateur. Mais GRUB est plus que cela, c'est un programme qui s'exécute en ligne de commande et permet de manipuler le processus d'amorçage.

Partitionnement

Nous allons donc commencer par partitionner le disque pour accueillir 3 systèmes Linux, comme indiqué ci-dessus.

Notes :

  • Sur un disque, on ne peut installer que 4 partitions soit "primaire" soit "étendue", donc, généralement 3 "primaires" et une "étendue":
  • Une partition "primaire" n'accueille qu'une seule partition "logique".
  • Une partition "étendue" peut accueillir un nombre quelconque de partitions "logiques".
  • La première partition doit toujours être une partition "primaire".

Le tableau suivant en donne les caractéristiques plus précises.

  • La colonne /dev/sda donne la numérotation des partitions pour /etc/fstab.
  • La colonne hd donne la numérotation pour GRUB. A noter que la numérotation pour GRUB commence à 0 et que la première partition étendue s'appelle toujours hd(0,4).
Exemple de partitionnement d'un disque Linux avec une partition BOOT

Ce partitionnement est donné à titre d'illustration. Ici, les 3 systèmes partagent la même partition HOME pour le dossier /home. Tout autre partitionnement valable peut être choisi. De même, les adresses ne doivent pas être prises au pied de la lettre mais adaptées à votre configuration réelle.

Amorçage itératif

Le MBR (Master Boot Record) est le premier secteur (512 octets) du disque. Il est chargé en mémoire par le BIOS à la mise sous tension de la machine. Il contient la première phase du programme GRUB qui va lui-même aller charger la suite du programme GRUB installé dans le dossier /boot, jusqu'à ce que la totalité du noyau Linux soit chargé en mémoire. Ensuite, les différentes applications seront chargées en mémoire (gestionnaire de fenètres, etc...), jusqu'à ce que l'utilisateur se trouve devant son écran de login.

  • Un système ne peut pas se charger si le MBR est vide.
  • Un MBR ne pointe que sur un seul dossier /boot.


Arborescence Linux

Lors de la génération d'un système Linux, il est possible d'indiquer sur quelle partition doivent être installés les différents dossiers de l'arborescence. Nous conviendrons de faire la différence entre la partition BOOT, entité physique de partitionnement, et son contenu éventuel, le dossier /boot d'un système Linux.

Quand on génère un système Linux, Mandriva installe dans le dossier /boot les fichiers permettant à GRUB de charger le noyau (kernel), soit:

  • kernel.h-2.6.29.1-desktop-4mnb et son lien symbolique kernel.h,
  • vmlinuz-2.6.29.1-desktop-4mnb et son lien symbolique vmlinuz,
  • config-2.6.29.1-desktop-4mnb et son lien symbolique config,
  • initrd-2.6.29.1-desktop-4mnb.img et son lien symbolique initrd.img,
  • etc...
  • Mandriva installe dans le dossier /boot/grub les fichiers de travail de GRUB, dont stage1, stage2 et menu.lst.
  • Mandriva installe dans le dossier /boot le fichier gfxmenu permettant à GRUB de démarrer en mode graphique.


Fichier menu.lst

Le fichier menu.lst indique toutes les entrées qui seront présentées à l'utilisateur pour choisir le système à charger. Exemple de fichier menu.lst, généré pour un système 2009.1, racine avec un label=L2009 et /boot en hd(0,6):

timeout 30
default 0
color black/cyan yellow/cyan
gfxmenu (hd0,6)/gfxmenu

title L2009
kernel (hd0,6)/vmlinuz BOOT_IMAGE=L2009 root=UUID=81dddaa8-a35d-4218-ab42-12b257bc3fc7 splash=verbose resume=UUID=87e37347-05d6-4030-8f55-0ef2581ce929 vga=788
initrd (hd0,6)/initrd.img

title L2009-linux-nonfb
kernel (hd0,6)/vmlinuz BOOT_IMAGE=L2009-linux-nonfb root=UUID=81dddaa8-a35d-4218-ab42-12b257bc3fc7 resume=UUID=87e37347-05d6-4030-8f55-0ef2581ce929
initrd (hd0,6)/initrd.img

title L2009-failsafe
kernel (hd0,6)/vmlinuz BOOT_IMAGE=L2009-failsafe root=UUID=81dddaa8-a35d-4218-ab42-12b257bc3fc7 failsafe resume=UUID=87e37347-05d6-4030-8f55-0ef2581ce929
initrd (hd0,6)/initrd.img

title XP
root (hd1,0)
map (0x81) (0x80)
map (0x80) (0x81)
makeactive
chainloader +1

La directive timeout indique que GRUB attendra 30secondes avant de continuer son exécution.

La directive defaut indique que le système à charger au bout des 30 secondes est celui désigné par la première entrée.

Par défaut, GRUB affiche le menu des systèmes pouvant être chargés en mode texte, la directive color indique les couleurs des entrées du menu en mode normal et quand une entrée est sélectionnée.

La directive gfxmenu indique que le menu des systèmes pouvant être chargés est en mode graphique et que le fond d'écran se trouve dans l'archive gfxmenu sur la partition hd(0,6).

Suivent les trois entrées générées par Mandriva pour le système Linux que l'on vient d'installer :

La directive title indique la chaîne de caractères qui apparaît dans le menu pour cette entrée.

 :la première entrée permet de charger le système nominal,

 :la deuxième entrée permet de charger le système nominal et d'activer le driver de la carte graphique sans « frame buffer »,

 :la troisième entrée permet de démarrer en mode dégradé, mono-utilisateur.

Ces 3 entrées font toutes référence au même noyau (kernel) pointé par le lien symbolique vmlinuz.

La dernière entrée permet de charger un système non-Linux; il s'agit ici de Windows XP qui est sur un autre disque hd(1,0).

La directive chainloader +1 indique à GRUB d'aller charger le premier secteur du disque défini par les directives root et map.

Multi-boot

Par défaut, l'installateur de Mandriva, gère le multi-boot, puisqu'il permet de choisir parmi 3 systèmes Linux pour un même noyau et XP qu'il sait reconnaitre sur votre configuration (bien plus intelligent que Winxxx qui ne sait reconnaître que lui-même et ne tolère pas qu'un autre système soit installé avant lui.) De même, quand Mandriva update ajoute un nouveau noyau: il crée une nouvelle entrée dans le fichier /boot/grub/menu.lst.

Ceci est vrai quand il n'y a qu'un seul système Linux sur le disque; ça se complique dans le cas où il existe 2 ou plusieurs systèmes Linux sur le même disque. En effet, lorque le fichier menu.lst est mis à jour c'est uniquement celui du système actif qui est mis à jour et pas ceux des autres systèmes. Donc, pour bénéficier de toutes les entrées de tous les systèmes, il faut mettre à jour chaque menu.lst avec la somme de toutes les entrées, manuellement. D'où des risques d'erreur et de plantage.

La méthode proposée ici permet de s'affranchir d'une mise à jour manuelle en utilisant la syntaxe :

title Nouveau Linux
root (hd0,x)
chainloader +1

où x indique la partition à charger.

MBR disque 0

Pour initialiser le MBR d'un disque, il y a 2 méthodes.

  1. Par ligne de commande en mode root (non testé) :
    • su
    • grub
      • root hd(0,0)
      • setup (hd0)

    Se référer au manuel de GRUB pour plus de détail: GRUB_le_manuel

  2. Générer un système en prenant soin de spécifier la partition BOOT comme devant contenir /boot lors du partitionnement et d'installer le programme d'amorçage sur le MBR.
    initialisation du MBR

    Ainsi, le MBR pointe sur l'unique partition BOOT qui fera l'aiguillage entre les divers systèmes.

GRUB généralisé : menu.lst partition BOOT

Nous allons utiliser la partition BOOT pour y installer les dossiers nécessaires et suffisants pour charger chacun des systèmes installés sur les partitions L2009, L2009.1 et COOKER.

L'idée est donc d'avoir un bootloader fonction uniquement du partitionnement du disque, avec un GRUB général qui permet de charger n'importe quel système installé sur chacune des partitions du disque. Le fichier menu.lst de la partition BOOT sera donc modifié ainsi:

# Démarrage automatique après 30 secs.
timeout 30
#Couleurs normal/selection du menu texte
color black/cyan yellow/cyan
#Démarrage en mode graphique
gfxmenu (hd0,0)/gfxmenu
# Démarrer par défaut, la deuxième entrée.
default 1

# 1ère entrée : Mandriva 2009.0
title Linux 2009.0
root (hd0,5)
# Chainage du chargeur GRUB depuis le premier secteur de la racine L2009.0
chainloader +1

# 2ème entrée : Mandriva 2009.1
title Linux 2009.1
root (hd0,6)
# Chainage du chargeur GRUB depuis le premier secteur de la racine L2009.1
chainloader +1

# 3ème entrée : Mandriva version en test
title Cooker
root (hd0,7)
# Chainage du chargeur GRUB depuis le premier secteur de la racine Cooker
chainloader +1

# 4ème entrée : XP-SP3
title XP
root (hd1,0)
map (0x81) (0x80)
map (0x80) (0x81)
makeactive
# Chainage du chargeur XP depuis le premier secteur de la racine du deuxième disque
chainloader +1

Génération des differents systèmes

Il suffit maintenant de générer chaque système Linux en spécifiant d'installer le programme d'amorçage sur le premier secteur de la racine de chaque système et non plus sur le MBR du disque. Lors de l'étape de partitionnement, ne spécifier que la racine, ainsi le dossier /boot de ce système sera installé sur la même partition que la racine. Ne pas oublier d'installer, cette fois, le programme d'amorçage sur le premier secteur de la racine:

initialisation du premier secteur de la racine

Chaque système aura ainsi son dossier /boot propre que l'on peut mettre à jour sans interférence avec les autres systèmes. Pour encore plus de souplesse, modifer manuellement le menu.lst de chaque système en rajoutant à la fin du fichier cette entrée supplémentaire :

# Cette dernière entrée permet de revenir au menu principal.
title Retour
root (hd0,0)
configfile /grub/menu.lst

Modification du fond d'écran du menu général

Etant donné qu'on a généré le GRUB du MBR avec une Mandriva 2009, on va donc conserver le même fond d'écran 2009 ad vitam aeternam, alors que les splashscreen des versions installées dans leurs partitions effectives vont évoluer au fil du temps. Pour ceux qui voudraient personnaliser le fond d'écran du menu général, la procédure est décrite dans le wiki de Mandriva Grub#Modifier l'image dans l'écran de choix . Dans une console, entrez en root (ou bien faites une copie dans votre dossier personnel et recopier à la fin):

Image:Konsole.png
[root@ordi ~]# cpio -i < /boot/gfxmenu

Remplacer l'image back.jpg du fond d'écran 2009, par une image de votre choix, mais de même taille et recréer l'archive :

Image:Konsole.png
[root@ordi ~]# cpio -o > /boot/gfxmenu

Exemple de ce que ça donne sur mon installation (avec d'autres paramètres) :

Menu général avec fond d'écran personnalisé

Mode d'emploi

Dans la pratique, on fera les opérations dans l'ordre suivant:

  • : Partitionner son disque selon le nombre de systèmes que l'on souhaite installer:
    •  :: Réserver une toute petite partition de quelque Mo pour abriter le dossier /boot du menu général.
  • : Générer un système minimal (GNOME seul, p.ex, qui servira à initialiser le MBR) en spécifiant :
    •  :: lors du partitionnement : spécifier la partition BOOT comme point de montage du dossier /boot,
    •  :: dans les options d'amorçage : choisir le mode graphique et installer le programme d'amorçage sur le MBR,
  • : Modifier le fichier /boot/grub/menu.lst selon les régles spécifiées plus haut (contenant les instructions chainloader), en fonction de votre partitionnement,
  • : Générer chacun des systèmes dans sa partition:
    •  :: lors du partitionnement : ne pas spécifier de point de montage pour le dossier /boot,
    •  :: dans les options d'amorçage : choisir le mode graphique et installer le programme d'amorçage sur le premier secteur de la partition,
  • : Modifier l'image de fond d'écran du GRUB installé sur le MBR.
  • : Supprimer tous les fichiers installés dans le /boot de la partition BOOT, sauf gfxmenu et le répertoire grub,

Pour charger un système, il faut passer par 2 écrans : celui du menu général, puis celui du système sélectionné. Entrez le texte non formaté ici