Grub2
Grub2 est le chargeur de boot par défaut dans Ubuntu 9.10. Il est chargé de lancer l’OS et permet le choix quand plusieurs OS sont installés sur une même machine. En ce sens, il n’est pas différent de Grub1 renommé pour l’occasion Grub legacy.
Les avantages de Grub2 sont entre autres:
- Support de scripts incluant des fonctions et des tests
- Un mode de réparation (mode rescue)
- Le support des thèmes
- Le support de menus personnalisés
- le boot depuis un CD directement depuis le disque dur sans reboot
- …
La version 9.10 d’Ubuntu est une version de transition en ce qui concerne Grub. Un nouvelle installation d’Ubuntu 9.10 installera Grub2 tandis qu’une mise à jour depuis 9.04 gardera l’ancien Grub legacy. Pas toujours simple de s’y retrouver et les questions et problèmes soulevés dans les forums sont nombreux.
Installation de Grub2
Les paquets nécessaires à l’installation de Grub2 sont grub-pc et grub-common
$ sudo aptitude install grub-pc
Un script vous prendra en main pour mener à bien cette installation et importer dans Grub2 les infos recueillies dans le menu de boot de Grub legacy. Au redémarrage, un choix supplémentaire apparaîtra dans le menu de Grub legacy qui permet de chaîner ce menu avec celui de Grub2 de façon à tester le système.
A ce stade, testez les différents choix du menu et vérifiez que tout se passe bien. Si c’est le cas, vous pouvez opter définitivement pour Grub2 de cette manière:
$ sudo upgrade-from-grub-legacy
Répondez aux question une fois encore et vous aurez migré de Grub legacy vers Grub2.
Configuration de Grub2
Le fichier /boot/grub/menu.lst de Grub legacy n’existe plus. Il est, en gros, remplacé par le fichier /boot/grub/grub.cfg qui contient ce qui ressemble le plus à l’ancien menu.lst, c’est à dire, les informations sur les différents OS et comment les booter. Ce fichier ne doit pas être édité par l’utilisateur. Son contenu dépend du résultat d’une série de scripts lancés lorsqu’on fait un:
$ sudo update-grub
Le fichier /etc/default/grub, qui peut être édité, contient des infos comme l’OS à lancer par défaut ou le nombre de secondes avant le lancement de l’OS par défaut.
Le dossier /etc/grub.d qui contient les différents scripts qui vont construire le fichier /boot/grub/grub.cfg lorsque la commande update-grub est lancée. Dans ces scripts, il faut noter la présence du script 05_debian_theme qui permet d’insérer une image de fond (splash image), le script 30_os-prober qui est chargé de détecter les OS sur les disques et 40_custom qui est le script qui permet d’insérer des entrées personnalisées.
Voici à quoi ressemble le fichier /etc/default/grub:
$ cat /etc/default/grub # If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. GRUB_DEFAULT=0 #GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=10 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="" # Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' #GRUB_GFXMODE=640x480 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entrys #GRUB_DISABLE_LINUX_RECOVERY="true"
Et le fichier /boot/grub/grub.cfg. Il s’agit de mon fichier de configuration et vous pouvez voir qu’en plus d’Ubuntu, j’ai une Debian Squeeze qui est installée sur l’autre disque de mon PC.
$ cat /boot/grub/grub.cfg # # DO NOT EDIT THIS FILE # # It is automatically generated by /usr/sbin/grub-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub # ### BEGIN /etc/grub.d/00_header ### if [ -s /boot/grub/grubenv ]; then have_grubenv=true load_env fi set default="0" if [ ${prev_saved_entry} ]; then saved_entry=${prev_saved_entry} save_env saved_entry prev_saved_entry= save_env prev_saved_entry fi insmod ext2 set root=(hd1,1) search --no-floppy --fs-uuid --set b298d612-cb12-478a-8109-4cee1a0226f2 if loadfont /usr/share/grub/unicode.pf2 ; then set gfxmode=640x480 insmod gfxterm insmod vbe if terminal_output gfxterm ; then true ; else # For backward compatibility with versions of terminal.mod that don't # understand terminal_output terminal gfxterm fi fi if [ ${recordfail} = 1 ]; then set timeout=-1 else set timeout=10 fi ### END /etc/grub.d/00_header ### ### BEGIN /etc/grub.d/05_debian_theme ### set menu_color_normal=white/black set menu_color_highlight=black/white ### END /etc/grub.d/05_debian_theme ### ### BEGIN /etc/grub.d/10_linux ### menuentry "Ubuntu, Linux 2.6.31-14-generic-pae" { recordfail=1 if [ -n ${have_grubenv} ]; then save_env recordfail; fi set quiet=1 insmod ext2 set root=(hd1,1) search --no-floppy --fs-uuid --set b298d612-cb12-478a-8109-4cee1a0226f2 linux /boot/vmlinuz-2.6.31-14-generic-pae root=UUID=b298d612-cb12-478a-8109-4cee1a0226f2 ro quiet splash initrd /boot/initrd.img-2.6.31-14-generic-pae } menuentry "Ubuntu, Linux 2.6.31-14-generic-pae (recovery mode)" { recordfail=1 if [ -n ${have_grubenv} ]; then save_env recordfail; fi insmod ext2 set root=(hd1,1) search --no-floppy --fs-uuid --set b298d612-cb12-478a-8109-4cee1a0226f2 linux /boot/vmlinuz-2.6.31-14-generic-pae root=UUID=b298d612-cb12-478a-8109-4cee1a0226f2 ro single initrd /boot/initrd.img-2.6.31-14-generic-pae } ### END /etc/grub.d/10_linux ### ### BEGIN /etc/grub.d/20_memtest86+ ### menuentry "Memory test (memtest86+)" { linux16 /boot/memtest86+.bin } menuentry "Memory test (memtest86+, serial console 115200)" { linux16 /boot/memtest86+.bin console=ttyS0,115200n8 } ### END /etc/grub.d/20_memtest86+ ### ### BEGIN /etc/grub.d/30_os-prober ### menuentry "Debian GNU/Linux, kernel 2.6.26-2-686 (on /dev/sda1)" { insmod ext2 set root=(hd0,1) search --no-floppy --fs-uuid --set 436e7961-5c40-412f-b27e-0f8ce60b19e4 linux /boot/vmlinuz-2.6.26-2-686 root=/dev/hda1 ro quiet initrd /boot/initrd.img-2.6.26-2-686 } menuentry "Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode) (on /dev/sda1)" { insmod ext2 set root=(hd0,1) search --no-floppy --fs-uuid --set 436e7961-5c40-412f-b27e-0f8ce60b19e4 linux /boot/vmlinuz-2.6.26-2-686 root=/dev/hda1 ro single initrd /boot/initrd.img-2.6.26-2-686 } ### END /etc/grub.d/30_os-prober ### ### BEGIN /etc/grub.d/40_custom ### # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. ### END /etc/grub.d/40_custom ###
Mode rescue
Si Grub2 ne peut booter l’OS demandé, il vous donnera accès au mode rescue qui permet d’entrer des commandes et essayer de lever le problème. Pour cela, vous devez connaitre la partition sur laquelle est installé le noyau c’est à dire où se trouve le répertoire /boot. Si vous ne connaissez pas ces informations, utilisez un LiveCD ou directement les commandes de grub rescue comme la commande ls ou ls /boot qui permet d’inspecter les partitions à la recherche de celle contenant le noyau:
grub rescue> set root=sdxy # sdxy est la partition où se trouve /boot grub rescue> insmod /boot/grub/linux.mod # Charge le module linux grub rescue> linux /vmlinuz root=/dev/sdxy ro # Charge le noyau grub rescue> initrd /initrd.img # Charge l'image initrd grub rescue> boot # boot sur cette image initrd
N’oubliez pas, évidemment, de remplacer dans sdxy le x et le y par la bonne valeur.
Je vous renvoie vers la documentation pour plus de détails (voir à la fin de l’article).
Restaurer Grub
Si vous avez installé un autre OS qui a écrasé Grub2 ou pour toute autre raison nécessitant de réinstaller Grub2 dans le MBR, lancez un LiveCD et ouvrez un terminal. Tapez-y la commande suivante:
$ sudo fdisk -l
Ceci affichera les disques et les partitions sur chaque disque. Repérez-y la partition où se trouve le système racine de Linux parce que cela va servir dans les commandes suivantes:
$ sudo mount /dev/sdxy /mnt $ sudo grub-install --root-directory=/mnt /dev/sdx
Remplacez le x et y ci dessus par la valeur qui correspond chez vous. sdxy est la partitions où se trouve le répertoire /boot par exemple sda1 et sdx est le disque dans le MBR duquel vous voulez installer Grub par exemple sda.
Un OS manque dans les choix du menu Grub
Si un OS a été mal détecté, relancez la configuration de Grub:
$ sudo update-grub
Changer l’OS lancé par défaut
Pour changer l’OS booté par défaut, il suffit d’éditer le fichier /etc/default/grub pour y changer la valeur de:
GRUB_DEFAULT=0
Ensuite, il faut mettre à jour le fichier /boot/grub/grub.cfg en lançant la commande:
$ sudo update-grub
Mais il y a plus simple. Une commande lancée depuis le terminal et qui effectue le changement pour vous:
$ sudo grub-set-default x
Remplacez x par l’index de l’OS à lancer par défaut. Cet index commançant à 0 est donnépar la position de l’OS dans le menu grub.
Edit: Pour que la commande grub-set-default soit active, il faut que GRUB_DEFAULT=saved. C’est-à-dire que, dans ce cas, Grub lance l’OS qui a été lancé la fois précédente. Cet OS peut être modifié au moyen de la commande grub-set-default.
Supprimer Grub2 pour réinstaller Grub legacy
Si pour une raison ou une autre, vous voulez réinstaller Grub legacy à la place de Grub2, voici comment procéder.
Commencez par faire le backup des fichiers de grub2, on ne sait jamais:
$ sudo cp /boot/grub /boot/grub.old $ sudo rm -R /boot/grub/*
Ensuite on supprime Grub2 via aptitude et on réinstalle Grub legacy:
$ sudo aptitude purge grub-pc grub-common $ sudo aptitude install grub $ sudo update-grub
La dernière commande va créer le fichier /boot/grub/menu.lst.
A ce stade, il faut encore installer grub dans le MBR ce qui se fait par la commande:
$ sudo grub-install /dev/sda
Remplacez éventuellement /dev/sda par le disque que vous voulez si vous ne voulez pas installer grub dans le MBR de sda.
Ensuite lancez grub en tapant:
$ sudo grub
Lorsque vous avez le prompt de grub, entrez la commande:
grub> find /boot/grub/stage1
Notez la réponse de grub car celle-ci devra être introduite dans la ligne suivante:
grub> root (hd0,0) grub> setup (hd0) grub> quit
Remplacez évidemment (hd0,0) par la valeur donnée par la commande find. Dans la commande setup, remplacez le zéro (hd0) par la valeur donnée par le premier chiffre de la commande find. Voir http://linux.leunen.com/?p=43
Voilà, Grub legacy est réinstallé et opérationnel. Rebootez pour voir apparaître le menu Grub et tester ces différents choix.
Note: Avec Grub1 (grub legacy), il fallait appuyer sur la touche Esc pour faire apparaître le menu de Grub quand on n’avait qu’un seul OS. Avec Grub2, c’est sur la touche Shift qu’il faut appuyer.
Sources
https://help.ubuntu.com/community/Grub2
http://doc.ubuntu-fr.org/grub-pc
http://ubuntuforums.org/showthread.php?t=1298932
http://ubuntuforums.org/showthread.php?t=1195275
http://ubuntuforums.org/showthread.php?t=1285897
Posted: novembre 14th, 2009 under Ubuntu.
Comments: 6