<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21"> <TITLE>Linux Bootdisk HOWTO: Componenti</TITLE> <LINK HREF="Bootdisk-HOWTO-4.html" REL=next> <LINK HREF="Bootdisk-HOWTO-2.html" REL=previous> <LINK HREF="Bootdisk-HOWTO.html#toc3" REL=contents> </HEAD> <BODY> <A HREF="Bootdisk-HOWTO-4.html">Avanti</A> <A HREF="Bootdisk-HOWTO-2.html">Indietro</A> <A HREF="Bootdisk-HOWTO.html#toc3">Indice</A> <HR> <H2><A NAME="s3">3.</A> <A HREF="Bootdisk-HOWTO.html#toc3">Componenti</A></H2> <H2><A NAME="ss3.1">3.1</A> <A HREF="Bootdisk-HOWTO.html#toc3.1">File System</A> </H2> <P>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 <CODE>/usr/src/linux/drivers/block/ramdisk.c</CODE> e cercate la parola ``ext2''.</P> <P>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). <BLOCKQUOTE><CODE> <PRE> mke2fs -m 0 /dev/fd0 </PRE> </CODE></BLOCKQUOTE> Il comando mke2fs riconoscerà automaticamente lo spazio libero e si configurerà automaticamente da solo. Non c'è quindi bisogno di nessun parametro. </P> <P>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: <BLOCKQUOTE><CODE> <PRE> mount -t ext2 /dev/fd0 /<mount point> </PRE> </CODE></BLOCKQUOTE> dovrebbe funzionare.</P> <H2><A NAME="ss3.2">3.2</A> <A HREF="Bootdisk-HOWTO.html#toc3.2">Kernel</A> </H2> <H3>Personalizzare il Kernel</H3> <P>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.</P> <P>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.</P> <P>Ci sono due modi per ridurre la grandezza del kernel: <UL> <LI>Compilando il kernel con un minimo di supporto per il sistema desiderato. Questo significa lasciare fuori qualcosa di cui non avete bisogno. Il supporto per il networking è una buona cosa da lasciare fuori, come il supporto per i device di cui non avete bisogno quando usate il vostro sistema root/boot.</LI> <LI>Compressandolo, usando l'opzione per il kernel inserita nel makefile: <BLOCKQUOTE><CODE> <PRE> make zImage </PRE> </CODE></BLOCKQUOTE> Fate riferimento alla documentazione inclusa nei sorgenti del kernel per una informazione più aggiornata su come compilare un kernel compresso. Notate che i sorgenti del kernel sono generalmente in <CODE>/usr/src/linux</CODE>.</LI> </UL> </P> <P>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.</P> <P>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.</P> <P>È certamente preferibile mantenere una copia della stessa utility, così non dovrete perdere tempo installando versioni che non possono leggere i vostri backup.</P> <P>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À"</P> <P>Attualmente la procedura per compilare il kernel è descritta nella documentazione che accompagna i sorgenti dello stesso. È abbastanza semplice, incominciate a guardare in <CODE>/usr/src/linux</CODE>. Attenti che se avete problemi nel compilare il kernel, allora probabilmente è meglio che non tentiate di creare un disco di boot/root.</P> <H2><A NAME="ss3.3">3.3</A> <A HREF="Bootdisk-HOWTO.html#toc3.3">Device</A> </H2> <P>La directory <CODE>/dev</CODE>, 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.</P> <P>C'è anche una via più semplice, comunque - copiare la vostra directory <CODE>/dev</CODE> esistente, e cancellare i device che non vi servono. L'unica accortezza è che i file devono essere copiati usando l'opzione <CODE>-R</CODE>. Così verrà copiata la directory senza tentare di copiare il contenuto dei file. Notate che usare le lettere minuscole, cioè ``<CODE>-r</CODE>'', fa una grossa differenza, perché finirete per copiare tutto il contenuto del vostro disco fisso!</P> <P>Quindi, state attenti, e usate il comando:</P> <P> <BLOCKQUOTE><CODE> <PRE> cp -dpR /dev /mnt </PRE> </CODE></BLOCKQUOTE> 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à.</P> <P>Se volete farlo con il metodo più difficile, usate <CODE>ls -l</CODE> per vedere i numeri `mayor' e `minor' dei device che volete, e createli sul dischetto usando mknod.</P> <P>Molte distribuzioni includono uno script di shell chiamato MAKEDEV nella directory <CODE>/dev</CODE>. 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.</P> <P>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.</P> <H2><A NAME="ss3.4">3.4</A> <A HREF="Bootdisk-HOWTO.html#toc3.4">Directory </A> </H2> <P>È possibile usare solamente le directory <CODE>/dev</CODE>, <CODE>/proc</CODE> e <CODE>/etc</CODE> per far funzionare un sistema Linux. Non sono sicuro - non l'ho mai provato. Comunque un ragionevole set minimo di directory è il seguente: <DL> <DT><B><CODE>/dev</CODE></B><DD><P>Richiesta per motivi di I/O con i device</P> <DT><B><CODE>/proc</CODE></B><DD><P>Richiesta dal comando ps</P> <DT><B><CODE>/etc</CODE></B><DD><P>File di configurazione del sistema</P> <DT><B><CODE>/bin</CODE></B><DD><P>Eseguibili e utility per il sistema</P> <DT><B><CODE>/lib</CODE></B><DD><P>Shared libraries per il supporto run-time</P> <DT><B><CODE>/mnt</CODE></B><DD><P>Un ``mount point'' per la gestione di un disco in generale</P> <DT><B><CODE>/usr</CODE></B><DD><P>Utility e applicazioni generali </P> </DL> </P> <P>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''.</P> <P>Quattro di queste directory possono essere create molto facilmente: <UL> <LI>/dev è descritta sopra nella sezione intitolata DEVICE.</LI> <LI>/proc /proc necessita solo di esistere :-). Una volta che la directory è creata con il comando mkdir, non ha più bisogno di niente.</LI> <LI>Per quanto riguarda le altre, /mnt e /usr sono incluse in queste directory soltanto come ``mount point'' da usare dopo che il sistema root/boot è partito. Ancora una volta, queste directory hanno solo bisogno di essere create.</LI> </UL> </P> <P>Le rimanenti 3 directory sono descritti nelle sezione seguenti.</P> <H3><CODE>/etc</CODE></H3> <P>Questa directory deve contenere un certo numero di file di configurazione. Nella maggior parte dei sistemi, questi possono essere suddivisi in 3 gruppi: <UL> <LI>I file richiesti in ogni caso, p.e. rc, <CODE>fstab</CODE>, <CODE>passwd</CODE>.</LI> <LI>I file che potrebbero essere richiesti, ma nessuno è troppo sicuro.</LI> <LI>Junk that crept in. </LI> </UL> </P> <P>I file che non sono essenziali possono essere identificati con il comando: <BLOCKQUOTE><CODE> <PRE> ls -ltru </PRE> </CODE></BLOCKQUOTE> 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.</P> <P>Sui miei dischi di root, io ho al massimo 15 file di configurazione. Questo riduce il mio lavoro con questi tre insiemi di file: <UL> <LI>Quelli necessari alla configurazione per un sistema boot/root: <BLOCKQUOTE><CODE> <PRE> rc system startup script fstab lista dei file systems di cui fare il mount inittab parametri per il processo di init - il primo processo a partire al boot del sistema. </PRE> </CODE></BLOCKQUOTE> </LI> <LI>Quelli che dovrei avere per un sistema boot/root: <BLOCKQUOTE><CODE> <PRE> passwd lista delle login shadow password </PRE> </CODE></BLOCKQUOTE> Queste dovrebbero essere presenti in un sistema sicuro in modo tale che eseguendo il boot dal dischetto siano rigettate le login non abilitate. </LI> <LI>I rimanenti. I precedenti bastano, quindi lasciamo solo questi per il momento.</LI> </UL> </P> <P>A parte questo, ho veramente bisogno di solo 2 file, e ciò che contengono è sorprendentemente poco. <UL> <LI><CODE>rc</CODE> dovrebbe contenere: <BLOCKQUOTE><CODE> <PRE> #!/bin/sh /etc/mount -av /bin/hostname boot_root </PRE> </CODE></BLOCKQUOTE> e non ho bisogno di eseguire hostname - semplicemente risulta più simpatico se lo faccio. Anche mount è necessario solamente, per ora, ad eseguire il mount di <CODE>/proc</CODE> per supportare il comando ps - Linux funziona anche senza hostname.</LI> <LI><CODE>fstab</CODE> dovrebbe essere: <BLOCKQUOTE><CODE> <PRE> /dev/fd0 / ext2 defaults /proc /proc proc defaults </PRE> </CODE></BLOCKQUOTE> Non penso che la prima riga sia veramente necessaria, ma ho trovato che se la lascio fuori, mount non riesce ad eseguire il mount di /proc.</LI> </UL> </P> <P><CODE>inittab</CODE> 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 <CODE>/etc/getty</CODE> che includono ttys o ttyS alla fine della riga. Lasciate però le porte tty altrimenti non potrete collegarvi tramite la console.</P> <P><CODE>inittab</CODE> 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.</P> <P>Molti programmi non possono essere spostati da una directory a un'altra altrimenti non riuscriranno a funzionare correttamente. Per esempio sul mio sistema, <CODE>/etc/shutdown</CODE> chiama il comando <CODE>/etc/reboot</CODE>. Se sposto reboot in <CODE>/bin/reboot</CODE>, e poi chiamo il comando shutdown, questo fallirà, perché non può trovare il file reboot.</P> <P>Per il resto, copiate semplicemente tutti i file di testo nella vostra directory <CODE>/etc</CODE>, più gli eseguibili nella directory <CODE>/etc</CODE> 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.</P> <P>In pratica, un solo file <CODE>rc</CODE> è restrittivo; molti sistemi ora usano una directory <CODE>/etc/rc.d</CODE> contenente gli script di shell, ma è probabilmente più semplice copiare la directory inittab e <CODE>/etc/rc.d</CODE> 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.</P> <H3><CODE>/bin</CODE></H3> <P>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 <CODE>/bin</CODE> 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 <CODE>/usr</CODE>.</P> <P>La creazione di un disco di utility è descritta successivamente nella sezione intitolata ``Aggiungere un Dischetto di Utility''.</P> <H3><CODE>/lib</CODE></H3> <P>Due librerie sono necessarie per il funzionamento di molte utility sotto Linux: <UL> <LI>ld.so</LI> <LI>libc.so.4</LI> </UL> </P> <P>Se non sono nella directory <CODE>/lib</CODE> allora il sistema non sarà in grado di partire. Se siete fortunati potreste vedere un messaggio di errore che vi dice perché.</P> <P>Queste dovrebbero essere presenti nella vostra directory <CODE>/lib</CODE>. Notate che <CODE>libc.so.4</CODE> può essere un link simbolico a un libreria libc con la versione nel nome del file. Se usate il comando: <BLOCKQUOTE><CODE> <PRE> ls -l /lib </PRE> </CODE></BLOCKQUOTE> dovreste vedere qualcosa del genere: <BLOCKQUOTE><CODE> <PRE> libc.so.4 -> libc.so.4.5.21 </PRE> </CODE></BLOCKQUOTE> </P> <P>In questo caso, la libreria libc che vi serve è la libc.so.4.5.21.</P> <H2><A NAME="ss3.5">3.5</A> <A HREF="Bootdisk-HOWTO.html#toc3.5">LILO</A> </H2> <H3>Introduzione</H3> <P>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.</P> <P>LILO è un boot loader disponibile su ogni Linux site. Permette di configurare il boot loader, compreso: <UL> <LI>Quale device deve essere ``montato'' come drive root.</LI> <LI>Se deve essere usato un ramdisk.</LI> </UL> </P> <H3>Esempio di Configurazione di LILO</H3> <P>È 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 è: <BLOCKQUOTE><CODE> <HR> <PRE> 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 </PRE> <HR> </CODE></BLOCKQUOTE> </P> <P>Notate che boot.b, lilo.msg e il kernel devono essere copiati sul dischetto usando un comando del tipo: <BLOCKQUOTE><CODE> <PRE> cp /boot/boot.b ./mnt </PRE> </CODE></BLOCKQUOTE> </P> <P>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.</P> <P>Io eseguo LILO con il comando: <BLOCKQUOTE><CODE> <PRE> /sbin/lilo -C <configfile> </PRE> </CODE></BLOCKQUOTE> </P> <P>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.</P> <P>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.</P> <P>Le caratteristiche di un ram disk sono descritte più approfonditamente nella sezione intitolata ``RAM DISK E SISTEMI BOOT/ROOT''.</P> <P>È 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.</P> <P>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.</P> <P>Il file di messaggio che io uso è così fatto:</P> <P> <BLOCKQUOTE><CODE> <PRE> Linux Boot/Root Diskette ======================== Inserisci un linea di comando del tipo: zImage [ command-line options] Se non scrivi niente linux partira` dopo 15 secondi. </PRE> </CODE></BLOCKQUOTE> </P> <P>Mi ricorda semplicemente quali sono le mie scelte.</P> <P>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 ``<CODE>boot =</CODE>'' 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.</P> <P>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. </P> <H3>Rimuovere LILO</H3> <P>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: <BLOCKQUOTE><CODE> <PRE> FDISK /MBR </PRE> </CODE></BLOCKQUOTE> </P> <P>dove MBR sta per ``Master Boot Record''. Alcuni non vedono di buon occhio questo metodo, però funziona.</P> <H3>Opzioni Utili di LILO</H3> <P>LILO ha molte opzioni utili le quali sono difficili da ricordare quando si deve creare un disco di boot: <UL> <LI>opzioni di linea di comando - potete dare delle opzioni di linea di comando per specificare il root device, la grandezza del ramdisk, parametri per device speciali o altre cose. Se usate l'opzione DELAY=nn nel file di configurazione, LILO si fermerà permettendovi di selezionare un'immagine del kernel con cui eseguire il boot e di passare qualunque opzione vogliate al kernel. Per esempio: <BLOCKQUOTE><CODE> <PRE> zImage aha152x=0x340,11,3,1 ro </PRE> </CODE></BLOCKQUOTE> passa il parametro aha152x al driver per i dischi scsi aha152x (ammesso che il kernel sia stato compilato con il supporto per questi dischi) e chiede che venga eseguito il mount del root file system in sola lettura.</LI> <LI>L'opzione ``lock'' - questa opzione chiede a LILO di salvare la linea di comando che si inserisce come la linea di comando di default da usare in tutti i boot successivi. Questa opzione è particolarmente utile quando avete un device che non può essere riconosciuto automaticamente. Usando l'opzione ``lock'' evitate di inserire i parametri del device ogni volta che accendete il computer. Per esempio: <BLOCKQUOTE><CODE> <PRE> zImage aha152x=0x340,11,3,1 root=/dev/sda8 ro lock </PRE> </CODE></BLOCKQUOTE> </LI> <LI>L'opzione di configurazione APPEND - permette di memorizzare la stringa con i parametri per un device nella configurazione, come alternativa all'opzione ``lock''. Attenti all'uso delle virgolette. Per esempio: <BLOCKQUOTE><CODE> <PRE> APPEND = "aha152x=0x340,11,3,1" </PRE> </CODE></BLOCKQUOTE> </LI> <LI>DELAY - ferma il boot automatico per un determinato tempo, in modo da dare il tempo all'utente di inserire una linea di comando, magari diversa da quella di default.</LI> </UL> </P> <HR> <A HREF="Bootdisk-HOWTO-4.html">Avanti</A> <A HREF="Bootdisk-HOWTO-2.html">Indietro</A> <A HREF="Bootdisk-HOWTO.html#toc3">Indice</A> </BODY> </HTML>