Apres une mise en bouche de l’installation d’une distribution Ubuntu, nous voici dans ce tutoriel (un vrai pour une fois) pour configurer Grub de A à Z.
I.Configuration pour débutant
Grub Customizer est une application graphique plus avancée qui, si elle ne gère pas les thèmes de chargement, permet de modifier la plupart des paramètres de GRUB, entre autres :
choisir une entrée de menu d’amorçage à sélectionner par défaut ;
masquer, changer l’ordre, ajouter ou supprimer des entrées du menu d’amorçage ;
ajouter des paramètres au noyau ;
modifier la résolution d’affichage ;
modifier les couleurs du menu GRUB ;
ajouter une image d’arrière-plan.
II.Configuration avancée
II.a. À connaître avant de configurer manuellement
Afficher le menu
Le menu de GRUB ne s’affiche pas sur un PC mono-système depuis Ubuntu Lucid / 10.04. 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-pc (à 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-pc.
/dev/hdc5 ou /dev/sdc5 sera nommé hd(2,5) par grub-pc.
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
II.b.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 :
/boot/grub/device.map
/etc/default/grub
l’ensemble des fichiers contenus à la racine du dossier /etc/grub.d/
pour générer automatiquement un nouveau grub.cfg *
II.c. 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=640×480 (→ 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=1024×768 : à 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-pc 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.