Mise à jour : Debian 10.0
L'objectif est de disposer d'une clé USB autonome, amorçable sur un système UEFI, donnant accès
à la détection et au lancement des systèmes EFI présents sur le système
et à divers outils tels que grub, shell EFI, memtest, gdisk
La clé utilise le Gestionnaire d'amorçage rEfind :
"rEFInd is a fork of the rEFIt boot manager. Like rEFIt, rEFInd can auto-detect your installed EFI boot loaders and it presents a pretty GUI menu of boot options.
rEFInd goes beyond rEFIt in that rEFInd better handles systems with many boot loaders, gives better control over the boot loader search process, and provides the ability for users to define their own boot loader entries."
Références :
Sommaire
L'installation de refind sur une clé usb s'effectue en deux temps
Création d'une clé vierge avec une partition ESP (EFI système partition)
Installation de rEFInd sur l'ESP au moyen d'un script fourni par le paquet refind
Connecter la clé sur la quelle refind sera installée et l'identifier, dans le cas présent /dev/sdb.
Effacer les traces de partitionnement éventuellement présentes
$ sudo dd if=/dev/zero of=/dev/sdb count=500MB bs=1 && sync
Créer la table de partition gpt
$ sudo parted /dev/sdb mklabel gpt
Créer une partition fat32 d'au moins 510MB
$ sudo parted /dev/sdb mkpart primary fat32 1 551
Attribuer le flag "boot" à la partition fat32
$ sudo parted /dev/sdb set 1 boot on
Optionnellement, nommer la partition ESP
$ sudo parted /dev/sdb name 1 ESP
Formater la partition ESP en fat32
$ sudo mkfs.fat -F32 /dev/sdb1
mkfs.fat 4.1 (2017-01-24)
$ sudo parted /dev/sdb print
Model: VendorCo ProductCode (scsi)
Disk /dev/sdb: 15,9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 551MB 549MB fat32 ESP boot, esp
Lancer l'installation du paquet refind
$ sudo aptitude install refind
$ aptitude versions refind
i 0.11.3-1 stable,testing 500
Au cours du dépaquetage refuser l'installation sur le système
Installer refind sur la partition ESP de la clé USB
$ sudo refind-install --usedefault /dev/sdb1 --alldrivers
ShimSource is none
Installing rEFInd on Linux....
Note: IA32 (x86) binary not installed!
Copied rEFInd binary files
Copying sample configuration file as refind.conf; edit this file to configure
rEFInd.
Afficher le contenu de la clé et vérifier la présence de /EFI/BOOT/bootx64.efi
$ sudo mount /dev/sdb1 /mnt
$ tree /mnt
/mnt
└── EFI
└── BOOT
├── BOOT.CSV
├── bootx64.efi
├── drivers_x64
│ ├── btrfs_x64.efi
│ ├── ext2_x64.efi
│ ├── ext4_x64.efi
│ ├── hfs_x64.efi
│ ├── iso9660_x64.efi
│ ├── ntfs_x64.efi
│ └── reiserfs_x64.efi
├── icons
│ ├── arrow_left.png
│ ├── arrow_right.png
│ ├── boot_linux.png
│ ├── os_refind.png
│ ├── os_refit.png
│ ├── os_slackware.png
├── keys
│ ├── altlinux.cer
│ ├── canonical-uefi-ca.der
│ ├── centos.cer
│ ├── fedora-ca.cer
│ ├── microsoft-kekca-public.der
│ ├── microsoft-pca-public.der
│ ├── microsoft-uefica-public.der
│ ├── openSUSE-UEFI-CA-Certificate-4096.cer
│ ├── openSUSE-UEFI-CA-Certificate.cer
│ ├── refind.cer
│ └── SLES-UEFI-CA-Certificate.cer
└── refind.conf
5 directories, 92 files
Démonter la clé
$ sudo umount /dev/sdb1
$ sudo aptitude install qemu ovmf
$ sudo qemu-system-x86_64 /dev/sdb1 --bios /usr/share/ovmf/OVMF.fd
Référence : Installing Additional Components
Les composants supplémentaires sont recopiés dans un répertoire tools de la clé USB
$ sudo mount /dev/sdb1 /mnt
$ sudo mkdir -p /mnt/EFI/tools
refind reconnaît et permet de lancer un programme uefi shell lorsqu'ils est placé dans le répetoire EFI/tools sous le nom de shellx64.efi
Préparer une version du Shell UEFI : voir Programmes UEFI
Copier Shell.efi dans l'ESP de la clé refind sous le nom de shellx64.efi
$ sudo cp Shell.efi /mnt/EFI/tools/shellx64.efi
refind reconnaît et permet de lancer un programme memtest86 lorsqu'ils est placé dans un répetoire EFI/tools/memtest
$ sudo mkdir -p /mnt/EFI/tools/memtest
$ sudo cp -r XXXXXXXX /mnt/EFI/tools/memtest
refind reconnaît et permet de lancer la version efi de gdisk lorsqu'ils est placé dans le répertoire EFI/tools
$ sudo cp gdisk_x64.efi /mnt/EFI/tools/
Créer un répertoire EFI/GAME et y placer le binaire
$ sudo mkdir /mnt/EFI/GAME
$ sudo cp tetris.efi /mnt/EFI/GAME
$ sudo mkdir /mnt/EFI/GRUB
Y installer une image grub efi autonome: voir Clé autonome Grub - Amorçage UEFI
$ sudo grub-mkstandalone --output=/mnt/EFI/GRUB/bootx64.efi --format=x86_64-efi --modules="part_gpt part_msdos luks"
$ sudo grub-mkstandalone --output=/mnt/EFI/GRUB/bootx64.efi --format=x86_64-efi --modules="part_gpt part_msdos luks" \"boot/grub/grub.cfg=grub.cfg"
\
"boot/grub/splash.png=splash.png" \"boot/grub/layouts/fr.gkb=fr.gkb"
Démonter la clé et la tester par exemple avec qemu
$ sudo umount /dev/sdb1
$ qemu-system-x86_64 -m 2048 -smp 2 -enable-kvm -boot d --bios /usr/share/ovmf/OVMF.fd /dev/sdb
Les options shell, gdisk (non présent sur la capture d'écran ci-dessus) et memtest apparaissent dans la ligne du bas du menu rEFInd avec les icônes correspondantes (un terminal et une barrette mémoire)
L'option GRUB apparaît dans la ligne supérieure, la sélectionner en cliquant sur l'icône
Sur un système disposant de UEFI, démarrer sur la clé de dépannage
Outre les composants supplémentaires, la clé affiche une icône pour chaque système d'exploitation détectée.
Si le système d'exploitation à lancer s'affiche, le sélectionner et le lancer
Pour réinstaller Grub dans l'ESP du disque système, dans le cas d'un système linux
Dans une console, vérifier que le boot s'est effectué en mode EFI
$ [ -d /sys/firmware/efi ] && echo "EFI boot on HDD" || echo "Legacy boot on HDD"
Réinstaller éventuellement le paquet grub-efi
$ sudo aptitude reinstall grub-efi
Recréer éventuellement le fichier de configuration
$ sudo update-grub
$ sudo mount /dev/sda1 /boot/efi
Installer grub dans la partition ESP du disque système, en définissant éventuellement le nom du répertoire de stockage dans la partition ESP, par exemple DEBIAN
$ sudo grub-install --target=x86_64 --bootloader-id=DEBIAN
Vérifier que le bootloader existe dans /boot/efi
$ file /boot/efi/EFI/DEBIAN/grubx64.efi
Vérifier que l'entrée a été créée dans la Nvme
$ efibootmgr | grep DEBIAN
$ efibootmgr |grep BootOrder
Redémarrer