Grub
Un article de Wiki de la communauté Mandriva.
Si vous voulez contribuer, cliquez simplement sur l'onglet modifier. Consultez également les autres pages dont le contenu est à réviser.
Sommaire |
[modifier] Présentation
GRUB est un Gestionnaire d'amorçage (ou « chargeur de démarrage », ou « chargeur » ou encore « bootloader ») créé par Erich Boleyn en 1995 ; GRUB est la contraction de GRand Unified Bootloader.
Il se lance immédiatement après le BIOS et se charge de démarrer les systèmes d'exploitation présents sur votre ordinateur.
GRUB est installé par défaut sur votre système depuis la version Mandriva Linux 2007 Spring.
- Pour une présentation détaillée de GRUB, consultez la page GRUB sur Wikipédia.
- Consultez également le manuel de GRUB en français
- Le site Léa-Linux.org
[modifier] Premiers pas avec GRUB
Lors de la découverte de Mandriva, vous possédez le plus souvent un seul disque dur sata où est installé Win XP. Pour installer le premier Mandriva (MDV1) vous avez défragmenté votre disque et lors de l'installation vous avez choisi l'option « Utiliser la place laissée libre par Windows ». C'est une bonne idée de prendre largement la place nécessaire, car vous utiliserez de moins en moins Windows, laissez-lui simplement 1 ou 2 Go. A ce stade, l'installateur de Mandriva a construit le partitionnement suivant :
- sda1 pour Windows XP
- sda5 pour / (partition racine de MDV1, 8 à 10 Go)
- sda6 pour le SWAP (environ 1 Go)
- sda7 pour /home (le reste du disque).
Si vous ouvrez maintenant le fichier de configuration de GRUB : /boot/grub/menu.lst avec par exemple Kwrite ouvert avec les droits root (Menu/exécuter, taper kdesu kwrite et valider), vous pouvez lire quelque chose qui ressemble à cela, sans les commentaires :
timeout 10 color black/cyan yellow/cyan gfxmenu (hd0,4)/boot/gfxmenu default 0 # boot sur MDV1 title linux kernel (hd0,4)/boot/vmlinuz BOOT_IMAGE=linux root=/dev/sda5 resume=/dev/sda6 splash=silent vga=788 initrd (hd0,4)/boot/initrd.img # boot sur MDV1 en mode dégradé title linux-nonfb kernel (hd0,4)/boot/vmlinuz BOOT_IMAGE=linux-nonfb root=/dev/sda5 resume=/dev/sda10 initrd (hd0,4)/boot/initrd.img title failsafe kernel (hd0,4)/boot/vmlinuz BOOT_IMAGE=failsafe root=/dev/sda5 failsafe initrd (hd0,4)/boot/initrd.img # boot sur Win XP title windows root (hd0,0) makeactive chainloader +1
Plus tard, pour installer la nouvelle version de Mandriva (MDV2), il est conseillé de faire une installation propre, c'est-à-dire sur une partition formatée. Pour éviter tout problème, l'idéal est même de créer une nouvelle partition pour installer MDV2 aux cotés de MDV1. MDV1 fonctionnera quoiqu'il arrive pendant ou juste après l'installation de MDV2. Il suffit de redimensionner sda7 (sous root ou avec une Mandriva One) et de créer sda8. On obtient le partitionnement suivant :
- sda1 pour Windows XP
- sda5 pour / (partition racine de MDV1, 8 à 10 Go)
- sda6 pour le SWAP (environ 1 Go, commun à MDV1 et MDV2)
- sda7 pour /home (20 à 50 Go, commun à MDV1 et MDV2)
- sda8 pour / (partition racine de MDV2, 8 à 10 Go).
Hélas après l'installation de MDV2, GRUB est devenu :
timeout 10 color black/cyan yellow/cyan gfxmenu (hd0,7)/boot/gfxmenu default 0 # boot sur MDV2 title linux kernel (hd0,7)/boot/vmlinuz BOOT_IMAGE=linux root=/dev/sda8 resume=/dev/sda6 splash=silent vga=788 initrd (hd0,7)/boot/initrd.img # boot sur MDV2 en mode dégradé title linux-nonfb kernel (hd0,7)/boot/vmlinuz BOOT_IMAGE=linux-nonfb root=/dev/sda8 resume=/dev/sda6 initrd (hd0,7)/boot/initrd.img title failsafe kernel (hd0,7)/boot/vmlinuz BOOT_IMAGE=failsafe root=/dev/sda8 failsafe initrd (hd0,7)/boot/initrd.img #boot sur Win XP title windows root (hd0,0) makeactive chainloader +1
Grub ne connait plus MDV1 et vous propose de booter sur MDV2 ou sur Win XP. Pour récupérer le boot sur MDV1, il suffit d'ajouter n'importe où dans /boot/grub/menu.lst :
title Le_Mandriva_précédent kernel (hd0,4)/boot/vmlinuz root=/dev/sda5 resume=/dev/sda6 initrd (hd0,4)/boot/initrd.img
[modifier] Astuces avec GRUB
[modifier] Modifier une entrée Grub au démarrage
Pour modifier une entrée Grub au démarrage, déplacez votre curseur avec les touches clavier et une fois placé sur l'entrée à modifier, appuyez sur "e" (éditer).
Vous voyez alors apparaître les lignes de commandes qui composent cette entrée et vous pouvez les modifier à leur tour en vous plaçant sur chaque ligne et en appuyant sur 'e'.
Le contenu réel de la ligne apparaît alors et vous pouvez utiliser les touches droite et gauche pour vous déplacer au sein de la ligne et modifier normalement l'entrée. Attention, le clavier est en mode qwerty (la lettre m s'obtient par la touche ',' par exemple, les chiffres s'obtiennent sans appuyer sur la touche SHIFT). Vous pouvez aussi utiliser l'auto complétement des commandes, des noms de fichiers et des partitions en appuyant sur TAB.
Une fois l'entrée modifiée, appuyez sur Entrée pour la valider ou Echap pour annuler vos modifications.
Quand vous avez modifié toutes les lignes d'une entrée, si vous voulez démarrer avec vos modifications, appuyez sur 'b', sinon Echap annulera toutes vos modifications et vous ramènera au menu principal.
[modifier] Plusieurs Systèmes d'exploitation avec GRUB
Quand vous choisissez d'avoir une entrée pour Windows dans votre chargeur de démarrage, Grub utilise la fonction chainloader.
Cette fonction peut être utilisée pour démarrer dans un autre Mandriva Linux, ou un autre Linux ou au autre OS, tant qu'ils ont leur propre chargeur de démarrage installé sur leur partition racine plutôt que sur le MBR (dans la Mandriva, cette option est possible lors de l'installation, dans la phase Résumé).
Il vous suffit pour cela d'avoir une entrée dans votre boot/grub/menu.lst :
- title maCooker
- root (hd0,3)
- chainloader +1
Dans cet exemple, on met en service une Mandriva Linux en créant pour elle une entrée appelée "maCooker", qui pointe vers la partition hda4 (Grub fonctionne ainsi: 0 pour a, 1 pour b, etc., puis il compte les partitions à partir de 0 donc la quatrième est: 0 1 2 : reportez-vous aux conventions de nommage du manuel) 3 . On obtient donc au final : (hd0,3).
Ceci veut dire que vous pouvez installer plusieurs Mandriva Linux avec leurs propres Chargeurs de Démarrages (Lilo ou Grub) et avoir pour chacune facilement, une entrée dans le chargeur de démarrage principal. Si ces entrées sont déjà prêtes, une par partition, quand vous installez, réinstallez ou effacez un Linux sur ces partitions, elles seront immédiatement disponibles au redémarrage, tant que vous installez le chargeur de démarrage propre à chacune sur leur partition racine plutôt que sur le MBR.
[modifier] Conserver son MBR intact avec le chargeur Windows lors d'une installation de Mandriva Linux
Si vous débutez sous Mandriva, il se peut que vous ayez des hésitations, et que vous souhaitiez que votre ordinateur démarre "comme avant". C'est une des questions que posent souvent les nouveaux utilisateurs de Mandriva venant de Windows.
Dans ce cas, l'une des solutions consiste à installer Lilo ou GRUB sur une disquette (si vous avez encore un lecteur ! (1) ), ce qui a pour effet de conserver le MBR tel quel. Lors de l'installation, cela se configure à l'étape de résumé où vous allez pouvoir configurer le démarrage, en sélectionnant un démarrage de votre système sur le lecteur fd0 (floppy disk 0).
Ainsi, lorsque vous insèrerez votre disquette dans le lecteur au démarrage (et que votre bios est configuré avec une séquence de démarrage comprenant le lecteur de disquette en premier), Lilo ou GRUB prendra la main et vous proposera de démarrer sur le système de votre choix ; si vous ôtez la disquette, Windows démarrera comme s'il était tout seul !
(1) GRUB peut aussi être installé sur un CD , mais l'installateur de Mandriva (ni aucun autre à ma connaissance) ne le propose pas.
[modifier] Modifier l'image dans l'écran de choix
Grub est doté, avec la commande gfxmenu, de la capacité d'afficher un écran de démarrage graphique digne de ce nom. Avant, avec splashimage l'image était limitée à 640x480 pixels en 16 couleurs. On pouvait arriver à 800x600 en trichant un peu ...
gfxmenu, utilisable par grub depuis la version grub-0.97-20mdv2007.1, agit comme une surcouche et peut afficher n'importe quelle image jpeg de la taille correspondant à celle indiquée dans les options passées au noyau. Par exemple, avec vga=788 on a un affichage en 800x600 (drakboot donne directement la taille).
En fait les développeurs de Suse ont réalisés un ensemble d'utilitaires, gfxboot, permettant de produire une archive lisible par gfxmenu (plus exactement c'est mkbootmsg qui produit l'archive). Cependant la mise en oeuvre de A à Z est assez complexe (1). Il est même possible d'incruster une image animée...
Mandriva a préparé une archive toute faite: /usr/share/gfxboot/themes/Mandriva/boot/message
Celle-ci est copiée dans le répertoire /boot par drakboot lorsqu'on configure grub en mode graphique sous le nom /boot/gfxmenu
Il est possible d'extraire les fichiers de cette archive dans le répertoire courant avec cpio:
cpio -i < /boot/gfxmenu
de changer l'image back.jpg et de reconstruire l'archive:
ls | cpio -o > /boot/gfxmenu
Tout cela en tant que root.
Pour ceux qui se lassent du pingouin bleu, voici un petit script shell qui simplifie et sécurise un peu le processus. Il suffit de préparer une image jpeg (de la bonne taille: 800x600) et d'appeler le script avec le nom de l'image (chemin absolu, comme /home/totoche/image/splash.jpg). Il devrait être possible de l'appeler avec un programme qui choisirait une image aléatoire à chaque démarrage.
Marche à suivre: Enregistrer le fichier sous un nom quelconque, UpdateGfxMenu par exemple, et donner les droits suivants au fichier :
chown root:root UpdateGfxMenu chmod 750 UpdateGfxMenu
Par sécurité, ne jamais donner les droits en écriture sur un script root pour d'autres utilisateurs que root, sinon une simple ligne insérée dans le script par un utilsateur quelconque permet d'obtenir un shell root, ou une copie des fichiers de mots de passe pour n'importe quel attaquant.
#!/bin/bash # # UpdateGfxMenu : Modification de l'image et du menu de boot de GRUB utilisant gfxmenu # Auteurs : Jacques Ferre (et Jcl Vanier) # # Recuperation du nom du script et du fichier de menu SCRIPTNAME=$(basename $0) MESSAGE=/boot/gfxmenu # Fichier et repertoire temporaire CPIODIR=/tmp/cpiodir.$$ # Test des droits de l'utilisateur (root imperatif) et des parametres recus if [ $UID -ne 0 ] ; then echo "$SCRIPTNAME ne peut fonctionner que sous le compte root, abandon..." exit 1 elif [ -z "$1" ] ; then echo "Usage : $SCRIPTNAME fichier_image.jpg" exit 1 elif [ -z "$(file $1 | grep JP.*G)" ] ; then echo "$1 n'est pas une image jpg valide, abandon..." exit 1 elif [ $(echo $1 | cut -c1) != "/" ] ; then echo "Le chemin de l'image doit commencer par / (chemin absolu), abandon..." exit 1 fi # Controle du menu de boot if [ ! -f $MESSAGE ] ; then echo "Le menu de grub n'utilise pas gfxmenu, abandon..." exit 1 elif [ -z "$(file $MESSAGE | grep "cpio")" ] ; then echo "$MESSAGE n'est pas une archive valide pour gfxmenu, abandon..." exit 1 fi # Sauvegarde automatique du menu (On conserve les 5 derniers uniquement) # Modifier les valeurs de la boucle pour en conserver plus for OLD in 4 3 2 1 ; do if [ -f ${MESSAGE}.${OLD} ] ; then # BAK contient la valeur du nouvel index BAK=$OLD ; let BAK+=1 # Copie du fichier OLD en BAK en ecrasant l'ancien (/boot/gfxmenu.5 a .2) cp -f ${MESSAGE}.${OLD} ${MESSAGE}.${BAK} fi done # Sauvegarde du menu courant en .1 cp -f ${MESSAGE} ${MESSAGE}.1 # Recuperation du nombre de menus sauvegardes (si different de 5, modifier en consequence) NBMENU=$(ls ${MESSAGE}.[1-5] | wc -l) # Creation du repertoire temporaire et sauvegarde du repertoire courant mkdir $CPIODIR ; OLDIR=$(pwd) # Recuperation des fichiers du menu courant cd $CPIODIR ; cpio -i < $MESSAGE 2>/dev/null # Suppression de l'image existante rm -f $CPIODIR/back.jpg # Mise a jour avec la nouvelle image cp $1 $CPIODIR/back.jpg # Creation de la nouvelle archive ls | cpio -o > $MESSAGE 2>/dev/null # Retour au repertoire d'origine et suppression des fichiers de travail cd $OLDIR ; rm -rf $CPIODIR # Information du resultat echo "Le nouveau menu est disponible avec l'image $(basename $1)" if [ $NBMENU -eq 1 ] ; then echo "L'ancien menu est disponible dans le fichier ${MESSAGE}.1" elif [ $NBMENU -gt 1 ] ; then echo "Les anciens menus sont disponibles dans ${MESSAGE}.1 ==> ${MESSAGE}.${NBMENU}" fi
En cas de problème, archive cpio non reconnue par grub par exemple, le menu sera affiché en mode texte et le démarrage sera toujours possible. Il suffira de recopier l'archive d'origine dans /boot.
(1) gfxboot, inclus dans mandriva, est un langage spécialisé ayant beaucoup de ressemblances avec Forth, langage de manipulation de pile. Des outils permettent de traduire les scripts en byte-codes qui seront inclus dans une archive cpio. Dans Mandriva, cette archive contient aussi une image de fond (back.jpg), une police de caractères (16x16.fnt), une image composée pour une inscrustration animée (timer.jpg) et des fichiers de messages en différentes langues. gfxboot n'est pas uniquement destiné à grub mais aussi à lilo. Le paquetage contient, la référence du langage et un ensemble de scripts composant le thème initial de Suse. Une excellente source d'étude ...