- GRUB è il gestore di avvio GNU che seleziona e carica il sistema operativo, supportando BIOS/UEFI e Multiboot.
- GRUB 2 aggiunge moduli, un supporto migliorato per il file system, la ricerca UUID e un menu/terminale grafico.
- La configurazione viene gestita tramite /etc/default/grub e 40_custom, rigenerando con update-grub o grub2-mkconfig.
- Sicurezza: proteggere GRUB con password, utilizzare la crittografia LUKS e adottare criteri di password rigorosi.

Se avete installato GNU/Linux sul vostro computer o utilizzate più sistemi operativi, probabilmente avrete sentito parlare di GRUB. Si tratta di quel piccolo ma potente programma che compare poco prima dell'avvio del sistema e che vi permette di scegliere cosa caricare. Sebbene spesso passi inosservato, il suo ruolo è fondamentale per l'avvio del sistema operativo e per il passaggio di controllo al kernel in modo fluido.
Nel mondo dell'avvio dei PC, GRUB è diventato lo standard di fatto grazie alla sua potenza e flessibilità. Nato all'interno del progetto GNU, è oggi il boot manager più diffuso in GNU/Linux , compatibile con un'ampia gamma di architetture e file system, facile da usare anche per i principianti e al tempo stesso un vero e proprio coltellino svizzero per chi desidera personalizzare ogni dettaglio del processo di avvio.
Che cos'è GNU GRUB e a cosa serve?
GNU GRUB (GNU GRand Unified Bootloader) è un gestore di avvio multiplo: un software che il firmware (BIOS o UEFI) esegue all'accensione del computer per selezionare e caricare un sistema operativo. Consente agli utenti di selezionare voci di menu, passare parametri al kernel, avviare il sistema dalla rete e persino interagire con una console per risolvere problemi specifici.
Viene utilizzato principalmente nelle distribuzioni GNU/Linux, sebbene sia stato impiegato anche da altri sistemi come Solaris su architettura x86. Nei moderni sistemi UEFI , il firmware carica direttamente l'eseguibile GRUB presente nella partizione di sistema EFI (ESP) , a condizione che sia registrato nella NVRAM; nei sistemi BIOS/MBR, GRUB occupa i settori iniziali del disco e prosegue da lì.
Oltre al menu standard, GRUB è conforme alle specifiche Multiboot, il che significa che può avviare kernel compatibili senza problemi . E una volta che il kernel è in memoria, GRUB cede il controllo e il suo compito è terminato, il che non è cosa da poco.

