UEFI e GPT

Da GolemWiki.

Indice

Introduzione a UEFI e GPT

UEFI è il nuovo standard che sostituirà il BIOS, ovvero quel programma di base che viene lanciato all'avvio del computer e ne consente la configurazione base e l'avvio dei sistemi operativi. UEFI ha destato attenzione nel mondo Linux per tre motivi:

  1. adotta nuovi metodi di avvio e di partizionamento, infatti non è più presente la scelta di avvio dal primo/secondo disco o dal CD, bensì è UEFI a rilevare i supporti avviabili. Anche i CD e le pennine di installazione devono quindi essere UEFI-compatibili, ma la maggior parte lo è (Ubuntu, Debian, ArchLinux...);
  2. il sistema di partizionamento MBR è stato soppiantato da GPT, quindi bisogna imparare a partizionare i dischi seguendo questo standard: la nuova tabella partizioni consente di creare più di 4 partizioni primarie (non esiste più il concetto di partizione estesa). Inoltre è necessaria una partizione di avvio (Partizione GPT), che contiene i file di avvio dei sistemi installati. I comandi fdisk e cfdisk sono stati aggiornati e supportano anche GPT. Su distro che non hanno effettuato l'aggiornamento è necessario usare rispettivamente gdisk e cgdisk;
  3. Microsoft ha messo lo zampino nella tecnologia del secure boot: un controllo che consente di bloccare l'installazione di sistemi non autorizzati (opzione che sulla maggior parte dei dispositivi venduti è disabilitabile)

In questa pagina si cerca di riassumere tutto quello che c'è da sapere su UEFI prendendo come obiettivo l'installazione della distribuzione ArchLinux.

Configurare UEFI

Il primo passo da compiere è entrare nel menù di UEFI, premendo il tasto giusto all'avvio (di solito CANC o F2, ma varia in base al modello). L'interfaccia grafica non è identica su tutti i computer: alcuni produttori usano quella simile al vecchio bios (blu e bianca), altri aggiungono a questa una versione più intuitiva e grafica dove è possibile usare il mouse.


Per installare sistemi diversi da Windows vanno disabilitati i parametri Fast Boot e Secure Boot, dopodiché è possibile inserire il cd di installazione, da cui fare il boot (a volte è necessario riavviare per far rilevare il disco a UEFI).

Partizionamento

Fatto il boot con il live CD, apri il terminale e verifica che i tool per GPT siano installati (per esempio gdisk), altrimenti installali con:

# pacman -S gptfdisk              # ArchLinux
# apt-get install cgdisk gdisk    # Ubuntu/Debian

Con il comando ls /dev/sd* sono mostrati tutti i dischi e le relative partizioni presenti sul disco. Solitamente è presente solo sda con varie partizioni, anche se alcuni computer sono dotati di dischi ibridi (sia meccanici che a stato solido) o di doppio disco, quindi verrà mostrato anche sdb. Per saperne di più sui singoli dischi digita gdisk -l /dev/disco

# gdisk -l /dev/sda
Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
[...]

Individuato il disco, è possibile passare al partizionamento (è bene sottolineare: la procedura seguente eliminerà ogni dato già presente sul disco, ma a nessuno importa...): utilizzando il comando cgdisk /dev/sda (molto simile a cfdisk) è possibile eliminare tutte le partizioni, tenendo a mente le dimensioni della prima, contrassegnata dal codice EF00. Tale partizione va ricreata, preferibilmente della stessa dimensione, dopodiché è possibile creare le altre partizioni (root, home, windows-dedicata) seguendo la medesima procedura:

  1. Nello spazio libero (inizialmente tutto il disco) crea una nuova partizione (New);
  2. Richiesta del primo settore (First sector): premi invio per lasciare quello di default, ovvero a seguito della precedente partizione;
  3. Dimensione della partizione: questo è a scelta libera, il valore può essere inserito nelle unità comuni (Kilo, Mega, Giga), mentre dando invio usa il massimo spazio disponibile. Tieni sempre conto delle seguenti soglie minime
    • EFI - come detto prima, è bene ricrearla della dimensione originaria, nel mio caso era 300M
    • Root - senza la home, ovvero solo i file di sistema Linux, occupa al massimo una decina di Gb, quindi per lasciare un margine è bene assegnare 15G
    • /home - i dati utente hanno dimensione variabile, quindi è a propria discrezione
  4. Inserisci il tipo di partizione: EF00 per la EFI, 8300 per Linux, 0700 per Windows;
  5. Etichetta: sempre utile per identificare a occhio una partizione, è a discrezione dell'utente (esempio LinuxHome per la home);
  6. Ripeti dal punto 1 per tutte le partizioni necessarie

Le partizioni possono essere formattate normalmente (mkfs.ext4 /dev/sdy), eccetto la partizione EFI, che va formattata in FAT con mkfs.vfat -T32 /dev/sda1. Nel caso tu voglia installare anche Windows è preferibile installarlo dopo il partizionamento e prima di installare Linux.

Configurazione di GRUB

Installato il sistema, bisogna configurare il bootloader per funzionare con EFI. GRUB ha una versione compatibile, da installare mentre si è chrootati. Per prima cosa la partizione EFI (in questo caso /dev/sda1) deve essere montata in una qualsiasi cartella, in modo da consentirne la scrittura dei file di avvio. Successivamente si può installare GRUB e creare il file di configurazione relativo. In caso di dual-boot gli altri sistemi installati saranno rilevati automaticamente soltanto se la partizione EFI è montata.

# mkdir /boot/EFI
# mount /dev/sda1 /boot/EFI
# grub-install --target=x86_64-efi --efi-directory=$esp --bootloader-id=grub --recheck --debug
# grub-mkconfig -o /boot/grub/grub.cfg

Configurazione della BootList

Il comando grub-install inserisce automaticamente Linux all'interno dei menù di avvio di EFI. In caso di dual boot sta poi all'utente decidere se impostarlo come scelta di avvio automatica, cosa che va fatta manualmente dai menù di EFI, all'avvio.

Ci è stato riferito che a volte il metodo manuale da EFI può fallire: c'è anche il modo di modificare la lista degli avvii di EFI dall'interno di Linux.

$ efibootmgr
BootCurrent: 0000
Timeout: 0 seconds
BootOrder: 0000,0004
Boot0000* Windows Boot Manager
Boot0004* ArchLinux


L'output del comando efibootmgr è la lista dei sistemi installati (in questo caso ArchLinux e Windows), insieme alla lista di avvio (BootOrder), che in questo caso privilegia Windows.

Per modificarla basta aggiungere la relativa opzione, elencando gli ID dei sistemi operativi nell'ordine desiderato, separandoli da virgola

# efibootmgr --bootorder 0004,0000

In questo esempio si imposta Linux come primo sistema.

Strumenti personali