fedora-os.org

Appunti su Grub2

Premessa

Il bootloader è il primo software ad essere avviato quando un PC viene acceso. Esso è responsabile del boot dei kernel (come Linux) di sistemi operativi, il kernel a sua volta inizializza il resto del sistema (GNU system).

La versione Grub2 (aggiornamento di Grub), sebbene mantenga delle caratteristiche in comune con la versione precedente, presenta delle nuove feature:

- Il file di configurazione ha un nuovo nome (grub.cfg al posto di grub.conf) una nuova sintassi e molti nuovi comandi; la configurazione non può essere copiata direttamente.
- grub.cfg è generato automaticamente dal comando grub-mkconfig che rende più facile maneggiare gli upgrade del kernel
- Il numero delle partizioni ora inizia con 1, non più con 0
- Il file di configurazione è ora scritto con degli script: sono disponibili variabili, condizioni e loop.
- Grub2 ha modi migliori di cercare i propri file o kernel in sistemi multidisco, oltre a cercare filesystem attraverso etichette o UUID (Universally Unique Identifiers).
- Grub2 è compatibile con diversi tipi di sistemi aggiuntivi ai PC Bios: PC EFI, PC coreboot, PowerPC, SPARC, MIPS Lemote Yeeloong.
- Supportati più filesystem oltre a ext4, HFS+ e NTFS
- Grub2 può leggere file da LVM e dispositivi RAID
- Menu e terminale grafico
- Grub2 può essere tradotto
- I file immagine che compongono Grub sono stati riorganizzati

Sintassi

(f0)
Grub richiede che il nome del dispositivo debba assere chiuso tra ´ . fd indica un floppy disk; il numero 0 è il numero del drive partendo da 0. L’espressione indica che grub utilizzerà l’intero floppy.

(hd0,msdos2)
hd indica l’hard disk drive numerato con 0 come primo disco; la stringa msdos indica la seconda partizione numerata con l’intero 2. A differenza di Grub 0.97, le partizioni sono numerate a partire da 1.

(hd0,msdos5)
La stringa indica la prima partizione estesa del primo hardisk; da notare che le partizioni interne alle partizioni estese sono numerate a partire da 5.

(hd1,msdos1,bsd1)
La stringa indica la partizione ´a´ nel primo slice number del secondo hardisk.

Da notare che Grub NON distingue drive IDE da SCSI ma semplicemente li numera a partire da zero; normalmente qualsiasi numero identificatico di drive IDE è più piccolo del numero identificativo di un SCSI sebbene non sia così se si cambia la sequenza di boot dal BIOS.

(hd0,msdos1)/vmlinuz
La stringa specifica il file ´vmlinuz´ trovato nella prima partizione del primo hardisk

Installazione

grub-install è il comando utile per l’installzione (su floppy o su hardisk).
GRUB è fornito di immagini (grub images) contenute nella directory /usr/lib/grub/ chiamata image directory e una directory dove il bootloader deve trovarle (di solito /boot) chiamata boot directory.

BIOS Installation

MBR
Il formato tradizionale di partition table usato nei PC BIOS è chiamato formato MBR (Master Boot Record); esso ammette quattro partizioni primarie ed aggiuntive partizioni logiche. Con l’MBR ci sono due modi per installare GRUB: il bootloader può essere incorporato in un’area tra l’MBR e la prima partizione (che ha vari nomi tra cui “boot track”, “MBR gap” o “embedding area” con dimensioni solite di 31 KB) oppure può essere installato nel primo settore di una partizione.
In ogni modo ci potrebbero essere dei problemi. Non ci sono vie per preservare l’embedding area ed alcuni software proprietari lo usano per aumentare le difficoltà di aggirare le licenze, inoltre i sistemi sono qualche volta partizionano senza lasciare spazio sufficiente prima della prima partizione.

