2.1.6 GRUB

Nato nel 1995 da un’idea di E. Boleyn, GNU GRUB11 (GRand Unified Bootloader) è 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 di memoria di massa 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 si desidera utilizzare GRUB come boot loader del sistema, è necessario innanzi tutto installare sul sistema il relativo pacchetto contenente appunto i file necessari alla configurazione ed installazione di GRUB come boot loader, che generalmente copia i file nella directory /usr/share/grub/i386-pc (detta anche image directory).

Quindi è opportuno creare la directory /boot/grub (detta boot directory) e copiare al suo interno i file opportuni (*stage1_5, stage2, device.map, e menu.lst). Dopodiché 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

_________________________________________________________________________________________________________

Sebbene nella maggior parte dei casi funzioni, l’utilizzo del comando grub-install è sconsigliato, poiché esso si basa sulla mappatura tra i dispositivi del BIOS ed i dischi visti dal sistema operativo e non sempre le cose coincidono. Per far ciò grub-install si basa sul contenuto del file /boot/grub/device.map, che è un file di testo con la seguente sintassi

 
device file  
dove

Tale file viene creato automaticamente da GRUB (qualora non esista) e potrebbe contenere delle corrispodenze errate, poiché dal BIOS potrebbe essere stato scambiato l’ordine di avvio dei disci tra gli SCSI e gli ATA (IDE). In tal caso il file può essere modificato manualmente per far funzionare correttamente l’intsallazione del MBP di GRUB.

____________________________________________________________________

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.

Per installare il MBP di GRUB nel MBR è opportuno impostare come dispositivo di root, la partizione contenente la boot directory, cioè la directory /boot/grub (quella che contiene il file stage1 con il comando

 
grub> root (hd0,1)  
In questo caso la directory /boot/grub è contenuta nella seconda partizione (1) del primo disco (hd0).

per trovare la partizione relativa si può anche utilizzare il comando find interno a grub

 
grub> find /boot/grub/stage1  
che ricercherà appunto il file /boot/grub/stage1 e visualizzerà le indicazioni relative alla partizione che lo contiene.

A questo punto si può installare il MBP di GRUB nel MBR del primo hard disk con il comando

 
grub> setup (hd0)  
che inserice il MBP contenuto nel file stage1 all’interno della partizione impostata con il comando root.

Se, invece, lo si volesse installare nel settore di boot della prima partizione del primo hard disk, si potrebbe utilizzare il comando

 
grub> setup (hd0,0)  
Se si installa il MBP di GRUB in una partizione (anziché nel MBR) o in un disco diverso dal primo, esso dovrà essere avviato da un altro boot loader tramite il meccanismo di chain-loading.

È inoltre possibile installare GRUB come boot loader su un floppy disk. 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 link13). 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 interno 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.

Al momento della visualizzazione del menù di avvio (fig. 2.4) è comunque possibile Tali operazioni sono comunque subordinate alla conoscenza dell’eventuale password con il quale è stato protetto il file di configurazione.