Installare Debian su PC con firmware UEFI

Installazione
Arrow left.png

Preparazione

Procedura generale

Casi specifici

Altro

Arrow right.png



Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

Introduzione

Partiamo con lo specificare che sia il BIOS (Basic Input-Output System) che l’UEFI (Unified Extensible Firmware Interface) sono entrambi due tipologie di firmware per computer (generalmente è il firmware della scheda madre), ma diversi tra loro. Quindi fate attenzione a non commettere l'errore di dire "UEFI BIOS" o "BIOS di tipo UEFI".

  • Il BIOS risale ai primi anni '80, ai PC IBM compatibili ed ormai mostra tutti i limiti della sua età, dovuti anche al fatto che, essendo uno standard de-facto, non è mai stato possibile regolamentarlo.
  • Il progetto UEFI invece nasce all'inizio di questo secolo appunto per sopperire ai limiti del BIOS e per regolamentare i firmware per PC. Da notare che nelle opzioni di molti PC con firmware UEFI è possibile attivare il CSM (Compatibility Support Module), che emula un ambiente BIOS per poter utilizzare vecchi sistemi operativi e hardware non compatibili con UEFI. In alcune macchine può trovarsi sotto altri nomi, come ad esempio Legacy mode.

MBR e GPT

La differenza principale tra BIOS e UEFI riscontrabile dall'utente è il modo di avviare i dischi.

  • BIOS si basa sul MBR (Master boot record), che è la parte iniziale di un disco (grande solo 512 bytes) che contiene la tabella delle partizioni e un piccolo programma detto bootloader. Il BIOS sa che per far avviare il disco deve leggere il MBR ed eseguire il bootloader ivi presente. BIOS non ha idea di cosa sia una partizione e tantomeno un sistema operativo, sa solo che per avviare un disco deve eseguire il bootloader e poi sarà quest'ultimo ad occuparsi di tutto il resto.
  • UEFI invece lavora in modo differente, infatti NON usa il MBR poiché questo pone dei limiti al numero e alla grandezza delle partizioni, ma usa invece un tipo differente di tabella delle partizioni nato proprio con UEFI, e cioè GPT (GUID Partition Table).
In ogni sistema deve essere presente almeno un disco GPT contenente una piccola partizione di sistema chiamata ESP (EFI System partition, generalmente creata dal primo sistema operativo che si installa sul disco) che viene letta direttamente da UEFI. Il caso tipico dell'utente domestico medio è quello di un solo disco con tabella GPT e partizione EFI che contiene i bootloader di Win e Linux. Mentre nel BIOS si poteva solo scegliere quale disco avviare per primo, su UEFI si sceglie direttamente quale bootloader avviare per primo, indipendentemente in quale disco si trovi (purché il suo bootloader sia stato trovato e riconosciuto dall'UEFI). La partizione ESP deve avere un file system FAT (12 / 16 / 32), e può contenere oltre ai bootloader anche dei programmi direttamente eseguibili da UEFI, come ad esempio dei software di diagnostica hardware (ma alla fin fine anche i bootloader non sono altro che dei programmi il cui unico fine è avviare dei sistemi operativi).

Sistemi moderni

  Nota
UEFI ha ormai soppiantato definitivamente BIOS ed anche Secure Boot è ormai correttamente supportato nella maggioranza dei casi, quanto meno in quello di hardware x86 compatibile. Questo significa che la procedura d'installazione standard funziona bene e all'utente non è più richiesto di abilitare da UEFI la modalità CSM o disabilitare Secure Boot.


Secure Boot (SB)