Scheda tecnica e dati di progetto
GRUB fa parte dell'ecosistema GNU ed è distribuito come software libero sotto la licenza GNU GPL v3 o successiva . Il suo sviluppo è open source, con un repository ufficiale, un sistema di tracciamento dei bug, un sito web e una comunità molto attiva.
È scritto principalmente in C e in assembler e funziona su diverse piattaforme: IA-32, x86-64 e PowerPC, tra gli altri. Il ramo attuale è GRUB 2 (una reimplementazione dello storico "GRUB Legacy"). L'ultima versione stabile rilasciata è 2.12 (20 dicembre 2023). Per verificare la versione locale, puoi eseguire: grub-install --version e vedrai la catena corrispondente.
Un po' di storia ed evoluzione
GRUB nacque come iniziativa di Erich Stefan Boleyn nell'ambito di GNU Hurd e del microkernel Mach. Per risolvere la disparità nei metodi di avvio, venne creata la specifica Multiboot, che consentiva a bootloader e kernel di "parlare la stessa lingua". Nel 1999, Gordon Matzigkeit e Yoshinori Okuji ne promossero l'adozione come pacchetto ufficiale del Progetto GNU.
Intorno al 2002, un gruppo di ricercatori giapponesi avviò PUPA (Preliminary Universal Programming Architecture) con l'obiettivo di riscrivere GRUB per renderlo più robusto e modulare. Questo sforzo portò alla creazione di GRUB 2 , mentre la versione precedente divenne nota come "GRUB Legacy" (la cui versione 0.97 fu aggiornata l'ultima volta nel 2005). Dal 2007 in poi, diverse distribuzioni migrarono a GRUB 2 e, entro la fine del 2009, la stragrande maggioranza lo includeva di default.
Come avviare il computer con GRUB (BIOS e UEFI)
Quando accendi il PC, il firmware esegue i suoi controlli (RAM, clock, dispositivi, ordine di avvio) e cerca un bootloader. Sui sistemi con BIOS/MBR, il controllo passa al Master Boot Record (MBR), i 512 byte iniziali del discoGRUB era suddiviso in fasi: Fase 1 (codice minimo in MBR), Fase 1.5 (nei settori successivi, creazione di ponti per comprendere i file system) e Fase 2 (menu e funzioni avanzate). In GRUB 2, quella "1.5" non esiste più; ora ci sono immagini specifiche come boot.img, core.img e moduli (*.mod) che vengono combinati in base all'installazione.
In UEFI, il processo è più diretto: il firmware esegue il binario GRUB EFI dalla partizione EFI , a condizione che sia correttamente installato e registrato. In entrambi i casi, GRUB presenta un menu o una console, carica il kernel scelto e quindi trasferisce l'esecuzione ad esso.
Specifiche e compatibilità multiboot
GRUB implementa il Multiboot, consentendo l'avvio di kernel compatibili senza particolari "trucchi". Inoltre, per i sistemi che non lo supportano (come Windows o DOS ), offre il chainloading, che si concentra sul primo settore della partizione in cui risiedono i suoi bootloader.
La sua compatibilità con i file system è ampia: Btrfs, ext2/3/4, FAT12/16/32, exFAT, HFS/HFS+, ISO9660, Nilfs2, NTFS, ReiserFS, ZFS, ROMFS, JFS, XFS , tra gli altri. Può anche leggere da volumi LVM e array RAID, un vantaggio significativo quando la struttura di archiviazione è complessa.
Caratteristiche e funzioni in primo piano
- Interfaccia del menu Terminale interattivo configurabile e altamente flessibile, con completamento automatico tramite Tab e scorciatoie in stile Bash.
- Supporto di LBA (Indirizzamento a blocchi logici) per superare i limiti classici del BIOS e leggere oltre 1024 cilindri.
- Capacità per avvio di rete (PXE/TFTP) e terminali remoti, utili in scenari di gestione centralizzata.
- Decompressione automatica e riconoscimento di più formati eseguibili.
- Memorizzazione persistente delle variabili con salva_ambiente/carica_ambiente y
grub-editenv(quando la piattaforma lo consente). - Rilevamento di tutta la RAM, indipendenza dalla geometria del disco e meccanismi di ricerca per etichette e UUID.
- Supporto grafico per menu e sfondi e un design modulare che mantiene core.img piccolo e carica i moduli secondo necessità.
Terminologia chiave: dispositivi, partizioni e percorsi
GRUB assegna un nome ai dischi e alle partizioni a modo suo. Il primo disco è solitamente (HD0), la prima partizione (HD0,1) In GRUB 2 (ricorda: in GRUB 2 la numerazione inizia da 1; in Legacy, iniziava da 0). Per fare riferimento a un intero disco, la partizione viene omessa: (hd0).
Per indicare i file, il dispositivo viene combinato con il percorso: (hd0,1)/ruta/al/archivo. Supporta anche liste di blocco (liste di blocco) quando è necessario indicare la posizione esatta su disco di un file che non è visibile come tale nel file system, ad esempio (hd0,1)+1 per il primo settore di una partizione, utile con chainloader +1.
Il "filesystem root" in GRUB non è lo stesso della "/" in Linux. È semplicemente la partizione root da cui GRUB legge i suoi file ; una volta che il kernel Linux prende il controllo, definisce la propria root effettiva e tutto il resto in GRUB diventa irrilevante.
Interfacce GRUB
GRUB offre tre visualizzazioni principali. La più familiare è il menu , con voci preconfigurate; è possibile navigare con i tasti freccia, avviare con Invio, modificare una voce con "e" o aprire la console con "c".
L'editor di input permette di modificare le righe al volo (aggiungere con "o/O", modificare con "e", eliminare con "d") e, se tutto sembra corretto, avviare con "b". È ideale per testare i parametri del kernel senza modificare i file.
La console è la modalità più potente: supporta il completamento automatico contestuale, la modifica delle scorciatoie e tutti i comandi interni di GRUB per individuare i dischi, caricare il kernel/initrd o eseguire il chainloading. Se il file di configurazione è mancante o danneggiato, GRUB ti avvierà in questa modalità in modo che tu possa risolvere manualmente il problema.
Messaggi di errore comuni
Gli errori possono comparire nella fase iniziale (più limitati) o durante il caricamento di menu e moduli (più descrittivi). Di seguito è riportata una raccolta di codici rappresentativi che GRUB potrebbe visualizzare, parafrasati per chiarezza :
- 1: Percorso non valido o non assoluto; 2: Tipo di file non valido (non un file normale); 3–4: Dati/intestazione danneggiati durante la decompressione; 5: tabella delle partizioni danneggiata o non valido.
- 6: Incompatibilità Stage1/Stage2; 7: Il caricamento inferiore a 1 MB non è supportato; 8: Tentativo di avvio senza caricare un kernel; 9: Errore di avvio sconosciuto.
- 10: Funzionalità multiboot non supportate; 11: Dispositivo non riconosciuto; 12: Dispositivo non valido; 13: Formato eseguibile non supportato.
- 14: Il file system impedisce la lettura dell'intero file; 15: file non trovato; 16: Struttura del file system incoerente.
- 17: Impossibile montare la partizione selezionata; 18: Cilindro al di fuori dell'intervallo supportato dal BIOS (tipico sulle unità più vecchie); 19: Initrd prima del kernel.
- 20: Moduli prima di un kernel multiboot; 21: Il disco selezionato non esiste; 22: Partizione inesistente; 23: Errore nell'interpretazione di un numero.
- 24: Accesso a un blocco esterno alla partizione; 25: Errore di lettura del disco; 26: Troppi collegamenti simbolici; 27: Comando sconosciuto.
- 28: L'elemento non è contenuto nella memoria; 29: Errore di scrittura sul disco; 30: Argomento non valido; 31: File non allineato al settore (ReiserFS, utilizzare notail).
- 32: Autenticazione richiesta; 33: Dispositivo seriale non configurato; 34: Nessun settore libero per la Fase 1.5 dopo l'MBR (conflitto con EZ-BIOS o partizione avviata troppo presto).
Comandi GRUB di base
Nella console è possibile eseguire comandi interattivi molto utili. Ad esempio, boot avvia l'ultimo caricato (kernel o chainloader) e chainloader <archivo> carica un settore o un file da una catena; la scorciatoia tipica per Windows è chainloader +1.
displaymem visualizza l'utilizzo della memoria in base al BIOS, il che è utile se non si è sicuri della RAM rilevata. Con initrd <archivo> si specifica l'immagine iniziale del disco RAM necessaria al kernel.
Per installare su MBR dalla console GRUB Legacy, hai utilizzato install con i percorsi per stage1, stage2 e, facoltativamente, al file di configurazione. Oggi in GRUB 2, dal sistema, è normale usare grub-install e rigenerare il menu con update-grub/grub2-mkconfig.
Il comando kernel specifica il binario del kernel e i suoi parametri, ad esempio: kernel /vmlinuz root=/dev/sda5Di solito è preceduto da root (hdX,Y) o rootnoverify per impostare la partizione da cui GRUB leggerà.
File di configurazione e direttive
In GRUB Legacy il menu risiedeva in /boot/grub/menu.lst o grub.conf, con direttive come color, default, fallback, hiddenmenu, password, timeout, splashimage e blocchi title con gli ordini per ciascun sistema.
Un esempio classico (parafrasato) includerebbe una sezione Linux con root (hd0,2), kernel con la sua parametro radice=/… e boot; e un altro per Windows con rootnoverify (hd0,1) y chainloader +1.
In GRUB 2 il file generato automaticamente è /boot/grub/grub.cfgNon è consigliabile modificarlo manualmente; invece, viene adattato /etc/default/grub (valori come GRUB_TIMEOUT, GRUB_DEFAULT, ecc.) e le voci personalizzate vengono aggiunte in /etc/grub.d/40_custom. Quindi viene eseguito update-grub o grub2-mkconfig per rigenerare il menu.
Differenze principali tra GRUB Legacy e GRUB 2
- Il file di configurazione è passato da
menu.lst/grub.confagrub.cfg, con sintassi e comandi rinnovati e generazione automatica tramitegrub-mkconfig. - Numerazione delle partizioni inizia a 1 in GRUB 2 (in Legacy partiva da 0).
- Persistenza delle variabili con
save_env/load_envin alcune configurazioni. - Migliore rilevamento del percorso e ricerca per UUID/tag; sono supportati più file system.
- Lettura diretta da LVM e RAID.
- Grafica del terminale e del menu e immagini riorganizzate: la fase 1.5 è scomparsa;
boot.img,core.imge moduli dinamici (*.mod).
Sicurezza e rafforzamento con GRUB
Un boot manager mal protetto è come un colabrodo. Se qualcuno con accesso fisico può modificare i parametri del kernel o avviare un'istanza diversa, di fatto disabilita le misure di sicurezza . Per questo motivo è consigliabile proteggere GRUB con password e adottare le migliori pratiche.
Stabilire a password sicura per limitare le modifiche alle voci o l'accesso alla console. In GRUB 2, utilizzare nomi utente e password con grub-mkpasswd-pbkdf2 e configurare le regole corrispondenti negli script di /etc/grub.d/.
Include anche la crittografia del disco tramite LUKS , in modo che anche se qualcuno ruba il computer, non sarà in grado di leggere i dati. Garantisce inoltre che le politiche di password del sistema siano rigorose per ridurre gli attacchi di forza bruta.
Gestisci con saggezza la cronologia dei log : quelli che forniscono indizi a un malintenzionato dovrebbero essere ridotti al minimo o centralizzati con controlli di accesso; quelli che aiutano a verificare i tentativi di frode dovrebbero essere aggregati e analizzati in un luogo sicuro.
Per rilevare altri sistemi installati e generare voci automaticamente, installare os-proberTi farà risparmiare tempo ed eviterà errori quando ricreerai il menu.
Installazione e manutenzione
Se non hai installato GRUB durante l'installazione della tua distribuzione, puoi farlo in seguito. In GRUB 2, dal sistema, esegui sudo grub-install /dev/sdX (sostituisci con il tuo disco) e poi sudo update-grub o sudo grub2-mkconfig -o /boot/grub/grub.cfgIl menu verrà visualizzato al prossimo avvio.
Da una console GRUB Legacy, la procedura classica è quella di indicare la root ed eseguire l'installazione: root (hd1,0) seguito da setup (hd1,0) per la prima partizione del secondo disco, oppure setup (hd1) se si punta all'MBR di quel secondo disco.
Modifica direttamente /boot/grub/grub.cfg Questa non è una buona idea in GRUB 2, anche se tecnicamente possibile. Il percorso consigliato è cambiare /etc/default/grubuso /etc/grub.d/40_custom per i propri contenuti e la rigenerazione.
Domande pratiche e scorciatoie utili
Come sapere qual è la partizione di avvio su /dev/sda? Sui sistemi BIOS/MBR: sudo fdisk -l /dev/sda (vedere l'asterisco per "Avvio"). In GPT/UEFI: lsblk -o NAME,FSTYPE,PARTTYPE,PARTFLAGS,MOUNTPOINT e cercare la partizione EFI (FAT32, digitare EF00/flags esp). Inoltre sudo efibootmgr -v visualizza le voci di avvio registrate.
Come posso ottenere l'UUID di una partizione? Con blkid o lsblk -f. Ad esempio: sudo blkid /dev/sda2 restituisce il suo UUID e altri metadati.
Come faccio a far sì che GRUB 2 attenda 10 secondi prima di immettere la voce predefinita? Regola /etc/default/grub con GRUB_TIMEOUT=10 (e, se applicabile, GRUB_TIMEOUT_STYLE=menu) ed esegue sudo update-grub o grub2-mkconfig.
Comandi GRUB Legacy da installare sulla prima partizione del secondo disco? Aprire la console ed eseguire: root (hd1,0) poi setup (hd1,0)Se volessi l'MBR, sarebbe setup (hd1).
Passaggi per modificare la configurazione di GRUB 2? 1) Modifica /etc/default/grub (per esempio., GRUB_DEFAULT, GRUB_TIMEOUT), 2) aggiungere voci in /etc/grub.d/40_custom se ne hai bisogno, 3) rigenera con update-grub/grub2-mkconfig, 4) riavviare e testare.
Dove posizionare i menu personalizzati in GRUB 2? En /etc/grub.d/40_custom (o file propri in /etc/grub.d/ con le autorizzazioni appropriate). Non modificare mai manualmente /boot/grub/grub.cfg tranne in caso di emergenza.
Dove sono state archiviate le voci in GRUB Legacy? En /boot/grub/menu.lst o grub.conf, secondo la distribuzione.
Come si accede alla console di GRUB dal menu? Premi il tasto "c" in GRUB 2 o Legacy. Per modificare una voce specifica, premi "e". Entrambe le scorciatoie sono molto utili quando è necessario diagnosticare problemi al volo.
Esempi di opzioni comuni
Selezione di avvio predefinita: GRUB_DEFAULT=0 inizia il primo inning; con GRUB_DEFAULT=saved ricorda l'ultima configurazione utilizzata. Dopo la modifica, rigenera la configurazione.
Tempo di attesa: GRUB_TIMEOUT=4 regola il ritardo del menu; con 0 inizia senza pausa; in alcuni scenari è possibile nascondere il menu con GRUB_TIMEOUT_STYLE=hidden per un inizio più pulito.
Aggiornamento del menu: su Debian/Ubuntu e derivati, sudo update-grub; in altri, sudo grub2-mkconfig -o /boot/grub/grub.cfg. Assicurati di avere os-prober installato se si desidera rilevare automaticamente altri sistemi.
Sebbene GRUB compaia anche in contesti diversi da GNU/Linux, ricorda che non si tratta di un servizio di supporto. Se il tuo problema è specifico di Windows, la cosa più pratica da fare è consultare i forum dedicati a quel sistema operativo per ottenere assistenza specifica.
GRUB si è evoluto da un semplice menu di avvio a un vero e proprio ambiente pre-sistema, capace di avviare più sistemi operativi, gestire dischi complessi e consentire il ripristino di un sistema con pochi semplici comandi. Con una configurazione adeguata e alcune misure di sicurezza (password di GRUB, crittografia LUKS, gestione efficace delle chiavi e dei log), si otterrà un processo di avvio robusto, flessibile e, soprattutto, controllato.
