Grub : Utilisation d'un bootloader

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search
Grub

Software version 1 & 2
Operating System Linux
Website Grub Website
Last Update 25/04/2012
Others

1 Introduction

GNU GRUB (acronyme signifiant en anglais « GRand Unified Bootloader ») est un programme d'amorçage de micro-ordinateur. Il s'exécute à la mise sous tension de l'ordinateur, après les séquences de contrôle interne et avant le système d'exploitation proprement dit, puisque son rôle est justement d'en organiser le chargement. Lorsque le micro-ordinateur héberge plusieurs systèmes (on parle alors de multi-amorçage), il permet à l'utilisateur de choisir quel système démarrer.

Ses avantages sont multiples. Tout d'abord, c'est un logiciel libre. Ensuite, il permet notamment la gestion d'autres systèmes que Linux et Windows (utile pour Hurd, Solaris, FreeBSD et OpenBSD), la lecture de la configuration au démarrage (pas besoin de réinstaller GRUB dans le secteur d'amorçage après un changement de configuration, contrairement à LILO), une ligne de commande permettant de changer la configuration au démarrage et surtout la reconnaissance en natif de divers systèmes de fichiers existants. Il possède également une sorte de langage de commande simple permettant de « rattraper » un amorçage qui se serait mal passé, suite au mauvais adressage d'une partition, par exemple.

Grub doit être capable de reconnaître tous les systèmes de fichiers sur lesquels il pourrait être amené à démarrer. Il est pour cette raison beaucoup plus volumineux que LILO.

Il fait partie du projet GNU.

2 Restaurer Grub suite à un problème

2.1 Grub 1

  • Booter le PC avec un disque d’installation Debian (net install par exemple)
  • A l’invite de commande tapez ceci : rescue root=/dev/hda2

Note : hda2 correspond à la partition ou se trouve le kernel (/boot)

  • Continuer la procédure en répondant aux différentes questions sur votre installation
  • Pour terminer, choisissez l’option restaurer GRUB et suivez la procédure indiquée

2.2 Grub 2

2.2.1 Ecraser le MBR

Lorsqu'un autre gestionnaire d'amorçage a pris la place de grub-pc dans le MBR :

  • Bootez sur un système contenant grub-pc par défaut (par exemple le live-CD linux)
  • Montez le disque contenant le /boot/grub/grub.cfg que grub-pc devra utiliser (par exemple en allant sur "Raccourcis/Dossier personnel" en cliquant sur le disque concerné sur la gauche, puis, ok pour autoriser son montage)
  • Lancez ensuite la commande suivante en remplaçant "DisqueOùJ'aiMonBoot" par votre point de montage et /dev/sda éventuellement par le disque qui devra contenir grub-pc sur le MBR :
Command
sudo grub-install --root-directory=/media/DisqueOùJ'aiMonBoot /dev/sda

  • Redémarrez en enlevant votre live-cd ou votre clé-usb d'amorçage.

2.2.2 Les Stages et options de boot

Voici les différents stages avec les options pour booter dans un mode fonctionnel et tenter de récupérer l'erreur qui empêche le boot correct :

   Problem Stage   Boot Option  
  ------------------------------- 
            BIOS | 
                 |  Linux rescue
            GRUB | 
                 |  grub shell
Kernel or Initrd | 
                 |  kernel .. root=LABEL=root init=/bin/bash
            init |
                 |  kernel .. root=LABEL=root emergency
      rc.sysinit |
                 |  kernel .. root=LABEL=root single
rc scripts (K,S) |
                 |  kernel .. root=LABEL=root 1
        rc.local |
                 v

3 Paramétrer un noyau de secours

L'idée ici est de mettre en place une solution pour que si le kernel crash au boot, il puisse redémarrer sur un ancien kernel. Nous allons pour cela utiliser une méthode de failback intégrée à Grub. Il va simplement falloir rajouter quelques lignes :

