Avanti Indietro Indice

3. Componenti

3.1 File System

Il kernel del Linux supporta due file system per i dischi di root che possono essere copiati automaticamente in un disco RAM. Questi sono i file system minix e ext2, dei quali l'ext2 è il migliore. Il supporto per l'ext2 è stato aggiunto tra le versioni 1.1.17 e 1.1.57. Non sono sicuro quale esattamente. Se avete un kernel di una di queste versioni allora guardate nel file /usr/src/linux/drivers/block/ramdisk.c e cercate la parola ``ext2''.

Se non c'è, allora dovrete usare un file system minix, e quindi il comando ``mkfs'' per crearlo. (Se usate mkfs, usate l'opzione -i per specificare un maggior numero di ``inode'' rispetto al valore di dafault; -i 2000 è il valore suggerito).

        mke2fs -m 0 /dev/fd0
Il comando mke2fs riconoscerà automaticamente lo spazio libero e si configurerà automaticamente da solo. Non c'è quindi bisogno di nessun parametro.

Un facile modo per testare il risultato è quello di creare un sistema usando il comando sopra o uno simile, e poi tentare di eseguire il mount del dischetto. Se è un sistema ext2, allora il comando:

        mount -t ext2 /dev/fd0 /<mount point>
dovrebbe funzionare.

3.2 Kernel

Personalizzare il Kernel

Nella maggior parte dei casi sarà possibile copiare il vostro kernel corrente e eseguire il boot da questo. Comunque ci possono essere casi in cui volete compilarne uno diverso.

Una ragione è la grandezza. Il kernel è uno dei file più grossi in un sistema minimizzato, quindi se avete bisogno di creare un disco di root/boot allora dovete anche ridurre la grandezza del kernel il più possibile. Il kernel ora supporta il cambio dei dischetti dopo aver eseguito il boot e prima di eseguire il mount del disco root, così non è più necessario inglobare il kernel nello stesso dischetto come tutto il resto, quindi questi commenti si rivolgono solo a chi decide di creare un disco di root/boot.

Ci sono due modi per ridurre la grandezza del kernel:

Una volta che avete deciso cosa non inserire nel kernel, dovete decidere cosa includere. Probabilmente l'uso più comune che si fa di un disco root/boot è quello di esaminare e recuperare il file system di root rovinato, e per fare questo potreste aver bisogno che il kernel supporti determinate cose.

Per esempio, se i vostri backup sono tutti conservati su nastro e usate Ftape per accedere al drive, allora, se perdete la vostra installazione contenente Ftape, non sarete più in grado di recuperare i vostri backup dal nastro. Dovrete reinstallare Linux, reinstallare Ftape, e poi potrete accedere ai vostri backup.

È certamente preferibile mantenere una copia della stessa utility, così non dovrete perdere tempo installando versioni che non possono leggere i vostri backup.

Il punto è che, qualunque supporto I/O che voi avete aggiunto al vostro kernel per supportare i backup dovrebbe essere anche aggiunto al vostro disco di root/boot. Notate inoltre che il modulo Ftape (o almeno quello che ho io) è piuttosto grosso e non potrà risiedere sul vostro disco di root/boot. Dovrete aggiungerlo su un dischetto di utility - ciò è descritto in una sezione intitolata ``AGGIUNGERE DISCHETTI DI UTILITÀ"

Attualmente la procedura per compilare il kernel è descritta nella documentazione che accompagna i sorgenti dello stesso. È abbastanza semplice, incominciate a guardare in /usr/src/linux. Attenti che se avete problemi nel compilare il kernel, allora probabilmente è meglio che non tentiate di creare un disco di boot/root.

3.3 Device

La directory /dev, che contiene dei file speciali per tutti i device che devono essere usati dal sistema, è d'obbligo per qualsiasi sistema Linux. Questa directory è una directory normale, e può essere creata con il comando mkdir nel modo usuale. I file speciali dei device, però, devono essere creati in un modo particolare, usando il comando mknod.

C'è anche una via più semplice, comunque - copiare la vostra directory /dev esistente, e cancellare i device che non vi servono. L'unica accortezza è che i file devono essere copiati usando l'opzione -R. Così verrà copiata la directory senza tentare di copiare il contenuto dei file. Notate che usare le lettere minuscole, cioè ``-r'', fa una grossa differenza, perché finirete per copiare tutto il contenuto del vostro disco fisso!

Quindi, state attenti, e usate il comando:

        cp -dpR /dev /mnt
assumendo che sia stato eseguito il mount del dischetto in /mnt. L'opzione dp assicura che i link simbolici siano copiati come link (anziché come i file a cui puntano) e che siano conservati gli attributi originali, preservando anche le proprietà.

Se volete farlo con il metodo più difficile, usate ls -l per vedere i numeri `mayor' e `minor' dei device che volete, e createli sul dischetto usando mknod.

