9.2. Avvio con GRUB

GRUB (Grand Unified Bootloader) prevede due fasi: stage1 consiste di 512 byte e il suo unico compito è di caricare la seconda fase del boot loader. Successivamente viene caricato stage2. Questa fase contiene la parte principale del boot loader.

In alcune configurazioni, può essere utilizzato uno stage 1.5 intermedio, che identifica e carica lo stage 2 da un file system appropriato. Se possibile, questo metodo viene scelto per impostazione predefinita all'installazione o quando si imposta inizialmente GRUB con YaST.

stage2 è in grado di accedere ai vari file system. Attualmente sono supportati i file system Ext2, Ext3, ReiserFS, Minix e il file system 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 questa informazione, la riga di comando GRUB chiede conferma all'utente su come procedere (per dettagli, vedere la Sezione 9.2.1.3, "Modifica delle voci di menu nel corso della procedura di avvio").

/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 comandi, 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 9.2.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.

Esistono due versioni di GRUB, come boot loader e come normale programma Linux in /usr/sbin/grub. Questo programma, indicato come shell di GRUB, fornisce un'emulazione di GRUB nel sistema installato e può essere utilizzato per installare GRUB o per provare nuove impostazioni prima di applicarle. 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.

9.2.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 9.3, "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 9.2.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 o viene utilizzato un sistema Linux recente, dotato di funzioni hotplug, è 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 o una partizione. 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.

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 9.2.1.2, "File di menu di esempio".

9.2.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
    

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

Purtroppo, spesso 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 9.2.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

9.2.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 la Sezione 9.2.1.3, "Modifica delle voci di menu nel corso della procedura di avvio".

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

Dal menu di avvio grafico, 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 passare al menu testuale di GRUB, 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.

La modifica delle voci di menu 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.

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 nuovamente E. 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.

9.2.2. FIle device.map

Il file device.map esegue la mappatura dei nomi dei dispositivi GRUB e BIOS 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 il prompt 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.

[Important]Dischi SATA

A seconda del controller, i dischi SATA sono riconosciuti come dispositivi IDE (/dev/hdx) o SCSI (/dev/sdx).

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

9.2.3. File /etc/grub.conf

Il terzo importante file di configurazione di GRUB, oltre a menu.lst e device.map è /etc/grub.conf. Questo file contiene i parametri e le opzioni necessarie alla shell di GRUB per la corretta installazione del boot loader.

root (hd0,4)
   install /grub/stage1 (hd0,3) /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, installare stage1 del boot loader nel contenitore per la partizione estesa (/grub/stage1 (hd0,3)) e caricare stage2 all'indirizzo di memoria 0x8000 (/grub/stage2 0x8000). L'ultima voce ((hd0,4)/grub/menu.lst) indica a GRUB dove cercare il file di menu.

9.2.4. 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.