Grimoire-
Command
.es

GNU+Linux command memo

Memo_18 : Le chargeur d'amorçage GRUB 2

D’après l’édition 11 des travaux d’Alain Leaper, 2018-04-10
Mis à jour le 2020-02-19
Licence GPL


Voici quelques astuces concernant grub et les interventions qu’on peut être amené à mener pour le réparer.

1. Numérotation des disques et des partitions

Le premier disque dur (IDE) est /dev/hda (devenu /dev/sda avec les bus SATA).

Pour grub, ça reste : hd0.

Le deuxième disque dur est /dev/hdb (ou /dev/sdb), pour grub : hd1.

Et ainsi de suite /dev/sdc/, /dev/sdd

Cette numérotation des supports physiques est donc la même que pour grub-legacy, alors que la numérotation des partitions change elle.

La première partition porte le numéro 1 pour grub-2 alors que c’était 0 pour grub-legacy.

Par Exemple, la 3e partition du 2e disque est désignée dans grub-2 par : hd1,3

2. Changer la temporisation de démarrage

Pour cela il faut éditer le fichier : /etc/default/grub

Modifier la ligne (temps en secondes):

GRUB_TIMEOUT=12  (1)
1 Pour 12s

Puis lancer la commande suivant pour rejouer la configuration :

# update-grub
Toute modification directe du fichier /boot/grub/grub.cfg sera perdue après un update-grub.

3. Modifier l’ordre des choix de lancement au démarrage

Les fichiers du répertoire /etc/grub.d sont exécutés dans l’ordre lexicographique de leurs nom. Ils commencent donc par des numéros pour que ça saute au yeux : 00_… est donc exécuté avant 05_…, puis 10_… etc.

En cas de "dual boot" avec Microsoft Windows, pour faire démarrer ce dernier système par défaut, il suffit de réaffecter ces numéros.

Exemple, à l’origine: 10_linux 30_os-prober

En donnant un numéro inférieur à la détection d’OS, un autre OS présent sur le disque dur sera détecté avant le lancement de GNU+Linux :

# mv /etc/grub.d/30_os-prober /etc/grub.d/09_os-prober (1)
# update-grub
1 Par exemple, mais n’importe quel numéro inférieur à 10 fait l’affaire.

4. Chargement d’un système d’exploitation respectant les spécifications Multiboot

Le fichier /etc/grub.d/40_custom sert de modèle pour une telle opération, on peut donc le copier pour commencer.

# cp /etc/grub.d/40_custom /etc/grub.d/36_<a>

Vérifier que 36_<a> est exécutable, et l’éditer pour le rendre conforme au cas souhaité. Ici le fichier à viser pour le démarrage se nomme /boot/<b>.elf, et la racine (/) se trouve sur la sixième partition du premier disque dur /dev/sda6) :

#!/bin/sh
exec tail -n +3 $0

# autre OS : racine sur le 1er disque dur, 6e partition (/dev/sda6), fichier /boot/<b>.elf
menuentry  "<a>" {
       set root=(hd0,6)
       multiboot /boot/<b>.elf root=/dev/sda6 ro
}

Après sauvegarde du fichier, mettre grub à jour : # update-grub

5. Chargement de Microsoft Windows

Il peut être utile de vérifier la présence de celui-ci.

# os-prober

Le mode opératoire est semblable au cas précédent.

En supposant que Windows XP se trouve sur /dev/sda1 :

#!/bin/sh
exec tail -n +3 $0

EOF
menuentry "windows XP" {
   set root=(hd0,1)
       chainloader +1
}
EOF

Après sauvegarde, mettre grub à jour : # update-grub

6. Ré-installation du grub d’un système tiers

Il s’agit de déplacer le répertoire racine d’un système lancé (par exemple depuis un live-cd) vers un nouveau répertoire (par exemple le disque dur de la machine hôte à réparer) :

# mkdir /media/disk
# mount /dev/mapper/<machine>--vg-root /media/disk (1)
# mount /dev/sda2 /media/disk/boot (2)
# mount /dev/sda1 /media/disk/boot/efi (2)
# mount -o bind /dev /media/disk/dev
# mount -o bind /sys /media/disk/sys
# mount -o bind /proc /media/disk/proc
# chroot /media/disk
# ls /media (3)
# grub-install /dev/sda && update-grub (4)
1 Here it’s for an encrypted Debian (Jessie, Stretch)
2 Mount non-encrypted boot (and efi) partition if any
3 There is no disk folder anymore, you got in !
4 Optional : to re-install GRUB once chrooted for instance

Les commandes sont tirées de : chroot liveCD to HD.

7. Autre commandes parfois utiles pour grub

Pour générer un fichier de configuration.

# grub-mkconfg

Pour régénerer le fichier device.map

# grub-mkdevicemap

8. Plusieurs OS (Debian/Ubuntu) sur un même disque

Et choix du système d’exploitation par défaut. Dans /etc/default/grub :

GRUB_DEFAULT=XXX (1)
1 XXX est un numéro paire. C’est le dernier OS installé sur le disque qui se place généralement en 1ère position. Il est donc possible ici de choisir un autre OS dans la liste.

Puis il faut mettre à jour le chargeur d’amorçage via la commande :

# grub-update
La numérotation des systèmes d’exploitations listés commence à l’indice 0. C’est donc l’OS 0 qui est le 1er de la liste.
Les lignes impaires sont pour le mode sans échec, encore appelé "de récupération".