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!

Modifichiamo voci avvio UEFI direttamente sistema operativo [Linux,Windows]

» 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?

Modifichiamo voci avvio UEFI direttamente sistema operativo [Linux,Windows]

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.

Modifichiamo voci avvio UEFI direttamente sistema operativo [Linux,Windows]

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

Modifichiamo voci avvio UEFI direttamente sistema operativo [Linux,Windows]

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

Modifichiamo voci avvio UEFI direttamente sistema operativo [Linux,Windows]

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, quindi 1)
  • -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"

Modifichiamo voci avvio UEFI direttamente sistema operativo [Linux,Windows]

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

Modifichiamo voci avvio UEFI direttamente sistema operativo [Linux,Windows]

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

Modifichiamo voci avvio UEFI direttamente sistema operativo [Linux,Windows]

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

Modifichiamo voci avvio UEFI direttamente sistema operativo [Linux,Windows]

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}

Modifichiamo voci avvio UEFI direttamente sistema operativo [Linux,Windows]

Per avere la lista delle voci presenti possiamo utilizzare il comando Get-UEFIBootEntry, aggiungendo l'opzione -hidden possiamo vedere anche le voci nascoste.

Modifichiamo voci avvio UEFI direttamente sistema operativo [Linux,Windows]

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

Modifichiamo voci avvio UEFI direttamente sistema operativo [Linux,Windows]

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

Modifichiamo voci avvio UEFI direttamente sistema operativo [Linux,Windows]

Infine per rimuovere una voce, ad esempio quella appena creata, il comando sarà:

Remove-UEFIBtootEntry -ID Boot0003

Modifichiamo voci avvio UEFI direttamente sistema operativo [Linux,Windows]