Il team di sviluppo di GRUB raccomanda generalmente l’embedding prima della prima partizione con l’accortezza di verificare che la prima partizione lasci liberi almeno 31 KB (63 settori) dall’inizio del disco; nei moderni drive, spesso un vantaggio è quello di allargare l’embedding area ad 1 MB sempre dall’inizio del disco.

GPT
Alcuni sistemi recenti usano il formato GUID Partition Table (GPT). E’ parte dell’Extensible Firmware Interface (EFI) ma può essere anche usato nelle piattaforme BIOS se il software di sistema lo supporta;
ad esempio Grub lo supporta.
Con questo formato è possibile preservare l’intera partizione per Grub chiamata BIOS Boot Partition senza il rischio di poter essere sovrascritto il bootloader da altri software.

Quando si crea una BIOS Boot Partition in un sistema GPT, bisogna assicurarsi che sia di almeno 31 KB, meglio se da 1 MB per avere disponibile maggior spazio. Usando GUN Parted è possibile settarla con il comando

# parted /dev/disk set partition-number bios_grub on

Installazione con grub-install
Il comando necessita di un argomento cioé dove installare il bootloader; può essere un dispositivo (nell’esempio nell’MBR del primo drive IDE)

# grub-install /dev/hda

Con l’esempio fatto GRUB memorizza le immagini nella directory /boot; in caso contrario la directory dev’essere indicata nel comando

# mke2fs /dev/fd0
# mount -t ext2 /dev/fd0 /mnt
# mkdir /mnt/boot
# grub-install --boot-directory=/mnt/boot /dev/fd0
# umount /mnt

map tra BIOS drive e OS

Il comando grub-mkdevicemap può essere usato per creare il file device map. Solitamente è avviato automaticamente dal grub-intall se il device map non esiste. Se, al contrario, già esiste, viene letto per mappare il drive BIOS ai SO (sistemi operativi).

Il device map file consiste in linee come la seguente

device file

Storicamente era usato perché il grub device name era indicato nel file di configurazione ed era derivato dal numero del BIOS drive. Il device map file potrebbe non essere scritto correttamente in alcuni casi, ad esempio quando si ha uno scambio della sequenza di boot tra drive IDE e SCSI nel BIOS. Versioni moderne dei kernel sondano i drive in ordine diverso da boot a boot ed i prefissi potrebbero cambiare in base ai driver in uso. Per questi motivi il device map file richiede frequenti modifiche in alcuni sistemi.
Grub evita tali problemi utilizzando gli UUID quando genera il grub.cfg.

Booting

Avviare un sistema operativo
Per avviare un sistema operativo Grub usa due metodi: il primo permette il boot diretto, il secondo è il chain-load cioé il passaggio ad un altro bootloader.

- Configurazione semplice. Il comando grub-mkconfig genera il file grub.cfg utile negli upgrade di sistema in quanto contiene le informazioni d’avvio dei sistemi operativi (direttamente avviabili da GRUB) installati. Per creare il file grub-cfg si usa il comando

# grub-mkconfig -o /boot/grub/grub.cfg

Il comando presenta comunque delle limitazioni: mentre l’aggiunta di “voci di avvio” può essere fatta editando il file /etc/grub.d/40_custom oppure creando /boot/grub/custom.cfg, cambiare il titolo o il loro ordine richiederebbe dei complessi cambiamenti degli script contenuti in /etc/grub.d/. Finché non sarà possibile farlo è consigliabile modificare manualmente il grub.cfg.

Il file /etc/default/grub controlla le operazioni del comando grub-mkconfig, contiene un elenco di linee nella forma “KEY=valore” (caratteri speciali e spazi devono essere racchiusi tra virgolette).
Ad esempio:

GRUB_TERMINAL_INPUT=”console serial”

Alcune chiavi valide:

‘GRUB_DEFAULT’

Determina il “default menu entry” quindi il sistema da avviare automaticamente all’accensione del PC identificato da un numero (si contano i menu a partire da zero) oppure dalla stringa (‘stringa’).

‘GRUB_SAVEDEFAULT’