Configuration File /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/myvg-rootvol
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=savedfallback 0 1timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.32-220.4.2.el6.x86_64)
	root (hd0,0)
	kernel /vmlinuz-2.6.32-220.4.2.el6.x86_64 ro root=/dev/mapper/myvg-rootvol rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=fr LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto rd_LVM_LV=myvg/rootvol rd_NO_DM
	initrd /initramfs-2.6.32-220.4.2.el6.x86_64.img
        savedefault fallbacktitle Red Hat Enterprise Linux Server (2.6.32-220.2.1.el6.x86_64)
	root (hd0,0)
	kernel /vmlinuz-2.6.32-220.2.1.el6.x86_64 ro root=/dev/mapper/myvg-rootvol rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=fr LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto rd_LVM_LV=myvg/rootvol rd_NO_DM
	initrd /initramfs-2.6.32-220.2.1.el6.x86_64.img
        savedefault fallbacktitle Red Hat Enterprise Linux (2.6.32-220.el6.x86_64)
	root (hd0,0)
	kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/myvg-rootvol rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=fr LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto rd_LVM_LV=myvg/rootvol rd_NO_DM
	initrd /initramfs-2.6.32-220.el6.x86_64.img
        savedefault

Quelques petites explications s'imposent :

  • savedefault fallback : cette ligne permet de dire que c'est un des kernel que nous allons utiliser en cas de problèmes
  • fallback 0 1 : spécifie que nous souhaitons booter sur le kernel 0 puis 1 dont les lignes de savedefault sont présentes

4 Installer un bootsplash

4.1 Introduction

C'est beau hein ?! T'en veux un aussi ! Allez... Il faut déjà avoir ceci de compilé au niveau du kernel :

Command grep CONFIG_FRAMEBUFFER_CONSOLE < /boot/config-`uname -r`
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y

Une fois que c'est fait, on peut passer à la suite.

4.2 Installation

Installez ceci :

Command apt-get
apt-get install bootsplash bootsplash-theme-debian grub-splashimages

4.3 Configuration

4.3.1 Résolution de Grub

Pour changer la taille des getty (terminaux) de grub, il faut éditer le fichier /boot/grub/menu.lst :

Configuration File /boot/grub/menu.lst
# defoptions=

Remplacez le par celui-ci :

Configuration File /boot/grub/menu.lst
# defoptions=vga=791 quiet splash

Laissez bien le "#", c'est important !

4.3.2 Splashimages

Voici un exemple à insérer dans /boot/grub/menu.lst :

Configuration File /boot/grub/menu.lst
## Splashimages
splashimage=(hd0,1)/grub/splashimages/fiesta.xpm.gz

Remplacez (hd0,1) par celui de votre disque de boot (/boot)

4.4 Validation

Pour finir, il faut valider votre configuration :

Command update-grub
update-grub

Si vous avez tout bien fait, vous devriez en retournant dans votre configuration voir vos nouveaux paramètres qui n'ont pas bougés. Si ils ont disparu, c'est que vous avez fait une erreur dans votre configuration.

4.5 Convertion d'une image pour Grub

Si vous souhaitez convertir une image pour utiliser dans grub :

Command convert
convert image123.png -colors 14 -resize 640x480 grubimg.xpm

  • La taille doit être : 640x480 pixels
  • Seulement 14 coleurs
  • Au format XPM

Déplacez là au bon endroit et insérez là ensuite dans votre grub :

Configuration File /boot/grub/menu.lst
## Splashimages
splashimage=(hd0,1)/grub/splashimages/grubimg.xpm

5 References

http://www.debianaddict.org/article67.html
http://www.gnu.org/software/grub/manual/legacy/Booting-fallback-systems.html
http://www.linuxscrew.com/2012/04/24/grub-fallback-boot-good-kernel-if-new-one-crashes/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+linuxscrew+%28LinuxScrew%3A+Linux+Blog%29