29.3. Avvio con GRUB

GRUB (Grand Unified Bootloader) prevede due fasi. stage1 consiste di 512 byte e viene scritto nell'MBR o nel settore di avvio della partizione del disco rigido o del disco floppy. Successivamente viene caricato stage2. Questa fase contiene il codice effettivo del programma. L'unico task della prima fase è il caricamento della seconda fase del boot loader.

stage2 è in grado di accedere ai file system. Attualmente sono supportati i file system Ext2, Ext3, ReiserFS, Minix e il file DOS FAT utilizzato da Windows. Sono in parte supportati anche i file system JFS, XFS, UFS e FFS utilizzati dai sistemi BSD. Dalla versione 0.95, GRUB è inoltre in grado di eseguire l'avvio da un CD o DVD contenente un file system ISO 9660 standard, purché vi sia la specifica «El Torito». Anche prima dell'avvio del sistema, GRUB può accedere ai file system dei dispositivi disco del BIOS, ovvero dischi floppy o dischi rigidi, unità CD e DVD rilevate dal BIOS. Eventuali modifiche al file di configurazione di GRUB menu.lst non richiedono pertanto la reinstallazione del boot manager. Quando il sistema viene avviato, GRUB carica nuovamente il file di menu con i percorsi e i dati di partizione validi del kernel o il disco RAM iniziale (initrd) e individua questi file.

La configurazione effettiva di GRUB si basa su tre file che vengono descritti di seguito:

/boot/grub/menu.lst

Questo file contiene tutte le informazioni relative alle partizioni o ai sistemi operativi che possono essere avviati con GRUB. Senza queste informazioni, non è possibile passare il controllo di sistema al sistema operativo.

/boot/grub/device.map

Questo file trasforma i nomi dei dispositivi dalla notazione GRUB e BIOS a nomi dei dispositivi Linux.

/etc/grub.conf

Questo file contiene i parametri e le opzioni necessarie alla shell di GRUB per la corretta installazione del boot loader.

È possibile controllare GRUB in vari modi. È possibile selezionare le voci di una configurazione esistente dal menu grafico, ovvero dalla schermata di avvio. La configurazione viene caricata dal file menu.lst.

In GRUB, tutti i parametri di avvio possono essere modificati prima dell'esecuzione dell'avvio. In questo modo è ad esempio possibile correggere gli errori fatti durante la modifica del file di menu. È inoltre possibile immettere in modo interattivo i comandi di avvio mediante una sorta di prompt di input (vedere la Sezione 29.3.1.3, «Modifica delle voci di menu nel corso della procedura di avvio»). Con GRUB è possibile determinare la posizione del kernel e del file initrd prima dell'esecuzione dell'avvio. In questo modo è inoltre possibile avviare un sistema operativo installato per il quale non vi sono voci nella configurazione del boot loader.

La shell di GRUB fornisce un'emulazione di GRUB nel sistema installato che può essere utilizzata per installare GRUB o per verificare le nuove impostazioni prima di applicarle. Vedere Sezione 29.3.4, «Shell di GRUB».

29.3.1. Menu di avvio di GRUB

La schermata di avvio grafica contenente il menu di avvio si basa sul file di configurazione di GRUB /boot/grub/menu.lst, che contiene tutte le informazioni su tutte le partizioni o i sistemi operativi che possono essere avviati dal menu.

Ogni volta che il sistema viene avviato, GRUB carica il file di menu dal file system. Per questo motivo, non è necessario reinstallare GRUB in seguito a eventuali modifiche al file. Utilizzare il boot loader di YaST per modificare la configurazione di GRUB, come descritto nella Sezione 29.4, «Configurazione del boot loader con YaST».

