GRUB
Da Linux@P2P Forum Italia.
All'inizio di ogni comando troverete uno di questi due simboli: $ (dollaro) e # (cancelletto). La presenza di $ indica che il comando può essere eseguito anche come normale utente, mentre il simbolo # indica che il comando che lo segue deve essere eseguito con privilegi di amministratore (root). Da utenti normali è possibile divenire root in questo modo: da terminale, si digiti:
$ su oppure, su Ubuntu e varianti: $ sudo su Verrà richiesta la password di amministratore (su Ubuntu e varianti quella dell'utente): per motivi di sicurezza e riservatezza non verrà mostrata durante la digitazione. A questo punto (si noti # al posto di $, segno che ora si è root) sarà possibile lanciare il comando: # comando NOTA: per Ubuntu e varianti, nel caso si necessiti di eseguire solo pochi comandi, esiste un'alternativa: basta far precedere il comando da eseguire da "sudo", in questo modo: $ sudo comando Per altre indicazioni sulle convenzioni della linea di comando vedere "introduzione all'uso della shell" | |
GRUB (GRand Unified Bootloader) è il più diffuso boot loader per GNU/Linux, per tale motivo è molto utile conoscerne alcune nozioni e apprendere come riparare certe situazioni spiacevoli.
Indice |
Le unità secondo GRUB
I dischi in GRUB, qualunque essi siano (IDE o SATA) vengono chiamati
hdX
Dove X è un numero crescente partendo da 0. I dischi vengono considerati in base all'ordine di Boot (anche detto Boot Sequence) dei drive impostato nel BIOS. In linea generale comunque è bene considerare, escludendo stravolgimenti a causa del Boot Sequence, che i dischi IDE vengono considerati prima dei SATA ed inoltre che i dischi sono numerati in base all'ordine in cui sono montati (il primario master sarà hd0, il primary slave sarà hd1, il secondary master sarà hd2, il secondary slave sarà hd3 e a seguire tutti i SATA) ovviamente se dovessero mancare i dischi IDE il primo disco SATA assumerebbe il nome hd0.
Nota: È importante far notare come l'ordine degli hard disk in GRUB potrebbe essere manipolato, oltre che con il Boot Sequence, principalmente anche con il file di configurazione:
/boot/grub/device.map
Che se presente, riporterà un contenuto del genere:
(fd0) /dev/fd0 (hd0) /dev/hda (hd1) /dev/hdb
Come è semplice notare, viene riportato per ogni riga l'identificativo dell'unità secondo la nomenclatura di GRUB ed a seguire l'identificato dell'unità secondo la normale nomenclatura delle unità sotto GNU/Linux. Se necessario è possibile creare (per poi modificare) questo file in questo modo:
# grub --device-map=/boot/grub/device.map
E subito dopo uscire dalla shell di GRUB con:
quit
Ogni disco, inoltre avrà varie partizioni che verrano chiamate
hdX,n
Dove n sta per un numero (partendo da 0) che indicherà il numero identificativo della partizione corrispondente (es. hda1 --> hd0,0 o hdb2 --> hd1,1), in base alle partizioni presenti sul disco.
Modificare la configurazione di GRUB
Per modificare le impostazioni di GRUB basta modificare il file:
/boot/grub/menu.lst
Per fare ciò, procediamo con:
- Se si usa GNOME
# gedit /boot/grub/menu.lst
- Se si usa KDE
# kate /boot/grub/menu.lst
- Se invece si vuole usare un editor testuale (consigliato) si può usare nano (per informazioni sull'utilizzo vedere Editare i files di testo con nano) o vi:
# nano /boot/grub/menu.lst
Ora vi apparirà un file simile al seguente, per semplificare nella leggibilità e comprensione del file abbiamo evidenziato le varie righe in base alla loro funzione:
- in rosso tutte le righe precedute da # che identificano i commenti (indicazioni testuali che non influiscono per il settaggio, al punto che potrebbero essere totalmente rimossi). E' importante notare come alcuni commenti sono stati aggiunti per aiutare nella comprensione del file di configurazione.
- in blu le voci del timeout e del sistema da avviare di default. Su queste due voci rimandiamo all'approfondimento successivo.
- in verde le varie voci riguardanti i sistemi operativi da avviare.
# I commenti in italiano sono stati inseriti dal Wiki Linux@P2pforum # menu.lst - See: grub(8), info grub, update-grub(8) # grub-install(8), grub-floppy(8), # grub-md5-crypt, /usr/share/doc/grub # and /usr/share/doc/grub-doc/. ## default num # Set the default entry to the entry number NUM. Numbering starts from 0, and # the entry number 0 is the default if the command is not used. # # You can specify 'saved' instead of a number. In this case, the default entry # is the entry saved with the command 'savedefault'. # WARNING: If you are using dmraid do not change this entry to 'saved' or your # array will desync and will not let you boot your system. # Inserite al posto dello 0 (o del valore presente) il sistema operativo che volete sia avviato di default, # vedere il successivo capitolo della guida per avere maggiori info. Non è fondamentale da modificare. default 0 ## timeout sec # Set a timeout, in SEC seconds, before automatically booting the default entry # (normally the first entry defined). # Trascorso il tempo indicato (qui 5 secondi), GRUB avvierà il sistema indicato nella voce default. timeout 5 # Pretty colours # I colori che GRUB userà per il menu e i font, non modificare se non si sa cosa si fa. color cyan/blue white/blue # Iniziano una serie di esempi esplicativi delle varie voci e opzioni possibili. ## password ['--md5'] passwd # If used in the first section of a menu file, disable all interactive editing # control (menu entry editor and command-line) and entries protected by the # command 'lock' # e.g. password topsecret # password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/ # password topsecret # # examples # # title Windows 95/98/NT/2000 # root (hd0,0) # makeactive # chainloader +1 # title Linux # root (hd0,1) # kernel /vmlinuz root=/dev/hda2 ro # # Put static boot stanzas before and/or after AUTOMAGIC KERNEL LIST ### BEGIN AUTOMAGIC KERNELS LIST ## lines between the AUTOMAGIC KERNELS LIST markers will be modified ## by the debian update-grub script except for the default options below ## DO NOT UNCOMMENT THEM, Just edit them to your needs ## ## Start Default Options ## ## default kernel options ## default kernel options for automagic boot options ## If you want special options for specific kernels use kopt_x_y_z ## where x.y.z is kernel version. Minor versions can be omitted. ## e.g. kopt=root=/dev/hda1 ro ## kopt_2_6_8=root=/dev/hdc1 ro ## kopt_2_6_8_2_686=root=/dev/hdc2 ro # kopt=root=/dev/sda7 ro ## default grub root device ## e.g. groot=(hd0,0) # groot=(hd0,6) ## should update-grub create alternative automagic boot options ## e.g. alternative=true ## alternative=false # alternative=true ## should update-grub lock alternative automagic boot options ## e.g. lockalternative=true ## lockalternative=false # lockalternative=false ## additional options to use with the default boot option, but not with the ## alternatives ## e.g. defoptions=vga=791 resume=/dev/hda5 # defoptions= ## should update-grub lock old automagic boot options ## e.g. lockold=false ## lockold=true # lockold=false ## Xen hypervisor options to use with the default Xen boot option # xenhopt= ## Xen Linux kernel options to use with the default Xen boot option # xenkopt=console=tty0 ## altoption boot targets option ## multiple altoptions lines are allowed ## e.g. altoptions=(extra menu suffix) extra boot options ## altoptions=(single-user) single # altoptions=(single-user mode) single ## controls how many kernels should be put into the menu.lst ## only counts the first occurence of a kernel, not the ## alternative kernel options ## e.g. howmany=all ## howmany=7 # howmany=all ## should update-grub create memtest86 boot option ## e.g. memtest86=true ## memtest86=false # memtest86=true ## should update-grub adjust the value of the default booted system ## can be true or false # updatedefaultentry=false ## ## End Default Options ## # Fine degli esempi # Qui inizia la parte di configurazione vera e propria # Primo sistema operativo # Il titolo che apparirà nel menù di scelta sistema operativo di GRUB title Debian GNU/Linux, kernel 2.6.21-2-686 # In questa voce è indicata la partizione (secondo la nomenclatura di GRUB) in cui # si trova la / (radice o root) di sistema root (hd0,6) # Nella successiva voce viene indicato: # - il percorso/posizione dell'immagine del kernel (solitamente situata in /boot), # - la root o radice di sistema (secondo la normale nomenclatura dei device) # - eventuali opzioni da passare al kernel (nel nostro caso "ro") # kernel /boot/vmlinuz-2.6.21-2-686 root=/dev/sda7 ro # il percorso/posizione dell'initrd # initrd /boot/initrd.img-2.6.21-2-686 # Comando di grub, lasciare immutato savedefault # Secondo sistema operativo # il titolo che apparirà nel menù di scelta sistema operativo di GRUB title Ubuntu, kernel 2.6.20-16-generic # In questa voce è indicata la partizione (secondo la nomenclatura di GRUB) in cui # si trova la / (radice o root) di sistema root (hd0,8) # Nella successiva voce viene indicato: # - il percorso/posizione dell'immagine del kernel (solitamente situata in /boot), # - la root o radice di sistema (secondo la normale nomenclatura dei device) # - eventuali opzioni da passare al kernel (nel nostro caso "ro quiet splash") # kernel /boot/vmlinuz-2.6.20-16-generic root=UUID=47557867-9948-45d1-aa94-883eec5c9151 ro quiet splash # il percorso/posizione dell'initrd # initrd /boot/initrd.img-2.6.20-16-generic # Due comandi di GRUB, lasciare immutato quiet savedefault ### END DEBIAN AUTOMAGIC KERNELS LIST # This is a divider, added to separate the menu items below from the Debian # ones. # Questo è una semplice voce "vuota", usata come semplice separatore # Titolo del separatore: title Other operating systems: root # This entry automatically added by the Debian installer for a non-linux OS # on /dev/sda1 # Voce "tipica" per un sistema Microsoft Windows: # il titolo che apparirà nel menù di scelta sistema operativo di GRUB title Microsoft Windows XP Home Edition # In questa voce è indicata la partizione (secondo la nomenclatura di GRUB) in cui # si trova la partizione di sistema root (hd0,0) # Tre comandi di grub da lasciare immutati savedefault makeactive chainloader +1 # Fine file
Nota: Il file menu.lst postato è solo un esempio, pertanto probabilmente necessita di modifiche per funzionare secondo le vostre esigenze. Inoltre i commenti sono stati modificati al fine di rendere più comprensibile il tutto.
Scegliere il sistema da avviare e mutare il timeout
Vediamo come modificare i valori default e timeout
Default
Basta modificare la voce:
default 0
Dove al posto di 0 (o il valore presente) va messo il numero della voce del sistema operativo che ci interessa, iniziando a contare da 0. Quindi se il sistema operativo che ci interessa all'avvio è la quarta voce, mettiamo
default 3
Timeout
Per aumentare il tempo di attesa per l'avvio del sistema operativo scelto per default, basta modificare la voce:
timeout 5
Scegliendo un valore (a partire da 0) rappresentante i secondi di attesa. Quindi se desideriamo aumentare l'attesa fino a 30 secondi, impostare:
timeout 30
Ecco un esempio delle due voci:
Installare GRUB su floppy
In molti casi (ad esempio a seguito di un re-installazione di Microsoft Windows) è utile aver a disposizione un floppy con GRUB configurato e funzionante per bootare i nostri sistemi, vediamo come crearcelo.
Attenzione: tutti i dati eventualmente presenti sul floppy saranno cancellati.
Assumiamo che l'unità floppy sia /dev/fd0 ed il mount point /media/floppy la procedura è la seguente.
Se il floppy non è vuoto o non è stato formattato, sarà necessario formattarlo con il filesystem VFAT o ext2 (è indifferente il fs):
# mkfs.ext2 /dev/fd0
oppure
# mkfs.vfat /dev/fd0
Montiamo il floppy (se non viene montato automaticamente):
# mkdir /media/floppy
# mount /dev/fd0 /media/floppy
e copiamo la directory /boot/grub nel floppy:
# cp -R /boot/grub /media/floppy/grub
Nota: Nel caso in cui stessimo operando attraverso una distro live è necessario procedere nel seguente modo per poter copiare la giusta directory:
/boot/grub
Montiamo la partizione contenente /boot (tipicamente coincidente con la partizione di sistema):
# mkdir /mnt/gnu
# mount /dev/sda2 /mnt/gnu
Dove /dev/sda2 è nostra partizione contenente /boot (personalizzare secondo la propria configurazione) e procedere alla copia con:
# cp -R /mnt/gnu/boot/grub /media/floppy/grub
Attendere circa 1 minuto poi smontare il floppy e lasciarlo inserito:
# umount /media/floppy
Avviare la GRUB Shell così:
# grub
Adesso dare i seguenti comandi in sequenza al prompt di grub:
root (fd0) setup (fd0) quit
Adesso avete un floppy dove c'è l'attuale versione di grub installata utile per bootare i nostri sistemi operativi (esempio a seguito della reinstallazione di Windows). E' importanate notare che se aggiorneremo il kernel e/o initrd dei nostri sistemi operativi, andrà aggiornato il filedi configurazione di GRUB:
/media/floppy/grub/menu.lst
Metodo alternativo per Suse/OpenSuse
Per coloro che non hanno molta dimestichezza con la console di GNU/Linux, è possibile ottenere un floppy con il bootloader operando nel centro di controllo (e quindi in un ambiente a finestre più user-friendly).
La seguente procedura si riferisce alla distribuzione SuSE 10.1. Chi avesse altre versioni dovrà aspettarsi qualche piccola incongruenza.
Ecco la procedura:
- Aprire YAST (Menu avvio > Sistema > YAST centro di controllo)
- Nell'elenco a sinistra scegliere "Sistema"
- Tra le applicazioni a destra cliccare su "Configurazione Bootloader"
- Nella sezione "Installazione bootloader" scegliere come ubicazione bootloader "Dischetto" e cliccare Fine
- Inserite un floppy formattato* quando richiesto e cliccate OK
Se il dischetto non è formattato potete formattarlo al momento con i comandi a disposizione.
Il bootloader è stato ora copiato sul dischetto, con cui sarà possibile avviare il computer anche dopo un'eventuale installazione di Windows.
Nota: una volta copiato il bootloader su dischetto l'originale resta comunque scritto nel MBR (Master Boot Record). Per riposizionarvelo dopo aver installato windows sarà necessario riprendere la procedura sopra descritta, scegliendo al punto 4 l'ubicazione "Master Boot Record".
Installare GRUB su memoria USB
Questa parte di questa voce è una libera traduzione della guida presente nel Wiki di Damn Small Linux
NOTA: questa procedura potrebbe non funzionare su alcune memorie flash.
I moderni PC prevedono nel BIOS l'opzione di boot da USB. In questi casi potrete preparare una chiavetta per avviare una installazione normalmente inaccessibile sull'hard disk o una installazione minimale dalla chiavetta stessa.
E' importante notare come la chiavetta può essere formattata con qualsiasi filesystem (esempio vfat, ext3 etc.). Montiamo la chiavetta (se non viene montata automaticamente dal sistema):
# mkdir /media/usb_pen
# mount /dev/sda1 /media/usb_pen
Dove a /dev/sda1 andrà sostituita, in base alla nostra configurazione hardware, la corretta partizione secondo la normale nomenclatura delle unità sotto GNU/Linux. Infine accediamo alla cartella dove abbiamo montato la chiavetta:
# cd /media/usb_pen
A questo punto esistono due metodi, il primo dei quali ha creato problemi ad alcuni.
Installazione
Metodo 1
# grub-install --no-floppy --root-directory=. /dev/sda1
Dove a /dev/sda1 andrà sostituita, in base alla nostra configurazione hardware, la corretta partizione secondo la normale nomenclatura delle unità sotto GNU/Linux.
Metodo 2
Il secondo metodo è più elaborato, ma non per questo più complesso.
ATTENZIONE: assumiamo che si stia lavorando da un sistema con GRUB preinstallato.
# mkdir /media/usb_pen/boot
# cp -R /boot/grub /tmp/usb/boot/
Infine diamo:
# grub
Adesso dare i seguenti comandi in sequenza al prompt di GRUB:
root (hd1,0) setup (hd1) quit
Ovviamente a hd1,0 e hd1 andranno sostuiti valori, in base alla nostra configurazione hardware (e le impostazioni di boot sequence nel BIOS), secondo la nomeclatura di GRUB.
Configurazione
A questo punto possiamo creare (o editare) il file menu.lst per poter configurare GRUB (per informazioni sull'utilizzo di nano vedere Editare i files di testo con nano):
# nano /media/usb_pen/boot/grub/menu.lst
Inserendo una voce del genere (se necessario per il nostro scopo):
title Linux root (hd1,0) kernel /boot/vmlinuz root=/dev/sda1 ro initrd /boot/linux.img boot
Personalizzando i vari valori in base alle proprio esigenze.
NOTA: eseguendo il boot dalla memoria flash questa apparirà a GRUB come primo disco, quindi il disco fisso del computer diventerà hd1.
Voci correlate
Collegamenti esterni
- GRUB su Wikipedia
- GRUB sul wiki di ubuntu-it.org
- Convenzioni sul modo in cui GRUB nomina i dischi (in Inglese)
- Manuale ufficiale di GNU GRUB (in Inglese)
- Processo di boot su Wikipedia
- Boot loader su Wikipedia

