Abbiamo già visto come la standardizzazione dell'UEFI ci consente di interagire con questo con uno strumento dedicato come la EFI Shell, per esempio, per modificare le voci di avvio. Adesso vedremo come sia possibile farlo direttamente da "dentro" i sistemi operativi!
» Leggi: Che cosa è l'EFI Shell?
Attenzione: come detto anche in altro articolo l'UEFI dovrebbe essere uno standard comune; purtroppo, ad oggi, le varie implementazioni fatte da parte dei diversi produttori potrebbero non essere pienamente conformi a questo standard, rendendo non efficaci o addirittura dannosi per il sistema i programmi che vedremo di seguito!
LINUX
Nell'immagine sotto, potete vedere come, tramite lo strumento efibootmgr
(normalmente presente nei repository di quasi tutte le distro) eseguito come root, sulla mia distro Linux, posso vedere i vari sistemi (anche live, come Ventoy) che possono essere avviati tramite l'UEFI del mio computer, il loro ordine di avvio e anche quello attualmente avviato; aggiungendo l'opzione -v
(forma breve di --verbose
) posso vedere anche informazioni aggiuntive, come il dispositivo, la partizione e il percorso al file.efi che viene caricato
» Leggi: Come si installa un programma su Linux?
Tutte queste informazioni sono conservate in una memoria non volatile (NVRAM) in maniera analoga al vecchio BIOS (dove però si chiamava CMOS) ma, diversamente da quest'ultimo, adesso sono accessibili anche dal sistema operativo persino per essere modificate. Tramite lo stesso programma infatti posso anche aggiungere, rimuovere, modificare, attivare o disattivare le voci dalla lista, posso cambiare l'ordine di avvio, impostare un diverso valore come predefinito e persino programmare il sistema da avviare al successivo riavvio.
Vediamo adesso un paio di esempi pratici: proviamo a modificare queste voci, ad esempio, disattivando (non eliminando!) la voce relativa a Ventoy in modo che questo, anche se rimarrà presente, non possa essere avviato; il comando sarà
» Leggi: Come preparare una chiavetta USB con molteplici ISO di boot: guida a Ventoy (video)
efibootmgr -A -b 0002
L'opzione -A
e la forma breve di --inactive
e serve appunto ad indicare di disattivare la voce che sceglieremo, mentre l'opzione -b
(forma breve di --bootnum
) serve ad indicare il numero relativo alla voce scelta. Il comando viene eseguito senza ulteriore conferma e mostra subito il nuovo stato delle voci di avvio dove possiamo notare che, anche se presente, la voce relativa a Ventoy non ha più l'asterisco *
.
Se volessi rimuovere del tutto la voce relativa a Ventoy, il comando sarà molto simile al precedente con l'unica differenza dell'opzione -B
(forma breve di --delete-bootnum
)
efibootmgr -B -b 0002
In caso volessi aggiungere una voce dovrei indicare l'opzione -c
(--create
) ma dato che questa opzione, da sola dà per scontato diverse impostazioni che potrebbero differire dal nostro sistema sarà meglio specificare anche altre opzioni come:
-d
(-- disk
) per indicare il disco contenente la partizione /boot/efi (di defaul sarà/dev/sda
)-p
(--part
) per indicare la partizione (di default sarà la prima, quindi1
)-l
(--loader
) per indicare il file da caricare (di default sarà elilo.efi)-L
(--label
) per indicare un'etichetta (di defaul saràLinux
)
Quindi se per esempio volessi aggiungere una EFI Shell al mio sistema, dopo aver salvato il file efishell.efi nella percorso /boot/efi, il comando sarà
efibootmgr -c -d /dev/nvme0n1 -l efishell.efi -L "EFI Shell"
La EFI Shell sarà subito aggiunta alla prima voce disponibile e qualora volessi subito provarla, potrei programmare di eseguirla al successivo riavvio sempre con efibootmgr, questa volta con l'opzione -n
(--bootnext
) seguito dal numero relativo alla voce della shell (0002, nel mio caso)
efibootmgr -n 0002
WINDOWS
Per quanto riguarda Windows, è possibile interagire in maniera analoga a efibootmgr su Linux, con il modulo per Powershell UEFIv2
. È possibile installare tale modulo con un semplice comando, una volta avviato Powershell come amministratore:
Install-Module UEFIv2
Se è la prima volta che installate un modulo, potrebbero apparirvi un paio di messaggi, uno relativo a NuGet, strumento necessario per scaricare e installare i moduli e l'altro relativo all'attendibilità della fonte dalla quale stiamo scaricando il modulo in oggetto (che sarebbe questa, un repository ufficiale quindi abbastanza attendibile); per farla breve, in entrambi casi dovete digitare S
seguito da Invio
Una volta terminata l'installazione del modulo, dovremo importarlo nella sessione corrente e poi potremo vedere quali comandi offre con l'aiuto di Get-Commands
, seguito dall'opzione -Module
e dal nome del modulo appena installato
Import-Module UEFIv2
Get-Command -Module UEFIv2
Anche in questo caso possiamo aggiungere e rimuovere le voci di avvio dall'UEFI direttamente da Windows!
Per vedere tutti i comandi con descrizione ed esempi di utilizzo, potremo utilizzare il seguente comando
Get-Command -Module PrintManagement| Foreach-Object {get-help $_.name -Examples}
Per avere la lista delle voci presenti possiamo utilizzare il comando Get-UEFIBootEntry
, aggiungendo l'opzione -hidden
possiamo vedere anche le voci nascoste.
Per avere maggiori dettagli per ogni voce possiamo aggiungere un paio di opzioni al comando sopra indicato, specificando -ID
seguito da BootNNNN
e possiamo anche aggiungere -FilePath
per vedere il file.efi e in che percorso questo si trova, che fa capo alla voce del menu indicata. Dato che PowerShell taglia l'output possiamo selezionare solo il campo FilePath ed espanderlo in modo che venga formattato in maniera più leggibile; il comando completo sarà quindi
Get-UEFIBootEntry -ID Boot0005 -FilePath | select-object -ExpandProperty FilePath
Se volessi aggiungere una voce al menu, ad esempio, il file di GRUB di una distro Linux installata in un altro disco, il comando sarà
Add-UEFIBootEntry -name "GRUB" -FilePath "X:\EFI\GRUB\grubx64.efi"
Anche se l'output restituisce qualche errore, alla fine la voce viene aggiunta come Boot0003
Infine per rimuovere una voce, ad esempio quella appena creata, il comando sarà:
Remove-UEFIBtootEntry -ID Boot0003