Grub2 - Personnalisation

Septembre 2016


Avec plusieurs systèmes d'exploitation, le menu de sélection de Grub2 peut s'avérer pénible, voire bordélique. Il faut soit accepter tel quel ce menu, soit le modifier. La modification peut aller plus ou moins loin. Cependant, mieux vaut être très vigilant en le modifiant.

Pour rappel, Grub2 est installé sur la racine du disque maître, généralement SDA. Ensuite à chaque mise à jour d'un noyau, de la distribution GNU/Linux principale ou optionnelle, ou après l'ajout (ou la suppression) d'un autre système, la commande update-grub (sous droits root) met à jour le fichier de configuration de Grub2 (/boot/grub2/grub.cfg et /boot/grub/grub.cfg pour Debian et Ubuntu). C'est ce fichier grub.cfg qui est appelé et lu pour proposer les systèmes d'exploitation. Proposition affichant une sorte de liste avec en tête de liste le système principal puis les options avancées, les autres systèmes venant ensuite dessous.

Modifier ce fichier grub.cfg n'est pas recommandé. Mieux vaux faire une copie de sécurité avant toute modification grâce à la commande suivante (sous root) :
# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg-bak-date

Je vais donc exposer ici les griefs contre le fichier grub.cfg généré automatiquement, puis ce qu'il est possible de modifier et comment. Viendra enfin la solution de la personnalisation de grub.cfg via le fichier 40_custom.

Les reproches de grub.cfg

Tel quel, le rendu de grub.cfg n'est pas obligatoirement plaisant.

2 versions de Mageia en cohabitation

Si 2 versions de Mageia sont installées (une stable et la cauldron), le fichier de configuration de grub crée une sorte de doublon. En plus des noyaux de la version de base, sont également inclus les noyaux de la seconde version dans les options avancées. Ainsi, avec une Mageia 5 sur SDA2 et une Mageia 4 (ou Cauldron) sur SDB1, on trouve des lignes notées "(sur /dev/sda2) (sur /dev/sdb1) dans les options avancées.

Pour la seconde version installée de Mageia, donc une Mageia optionnelle, les noyaux sont listés, dans les options avancées, du plus récent en tête de liste (en haut) au moins récent et ces noyaux indiqués clairement. Ensuite, viennent les lignes doublonnant avec la version Mageia principale.

Fedora

Si Fedora est installé en plus d'autre(s) distribution(s), l'installation de Grub2 met systématiquement en tête de liste le noyau de secours ("rescue") ou de débogage ("+debug"), ce qui peut nuire ensuite au confort d'utilisation puisque la taille de l'écran n'est plus maximale. Pour rappel, le pilote graphique est alors générique avec les modes "rescue" et/ou "debug". Il faut donc aller chercher le bon noyau dans les options avancées.

De plus, les options avancées ne mentionnent pas la version du noyau appelé. Il faut sélectionner au hasard. Cependant, la règle semble alors être de placer en tête de liste des options avancées (en haut) l'option rescue (ou debug) puis les autres noyau pour avoir enfin le tout dernier noyau (le plus récent) en fin (en bas).

Par contre, bizarrement, le fichier généré sous Fedora met en évidence les versions de noyaux de Fedora et en plaçant en tête de liste les noyaux principaux puis en dessous les noyaux de secours.

Debian et Ubuntu

Pour Debian et Ubuntu (toujours en tandem avec une autre distribution), c'est l'inverse du cas Fedora. Grub2 indique correctement les noyaux et place en tête de liste (en haut) les noyaux les plus récents pour mettre les autres au milieu et terminer par le mode "recovery" (rescue) puis "memtest".

Modification basique de grub.cfg

Pour rappel, modifier ce fichier grub.cfg n'est pas recommandé. Mieux vaux faire une copie de sécurité avant toute modification grâce à la commande suivante (sous root) :
# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg-bak-date

Pour modifier grub.cfg, le plus simple est d'utiliser Grub Customizer. Certains passeront par un éditeur de texte comme nano, kate, gedit, leafpad ... etc .. Toujours sous root.

Dans ce cas de figure, je me contente seulement de renommer au besoin la version du système d'exploitation et de mettre en valeur la version du noyau appelé dans les options avancées. Inutile de se compliquer la tâche, ni des risques inutiles à corrompre la structure du fichier.

Exemples :

1) Renommage du système :
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Mageia 5'


Devient
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Mageia SDB1'


2) Mise en valeur du noyau :
menuentry "Fedora 23 (Twenty Three) (sur /dev/sda3)" 
... etc ...
initrd /boot/initramfs-4.3.3-300.fc23.x86_64.img

Devient
menuentry "Fedora SDA3 (4.3.3-300.fc23.x86_64)"
... etc ...
initrd /boot/initramfs-4.3.3-300.fc23.x86_64.img


La règle est de rester sur des modifications absolument minimales pour ne pas prendre de risque.

Installation de Grub2 dans SDXn

Installons pour chaque distribution GNU/Linux Grub2 dans la racine de la partition d'installation de la distribution, soit SDXn (X représentant le disque (SDA, SDB ...) et n le numéro de partition. Tout se fait avec les droits root.

Cette opération permettra de chaîner correctement les divers systèmes par la suite.

Mageia secondaire

# grub2-install --force /dev/sdb1
puis
# update-grub