Molte distribuzioni includono uno script di shell chiamato MAKEDEV nella directory /dev. Questo script di shell può essere usato per creare i file, ma probabilmente è più facile copiare quelli esistenti, specialmente per un disco destinato al recupero dei sistemi danneggiati.

In qualunque modo venga copiata la directory, è bene controllare che ogni device speciale di cui avete bisogno sia stato copiato nel dischetto. Per esempio, Ftape usa i device per i nastri, quindi avete bisogno di copiarli tutti.

3.4 Directory

È possibile usare solamente le directory /dev, /proc e /etc per far funzionare un sistema Linux. Non sono sicuro - non l'ho mai provato. Comunque un ragionevole set minimo di directory è il seguente:

/dev

Richiesta per motivi di I/O con i device

/proc

Richiesta dal comando ps

/etc

File di configurazione del sistema

/bin

Eseguibili e utility per il sistema

/lib

Shared libraries per il supporto run-time

/mnt

Un ``mount point'' per la gestione di un disco in generale

/usr

Utility e applicazioni generali

Notate che la struttura delle directory presentata qui è da usare solo nel disco di root. Fate riferimento al Linux File System Standard per maggiori informazioni su come i file system dovrebbero essere strutturati su un sistema Linux ``standard''.

Quattro di queste directory possono essere create molto facilmente:

Le rimanenti 3 directory sono descritti nelle sezione seguenti.

/etc

Questa directory deve contenere un certo numero di file di configurazione. Nella maggior parte dei sistemi, questi possono essere suddivisi in 3 gruppi:

I file che non sono essenziali possono essere identificati con il comando:

        ls -ltru
Questo lista in ordine inverso i file che sono stati modificati ultimamente (dal più recente al più vecchio), quindi se ci sono file che non vengono usati, questi possono essere tralasciati in un eventuale disco di root.

Sui miei dischi di root, io ho al massimo 15 file di configurazione. Questo riduce il mio lavoro con questi tre insiemi di file:

A parte questo, ho veramente bisogno di solo 2 file, e ciò che contengono è sorprendentemente poco.

inittab dovrebbe essere a posto così com'è, a meno che non vogliate essere sicuri che gli utenti non possano connettersi attraverso le porte seriali. Per prevenire questo, togliete i commenti a tutte le righe con /etc/getty che includono ttys o ttyS alla fine della riga. Lasciate però le porte tty altrimenti non potrete collegarvi tramite la console.

inittab definisce cosa il sistema eseguirà in varie situazioni incluso l'inizio della sessione, la chiusura, il passaggio a un modo multi-utente. Bisogna controllare attentamente che i comandi passati a inittab siano presenti e nella directory corretta. Se inserite i vostri comandi nel vostro dischetto di recupero usando il listato della directory di esempio di questo HOWTO, e poi copiate il vostro inittab nel dischetto di recupero senza controllare, allora avrete grosse possibilità che qualcosa vada storto, perché metà delle righe nell'inittab faranno riferimento a programmi inesistenti o residenti in directory sbagliate.

Molti programmi non possono essere spostati da una directory a un'altra altrimenti non riuscriranno a funzionare correttamente. Per esempio sul mio sistema, /etc/shutdown chiama il comando /etc/reboot. Se sposto reboot in /bin/reboot, e poi chiamo il comando shutdown, questo fallirà, perché non può trovare il file reboot.

Per il resto, copiate semplicemente tutti i file di testo nella vostra directory /etc, più gli eseguibili nella directory /etc di cui non potete essere sicuri se vi serviranno. Come guida, consultate la lista nella sezione ``Listato della directory di un Root Disk usando ls-lR'' - questo è quello che io ho, così probabilmente sarà sufficiente per voi se copiate solo questi file.

In pratica, un solo file rc è restrittivo; molti sistemi ora usano una directory /etc/rc.d contenente gli script di shell, ma è probabilmente più semplice copiare la directory inittab e /etc/rc.d dal vostro sistema esistente, e controllare poi gli script di shell per togliere quelle parti che non servono in un sistema che partirà da dischetto.

/bin

Ecco una directory adatta a contenere tutte le utility extra che vi servono per avere a disposizioni le funzionalità di base; utility come ls, mv, cat, dd ecc. Andate alla sezione intitolata ``Esempio di ls-lR su un disco di Boot/Root'' per una lista di file che io ho messo nella mia directory /bin del mio disco di boot/root. Noterete che non contengono utility per recuparare i backup, come cpio, tar, gzip etc. Questo perché io ho messo queste utility su un dischetto separato, per salvare spazio sul disco di root/boot. Una volta che ho fatto partire il sistema dal mio disco di root/boot, esso si copia in memoria come ramdisk lasciando il disk drive libero per un altro dischetto: il dischetto utility! Di solito io ne faccio il mount in /usr.

La creazione di un disco di utility è descritta successivamente nella sezione intitolata ``Aggiungere un Dischetto di Utility''.

