Avanti Indietro Indice

5. Avvio del sistema

Quando il sistema viene inizializzato il BIOS legge il settore 0 (definito come MBR - Master Boot Record) dal primo disco fisso (o dal floppy) e lancia il programma che vi trova - di solito un bootstrap loader. Il loader residente nel settore 0 non ha i suoi driver per cui utilizza i servizi del BIOS. Ciò significa che il kernel di Linux deve essere interamente contenuto nei primi 1024 cilindri per essere caricato.

Questo problema si risolve molto semplicemente verificando che il kernel (e gli altri file utilizzati durante il boot, come le mappe dei file di LILO) sia in una partizione contenuta intieramente nei primi 1024 cilindri del disco in modo che il BIOS vi possa accedere - probabilmente questo significa utilizzare il primo o il secondo disco.

Create quindi una piccola partizione, diciamo di 10 MB, così c'è spazio per più di un kernel, facendo attenzione che sia contenuta entro i primi 1024 cilindri del primo o del secondo disco. Montatela in /boot così LILO vi metterà i file di cui necessita.

5.1 LILO e l'opzione `linear'

Un altro problema è che sia il boot loader che il BIOS devono vedere la stessa geometria del disco. LILO inoltra al kernel la richiesta di informazioni circa la geometria ma molte volte gli autori dei driver dei dischi hanno la brutta abitudine di utilizzare la tavola delle partizioni per desumere la geometria del disco invece di specificare a LILO qual è la geometria utilizzata dal BIOS. Così facendo spesso la geometria fornita dal BIOS non è corretta. In questi casi può essere conveniente passare a LILO l'opzione `linear' in modo che non necessitando dei parametri della geometria durante la fase di inizializzazione del sistema (memorizza gli indirizzi lineari nelle mappe) faccia la conversione in indirizzi lineari all'avvio. Perché questa non è un'opzione predefinita? Bene, occorre tener presente che il suo uso comporta un problema. LILO con l'opzione `linear' attivata non è in grado di conoscere il numero dei cilindri come conseguenza non può generare nessun avvertimento se una parte del kernel si trova oltre il limite dei 1024 cilindri. Alla fine vi potreste trovare con un sistema che non è in grado di avviarsi.

5.2 Un "bug" di LILO

Le versioni di LILO inferiori alla v21 hanno un difetto: la conversione degli indirizzi effettuata durante la fase di avvio ha un "bug": quando il prodotto c*H è maggiore od eguale a 65536 si hanno degli errori di overflow durante il calcolo. Per valori di H superiori a 64 si ha un limite più stretto sui valori attribuibili a c rispetto al solito c < 1024; per esempio, con H=255 e con una versione datata di LILO si deve avere c < 258 (c=cilindro dove risiede l'immagine del kernel, H=numero delle testine del disco).

5.3 1024 cilindri non sono 1024 cilindri

Tim Williams scrive: `Ho la mia partizione Linux nei primi 1024 cilindri e tuttavia non c'è verso di di avviarla. Quando l'ho ridimensionata a meno di 1 GB le cose sono andate a posto.' Cosa può essere? Bene, il disco in parola è un disco SCSI con un controller AHA2940UW che usa sia H=64, S=32 (ossia cilindri di 1 MiB = 1.05 MB) che H=255, S=63 (ossia cilindri di 8.2 MB) a seconda delle opzioni impostate nel firmware e nel BIOS. Senza dubbio il BIOS assume la prima e trova il limite dei 1024 settori in corrispondenza di una capacità di 1 GiB mentre Linux utilizza la seconda e LILO trova il limite agli 8.4 GB.


Avanti Indietro Indice