Se settato come true, quando si seleziona una voce questa diventerà di default dal successivo boot (la chiave ‘GRUB_DEFAULT=‘ deve essere impostata come saved).

‘GRUB_TIMEOUT’
Determina i secondi che devono trascorrere mostrando il menu di Grub, prima di avviare il sistema di default.

‘GRUB_HIDDEN_TIMEOUT’

Determina i secondi che devono trascorrere senza mostrare il menu di Grub.

‘GRUB_HIDDEN_TIMEOUT_QUIET’

Determina la visualizzazione o meno del timeout countdown

‘GRUB_CMDLINE_LINUX’

Determina opzioni aggiuntive per la riga kernel nel menu

‘GRUB_CMDLINE_LINUX_DEFAULT’

A meno che ‘GRUB_DISABLE_RECOVERY’ non sia impostato come ‘true’, saranno generati due voci nel menu per ogni kernel Linux; il secondo dei quali per l’avvio in modalità recovery.

‘GRUB_DISABLE_LINUX_UUID’

Generalmente grub-mkconfig genera menu utilizzando gli UUID per identificare il filesystem root; questo metodo è consigliabile ma alcune volte è inappropriato, per disabilitarlo impostare questa opzione come ‘true’.

‘GRUB_VIDEO_BACKEND’

Se richiesto il supporto grafico, grub-mkconfig carica tutti i driver grafici disponibili usando quello più appropriato; se necessario impostarne uno specifico, si utilizza questa voce.
I driver video sono elencati nella directory /boot/grub/video.lst.

‘GRUB_GFXMODE’

Determina una risoluzione specifica se si usa gfxterm. Sono ammesse soo le risoluzioni supportate dalla scheda grafica attraverso le Vesa Bios Extensions (VBE).

‘GRUB_BACKGROUND’

Indica l’immagine di background per il gfxterm; il valore deve essere leggibile da Grub al boot ed sono riconosciuti file con estensione .png, .tga, .jpg o jpeg.

Esempio:

$ cat /etc/default/grub
# If you change this file, run ‘update-grub’ afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n ‘Simple configuration’

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”
GRUB_CMDLINE_LINUX=”"

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD …)
#GRUB_BADRAM=”0×01234567,0xfefefefe,0x89abcdef,0xefefefef”

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo’
#GRUB_GFXMODE=640×480

# Uncomment if you don’t want GRUB to pass “root=UUID=xxx” parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY=”true”

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE=”480 440 1″

- Chain-loading. Sistemi operativi che non supportano il multiboot, non hanno specifico supporto da Grub quindi devono essere avviati utilizzando il chain-loading (praticamente si affianca il bootloader di sistema a Grub).

Il comando chainloader può essere usato per settare la partizione root ottenendo un menu del genere ad esempio per un sistema Windows nella prima partizione del primo hardisk:

menuentry "Windows" {
insmod chain
insmod ntfs
set root=(hd0,1)
chainloader +1
}

In un PC multidisco, se si ha un sistema Windows installato in un slave hardisk (secondario), è necessario uno swapping (scambio) di dischi poiché questi sistemi (Windows) sono avviabili solo da disco principale (master hardisk).
Il comando drivemap imposta lo swapping dei drive con

# drivemap -s (hd0) (hd1) (imposta lo swap virtuale tra primo e secondo hardisk)

L’opzione -l fa una lista della mappatura corrente
L’opzione -r resetta ai valori iniziali

Attenzione perché la mappatura funziona solo se il DOS usa il BIOS per accedere all’hardisk.

Lascia un commento »

Non c'è ancora nessun commento.

RSS feed dei commenti a questo articolo. TrackBack URI

Lascia un Commento

Fill in your details below or click an icon to log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Log Out / Modifica )

Foto Twitter

You are commenting using your Twitter account. Log Out / Modifica )

Foto di Facebook

You are commenting using your Facebook account. Log Out / Modifica )

Connecting to %s

Tema: WordPress Classic. Blog su WordPress.com.

Iscriviti

Get every new post delivered to your Inbox.