102.2 Lezione 1
Certificazione: |
LPIC-1 |
---|---|
Versione: |
5.0 |
Argomento: |
102 L’Installazione di Linux e la Gestione Pacchetti |
Obiettivo: |
102.2 Installare un Boot Manager |
Lezione: |
1 di 1 |
Introduzione
Quando un computer è avviato, il primo software da eseguire è il boot loader. Questo è un "pezzo" di codice il cui unico scopo è caricare un kernel e consegnargli il controllo. Il kernel caricherà i driver necessari, inizializzerà l’hardware e quindi caricherà il resto del sistema operativo.
GRUB è il boot loader utilizzato sulla maggior parte delle distribuzioni Linux. Può caricare il kernel Linux o altri sistemi operativi, come Windows, e può gestire più immagini e parametri del kernel attraverso voci di menu separate. La selezione del kernel all’avvio viene eseguita tramite un’interfaccia basata su tastiera e esiste un’interfaccia da riga di comando per la modifica delle opzioni e dei parametri di avvio.
La maggior parte delle distribuzioni Linux installa e configura GRUB (in realtà, GRUB 2) automaticamente, quindi un normale utente non deve preoccuparsene. Tuttavia, come amministratore di sistema, è fondamentale sapere come controllare il processo di avvio in modo da poter ripristinare il sistema dopo, per esempio, un aggiornamento del kernel non riuscito che impedisce la corretta partenza dello stesso.
In questa lezione imparerai a installare, configurare e interagire con GRUB.
GRUB Legacy e GRUB 2
La versione originale di GRUB (Grand Unified Bootloader), ora nota come GRUB Legacy, è stata sviluppata nel 1995 come parte del progetto GNU Hurd, e in seguito è stata adottata come boot loader di avvio predefinito di molte distribuzioni Linux, sostituendo precedenti alternative come per esempio LILO.
GRUB 2 è una riscrittura completa di GRUB che mira a essere più pulita, più sicura, più robusta e più potente. Tra i numerosi vantaggi rispetto a GRUB Legacy vi sono un file di configurazione molto più flessibile (con molti più comandi e istruzioni condizionali, simili a un linguaggio di scripting), un design più modulare e una migliore localizzazione/internazionalizzazione.
C’è anche il supporto per temi e menu di avvio grafici, la possibilità di avviare LiveCD ISO direttamente dal disco rigido, un supporto migliore per architetture non x86, supporto universale per UUID (che semplifica l’identificazione di dischi e partizioni) e molto di più.
GRUB Legacy non è più in fase di sviluppo attivo (l’ultima versione è la 0.97 del 2005), e oggi la maggior parte delle principali distribuzioni Linux installa GRUB 2 come boot loader predefinito. Tuttavia, potresti comunque trovare sistemi che utilizzano GRUB Legacy, quindi è importante sapere come usarlo e conoscere le differenze rispetto a GRUB 2.
Dove è il Bootloader?
Storicamente, i dischi rigidi su sistemi compatibili PC IBM sono stati partizionati utilizzando lo schema MBR, creato nel 1982 per IBM PC-DOS (MS-DOS) 2.0.
In questo schema, il primo settore (512 byte) è chiamato Master Boot Record e contiene una tabella che descrive le partizioni sul disco (la tabella delle partizioni) e anche il codice bootstrap, chiamato bootloader.
All’accensione del computer, questo codice minimale di bootloader (a causa delle restrizioni di dimensione) viene caricato, eseguito e passa il controllo a un boot loader secondario su disco, solitamente situato in uno spazio di 32 KB tra l’MBR e la prima partizione, che caricherà a turno i sistemi operativi.
Su un disco con partizionamento MBR, il codice di avvio per GRUB è installato sull’MBR. Questo carica e passa il controllo a un’immagine “core” installata tra l’MBR e la prima partizione. Da questo punto, GRUB è in grado di caricare il resto delle risorse necessarie (menu di scelta, file di configurazione e moduli extra) dal disco.
Tuttavia, MBR presenta limitazioni sul numero di partizioni (originariamente un massimo di 4 partizioni primarie, successivamente un massimo di 3 partizioni primarie e 1 partizione estesa suddivisa in un numero di partizioni logiche) e dimensioni massime del disco di 2 TB. Per superare queste limitazioni è stato creato un nuovo schema di partizionamento chiamato GPT (GUID Partition Table), parte dello standard UEFI (Unified Extensible Firmware Interface).
I dischi con partizionamento GPT possono essere utilizzati con computer con il firmware BIOS tradizionale o con firmware UEFI. Su macchine con BIOS, la seconda parte di GRUB è memorizzata in una partizione speciale di avvio del BIOS.
Sui sistemi con firmware UEFI, GRUB viene caricato dal firmware dai file grubia32.efi
(per sistemi a 32 bit) o` grubx64.efi` (per sistemi a 64 bit) da una partizione chiamata ESP (EFI System Partition ).
La Partizione /boot
Su Linux i file necessari per il processo di avvio sono generalmente memorizzati su una partizione avviabile, montati all’interno del file system di root in /boot
.
Una partizione di avvio specifica non è necessaria sui sistemi attuali, in quanto i boot loader come GRUB possono in genere montare il file system di root e cercare i file necessari all’interno di una directory /boot
, ma rimane in ogni caso una buona pratica in quanto separa i file necessari per il processo di avvio dal resto del filesystem.
La partizione di avvio è in genere la prima partizione sul disco. Questo perché il BIOS dei PC IBM originali indirizzava i dischi utilizzando cilindri(cylinder), testine(head) e settori(sectors) (CHS), con un massimo di 1024 cilindri, 256 testine e 63 settori, con una dimensione massima del disco di 528 MB (504 MB in MS-DOS) . Ciò significa che qualsiasi cosa oltre questo spazio non sarebbe accessibile sui sistemi legacy, a meno che non fosse utilizzato un diverso schema di indirizzamento del disco (come il Logical Block Addressing, LBA)..
Quindi, per la massima compatibilità, la partizione di avvio si trova di solito all’inizio del disco e termina prima del cilindro 1024 (528 MB), assicurando che la macchina sarà sempre in grado di caricare il kernel. Le dimensioni consigliate per questa partizione, su una macchina attuale, sono di 300 MB circa.
Altri motivi per una partizione /boot
separata sono la crittografia e la compressione poiché alcuni metodi potrebbero non essere ancora supportati da GRUB 2 o se è necessario formattare la partizione root di sistema (/
) usando un file system non supportato.
Contenuto della Partizione di Boot
Il contenuto della partizione /boot
può variare a seconda dell’architettura del sistema o del boot loader in uso, ma su un sistema basato su x86 di solito troverai i file qui all’interno. Molti di questi sono chiamati con il suffisso -VERSION
, dove -VERSION
è la versione del corrispondente kernel Linux. Quindi, per esempio, un file di configurazione per la versione del kernel Linux 4.15.0-65-generic
sarebbe chiamato config-4.15.0-65-generic
.
- Config file
-
Questo file, solitamente chiamato
config-VERSION
(vedi esempio sopra), memorizza i parametri di configurazione per il kernel Linux. Questo file viene generato automaticamente quando viene compilato o installato un nuovo kernel e non deve essere modificato direttamente dall’utente. - System map
-
Questo file è una tabella che abbina i symbol names (come variabili o funzioni) alla posizione corrispondente nella memoria. Ciò è utile quando si esegue il debug di un tipo di errore di sistema noto come kernel panic, in quanto consente all’utente di sapere quale variabile o funzione veniva chiamata quando si è verificato l’errore. Come per il config file, il nome è di solito
System.map-VERSION
(per esempioSystem.map-4.15.0-65-generic
). - Linux kernel
-
Questo è il kernel del sistema operativo corretto. Il nome è di solito
vmlinux-VERSION
(per esempiovmlinux-4.15.0-65-generic
). Si può anche trovare il nomevmlinuz
invece divmlinux
, laz
alla fine significa che il file è stato compresso. - Initial RAM disk
-
Questo di solito si chiama
initrd.img-VERSION
e contiene un file system root minimale caricato in un disco RAM, contenente utility e moduli del kernel necessari affinché il kernel possa montare il vero filesystem root. - Boot loader related files
-
Sui sistemi con GRUB installato, questi si trovano di solito in
/boot /grub
e includono il file di configurazione di GRUB (/boot/grub/grub.cfg
per GRUB 2 o/boot/grub/menu.lst
nel caso di GRUB Legacy), moduli (in/boot/grub/i386-pc
), file di traduzione (in/boot/grub/locale
) e caratteri (in/boot/grub/fonts
).
GRUB 2
Installare GRUB 2
GRUB 2 può essere installato usando l’utility grub-install
. Se si è su un sistema non avviabile, sarà necessario eseguire l’avvio utilizzando una Live CD o un disco di ripristino, scoprire qual è la partizione di avvio per il proprio sistema, montarlo e quindi eseguire l’utilità.
Note
|
I comandi seguenti presuppongono che si sia effettuato l’accesso come root. Altrimenti, prima esegui |
Il primo disco su un sistema è di solito il boot device e potrebbe essere necessario sapere se sul disco è presente una boot partition. Questo può essere fatto con l’utility fdisk
. Per elencare tutte le partizioni sul primo disco del computer, utilizzare:
# fdisk -l /dev/sda Disk /dev/sda: 111,8 GiB, 120034123776 bytes, 234441648 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x97f8fef5 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 2000895 1998848 976M 83 Linux /dev/sda2 2002942 234440703 232437762 110,9G 5 Extended /dev/sda5 2002944 18008063 16005120 7,6G 82 Linux swap / Solaris /dev/sda6 18010112 234440703 216430592 103,2G 83 Linux
La partizione di avvio è identificata con *
nella colonna Boot. Nell’esempio qui sopra è /dev/sda1
.
Ora, crea una directory temporanea sotto /mnt
e monta la partizione all’interno di essa:
# mkdir /mnt/tmp # mount /dev/sda1 /mnt/tmp
Quindi esegui grub-install
, puntandolo al boot _device (non la sola partizione) e alla directory in cui è montata la partizione di boot. Se il sistema ha una partizione di avvio dedicata, il comando è:
# grub-install --boot-directory=/mnt/tmp /dev/sda
Se state installando su un sistema che non ha una partizione di avvio, ma solo una directory /boot
sul filesystem di root, puntatelo direttamente su grub-install
. Il comando in questo caso è:
# grub-install --boot-directory=/boot /dev/sda
Configurare GRUB 2
Il file di configurazione predefinito per GRUB 2 è /boot/grub/grub.cfg
. Questo file viene generato automaticamente e la modifica manuale non è consigliata. Per apportare modifiche alla configurazione di GRUB, è necessario modificare il file /etc/default/grub
e quindi eseguire l’utility update-grub
per generare un file conforme.
Note
|
|
Ci sono alcune opzioni nel file /etc/default/grub
che controllano il comportamento di GRUB 2, come il kernel predefinito per l’avvio, il timeout, i parametri extra della riga di comando, ecc. I più importanti sono:
GRUB_DEFAULT=
-
La voce di menu predefinita per l’avvio. Può essere un valore numerico (come
0
,1
, ecc.), Il nome di una voce di menu (comedebian
) osalvato
, che viene utilizzato insieme aGRUB_SAVEDEFAULT =
, spiegato di seguito . Tieni presente che le voci di menu iniziano da zero, quindi la prima voce di menu è0
, la seconda è1
, ecc. GRUB_SAVEDEFAULT=
-
Se questa opzione è impostata su
true
eGRUB_DEFAULT =
è impostata susave
, l’opzione di avvio predefinita sarà sempre l’ultima selezionata nel menu di avvio. GRUB_TIMEOUT=
-
Il timeout, in secondi, prima che sia avviata la voce di menu predefinita. Se impostato su
0
, il sistema avvierà la voce predefinita senza mostrare un menu. Se impostato su-1
, il sistema attenderà fino a quando l’utente selezionerà un’opzione, indipendentemente da quanto tempo impiegherà. GRUB_CMDLINE_LINUX=
-
Questo elenca le opzioni che verranno aggiunte come parametri all’avvio del kernel Linux..
GRUB_CMDLINE_LINUX_DEFAULT=
-
Per impostazione predefinita, vengono generate due voci di menu per ciascun kernel Linux, una con le opzioni predefinite e una voce per il ripristino. Con questa opzione è possibile aggiungere parametri aggiuntivi che verranno aggiunti solo alla voce predefinita.
GRUB_ENABLE_CRYPTODISK=
-
Se impostato su
y
, comandi comegrub-mkconfig
,update-grub
egrub-install
cercheranno dischi crittografati e aggiungeranno i comandi necessari per accedervi durante l’avvio. Ciò disabilita l’avvio automatico (GRUB_TIMEOUT =
con qualsiasi valore diverso da-1
) perché è necessaria una passphrase per decrittare i dischi prima che sia possibile accedervi.
Gestire le Voci del Menu
Quando viene eseguito update-grub
, GRUB 2 cerca i kernel e i sistemi operativi sulla macchina e genera le corrispondenti voci di menu sul file /boot/grub/grub.cfg
. Nuove voci possono essere aggiunte manualmente ai file di script nella directory /etc/grub.d
.
Questi file devono essere eseguibili e vengono elaborati in ordine numerico da update-grub
. Pertanto 05_debian_theme
viene elaborato prima di 10_linux
e così via. Le voci di menu personalizzate vengono generalmente aggiunte al file 40_custom
.
La sintassi di base per una voce di menu è mostrata di seguito:
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
La prima riga inizia sempre con menuentry
e termina con {
. Il testo tra virgolette verrà visualizzato come etichetta della voce nel menu di avvio di GRUB 2.
Il parametro set root
definisce il disco e la partizione in cui si trova il file system radice per il sistema operativo. Nota che su GRUB 2 i dischi sono numerati da zero, quindi hd0
è il primo disco (sda
in Linux), hd1
il secondo e così via. Le partizioni, tuttavia, sono numerate a partire dal numero uno. Nell’esempio sopra, il file system di root si trova sul primo disco (hd0
), sulla prima partizione (,1
) o sda1
.
Invece di specificare direttamente il dispositivo e la partizione, puoi anche fare in modo che GRUB 2 cerchi un file system con un’etichetta specifica o UUID (Universally Unique Identifier). Per questo, usa il parametro search --set=root
seguito dal parametro --label
e dall’etichetta del file system da cercare, oppure --fs-uuid
seguito dall’UUID del file system.
Puoi trovare l’UUID di un filesystem con il comando seguente:
$ ls -l /dev/disk/by-uuid/ total 0 lrwxrwxrwx 1 root root 10 nov 4 08:40 3e0b34e2-949c-43f2-90b0-25454ac1595d -> ../../sda5 lrwxrwxrwx 1 root root 10 nov 4 08:40 428e35ee-5ad5-4dcb-adca-539aba6c2d84 -> ../../sda6 lrwxrwxrwx 1 root root 10 nov 5 19:10 56C11DCC5D2E1334 -> ../../sdb1 lrwxrwxrwx 1 root root 10 nov 4 08:40 ae71b214-0aec-48e8-80b2-090b6986b625 -> ../../sda1
Nell’esempio sopra, l’UUID per /dev/sda1
è ae71b214-0aec-48e8-80b2-090b6986b625
. Se si desidera impostarlo come dispositivo root per GRUB 2, il comando sarebbe search --set=root --fs-uuid ae71b214-0aec-48e8-80b2-090b6986b625
.
Quando si usa il comando search
è frequente l’uso del parametro --no-floppy
in modo che GRUB non perda tempo a cercare dischi floppy.
La linea linux
indica dove si trova il kernel per il sistema operativo (in questo caso, il file` vmlinuz` nella root del file system). Successivamente, è possibile passare i parametri della riga di comando al kernel.
Nell’esempio sopra abbiamo specificato la partizione root (root=/dev/sda1
) e abbiamo passato tre parametri del kernel: la partizione root dovrebbe essere montata in sola lettura (ro
), la maggior parte dei messaggi di log dovrebbe essere disabilitata (quiet
) e dovrebbe essere visualizzata una schermata di avvio (splash
).
La riga initrd
indica dove si trova il disco RAM iniziale. Nell’esempio sopra il file è initrd.img
, che si trova nella root del file system.
Note
|
La maggior parte delle distribuzioni Linux non colloca effettivamente il kernel e |
L’ultima riga di una voce di menu deve contenere solo il carattere }
.
Interaggire con GRUB 2
Quando si avvia un sistema con GRUB 2, verrà visualizzato un menu di opzioni. Utilizzare i tasti di direzione per selezionare un’opzione e Enter per confermare e avviare la voce selezionata.
Tip
|
Se vedete solo un conto alla rovescia, ma non un menu, premete Shift per visualizzare il menu. |
Per modificare un’opzione, selezionare con i tasti freccia e premere E. Questo mostrerà una finestra dell’editor con i contenuti di menuentry
associati a quell’opzione, come definito in /boot/grub/grub.cfg
.
Dopo aver modificato un’opzione, digitare Ctrl+X o F10 per l’avvio, oppure Esc per tornare al menu.
Per entrare nella shell di GRUB 2, premere C nella schermata del menu (o Ctrl+C) nella finestra di modifica). Apparirà un prompt dei comandi come il seguente: grub>
Digitare help
per visualizzare un elenco di tutti i comandi disponibili, oppure premere Esc per uscire dalla shell e tornare alla schermata del menu.
Note
|
Ricorda che questo menu non apparirà se |
Avviare dalla Shell di GRUB 2
È possibile utilizzare la shell GRUB 2 per avviare il sistema nel caso in cui una configurazione errata in una voce di menu impedisca l’avvio.
La prima cosa da fare è scoprire dove si trova la partizione di avvio. Potete farlo con il comando ls
, che mostrerà un elenco delle partizioni e dei dischi trovati da GRUB 2.
grub> ls (proc) (hd0) (hd0,msdos1)
Nell’esempio sopra, le cose sono facili. C’è solo un disco (hd0)
con solo una partizione su di esso: (hd0,msdos1)
.
Nel nostro esempio la prima partizione hd0
è chiamata msdos1
perché il disco è stato partizionato usando lo schema di partizionamento MBR. Se fosse stato partizionato usando GPT, il nome sarebbe stato gpt1
.
Per avviare Linux, abbiamo bisogno di un kernel e di un disco RAM iniziale (initrd). Controlliamo il contenuto di (hd0, msdos1)
:
grub> ls (hd0,msdos1)/ lost+found/ swapfile etc/ media/ bin/ boot/ dev/ home/ lib/ lib64/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ initrd.img initrd.img.old vmlinuz cdrom/
È possibile aggiungere il parametro -l
a ls
per ottenere un elenco lungo, simile a quello che si otterrebbe su un terminale Linux. Usare Tab per completare automaticamente i nomi di disco, partizione e file.
Notare che c’è un kernel (vmlinuz
) e un initrd (initrd.img
) direttamente nella directory root. Altrimenti, potremmo controllare il contenuto di /boot
con list (hd0,msdos1)/boot/
.
Ora, impostare la partizione di avvio:
grub> set root=(hd0,msdos1)
Caricare il kernel Linux con il comando linux
, seguito dal percorso del kernel e dall’opzione root=
per dire al kernel dove si trova il filesystem di root per il sistema operativo.
grub> linux /vmlinuz root=/dev/sda1
Caricare il disco RAM iniziale con initrd
, seguito dal percorso completo del file initrd.img
:
grub> initrd /initrd.img
Ora, avviare il sistema con boot
.
Avviare da una Shell di Ripristino
In caso di errore di avvio, GRUB 2 può caricare una shell di ripristino, una versione semplificata della shell di cui abbiamo parlato in precedenza. Lo riconoscerai dal prompt dei comandi, che viene visualizzato come grub rescue>
.
Il processo per avviare un sistema da questa shell è quasi lo stesso di quello mostrato in precedenza. Tuttavia, per far funzionare le cose dovramo caricare alcuni moduli GRUB 2.
Dopo aver scoperto quale partizione è quella di avvio (con ls
, come mostrato prima), usare il comando set prefix=
, seguito dal percorso completo della directory che contiene i file di GRUB 2. Di solito /boot/grub
. Nel nostro esempio:
grub rescue> set prefix=(hd0,msdos1)/boot/grub
Ora, caricate i moduli normal
e linux
con il comando insmod
:
grub rescue> insmod normal grub rescue> insmod linux
Quindi, impostare la partizione di avvio con set root=
come indicato in precedenza, caricare il kernel linux (con linux
), il disco RAM iniziale (initrd
) e provare ad avviare il tutto con boot
.
GRUB Legacy
Installazione di GRUB Legacy su un sistema in esecuzione
Per installare GRUB Legacy su un disco da un sistema in esecuzione si utlizzerà l’utility grub-install
. Il comando di base è grub-install DEVICE
dove DEVICE
è il disco su cui si desidera installare GRUB Legacy. Un esempio potrebbe essere /dev/sda
.
# grub-install /dev/sda
Da notare che se devi specificare il device dove verrà installato GRUB Legacy, come /dev/sda/
e non la partizione come per esempio /dev/sda1
.
Di default GRUB copia i file necessari nella directory /boot
sul dispositivo specificato. Se si desidera copiarli in un’altra directory, utilizzare il parametro --boot-directory=
, seguito dal percorso completo in cui devono essere copiati i file.
Installazione di GRUB Legacy da una shell GRUB
Se non si riesce ad avviare il sistema per qualche motivo e si deve reinstallare GRUB Legacy, ciò può essere fatto dalla shell GRUB su un disco di avvio di GRUB Legacy.
Dalla shell GRUB (digitare c
nel menu di avvio per accedere al prompt grub>
), il primo passo è impostare il dispositivo di avvio, che contiene la directory /boot
. Per esempio, se questa directory si trova nella prima partizione del primo disco, il comando sarrà:
grub> root (hd0,0)
Se non si conosce quale dispositivo contiene la directory /boot
, si può chiedere a GRUB di cercarla con il comando` find`:
grub> find /boot/grub/stage1 (hd0,0)
Quindi, impostare la partizione di avvio come indicato sopra e usare il comando setup
per installare GRUB Legacy sull’MBR e copiare i file necessari sul disco:
grub> setup (hd0)
Al termine, riavviare il sistema e tutto dovrebbe rifunzionare nuovamente.
Configurazione delle Voci e delle Impostazioni del Menu Legacy di GRUB
Le voci e le impostazioni del menu legacy di GRUB sono memorizzate nel file /boot/grub/menu.lst
. Questo è un semplice file di testo con un elenco di comandi e parametri, che può essere modificato direttamente con l’editor di testo preferito.
Le righe che iniziano con #
sono considerate commenti e le righe vuote vengono ignorate.
Una voce di menu ha almeno tre comandi. Il primo, title
, imposta il titolo del sistema operativo nella schermata del menu. Il secondo, root
, dice a GRUB Legacy da quale dispositivo o partizione avviare.
La terza voce, kernel
, specifica il percorso completo dell’immagine del kernel che dovrebbe essere caricata quando viene selezionata la voce corrispondente. Si noti che questo percorso è relativo al dispositivo specificato sul parametro root
.
Segue un semplice esempio:
# This line is a comment title My Linux Distribution root (hd0,0) kernel /vmlinuz root=/dev/hda1
A differenza di GRUB 2, in GRUB Legacy entrambi i dischi e le partizioni sono numerati da zero. Quindi, il comando root (hd0,0)
imposterà la partizione di avvio come prima partizione (0
) del primo disco (hd0
).
È possibile omettere l’istruzione root
se si specifica il dispositivo di avvio prima del percorso sul comando kernel
. La sintassi è la stessa, quindi:
kernel (hd0,0)/vmlinuz root=dev/hda1
è equivalente a:
root (hd0,0) kernel /vmlinuz root=/dev/hda1
Entrambi caricheranno il file vmlinuz
dalla directory root (/
) della prima partizione del primo disco (hd0,0
).
Il parametro root=/dev/hda1
dopo il comando kernel
dice al kernel Linux quale partizione dovrebbe essere usata come filesystem di root. Questo è un parametro del kernel Linux, non un comando GRUB Legacy.
Note
|
Per ulteriori informazioni sui parametri del kernel, vedere https://www.kernel.org/doc/html/v4.14/admin-guide/kernel-parameters.html. |
Potrebbe essere necessario specificare la posizione dell’immagine del disco RAM iniziale per il sistema operativo con il parametro initrd
. Il percorso completo del file può essere specificato come nel parametro kernel
, e si può anche specificare un dispositivo o una partizione prima del percorso, per esempio:
# This line is a comment title My Linux Distribution root (hd0,0) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
GRUB Legacy ha un design modulare, in cui i moduli (normalmente memorizzati come file .mod
in /boot/grub/i386-pc
) possono essere caricati per aggiungere funzionalità extra, come il supporto per hardware insolito, filesystem o nuovi algoritmi di compressione.
I moduli vengono caricati usando il comando module
, seguito dal percorso completo del corrispondente file .mod
. Si tenga presente che, come i kernel e le immagini initrd, questo percorso è relativo al dispositivo specificato nel comando root
.
L’esempio seguente caricherà il modulo 915resolution
, necessario per impostare correttamente la risoluzione del framebuffer su sistemi con chipset video Intel serie 800 o 900.
module /boot/grub/i386-pc/915resolution.mod
Chainloading di Altri Sistemi Operativi
GRUB Legacy può essere utilizzato per caricare sistemi operativi non supportati, come Windows, utilizzando un processo chiamato chainloading. GRUB Legacy viene caricato per primo e quando viene selezionata l’opzione corrispondente viene caricato il bootloader specifico del sistema desiderato.
Una voce tipica per il chainloading di Windows sarebbe simile a quella mostrata di seguito:
# Load Windows title Windows XP root (hd0,1) makeactive chainload +1 boot
Come in precedenza, root (hd0,1)
specifica il dispositivo e la partizione in cui si trova il boot loader per il sistema operativo che desideriamo caricare. In questo esempio, la seconda partizione del primo disco.
makeactive
-
imposterà un flag indicante che si tratta di una partizione attiva. Funziona solo su partizioni primarie DOS.
chainload +1
-
dice a GRUB di caricare il primo settore della partizione di avvio. Qui di solito si trovano i bootloader..
boot
-
eseguirà il bootloader e caricherà il sistema operativo corrispondente.
Esercizi Guidati
-
Qual è il percorso predefinito per il file di configurazione di GRUB 2?
-
Quali sono i passaggi necessari per modificare le impostazioni di GRUB 2?
-
In quale file devono essere aggiunte voci di menu personalizzate di GRUB 2?
-
Dove sono memorizzate le voci di menu per GRUB Legacy?
-
Da un menu GRUB 2 o GRUB Legacy, come puoi accedere a GRUB Shell?
Esercizi Esplorativi
-
Immagina un utente che configura GRUB Legacy per l’avvio dalla seconda partizione del primo disco. Egli scrive la seguente voce di menu personalizzata:
title My Linux Distro root (hd0,2) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
Tuttavia, il sistema non si avvia. Qual è l’errore?
-
Immagina di avere un disco identificato come
/dev/sda
con più partizioni. Quale comando può essere utilizzato per scoprire qual è la partizione di avvio su un sistema? -
Quale comando può essere utilizzato per scoprire l’UUID di una partizione?
-
Considera la seguente voce per GRUB 2
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
Modificalo in modo che il sistema si avvii da un disco con l’UUID
5dda0af3-c995-481a-a6f3-46dcd3b6998d
-
Come si può impostare GRUB 2 così che attenda 10 secondi prima di avviare la voce del menu predefinita?
-
Da una shell legacy di GRUB, quali sono i comandi per installare GRUB sulla prima partizione del secondo disco?
Sommario
In questa lezione abbiamo imparato:
-
Che cos’è un boot loader.
-
Le differenze tra GRUB Legacy e GRUB 2.
-
Che cos’è una partizione di avvio e quali sono i suoi contenuti.
-
Come installare GRUB Legacy e GRUB 2.
-
Come configurare GRUB Legacy e GRUB 2.
-
Come aggiungere voci di menu personalizzate a GRUB Legacy e GRUB 2.
-
Come interagire con la schermata del menu e la console di GRUB Legacy e GRUB 2.
-
Come avviare un sistema da una shell GRUB Legacy o GRUB 2 o da una shell di rescue.
In questa lezione sono stati discussi i seguenti comandi:
-
grub-install
-
update-grub
-
grub-mkconfig
Risposte agli Esercizi Guidati
-
Qual è il percorso predefinito per il file di configurazione di GRUB 2?
/boot/grub/grub.cfg
-
Quali sono i passaggi necessari per modificare le impostazioni di GRUB 2?
Modificare il file
/etc/default/grub
, quindi aggiornare la configurazione conupdate-grub
. -
In quale file devono essere aggiunte voci di menu personalizzate di GRUB 2?
/etc/grub.d/40_custom
-
Dove sono memorizzate le voci di menu per GRUB Legacy?
/boot/grub/menu.lst
-
Da un menu GRUB 2 o GRUB Legacy, come puoi accedere a GRUB Shell?
Premere
c
nella schermata del menu.
Risposte agli Esercizi Guidati
-
Immagina un utente che configura GRUB Legacy per l’avvio dalla seconda partizione del primo disco. Egli scrive la seguente voce di menu personalizzata:
title My Linux Distro root (hd0,2) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
Tuttavia, il sistema non si avvia. Qual è l’errore?
La partizione di avvio è errata. Ricorda che, a differenza di GRUB 2, GRUB Legacy conta le partizioni da zero. Quindi, il comando corretto per la seconda partizione del primo disco dovrebbe essere
root (hd0,1)
. -
Immagina di avere un disco identificato come
/dev/sda
con più partizioni. Quale comando può essere utilizzato per scoprire qual è la partizione di avvio su un sistema?Utilizzare
fdisk -l /dev/sda
. La partizione di avvio verrà contrassegnata nell’elenco con un asterisco (*
). -
Quale comando può essere utilizzato per scoprire l’UUID di una partizione?
Usare
ls -la /dev/disk/by-uuid/
e cercare l’UUID che punta alla partizione. -
Considera la seguente voce per GRUB 2
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
Modificalo in modo che il sistema si avvii da un disco con l’UUID
5dda0af3-c995-481a-a6f3-46dcd3b6998d
Cambiare l’istruzione
set root
. Invece di specificare un disco e una partizione, far cercare a Grub la partizione con l’UUID desiderato.menuentry "Default OS" { search --set=root --fs-uuid 5dda0af3-c995-481a-a6f3-46dcd3b6998d linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
-
Come si può impostare GRUB 2 così che attenda 10 secondi prima di avviare la voce del menu predefinita?
Aggiungere il parametro
GRUB_TIMEOUT=10
a/etc/default/grub
. -
Da una shell legacy di GRUB, quali sono i comandi per installare GRUB sulla prima partizione del secondo disco?
grub> root (hd1,0) grub> setup (hd1)