update-grub
, au moins dans Debian et ses proches comme Ubuntu, n’est fondamentalement qu’une enveloppe autour de grub-mkconfig
. Donc, il crée/met à jour/régénère la configuration de GRUB, pas le chargeur de démarrage réel lui-même.
Ce que fait réellement le grub-install
dépend de la version de GRUB que vous exécutez : GRUB BIOS traditionnel ou GRUB UEFI ?
Avec le BIOS GRUB traditionnel, grub-install
va (ré)écrire la partie du GRUB intégrée dans le Master Boot Record, et y encoder les numéros de bloc du disque physique à partir desquels lire la partie suivante du GRUB. Il déterminera également à partir de quelle partition le fichier de configuration GRUB réel (/boot/grub/grub.cfg
) sera lu. Un facteur important ici est le fichier /boot/grub/device.map
, qui indique à GRUB comment la numérotation des périphériques du BIOS (et donc de GRUB) correspond aux périphériques de disque Linux.
Avec le GRUB UEFI, la partie principale du chargeur de démarrage GRUB sera située comme un fichier dans la partition système EFI, typiquement sous le nom de /boot/efi/EFI/<name of distribution>/grubx64.efi
ou similaire. Ce nom de chemin du chargeur de démarrage est stocké dans la NVRAM du système (= l’endroit où les paramètres du BIOS sont stockés) dans les variables de démarrage UEFI. La partie principale de GRUB peut être complètement autonome (et doit l’être si Secure Boot est utilisé !) ou elle peut charger des fonctionnalités supplémentaires en tant que modules GRUB, généralement à partir du répertoire /boot/grub
de la distribution Linux dont elle fait partie.
Les variables de démarrage UEFI identifieront le disque que le système doit utiliser pour rechercher la partition système EFI et le fichier de chargeur de démarrage à l’intérieur. Vous pouvez visualiser ces variables vous-même, en utilisant la commande efibootmgr -v
. La commande grub-install
mettra à jour ces variables, sauf si vous utilisez l’option --no-nvram
pour spécifier le contraire.
En conséquence, avec le BIOS traditionnel et l’UEFI, l’exécution de grub-install
peut mettre à jour votre chargeur de démarrage pour lire un fichier de configuration GRUB complètement différent sur un disque complètement différent – bien que les détails de ce processus soient complètement différents.
Avec l’UEFI, vous pouvez effectivement changer votre sélection de périphérique de démarrage à partir de l’OS, avec soit efibootmgr
soit grub-install
. Mais grub-install
est une surcharge massive pour cela : si vos deux installations sont UEFI et ont leurs propres partitions ESP séparées, elles auront leurs propres variables de démarrage UEFI et la sélection entre elles peut facilement être faite avec efibootmgr
, ou en effet dans les paramètres du BIOS UEFI.
Avec le BIOS traditionnel, c’est un peu plus désordonné : vous voudrez vous assurer que le /boot/grub/device.map
de chaque installation identifie le disque de cette installation spécifique comme hd0
, et l’autre comme hd1
. Ensuite, utilisez grub-install
pour écrire le chargeur de démarrage uniquement sur le disque de chaque installation, jamais sur le disque « opposé ». De cette façon, les deux disques seront complètement autonomes et amorçables même si l’autre disque est complètement retiré. Vous pouvez ajouter un élément de menu dans les fichiers de configuration de chaque GRUB qui vous permettra de démarrer l’installation « opposée », si vous le souhaitez. Ou vous pouvez simplement utiliser le BIOS pour sélectionner le disque à partir duquel démarrer.
Ce que vous devez savoir, c’est que le sélecteur d’ordre de démarrage des BIOS traditionnels fonctionnera généralement en faisant du disque sélectionné pour le démarrage le « premier » disque pour les fonctions du BIOS, et donc le hd0
de GRUB fera toujours référence au « disque qui est actuellement sélectionné pour le démarrage dans le BIOS ».
Donc, si vous démarrez actuellement à partir de /dev/sda
(donc le BIOS dit que sda
est hd0
), et que vous voulez qu’un élément de menu GRUB sur ce disque passe au menu de démarrage de /dev/sdb
, vous utiliserez quelque chose comme:
menuentry "Switch to /dev/sdb"{ # flip the disk mappings and reload configuration drivemap -s (hd0) (hd1) set root=<the identifier for sdb's partition that contains grub.cfg> configfile /boot/grub/grub.cfg # or just /grub/grub.cfg is /boot is a separate partition}
… et de même sur la configuration GRUB de /dev/sdb aussi.