[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 18.   LILO: introduzione

LILO (1) è una procedura molto comune per il caricamento di GNU/Linux negli elaboratori con architettura i386. 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 19 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 <file///usr/share/doc/lilo/> e il BootPrompt HOWTO.

18.1   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 18.1 sono elencati i codici esadecimali corrispondenti ad alcuni dispositivi per le unità di memorizzazione.

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

Dispositivo Codice
/dev/fd0 200
/dev/fd1 201
/dev/hda 300
/dev/hda1 301
/dev/hda2 302
/dev/hdb 340
/dev/hdb1 341
/dev/hdb2 342
/dev/sda 800
/dev/sda1 801
/dev/sda2 802
/dev/sdb 800
/dev/sdb1 801
/dev/sdb2 802

18.2   1024 cilindri

Quando si utilizza l'architettura i386, il firmware, cioè il BIOS, solitamente non è in grado di accedere a settori oltre il 1 024-esimo cilindro (cioè oltre il cilindro numero 1 023). Di conseguenza, il programma che si occupa di caricare il kernel di qualunque sistema operativo, si deve avvalere delle funzioni del BIOS (perché inizialmente non c'è ancora un sistema operativo funzionante) e quindi non può raggiungere file oltre quel limite dei 1 024 cilindri.

La directory /boot/ (con tutto il suo contenuto) e il kernel, devono trovarsi fisicamente entro il 1 024-esimo cilindro. Non basta che la partizione inizi entro il limite per garantire che questi file si trovino effettivamente in quella zona. In caso di necessità, si può utilizzare una partizione apposita per questi file, nella parte sicura del disco. È poi sufficiente montare questa partizione nel file system generale, eventualmente riproducendo la directory /boot/ attraverso un semplice collegamento simbolico.

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

18.3.1   /etc/lilo.conf

/etc/lilo.conf è il file di configurazione utilizzato da LILO per installare il sistema di avvio. 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 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 SCSI
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 montati. 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 che 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

18.3.2   # lilo

lilo [opzioni]

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.

Alcune opzioni

-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 montato da qualche parte.

Esempi

lilo -C ./mia.conf

Installa il sistema di avvio utilizzando la configurazione del file mia.conf contenuto nella directory corrente.

lilo -r /mnt/floppy

Utilizza la configurazione del file /mnt/floppy/etc/lilo.conf, facendo riferimento (probabilmente) ai file contenuti in /mnt/floppy/boot/, utilizzando i file di dispositivo in /mnt/floppy/dev/.

18.4   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 18.3.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 montato il dischetto utilizzando la directory /mnt/floppy/ come punto di innesto.

    fdformat /dev/fd0u1440

    mke2fs /dev/fd0

    mount -t ext2 /dev/fd0 /mnt/floppy

    cp -dpR /boot /mnt/floppy

    mkdir /mnt/floppy/etc

    cp /etc/lilo.conf /mnt/floppy/etc/lilo.conf

    mkdir /mnt/floppy/dev

    cd /mnt/floppy/dev/

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

  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

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 montata 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

18.5   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 16.4 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 capitolo 30 ed eventualmente il BootPrompt HOWTO.

18.6   Riferimenti

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

1) LILO   licenza speciale senza vincoli particolari


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome lilo_introduzione.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]