(Grand Unified Bootloader) presenta due livelli; il primo livello (stage1) di 512 byte viene scritto nell' MBR o nel settore di boot della partizione o su dischetto. Il secondo livello più ampio (stage2) viene caricato in seguito e contiene il codice di programma in sé. L'unico compito del primo livello di consiste nel caricare il secondo livello del boot loader.
stage2 può accedere ai file system. Al momento vengono supportati Ext2, Ext3, ReiserFS, JFS, XFS, MINIX e il DOS FAT FS di Windows. Con delle restrizioni vengono supportati JFS XFS ed anche UFS/FFS utilizzato da sistemi BSD. A partire dalla versione 0.95 è anche in grado di effettuare il boot secondo la specificazione “El Torito” da CD o DVD con un file system standard ISO 9660. è in grado di accedere a file system di dispositivi a disco Bios (dischetti o dischi rigidi rilevati dal BIOS, lettori di CD e DVD) prima del boot, motivo per cui modifiche apportate al file di configurazione di (menu.lst) non significano più dover eseguire una reinstallazione del boot manager. All'avvio ricarica il file menu e i percorsi attuali nonché le informazioni sul partizionamento riguardanti il kernel o la ramdisk iniziale (initrd) e trova da sé questi file.
La configurazione di avviene attraverso tre file, illustrati di seguito:
Il file contiene le indicazioni su partizioni o sistemi operativi avviabili da . Se mancano queste indicazioni non è possibile passare il controllo del sistema al sistema operativo.
Questo file “converte” il nome del dispositivo nella annotazione /BIOS in un nome di dispositivo Linux.
Questo file indica i parametri e opzioni richiesti dalla shell per una installazione corretta del bootloader.
si lascia gestire in vario modo. Le voci di boot di una configurazione già esistente possono essere selezionate tramite un menu grafico (splashscreen). La configurazione viene presa immutata dal file menu.lst.
presenta il grande vantaggio di consentire di modificare comodamente tutti i parametri di boot prima del boot. Se ad esempio avete fatto un errore editando il file menu potrete provvedere a correggerlo in questo modo. Inoltre, potete immettere dei comandi di boot interattivamente tramite una sorta di prompt (si veda la sezione Section 7.4.1.3, “Modificare le voci di menu durante il processo di boot”). consente inoltre ancor prima del boot di individuare la posizione del kernel e di initrd. In tal modo caricate anche sistemi operativi sprovvisti di una voce nel menu di boot.
Infine, il sistema installato include una shell, una emulazione di . La shell serve ad installare oppure a testare delle nuove impostazioni prima di applicarle effettivamente (si veda la sezione Section 7.4.4, “La shell”).
Lo splash screen grafico con il menu di boot viene configurato tramite il file di configurazione di /boot/grub/menu.lst che contiene tutte le informazioni sulle partizioni o sistemi operativi che possono essere caricati attraverso il menu.
Ad ogni avvio di sistema carica i file menu del file system. Dunque non bisogna aggiornare dopo aver modificato il file — utilizzate semplicemente il modo per la configurazione del bootloader (si veda la sezione Section 7.5, “La configurazione del bootloader con ”).
Il file menu contiene dei comandi. La sintassi è molto semplice. Ogni file contiene un comando seguito da parametri opzionali separati da spazi come nella shell. Per motivi che potremmo definire "storici" è possibile anteporre il segno d'uguaglianza al primo parametro di alcuni comandi. I commenti vengono introdotti dal carattere (#).
Ai fini dell'identificazione delle registrazioni di menu nella tavola sinottica dei menu, ad ogni registrazione dovete dare un nome o un title. Il testo che segue la parola chiave title verrà visualizzato, spazi inclusi, quale opzione da selezionare. Tutti i comandi fino al prossimo title vengono eseguiti dopo la selezione della registrazione del menu.
Il caso più semplice è rappresentato da un collegamento in serie di boot loader di diversi sistemi operativi. Il comando è chainloader e l'argomento è di solito il blocco di boot di un'altra partizione nella block notation di per esempio:
chainloader (hd0,3)+1
I nomi dei dispositivi in vengono spiegati nella sezione Section 7.4.1.1, “Denominazioni dei dischi rigidi e partizioni”. Nell'esempio di sopra viene specificato il primo blocco della quarta partizione del primo hard disk.
Con il comando kernel viene specificata una immagine del kernel. Il primo argomento è il percorso all' immagine del kernel su una partizione. Gli altri argomenti vengono passati al kernel tramite la linea di comando.
Se il kernel è sprovvisto dei driver necessari per accedere alla partizione root, allora dovete ricorrere ad initrd. Si tratta di un comando a sè stante che ha come solo argomento il percorso del file initrd. Dato che l'indirizzo di caricamento di initrd viene scritto nell'immagine del kernel già caricata, il comando initrd deve seguire al comando kernel.
Il comando root semplifica la specificazione dei file del kernel e file initrd. root ha come unico argomento un dispositivo oppure una partizione su un tale dispositivo. A tutti i percorsi del kernel, di initrd o di altri file senza una esplicita indicazione di un dispositivo viene preposto il dispositivo fino al prossimo comando root. Questo comando non è incluso in un menu.lst generato durante l'installazione.
Alla fine di ogni registrazione di menu vi è implicitamente il comando boot, in modo che non debba essere scritto nel file di menu. Per un avvio interattivo con , il comando boot deve essere aggiunto alla fine. boot non ha argomenti, esegue semplicemente l'immagine del kernel caricata o il chain loader indicato.
Dopo aver compilato tutte le registrazioni di menu dovete stabilire una registrazione come default, altrimenti verrà utilizzata la prima registrazione (0). Potete anche stabilire un timeout in secondi prima che ciò avvenga. timeout e default di solito vengono scritti davanti alle registrazioni di menu. Un file esempio con relative spiegazioni si trova nella sezione Section 7.4.1.2, “Esempio di un file menu”.
utilizza una convenzione diversa per designare dischi rigidi e partizioni rispetto ai soliti dispositivi Linux (p.es. /dev/hda1). Il primo disco rigido è sempre hd0, il lettore del dischetto fd0.
In il sistema di conteggio delle partizioni inizia da zero. (hd0,0) è la prima partizione del primo disco rigido; in un comune sistema desktop con un disco connesso come primary master il nome di dispositivo è /dev/hda1.
Le quattro possibili partizioni primarie hanno i numeri di partizione da 0 a 3. 4 è la prima partizione logica:
(hd0,0) prima partizione primaria sul primo disco rigido (hd0,1) seconda partizione primaria (hd0,2) terza partizione primaria (hd0,3) quarta partizione primaria (spesso partizione estesa) (hd0,4) prima partizione logica (hd0,5) seconda partizione logica ...
non distingue tra dispositivi IDE, SCSI o RAID. Tutti i dischi rigidi rilevati dal BIOS o da altri controller, vengono conteggiati nella sequenza di boot preimpostata nel BIOS.
Il fatto che nomi di dispositivi Linux non si lasciano correlare in modo chiaro ai nomi di dispositivi BIOS si ha sia con che con . Entrambi utilizzano degli algoritmi simili per generare tale correlazione. Comunque archivia questa correlazione nel file device.map che potete editare. Per ulteriori informazioni su device.map consultate la sezione Section 7.4.2, “Il file device.map”.
Un percorso completo consiste di un nome di dispositivo scritto tra parentesi e il percorso del file nel file system sulla partizione indicata. Il percorso inizia con uno slash. Ecco un esempio per un kernel atto al boot su di un sistema con un solo disco rigido IDE e con Linux sulla prima partizione:
(hd0,0)/boot/vmlinuz
Per meglio comprendere la struttura di un file menu presentiamo un breve esempio. Questa installazione esempio contiene una partizione di boot Linux sotto /dev/hda5, una partizione root sotto /dev/hda7 ed una installazione Windows sotto /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 riguarda la configurazione dello splash screen:
L'immagine dello sfondo si trova su /dev/hda5 e porta il nome message
Lo schema cromatico: bianco (primo piano), blu (sfondo), nero (selezione) e grigio chiaro (sfondo della selezione). Questo schema cromatico non incide sullo splash screen, ma in un primo momento sul menu di che potete modificare in cui entrate dopo essere uscito dallo splashscreen con Esc.
La prima voce di menu con title linux deve essere avviata di default.
Trascorsi otto secondo senza un intervento da parte dell'utente, esegue il boot in modo automatico.
Il secondo blocco più esteso elenca i sistemi operativi da poter caricare. Le sezioni per i singoli sistemi operativi sono introdotte da title.
La prima registrazione (title linux) avvia . Il kernel (vmlinuz) si trova sul primo disco rigido nella prima partizione logica (in questo caso la partizione di boot). Parametri del kernel come ad esempio l'indicazione della partizione root, il modo VGA etc. vengono aggiunti qui. L'indicazione della partizione root deve seguire lo schema Linux (/dev/hda7/) visto che questa informazione è destinata al kernel e non riguarda . initrd si trova anche sulla prima partizione logica del primo disco rigido.
La seconda registrazione carica Windows. Windows viene caricato dalla prima partizione del primo disco rigido (hd0,0). Con chainloader +1 controllate il caricamento e l'esecuzione del primo settore della partizione indicata.
La prossima sezione serve ad eseguire il boot dal dischetto, senza dover intervenire sul BIOS.
Con l'opzione di boot failsafe potete lanciare Linux con una determinata scelta di parametri del kernel che consentono di caricare Linux anche su sistemi "problematici".
Il file menu può essere modificato in qualsiasi momento e lo caricherà automaticamente al prossimo boot. Potete editare questo file con il vostro editor preferito o con in modo permanente. Potete anche apportare delle modifiche temporanee tramite la funzione edit di (si veda la sezione Section 7.4.1.3, “Modificare le voci di menu durante il processo di boot”).
Nel menu di boot grafico di potete selezionare tramite i tasti cursore il sistema operativo da caricare tra quelli disponibili. Se selezionate un sistema Linux al prompt di boot – come già per – potete immettere propri parametri di boot. va però ancora oltre. Se premete Esc e uscite dallo splash screen dopo aver immesso e (edit) potete editare direttamente in modo mirato le singole voci di menu. Le modifiche fatte in questa maniera sono di natura temporanea, al prossimo boot scompariranno.
![]() | Mappatura della tastiera durante il boot |
|---|---|
Tenete presente che al boot si ha la mappatura americana dei tasti e che di conseguenza i caratteri speciali sono scambiati. | |
Dopo aver attivato il modo edit, selezionate tramite i tasti cursore la voce di menu di cui modificare la configurazione. Per poter editare la configurazione immettete ancora una volta e. In tal modo potete correggere indicazioni errate riguardanti le partizioni o i percorsi prima che si ripercuotono sul processo di boot. Con Invio uscite dal modo edit e tornate al menu da dove potete avviare tale voce con b. Nel testo di assistenza nella parte inferiore vengono descritti altri possibili modi di intervenire.
Se volete rendere permanenti le opzioni di boot aprite come root il file menu.lst ed aggiungete ulteriori parametri di kernel dopo uno spazio alla riga esistente:
title linux kernel (hd0,0)/vmlinuz root=/dev/hda3 <ulteriore parametro> initrd (hd0,0)/initrd
assume i nuovi parametri automaticamente al prossimo boot. Come alternativa potete anche invocare il modulo del boot loader di . Anche qui basta aggiungere ulteriori parametri alla riga esistente separati da uno spazio.
Il file device.map contiene la correlazione dei nomi di dispositivo e di quelli Linux. Se avete un sistema misto con dischi rigidi IDE e SCSI, tenterà di rilevare la sequenza di boot in base ad un particolare procedimento. Le informazioni BIOS a riguardo non sono accessibili a . Il risultato di tale controllo viene archiviato da sotto /boot/grub/device.map. Ecco un file esempio device.map per un sistema esempio – partiamo dal presupposto che la sequenza di boot impostata nel BIOS prevede che i dischi IDE vengono rilevati prima di quelli SCSI:
(fd0) /dev/fd0 (hd0) /dev/hda (hd1) /dev/sda
Dato che la sequenza di hard disk IDE, SCSI ed altri tipi di hard disk dipende da una serie di fattori e Linux non ne rivela la correlazione, vi è la possibilità di impostare la sequenza manualmente in device.map. Se al prossimo boot del sistema si dovessero verificare delle difficoltà, controllate la sequenza di boot e cambiatela se necessario tramite la shell (si veda la sezione Section 7.4.4, “La shell”). Una volta caricato il sistema Linux, con il modulo del boot loader di oppure con un editor di vostra preferenza potete modificare il file device.map in modo permanente.
Dopo avere apportato delle modifiche manualmente al file device.map, date il seguente comando per reinstallare . Inoltre viene riletto il file device.map ed eseguiti i comandi contenuti in grub.conf:
grub --batch < /etc/grub.conf
Il terzo importante file di configurazione di accanto a menu.lst e device.map è /etc/grub.conf. Qui trovate i parametri e opzioni richieste dal comando grub per installare correttamente il boot loader:
root (hd0,4) install /grub/stage1 d (hd0) /grub/stage2 0x8000 (hd0,4)/grub/menu.lst quit
Le significato delle singole registrazioni:
Con questo comando si istruisce a riferirsi per i seguenti comandi alla prima partizione logica del primo disco rigido, dove trova i suoi file di boot.
Il comando grub deve essere lanciato con il parametro install. stage1 come primo livello del boot loader deve essere installato nell'MBR del primo disco rigido (/grub/stage1 d (hd0)). stage2 deve essere caricato nell'indirizzo di memoria 0x8000 (/grub/stage2 0x8000). L'ultima registrazione (hd0,4)/grub/menu.lst indica a grub dove trovare il file menu.
Esistono due versioni di : come boot loader e come normale programma Linux che trovate sotto /usr/sbin/grub. Questo programma viene chiamato shell. La funzionalità di installare quale boot loader su un disco rigido o dischetto è integrata direttamente in sotto forma del comando install o setup. In tal modo è disponibile nella shell, una volta caricato Linux.
Questi comandi sono comunque già disponibili durante il processo di boot senza che sia necessario che Linux sia già in esecuzione. Questo semplifica il salvataggio di un sistema difettoso non più avviabile, dato che è possibile aggirare il file di configurazione corrotto del bootloader tramite l'immissione manuale di parametri. L'immissione manuale di parametri in fase di boot permette inoltre di verificare nuove impostazioni senza mettere a repentaglio il funzionamento del sistema nativo. Immettete semplicemente il comando di configurazione a titolo di prova attenendovi alla sintassi di menu.lst; mettete alla prova la funzionalità dell'immissione senza andare a toccare il file di configurazione attuale e così evitare l'insorgere di eventuali difficoltà in fase di boot del sistema. Se ad esempio intendete testare un nuovo kernel, passate il comando kernel con indicazione del percorso al kernel di alternativa. Se il processo di boot non si svolge correttamente, potrete ricorrere al prossimo boot al menu.lst intatto. In tal modo l'interfaccia della riga di comando si adatta anche per avviare il sistema nonostante la presenza di un menu.lst corrotto immettendo dei parametri corretti sulla riga di comando. Con il sistema in esecuzione reinserite i parametri corretti nel vostro menu.lst. Così il sistema è nuovamente avviabile.
Solo se la shell gira quale programma Linux (da invocare con grub come illustrato ad esempio nella sezione Section 7.4.2, “Il file device.map”), entra in gioco l'algoritmo di correlazione dei nomi di dispositivo e Linux. Il programma legge il file device.map. Per maggiori dettagli si veda la sezione Section 7.4.2, “Il file device.map”.
consente di accedere ai file system già in fase di boot, ciò significa che si può accedere a dei file del vostro sistema Linux a cui - a sistema caricato - può accedere solo root. Impostando una password evitate che vi siano degli accessi a questi file in fase di boot. Potete proibire gli accessi al file system durante il boot ad utenti non autorizzati o proibire l'esecuzione di determinati sistemi operativi agli utenti.
Per impostare una boot password procedete come root nel modo seguente:
Immettete al root prompt grub.
Cifrate la password nella shell:
grub> md5crypt Password: **** Encrypted: $1$lS2dv/$JOYcdxIn7CJk9xShzzJVw/
Inserite il valore cifrato nella sezione globale del file menu.lst:
gfxmenu (hd0,4)/message color white/blue black/light-gray default 0 timeout 8 password --md5 $1$lS2dv/$JOYcdxIn7CJk9xShzzJVw/
Adesso l'esecuzione di comandi in fase di boot è protetta, solo dopo aver immesso p e la password sarà possibile eseguire dei comandi. Continua ad essere comunque consentito agli utenti di lanciare un sistema operativo dal menu di boot.
Per escludere la possibilità di lanciare uno o diversi sistemi operativi dal menu di boot, immettete nel file menu.lst la voce lock per ogni sezione da proteggere con una password. Esempio:
title linux kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 initrd (hd0,4)/initrd lock
Dopo un reboot del sistema e la selezione della voce Linux nel menu di boot si ha il seguente messaggio di errore:
Error 32: Must be authenticated
Premete Invio per giungere al menu ed in seguito p per ottenere un prompt per la password. Dopo aver immesso la password e premuto Invio viene caricato il sistema operativo selezionato (in questo caso Linux).
![]() | Boot password e splash screen |
|---|---|
Se utilizzate una boot password per il consueto splash screen non è più a vostra disposizione. | |