Ceci est une ancienne révision du document !



Ce document est encore TRÈS LOIN de ressembler à sa version finale. Il reste à supprimer les éléments communs.

GRUB 2 (version uEFI)

gnu-head-sm.jpg GRand Unified Bootloader, version 2 (ou GRUB 2) est la seconde version de GNU GRUB. C'est un logiciel permettant de charger un système d'exploitation. Il pourra amorcer lui-même des systèmes compatibles avec la norme POSIX (GNU/Linux, *BSD, Mac OS, etc.) ou enchaîner vers un autre chargeur d'amorçage pour les autres systèmes.

Plus qu'une continuité du projet GRUB Legacy précédent, GRUB 2 en est une réécriture complète. Il a pour but d'être un chargeur d'amorçage plus modulaire et portable que son prédécesseur avec notamment :

  • une interface graphique,
  • un chargement de modules au moment de l'exécution plutôt qu'à la compilation,
  • une portabilité vers diverses architectures matérielles (BIOS, uEFI, Coreboot…),
  • un mode de secours qui reprend la main en cas d'erreur de chargement. Les stage1.5 ont été éliminés.
  • une révision de la numérotation des partitions, ce qui ne pouvait être fait sur GRUB Legacy.
À propos de ce document
  • Ne seront traité dans ce document que les spécificités et problèmes de la version uEFI de GRUB 2, le reste étant déjà couvert dans ce wiki à la page GRUB 2 (version Compatibles PC)

À l’installation d'Ubuntu

Depuis Ubuntu 11.10, il est possible de l'installer directement en mode UEFI. Pour cela, il vous faut :

  • Avoir un ordinateur compatible UEFI ;
  • Utiliser le LiveDVD 64bits disponible sur le FTP d'Ubuntu.org ou l'un de ses miroir. (Ou le disque MacIntel si vous utilisez un Mac.) ;
  • Que votre disque dur utilise une table de partition de type GPT ;
  • Vous assurer de bien lancer le LiveDVD en mode UEFI, et non en mode BIOS.

Si tout ceci est bien respecté, Ubuntu installera de lui-même grub-efi en lieux et place de grub-pc

Une vérification peut être faite avec la commande :

grub-install -v

