J’ai le temps d’approfondir un peu.
Concernant l’installation multiple de chargeurs GRUB, il y a deux possibilités :
a) Chaque chargeur GRUB a son propre répertoire DIR/grub contenant grub.cfg, les modules, etc. Par défaut DIR=/boot, peut être spécifié avec l’option [mono]–boot-directory=DIR[/mono] de grub-install.
Avantage : chaque chargeur peut être totalement indépendant et autonome, si le répertoire se trouve sur une partition contenue dans le périphérique d’installation.
b) Tous les chargeurs partagent le même répertoire /boot/grub et donc le même fichier de configuration /boot/grub/grub.cfg. Dans ce cas l’amorçage depuis n’importe lequel des périphériques sur lesquels le chargeur GRUB est installé affichera le même menu. Par contre le nommage des périphériques changera, (hd0) désignant toujours le périphérique d’amorçage. Mais cela ne devrait pas être gênant pour la partie générée automatiquement par update-grub, qui utilise les UUID par défaut.
Note : cela peut ne pas fonctionner si grub-install refuse d’installer le chargeur sans l’option [mono]–force[/mono] à cause de l’utilisation des listes de blocs sur au moins un des périphériques.
Avantage : un seul fichier de configuration.
Inconvénient : le chargeur installé sur la clé USB ne fonctionnera pas sur une autre machine puisqu’il est lié au répertoire /boot/grub que se trouve sur un des disques internes.
Pour la suite je vais considérer l’option a).
Prenons une clé USB vue comme /dev/sdg, contenant une partition /dev/sdg1 contenant un système de fichiers de type quelconque lisible par GRUB (FAT, ext4…). On la monte sur /mnt.
On créé un répertoire “grub” à la racine de la clé.
On installe le chargeur GRUB sur la clé.
Selon la façon dont la clé est partitionnée, il peut être nécessaire d’ajouter l’option --force s’il n’y a pas d’espace suffisant pour “l’embarquage” de la core image.
Pour finir on crée un fichier de configuration /mnt/grub/grub.cfg. Pour amorcer une image ISO se trouvant sur la même partition que les fichiers de GRUB, ces lignes suffisent, la variable $root étant déjà initialisée avec le nom de cette partition.
set isofile=/chemin/vers/image.iso
loopback loop $isofile
set root=(loop)
linux /chemin/vers/vmlinuz options
initrd /chemin/vers/initrd.gz
Si le fichier ISO est dans une autre partition de la clé, il est possible de rechercher et d’identifier celle-ci grâce à la présence du fichier.
set isofile=/chemin/vers/image.iso
search --file $isofile --set=rootiso
loopback loop ($rootiso)$isofile
set root=(loop)
linux /chemin/vers/vmlinuz options
initrd /chemin/vers/initrd.gz
Il est aussi possible d’identifier la partition par son UUID ou son label, récupérables par [mono]blkid[/mono].
search --fs-uuid <uuid> --set=rootiso
search --label <label> --set=rootiso