Ormai pienamente supportato grazie al pacchetto shim.
In poche parole chiunque voglia scrivere del software che possa essere eseguito all'avvio di una macchina deve farselo firmare da un ente certificatore riconosciuto (Certificate Authoruity) e chiedere ad ogni fornitore hardware di includere le chiavi usate per firmare detto software.
In pratica la stragrande maggioranza dei produttori hardware x86 compatibile include le chiavi di Microsoft e quindi qualsiasi software firmato da Microsoft sarà eseguito da UEFI.
Dato l'enorme numero di distribuzioni Linux non è pensabile che ogni produttore hardware includa le chiavi di ogni distro, quindi sviluppatori legati a diverse distribuzioni Linux hanno collaborato per creare un unico programma che potesse essere usato da chiunque per permettere l'installazione di una qualsiasi distro linux. Tale programma è appunto shim e viene riconosciuto da UEFI proprio perché firmato da Microsoft. All'interno di shim sono anche contenuti i certificati usati dalle varie distribuzioni per firmare tutto il loro software, in questo modo è sufficiente che solo shim sia firmato da Microsoft.
In linux è possibile verificare se il proprio sistema è stato avviato usando SB digitando il seguente comando:

$ sudo mokutil --sb-state

che in caso affermativo stamperà a video SecureBoot enabled e viceversa SecureBoot disabled in caso negativo.

Ordine avvio

