Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Grub 2: gestire e configurare il boot di Linux

Grub 2 diventerà prima o poi il bootloader predefinito di tutte le distribuzioni linux. Vediamo come usarlo e configurarlo passo per passo
Grub 2 diventerà prima o poi il bootloader predefinito di tutte le distribuzioni linux. Vediamo come usarlo e configurarlo passo per passo
Link copiato negli appunti

Da diversi anni ormai, tutte le maggiori distribuzioni linux si affidano, per la gestione del boot su computer con più di un sistema operativo, all'ormai celebre GRUB (acronimo che sta per “GRand Unified Bootloader”). Si tratta di un software che consente, all'avvio, di far decidere all'utente quale dei sistemi operativi installati vuole avviare, fornendo un menu e consentendo comunque l'avvio automatico di un sistema operativo di default allo scadere di un timeout personalizzabile.

Dopo anni di continui sviluppi, in cui la maggior parte degli utenti si è sempre dovuta confrontare con la configurazione della prima versione di GRUB, chiamata GRUB Legacy, da qualche tempo molte distribuzioni linux vengono rilasciate con GRUB 2, che sostituirà il suo antenato presto quasi ovunque. La necessità di ricominciare un “nuovo ciclo” nasce dal fatto che “GRUB Legacy è diventato ingestibile” (stando a quanto dichiarato dal team di sviluppo nel sito ufficiale), e le richieste di estensione sono diventate praticamente impossibili da soddisfare.

L'introduzione di questa nuova soluzione, tuttavia, ha causato in molti utenti un po' di disorientamento, dovuto alle novità introdotte riguardo alla personalizzazione ed alla configurazione. Mentre in precedenza alcune caratteristiche essenziali erano, ad esempio, incluse in un file chiamato menu.lst, tramite la modifica del quale era possibile, fra le altre caratteristiche, cambiare l'ordine degli elementi del bootloader, o il timeout, adesso GRUB 2 fornisce una nuova serie di strumenti per tali funzionalità. Questi strumenti, tuttavia, causano un leggero aumento della difficoltà nel modificare i parametri di configurazione. Nel seguito, vedremo com'è strutturato il nuovo bootloader, e in che modo è possibile personalizzarlo.

Figura 1: L'interfaccia standard di GRUB 2
Figura 1: L'interfaccia standard di GRUB 2

Impostare un'immagine di sfondo nel menu

Prima di spiegare nel dettaglio come gestire GRUB 2, parliamo di una novità introdotta con questa versione. Il nuovo bootloader offre infatti la possibilità di impostare un'immagine di sfondo sul menu. La procedura per eseguire tale operazione non è molto complessa. Inoltre, la possibilità di creare script “ad hoc” rende quasi illimitate le opportunità offerte da GRUB 2 in termini di personalizzazione.

Figura 2: Un menu di GRUB 2 con uno sfondo personalizzato
(clic per ingrandire)

Figura 2: Un menu di GRUB 2 con uno sfondo personalizzato

Il file grub.cfg

La vecchia versione di GRUB consentiva agli utenti di configurare il menu di GRUB Legacy modificando un file, all'interno della directory /boot/grub, chiamato menu.lst. Tale file conteneva la lista delle opzioni visualizzate da GRUB, ed era possibile modificare l'ordine, la selezione di default o il timeout, oltre ad altri parametri. Adesso tale file è stato rimpiazzato (in parte) da grub.cfg, anch'esso situato in /boot/grub. Se proviamo a visualizzare il contenuto di tale file, tuttavia, l'occhio cade subito sulle prime righe del file:

vitogentile@html-it:~$ cat /boot/grub/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
[...]

Sebbene sia sempre possibile modificare manualmente (con i permessi di amministratore) questo file, la politica dettata dalle scelte del team di sviluppo è quella di non farlo direttamente, bensì di utilizzare un apposito comando che, basandosi sul contenuto di altri file descritti nel seguito, genera automaticamente grub.cfg. Tale comando è update-grub, equivalente in tutto e per tutto ad update-grub2. Entrambi non sono altro che dei “wrapper” di un altro comando; in altre parole, consentono all'utente di aggiornare il file grub.cfg senza utilizzare la sintassi leggermente più prolissa di grub-mkconfig:

grub-mkconfig -o /boot/grub/grub.cfg

Quest'ultimo crea un file di configurazione e lo salva nel percorso specificato dall'opzione -o.

Il file grub.cfg contiene alcune importanti sezioni, e ognuna di esse inizia e termina con alcune linee identificative, facilmente riconoscibili da chiunque:

### BEGIN /etc/grub.d/00_header ###
[...]
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/05_debian_theme ###
[...]
### END /etc/grub.d/05_debian_theme ###
### BEGIN /etc/grub.d/10_linux ###
[...]
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_memtest86+ ###
[...]
### END /etc/grub.d/20_memtest86+ ###
### BEGIN /etc/grub.d/30_os-prober ###
[...]
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/40_custom ###
[...]
### END /etc/grub.d/40_custom ###

Ogni sezione corrisponde ad un altro file, contenuto nella directory /etc/grub.d, e il contenuto di questi file è alla base del comportamento di update-grub. Essi contengono, infatti, gli script da eseguire per la creazione di grub.cfg, ed utilizzano alcune variabili definite in un altro importante file descritto più avanti.

In aggiunta a quanto detto, si noti che il nome di ogni file contenuto in /etc/grub.d inizia con un numero di due cifre. La funzione di questi numeri è chiarita dal file README contenuto all'interno della stessa cartella. Per chi non mastica l'inglese, questo file spiega che i numeri 00, 10 e 20 sono riservati e non possono essere utilizzati; tutti gli altri, invece, possono essere sfruttati al fine di creare nuovi script da usare ad ogni nuova generazione di grub.cfg. I numeri, inoltre, hanno un altro importante scopo: essi, infatti, determinano l'ordine in cui verranno eseguiti gli script ogni volta che si lancia il comando update-grub. Nel caso visto sopra, la procedura di creazione di grub.cfg utilizza, in questo ordine, i file: 00_header, 05_debian_theme, 10_linux, 20_memtest86+, 30_os-prober e 40_custom. Questo principio sarà utile, come vedremo nel seguito, per stabilire l'ordine delle voci del menu.

Il file /etc/default/grub

Tutti gli script contenuti in /etc/grub.d utilizzano alcune importanti variabili, utili per modificare alcune delle voci più frequentemente ricercate. Queste variabili sono definite all'interno di un importantissimo file, reperibile al percorso /etc/default/grub. Analizziamo, dunque, i parametri più interessanti di questo file:

  • GRUB_DEFAULT: consente di impostare quale delle voci dell'elenco deve essere selezionata all'avvio (e quindi quale sistema operativo avviare alla scadenza del timeout). Di default è impostata a 0, cioè alla prima riga. Se si vuole pre-selezionare, ad esempio, la terza riga, è necessario impostare tale parametro a 2. In alternativa al numero, è anche possibile utilizzare la stringa esatta della voce del menu; ad esempo, è possibile scrivere GRUB_DEFAULT="Ubuntu, Linux 2.6.32-32-generic"
  • GRUB_TIMEOUT: questa voce consente di impostare, in secondi, quando deve scadere il timeout affinché GRUB 2 avvii il sistema selezionato di default
  • GRUB_DISABLE_LINUX_RECOVERY: è possibile assegnare a questa voce i soli valori true e false e, se impostata a true, nasconde da GRUB 2 le voci relative alla modalità recovery
  • GRUB_DISABLE_OS_PROBER: anche questa voce accetta i soli valori true e false, e stabilisce se, durante la creazione di grub.cfg, devono essere ignorati i sistemi operativi aggiunti dall'utente
  • GRUB_GFXMODE: consente di impostare la risoluzione dello schermo al momento della visualizzazione del menu di GRUB 2

