2.1.6 GRUB
GNU GRUB
(GRand Unified Boot loader) è il boot loader utilizzato nelle recenti distribuzioni di
GNU/Linux. Le sue caratteristiche principali sono le seguenti
-
• supporto nativo per il boot di sitemi operativi aderenti alle specifiche Multiboot
(GNU/Linux, FreeBSD, NetBSD, OpenBSD, ...);
-
• supporto per il boot in chain-loading di sistemi operativi non-Multiboot (DOS,
Windows, OS/2, ...);
-
• supporto di vari tipi di filesystem;
-
• gestione dell’avvio del sistema operativo desiderato attraverso un’interfaccia utente
a menù;
-
• supporto per la modalità LBA: accesso a dischi con capacità superiore a 8 GiB;
-
• elevata configurabilità;
-
• possibilità di avvio via rete;
-
• protezione dei file di configurazione con password;
All’avvio, GRUB visualizza un elenco dei possibili sistemi operativi avviabili
(v. fig. 2.4).
Le possibilità di avvio di un sistema operativo da parte di GRUB sono due: in maniera
diretta o per mezzo del chain-load. I sistemi operativi che aderiscono alle specifiche Multiboot
(come Linux, FreeBSD, NetBSD e OpenBSD) possono essere caricati direttamente da GRUB,
mentre gli altri sistemi operativi possono essere caricati soltanto tramite il meccanismo di
chain-loading, ovvero GRUB demanda al boot loader del sistema specifico il suo
avvio.
2.1.6.1 Stadi di avvio
GRUB è costituito da vari stadi (stage) di avvio, ognuno dei quali è rappresentato
da un file: due stage essenziali (file stage1 e stage2) e degli stage opzionali (file
*stage1_5).
-
stage1 Questo è un file essenziale per poter effettuare il boot con GRUB.
Tipicamente si trova nel MBR o nel boot sector di una partizione. Poiché un
boot sector è grande 512 byte, la dimensione di tale file è esattamente 512
byte. Tutto ciò che fa stage1 è di caricare il file stage2 o lo specifico file
*stage1_5 dal disco (stage1 non gestisce nessun tipo di filesystem).
-
stage2 Questo è il nucleo di GRUB. Generalmente risiede su un filesystem, ma ciò
non è necessario.
-
*stage1_5
Questa famiglia di file ha lo scopo di collegare il file stage1 al file stage2.
Cioè *stage1_5 è caricato da stage1 e, a sua volta, carica stage2. Lo
specifico *stage1_5 rende GRUB capace di gestire un determinato filesystem.
In questo modo, si può spostare il file stage2 in una posizione diversa sul
filesystem senza dover necessariamente reinstallare GRUB.
2.1.6.2 Identificatori dei dispositivi
Il modo in cui un dispositivo viene identificato da GRUB (nel suo linguaggio di scripting,
ovvero nelle direttive contenute nell’apposito file di configurazione - v. più avanti) è illustrato
di seguito. Per prima cosa ogni identificatore di dispositivo deve essere racchiuso tra parentesi
tonde ed ha il seguente formato:
(device[,partition])
dove
-
device è il dispositivo e può assumere i seguenti valori:
-
hd0 il primo hard disk;
-
hd1 il secondo hard disk;
-
fd0 il primo floppy disk;
-
. . .
GRUB non fa differenza tra dispositivi ATA (IDE) e SCSI.
Generalmente i valori numerici che identificano i dischi ATA sono minori di
quelli dei dischi SCSI presenti sulla stessa macchina.
|
-
partition
è un numero che identifica la partizione di un determinato disco. Tale valore inizia da
0 ed assume i seguenti significati:
-
0 la prima partizione del disco;
-
1 la seconda partizione del disco;
-
2 la terza partizione del disco;
-
. . .
Quindi, ad esempio, il file vmlinuz che si trova nella directory /boot presente nella
seconda partizione del primo hard disk potrà essere specificato come (hd0,1)/boot/vmlinuz.
2.1.6.3 Installazione
Se GRUB non è già utilizzato sul sistema e si desidera utilizzarlo come boot loader, è
necessario seguire i passi sotto riportati.
Innanzi tutto è opportuno creare una directory grub nella directory /boot, e copiare al
suo interno i file opportuni (*stage1_5, stage2, device.map, e menu.lst). Quindi non
rimane altro che copiare il file stage1 nel MBR o nel settore di boot di una partizione
dell’hard disk. Tutto ciò può essere fatto per mezzo del comando grub-install (man page
grub-install(8)) o tramite l’interfaccia a riga di comando di GRUB, lanciabile con il
comando grub (man page grub(8)).
____________________________________________________________________
Comando: grub-install
Path: /sbin/grub-install
SINTASSI
# grub-install [option] device
DESCRIZIONE
-
option indica la modalità di funzionamento di grub-install. Può assumere i
seguenti valori:
-
-h | --help
visualizza un aiuto sommario di grub-install;
-
-v | --version
visulizza la verione di grub-install;
-
--root-directory=dir
indica di installare i filenecessari a GRUB nella directory dir (per
default i file vengono installati in ‘/’);
-
--grub-shell=file
indica quale è il file eseguibile che deve fungere da shell per GRUB;
-
--force-lba
indica di utilizzare la modalità LBA anche se il BIOS sembra non
supportarla;
-
--recheck
indica di eseguire un controllo dei dischi per ricreare il file
device.map;
-
device specifica il dispositivo nel quale installare il boot loader GRUB (può essere
specificato un file di dispositivo oppure un disco, o partizione, nella sintassi di
GRUB);
_________________________________________________________
___________________________________________________________________________________________________________
Comando: grub
Path: /sbin/grub
SINTASSI
# grub [option]
DESCRIZIONE
-
option indica la modalità di funzionamento di grub. Può assumere i seguenti valori:
- --batch
attiva la modalità non interattiva (batch). Analogo a
--no-config-file --no-curses;
-
--boot-drive=drive
specifica il disco di boot per stage2 come indicato da drive (per
default è 0);
-
--config-file=file
specifica il file di configurazione per stage2 come indicato da file (per
default è /boot/grub/menu.lst);
-
--device-map=file
indica di utilizzare il file che contiene l’elenco dei dispositivi indicato
da file;
-
--help visualizza un aiuto sommario di grub;
-
--hold attende finché un debugger non si è agganciato;
- --install-partition=par
specifica la partizione di installazione di stage2 come indicato da par
(per default è 0x20000);
-
--no-config-file
indica di non utilizzare nessun file di configurazione;
-
--no-curses
indica di non utilizzare interfacce di tipo curse;
-
--no-floppy
indica di non eseguire il test per i lettori di dischetti;
-
--no-pager
indica di non utiizzare un pager (visualizzatore di testo) predefinito;
-
--preset-menu
indica di utilizzare il menù preimpostato;
-
--probe-second-floppy
indica di eseguire il test per il secondo lettore di dischetti;
-
--read-only
indica di non scrivere niente sui dispositivi;
-
--verbose
visualizza messaggi informativi;
-
--version
visualizza la versione di grub;
____________________________________________________________________
Questa è una sorta di shell, con un insieme di comandi e direttive che rendono più agevole
la gestione dell’avvio. L’elenco dei comandi/direttive è ottenibile attraverso il comando
help.
È opportuno impostare come root directory di avvio la directory /boot (quella che contiene il file con il
kernel di GNU/Linux)
con il comando
grub> root (hd0,1)
In questo caso la directory /boot è la seconda partizione (1) del primo disco (hd0). Se essa
si trova all’interno della partizione del filesystem principale (/), contenuto nella prima
partizione (0) del primo disco (hd0), l’impostazione della root directory di avvio sarebbe
espressa da
grub> root (hd0,0)/boot
A questo punto si può installare GRUB nel MBR del primo hard disk con il
comando
grub> setup (hd0)
Se si vuole, invece, installare GRUB nel settore di boot della prima partizione del primo
hard disk, si può utilizzare il comando
grub> setup (hd0,0)
Se si desidera installare GRUB in una partizione o un disco diverso dal primo, per
poterlo far funzionare, si deve far lanciare GRUB tramite chain-load da un altro boot
loader.
Si può anche installare GRUB su un dischetto di avvio. Per far ciò si devono copiare i file
stage1 e stage2 rispettivamente sul primo e secondo settore del floppy.
Attenzione: questa procedura cancellerà qualsiasi dato memorizzato
precedentemente sul dischetto.
|
I comandi da lanciare sono i seguenti:
# cd /usr/share/grub/i386-pc
# dd if=stage1 of=/dev/fd0 bs=512 count=1
1+0 records in
1+0 records out
# dd if=stage2 of=/dev/fd0 bs=512 seek=1
153+1 records in
153+1 records out
2.1.6.4 Configurazione
Il file di configurazione di GRUB è /boot/grub/menu.lst (talvolta esso può essere soltanto un symbolic
link).
Tale file contiene le direttive per la presentazione a video dell’elenco dei possibili
sistemi operativi da avviare in fase di boot e quelle per il loro effettivo avvio e viene
intepretato da GRUB al suo avvio. Un tipico file di configurazione è quello riportato di
seguito:
#
# Sample boot menu configuration file
#
# By default, boot the first entry.
default 0
# Boot automatically after 10 secs.
timeout 10
# For booting GNU/Linux
title GNU/Linux
kernel (hd0,1)/vmlinuz root=/dev/hda1
# For booting Windows
title Windows boot menu
root (hd0,0)
makeactive
chainloader +1
Segue una breve spiegazione delle direttive contenute nell’esempio.
-
default 0
indica a GRUB la scelta di default, in questo caso la prima voce del menù (le
voci del menù di avvio sono quelle contraddistinte dalla parola chiave title),
poiché il conteggio inizia da zero;
-
timeout 10
indica a GRUB di avviare automaticamente la macchina con la scelta di default
se non è stato premuto nessun tasto entro 10 secondi;
-
title GNU/Linux
definisce una voce di menù contenente il testo “GNU/Linux”;
-
kernel (hd0,1)/vmlinuz root=/dev/hda1
indica a GRUB di lanciare il file /vmlinuz, il kernel di GNU/Linux, che (in
questo caso) si trova nella directory principale della seconda partizione del
primo hard disk ATA, passandogli il parametro root=/dev/hda1 che indica di
“montare” come root directory del sistema, quella relativa alla prima partizione
del primo disco ATA;
-
title Windows boot menu
definisce una voce di menù contenente il testo “Windows boot menu”;
-
root (hd0,0)
indica a GRUB di impostare come partizione di avvio la prima partizione del
primo hard disk;
-
makeactive
indica a GRUB di rendere attiva l’impostazione della partizione di avvio;
-
chainloader +1
indica a GRUB di caricare il boot loader presente sul primo settore della prima
partizione del primo hard disk (+1).
Per poter avviare il DOS o Windows, che sia installato su un hard disk diverso
dal primo, è necessario utilizzare la tecnica del disk swapping, poiché tali sistemi
operativi possono essere caricati soltanto dal primo hard disk. GRUB mette a
disposizione il comando map che può essere usato per scambiare virtualmente gli
hard disk con le istruzioni seguenti
map (hd0) (hd1)
map (hd1) (hd0)
potendo così ovviare al problema.
|