{"id":723,"date":"2009-11-14T17:52:06","date_gmt":"2009-11-14T15:52:06","guid":{"rendered":"http:\/\/linux.leunen.com\/?p=723"},"modified":"2010-05-12T16:40:33","modified_gmt":"2010-05-12T14:40:33","slug":"grub2","status":"publish","type":"post","link":"https:\/\/www.leunen.com\/linux\/2009\/11\/grub2\/","title":{"rendered":"Grub2"},"content":{"rendered":"<p><strong>Grub2<\/strong> est le chargeur de boot par d\u00e9faut dans Ubuntu 9.10. Il est charg\u00e9 de lancer l&rsquo;OS et permet le choix quand plusieurs OS sont install\u00e9s sur une m\u00eame machine. En ce sens, il n&rsquo;est pas diff\u00e9rent de <em>Grub1<\/em> renomm\u00e9 pour l&rsquo;occasion <em>Grub legacy<\/em>.<\/p>\n<p>Les avantages de <em>Grub2<\/em> sont entre autres:<\/p>\n<ul>\n<li>Support de scripts incluant des fonctions et des tests<\/li>\n<li>Un mode de r\u00e9paration (mode rescue)<\/li>\n<li>Le support des th\u00e8mes<\/li>\n<li>Le support de menus personnalis\u00e9s<\/li>\n<li>le boot depuis un CD directement depuis le disque dur sans reboot<\/li>\n<li>&#8230;<\/li>\n<\/ul>\n<p>La version 9.10 d&rsquo;Ubuntu est une version de transition en ce qui concerne <em>Grub<\/em>. Un nouvelle installation d&rsquo;Ubuntu 9.10 installera <em>Grub2<\/em> tandis qu&rsquo;une mise \u00e0 jour depuis 9.04 gardera l&rsquo;ancien <em>Grub legacy<\/em>. Pas toujours simple de s&rsquo;y retrouver et les questions et probl\u00e8mes soulev\u00e9s dans les forums sont nombreux.<\/p>\n<h3>Installation de Grub2<\/h3>\n<p>Les paquets n\u00e9cessaires \u00e0 l&rsquo;installation de <em>Grub2<\/em> sont <em>grub-pc<\/em> et <em>grub-common<\/em><\/p>\n<pre class=\"codesource\">\r\n$ sudo aptitude install grub-pc\r\n<\/pre>\n<p>Un script vous prendra en main pour mener \u00e0 bien cette installation et importer dans <em>Grub2<\/em> les infos recueillies dans le menu de boot de <em>Grub legacy<\/em>. Au red\u00e9marrage, un choix suppl\u00e9mentaire appara\u00eetra dans le menu de <em>Grub legacy<\/em> qui permet de cha\u00eener ce menu avec celui de <em>Grub2<\/em> de fa\u00e7on \u00e0 tester le syst\u00e8me.<br \/>\nA ce stade, testez les diff\u00e9rents choix du menu et v\u00e9rifiez que tout se passe bien. Si c&rsquo;est le cas, vous pouvez opter d\u00e9finitivement pour <em>Grub2<\/em> de cette mani\u00e8re:<\/p>\n<pre class=\"codesource\">\r\n$ sudo upgrade-from-grub-legacy\r\n<\/pre>\n<p>R\u00e9pondez aux question une fois encore et vous aurez migr\u00e9 de <em>Grub legacy<\/em> vers <em>Grub2<\/em>.<\/p>\n<h3>Configuration de Grub2<\/h3>\n<p>Le fichier <em>\/boot\/grub\/menu.lst<\/em> de <em>Grub legacy<\/em> n&rsquo;existe plus. Il est, en gros, remplac\u00e9 par le fichier <em>\/boot\/grub\/grub.cfg<\/em> qui contient ce qui ressemble le plus \u00e0 l&rsquo;ancien <em>menu.lst<\/em>, c&rsquo;est \u00e0 dire, les informations sur les diff\u00e9rents OS et comment les booter. Ce fichier ne doit pas \u00eatre \u00e9dit\u00e9 par l&rsquo;utilisateur. Son contenu d\u00e9pend du r\u00e9sultat d&rsquo;une s\u00e9rie de scripts lanc\u00e9s lorsqu&rsquo;on fait un:<\/p>\n<pre class=\"codesource\">\r\n$ sudo update-grub\r\n<\/pre>\n<p>Le fichier <em>\/etc\/default\/grub<\/em>, qui peut \u00eatre \u00e9dit\u00e9, contient des infos comme l&rsquo;OS \u00e0 lancer par d\u00e9faut ou le nombre de secondes avant le lancement de l&rsquo;OS par d\u00e9faut.<br \/>\nLe dossier <em>\/etc\/grub.d<\/em> qui contient les diff\u00e9rents scripts qui vont construire le fichier <em>\/boot\/grub\/grub.cfg<\/em> lorsque la commande <em>update-grub<\/em> est lanc\u00e9e. Dans ces scripts, il faut noter la pr\u00e9sence du script <em>05_debian_theme<\/em> qui permet d&rsquo;ins\u00e9rer une image de fond (splash image), le script <em>30_os-prober<\/em> qui est charg\u00e9 de d\u00e9tecter les OS sur les disques et <em>40_custom<\/em> qui est le script qui permet d&rsquo;ins\u00e9rer des entr\u00e9es personnalis\u00e9es.<\/p>\n<p>Voici \u00e0 quoi ressemble le fichier <em>\/etc\/default\/grub<\/em>:<\/p>\n<pre class=\"codesource\">\r\n$ cat \/etc\/default\/grub\r\n# If you change this file, run 'update-grub' afterwards to update\r\n# \/boot\/grub\/grub.cfg.\r\n\r\nGRUB_DEFAULT=0\r\n#GRUB_HIDDEN_TIMEOUT=0\r\nGRUB_HIDDEN_TIMEOUT_QUIET=true\r\nGRUB_TIMEOUT=10\r\nGRUB_DISTRIBUTOR=`lsb_release -i -s 2> \/dev\/null || echo Debian`\r\nGRUB_CMDLINE_LINUX_DEFAULT=\"quiet splash\"\r\nGRUB_CMDLINE_LINUX=\"\"\r\n\r\n# Uncomment to disable graphical terminal (grub-pc only)\r\n#GRUB_TERMINAL=console\r\n\r\n# The resolution used on graphical terminal\r\n# note that you can use only modes which your graphic card supports via VBE\r\n# you can see them in real GRUB with the command `vbeinfo'\r\n#GRUB_GFXMODE=640x480\r\n\r\n# Uncomment if you don't want GRUB to pass \"root=UUID=xxx\" parameter to Linux\r\n#GRUB_DISABLE_LINUX_UUID=true\r\n\r\n# Uncomment to disable generation of recovery mode menu entrys\r\n#GRUB_DISABLE_LINUX_RECOVERY=\"true\"\r\n<\/pre>\n<p>Et le fichier <em>\/boot\/grub\/grub.cfg<\/em>. Il s&rsquo;agit de mon fichier de configuration et vous pouvez voir qu&rsquo;en plus d&rsquo;Ubuntu, j&rsquo;ai une Debian Squeeze qui est install\u00e9e sur l&rsquo;autre disque de mon PC.<\/p>\n<pre class=\"codesource\">\r\n$ cat \/boot\/grub\/grub.cfg\r\n#\r\n# DO NOT EDIT THIS FILE\r\n#\r\n# It is automatically generated by \/usr\/sbin\/grub-mkconfig using templates\r\n# from \/etc\/grub.d and settings from \/etc\/default\/grub\r\n#\r\n\r\n### BEGIN \/etc\/grub.d\/00_header ###\r\nif [ -s \/boot\/grub\/grubenv ]; then\r\n  have_grubenv=true\r\n  load_env\r\nfi\r\nset default=\"0\"\r\nif [ ${prev_saved_entry} ]; then\r\n  saved_entry=${prev_saved_entry}\r\n  save_env saved_entry\r\n  prev_saved_entry=\r\n  save_env prev_saved_entry\r\nfi\r\ninsmod ext2\r\nset root=(hd1,1)\r\nsearch --no-floppy --fs-uuid --set b298d612-cb12-478a-8109-4cee1a0226f2\r\nif loadfont \/usr\/share\/grub\/unicode.pf2 ; then\r\n  set gfxmode=640x480\r\n  insmod gfxterm\r\n  insmod vbe\r\n  if terminal_output gfxterm ; then true ; else\r\n    # For backward compatibility with versions of terminal.mod that don't\r\n    # understand terminal_output\r\n    terminal gfxterm\r\n  fi\r\nfi\r\nif [ ${recordfail} = 1 ]; then\r\n  set timeout=-1\r\nelse\r\n  set timeout=10\r\nfi\r\n### END \/etc\/grub.d\/00_header ###\r\n\r\n### BEGIN \/etc\/grub.d\/05_debian_theme ###\r\nset menu_color_normal=white\/black\r\nset menu_color_highlight=black\/white\r\n### END \/etc\/grub.d\/05_debian_theme ###\r\n\r\n### BEGIN \/etc\/grub.d\/10_linux ###\r\nmenuentry \"Ubuntu, Linux 2.6.31-14-generic-pae\" {\r\n        recordfail=1\r\n        if [ -n ${have_grubenv} ]; then save_env recordfail; fi\r\n\tset quiet=1\r\n\tinsmod ext2\r\n\tset root=(hd1,1)\r\n\tsearch --no-floppy --fs-uuid --set b298d612-cb12-478a-8109-4cee1a0226f2\r\n\tlinux\t\/boot\/vmlinuz-2.6.31-14-generic-pae root=UUID=b298d612-cb12-478a-8109-4cee1a0226f2 ro   quiet splash\r\n\tinitrd\t\/boot\/initrd.img-2.6.31-14-generic-pae\r\n}\r\nmenuentry \"Ubuntu, Linux 2.6.31-14-generic-pae (recovery mode)\" {\r\n        recordfail=1\r\n        if [ -n ${have_grubenv} ]; then save_env recordfail; fi\r\n\tinsmod ext2\r\n\tset root=(hd1,1)\r\n\tsearch --no-floppy --fs-uuid --set b298d612-cb12-478a-8109-4cee1a0226f2\r\n\tlinux\t\/boot\/vmlinuz-2.6.31-14-generic-pae root=UUID=b298d612-cb12-478a-8109-4cee1a0226f2 ro single \r\n\tinitrd\t\/boot\/initrd.img-2.6.31-14-generic-pae\r\n}\r\n### END \/etc\/grub.d\/10_linux ###\r\n\r\n### BEGIN \/etc\/grub.d\/20_memtest86+ ###\r\nmenuentry \"Memory test (memtest86+)\" {\r\n\tlinux16\t\/boot\/memtest86+.bin\r\n}\r\nmenuentry \"Memory test (memtest86+, serial console 115200)\" {\r\n\tlinux16\t\/boot\/memtest86+.bin console=ttyS0,115200n8\r\n}\r\n### END \/etc\/grub.d\/20_memtest86+ ###\r\n\r\n### BEGIN \/etc\/grub.d\/30_os-prober ###\r\nmenuentry \"Debian GNU\/Linux, kernel 2.6.26-2-686 (on \/dev\/sda1)\" {\r\n\tinsmod ext2\r\n\tset root=(hd0,1)\r\n\tsearch --no-floppy --fs-uuid --set 436e7961-5c40-412f-b27e-0f8ce60b19e4\r\n\tlinux \/boot\/vmlinuz-2.6.26-2-686 root=\/dev\/hda1 ro quiet\r\n\tinitrd \/boot\/initrd.img-2.6.26-2-686\r\n}\r\nmenuentry \"Debian GNU\/Linux, kernel 2.6.26-2-686 (single-user mode) (on \/dev\/sda1)\" {\r\n\tinsmod ext2\r\n\tset root=(hd0,1)\r\n\tsearch --no-floppy --fs-uuid --set 436e7961-5c40-412f-b27e-0f8ce60b19e4\r\n\tlinux \/boot\/vmlinuz-2.6.26-2-686 root=\/dev\/hda1 ro single\r\n\tinitrd \/boot\/initrd.img-2.6.26-2-686\r\n}\r\n### END \/etc\/grub.d\/30_os-prober ###\r\n\r\n### BEGIN \/etc\/grub.d\/40_custom ###\r\n# This file provides an easy way to add custom menu entries.  Simply type the\r\n# menu entries you want to add after this comment.  Be careful not to change\r\n# the 'exec tail' line above.\r\n### END \/etc\/grub.d\/40_custom ###\r\n<\/pre>\n<h3>Mode rescue<\/h3>\n<p>Si <em>Grub2<\/em> ne peut booter l&rsquo;OS demand\u00e9, il vous donnera acc\u00e8s au <em>mode rescue<\/em> qui permet d&rsquo;entrer des commandes et essayer de lever le probl\u00e8me. Pour cela, vous devez connaitre la partition sur laquelle est install\u00e9 le noyau c&rsquo;est \u00e0 dire o\u00f9 se trouve le r\u00e9pertoire <em>\/boot<\/em>. Si vous ne connaissez pas ces informations, utilisez un LiveCD ou directement les commandes de <em>grub rescue<\/em> comme la commande <em>ls<\/em> ou <em>ls \/boot<\/em> qui permet d&rsquo;inspecter les partitions \u00e0 la recherche de celle contenant le noyau:<\/p>\n<pre class=\"codesource\">\r\ngrub rescue> set root=sdxy                        # sdxy est la partition o\u00f9 se trouve \/boot\r\ngrub rescue> insmod \/boot\/grub\/linux.mod          # Charge le module linux\r\ngrub rescue> linux \/vmlinuz root=\/dev\/sdxy ro     # Charge le noyau\r\ngrub rescue> initrd \/initrd.img                   # Charge l'image initrd\r\ngrub rescue> boot                                 # boot sur cette image initrd\r\n<\/pre>\n<p>N&rsquo;oubliez pas, \u00e9videmment, de remplacer dans <em>sdxy<\/em> le <em>x<\/em> et le <em>y<\/em> par la bonne valeur.<br \/>\nJe vous renvoie vers la documentation pour plus de d\u00e9tails (voir \u00e0 la fin de l&rsquo;article). <\/p>\n<h3>Restaurer <em>Grub<\/em><\/h3>\n<p>Si vous avez install\u00e9 un autre OS qui a \u00e9cras\u00e9 <em>Grub2<\/em> ou pour toute autre raison n\u00e9cessitant de r\u00e9installer <em>Grub2<\/em> dans le <em>MBR<\/em>, lancez un LiveCD et ouvrez un terminal. Tapez-y la commande suivante:<\/p>\n<pre class=\"codesource\">\r\n$ sudo fdisk -l\r\n<\/pre>\n<p>Ceci affichera les disques et les partitions sur chaque disque. Rep\u00e9rez-y la partition o\u00f9 se trouve le syst\u00e8me racine de Linux parce que cela va servir dans les commandes suivantes:<\/p>\n<pre class=\"codesource\">\r\n$ sudo mount \/dev\/sdxy \/mnt\r\n$ sudo grub-install --root-directory=\/mnt \/dev\/sdx\r\n<\/pre>\n<p>Remplacez le <em>x<\/em> et <em>y<\/em> ci dessus par la valeur qui correspond chez vous. <em>sdxy<\/em> est la partitions o\u00f9 se trouve le r\u00e9pertoire <em>\/boot<\/em> par exemple <em>sda1<\/em> et <em>sdx<\/em> est le disque dans le <em>MBR<\/em> duquel vous voulez installer <em>Grub<\/em> par exemple <em>sda<\/em>.<\/p>\n<h3>Un OS manque dans les choix du menu <em>Grub<\/em><\/h3>\n<p>Si un OS a \u00e9t\u00e9 mal d\u00e9tect\u00e9, relancez la configuration de <em>Grub<\/em>:<\/p>\n<pre class=\"codesource\">\r\n$ sudo update-grub\r\n<\/pre>\n<h3>Changer l&rsquo;OS lanc\u00e9 par d\u00e9faut<\/h3>\n<p>Pour changer l&rsquo;OS boot\u00e9 par d\u00e9faut, il suffit d&rsquo;\u00e9diter le fichier <em>\/etc\/default\/grub<\/em> pour y changer la valeur de:<\/p>\n<pre class=\"codesource\">\r\nGRUB_DEFAULT=0\r\n<\/pre>\n<p>Ensuite, il faut mettre \u00e0 jour le fichier <em>\/boot\/grub\/grub.cfg<\/em> en lan\u00e7ant la commande:<\/p>\n<pre class=\"codesource\">\r\n$ sudo update-grub\r\n<\/pre>\n<p>Mais il y a plus simple. Une commande lanc\u00e9e depuis le terminal et qui effectue le changement pour vous:<\/p>\n<pre class=\"codesource\">\r\n$ sudo grub-set-default x\r\n<\/pre>\n<p>Remplacez <em>x<\/em> par l&rsquo;index de l&rsquo;OS \u00e0 lancer par d\u00e9faut. Cet index comman\u00e7ant \u00e0 0 est donn\u00e9par la position de l&rsquo;OS dans le menu <em>grub<\/em>.<\/p>\n<p><strong>Edit:<\/strong> Pour que la commande <em>grub-set-default<\/em> soit active, il faut que <em>GRUB_DEFAULT=saved<\/em>. C&rsquo;est-\u00e0-dire que, dans ce cas, Grub lance l&rsquo;OS qui a \u00e9t\u00e9 lanc\u00e9 la fois pr\u00e9c\u00e9dente. Cet OS peut \u00eatre modifi\u00e9 au moyen de la commande <em>grub-set-default<\/em>.<\/p>\n<h3>Supprimer <em>Grub2<\/em> pour r\u00e9installer <em>Grub legacy<\/em><\/h3>\n<p>Si pour une raison ou une autre, vous voulez r\u00e9installer <em>Grub legacy<\/em> \u00e0 la place de <em>Grub2<\/em>, voici comment proc\u00e9der.<br \/>\nCommencez par faire le backup des fichiers de <em>grub2<\/em>, on ne sait jamais:<\/p>\n<pre class=\"codesource\">\r\n$ sudo cp \/boot\/grub \/boot\/grub.old\r\n$ sudo rm -R \/boot\/grub\/*\r\n<\/pre>\n<p>Ensuite on supprime <em>Grub2<\/em> via aptitude et on r\u00e9installe <em>Grub legacy<\/em>:<\/p>\n<pre class=\"codesource\">\r\n$ sudo aptitude purge grub-pc grub-common\r\n$ sudo aptitude install grub\r\n$ sudo update-grub\r\n<\/pre>\n<p>La derni\u00e8re commande va cr\u00e9er le fichier <em>\/boot\/grub\/menu.lst<\/em>.<br \/>\nA ce stade, il faut encore installer <em>grub<\/em> dans le <em>MBR<\/em> ce qui se fait par la commande:<\/p>\n<pre class=\"codesource\">\r\n$ sudo grub-install \/dev\/sda\r\n<\/pre>\n<p>Remplacez \u00e9ventuellement <em>\/dev\/sda<\/em> par le disque que vous voulez si vous ne voulez pas installer <em>grub<\/em> dans le <em>MBR<\/em> de <em>sda<\/em>.<br \/>\nEnsuite lancez <em>grub<\/em> en tapant:<\/p>\n<pre class=\"codesource\">\r\n$ sudo grub\r\n<\/pre>\n<p>Lorsque vous avez le prompt de <em>grub<\/em>, entrez la commande:<\/p>\n<pre class=\"codesource\">\r\ngrub> find \/boot\/grub\/stage1\r\n<\/pre>\n<p>Notez la r\u00e9ponse de <em>grub<\/em> car celle-ci devra \u00eatre introduite dans la ligne suivante:<\/p>\n<pre class=\"codesource\">\r\ngrub> root (hd0,0)\r\ngrub> setup (hd0)\r\ngrub> quit\r\n<\/pre>\n<p>Remplacez \u00e9videmment <em>(hd0,0)<\/em> par la valeur donn\u00e9e par la commande <em>find<\/em>. Dans la commande <em>setup<\/em>, remplacez le z\u00e9ro <em>(hd0)<\/em> par la valeur donn\u00e9e par le premier chiffre de la commande <em>find<\/em>. Voir <a href=\"http:\/\/linux.leunen.com\/?p=43\">http:\/\/linux.leunen.com\/?p=43<\/a><\/p>\n<p>Voil\u00e0, <em>Grub legacy<\/em> est r\u00e9install\u00e9 et op\u00e9rationnel. Rebootez pour voir appara\u00eetre le menu <em>Grub<\/em> et tester ces diff\u00e9rents choix.<\/p>\n<p><strong>Note:<\/strong> Avec <em>Grub1<\/em> (grub legacy), il fallait appuyer sur la touche <em>Esc<\/em> pour faire appara\u00eetre le menu de <em>Grub<\/em> quand on n&rsquo;avait qu&rsquo;un seul OS. Avec <em>Grub2<\/em>, c&rsquo;est sur la touche <em>Shift<\/em> qu&rsquo;il faut appuyer.<\/p>\n<h3>Sources<\/h3>\n<p><a href=\"https:\/\/help.ubuntu.com\/community\/Grub2\">https:\/\/help.ubuntu.com\/community\/Grub2<\/a><br \/>\n<a href=\"http:\/\/doc.ubuntu-fr.org\/grub-pc\">http:\/\/doc.ubuntu-fr.org\/grub-pc<\/a><br \/>\n<a href=\"http:\/\/ubuntuforums.org\/showthread.php?t=1298932\">http:\/\/ubuntuforums.org\/showthread.php?t=1298932<\/a><br \/>\n<a href=\"http:\/\/ubuntuforums.org\/showthread.php?t=1195275\">http:\/\/ubuntuforums.org\/showthread.php?t=1195275<\/a><br \/>\n<a href=\"http:\/\/ubuntuforums.org\/showthread.php?t=1285897\">http:\/\/ubuntuforums.org\/showthread.php?t=1285897<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Grub2 est le chargeur de boot par d\u00e9faut dans Ubuntu 9.10. Il est charg\u00e9 de lancer l&rsquo;OS et permet le choix quand plusieurs OS sont install\u00e9s sur une m\u00eame machine. En ce sens, il n&rsquo;est pas diff\u00e9rent de Grub1 renomm\u00e9 pour l&rsquo;occasion Grub legacy. Les avantages de Grub2 sont entre autres: Support de scripts incluant [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/723"}],"collection":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/comments?post=723"}],"version-history":[{"count":10,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/723\/revisions"}],"predecessor-version":[{"id":734,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/723\/revisions\/734"}],"wp:attachment":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/media?parent=723"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/categories?post=723"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/tags?post=723"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}