/lib

Due librerie sono necessarie per il funzionamento di molte utility sotto Linux:

Se non sono nella directory /lib allora il sistema non sarà in grado di partire. Se siete fortunati potreste vedere un messaggio di errore che vi dice perché.

Queste dovrebbero essere presenti nella vostra directory /lib. Notate che libc.so.4 può essere un link simbolico a un libreria libc con la versione nel nome del file. Se usate il comando:

        ls -l /lib
dovreste vedere qualcosa del genere:
        libc.so.4 -> libc.so.4.5.21

In questo caso, la libreria libc che vi serve è la libc.so.4.5.21.

3.5 LILO

Introduzione

Un dischetto di root/boot perché sia utilizzabile, deve essere in grado di eseguire il boot. Per ottenere ciò, la via più semplice (forse l'unica?) è quella di installare un boot loader, che è una parte di codice eseguibile salvata sul settore 0, cilindro 0 del disco. Andate alla sezione intitolata ``Dischetti di Boot'' per saperne di più sui processi di boot.

LILO è un boot loader disponibile su ogni Linux site. Permette di configurare il boot loader, compreso:

Esempio di Configurazione di LILO

È un modo molto conveniente per specificare come il kernel deve comportarsi al momento del boot. Il mio file di configurazione per LILO 0.15 sul disco di root/boot è:


boot = /dev/fd0
install = ./mnt/boot.b
map = ./mnt/lilo.map
delay = 50
message = ./mnt/lilo.msg
timeout = 150
compact
image = ./mnt/zImage 
        ramdisk = 1440
        root = /dev/fd0

Notate che boot.b, lilo.msg e il kernel devono essere copiati sul dischetto usando un comando del tipo:

cp /boot/boot.b ./mnt

Se questo non viene fatto, LILO non potrà essere eseguito correttamente durante il boot se l'hard disk non è disponibile, e c'è da perdere tempo nel creare un dischetto di salvezza che richieda un hard disk per partire.

Io eseguo LILO con il comando:

        /sbin/lilo -C <configfile>

Lo eseguo da una directory contenente la directory mnt nella quale ho ``messo'' il disco. Questo significa che sto dicendo a LILO di installare un boot loader nel device di boot (/dev/fd0 in questo caso), di eseguire il boot del kernel nella directory principale del disco.

Ho anche specificato che voglio che il root device sia il dischetto, e che voglio un RAM disk di 1440 blocchi da 1K, la stessa grandezza del dischetto. Siccome ho creato un dischetto con un file system di tipo ext2, ho fatto tutto ciò che dovevo fare affinché il sistema usi come root device il ramdisk, e copi il contenuto del dischetto in quest'ultimo.

Le caratteristiche di un ram disk sono descritte più approfonditamente nella sezione intitolata ``RAM DISK E SISTEMI BOOT/ROOT''.

È anche utile considerare la possibilità di usare il parametro ``singolo'' per fare in modo che Linux esegua il boot in modalità utente-singolo. Questo può essere utile per prevenire la connessione di utenti attraverso le porte seriali.

Uso inoltre le opzioni ``DELAY'' ``MESSAGE'' e ``TIMEOUT'' in modo che quando il sistema parte dal disco, LILO mi darà l'opportunità di inserire dei comandi da passare al kernel. Non ne ho bisogno ora come ora, ma potrebbe tornarmi utile se volessi usare un'altro root device o eseguire il mount di un file system in sola lettura.

Il file di messaggio che io uso è così fatto:

Linux Boot/Root Diskette
========================
 
Inserisci un linea di comando del tipo:

      zImage [ command-line options]

Se non scrivi niente linux partira` dopo 15 secondi.

Mi ricorda semplicemente quali sono le mie scelte.

I lettori sono invitati a leggere la documentazione di LILO attentamente prima di tentare di installare qualcosa. È facile rovinare le partizioni se usate il parametro ``boot ='' in modo sbagliato. Se non siete esperti non usate LILO finché non siete sicuri di avere capito e avete controllato 3 volte i vostri parametri.

Notate che dovete rieseguire lilo ogni volta che cambiate kernel, così LILO può settare la sua mappa dei file per descrivere correttamente il nuovo file del kernel. È di fatto possibile sostituire il file del kernel con uno quasi identico senza rieseguire LILO, ma è molto meglio non rischiare - se cambiate kernel, rieseguite LILO.

Rimuovere LILO

Finché sono sull'argomento LILO è bene che vi dica un'altra cosa: se avete installato lilo su un drive contenente DOS, potete sempre ripristinare il boot sector con il comando:

        FDISK /MBR

dove MBR sta per ``Master Boot Record''. Alcuni non vedono di buon occhio questo metodo, però funziona.

Opzioni Utili di LILO

LILO ha molte opzioni utili le quali sono difficili da ricordare quando si deve creare un disco di boot:


Avanti Indietro Indice