Debian, Ubuntu secondaire

# grub-install --force /dev/sda5
puis
# update-grub

Fedora secondaire

# grub2-install --force /dev/sda3
puis
# grub2-mkconfig -o /boot/grub2/grub.cfg

Modification de grub.cfg dans SDX

Pour rappel, modifier ce fichier grub.cfg n'est pas recommandé. Mieux vaux faire une copie de sécurité avant toute modification grâce à la commande suivante (sous root) :
# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg-bak-date

Pour modifier grub.cfg, certains passeront par un éditeur de texte comme nano, kate, gedit, leafpad .... Toujours sous root.

Nous allons modifier le fichier grub.cfg principal. C'est le Grub2 principal que nous modifions, c'est à dire le Grub2 utilisé par la distribution GNU/Linux principale et qui est installé sur la racine du disque principal, soit SDA en toute logique.

Ceci se fait par étape.

Modifier /etc/default/grub

Il faut éditer le fichier /etc/default/grub, sous droits root.

Passer de "false" à "true" la ligne suivante
GRUB_DISABLE_OS_PROBER="true"

Ceci désactive la recherche d'autres systèmes d'exploitation lors de la mise à jour de grub.cfg.

Modifier /etc/grub.d/40_custom

Il faut maintenant éditer le fichier /etc/grub.d/40_custom, sous droits root. Si ce fichier n'existe pas, créez-le.

Ajouter les lignes suivantes, sous root :

#!/bin/sh
exec tail -n +3 $0
# 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.
#
# Windows SDA1
menuentry 'Windows 7 SDA1' {
set root='hd0,msdos1'
chainloader +1
}
# Mageia Cauldron SDA2
menuentry 'Mageia Cauldron SDA2' {
set root='hd0,msdos2'
chainloader +1
}
# Fedora SDA3
menuentry 'Fedora SDA3' {
set root='hd0,msdos3'
chainloader +1
}
# Debian SDA5
menuentry 'Debian SDA5' {
set root='hd0,msdos5'
chainloader +1
}
# Ubuntu SDA8
menuentry 'Ubuntu SDA8' {
set root='hd0,msdos8'
chainloader +1
}


A adapter selon la situation, évidemment.

Note 1 : Notation selon le système de partition :
  • Pour un partitionnement MSDOS : set root='hd0,msdos1'
  • Pour un partitionnement GPT : set root='hd0,gpt1'


Note 2 : Notations fonctionnelles :
  • set root='hd0,msdos1'
  • set root=(hd0,1)


Si, cas peu probable, ce fichier 40_custom doit être créé, celui-ci doit être exécutable. Soit, sous root :
# chmod +x /etc/grub.d/40_custom

Regénérer le fichier grub.cfg

Sous root, en console, :
# update-grub

Notez que sous Fedora, ce sera la ligne suivante :
# grub2-mkconfig -o /boot/grub2/grub.cfg

Si tout se passe bien, la console doit lister les seuls noyaux du système principal. Une édition (via nano ....) de grub.cfg doit afficher :
  • une rubrique 10_linux_proxy se référant au système d'exploitation principal (avec ses divers noyaux) et que nous ne toucherons pas
  • une rubrique 30_os-prober désormais vide (qui contenait auparavant les références vers les divers systèmes)
  • une rubrique 40_custom complétée avec les éléments que nous venons de noter plus haut dans le fichier 40_custom (chap. 4.2)

Validation

Il ne reste plus qu'a valider en redémarrant le système afin de démarrer chacun des divers systèmes d'exploitation.

Dans les deux cas suivants, il faudra démarrer à l'aide de SuperGrub (cf chap 6) le système afin d'installer Grub2 dans la partition racine comme indiqué au chapitre 3.
  • Si l'erreur signale "invalid signature", Grub2 n'a pas été installé.
  • Si l'erreur mentionne "GNU GRUB version 0.97", vous avez installé Grub dans sa version dite "Legacy" (soit la version Grub 1) et votre Grub2 ne sait pas voir et interpréter ce sélecteur de système d'exploitation.


Si après avoir réinstallé Grub2 correctement dans la partition racine correspondante, une erreur persiste, revérifiez dans le fichier 40_custom la notation des disques et/ou partitions.

Si la personnalisation est fonctionnelle, vous n'aurez plus à mettre à jour grub.cfg. A chaque mise à jour de noyau d'une distribution GNU/Linux secondaire, ce sera son propre fichier grub.cfg qui sera mis à jour automatiquement. Or, désormais, le Grub2 principal appellera par chaînage le fichier grub.cfg de la distribution secondaire sans devoir pointer vers un noyau précisé. Gain de temps et simplification !

SuperGrub

Veuillez noter le lien suivant :
http://www.supergrubdisk.org/

En cas de problème, cet utilitaire gratuit, et open-source, permet de détecter tous les systèmes d'exploitation installés afin de démarrer dessus.

Voir aussi la FAQ suivante pour davantage d'informations montrant le mode d'utilisation :
http://www.commentcamarche.net/faq/15961-super-grub-disk-live-cd

Lien annexe

Une excellente page fort complète sur Grub2 (y compris comment paramétrer, dépanner ...) :
http://www.linuxpedia.fr/doku.php/expert/grub2#premier_contact_avec_la_configuration

A voir également :

Ce document intitulé «  Grub2 - Personnalisation  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.