Tra la pressione del pulsante di accensione e la comparsa della schermata di accesso passano pochi secondi, ma in quel tempo si susseguono almeno cinque fasi distinte, ognuna affidata a un componente diverso. Quando un computer non si avvia, sapere in quale fase si è bloccato è metà della soluzione: un errore del firmware si affronta in modo completamente diverso da un servizio che non parte.
Fase 1: il firmware UEFI
All'accensione il processore esegue il firmware della scheda madre. Sui computer prodotti negli ultimi anni è quasi sempre UEFI, che ha sostituito il vecchio BIOS. Il firmware controlla l'hardware di base, poi consulta un elenco di voci di avvio salvato nella memoria della scheda madre e cerca il programma da caricare.
Con UEFI questo programma si trova nella partizione di sistema EFI (ESP), una piccola partizione formattata in FAT32, di solito montata su Linux in /boot/efi. Contiene i bootloader di tutti i sistemi installati, ognuno nella sua cartella, per esempio EFI/ubuntu/ o EFI/Microsoft/. Il comando efibootmgr elenca le voci di avvio registrate nel firmware e il loro ordine.
Se è attivo Secure Boot, il firmware avvia solo programmi firmati con chiavi riconosciute. Le distribuzioni principali usano un piccolo programma intermedio firmato, chiamato shim, che a sua volta verifica GRUB e il kernel.
Fase 2: il bootloader
Il bootloader ha il compito di caricare il kernel in memoria. Il più diffuso è GRUB; alcune distribuzioni usano systemd-boot, più semplice. GRUB mostra il menu da cui scegliere il sistema o una versione precedente del kernel, e legge la propria configurazione da /boot/grub/grub.cfg, un file generato automaticamente: le modifiche vanno fatte in /etc/default/grub e poi applicate con update-grub su Debian e Ubuntu o grub2-mkconfig su Fedora.
Dal menu di GRUB, premendo e su una voce, si possono modificare i parametri del kernel solo per quell'avvio. È uno strumento di diagnosi prezioso: per esempio, togliere quiet splash mostra i messaggi di avvio invece del logo.
Fase 3: il kernel
Il kernel si decomprime, inizializza memoria, processori e gestione dei dispositivi e carica i driver essenziali. A questo punto, però, ha un problema: per montare il disco con il sistema potrebbe servirgli un driver che si trova proprio su quel disco, oppure il disco potrebbe essere cifrato o far parte di un RAID.
Fase 4: l'initramfs
La soluzione è l'initramfs, un piccolo filesystem compresso caricato in memoria dal bootloader insieme al kernel. Contiene i moduli e gli strumenti minimi per trovare e montare il filesystem principale: driver del controller, supporto per LVM, RAID e cifratura LUKS. È qui che, con un disco cifrato, compare la richiesta della passphrase.
Montato il filesystem principale, l'initramfs passa il controllo al vero sistema. Se l'initramfs è danneggiato o non contiene il driver giusto, ci si ritrova in una shell di emergenza con messaggi come «unable to mount root fs». Si rigenera con update-initramfs -u su Debian e Ubuntu o con dracut su Fedora.
Fase 5: systemd
Il kernel avvia il primo processo, con PID 1, che sulla maggior parte delle distribuzioni è systemd. Da qui partono in parallelo tutti i servizi: montaggio dei dischi elencati in /etc/fstab, rete, registro di sistema, gestore dell'accesso grafico. systemd organizza i servizi in target, gruppi che rappresentano uno stato del sistema:
| Target | Stato |
|---|---|
multi-user.target |
sistema completo senza interfaccia grafica |
graphical.target |
sistema completo con desktop |
rescue.target |
modalità di ripristino con servizi minimi |
emergency.target |
shell di emergenza, quasi nulla avviato |
Aggiungendo systemd.unit=rescue.target ai parametri del kernel da GRUB si avvia direttamente in modalità di ripristino: utile quando un servizio blocca l'avvio normale.
Diagnosticare un avvio problematico
Alcuni comandi indispensabili, da usare una volta che il sistema è di nuovo accessibile:
journalctl -b -1 -p errmostra gli errori dell'avvio precedente;systemctl --failedelenca i servizi che non sono partiti;systemd-analyzeindica quanto tempo ha richiesto ciascuna fase;systemd-analyze blameordina i servizi per tempo di avvio;dmesgmostra i messaggi del kernel, compresi gli errori dei dispositivi.
Una causa molto frequente di avvio bloccato è una riga di /etc/fstab che fa riferimento a un disco non più presente. L'opzione nofail sulle righe dei dischi esterni o secondari evita che la loro assenza fermi l'avvio.
Capire dove si è fermato
| Sintomo | Fase probabile |
|---|---|
| nessun logo del produttore, schermo nero | firmware o hardware |
| «no bootable device» | firmware non trova la ESP o la voce di avvio |
prompt grub> o grub rescue> |
bootloader senza configurazione o file mancanti |
| kernel panic | kernel o initramfs |
| shell di emergenza con errore di montaggio | initramfs o /etc/fstab |
| avvio lento o bloccato su un servizio | systemd |
In sintesi
- L'avvio passa per firmware UEFI, bootloader, kernel, initramfs e systemd.
- I bootloader stanno nella partizione EFI;
efibootmgrmostra l'ordine di avvio. - La configurazione di GRUB si modifica in
/etc/default/grube si rigenera, non si edita a mano. - L'initramfs contiene ciò che serve per montare il disco principale, compresa la cifratura.
journalctl -b -1,systemctl --failedesystemd-analyze blamesono i primi strumenti di diagnosi.