Linux - Amorçage EFISTUB

Dernière mise à jour : Debian 10.5 / Buster

Le noyau linux est compatible avec un amorçage direct UEFI via un chargeur intégré appelé EFI Stub. Ce document décrit comment mettre en oeuvre cette méthode d'amorçage

Les deux premières méthodes peuvent être utilisées facilement en dépannage. La troisième méthode est destinée à un amorçage automatique.

Sommaire

1 - Installation

1.1 - Vérification

$ cat /boot/config-$(uname -r) |grep -i efi_stub
CONFIG_EFI_STUB=y

1.2 - Préparation de l'ESP

$ sudo mkdir -p /boot/efi/EFI/stub
$ sudo cp /vmlinuz /initrd.img /boot/efi/EFI/stub/
$ sudo tree /boot/efi/EFI/stub
/boot/efi/EFI/stub
├── initrd.img
└── vmlinuz

0 directories, 2 files

1.3 - Mise à jour automatique des noyaux

$ sudo mkdir -p /etc/kernel/postinst.d
$ sudo nano /etc/kernel/postinst.d/zz-update-efistub

#!/bin/sh cp /vmlinuz /boot/efi/EFI/stub/
cp /vmlinuz.old /boot/efi/EFI/stub/
$ sudo mkdir -p /etc/initramfs/post-update.d
$ sudo nano /etc/initramfs/post-update.d/zz-update-efistub

#!/bin/sh cp /initrd.img /boot/efi/EFI/stub/
cp /initrd.img.old /boot/efi/EFI/stub/
$ sudo chmod +x /etc/kernel/postinst.d/zz-update-efistub
$ sudo chmod +x /etc/kernel/postinst.d/zz-update-efistub
$ sudo /etc/kernel/postinst.d/zz-update-efistub
$ sudo /etc/initramfs/post-update.d/zz-update-efistub
$ sudo tree /boot/efi/EFI/stub

2 - Amorçage en ligne de commande depuis un shell UEFI

$ findmnt /
TARGET SOURCE FSTYPE OPTIONS
/ /dev/sda2 ext4 rw,relatime,errors=remount-ro
$ efibootmgr 
BootCurrent: 0003
Timeout: 3 seconds
BootOrder: 0000,0011,0006,0002,0003,004,005
....
Boot0006* EFI Internal Shell
Boot0007* shell.efi
....
$ sudo efibootmgr --bootnext 7
BootNext: 007
BootCurrent: 0011
.....
$ sudo reboot
Shell> FS0:
FS0:\EFI\stub\vmlinuz root=/dev/sda2 initrd=\EFI\stub\initrd.img
FS0:\> \EFI\stub\vmlinuz root=/dev/mapper/buster ro quiet splash initrd=\EFI\stub\initrd.img

3 - Amorçage au moyen d'un script shell UEFI

2.1 - Lancement manuel

# nano /boot/efi/EFI/stub/stub.nsh
\EFI\stub\vmlinuz root=/dev/sda2 ro quiet splash initrd=\EFI\stub\initrd.img
Shell> FS0:
FS0:\>\EFI\stub\stub.nsh

2.2 - Lancement automatique

# nano /boot/efi/startup.nsh
\EFI\stub\vmlinuz root=/dev/sda2 ro quiet splash initrd=\EFI\stub\initrd.img

3 - Amorçage au moyen d'une entrée d'amorçage

$ findmnt /
TARGET SOURCE FSTYPE OPTIONS
/ /dev/mapper/buster ext4 rw,relatime,errors=remount-ro
$ su -l 
# export UUID=$(blkid -s UUID -o value /dev/mapper/buster)
# efibootmgr -c -d /dev/nvme0n1 -p 1 -L "Debian stub" -l '\EFI\stub\vmlinuz' \
-u "root=UUID=$UUID ro quiet splash initrd=\\EFI\\stub\\initrd.img"

où les options ont la signification suivante

$ efibootmgr -v |grep stub
Boot0002* Debian stub HD(1,GPT,15....f0,0x200000,0x31e00000)/File(\EFI\stub\vmlinuz)r.o.o.t.=.U.U.I.D.=.0.6.....e. .r.o. .q.u.i.e.t. .i.n.i.t.r.d.=.\.E.F.I.\.s.t.u.b.\.i.n.i.t.r.d...i.m.g.
$ efibootmgr
BootCurrent: 0001
Timeout: 3 seconds
BootOrder: 0002,0001,0000
Boot0000* debian
Boot0001* UEFI : Built-in EFI Shell
Boot0002* Debian stub