IndiceBRTableOfContents(1) |
Introduzione
Grand Unified Bootloader (GRUB) è il boot loader predefinito di Ubuntu. Il boot loader è il programma che viene avviato subito dopo il BIOS durante l'accensione del computer, e si preoccupa di scegliere e avviare un sistema operativo fra quelli presenti nel computer. In genere GRUB riconosce automaticamente i sistemi operativi presenti e li inserisce in un menù iniziale, ma volendo si può modificare manualmente questo menu, ad esempio nel caso raro in cui un sistema non venga riconosciuto correttamente oppure se si vuole personalizzare le impostazioni d'avvio.
L'installazione di GRUB
GRUB viene automaticamente installato da Ubuntu. Se però in seguito si è installato un Sistema Operativo (come MS-Windows) che sovrascrive GRUB e ignora la presenza di altri sistemi operativi, o se si è installato un secondo boot loader e ora si vuole tornare a GRUB, ci si trova nella necessità di ripristinare GRUB, seguendo la [:/Ripristino:relativa guida].
L'installazione predefinita di GRUB prevede la modifica dell'MBR (Master Boot Record, il primo settore del disco fisso), in modo che GRUB sia il primo boot loader ad essere caricato, e la creazione dei file necessari all'avvio nella directory /boot, che diventa la directory radice di GRUB (da non confondere con la directory di root del sistema /). Il file di configurazione di GRUB è /boot/grub/menu.lst, basta modificarlo e al successivo avvio GRUB si comporterà di conseguenza.
Avvio interattivo del sistema
I comandi necessari per fare partire un sistema possono essere inseriti interattivamente all'avvio di GRUB, quando compare il menù con una voce per ogni sistema operativo installato: premendo il tasto "c" si ha accesso alla linea di comando di GRUB, in cui si possono inserire da zero i comandi per far partire un sistema operativo qualunque; invece, spostandosi su una voce a scelta e premendo il tasto "e" è possibile modificare le opzioni di avvio per quella specifica voce. GRUB può leggere le varie partizioni e visualizzare i nomi dei file, e grazie all'autocompletamento è impossibile sbagliare il percorso dei file o i nomi dei comandi. In questo modo è facile fare velocemente molte prove con kernel o parametri di boot diversi al volo; se si verifica un errore che blocca il caricamento del kernel basta riavviare il sistema e provare un'opzione diversa. Trovati i parametri giusti si possono [#modifiche_permanenti rendere permanenti le modifiche] in modo che non sia più necessario inserirle a mano.
Immagine(Icone/Piccole/note.png,,left) BR Alcuni caratteri visualizzati sullo schermo potrebbero non corrispondere a quelli visualizzati sulla tastieraBR BR
Far partire un sistema Linux
Il primo comando da dare è root, che imposta il disco fisso e la partizione in cui si trova la directory radice di GRUB. Trovate questa informazione nel file /etc/fstab. Se fosse /dev/hda3, dovremmo scrivere al prompt di GRUB :
root (hd0,2)
Premere invio per accettare il comando e poter inserire il prossimo comando. Attenzione che GRUB numera le partizioni partendo da 0, quindi il numero della partizione è 1 in meno rispetto al numero sotto Ubuntu.
Il secondo comando è kernel e indica il percorso del file contenente l'immagine del kernel e le varie opzioni da passare ad esso. Se l'immagine del kernel si trova in /boot/vmlinuz-2.6.20-15-generic, scriveremo nel prompt di grub come secondo comando:
kernel /boot/vmlinuz-2.6.20-15-generic root=/dev/hda1 ro locale=it_IT quiet splash
L'autocompletamento permette di scegliere il file corretto. Le opzioni più comuni sono:
root=: indica al kernel qual è la partizione contenente la directory root del sistema.
ro: accede inizialmente alle partizioni in sola lettura. È buona norma inserirlo sempre.
splash: chiede di mostrare a video una immagine durante il caricamento del sistema.
locale: indica la lingua da utilizzare.
Se il kernel che si vuole avviare usa l'initrd (di solito tutti i kernel ufficiali delle distro lo usano) bisogna caricare anche l'immagine del ramdisk. In questi casi, il terzo comando da dare sarà:
initrd /boot/initrd.img-2.6.20-15-generic
l'immagine si trova sempre nella stessa partizione/directory del suo kernel.
Immagine(Icone/Piccole/warning.png,,left) Un kernel creato con un'initrd associato, non può essere avviato senza di esso; se si tenta di usare immagini initrd di altri kernel, o di far partire senza initrd un kernel che necessita di esso, il sistema non partirà dando un Kernel Panic. BR BR
Per avviare il sistema, basta premere il tasto "b" se si sta editando una voce, oppure dare il comando boot se si sta usando la linea di comando di GRUB:
boot
Windows, BeOS, OpenBSD
Alcuni sistemi operativi hanno requisiti particolari, per esempio possono richiedere che la loro partizione sia contrassegnata come "attiva", o che sia una partizione primaria; oltretutto questi sistemi operativi hanno routine specifiche che si occupano dell'avvio, quindi con essi non funziona il comando "kernel" di Grub.
Fondamentalmente, tre sistemi operativi richiedono attenzioni particolari: Windows, BeOS e OpenBSD. Per avviare uno di questi sistemi operativi bisogna usare i seguenti comandi:
rootnoverify (hd1,0) makeactive chainloader +1 boot
rootnoverify specifica qual è la partizione di Windows (nel nostro caso la prima partizione del secondo disco è hd1,0, corrispondente in Linux a /dev/hdb1);BR makeactive rende la partizione attiva (condizione essenziale per Windows);BR chainloader istruisce sul fatto di leggere la prima traccia di tale partizione;BR boot fa partire il sistema.
FreeBSD
FreeBSD ha un sistema di organizzazione delle directory abbastanza particolare. Nell'esempio si assume che FreeBSD sia installato nella seconda partizione del secondo disco:
root (hd1,1,a) kernel /boot/loader
Per approfondire il sistema di partizionamento di FreeBSD consultare la BSD-FAQ-it.
Rendere permanenti le modifiche
Tutte le opzioni qui esposte vanno inserite nel file di configurazione di GRUB, identificato dal percorso /boot/grub/menu.lst e modificabile tramite un qualunque editor di testo, a patto che si abbiano i privilegi amministrativi. Per esempio, è possibile digitare in un terminale il comando:
sudo nano /boot/grub/menu.lst
Configurare il comportamento di GRUB
GRUB è in grado di avviare automaticamente un sistema operativo prescelto qualora entro un certo lasso di tempo non venga premuto alcun tasto sulla tastiera:
default 0 timeout 5
Nell'esempio, GRUB attende la pressione di un tasto per cinque secondi (timeout 5), dopodiché avvia il primo sistema operativo (default 0) incontrato nel suo file di configurazione (percorso dall'alto verso il basso). Modificare queste impostazioni secondo le proprie esigenze.
È possibile far comparire il menu d'avvio oppure nasconderlo alla vista, nel qual caso comparirà solo la scritta "Press 'ESC' to enter the menu..." e bisognerà appunto premere il tasto Esc per far comparire il menu:
hiddenmenu
per nascondere il menu, assicurarsi che non ci siano caratteri cancelletto "#" all'inizio della riga; per visualizzare il menu, è sufficiente aggiungere un carattere cancelletto a inizio riga.
Configurare le voci del menu d'avvio
Per ogni sistema operativo bisogna scrivere un blocco di comandi corrispondente. Il primo comando da inserire nel blocco è title, un nome a piacere che apparirà nel menu d'avvio per quel sistema; seguono i comandi già visti nella sezione [#avvio_interattivo avvio interattivo]. Per esempio:
title Prima Distribuzione root (hd0,0) kernel /boot/vmlinuz-2.6.20-15-generic root=/dev/hda1 ro locale=it_IT quiet splash initrd /boot/initrd.img-2.6.20-15-generic boot title Prima Distribuzione (con kernel ricompilato manualmente) root (hd0,0) kernel /boot/vmlinuz-2.6.20-mio-kernel root=/dev/hda1 ro vga=791 boot title Seconda distribuzione root (hd0,2) kernel /boot/vmlinuz-2.6.20-15-generic root=/dev/hda3 ro locale=it_IT quiet splash initrd /boot/initrd.img-2.6.20-15-generic boot title Windows XP rootnoverify (hd1,0) makeactive chainloader +1 boot
Seguendo questo schema si possono aggiungere voci a piacere, ma prima si consiglia di [#avvio_interattivo provare i comandi interattivamente] dal prompt di grub. Se in ogni blocco viene inserito, prima del comando boot, il comando savedefault e il comando default 0 viene modificato in default save, all'avvio GRUB (dopo il timeout) sceglierà il sistema scelto nel precedente avvio.
Impostare una password
GRUB permette di impostare una password per diversi scopi. Prima di tutto, occorre creare la password digitando in un terminale il comando grub-md5-crypt, il quale chiederà di inserire due volte la password (una è di conferma), e restituirà a video la password cifrata con algoritmo MD5. Copiare il risultato ottenuto, quindi aprire il file di configurazione di GRUB usando i privilegi amministrativi.
Anchor(proteggere_avvio_interattivo)
Proteggere l'accesso all'avvio interattivo
Per far sì che venga chiesta la password ogni qual volta si tenti di accedere all'avvio interattivo di GRUB (digitando il tasto "e"), è sufficiente inserire la seguente riga prima delle voci del menu:
password --md5 VostraPasswordCifrata
Per esempio:
password --md5 $1$DrTDy1$nPlz3ke5jkS6rX8M3/3zA.
Si potranno avviare liberamente i sistemi operativi corrispondenti alle voci già presenti, ma per modificare le opzioni di avvio verrà chiesta la password.
Proteggere l'avvio dei sistemi operativi
Se si vuole proteggere con una password l'avvio di un sistema operativo, aggiungere il comando password nel blocco della voce che si desidera proteggere, come nell'esempio:
title Prima Distribuzione root (hd0,2) kernel /vmlinuz-2.6.6s26-mio-kernel root=/dev/hda4 ro vga=791 initrd /initrd.img-2.6.6-s26-mio-kernel password --md5 VostraPasswordCifrata boot
È possibile scegliere una diversa password per ogni sistema operativo di cui si desidera proteggere l'avvio.
In alternativa, è possibile far sì che la stessa password che [#proteggere_avvio_interattivo protegge il menu interattivo] protegga anche l'avvio di sistemi operativi a scelta. È sufficiente inserire il comando lock nei blocchi relativi ai sistemi operativi che si desidera proteggere, come da esempio:
title Prima Distribuzione lock root (hd0,2) kernel /vmlinuz-2.6.6s26-mio-kernel root=/dev/hda4 ro vga=791 initrd /initrd.img-2.6.6-s26-mio-kernel boot
Usare update-grub
Quando installate un nuovo kernel (binario o ricompilato che sia) contenuto in un pacchetto debian, verrà eseguito lo script update-grub che cercherà nuovi kernel in /boot e li inserirà in menu.lst.
Questo script può anche essere eseguito a mano se si ricompila un kernel senza creare un pacchetto debian o se vuole ripristinare velocemente il menu.lst. Le voci per i vari kernel inserite da update-grub sono racchiuse tra la linea:
### BEGIN AUTOMAGIC KERNELS LIST
e la linea:
### END DEBIAN AUTOMAGIC KERNELS LIST
al di fuori di questo blocco potrete inserire tutte le vostre configurazioni che non volete siano modificate da update-grub (ad. kernel fissi, o qualsiasi altro comando grub).
Nel blocco "automagico" non vengono inseriti solo le voci dei vari kernel ma anche dei commenti che servono a personalizzare il comportamento di update-grub. Basterà modificare i commenti che cominciano con un solo # (quelli che cominciano con ## vengono ignorati anche da update-grub). Se ad esempio vogliamo che ogni nuovo kernel sia inserito solo una volta (senza la seconda voce recovery) e che venga sempre usato il framebuffer basta modificare le apposite righe di menu.lst nel seguente modo:
# kopt=root=/dev/hda9 ro vga=791 ... ... ... # alternative=false
ovviamente quella partizione (/dev/hda9) deve essere la root dei kernel che si vuole inserire automagicamente. Notare che non si deve decommentare la linea altrimenti update-grub lo ignorerà e verrà considerato un comando grub.
Riconoscimento modalità video
Una funzionalità forse poco nota, ma utile in certi casi è la capacità di grub di riconoscere al volo le modalità supportate in frame buffer dalla scheda video tramite il comando vbeprobe. È anche possibile testare una modalità video tramite il comando testvbe:
Grub mostrerà delle sfumature orizzontali multicolori che scorrono, alla risoluzione del modo scelto. Scelto un modo (ad esempio 0x103), potrà fare partire il sistema in quella modalità aggiungendo il parametro vga=numero alla linea del kernel, dove numero è il numero del modo più 200 esadecimale (indicato con 0x200). Questa operazione è molto semplice: basta aggiungere 2 alla prima cifra del modo, ad esempio se vogliamo il modo 0x103 dovremo passare al kernel vga=0x303.
Si può anche inserire la modalità video in decimale convertendo con una calcolatrice scientifica il numero passato al kernel: nell'esempio è equivalente scrivere vga=0x303 o vga=771.
Ricordo che per usare il frame buffer deve essere abilitato il supporto nel kernel. Tutti i kernel binari delle distribuzioni hanno questo supporto attivato, ma se vi ricompilate un vostro kernel dovrete ricordarvi di attivare il supporto frame buffer.
Installare GRUB su un floppy
Installare GRUB su un floppy permette di fare partire qualsiasi sistema anche con MBR (Master Boot Record - Il primo settore del disco fisso) corrotto. Per installare GRUB su di un floppy basta eseguire i seguenti comandi:
sudo mke2fs /dev/fd0 sudo mount -t ext2 /dev/fd0 /mnt sudo grub-install --root-directory=/mnt fd0 sudo umount /mnt
Ulteriori risorse
[:/Splashimage:Modificare lo sfondo del menu di Grub]
[http://www.gnu.org/software/grub/ Sito ufficiale del progetto]
[http://www.gnu.org/software/grub/manual/grub.html#Stage2-errors Guida agli errori di Grub]
[:Ufficio/EditorDiTesto/Nano:Guida all'editor di testo nano]