efibootmgr è un’applicazione userspace utilizzata per modificare il Boot Manager Extensible Firmware Interface (EFI) di Intel. EFI che oramai ha rimpiazzato il BIOS è l’interfaccia firmware che si occupa del modo in cui hardware e software comunicano in un computer. Tra i benefici di EFI è di essere non legato all’architettura x86. Attualmente viene implementata l’estensione di EFI denominata UEFI (Unified EFI ). Tra i compiti di UEFI c’è proprio anche quello di occuparsi dei servizi di Boot. Grazie ad UEFI è possibile avviare diversi sistemi operativi Linux, Mac, Windows senza la necessità di un bootmanager esterno. UEFI infatti può automaticamente selezionare la partizione appropriata con il sistema operativo. L’unica condizione è che l’hardware e il software ( SO ) supportino le specifiche UEFI.
Esempi di UEFI Boot Menu.
ATTENZIONE: nei primi tempi le implementazioni UEFI, seppur lungimiranti, sono state accompagnate da diversi bug anche peggiorativi rispetto alla controparte BIOS. In questi casi l’utilizzo di efibootmgr si deve accompagnare alla conoscenza della motherboards specifica.
In generale poichè si potrebbe anche rendere necessario il caricamento del firmware della MB si sconsiglia la modifica con efibootmgr ( anche nel caso dei Macintosh si sconsiglia la modifica con efibootmgr dei menu entry).
Per disporre di un boot manager userfriendly si consiglia di valutare l’uso di rEFInd.
Verificare che il sistema sia stato avviato in UEFI mode
Per poter utilizzare efibootmgr è necessario che le variabili filesystem EFI ( EFI vars ) siano accessibili. Questo implica che il sistema sia stato avviato in EFI mode.
In debian: # sudo [ -d /sys/firmware/efi ] && echo "EFI boot on HDD" || echo "Legacy boot on HDD" EFI boot on HDD
dal kernel 4.0 si può verificare che l’avvio sia avvenuto in EFI mode con
# cat /sys/firmware/efi/fw_platform_size se UEFI mode 64 # se 64 bit 32 # se 32 bit diversamente No UEFI mode cat: /sys/firmware/efi/fw_platform_size: No such file or directory
Per visualizzare le variabili EFI si può utilizzare il comando
# efivar –list
Altro comando per verificare l’avvio in EFI mode
#
mount | grep efivars
efivarfs on /sys/firmware/efi/efivars type efivarfs (ro,relatime)
Se il sistema NON è stato avviato in EFI mode digitando efibootmgr avremo il seguente messaggio:
# efibootmgr EFI variables are not supported on this system.
UEFI Boot Manager
Usualmente un Computer UEFI mette a disposizione anche tool di configurazione per il menu del Boot Manager EFI. Se il tool non è sufficientemente amichevole è preferibile utilizzare il già citato rEFInd oppure l’applicazione efibootmgr oggetto del post.
Efibootmgr
Efibootmgr può creare e rimuovere le voci nel menu di avvio UEFI, modificare l’ordine delle voci nel menu e altro ancora.
In debian/ubuntu efibootmgr si installa da terminale al solito con
# apt install efibootmgr
lanciato efibootmgr verranno visualizza i dati relativi all’ UEFI Boot Manager con il menu di Avvio UEFI, la voce di avvio corrente del sistema, l’ordine di visualizzazione,…
# efibootmgr BootCurrent: 0001 Timeout: 1 seconds BootOrder: 0000,0001,0006,0004,0005,0002 Boot0000* ubuntu Boot0001* mx Boot0002* UEFI: Built-in EFI Shell Boot0004* Hard Drive Boot0005* USB Boot0006* UEFI: Samsung Flash Drive 1100
Il menu di avvio è composto da 6 voci: Boot0000, Boot0001, …
BootCurrent: la prima linea evidenzia quella che è la voce predefinita del menu di avvio. In questo caso mx.
Timeout: il tempo di attesa del menu di avvio che risulta di default inpostato a 0 infatti in genere non si riesce a vedere il menu di avvio.
BootOrder: la successione che verra seguita qualora il precedente menu entry non venga caricato / fallisca il caricamento.
Nell’esempio l’ordine seguito sarà: 0000, 0001, 0006, 0004, 0005, 0002
E ‘ possibile visualizzare le voci del menu EFI in modo completo utilizzando l’opzione -v verbose
# efibootmgr -v BootCurrent: 0001 Timeout: 1 seconds BootOrder: 0000,0001,0006,0004,0005,0002 Boot0000* ubuntu HD(2,GPT,defb0216-f5f6-4969-8345-ff816517a944,0xee800,0x1ad000)/File(\EFI\ubuntu\shimx64.efi) Boot0001* mx HD(1,GPT,9c281ac1-76a6-4b39-b2c2-ff65b0d0bef6,0x800,0x1ef000)/File(\EFI\mx\grubx64.efi) Boot0002* UEFI: Built-in EFI Shell VenMedia(5023b95c-db26-429b-a648-bd47664c8012)AMBO Boot0004* Hard Drive BBS(HD,,0x0)AMGOAMNO........m.S.e.a.g.a.t.e. .S.T.9.5.0.0.5.6.2.0.A.S....................A.........................>..Gd-.;.A..MQ..L. . . . . . . . . . . . .Y.5.1.X.D.C.C.9......AMBO Boot0005* USB BBS(USB,,0x0)AMGOAMNO........s.S.a.m.s.u.n.g. .F.l.a.s.h. .D.r.i.v.e. .1.1.0.0....................A.......................F..Gd-.;.A..MQ..L.S.a.m.s.u.n.g. .F.l.a.s.h. .D.r.i.v.e. .1.1.0.0......AMBO Boot0006* UEFI: Samsung Flash Drive 1100 PciRoot(0x0)/Pci(0x10,0x0)/USB(2,0)/HD(1,MBR,0x23,0x800,0x4e3e800)AMBO
In questo caso è possibile individuare anche le informazioni relative al percorso del bootloader. Ad esempio la varibile mx, ( Boot0001) relativa alla derivativa debian, mx linux, evidenzia che il booloader è di fatto GRUB. Il percorso con la configurazione efi ( grubx64.efi), menu entry ( mx) per il bootloader grub nella partizioni EFI system partition risulta essere (\EFI\mx\grubx64.efi ). La partizione è localizzata nel disco 1 che è partizionato GPT.
Cambiare il Timeout
Se si desidera visualizzare il menu per poter scegliere sempre dal bootmanager EFI si può portare il timeout a 5 srecondi con
efibootmgr -t 5
Cambiare l’ordine di avvio
Per cambiare l’ordine di avvio si utilizza l’opzione -o
efibootmgr -o 0001,0000,0006,0004,0005,0002
è possibile cambiare l’ordine solo per il primo successivo avvio.
In questo caso si usa l’opzione -n
efibootmgr -n 0002
Creare una voce nel menu di boot EFI
Per aggiungere un entry al menu EFI si usa l’opzione -c
efibootmgr -c -d /dev/sda -p 2 -L “Debian” -l “\EFI\debian\shimx64.efi”
efibootmgr -c -d /dev/sdb -p 1 -L "multibootusb" -l "\EFI\boot\bootx64.cfg"
--create
or-c
crea una nuova voce;--part
or-p
seguito dal numero di partizione della Partizione di Sistema EFI;--disk
or-d
seguito dal disco nel quale la Partizione di Sistema EFI è ospitata;--label
or-L
seguito dall’etichetta da utilizzare come voce nel menu di avvio;--loader
or-l
seguito dal percorso dell’immagine EFI da avviare \EFI\boot\bootx64.cfg.
Cancellare una voce dal menu EFI
per cancellare un voce di menu di utilizza l’opzione -B
efibootmgr -b 4 -B
–bootnum (-b) seleziona la voce del menu da cancella
–delete-bootnum (-B) effettua la cancellazione
Se la voce cancellata era la prima fare attenzione e cambiare l’ordine di avvio dei menu.
UEFI Bootloader di fallback
Nelle specifiche UEFI 2.3, section 3.4.1.2, si precisa che in assenza di boot variabili configurate è permesso al firmware trattare la EFI system partition come media rimovibile – il percorso di boot sarà EFI/boot/bootx64.efi.
Quindi va considerata l’opportunità dell’installazione di un bootloader di fallback. Di seguito esempi di bootloader di fallback per debian e window
Nel caso di Debian Linux boot entry in NVRAM debian percorso di Boot EFI nella partizione EFI system partition:
EFI/debian/grubx64.efi
il percorso del bootloader di fallback risulta essere
EFI/boot/grubx64.efi
ad esempio nel caso di window variabile di boot configurata: microsoft
oltre a percorso di boot
EFI/microsoft
potremmo avere il percorso di fallback
EFI/boot/bootx64.efi
Opzioni efibootmgr:
- -a | –active
- Sets bootnum active
- -A | –inactive
- Sets bootnum inactive
- -b | –bootnum XXXX
- Modify BootXXXX (hex)
- -B | –delete-bootnum
- Delete bootnum (hex)
- -c | –create
- Create new variable bootnum and add to bootorder
- -d | –disk DISK
- The disk containing the loader (defaults to /dev/sda)
- -e | –edd 1|3|-1
- Force EDD 1.0 or 3.0 creation variables, or guess.
- -E | –device NUM
- EDD 1.0 device number (defaults to 0x80)
- -g | –gpt
- Force disk with invalid PMBR to be treated as GPT
- -H | –acpi_hid XXXX
- set the ACPI HID (used with -i)
- -i | –iface NAME
- create a netboot entry for the named interface
- -l | –loader NAME
- Specify a loader (defaults to \\elilo.efi)
- -L | –label LABEL
- Boot manager display label (defaults to “Linux”)
- -n | –bootnext XXXX
- Set BootNext to XXXX (hex)
- -N | –delete-bootnext
- Delete BootNext
- -o | –bootorder XXXX,YYYY,ZZZZ
- Explicitly set BootOrder (hex)
- -O | –delete-bootorder
- Delete BootOrder
- -p | –part PART
- Partition number containing the bootloader (defaults to 1)
- -q | –quiet
- Quiet mode – supresses output.
- –test filename
- Don’t write to NVRAM, write to filename.
- -t | –timeout seconds
- Boot Manager timeout, in seconds.
- -T | –delete-timeout
- Delete Timeout variable.
- -u | –unicode | –UCS-2
- pass extra command line arguments as UCS-2 (default is ASCII)
- -U | –acpi_uid XXXX
- set the ACPI UID (used with -i)
- -v | –verbose
- Verbose mode – prints additional information
- -V | –version
- Just print version string and exit.
- -w | –write-signature
- write unique signature to the MBR if needed
- -@ | –append-binary-args
- append extra variable args from file (use – to read from stdin). Data in file is appended as command line arguments to the boot loader command, with no modification to the data, so you can pass any binary or text data necessary.
Last updated: 3 Agosto 2022 by Pierluigi Minati