Linux Professional Institute Learning Logo.
Torna al contenuto principale
  • Home
    • Tutte le Risorse
    • LPI Learning Materials
    • Collabora
    • Publishing Partner
    • Diventa un Publishing Partner
    • FAQ
    • Collaboratori
    • Contatto
  • LPI.org
102.2 Lezione 1
Argomento 101: L'Architettura di Sistema
101.1 Determinare e Configurare le Impostazioni dell'Hardware
  • 101.1 Lezione 1
101.2 Avviare il sistema
  • 101.2 Lezione 1
101.3 Modificare runlevel / target di avvio e spegnere o riavviare il sistema
  • 101.3 Lezione 1
Argomento 102: Installazione di Linux e Gestione dei Pacchetti
102.1 Progettare il layout del disco rigido
  • 102.1 Lezione 1
102.2 Installare un boot manager
  • 102.2 Lezione 1
102.3 Gestire le librerie condivise
  • 102.3 Lezione 1
102.4 Utilizzare la gestione dei pacchetti Debian
  • 102.4 Lezione 1
102.5 Utilizzare la gestione dei pacchetti RPM e YUM
  • 102.5 Lezione 1
102.6 Linux come sistema virtualizzato
  • 102.6 Lezione 1
Argomento 103: GNU e Unix Commands
103.1 Lavorare con la Command Line
  • 103.1 Lezione 1
  • 103.1 Lezione 2
103.2 Elaborare flussi di testo utilizzando i filtri
  • 103.2 Lezione 1
103.3 Eseguire la gestione di base dei file
  • 103.3 Lezione 1
  • 103.3 Lezione 2
103.4 Utilizzare flussi, pipe e reindirizzamenti
  • 103.4 Lezione 1
  • 103.4 Lezione 2
103.5 Creare, controllare e terminare i processi
  • 103.5 Lezione 1
  • 103.5 Lezione 2
103.6 Modificare le priorità di esecuzione del processo
  • 103.6 Lezione 1
103.7 Cercare file di testo utilizzando espressioni regolari
  • 103.7 Lezione 1
  • 103.7 Lezione 2
103.8 Modifica base di un file
  • 103.8 Lezione 1
Argomento 104: Dispositivi, il File System Linux, il Filesystem Hierarchy Standard
104.1 Creare partizioni e filesystem
  • 104.1 Lezione 1
104.2 Mantenere l'integrità dei filesystem
  • 104.2 Lezione 1
104.3 Verificare il montaggio e lo smontaggio dei filesystem
  • 104.3 Lezione 1
104.5 Gestire le autorizzazioni e la proprietà dei file
  • 104.5 Lezione 1
104.6 Creare e modificare collegamenti hard e soft
  • 104.6 Lezione 1
104.7 Trovare i file di sistema e collocarli nella posizione corretta
  • 104.7 Lezione1
How to get certified
  1. Argomento 102: Installazione di Linux e Gestione dei Pacchetti
  2. 102.2 Installare un boot manager
  3. 102.2 Lezione 1

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 esempio System.map-4.15.0-65-generic).

Linux kernel

Questo è il kernel del sistema operativo corretto. Il nome è di solito vmlinux-VERSION (per esempio vmlinux-4.15.0-65-generic). Si può anche trovare il nome vmlinuz invece di vmlinux, la z 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 sudo su - per “diventare” root. Al termine, digitare exit per disconnettersi e tornare un utente senza privilegi.

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

update-grub è generalmente un collegamento a grub-mkconfig -o /boot/grub/grub.cfg, quindi producono gli stessi risultati.

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 (come debian) o salvato, che viene utilizzato insieme a GRUB_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 e GRUB_DEFAULT = è impostata su save, 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 come grub-mkconfig, update-grub e grub-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 initrd nella directory principale del file system radice. Invece, questi sono collegamenti ai file effettivi all’interno della directory o della partizione /boot.

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 GRUB_TIMEOUT è impostato su 0 in /etc/default/grub.

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

  1. Qual è il percorso predefinito per il file di configurazione di GRUB 2?

  2. Quali sono i passaggi necessari per modificare le impostazioni di GRUB 2?

  3. In quale file devono essere aggiunte voci di menu personalizzate di GRUB 2?

  4. Dove sono memorizzate le voci di menu per GRUB Legacy?

  5. Da un menu GRUB 2 o GRUB Legacy, come puoi accedere a GRUB Shell?

Esercizi Esplorativi

  1. 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?

  2. 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?

  3. Quale comando può essere utilizzato per scoprire l’UUID di una partizione?

  4. 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

  5. Come si può impostare GRUB 2 così che attenda 10 secondi prima di avviare la voce del menu predefinita?

  6. 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

  1. Qual è il percorso predefinito per il file di configurazione di GRUB 2?

    /boot/grub/grub.cfg

  2. Quali sono i passaggi necessari per modificare le impostazioni di GRUB 2?

    Modificare il file /etc/default/grub, quindi aggiornare la configurazione con update-grub.

  3. In quale file devono essere aggiunte voci di menu personalizzate di GRUB 2?

    /etc/grub.d/40_custom

  4. Dove sono memorizzate le voci di menu per GRUB Legacy?

    /boot/grub/menu.lst

  5. Da un menu GRUB 2 o GRUB Legacy, come puoi accedere a GRUB Shell?

    Premere c nella schermata del menu.

Risposte agli Esercizi Guidati

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

  2. 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 (*).

  3. 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.

  4. 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
    }
  5. 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.

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

Linux Professional Institute Inc. Tutti i diritti riservati. Visita il sito Learning Materials: https://learning.lpi.org
Quest'opera è sotto la licenza 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License'.

Prossima Lezione

102.3 Gestire le librerie condivise (102.3 Lezione 1)

Leggi la prossima Lezione

Linux Professional Institute Inc. Tutti i diritti riservati. Visita il sito Learning Materials: https://learning.lpi.org
Quest'opera è sotto la licenza 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License'.

LPI è una organizzazione non-profit.

© 2023 Linux Professional Institute (LPI) è lo standard di certificazione globale e l'organizzazione di supporto alla carriera per i Professionisti Open Source. Con più di 200,000 titolari di Certificazione, è il primo e il più grande ente di Certificazione Open Source e Linux vendor-neutral. LPI ha professionisti certificati in oltre 180 Paesi, offre i suoi Esami in più lingue e ha centinaia di Partner di formazione in tutto il mondo.

La nostra missione è promuovere l'uso dell'Open Source supportando le persone che vi lavorano.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Contattaci
  • Privacy & Cookie Policy

Trovato un errore? Per favore scrivi a contattaci.

© 1999–2023 The Linux Professional Institute Inc. Tutti i diritti riservati.