(si vous voyez : GNU GRUB 1.98 ou +, vous avez Grub 2, si c'est 0.97, vous avez Grub Legacy).

Réinstaller/Restaurer GRUB 2

Réinstallation GRUB, par exemple lorsqu'il a été effacé suite à l'installation d'un autre système d'exploitation (par exemple, Microsoft® Windows®, Suse (OpenSuse)). Voir ce tutoriel.

Multi-boot : privilégier un grub

En cas d'installation en parallèle de plusieurs versions d'Ubuntu sur le même disque dur, la dernière installation impose son grub. Mais si vous souhaitez imposer au démarrage le grub d'une autre installation (celle que vous utilisez par défaut, par exemple) :

  • allez dans cette autre installation,
  • ouvrez le terminal, et tapez :
  sudo os-prober
  sudo update-grub
  sudo grub-install /dev/sda
    
  
  avec /dev/sda si on veut pointer sur le disque sda
  avec /dev/sdb si on veut pointer sur le disque sdb
  avec /dev/sdc si on veut pointer sur le disque sdc
  etc

À connaître avant de configurer manuellement

Afficher le menu

Depuis Ubuntu Lucid / 10.04, le menu de GRUB ne s'affiche pas au démarrage d'un PC mono-système. Il suffit de laisser la touche Majuscule (shift) enfoncée avant le chargement de GRUB pour afficher son menu.

Pour que le menu s'affiche systématiquement, il faut éditer le fichier /etc/default/grub puis il suffit d'ajouter le # au début de la ligne

GRUB_HIDDEN_TIMEOUT=0

(voir /etc/default/grub : options par défaut).

Liste des fichiers utilisés pour la configuration

Fichier utilisé par le système
  • /boot/grub/grub.cfg : il est généré automatiquement par update-grub et ne doit donc pas être modifié manuellement.
    C'est lui qui est lu au démarrage comme l'était menu.lst sur grub-legacy.
Fichiers utilisés pour l'autoconfiguration
  • /boot/grub/device.map : indique les disques sur lesquels update-grub cherchera une configuration d'amorçage (le disque principal et la clé USB ayant servi à l'installation d'Ubuntu par exemple)
  • /etc/default/grub : gère les valeurs par défaut de grub (délai de lancement, résolution d'affichage, splash/quiet, options par défaut des nouveaux noyaux,..)
  • les fichiers du dossier /etc/grub.d/
    • 00_header : contient le script gérant les options définies dans /etc/default/grub.
    • 05_debian_theme : gère les couleurs du menu et le fond d'écran éventuel.
    • 10_linux : contient le script de lancement du système sur lequel on est.
    • 20_memtest86+ : script permettant de générer les entrées memtest.
    • 30_os-prober : contient le script de recherche des autres systèmes installés.
    • 40_custom : configuration perso. C'est là qu'on pourra paramétrer manuellement le lancement des systèmes d'exploitation.

      Ces fichiers sont traités dans l'ordre numérique (00_, puis 05_, puis 10_, etc…)
      Si vous souhaitez lancer windows (qui est détecté dans le fichier 30_OS-prober) avant Linux,
      il suffit de renommer ce fichier en lui donnant un nom commençant par un nombre compris entre 06 et 09 (soit entre 05_debian et 10_linux)

      Exemple de syntaxe possible :
      cd /etc/grub.d
      sudo mv 30_os-prober 07_os-prober
      sudo update-grub

Numérotation des disques

Pour Linux, on a l'alphabet pour désigner les disques durs physiques et une numérotation partant de 1 pour le numéro de la partition. Pour grub-efi (à la différence de grub-legacy), on a une numérotation démarrant de 0 pour les disques physiques et de 1 pour le numéro de la partition.

Par exemple :

  • /dev/hda1 ou /dev/sda1 sera nommé hd(0,1) par grub-efi.
  • /dev/hdc5 ou /dev/sdc5 sera nommé hd(2,5) par grub-efi.

Une petite gymnastique (a→ 0, b→ 1, c→ 2,..) reste à faire pour les disques physiques.

Mais attention ! voici le contenu de mon fichier /boot/grub/device.map

(fd0) /dev/fd0

(hd0) /dev/sda

(hd1) /dev/sdb

(hd2) /dev/sdg

pour moi ici hd2 correspond à sdg

Configuration/reconfiguration automatisée du menu GRUB

Si vous avez démarré sur la partition qui contient le grub.cfg à mettre à jour, faites directement la commande ci-dessous.

Sinon, référez-vous au paragraphe "Configuration/reconfiguration automatisée à partir du live CD" dans les cas particuliers.

sudo update-grub

Lit le contenu de ces fichiers un à un :

  1. /boot/grub/device.map
  2. /etc/default/grub
  3. l'ensemble des fichiers contenus à la racine du dossier /etc/grub.d/

pour générer automatiquement un nouveau grub.cfg *

sudo grub-mkconfig -o /boot/grub/grub.cfg et update-grub font exactement la même chose. Toutes les commandes de mise à jour de la config de grub-efi seront données avec update-grub car plus simple à mémoriser.

sudo grub-mkconfig (seul) vous permettra de visualiser dans votre terminal ce que pourrait être le contenu du fichier grub.cfg (utile pour les tests car les changements ne sont pas encore enregistrés)

Configuration manuelle

Avant de commencer, il est souhaitable d'avoir :
  • un fichier grub.cfg à jour en lançant un update-grub (voir plus haut).
  • d'en garder une sauvegarde (ex: sudo cp /boot/grub/grub.cfg /boot/grub/grub.cfg.autogénéré)
  • de ne pas chercher à le modifier directement (sera écrasé à un moment ou à un autre)

De même, aucun script de configuration présent dans /etc/grub.d/ ne doit être effacé.
On préférera les déplacer dans un dossier dormant créé pour cela (sudo mkdir /etc/grub.d/zz)

/boot/grub/device.map

Lors d'un update-grub, un périphérique peut être indiqué comme introuvable ou sa taille/size impossible à définir. L'erreur est due aux supports déclarés dans /boot/grub/device.map.

  • soit vous éditez manuellement le fichier "/boot/grub/device.map",
  • soit vous lancez la commande "sudo grub-mkdevicemap" qui détecte les supports de stockage branchés actuellement.

/etc/default/grub : options par défaut

Modifiez (avec les droits d'administration) le fichier des valeurs par défaut de GRUB. Par exemple si vous utilisez Gnome, saisissez la commande suivante dans un terminal :

gksudo gedit /etc/default/grub
  • GRUB_DEFAULT=0 correspond au menu qui sera sélectionné par défaut (→ exemple).
  • #GRUB_HIDDEN_TIMEOUT=0 le # est à enlever pour cacher l'affichage du menu si on n'a qu'un seul système sur le disque ou si grub est lancé via un chainloader. La durée en seconde permettra d'appuyer sur les touches echap ou majuscule (shift) pour voir le menu (→ exemple).
  • GRUB_TIMEOUT=10 est la durée en seconde de l'affichage du menu avant de se lancer sur le menu sélectionné par défaut. (si vous modifiez cette valeur et qu'elle n'est pas prise en compte après un update-grub, il vous faudra peut-être enlever le # devant GRUB_HIDDEN_TIMEOUT)
  • GRUB_DISTRIBUTOR="" est la ligne qui définit la syntaxe des titres du menu (→ exemple)
  • GRUB_CMDLINE_LINUX_DEFAULT="" et GRUB_CMDLINE_LINUX="" sont des comportements prédéfinis qui affecteront le lancement des systèmes d'exploitation détectés automatiquement.
  • #GRUB_GFXMODE=640x480 (→ exemple)
  • Depuis Lucid : #GRUB_INIT_TUNE="480 440 1" : permet d'avoir un bip à l'affichage d'un menu Grub si on enlève le "#".
  • GRUB_GFXPAYLOAD=1024x768 : à ajouter éventuellement. Définit la résolution d'affichage de l'écran de chargement (splash screen tel que Plymouth par exemple).

Ne faire apparaître qu'un seul noyau

L'option # howmany=1 de grub-legacy n'existe plus.
Une solution possible est de cacher les noyaux superflus en les déplaçant vers un dossier AnciensNoyaux (créé à cet effet).

  • Ouvrir le dossier /boot en mode administrateur
gksudo nautilus /boot
  • puis clic droit → Créer un dossier (qu'on nommera AnciensNoyaux)
  • sélectionner tous les fichiers désignant un ancien noyau en maintenant la touche CTRL
  • les déplacer vers AnciensNoyaux à la souris ou par couper/coller
La méthode décrite ci-dessus peut poser problème si vous cachez le noyau sur lequel vous êtes lancé.
La fermeture d'Ubuntu ne sera pas propre et posera des problèmes pour redémarrer depuis un autre noyau.

Donc, précaution à prendre : être lancé sur le noyau qu'on veut garder au menu de grub-efi avant de cacher les anciens noyaux.

La manipulation de fichiers système depuis une interface graphique reste très risquée.

Une autre solution plus évoluée consiste à modifier le script /etc/grub.d/10_linux en y introduisant un paramètre permettant de déterminer le nombre de noyaux à afficher dans le menu de grub.(voir grub-pc-annexe)

Enlever un certain nombre de noyaux

En fonction des mises à jours du noyau installées, la liste proposée par grub s'allonge. Il est assez pénalisant de sélectionner tout en bas de la liste un autre système d'exploitation. Parfois, avec les écrans de petite taille, la liste fait plusieurs pages.

On peut supprimer les noyaux les plus anciens. Il est conseillé de laisser les deux derniers noyaux. Se référer à la documentation Nettoyer Ubuntu pour une action en ligne de commande.

La suppression des anciens noyaux vous permet certes de gagner de la place et de limiter le nombre d'entrées du menu grub. Attention, cette manipulation est à faire avec une grande attention !

Pour ceux qui préfèrent le mode graphique, on peut utiliser le gestionnaire de paquets Synaptic et supprimer complètement les paquets par groupes de 3 :

  • linux-headers-2.6.XX-YY
  • linux-headers-2.6.XX-YY-generic
  • linux-image-2.6.XX-YY-generic

Pour enlever par exemple les noyaux 2.6.32-22 et 2.6.32-23, sélectionner pour suppression complète les paquets suivants :

linux-headers-2.6.32-22
linux-headers-2.6.32-22-generic
linux-image-2.6.32-22-generic
linux-headers-2.6.32-23
linux-headers-2.6.32-23-generic
linux-image-2.6.32-23-generic

Lorsqu'on utilise un gestionnaire de paquets pour enlever les images du noyau, la commande update-grub est invoquée automatiquement pour mettre à jour les fichiers de configuration de grub et par conséquent la liste des noyaux affichés dans le menu grub. Il n'est donc pas nécessaire de lancer manuellement la commande update-grub.

Désactiver quelques automatismes

Si vous avez créé le dossier zz dans /etc/grub.d/ (voir note importante plus haut), vous pourrez y déplacer les fichiers :

  • 20_memtest86+ pour ne plus faire apparaître les tests de mémoire dans le menu de démarrage
  • 30_os-prober pour ne plus déclencher la détection automatique des autres systèmes installés
gksudo nautilus /etc/grub.d

puis déplacement des fichiers à la souris ou par couper/coller.

Attention : si vous voulez cacher GRUB avec les options GRUB_HIDDEN_TIMEOUT et GRUB_HIDDEN_TIMEOUT_QUIET dans le fichier /etc/default/grub, 30_os-prober étant le script qui en tient compte, laissez-le actif et préférez plutôt l'option GRUB_DISABLE_OS_PROBER=true dans le fichier /etc/default/grub.

IMPORTANT : notez toutefois que si vous faites ainsi, les autres O.S. ne sont plus détectés et vous ne les aurez plus dans la liste. Pour avoir uniquement le compte a rebours tout en conservant les autres O.S. sur la liste, voir paragraphe plus bas.

Autres méthodes :

  • Plutôt que de déplacer ces fichiers, on peut aussi désactiver leurs droits d'exécution. Toujours via Nautilus :
    1. clic droit sur l'un des fichiers pour accéder à ses "Propriétés",
    2. dans l'onglet "Permissions", décochez la case "Autoriser l'exécution…".
  • De même, il est possible d'ajouter cette ligne au fichier de configuration /etc/default/grub : GRUB_DISABLE_OS_PROBER=true

Paramètres personnalisés

Éditez le fichier /boot/grub/grub.cfg autogénéré plus haut et le fichier /etc/grub.d/40_custom. Copier depuis le grub.cfg (ou une de ses sauvegardes) ce que vous trouverez entre

### BEGIN /etc/grub.d/30_os-prober ###

et

### END /etc/grub.d/30_os-prober ###

et coller le dans 40_custom. Modifiez ensuite les paramètres à votre guise.

Vous pouvez aussi créer un autre fichier personnalisé avec une numérotation qui le lance avant tous les autres par exemple :

  • Créez le fichier /etc/grub.d/07_custom
  • après son enregistrement, vous le rendrez exécutable : sudo chmod +x /etc/grub.d/07_custom

Pour appliquer cette nouvelle configuration lancez un :

sudo update-grub

Puis, relancez votre machine.

Configuration/reconfiguration automatisée à partir du live CD

Impose l'emploi d'un support Live 32 bits pour un grub 32 bits à réparer et d'un CD d'une version 64 bits pour réparer une installation 64 bits…

Si vous ne pouvez pas démarrer sur la partition qui contient le fichier grub.cfg à mettre à jour, vous pouvez faire un update-grub sur cette partition après avoir démarré depuis un live-cd ou une autre partition contenant un Ubuntu en état de marche, et en effectuant les opérations suivantes :

En prenant comme hypothèse que le fichier grub.cfg à mettre à jour se trouve sur la partition sdb1 qui n'est pas déjà montée et qui est normalement montée sur / (donc /boot n'est pas sur une partition séparée).

sudo mkdir /media/sdb1
sudo mount /dev/sdb1 /media/sdb1
cd /media/sdb1
sudo mount --bind /dev dev
sudo mount --bind /sys sys
sudo mount --bind /proc proc
sudo chroot .

Par contre, si /boot est sur une partition à part (/dev/sdb2 par exemple) et /dev/sdb1 est normalement montée sur /.

sudo mkdir /media/sdb1
sudo mount /dev/sdb1 /media/sdb1
cd /media/sdb1
sudo mount --bind /dev dev
sudo mount --bind /sys sys
sudo mount --bind /proc proc
sudo chroot .
sudo mount /dev/sdb2 /boot

A partir de là vous êtes positionnés quasiment comme si vous aviez démarré sur sdb1 qui est devenu votre racine, et vous êtes en root, donc pas besoin de sudo devant les commandes. Ensuite vous pouvez faire votre update-grub normalement :

sudo update-grub

Pour ré-installer GRUB sur le MBR:

sudo grub-install /dev/sdb

Mais aussi grub-mkdevicemap comme indiqué plus loin dans ce tutoriel, si besoin est.

pour sortir du chroot, demontez /dev/sdb2 si /boot est sur une partition à part,

sudo umount /dev/sdb2

tapez exit, puis démontez les bind.

exit
sudo umount proc
sudo umount dev
sudo umount sys
cd ..
sudo umount /dev/sdb1

Cacher le menu

Si vous souhaitez cacher le menu de Grub. Il sera alors seulement disponible en appuyant sur la touche "esc". Après le lancement du BIOS, le système est dirigé vers GRUB. A l'écran, vous n'avez à ce moment plus que un curseur ou un compte à rebours. Le choix du curseur ou du compte à rebours se fait dans le fichier "/etc/default/grub".

Attention : Méthode testée sur HP Elitebook8350 - UBUNTU 10.10, UBUNTU 11.04 ; à utiliser a vos risques ! Pensez à sauvegarder vos fichiers avant de les modifier.

Pour modifier les fichiers de configuration, il faut les ouvrir en super-utilisateur : Voici en exemple mon réglage :

GRUB_DEFAULT="Microsoft Windows XP Professional (on /dev/sda1)"
GRUB_HIDDEN_TIMEOUT=3
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=3

Au démarrage, le menu de GRUB est caché pendant 3 sec "GRUB_HIDDEN_TIMEOUT=3" et lorsqu'il apparait, j'ai 3 sec "GRUB_TIMEOUT=3" pour déplacer la ligne en surbrillance qui permet le choix de l' OS.

Si je ne touche à rien, il démarre sur Win xp et on ne voit pas qu'un autre OS est installé.

Si vous avez comme moi, un système multi OS, il vous faut encore adapter le fichier si dessous :

/etc/grub.d/30_os-prober (contient le script de recherche des autres systèmes installés).

  • / Recherchez dans le fichier, la ligne :"if [ "x${found_other_os}" = "x" ] ; then"

dans mon cas elle se trouve à la ligne 29.

  • / Commentez la ligne en insérant le signe dièse " # " (la ligne derrière ce signe ne sera plus prise en compte)
	make_timeout () {
	#  if [ "x${found_other_os}" = "x" ] ; then
	    if [ "x${1}" != "x" ] ; then
	      if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
		verbose=
	      else
  • / Recherchez dans le fichier, la ligne qui termine ce IF (un IF est terminé par un FI)

dans mon cas elle se trouve à la ligne 63.

  • / Commentez la ligne en insérant le signe dièse " # "
	if [ "x\${timeout}" != "x-1" ]; then
	  if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
	    set timeout=0
	  fi
	fi
	EOF
	      fi
	    fi
	#  fi

Comme à chaque modification de configuration de GRUB il faut mettre à jour le fichier grub.cfg en tapant dans un terminal :

sudo update-grub
Bizarrement, l'affichage du compte à rebours n'est possible que si vous n'avez qu'un seul OS sur votre machine. Si vous en avez plusieurs, ces paramètres sont inopérants, et vous aurez toujours le menu avec la liste des OS, quoi que vous fassiez, et jamais le compte à rebours simple !

Il y a déjà eu un signalement du bug sur Launchpad : https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/428443.

Autre exemple de patch : http://forum.ubuntu-fr.org/viewtopic.php?pid=3165753#p3165753

— — perco Le 16/05/2011, 22:36

Chaîner un autre menu d'amorçage

"chainloader" vous permettra de lancer un autre gestionnaire d'amorçage présent sur le premier secteur des partitions concernées : Windows, Lilo,.. (ne fonctionne pas tel quel vers Grub2). Voici un exemple pour sda7 ajouté sur 40_custom (voir plus haut) :

menuentry 'Bootloader Lilo sur sda7' {
set root=(hd0,7)
chainloader +1
}

Pour qu'il fonctionne vers grub-legacy, il faudra que celui-ci soit installé sur le premier secteur d'une partition et non le MBR (si ce n'est pas le cas, on lance le système qui a ce grub-legacy et on lance un "sudo grub-install /dev/sda7" par exemple). Note: Sur Squeeze le 26 mars 2012, pour que cela fonctionne, il faut utiliser la nomenclature suivante : set root (hd0,msdos7) au lieu de "set root (hd0,7)

Pour chaîner vers un autre Grub2, on procédera ainsi :

menuentry 'Grub 2 sur /dev/sda7' {
set root=(hd0,7)
chainloader +1
}

Si ça n'a pas été fait lors de l’installation de l'OS qui se trouve sur sda7, il faut installer Grub dans le secteur de boot de la partition sda7. Pour réaliser cela dans le cas d'une partition racine Ubuntu 10.10 sur sda7 par exemple, il faut forcer (option –force) :

sudo grub-install --force /dev/sda7

Exemple : Titres du menu

Voici comment s'affichent par défaut les lignes du menu grub : "Ubuntu, Linux 2.6.31-14-generic".

  • Pour modifier la partie avant la virgule de celui-ci, éditez le fichier /etc/default/grub et choisissez parmi les possibilités suivantes :
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`                   # donne : Ubuntu, Linux 2.6...
#GRUB_DISTRIBUTOR=`lsb_release -d -s 2> /dev/null || echo Debian`                  # donne : Ubuntu 10.04 LTS, Linux 2.6...
#GRUB_DISTRIBUTOR=`echo -n $(lsb_release -cds 2> /dev/null || echo Debian)`        # donne : Ubuntu 10.04 LTS lucid, Linux 2.6....
#GRUB_DISTRIBUTOR=`echo -n TOTO $(lsb_release -r -s 2> /dev/null || echo Debian)`  # donne : TOTO 10.04 LTS, Linux 2.6....
#GRUB_DISTRIBUTOR=`echo -n TITRE PERSONNALISÉ`                                     # donne : TITRE PERSONNALISÉ, Linux 2.6....
  • Pour ne plus faire apparaître la version du noyau Linux, éditez le fichier /etc/grub.d/10_linux et tout en bas du script changez les lignes "linux entry" lignes 144 et 148 en enlevant ", Linux ${version}"
  linux_entry "${OS}" "${version}" \  # donne par ex : Ubuntu 10.04 LTS, Linux 2.6...
  linux_entry "${OS}" "" \                   # donnera alors : Ubuntu 10.04 LTS

pour lucid il faut également modifier au début du fichier les lignes 70 :

  title="$(gettext_quoted "%s , with Linux %s (recovery mode)")"   # à la ligne 70, la modifier en :
  title="$(gettext_quoted "%s (recovery mode)")"        # vous pouvez commenter ", with Linux [...]" au cas ou vous ayez des problèmes un jour

vous faites de même pour la ligne 72 sans "(recovery mode)" :

  title="$(gettext_quoted "%s, with Linux %s")"            # à la ligne 72, la modifier en :
  title="$(gettext_quoted "%s")"                           # de même, vous pouvez commenter ", with linux [...]" pour les cas de problèmes

il faut encore modifier la ligne 74, là j'ai pas trop compris pourquoi, vous pouvez regarder les différents fichiers grub.cfg générés en fonction de ce que vous faites pour trouver une explication ;-) :

    printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"   #ligne 74 à modifier en :
    printf "menuentry '${title}' ${CLASS} {\n" "${os}" #"${version}"
Attention toutefois, car ne pas connaître la version du noyau peut être un inconvénient lors d'une mise à jour automatique. Comment différencier deux lignes de même nom mais ne concernant pas le même noyau ?

Exemple : OS sélectionné par défaut

  • Saisissez cette commande dans un terminal avec un chiffre à la place du x (0 = le premier, 1 = le deuxième etc…)
sudo grub-set-default x
  • ou éditez le fichier /etc/default/grub et choisissez parmi les possibilités suivantes pour la variable GRUB_DEFAULT=
    • un chiffre (0 = le premier, 1 = le deuxième etc…),
    • saved (sans guillemet) pour ce qui a été sélectionné lors du précédent lancement (nécessite de rajouter GRUB_SAVEDEFAULT=true),
    • ou le titre exact d'un menu mis entre guillemets (par exemple : "Microsoft Windows 2000 Professionnel (on /dev/sda1)")
Pour obtenir les titres exacts des menus : grep menuentry /boot/grub/grub.cfg
Sous Ubuntu 12-04 Serveur et Grub 1.99 , on peut constater ( cat /boot/grub/grub.cfg ) des sous-menus ( en particulier le sous-menu Previous Linux versions ) ce qui remet en cause les indications précédentes et il faut spécifier plus précisément dans /etc/default/grub le chemin complet ‘Submenu N>Submenu X>Menu Entry Y’ pour bien démarrer sur la bonne entrée. Voir http://www.gnu.org/software/grub/manual/html_node/default.html

Par exemple si on veut booter sur la première entrée des anciens noyaux on peut modifier dans /etc/default/grub la ligne comme suit GRUB_DEFAULT="Previous Linux versions>0" 0 étant la première ligne. C'est utile quand on utilise des noyaux sécifiques pour Xen par exemple , noyaux qui vont tous se ranger proprement dans un submenu spécifique.

* ou sudo mv /etc/grub.d/30_os-prober /etc/grub.d/06_os-prober (pour mettre windows par défault) ne pas oublier sudo update-grub pour que la modification soit prise en compte.

Exemple : Résolution d'affichage

  • Pour avoir la liste de toutes les résolutions supportées pendant le démarrage : taper "c" quand vous êtes dans le menu du boot pour entrer en mode console. Puis :
vbeinfo

Ligne à éditer :
# GRUB_GFXMODE=640x480
Enlever le "#" devant "GRUB_GFXMODE=" et définir une résolution d'écran en fonction de votre matériel. Cela nous donnera notamment plus de liberté pour configurer un fond d'écran (voir plus bas).

Exemples:
GRUB_GFXMODE=1280x1024,1024x768x32
La deuxième valeur sera prise en compte si la première n'est pas supportée par votre matériel. Celle-ci retombera à 640x480 si aucune des deux ne convient. Le x32 est la profondeur de codage des couleurs en bits (attention pas d'espace après la virgule sinon il y aura un message d'erreur lors de l'update-grub).

Pour prendre en compte le changement :

sudo update-grub

Exemple : ancien paramètre vga=xxx

Dans les options de boot d'un Linux, on trouve parfois le paramètre "vga=788" pour activer le framebuffer avec une définition d'écran donné. Dans Grub2, il faut utiliser une ligne à part "set gfxpayload=800x600x16" à la place. Pour les autres résolutions, consultez le tableau en lien suivant :

Donc, au lieu de :

linux /boot/vmlinuz ... vga=788 ...

On aura

set gfxpayload=800x600x16, 800x600
linux /boot/vmlinuz ...

Exemple : Fond d'écran

Pré-requis

  • Avoir installé le paquet ImageMagick est fortement recommandé.
  • Pour cet exemple :
    • on fixera une résolution de : GRUB_GFXMODE=800x600x32,800x600 (voir plus haut)
    • on stockera l'image de fond dans le dossier /boot/grub/ car cela simplifie beaucoup les choses pour certains cas particuliers (pour une partition /boot ou /home séparée, pour les partitions LVM, pour une mise à jour en mode recovery/récupération,..) et il fait partie des dossiers par défaut inclus dans les scripts de Grub.

Configuration de /etc/grub.d/05_debian_theme

Attention : la procédure est différente entre le grub-efi fourni avec Ubuntu 11.04 (Natty Narwhal) et les versions qui précèdent.

pour Grub-pc version 1.99 fourni avec Ubuntu 11.04 (Natty Narwhal),

  • copier une image (*.jpg, *.png ou *.tga) dans le répertoire /boot/grub (utiliser les droits superutilisateur)
  • dans une console faire un: sudo update-grub
  • redémarrer et votre nouveau fond d'écran est là (première image rencontrée par ordre alphabétique dans le dossier /boot/grub).

pour Grub-efi version 1.98 fourni avec Ubuntu 10.04 (Lucid Lynx) et suiv. autres que Natty, on éditera le fichier /etc/grub.d/05_debian_theme avec les droits superutilisateur et on y modifiera les lignes 10, 11 et 12 comme suit :

  WALLPAPER="00_image_de_fond.jpg"
  COLOR_NORMAL="white/black"
  COLOR_HIGHLIGHT="light-green/magenta"

Donc pour Lucid et Co, on a :

  • donné le nom du fichier contenant le fond d'écran,
  • défini une couleur de texte (color_normal) en blanc sur fond transparent (la couleur noire en deuxième correspond à la couleur transparente)
  • défini une couleur de texte sélectionné (color_highlight) à vert clair sur fond en magenta.

Images au bon format

L'image choisie comme fond d'écran peut ne pas fonctionner du premier coup (rapport 16/10ème pour un écran 4/3, provenance macintosh,..). Pour la rendre lisible pour Grub, on pourra la convertir, par exemple, comme suit :

convert $HOME/Images/image_exemple.jpg -resize 1024x768! -depth 16 $HOME/Images/image_exemple_au_bon_format.jpg

Utilisation

Pour modifier l'image de fond, il suffira de faire une copie de celle-ci avec les droits superutilisateur vers le dossier grub. Par exemple :

sudo cp $HOME/Images/image_exemple.jpg /boot/grub/00_image_de_fond.jpg

Lors de la première utilisation, ne pas oublier de lancer un :

sudo update-grub

Méthode vue sur ArchWiki

Une autre méthode existe indiquée sur ce site: GRUB2 - ArchWiki. Elle est fortement déconseillée car on intervient sur le fichier grub.cfg directement (et il faudra refaire à la main le changement dès le moindre update-grub lancé par nous ou par le gestionnaire de mises à jour). Documentation effacée pour grub-efi.

Script pour automatiser les modifications de couleurs et image de fond d'écran

Si les modifications manuelles de "/boot/grub/grub.cfg" sont déconseillées, il est toutefois possible de les faire réaliser par un programme. Vous trouverez à cette adresse un script pour changer de fond d'écran de GRUB − par exemple au hasard et à chaque redémarrage − dans une sélection de thèmes définis dans un fichier de configuration.

Tutoriel pour démarrer une image iso

Dans ce tutoriel vous aurez des exemples de menus "prêts à l'emploi" pour lancer les livecd Ubuntu ou autres :

Lancer des images iso directement depuis GRUB 2

Rechercher d'autres OS présents sur la machine et les rajouter à GRUB automatiquement

Si le script /etc/grub.d/30_os-prober (voir plus haut) n'a pas trouvé les autres systèmes présents sur la machine, il est possible d'utiliser le logiciel OS-prober pour faire la même chose :

sudo os-prober
sudo update-grub

NB: il semblerait que os-prober ait encore quelques problèmes avec le RAID (http://lists.gnu.org/archive/html/bug-grub/2011-02/msg00030.html) et ne fonctionne pas dans ce cas-là.

Ajouter du rootdelay au démarrage

Si vous tombez sur une busybox au démarrage, il est possible que le système n'ait pas attendu assez longtemps pour que les disques durs s'initialisent. Vous pouvez continuer le démarrage par un simple ctrl+d dans la busybox, si ça marche je vous conseil d'ajouter du rootdelay dans grub.

Pour cela éditer /etc/default/grub pour changer le

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

en

GRUB_CMDLINE_LINUX_DEFAULT="rootdelay=40 quiet splash"

Le temps à attendre est à estimer. Une fois la ligne éditée il faut mettre à jour le fichier de config de grub:

$ sudo update-grub

Maintenant à chaque mise à jour du kernel le rootdelay sera inséré.

Problème : Long temps de chargement

Si au boot, le lancement de grub est long et que le disque dur fait du bruit, vous souffrez probablement du bug 420933. Le problème semble être que GRUB2 cherche les uuid de toutes les partitions au démarrage, jusqu'à trouver celle contenant /boot/grub. Cela prend du temps.

Solution: installer une version plus récente de GRUB, par exemple via les Options avancées de Boot-Repair.

Une autre solution est de modifier le disque de démarrage dans le BIOS pour démarrer sur le disque où se trouve votre Ubuntu. Plus de détail dans ce sujet du forum.

  • utilisateurs/bigou/grub-efi.1382368173.txt.gz
  • Dernière modification: Le 21/10/2013, 17:09
  • par Canigou 66