Je ne connais pas de solution idéale à part passer en amorçage BIOS qui permet de gérer la redondance de l’amorçage de façon beaucoup plus simple et fiable. Voici des éléments d’information et de réflexion en vrac.
Mettre les partitions EFI en RAID1 logiciel et monter l’ensemble RAID résultant sur /boot/efi : c’est possible mais le format par défaut (1.2) place le superbloc RAID au début des partitions membres et décale le superbloc FAT, ce qui empêche le firmware EFI de le reconnaître. Il faut donc forcer le format 1.0 qui place le superbloc RAID à la fin des partitions membres et ne décale pas le superbloc FAT, comme l’ancien format obsolète 0.90.
Par contre l’enregistrement automatique de GRUB dans les variables de boot EFI par grub-install
ne fonctionne pas dans une telle configuration, car l’ensemble RAID1 ne peut être traduit en informations de partitions compatibles avec les variables de boot EFI. Il y a trois possibilités :
-
Créer manuellement une entrée de boot EFI pour chaque partition RAID1 avec
efibootmgr
. -
Attribuer le même UUID de partition (PARTUUID) aux trois partitions RAID1 et créer manuellement une seule variable de boot EFI pour les trois.
-
Installer GRUB dans le « chemin de support amovible » et ne pas créer de variable de boot EFI. C’est automatisable car le paquet grub-efi-amd64 supporte ces options.
Si on ne met pas les partitions EFI en RAID, une seule peut être montée sur /boot/efi et il faut synchroniser son contenu dans les deux autres d’une façon ou d’une autre. Idéalement il faut le faire après chaque mise à jour ou reconfiguration des paquets grub* ou shim*, qui provoque la réinstallation de GRUB. Mais je ne sais pas comment on peut automatiser ça.
Une possibilité consiste à installer manuellement GRUB dans les deux autres partitions EFI avec grub-install
et les options qui vont bien. Mais on se heurte potentiellement à une difficulté pour créer les variables de boot EFI : par défaut, la variable est nommée « debian », et d’après mon expérience le firmware UEFI peut réagir de deux façons :
- soit il remplace la variable existante de même nom (cas le plus fréquent), ce qui va à l’encontre de la redondance recherchée
- soit il ajoute une nouvelle variable avec le même nom (cas plus rare)
L’option --bootloader-id de grub-install
permet de donner un nom différent à la variable de boot EFI, mais détermine aussi le nom du répertoire dans /EFI/ de la partition EFI où GRUB sera installé. Or la variante de GRUB signée pour le secure boot (installée par défaut) a le chemin /EFI/debian codé en dur pour son fichier de configuration grub.cfg initial, donc ne fonctionne pas s’il est installé dans un répertoire différent. Contournements possibles :
- créer un répertoire /EFI/debian et y copier le fichier grub.cfg
- installer la variante non signée de GRUB qui n’a pas besoin de fichier grub.cfg dans la partition EFI
Une autre possibilité consiste à synchroniser le contenu des partitions EFI avec rsync
par exemple.
Dans tous les cas, la difficulté revient encore et toujours à la gestion des variables de boot EFI pour assurer la redondance de l’amorçage. Une seule variable de boot EFI pourrait suffire si toutes les partitions EFI ont le même PARTUUID. Sinon il faut créer une variable de boot par partition. Ou bien on n’utilise pas de variables de boot (qui sont fragiles et mal gérées par de nombreux firmwares UEFI) et on utilise seulement le chemin de support amovible. C’est l’option que je choisirais.