Grub

Un article de Wiki de la communauté Mandriva.

Jump to: navigation, search
Cette page est une ébauche. Elle mérite des améliorations.
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.

[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

(jcl_vanier)

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 ...

Récupérée de « http://wiki.mandriva.com/fr/Grub »