by Haruka :: 2012/05/11 :: 9 min read
#cli

Configuration de GRUB 2

Petit détail qui à son importance, lorsque vous démarrez GRUB : la version installé s’affiche en haut de l’écran. Sous GRUB 2 vous verrez “GRUB 1.99” et pour la première version de GRUB vous aurez “GRUB 0.99”. Par ailleurs GRUB v1 à été renommé en GRUB Legacy.

Fichiers et dossiers de GRUB

A la différence de GRUB v1, GRUB 2 construit lui même son fichier de configuration principal à partir d’une multitude de scripts.

/boot/grub/grub.cfg : le fameux fichier principal, c’est ce fichier qui s’apparente le plus au menu.lst de GRUB v1. Vous pouvez le modifier, mais dès que GRUB décidera qu’il doit le reconstruire (suite à une mise à jour du noyau, par exemple) vos modifications serrons perdues. C’est la commande “update-grup” qui permet de reconstruire ce fichier (sous Debian et Ubuntu uniquement). Cette commande est un stub de la commande “grub-mkconfig -o /boot/grub/grub.cfg” (qui permet donc de faire la même chose).

/boot/grub/grub.cfg

/etc/default/grub : comme on peut le deviner ce fichier permet de définir les options qui servirons par défaut à GRUB. C’est dans ce fichier que vous mettrez les options à passer au noyau Linux. Le fichier et plutôt bien commenté ; je vous met quelques options intéressantes :

