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
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