Come si vede, molte funzionalità utili possono essere modificate da quest'ultimo file. Tuttavia ci sono ancora alcuni dettagli utili che è bene specificare. Per farlo, presentiamo alcuni esempi delle operazioni più comuni per la personalizzazione del menu di GRUB 2.

Cambiare l'ordine delle voci del menu

Abbiamo visto che, tramite l'opzione GRUB_DEFAULT del file di default è possibile stabilire quale delle voci desideriamo pre-selezionare all'avvio. Spesso, però, questa scelta può non bastare.

Supponiamo di avere installato sul nostro computer, oltre Linux, anche Windows, e di volere avviare di default quest'ultimo sistema operativo. Se questo è alla quarta riga del menu, imposteremo il valore di GRUB_DEFAULT a 3. Quando viene installata una nuova versione del kernel linux, però, la voce relativa a Windows verrà spostata più in basso di due righe: una per il nuovo kernel, l'altra per la relativa recovery mode. La nuova installazione, perciò, sposterà Windows dalla posizione 4 alla 6, e saremmo costretti a dover modificare nuovamente la variabile GRUB_DEFAULT. Infine, dovremmo aggiornare grub.cfg con il comando update-grub.

Per risolvere questo problema, tuttavia, è sufficiente rinominare il file /etc/grub.d/XX_os-prober (dove XX è un numero superiore a 10, e solitamente pari a 30). Questo file genera, con l'opportuna sintassi necessaria, le definizioni di ogni voce aggiuntiva del menu. Le voci relative ai kernel Linux, invece, sono generate da /etc/grub.d/10_linux. Cambiando il numero XX in un numero compreso tra 01 e 09, otterremo che, generando nuovamente grub.cfg con update-grub, verrà utilizzato prima quest'ultimo file, e poi quello relativo alle voci dei kernel di linux (poiché il suo numero identificativo è 10). Di conseguenza, la lista dei sistemi operativi nel menu conterrà prima quelli inseriti dall'utente, e poi quelli relativi a linux; ogni volta che verrà installato un nuovo kernel, questo sarà aggiunto dopo i sistemi operativi personalizzati, e la modifica di GRUB_DEFAULT non sarà più necessaria.

Modificare i nomi delle voci del menu

I file 30_os-prober e 10_linux generano le definizioni di ogni riga del menu di GRUB 2, che verranno salvate all'interno di grub.cfg. Vediamo la sintassi di una di queste righe:

menuentry "Windows 7 (loader) (on /dev/sda1)" {
insmod ntfs
set root='(hd0,1)'
search --no-floppy --fs-uuid --set d8b6b9c1b6b9a084
chainloader +1
}

Modificando, quindi, il file grub.cfg, possiamo cambiare il nome delle voci, cambiando unicamente la stringa tra virgolette dopo la parola chiave menuentry. Ad esempio, possiamo modificare la linea sopra citata, e cambiarla in:

menuentry "Windows 7" {
insmod ntfs
set root='(hd0,1)'
search --no-floppy --fs-uuid --set d8b6b9c1b6b9a084
chainloader +1
}

Per farlo, è necessario dotare il file grub.cfg dei permessi di scrittura, tramite l'uso di chmod.

Questo metodo risulta, tuttavia, in contrasto con la filosofia del non modificare direttamente grub.cfg. Per questo motivo, questa tecnica è consigliata ad i soli utenti esperti; eventualmente, è possibile seguire altri metodi, come la creazione di script “ad hoc” per la generazione dei menuentry.

Per concludere, è bene ricordare GRUB Legacy per la sua semplicità di utilizzo, ma è impossibile non apprezzare le potenzialità del suo successore; e intanto si spera che presto il team di sviluppo fornisca anche qualche valido strumento per consentire a chiunque di personalizzare in modo semplice quanto potente questo utile strumento.

Chi lo desidera può personalizzare l'avvio con Grub Customizer, un front-end gratuito per Grub2.

Ti consigliamo anche