GRUB_GFXMODE="1280x1024x16 1024x768X16 800x600x16" # permet de définir la résolution de GRUB
GRUB_HIDDEN_TIMEOUT=0 # permet de cacher le menu. Il faut taper sur les touches "Echap" ou "Shift" pour y accéder dans le temps impartie en secondes.
GRUB_TIMEOUT=10 # GRUB affichera le menu pendant 5 secondes. Nécessite de commenter l'option ci-dessous pour fonctionner.
GRUB_DEFAULT=0 # permet de choisir le système d'exploitation à démarrer par défaut (zéro étant la première ligne de l'écran de GRUB)
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` # définit la syntaxe des entrées du menu
GRUB_CMDLINE_LINUX_DEFAULT="elevator=deadline quiet splash" # ajouter des options au noyaux

/etc/default/grub

/etc/grub.d/ : ce dossier contient les scripts qui vont construire le grub.cfg. grub.d contient les fichiers suivants :

/etc/grub.d/

Lorsque vous lancerez un update-grub (ou grub-mkconfig -o /boot/grub/grub.cfg), la commande va exécuter tous les scripts de grub.d dans l’ordre numérique du préfixe des scripts. Les fichiers 00_header et 05_debian-theme définissent tout l’entête du fichier grub.cfg. Le premier script s’appuie sur les options de /etc/default/grub et le second définit le thème du menu. C’est entre 10 et 19 que vous aurez les scripts qui vont créer les lignes dans le menu de GRUB dédiées aux systèmes d’exploitations. Dans mon exemple je n’ai qu’un seul script entre 10 et 19 car je n’ai qu’une Ubuntu 12.04 d’installée sur ce PC. Mais en réalité vous n’aurez pas besoin de créer autant de script que d’OS installés car le script 30_os-prober s’appuie sur un programme du même nom pour détecter automatiquement tous les systèmes installés sur l’ordinateur (nous y reviendrons). Quant aux scripts entre 20 et 29 ils sont dédiés aux applications tierses tel que “memtest” ou l’hyperviseur XEN. Bien sûr ce sont des conventions et rien ne vous empèche de mettre un préfixe “06” pour un script lié à un OS. Enfin les scripts 40 et 41 permettent d’ajouter des options ou des entrées personnalisées au menu de GRUB, par exemple pour chaîner sur un autre bootloader.

Important : avant de modifier vos fichiers pensez à en faire des copies. Pour prendre en compte vos modifications lancez la commande “sudo update-grub” ou “sudo grub-mkconfig -o /boot/grub/grub.cfg”.

Installer Grub sur le MBR ou sur une partition

Si GRUB est déjà installé sur le MBR d’un disque il refusera de l’installer en plus sur une partition de ce même disque (ce qui peut parfois être utile avec un chainloader - voir ci-dessous), mais en le “forçant” c’est possible :

Installation sur le MBR :

sudo grub-install /dev/sda

Installation sur une partition du même disque :

sudo grub-install --force /dev/sda4

Installation sur le MBR d’un autre disque :

sudo grub-install /dev/sdb

Démarrer sur le dernier système utilisé

Il faut éditer le fichier /etc/default/grub et modifier deux variables comme indiqué ci-dessous :

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Faites un “sudo update-grub” ou un “sudo grub-mkconfig -o /boot/grub/grub.cfg“pour prendre en compte les modifications.

Chainer sur un autre bootloader

Il faut éditer le fichier /etc/grub.d/40_custum et ajouter à la fin du script les lignes ci-dessous (exemple pour un bootloader installé sur le MBR d’un deuxième disque) :

menuentry 'Bootloader on sdb' {
set root=(hd1)
chainloader +1
}

Faites un “sudo update-grub” ou un “grub-mkconfig -o /boot/grub/grub.cfg” pour prendre en compte les modifications.

Mémo : Exemple nomenclature des disques et partitions pour GRUB

fdisk > GRUB 2

sda > (hd0)

sda1 > (hd0,1)

sda4 > (hd0,4)

sdc > (hd1)

sde8 > (hd2,8)

Remarque : sous GRUB 2 sda1 correspond à (hd0,1) mais sous GRUB v1 sda1 correspond à (hd0,0)

Ajouter un système d’exploitation au menu de GRUB

Après installation d’une autre distribution Linux sur une partition au un disque, vous avez trois possibilités de gérer le démarrage :

Dans ce dernier cas, il faut ajouter une ligne au menu de votre GRUB. Pour ce faire vous pouvez passer par la commande “os-prober” qui va détecter automatiquement tous les systèmes installés sur l’ordinateur (sauf le système courant qui doit être celui correspondant au script 10_linux).

sudo os-prober
sudo update-grub #debian ou ubuntu uniquement
#ou
sudo grub-mkconfig -o /boot/grub/grub.cfg

Sinon vous pouvez créer votre propre script à déposer dans /etc/grub.d. Créez un fichier dans ce dossier, par exemple : 11_Archlinux et ajouter les lignes ci-dessous :

#!/bin/sh
set -e
echo "Adding Archlinux to Grub2"
cat << EOF
menuentry "Archlinux" {
set root=(hd0,3)
linux /boot/vmlinuz
initrd /boot/initrd.img
}
EOF

L’instruction “echo” affichera le texte entre guillement pendant l’exécution de update-grub. Il faut bien sur adapter la linge “set root” avec votre configuration. A la place des lignes “linux” et “initrd”, on aurait pour un Windows la ligne : “chainloader (hd0,4) +1” (par exemple).

Rendez exécutable le script avec la commande “sudo chmod u+x 11_Archlinux”, puis faites un “sudo update-grub” ou un “grub-mkconfig -o /boot/grub/grub.cfg” pour prendre en compte les modifications.

Restaurer GRUB 2

Il peut arriver que vous ne pouvez plus démarrer, ou que GRUB ai été supprimé sauvagement par une installation de Windows. Dans ce cas pas de panique vos installations de Linux ne sont pas perdues, il suffit de restaurer GRUB. Pour ce faire bootez sur un live CD (Je vous recommande Archlinux, car léger et rapide à démarrer).

Exemple pour une restauration sur le MBR du disque sda

mount /dev/sda /mnt
grub-install --root-directory=/mnt /dev/sda

Si ça ne marche pas, vous pouvez essayer de faire un chroot de votre disque dans une live puis de lancer la commande “dpkg-reconfigure grub-pc”.

J’espère que cet article vous aidera à configurer GRUB 2 ou à vous sortir d’un problème. Servez vous des commandes “df -h” et “fdisk -l” (en root) pour bien repérer vos disques et partitions. Par ailleurs, si vous avez des astuces à partager ou si vous souhaitez participer à cet article, n’hésitez pas à laisser un commentaire.

Site officiel du projet GRUB