2.1.6 GRUB

GNU GRUB11 (GRand Unified Boot loader) è il boot loader utilizzato nelle recenti distribuzioni di GNU/Linux. Le sue caratteristiche principali sono le seguenti


pict
Figura 2.4: Esempio del menù di avvio di GRUB.

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_512).

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

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

_________________________________________________________

___________________________________________________________________________________________________________

Comando: grub
Path: /sbin/grub

SINTASSI  
# grub [option]  
DESCRIZIONE

____________________________________________________________________

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)13 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 link14). 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.

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.