A livello firmware (cioè all'accensione del PC premendo un tasto specifico che varia da produttore a produttore, es. F12) è generalmente possibile scegliere cosa leggere (partizione, unità CD, unità di rete, ecc.) in modo predefinito sia arrestare temporaneamente il processo di avvio e segliere manualmente cosa avviare (ciò avviene premendo un tasto specifico, es. F12, che varia da produttore a produttore).

  Nota
L'ordine di avvio predefinito può essere definito anche tramite il UEFI boot manager di linux.


Installazione

Come già accennato in precedenza installare Debian su un sistema con firmware UEFI non richiede più particolari accorgimenti, tuttavia se si vuole usare uno schema di partizioni personalizzato è necessario ricordare che è obbligatorio creare una partizione EFI e:

  • formattarla in FAT32;
  • contrassegnarla come avviabile.

In un sistema con firmware EFI e modalità compatibilità disattivata le uniche partizioni contrassegnabili come avviabili sono appunto quelle EFI.

  Avvertimento
Sebbene sia possibile creare più partizioni EFI solo una di queste potrà essere contrassegnata come avviabile.
  Suggerimento
Nel caso si vogliano installare più sistemi operativi è consigliabile installare tutti i relativi bootloader nella medesima partizione ESP, ovvero è generalmente inutile creare più partizioni ESP.


  ATTENZIONE
  • NON è possibile mettere in raid una partizione EFI.
  • Se si installano più distro linux GRUB deve essere installato solo per una di queste distro, NON per tutte (questo è vero in generale e non solo per UEFI)


Windows e Linux

Meglio installare prima Windows o Linux? Dipende.

  • Se si installa prima Windows e poi Linux si evita la seccatura di dover cambiare manualmente l'ordine di avvio dei bootloader, visto che come sempre il bootloader di Windows può caricare solo quest'ultimo. Tuttavia la partizione EFI sarà creata da Windows e occuperà 100MiB (l'installer di windows non permette di cambiarne la dimensione). Per la stragrande maggioranza degli utenti questa soluzione è assolutamente accettabile visto che la somma dei bootloader di Windows e Debian in questo momento (06/2024) occupa in totale meno di 40 MiB, inoltre è anche consigliata in quanto meno complicata.
  • Se si installa prima Linux e poi Windows sarà invece necessario cambiare manualmente l'ordine di avvio dei bootloader, ma con UEFI quest'operazione è ormai assolutamente banale in quanto può essere facilmente eseguita tramite il firmware UEFI all'avvio del PC. Rimesso quindi in prima posizione GRUB sarà sufficiente digitare da linux:
# update-grub
  Avvertimento
Il comportamento predefinito del precedente comando è cambiato, ovvero l'esecuzione automatica di os-prober è stata disabilitata con la conseguenza che non verranno identificati altri sistemi operativi. Per risolvere questo problema è quindi necessario riabilitarne l'esecuzione automatica.
Ma perché complicarsi la vita, anche se di poco? Perché così fancendo è possibile creare una partizione EFI personalizzata e in alcuni casi particolari può essere utile.

efibootmgr

Questo pacchetto permette di configurare il UEFI boot manager.

  • Mostrare l'ordine di avvio attuale
 $ efibootmgr
aggiungere l'opzione -v per mostrare più informazioni. Torna utile per esempio quando si ha necessità di visualizzare l'UUID delle partizioni.
  • Aggiungere manualmente la partizione /dev/sda1 che contiene un'altra distro linux, per es. Ubuntu
# efibootmgr --create --disk /dev/sda --part 1 --label "Ubuntu" --loader "\EFI\ubuntu\shimx64.efi"
Nel caso si abbiano più sistemi operativi si tratta semplicemente di ripetere il precedente comando cambiando il valore di --label e di --loader (è sufficiente digitare nuovamente efibootmgr -v e copiare quanto scritto tra le parentesi di /File(...) in corrispondenza del sistema operativo desiderato).
  • Eliminare una voce di avvio
# efibootmgr -B -b 00XY
dove 00XY indica il numero della voce da eliminare, per esempio # efibootmgr -B -b 0009.
  • Posto di aver cinque voci di avvio 0000,0001,0002,0003,0004 e di volerle riordinare in 0000,0004,0001,0002,0003 digitare
# efibootmgr -o 0000,0004,0001,0002,0003



Vecchi sistemi

Quanto segue è stato scritto ai tempi di Debian Buster e pertanto le indicazioni presenti risultano per lo più datate.

  Nota
La procedura descritta in questa guida è stata ottenuta sperimentando su due schede madri, precisamente la MSI H81M-E34 e la ASUS H81M-PLUS, che sembrano applicare correttamente le specifiche UEFI. Purtroppo sul mercato esistono delle macchine con implementazioni di firmware UEFI non completamente aderenti alle specifiche e/o contenenti bug (specialmente notebook e hardware "vecchio" che usa le prime revisioni UEFI), e si potrebbero trovare delle difficoltà nell'installazione (es. un notebook Asus che leggeva bootloader EFI solo a 64bit). Questa guida cercherà di considerare tutti questi casi, ma si ricorda anche che si può sempre provare a chiedere aiuto nel nostro forum.


Preparazione dell'installazione

Prima di procedere, è meglio entrare nelle pagine di configurazione dell'UEFI per andare a disattivare delle caratteristiche che potrebbero essere incompatibili con Debian, come il SecureBoot, il FastBoot (un avvio veloce dell'UEFI che si ottiene evitando di caricare alcune funzioni e di effettuare alcuni controlli e che può chiamarsi anche in altri modi; da non confondere con la feature Fast startup (Avvio veloce) di Windows 8.x) e per evitare di fare confusione in fase di installazione, meglio disattivare anche il CSM, ovvero la compatibilità con il vecchio BIOS. Da notare che queste funzioni possono non essere presenti in tutte le schede madri.
Per entrare nell'UEFI, generalmente si deve premere il tasto CANC / DEL (Asus, MSI) oppure F2 (Asus, Acer) o F10 (HP/Compaq) all'avvio del PC, ma in alcuni notebook non è così immediato: a volte a notebook spento bisogna tenere premuto uno dei tasti appena citati e accendere, oppure premere un apposito interruttore con la punta di una biro (Lenovo).
In alcuni UEFI (es. portatili Acer) per poter modificare alcune opzioni, bisogna prima impostare una Supervisor Password dall’UEFI stesso.

  Nota
L'incompatibilità tra Debian e il Secure Boot è in corso di risoluzione. Fare riferimento a questa segnalazione di bug sul BTS. Debian 10 (Buster) è la prima a supportare il Secure Boot out-of-the-box, almeno per le architetture PC a 64 bit (amd64).

Supporti di installazione

Quasi tutti i supporti di installazione Debian sono già avviabili da UEFI, tranne:

  • l'immagine ridottissima mini.iso (conosciuta anche come netboot), che non ha un bootloader UEFI.
  • le immagini live delle "vecchie" release, Debian 8 (Jessie) compresa. Mentre da Debian 9 ( Stretch) UEFI è supportato, e da Debian 10 (Buster) lo è anche il Secure Boot sulla maggior parte dei moderni PC (per maggiori informazioni si rimanda qui).
mini.iso

Questa immagine iso non possiede un bootloader per UEFI, ma al suo interno ce n'è uno e possiamo metterlo benissimo noi se usiamo una chiavetta USB come supporto di installazione.
Dopo aver trasferito la mini.iso sulla chiavetta USB come descritto qui, avremo sulla chiavetta una piccola partizione vuota in FAT12 con etichetta "Firmware", dove in genere si piazzano i firmware di cui potrebbe aver bisogno l'installer di Debian per far funzionare alcune periferiche. Noi la useremo come se fosse una partizione ESP senza bisogno di ulteriori modifiche. Basta prelevare dalla mini.iso il file /boot/grub/efi.img (non so perché non sia già integrato di default) con:

$ isoinfo -J -i ~/Scaricati/mini.iso -x /boot/grub/efi.img > /tmp/efi.img

(isoinfo si trova nel pacchetto genisoimage; cambiare eventualmente ~/Scaricati/ con il percorso in cui si trova la mini.iso).
Poi montare la partizione "Firmware" e posizionarvisi con:

$ mkdir /tmp/Firmware
# mount /dev/sdb2 /tmp/Firmware/
$ cd /tmp/Firmware/

(cambiare eventualmente /dev/sdb con il percorso effettivo della chiavetta usb se non corrisponde).
Infine estrarre il bootloader con:

$ 7z x /tmp/efi.img

(7z è contenuto nel pacchetto p7zip-full).
Adesso anche la mini.iso è diventata avviabile da UEFI.
Se si sta usando Windows per creare il supporto di installazione è possibile usare 7-Zip sia per estrarre il file efi.img dalla mini.iso, sia per decomprimere il file efi.img nella partizione "Firmware".

Installazione

Una volta avviata, la procedura d'installazione è la stessa di quella di un PC con BIOS, almeno fino al momento del partizionamento.

  ATTENZIONE
Si suppone che il disco in cui sarà installato Debian sia vuoto o contenga dati inutili o già salvati su altre periferiche di memorizzazione, perché le operazioni che seguono, come ad esempio cambiare la tabella delle partizioni, comporteranno la perdita dei dati.


Partizionamento

Arrivati al passo dell'installazione "Partizionamento dei dischi", l'installer riconosce di essere stato avviato da UEFI e, nel caso il disco abbia una tabella partizioni MBR, chiederà: "Forzare l'installazione UEFI?". Dato che stiamo installando in modalità UEFI pura la risposta è sì, tranne che non si vuole provare a fare qualche accostamento di impostazioni esotico. Se non lo chiederà, vuol dire che il disco non ha ancora nessuna tabella delle partizioni oppure è già in GPT.
A questo punto chiederà se partizionare manualmente o automaticamente. Se si fa automaticamente si dovrebbe notare uno spazio libero di 1,0 MB all'inizio del disco, poi la partizione ESP di qualche centinaio di MB, le solite partizioni in ext4 e swap, e alla fine del disco uno spazio libero di 1,1 MB. Se sono presenti i due spazi liberi all'inizio e alla fine, allora il disco è sicuramente in GPT.
Se si sceglie il partizionamento manuale ricordarsi di creare una partizione ESP (nella lista dei possibili file system c'è "Partizione di sistema EFI"), con una grandezza di 100 MB (che è la dimensione che imposta l'installer di Windows; considerare che già 100 MB sono anche troppi se non si ha intenzione di sperimentare con gli eseguibili UEFI).
Se durante la creazione delle partizioni l'installer chiede se la partizione deve essere primaria o logica, allora il disco è ancora in MBR e bisogna cambiare manualmente in GPT. Per fare ciò basta fare doppio clic (o selezionare e premere INVIO) sulla riga contenente il nome del disco (ad esempio nel mio sistema la riga è SCSI1 (0,0,0) (sda) - 500.1 GB ATA WDC WD5000AAKS-0) e chiederà se creare una nuova tabella delle partizioni: rispondere sì (se si sta installando in expert mode farà scegliere il tipo di tabella: selezionare gpt; per la cronaca il tipo msdos è il MBR). Adesso le partizioni create manualmente non dovrebbero più richiedere se essere primarie o logiche, ma invece potrebbero richiedere un’etichetta (caratteristica di GPT).

Installazione di GRUB

GRUB, il bootloader predefinito di Debian, viene installato nella partizione ESP in /EFI/debian/grubx64.efi (quel x64 nel nome è perché ho installato Debian con architettura amd64). Durante l'installazione di GRUB, potrebbe essere chiesto se si vuole installare una seconda copia del bootloader in un percorso generico della partizione ESP (che dovrebbe essere /EFI/Boot/bootx64.efi), nel caso che l'UEFI di quella macchina sia implementato male e invece di cercare tutti i bootloader presenti nella partizione di sistema, cerchi soltanto quello presente in quel percorso (bug frequente, spesso nelle prime macchine con UEFI). In questo caso GRUB potrebbe sovrascrivere il bootloader di un S.O. già presente, ma si potrà sempre configurare GRUB per avviare anche l'altro S.O. (generalmente basta dare il comando update-grub come root o con sudo).

Dual boot con Windows

Grazie a UEFI e GPT, nessun sistema operativo installato per ultimo dovrebbe prendere il sopravvento sugli altri, ognuno piazzerà il suo bootloader e la sua configurazione d’avvio sulla partizione ESP. Quindi si può installare tranquillamente prima Debian e poi Windows, o viceversa. In ogni caso entrambi i S.O. dovrebbero avere la propria voce nelle impostazioni di avvio dell'UEFI e da qui si potrà scegliere quale dei due avviare.
Tutto ciò però in un mondo ideale. Nel mondo reale come già detto prima ci sono molti programmatori di UEFI che non rispettano gli standard e si potrebbe finire con delle situazioni in cui si dovrà reinstallare il bootloader di Debian.
In dual-boot con Windows è praticamente necessario scegliere Debian come sistema operativo da avviare in automatico, in quanto il suo bootloader GRUB riconosce e può avviare anche l'installazione di Windows (mentre il bootloader di Windows riesce solo ad avviare Windows).
Ricordarsi che il primo sistema operativo che si installa andrà a creare la partizione ESP e i successivi S.O. installati non avranno bisogno di crearne altre, perché ne basta una sola in un disco e tutti i S.O. useranno quella.

Se si installa Windows dopo Debian, bisognerà eseguire il comando

# update-grub

in Debian per far trovare a GRUB l’installazione di Windows e creare una voce d'avvio.

Per l'informazione, anche l'installer di Windows riconosce se è stato avviato in modalità UEFI e anche per lui vale la regola che bisogna avere il disco con la tabella GPT, altrimenti l'installazione non potrà proseguire. Per cambiarla bisogna aprire dall'installer stesso un prompt dei comandi ed eseguire diskpart (ma questo è off-topic), oppure si può usare una distro Linux live per convertire in GPT prima di installare Windows. Dopo alcuni test, sembrerebbe che a partire da Windows 10 la conversione da MBR a GPT sia automatica durante l'installazione e non è più necessario convertire prima di installare.
Le versioni di Windows installabili su sistemi con UEFI sono Windows 7 (solo a 64 bit), Windows 8.x (tutte le architetture) e Windows 10 (tutte le architetture).
Dopo l'installazione di Windows 8.x o 10 (o, se già installato, prima dell'installazione di Debian) bisogna disabilitare la funzione fast startup (avvio veloce) per poter far convivere i due sistemi operativi.

Approfondimenti

Sitografia




Guida scritta da: BubuXP 12:52, 27 mag 2015 (CEST)   Debianized 40%
Estesa da:
wtf
Verificata da:
wtf (escluso vecchi sistemi)

Verificare ed estendere la guida | Cos'è una guida Debianized