Il file di menu contiene comandi. La sintassi è estremamente semplice. Ogni riga contiene un comando, seguito da parametri facoltativi separati da spazi, come nella shell. Alcuni comandi ammettono un segno = davanti al primo parametro. I commenti sono introdotti dal carattere cancelletto (#).

Per identificare le voci di menu nella panoramica del menu, specificare title per ogni voce. Il testo (inclusi eventuali spazi) che segue la parola chiave title viene visualizzato come opzione selezionabile nel menu. Quando si seleziona questa voce di menu, vengono eseguiti tutti i comandi fino alla successiva occorrenza di title.

Il caso più semplice è costituito dal reindirizzamento a boot loader di altri sistemi operativi. Il comando è chainloader e l'argomento è solitamente il blocco di avvio di un'altra partizione nella notazione di blocco di GRUB. Ad esempio:

chainloader (hd0,3)+1

I nomi dei dispositivi in GRUB vengono illustrati nella Sezione 29.3.1.1, «Convenzioni di denominazione per dischi rigidi e partizioni». L'esempio precedente specifica il primo blocco della quarta partizione del disco rigido.

Utilizzare il comando kernel per specificare un immagine del kernel. Il primo argomento è il percorso dell'immagine del kernel in una partizione. Gli altri argomenti vengono passati al kernel nella riga di comando.

Se il kernel non dispone di driver incorporati per l'accesso alla partizione radice, è necessario specificare initrd con un comando separato di GRUB il cui unico argomento è costituito dal percorso del file initrd. Poiché l'indirizzo di caricamento del file initrd è scritto nell'immagine del kernel caricata, il comando initrd deve seguire immediatamente il comando kernel.

Il comando root semplifica la specifica dei file kernel e initrd. Il solo argomento del comando root è un dispositivo GRUB o una partizione su un dispositivo GRUB. Questo dispositivo viene utilizzato per tutti i file kernel, initrd o altri percorsi di file per i quali non viene specificato esplicitamente alcun dispositivo fino al successivo comando root. Questo comando non viene utilizzato nel file menu.lst generato durante l'installazione. Esso consente esclusivamente di facilitare le modifiche manuali.

Il comando boot è implicito alla fine di ogni voce di menu, quindi non è necessario scriverlo all'interno del file di menu. Se tuttavia si utilizza GRUB in modo interattivo per l'avvio, è necessario immettere il comando boot al termine. Il comando non contiene argomenti. Si limita ad avviare l'immagine del kernel caricata o il chainloader specificato.

Dopo aver scritto tutte le voci di menu, definirne una come default. In caso contrario, verrà utilizzata la prima voce (0). È inoltre possibile specificare un timeout espresso in secondi, trascorso il quale la voce di default deve eseguire l'avvio. I comandi timeout e default precedono in genere le voci di menu. Un file di esempio è descritto nella Sezione 29.3.1.2, «File di menu di esempio».

29.3.1.1. Convenzioni di denominazione per dischi rigidi e partizioni

Le convenzioni di denominazione utilizzate da GRUB per i dischi rigidi e le partizioni sono diverse da quelle utilizzate per i normali dispositivi Linux. In GRUB, la numerazione delle partizioni inizia da zero. Pertanto hd0,0 è la prima partizione del primo disco rigido. In un computer desktop con disco rigido connesso come master primario, il nome del dispositivo Linux corrispondente è /dev/hda1.

Alle quattro possibili partizioni primarie sono assegnati i numeri di partizione da 0 a 3. Le partizioni logiche sono numerate a partire da 4:

(hd0,0)   first primary partition of the first hard disk 
(hd0,1)   second primary partition 
(hd0,2)   third primary partition 
(hd0,3)   fourth primary partition (usually an extended partition) 
(hd0,4)   first logical partition 
(hd0,5)   second logical partition
    

In GRUB non vi è distinzione tra dispositivi IDE, SCSI e RAID. Tutti i dischi rigidi riconosciuti dal BIOS o da altri controller vengono numerati in base alla sequenza di avvio preimpostata nel BIOS.

GRUB non è in grado di mappare i nomi di dispositivi Linux ai nomi di dispositivi del BIOS in modo corretto. La mappatura viene eseguita con l'aiuto di un algoritmo e salvata nel file device.map che può essere modificato in caso di necessità. Per informazioni sul file device.map, vedere la Sezione 29.3.2, «FIle device.map».

Un percorso GRUB completo è composto da un nome di dispositivo scritto tra parentesi e dal percorso del file nel file system nella partizione specificata. Il percorso inizia con una barra. È possibile ad esempio specificare il kernel avviabile in un sistema con un disco rigido IDE singolo contenente Linux nella prima partizione come indicato di seguito:

(hd0,0)/boot/vmlinuz

29.3.1.2. File di menu di esempio

Nell'esempio seguente viene mostrata la struttura di un file di menu di GRUB . L'installazione di esempio include una partizione di avvio di Linux in /dev/hda5, una partizione radice in /dev/hda7 e un'installazione di Windows in /dev/hda1.

gfxmenu (hd0,4)/message 
color white/blue black/light-gray 
default 0
timeout 8 

title linux 
   kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 
   initrd (hd0,4)/initrd 

title windows 
   chainloader(hd0,0)+1 

title floppy
   chainloader(fd0)+1 

title failsafe 
   kernel (hd0,4)/vmlinuz.shipped root=/dev/hda7 ide=nodma \ 
   apm=off acpi=off vga=normal nosmp maxcpus=0 3 
   initrd (hd0,4)/initrd.shipped

Il primo blocco definisce la configurazione della schermata di avvio:

gfxmenu (hd0,4)/message

L'immagine di sfondo message si trova in /dev/hda5.

color white/blue black/light-gray

Schema dei colori: bianco (primo piano), blu (sfondo), nero (selezione) e grigio chiaro (sfondo della selezione). Lo schema dei colori non influisce sulla schermata di avvio, ma solo sul menu personalizzabile di GRUB al quale è possibile accedere quando si esce dalla schermata di avvio utilizzando il tasto Esc.

default 0

La prima voce di menu title linux è quella che viene avviata per default.

timeout 8

Dopo otto secondi senza alcun input da parte dell'utente, la voce di default viene avviata automaticamente. Per disattivare l'avvio automatico, cancellare la riga timeout. Se si imposta timeout 0, la voce di default viene avviata immediatamente.

Il secondo blocco, più esteso, elenca i vari sistemi operativi avviabili. Le sezioni per i singoli sistemi operativi sono introdotte da title.

  • La prima voce (title linux) è responsabile dell'avvio di SUSE Linux. Il kernel (vmlinuz) si trova nella prima partizione logica, ovvero la partizione di avvio, del primo disco rigido. I parametri del kernel, quali la partizione radice e la modalità VGA, vengono aggiunti qui. La partizione radice viene specificata in base alla convenzione di denominazione di Linux (/dev/hda7/). Poiché questa informazione viene letta dal kernel non ha alcuna relazione con GRUB. Anche initrd è posizionato nella prima partizione logica del primo disco rigido.

  • La seconda voce è responsabile del caricamento di Windows. L'avvio di Windows avviene dalla prima partizione del primo disco rigido (hd0,0). Il comando chainloader +1 determina la lettura e l'esecuzione del primo settore della partizione specificata da parte di GRUB.

  • La voce successiva abilita l'avvio dal disco floppy senza modificare le impostazioni del BIOS.

  • L'opzione di avvio failsafe avvia Linux con una selezione di parametri del kernel che consentono l'avvio di Linux anche con sistemi problematici.

Il file di menu può essere modificato ogni volta che sia necessario. Le impostazioni modificate verranno utilizzate da GRUB all'avvio successivo. Modificare permanentemente il file mediante YaST oppure un editor di propria scelta. In alternativa, apportare modifiche temporanee in modo interattivo utilizzando la funzione di modifica di GRUB. Vedere Sezione 29.3.1.3, «Modifica delle voci di menu nel corso della procedura di avvio».

29.3.1.3. Modifica delle voci di menu nel corso della procedura di avvio

Dal menu di avvio grafico di GRUB, selezionare il sistema operativo da avviare mediante i tasti freccia. Se si seleziona un sistema Linux, è possibile immettere parametri di avvio aggiuntivi al prompt di avvio. Per modificare singole voci di menu direttamente, premere Esc per uscire dalla schermata di avvio e quindi premere E. Le modifiche apportate in questo modo si applicano solo alla procedura di avvio corrente e non vengono adottate permanentemente.

[Important]Layout di tastiera durante la procedura di avvio

Il layout di tastiera USA è l'unico disponibile nella fase di avvio.

Dopo aver attivato la modalità di modifica, utilizzare i tasti freccia per selezionare la voce di menu di cui si desidera modificare la configurazione. Per rendere la configurazione modificabile, premere E ancora una volta. Modificare in questo modo le partizioni o le specifiche di percorso errate prima che possano avere effetti negativi sul processo di avvio. Premere Invio per uscire dalla modalità di modifica e tornare al menu. Premere quindi B per avviare questa voce. Nel testo della Guida nella parte inferiore vengono visualizzate le ulteriori azioni possibili.

Per immettere le opzioni di avvio modificate permanentemente e passarle al kernel, aprire il file menu.lst come utente root e aggiungere i parametri corrispondenti del kernel alla riga esistente, separati da spazi:

title linux 
   kernel (hd0,0)/vmlinuz root=/dev/hda3 additional parameter
   initrd (hd0,0)/initrd

I nuovi parametri vengono automaticamente adottati da GRUB all'avvio successivo del sistema. In alternativa, questa modifica può essere effettuata mediante il modulo boot loader di YaST. Aggiungere i nuovi parametri alla riga esistente, separati da spazi.

29.3.1.4. Uso di caratteri jolly per selezionare il kernel di avvio

In particolare durante lo sviluppo o l' utilizzo di kernel personalizzati, è necessario modificare le voci in menu.lst oppure modificare la riga di comando per riflettere i nomi dei file kernel e initrd correnti. Per semplificare questa procedura, utilizzare i caratteri jolly per aggiornare dinamicamente l'elenco di kernel di GRUB. Tutte le immagini del kernel che corrispondono a un modello specifico vengono quindi aggiunte automaticamente all'elenco delle immagini avviabili. Si noti che non c'è supporto per questa funzionalità.

Attivare l'opzione dei caratteri jolly immettendo in menu.lst una voce di menu aggiuntiva. Per essere utili, tutte le immagini del kernel e di initrd devono avere un nome di base comune e un identificativo corrispondenti al kernel e all'initrd associati. Si consideri la configurazione seguente:

initrd-default
initrd-test
vmlinuz-default
vmlinuz-test

In questo caso, sarebbe possibile aggiungere entrambe le immagini di avvio in un'unica configurazione di GRUB. Per ottenere le voci di menu linux-default e linux-test, in menu.lst è necessaria la voce seguente:

title linux-*
   wildcard (hd0,4)/vmlinuz-*
   kernel (hd0,4)/vmlinuz-* root=/dev/hda7 vga=791 
   initrd (hd0,4)/initrd-* 

In questo esempio, nella partizione (hd0,4) viene eseguita automaticamente una ricerca delle voci che corrispondono al carattere jolly. Queste voci vengono utilizzate per generare nuove voci di menu di GRUB. Nell'esempio precedente, GRUB si comporta come se in menu.lst esistessero le voci seguenti:

title linux-default
   wildcard (hd0,4)/vmlinuz-default
   kernel (hd0,4)/vmlinuz-default root=/dev/hda7 vga=791 
   initrd (hd0,4)/initrd-default 
title linux-test
   wildcard (hd0,4)/vmlinuz-test
   kernel (hd0,4)/vmlinuz-test root=/dev/hda7 vga=791 
   initrd (hd0,4)/initrd-test 
    

Con questa configurazione possono verificarsi degli errori se i nomi dei file non sono utilizzati in modo coerente oppure se uno dei file espansi, ad esempio l'immagine di initrd, è mancante.

29.3.2. FIle device.map

Il file device.map esegue la mappatura dei nomi dei dispositivi GRUB ai nomi dei dispositivi Linux. In un sistema misto che contiene dischi rigidi IDE e SCSI, è necessario che GRUB cerchi di determinare la sequenza di avvio tramite una procedura speciale poiché GRUB non dispone dell'accesso alle informazioni del BIOS nella sequenza di avvio. In GRUB i risultati di questa analisi vengono salvati nel file /boot/grub/device.map. Per un sistema nel quale la sequenza di avvio nel BIOS è impostata su IDE prima di SCSI, il file device.map può presentarsi come indicato di seguito:

(fd0)  /dev/fd0 
(hd0)  /dev/hda 
(hd1)  /dev/sda

Poiché l'ordine di IDE, SCSI e di altri dischi rigidi dipende da diversi fattori e Linux non è in grado di identificare la mappatura, è possibile impostare manualmente la sequenza nel file device.map. Se si verificano problemi durante l'avvio, verificare che la sequenza in questo file corrisponda alla sequenza nel BIOS e utilizzare la shell di GRUB, descritta nella Sezione 29.3.4, «Shell di GRUB», per modificarla temporaneamente, se necessario. Dopo l'avvio del sistema Linux, è possibile modificare il file device.map permanentemente mediante il modulo boot loader di YaST o un editor di propria scelta.

Dopo aver modificato manualmente il file device.map, per reinstallare GRUB eseguire il comando seguente. Questo comando determina il ricaricamento del file device.map e l'esecuzione dei comandi elencati in grub.conf:

				 grub --batch < /etc/grub.conf

29.3.3. File /etc/grub.conf

Il terzo importante file di configurazione di GRUB, oltre a menu.lst e device.map è /etc/grub.conf. In questo file sono contenuti i parametri e le opzioni di cui il comando grub ha bisogno per l'installazione corretta del boot loader:

				 
root (hd0,4) 
   install /grub/stage1 d (hd0) /grub/stage2 0x8000 (hd0,4)/grub/menu.lst 
   quit

Significato delle singole voci:

root (hd0,4)

Questo comando determina in GRUB l'applicazione dei comandi indicati di seguito alla prima partizione logica del primo disco rigido (posizione dei file di avvio).

parametro install

È consigliabile eseguire il comando grub con il parametro install. È consigliabile installare stage1 del boot loader nell'MBR del primo disco rigido (/grub/stage1 d (hd0)). È consigliabile caricare stage2 nell'indirizzo della memoria 0x8000 (/grub/stage2 0x8000). L'ultima voce ((hd0,4)/grub/menu.lst) indica a GRUB dove cercare il file di menu.

29.3.4. Shell di GRUB

Esistono due versioni di GRUB, come boot loader e come normale programma Linux in /usr/sbin/grub. Questo programma viene indicato come shell di GRUB. La funzionalità per installare GRUB come boot loader nel disco rigido o nel disco floppy è integrata in GRUB sotto forma dei comandi install e setup ed è disponibile nella shell di GRUB quando Linux viene caricato.

I comandi setup e install sono tuttavia disponibili anche durante la procedura di avvio prima di avviare Linux. Questo semplifica la riparazione di un sistema difettoso che non può più essere avviato poiché il file di configurazione errato del boot loader può essere ignorato immettendo i parametri manualmente. L'immissione manuale dei parametri durante la procedura di avvio è utile anche per verificare le nuove impostazioni senza creare problemi al sistema nativo. È sufficiente immettere il file di configurazione sperimentale con una sintassi simile a quella presente in menu.lst. Verificare quindi la funzionalità di questa voce senza modificare il file di configurazione esistente. Per verificare un nuovo kernel, ad esempio, immettere il comando kernel e il percorso al nuovo kernel. Se non è possibile eseguire la procedura di avvio, si può continuare a utilizzare menu.lst senza modifiche all'avvio successivo. Allo stesso modo, l'interfaccia della riga di comando può anche essere utilizzata per avviare un sistema indipendentemente dalla presenza di un file menu.lst errato, grazie all'immissione dei parametri corretti. Nel sistema in esecuzione, è possibile immettere i parametri corretti in menu.lst per rendere il sistema permanentemente avviabile.

La mappatura dei dispositivi GRUB ai nomi dei dispositivi Linux è rilevante solo quando si esegue la shell di GRUB come programma Linux immettendo grub come descritto nella Sezione 29.3.2, «FIle device.map». A questo scopo, il programma legge il file device.map. Per ulteriori informazioni, vedere Sezione 29.3.2, «FIle device.map».

29.3.5. Impostazione di una password di avvio

Con GRUB è possibile accedere ai file system anche prima dell'avvio del sistema operativo. Gli utenti che non dispongono di autorizzazioni radice possono accedere ai file del sistema Linux in uso ai quali non hanno accesso dopo l'avvio del sistema. Per bloccare questo genere di accesso o evitare che gli utenti possano avviare determinati sistemi operativi, impostare una password di avvio.

[Important]Password di avvio e schermata di avvio

Se si utilizza una password di avvio per GRUB, non viene visualizzata la normale schermata di avvio.

Come utente root, per impostare una password di avvio procedere come indicato di seguito:

  1. Al prompt radice, immettere grub.

  2. Cifrare la password nella shell di GRUB:

    grub> md5crypt 
    Password: **** 
    Encrypted: $1$lS2dv/$JOYcdxIn7CJk9xShzzJVw/
  3. Incollare la stringa cifrata nella sezione generale del file menu.lst:

    gfxmenu (hd0,4)/message 
    color white/blue black/light-gray 
    default 0
    timeout 8 
    password --md5 $1$lS2dv/$JOYcdxIn7CJk9xShzzJVw/

    È ora possibile eseguire i comandi GRUB solo al prompt di avvio dopo aver premuto P e aver immesso la password. Gli utenti possono tuttavia avviare ancora tutti i sistemi operativi dal menu di avvio.

  4. Per evitare l'avvio di uno o più sistemi operativi dal menu di avvio, aggiungere la voce lock a ogni sezione nel file menu.lst per la quale si desidera impedire l'avvio senza l'immissione di una password. Ad esempio:

    title linux 
    kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 
    initrd (hd0,4)/initrd 
    lock

    Dopo il riavvio del sistema e la selezione della voce di Linux dal menu di avvio, viene visualizzato il messaggio di errore seguente:

    Error 32: Must be authenticated

    Premere Invio per immettere il menu. Quindi premere P per il prompt della password. Dopo aver immesso la password e aver premuto Invio, il sistema operativo selezionato, in questo caso Linux, dovrebbe avviarsi.