LILO: introduzione

LILO (1) è una procedura per il caricamento di GNU/Linux negli elaboratori con architettura x86. Permette di avviare anche altri sistemi operativi eventualmente residenti nello stesso elaboratore in cui si usa GNU/Linux. In questa sezione si vedono solo alcuni aspetti del suo funzionamento, quelli che dovrebbero bastare nella maggior parte delle situazioni. Nel capitolo u77 viene descritta con maggiore dettaglio la sua configurazione, ma per un approfondimento sul suo funzionamento conviene consultare la documentazione che accompagna questa procedura: la pagina di manuale lilo(8), quanto contenuto nella directory /usr/share/doc/lilo/ e il BootPrompt HOWTO.

Organizzazione essenziale

La procedura LILO è composta essenzialmente da:

La directory /boot/ contiene i file utilizzati per effettuare l'avvio del sistema: sia per avviare GNU/Linux, sia per altri sistemi operativi eventuali. Può contenere anche il file del kernel, o più file di kernel differenti, quando per questo non si usa semplicemente la directory radice. Più precisamente, contiene almeno i file seguenti:

Nella tabella u76.1 sono elencati i codici esadecimali corrispondenti ad alcuni dispositivi per le unità di memorizzazione.

Tabella u76.1. Elenco dei codici esadecimali dei dispositivi di alcune unità di memorizzazione.

Dispositivo Codice Dispositivo Codice Dispositivo Codice
/dev/fd0
20016
/dev/fd1
20116
/dev/hda
30016
/dev/hda1
30116
/dev/hda2
30216
/dev/hdb
34016
/dev/hdb1
34116
/dev/hdb2
34216
/dev/sda
80016
/dev/sda1
80116
/dev/sda2
80216
/dev/sdb
81016
/dev/sdb1
81116
/dev/sdb2
81216

Installazione del meccanismo di caricamento del sistema operativo

L'installazione del meccanismo di caricamento del sistema operativo avviene modificando il contenuto di uno di questi settori:

Nel primo caso, LILO ha il controllo su tutti i sistemi operativi per il loro caricamento; nel secondo, LILO dipende da un sistema di avviamento di un altro sistema operativo che, a sua volta, passa a LILO il controllo quando ciò viene richiesto; nel terzo caso si utilizza un dischetto in modo da non alterare il sistema di avvio già presente.

L'installazione avviene per mezzo dell'eseguibile lilo, che a sua volta si basa sulla configurazione stabilita attraverso /etc/lilo.conf. Ogni volta che si cambia qualcosa all'interno della directory /boot/, o si modifica, o si sposta il file del kernel, è necessario ripetere l'installazione attraverso l'eseguibile lilo.

Configurazione

Il file di configurazione utilizzato da LILO per installare il sistema di avvio è /etc/lilo.conf. Si tratta di una sorta di script contenente solo assegnamenti a variabili. Ne viene descritto il funzionamento in modo sommario partendo da un esempio in cui si ha un solo disco fisso, dove la prima partizione è riservata al Dos e la seconda a un sistema GNU/Linux. L'esempio permette di avviare GNU/Linux e il Dos selezionando una tra le parole linux o dos al momento dell'avvio. Il simbolo # rappresenta l'inizio di un commento che viene ignorato.

# Prima parte generale
boot=/dev/hda
prompt
timeout=50

# Caricamento di Linux
image=/boot/vmlinuz
    label=linux
    root=/dev/hda2
    read-only

# Caricamento del Dos
other=/dev/hda1
    label=dos
    table=/dev/hda

Segue la descrizione delle direttive che appaiono nell'esempio.

Volendo, è possibile avviare lo stesso file system con kernel differenti a seconda delle necessità. In tal caso si possono aggiungere al file /etc/lilo.conf altri blocchetti come quello seguente:

# Caricamento di Linux con un kernel sperimentale
image=/boot/vmlinuz-prova
    label=prova
    root=/dev/hda2
    read-only

Se si vuole la possibilità di utilizzare come file system principale una partizione diversa da quella normale, magari per fare delle prove, o per qualunque altro motivo, si può indicare una voce alternativa come quando si vuole avviare con diversi kernel possibili.

# Caricamento di una partizione alternativa in un disco SATA
image=/boot/vmlinuz
    label=extra
    root=/dev/sda3
    read-only

Quello che conta è comprendere che il sistema di avvio resta nella directory /boot/ e senza il disco che la contiene, i file system in /dev/hda2 o /dev/sda3 non possono essere innestati. Inoltre, senza /dev/hda (in questi esempi), non si avvierebbe alcunché. Per comprendere meglio il problema, si pensi a questo esempio:

In questo modo, se si esegue lilo, viene creato un settore di avvio nell'MBR di /dev/hda che fa riferimento ai file di avvio (kernel incluso) contenuti nel dischetto. Cioè, senza quel dischetto (proprio quello), il sistema non potrebbe avviarsi. Questo problema viene rivisto più avanti dove viene spiegato come costruire un dischetto contenente sia un settore di avvio, sia il kernel e i file di LILO.

Alle volte è necessario informare il kernel di qualche particolarità dell'hardware installato. In tal caso si utilizza la variabile append alla quale si assegna la stringa necessaria. Nell'esempio seguente si invia la stringa cdu31a=0x340,0 necessaria per poter attivare un vecchio lettore CD-ROM Sony.

# Caricamento di Linux con l'attivazione del CD-ROM
image=/boot/vmlinuz
    label=sony
    root=/dev/hda2
    append="cdu31a=0x340,0"
    read-only

