Ho classificato i dischi relativi al boot in 4 tipi. In questo discorso e attraverso tutto questo documento si usa il termine ``disco'' per riferirsi ai dischetti, se non è specificato. Gran parte del discorso può essere comunque applicata agli hard-disks.
Un sommario dei tipi di dischi e del loro uso:
Un disco che contiene il kernel e che può eseguire il boot. Il disco può contenere un filesystem e usa un boot loader per eseguire il boot, o può semplicemente contenere il kernel all'inizio del disco. Il disco può essere usato per eseguire il boot del kernel usando un root file system su un altro disco. Questo può essere utile se perdete il vostro boot loader a causa, per esempio, di una installazione incorretta.
Un disco con un file system contenente tutto ciò che è necessario per lavorare con un sistema Linux. Non è necessariamente provvisto di un kernel o di un boot loader.
Questo disco può essere usato per eseguire il sistema indipendentemente da qualunque altro disco, una volta che è stato eseguito il boot del kernel. Una caratteristica particolare del kernel permette di eseguire il mount di un altro disco root, con il disco root iniziale che viene automaticamente copiato in memoria.
Potete usare questo tipo di disco per controllare se un disco è rovinato senza eseguirne il mount, o per recuperare un altro disco dopo un errore del disco o la perdita di qualche file.
Un disco che è identico al disco root, però contiene un kernel e un boot loader. Può essere usato per eseguire il boot e far partire il sistema. Il vantaggio di questo tipo di disco è che è compatto - tutto si trova in un solo disco. Comunque il continuo aumentare della grandezza di un po' tutto impone che non sempre sia possibile avere tutto su un singolo dischetto.
Un disco che contiene un file system, ma non è fatto per essere usato come root file system. È un disco che contiene qualche utilità addizionale. Potreste usare questo tipo di disco per avere sempre a disposizione questi programmi quando avete problemi di spazio sul vostro disco di root.
Il termine ``utility'' si riferisce solamente al dischetto, il cui utilizzo potrebbe servire per conservare del software per il recupero del sistema.
Tutti i PC iniziano il processo di boot eseguendo un codice residente sulla ROM per caricare il settore del disco di boot dal settore 0, cilindro 0, e provare a eseguirlo. Nella maggior parte dei dischi di boot, il settore 0, cilindro 0 contiene inoltre:
Se un kernel del Linux è stato scritto su un dischetto come un ``raw device'', allora il primo settore sarà il primo settore del kernel stesso, e questo settore continuerà il processo di boot caricando il resto del kernel e eseguendo Linux. Per una più dettagliata descrizione del contenuto del boot sector, fate riferimento alla documentazione che accompagna il lilo-0.15 o maggiore.
Un metodo alternativo per salvare il kernel su un disco di boot è quello di creare un file system, non un root file system, ma semplicemente installando il LILO e le relative opzioni per i comandi da eseguire durante il boot. Per esempio, lo stesso kernel può essere usato per eseguire il boot usando un root file system che si trova sul disco fisso, o che si trova su un dischetto. Questo può essere utile se state cercando di ricostruire il file system del vostro disco fisso, e volete testare ripetutemente i risultati.
Il kernel deve in qualche modo ottenere un puntatore al drive e alla partizione di cui deve essere eseguito il mount come root drive. Questo può essere fatto in diversi modi:
ROOT_DEV = device
nel makefile del kernel e
ricompilando il kernel (per sapere come ricompilare il kernel,
leggete le Linux FAQ e guardate nella directory /usr/src/linux
).
Ci sono dei commenti nel makefile del kernel che spiegano quali
sono i valori validi per device
.
rdev nomefile device
Questo indicherà che il root device del kernel contenuto nel
nomefile
sarà device
. Per esempio:
rdev zImage /dev/sda1
Questo comando imposta il root device del kernel Image sulla
prima partizione SCSI drive.Ci sono altri modi per usare il comando rdev. Provate:
rdev -h
e questo vi mostrerà come si usa il comando.
Di solito non c'è bisogno di configurare il root device per usare i dischetti di boot, perché il kernel attualmente usato per eseguire il boot probabilmente punta già al root device. Sarà necessario, comunque, se ottenete il kernel da un'altra macchina, per esempio, da una distribuzione, o se volete che il kernel esegua il boot di un dischetto di root. Non fa male comunque controllare. Per usare rdev per controllare il root device corrente nel kernel, digitate questo comando:
rdev <nomefile>
È possibile cambiare il root device settato nel kernel attraverso altri mezzi, oltre che tramite rdev. Per dettagli, andate a vedere le FAQ alla fine di questo capitolo.
Una volta che il kernel è stato configurato è necessario copiarlo su un dischetto di boot.
I comandi descritti di seguito (e in tutto l'HOWTO) funzionano regolarmente se si assume che i dischi siano stati formattati. In caso contrario, usate fdformat per formattare i dischetti prima di continuare.
Se non si intende avere un file system sul dischetto di boot, allora il kernel va copiato usato il comando dd, come segue:
dd if=nomefile of=device
dove nomefile e` il nome del kernel
e device e` il device del dischetto,
solitamente /dev/fd0
Può essere usato anche il comando:
cp nomefile device
Per esempio:
dd if=zImage of=/dev/fd0
oppure
cp zImage /dev/fd0
Il parametro seek del comando dd NON dovrebbe essere usato. Il file deve essere copiato all'inizio del boot sector (settore 0, cilindro 0), e si ottiene questo omettendo il parametro seek.
Il nome del device può variare. Molti sistemi usano /dev/fd0
come un nome alternativo per il ``vero'' nome del device per il drive del
dischetto. Per esempio, quando il drive di default (p.e. ``drive A:'' in
DOS) è un drive ad alta densità da 3 1/2, il nome del device
sarà /dev/fd0H1440
, ma di solito /dev/fd0
punta
allo stesso device.
Se si vuole copiare il kernel in un dischetto di boot contenente
un filesystem, allora basta eseguire il mount del disco in una
directory (p.e. /mnt
) e usare il comando cp. Per esempio:
mount -t ext2 /dev/fd0 /mnt
cp zImage /mnt
umount /mnt
Notate che per quasi tutte le operazioni descritte in questo HOWTO, l'utente dovrebbe agire come root.
Un disco di root contiene un sistema Linux completamente funzionante, ma senza necessariamente contenere un kernel. In altre parole, il disco può non essere di boot, ma una volta che il kernel è stato attivato, il disco di root contiene tutto ciò che è necessario a supportare un sistema Linux completo. Per poter fare questo, il disco deve contenere i minimi requisiti per un sistema Linux:
Ovviamente, qualunque sistema diventa utile solo quando potete fare qualcosa, e un dischetto di root di solito diventa utile solo quando potete fare qualcosa come:
Essenzialmente la stessa cosa di un disco di root, con in più il kernel e un boot loader come LILO.
Con questa configurazione, un kernel è copiato nel root file system, e LILO poi viene eseguito per installare una configurazione che punta all'imagine del kernel nel disco. Alla partenza, LILO eseguirà il boot del kernel dal disco.
Molti file devono essere copiati su disco affinché questo metodo funzioni. Verrano dati dettagli su questi file e sulla configurazione richiesta da LILO, incluso un esempio, nella sezione intitolata ``LILO''.
Affinché un dischetto con un root filesystem sia efficiente, bisogna che questo sia in grado di partire da un ramdisk, p.e. un disco emulato in memoria. Questo evita che il sistema sia lento, cosa che accadrebbe usando un disco.
C'è anche un altro vantaggio nell'usare un ramdisk - il kernel del Linux ha la capacità di usare un root ramdisk automaticamente, attraverso il quale copia automaticamente il contenuto del disco di root su un disco RAM, e poi usa il disco RAM come disco root. Questo comporta due grossi vantaggi:
Per usare questa capacità del kernel:
Un disco RAM può essere configurato nel kernel in diversi modi:
RAMDISK = -DRAMDISK=1440
per definire un ramdisk di 1440 blocchi da 1K, la dimensione di un
disco ad alta densità.
rdev -r zImage 1440
questo potrebbe cambiare in futuro, sicuro. Per vedere quale versione
di rdev fa questo, usate il comando:
rdev -?
e dovrebbe mostrare le sue opzioni.
ramdisk = 1440
per avere un disco RAM di 1440 blocchi di un 1K al boot.ramdisk=1440
. Per esempio, un riga di comando
come questa:
zImage ramdisk=1440
Per maggiori dettagli vedere la sezione LILO.Il modo più facile consiste nel configurare LILO, siccome dovete comunque configurare LILO, perché non aggiungere la grandezza del disco RAM?
La configurazione di LILO è brevemente descritta in una sezione intitolata ``LILO'', ma è meglio ottenere l'ultima versione stabile di LILO dal più vicino Linux site e leggere la documentazione che lo accompagna.
I dischi RAM possono essere più capienti di un dischetto, e fatti in modo tale da contenere un filesystem largo quanto il disco RAM. Ciò può essere utile per caricare tutto il software necessario a un lavoro di recupero in un disco RAM. Il metodo per creare un disco del genere è descritto nella sezione FAQ, nella domanda ``Come posso creare un filesystem in un disco RAM di grossa capienza?''
Spesso un disco non è sufficiente per contenere tutto il software necessario per fornire le funzioni necessarie di analisi, riparazione e recupero di un disco danneggiato. Anche se includendo tar, gzip e2fsck, fdisk, Ftape e cosi via, dovreste avere tutto ciò che vi serve.
Questo significa che un set per il recupero richiede un disco di
utility, con un file system che contenga ogni altro file necessario.
Di questo file system si può eseguire il mount in una directory
conveniente, come /usr
, sul sistema root/boot.
Creare un file system è abbastanza facile, e la spiegazione è data nella sezione titolata ``File System''.