Installazione del sistema di avvio

L'eseguibile lilo permette di installare il sistema di avvio basato sulla procedura LILO. Per farlo, legge il contenuto del file /etc/lilo.conf o di quello indicato attraverso l'opzione -C.

lilo [opzioni]

Tabella u76.6. Alcune opzioni.

Opzione Descrizione
-C file_di_configurazione
Permette di indicare un file di configurazione differente rispetto al solito /etc/lilo.conf.
-r directory_di_partenza
Permette di definire una pseudo directory radice in modo da poter utilizzare quanto contenuto in un dischetto o in un altro disco innestato da qualche parte.

Segue la descrizione di alcuni esempi.

LILO su un disco differente

LILO parte dal presupposto che si stia operando sempre all'interno del file system attivo nel momento in cui si avvia l'eseguibile lilo. Si potrebbe pensare che per fare in modo di sistemare l'avvio su un altro disco, come un dischetto o un'altra unità rimovibile, si debba agire semplicemente sulla direttiva boot=dispositivo; ma questo non basta. Si deve utilizzare l'opzione -r per fare riferimento a una pseudo directory radice, a partire dalla quale LILO deve trovare tutto quello che gli serve, compreso il file di configurazione.

Di seguito viene mostrato l'esempio della preparazione di un dischetto contenente il kernel avviato da LILO, in modo completamente indipendente dal file system attivo nel momento in cui lo si realizza, con una configurazione simile a quella mostrata in precedenza, nella sezione i76.2.1.

  1. All'interno di un dischetto inizializzato e contenente un file system Second-extended (Ext2) si riproduce tutto quello che serve a LILO per definire il sistema di avvio. Si tratta della directory boot/ contenente gli stessi file della stessa directory appartenente al file system generale, insieme al kernel; della directory etc/ con il file lilo.conf; della directory dev/ con i file di dispositivo corrispondenti alle unità di memorizzazione cui si fa riferimento. Si suppone di avere innestato il dischetto utilizzando la directory /mnt/floppy/ come punto di innesto.

    fdformat /dev/fd0u1440[Invio]

    mkfs.ext2 /dev/fd0[Invio]

    mount -t ext2 /dev/fd0 /mnt/floppy[Invio]

    cp -dpR /boot /mnt/floppy[Invio]

    mkdir /mnt/floppy/etc[Invio]

    cp /etc/lilo.conf /mnt/floppy/etc/lilo.conf[Invio]

    mkdir /mnt/floppy/dev[Invio]

    cd /mnt/floppy/dev/[Invio]

    /dev/MAKEDEV fd0 fd1 hda hdb hdc hdd sda sdb sdc sdd[Invio]

  2. Il file /mnt/floppy/etc/lilo.conf viene modificato in modo da fare riferimento al dispositivo /dev/fd0.

    boot=/dev/fd0
    
  3. Si utilizza l'eseguibile lilo con l'opzione -r in modo da fargli usare i file nel dischetto e non quelli contenuti nel file system principale.

    lilo -r /mnt/floppy[Invio]

Il problema può presentarsi anche in modo inverso, quando si avvia il sistema attraverso dischetti di emergenza e si vuole sistemare l'avvio di GNU/Linux attraverso il disco fisso. La partizione principale del disco fisso potrebbe essere innestata nel sistema di emergenza, per esempio in corrispondenza della directory /mnt/, mentre per il resto non dovrebbe essere necessario preoccuparsi d'altro, a parte la versione di LILO presente nel dischetto, che deve essere compatibile con i file di avvio del disco fisso.

lilo -r /mnt[Invio]

Boot prompt

Subito dopo la prima fase dell'avvio del sistema, quella gestita da LILO, prima dell'avvio vero e proprio del kernel, in presenza di determinate condizioni viene visualizzato un invito particolare a inserire delle opzioni: il boot prompt. Questo appare:

Il boot prompt, ovvero l'invito dell'avvio, ha l'aspetto seguente:

boot: 

Normalmente si utilizza la riga di comando di avvio per indicare il nome di una configurazione particolare. In altri casi è il mezzo per specificare un'opzione che per qualche motivo non è attiva automaticamente e si vuole che LILO la passi al kernel.

La digitazione all'interno di questa riga di comando è abbastanza intuitiva: per cancellare si possono usare i tasti [Backspace], [Canc] e le combinazioni [Ctrl u] e [Ctrl x]. Eventualmente, si può ottenere un elenco delle configurazioni, riferite a diverse voci del file /etc/lilo.conf, attraverso la pressione del tasto [Tab]. Si conferma con il tasto [Invio]. Il vero problema è la tastiera: si deve considerare che la disposizione dei tasti è quella statunitense.

La sintassi di quanto si può inserire attraverso la riga di comando è la seguente:

[configurazione [opzione...]]

Se si preme semplicemente [Invio] viene avviata la configurazione predefinita, altrimenti è obbligatorio l'inserimento del nome di questa, seguita eventualmente da altre opzioni.

I vari argomenti inseriti attraverso la riga di comando (il nome della configurazione e le altre opzioni eventuali) sono separati tra loro attraverso uno spazio. Per questo, un argomento non può contenere spazi.

Nella sezione 6.8 vengono descritti alcuni tipi di parametri che possono essere inseriti in una riga di comando di avvio. Per una descrizione più ampia conviene consultare il BootPrompt HOWTO.

Riferimenti


1) LILO   licenza speciale senza vincoli particolari

«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net