Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > media > main-release > by-pkgid > e05c4514608e650af9b28d9be1d35a18 > files > 176

howto-html-it-10.1-4mdv2008.1.noarch.rpm

<!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: FAQ</TITLE>
 <LINK HREF="Bootdisk-HOWTO-6.html" REL=next>
 <LINK HREF="Bootdisk-HOWTO-4.html" REL=previous>
 <LINK HREF="Bootdisk-HOWTO.html#toc5" REL=contents>
</HEAD>
<BODY>
<A HREF="Bootdisk-HOWTO-6.html">Avanti</A>
<A HREF="Bootdisk-HOWTO-4.html">Indietro</A>
<A HREF="Bootdisk-HOWTO.html#toc5">Indice</A>
<HR>
<H2><A NAME="s5">5.</A> <A HREF="Bootdisk-HOWTO.html#toc5">FAQ</A></H2>


<H2><A NAME="ss5.1">5.1</A> <A HREF="Bootdisk-HOWTO.html#toc5.1">D. Come creo un boot disk con il driver XXX?</A>
</H2>

<P>Il modo pi&ugrave; semplice &egrave; quello di prendere uno dei kernel 
precompilati distribuiti con la Slackware dal pi&ugrave; vicino
mirror site. I kernel della Slackware sono generici e includono
il numero maggiore di driver per tutti i device possibili,
e quindi se avete un controller SCSI o IDE, &egrave; probabile che
il driver adatto sia incluso nel kernel della Slackware.</P>
<P>Andate nella directory <CODE>a1</CODE> e selezionate il kernel IDE o SCSI
a seconda del controller che avete. Controllate il file
<CODE>xxxxkern.cfg</CODE> per il kernel scelto e controllate quali driver sono
stati inclusi nel kernel. Se il device che volete &egrave; in quella lista,
allora il kernel corrispondente dovrebbe essere in grado di far 
partire il vostro computer. Scaricate il file <CODE>xxxxkern.tgz</CODE> e
copiatelo nel vostro disco di boot che &egrave; descritto sopra
nella sezione su come costruire un disco di boot.</P>
<P>Dovete poi controllare il root device nel kernel, usando il
comando rdev:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
        rdev zImage 
</PRE>
</CODE></BLOCKQUOTE>

Rdev vi mostrer&agrave; il root device corrente nel kernel. Se questo non
&egrave; lo stesso che voi volete, allora usate rdev per cambiarlo.
Per esempio, il kernel che io ho provato era impostato su <CODE>/dev/sda2</CODE>,
ma la mia partizione scsi root &egrave; <CODE>/dev/sda8</CODE>. Per usare un disco
root, dovete usare questo comando:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
        rdev zImage /dev/fd0
</PRE>
</CODE></BLOCKQUOTE>

Se volete sapere come costruire un disco root tipo Slackware,
sappiate che questo non &egrave; un argomento coperto da questo HOW-TO
perch&eacute; fuori dallo scopo per cui &egrave; stato fatto questo documento,
quindi vi suggerisco di leggere la Linux Install Guide o di
prendervi una distribuzione slackware. Consulate la sezione
intitolata ``Referenze'' per saperne di pi&ugrave;.</P>

<H2><A NAME="ss5.2">5.2</A> <A HREF="Bootdisk-HOWTO.html#toc5.2">D. Come aggiornare il mio disco di boot con un nuovo kernel?</A>
</H2>

<P>Copiate il kernel sul vostro disco di boot usando il comando dd
per un disco di boot senza file system, o il comando cp
per un disco boot/root. Fate riferimento alla sezione intitolata
``Boot'' per maggiori dettagli.</P>

<H2><A NAME="ss5.3">5.3</A> <A HREF="Bootdisk-HOWTO.html#toc5.3">D.  Come tolgo LILO in modo da usare il DOS per eseguire il   boot del DOS nuovamente?</A>
</H2>

<P>Questa non &egrave; propriamente un argomento riguardante i dischi di boot,
ma &egrave; fatta cos&igrave; spesso... La risposta &egrave;, usate il comando DOS:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
        FDISK /MBR
</PRE>
</CODE></BLOCKQUOTE>

MBR sta per Master Boot Record, e rimpiazza il boot sector con
uno di tipo DOS, senza toccare la tavola delle partizioni.
Alcuni non sono d'accordo con questo metodo, ma anche l'autore 
del LILO, Werner Almesberger, lo suggerisce. &Egrave; semplice e funziona.</P>
<P>Potete usare anche il comando dd per copiare il backup salvato
dal LILO del boot sector vecchio sul boot sector nuovo - fate
riferimento alla documentazione del LILO se intendete usare questo
metodo.</P>

<H2><A NAME="ss5.4">5.4</A> <A HREF="Bootdisk-HOWTO.html#toc5.4">D. Come posso eseguire il boot se ho perso il mio kernel _E_ il mio disco di boot?</A>
</H2>

<P>Se non avete un boot disk, allora la cosa pi&ugrave; semplice da fare &egrave;
procurarsi un kernel adatto dalla Slackware come descritto prima
nella sezione ``Come creo un disco di boot con il driver XXX?''.
Potete quindi far partire il computer usando questo kernel, e poi
riparare qualunque danno sia successo.</P>

<P>Il kernel che avete preso potrebbe non avere il root device
settato con il tipo di disco e la partizione che voi volete.
Per esempio, i kernel generici della Slackware per gli scsi
hanno il root device settato a /dev/sda2, quando, invece, la
mia partizione Linux si trova in /dev/sda8. In questo caso il root
device del kernel deve essere cambiato.</P>
<P>Potete cambiare il root device e i settaggi del ramdisk nel kernel
anche se tutto ci&ograve; che avete &egrave; un kernel, e qualche altro sistema
operativo come il DOS.</P>
<P>Rdev cambia i parametri del kernel cambiando i valori in appositi
punti del file immagine del kernel, in modo che potete fare lo stesso
usando un semplice hex editor disponibile su qualunque sistema 
voi state usando - per esempio le Norton Utilities Disk Editor sotto
DOS. Poi dovete controllare e se necessario, cambiare i valori
nel kernel in questi punti:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
0x01F8  Low byte della grandezza del RAMDISK 
0x01F9  High byte della grandezza del RAMDISK 
0x01FC  Root minor device number - vedi sotto
0X01FD  Root major device number - vedi sotto
</PRE>
</CODE></BLOCKQUOTE>

La grandezza di un ramdisk &egrave; il numero di blocchi di un ramdisk
da creare. Se volete eseguire il boot da un disco root allora
settatelo al decimale 1440, o 0x05A0, oltre ad impostare l'offset
0x01F8 a 0xA0 e l'offset 0x01F9 a 0x05.
Questo allocher&agrave; sufficiente memoria per un disco da 1.4Mb.</P>
<P>I numeri maggiori e minori dei device devono essere impostati 
sul device su cui voi volete che il root filesystem sia ``mountato''.
Alcuni valori utili potrebbero essere:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
device          maggiore minore
/dev/fd0            2     0   primo floppy drive
/dev/hda1           3     1   partizione 1 sul primo drive IDE 
/dev/sda1           8     1   partizione 1 sul primo drive scsi 
/dev/sda8           8     8   partizione 8 sul primo drive scsi 
</PRE>
</CODE></BLOCKQUOTE>

Una volta che avete settato questi valori, potete scrivere il file
su un dischetto usando o il Norton Utilities Disk Editor, o
un programma chiamato <CODE>rawrite.exe</CODE>. Questo programma &egrave; incluso
in molte distribuzioni, inclusa la distribuzione SLS e la Slackware.
&Egrave; un programma DOS che scrive un file su un disco vergine (``raw''),
partendo dal boot sector, invece di scriverlo sul file system.
Se usate le Norton Utilities, allora dovete scrivere il file
su un disco fisico partendo dall'inizio del disco.</P>

<H2><A NAME="ss5.5">5.5</A> <A HREF="Bootdisk-HOWTO.html#toc5.5">D. Come posso fare pi&ugrave; copie di un dischetto boot/root?</A>
</H2>

<P>Non &egrave; mai desiderabile avere un solo set di disci di recupero;
2 o 3 copie dovrebbero essere mantenute nel caso che una non fosse
leggibile.</P>
<P>La via pi&ugrave; semplice per creare delle copie di qualunque dischetto,
inclusi i dischi di boot/root, &egrave; di usare il comando dd per
copiare il contenuto del dischetto originale su un file sul vostro
hard disk, e poi usare lo stesso comando per copiare il file su
un nuovo dischetto. Notate che non avete, e non dovreste avere,
bisogno di eseguire il mount dei dischi, perch&eacute; dd scrive
in maniere cruda sul device.</P>
<P>Per copiare l'originale, usate il comando:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
        dd if=device of=nomefile
        dove    device e` il nome del device del dischetto
        e       nomefile e` il nome di un file su cui volete copiarlo
</PRE>
</CODE></BLOCKQUOTE>

Per esempio, per copiare da <CODE>/dev/fd0</CODE> su un file temporaneo 
<CODE>/tmp/diskette.copy</CODE>, userei il comando:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
        dd if=/dev/fd0 of=/tmp/diskette.copy
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Omettendo il parametro ``count'', come abbiamo fatto noi ora,
significa che il dischetto intero di 2880 blocchi sar&agrave; copiato.</P>
<P>Per copiare il file risultante su un nuovo dischetto, inserite il
nuovo dischetto e usate il comando inverso:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
        dd if=nomefile of=device
</PRE>
</CODE></BLOCKQUOTE>

Notate che il discorso precedente assume che voi abbiate un solo
floppy drive. Se ne avete due dello stesso tipo, potete copiare il
dischetto usando il comando:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
        dd if=/dev/fd0 of=/dev/fd1
</PRE>
</CODE></BLOCKQUOTE>
</P>

<H2><A NAME="ss5.6">5.6</A> <A HREF="Bootdisk-HOWTO.html#toc5.6">D. Come posso eseguire il boot senza scrivere ogni volta  ``ahaxxxx=nn,nn,nn''?</A>
</H2>

<P>Quando un device non pu&ograve; essere riconosciuto automaticamente dal
kernel, &egrave; necessario passargli un stringa di comando, come:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
        aha152x=0x340,11,3,1
</PRE>
</CODE></BLOCKQUOTE>

Questo parametro pu&ograve; essere passato in molti modi usando LILO:
<UL>
<LI>Scrivendolo sulla linea di comando ogni volta che si esegue il 
boot del sistema, via LILO. Ci&ograve; &egrave; comunque noioso.</LI>
<LI>Usando l'opzione di LILO ``lock'', in modo da memorizzare la
linea di comando come la linea di comando di default; cos&igrave; facendo
LILO user&agrave; la stessa linea di comando ogni volta.</LI>
<LI>Usando l'opzione APPEND nel file di configurazione del LILO.
Notate che la linea di comando deve essere racchiusa da virgolette.</LI>
</UL>
</P>
<P>Per esempio, una riga di comando d'esempio che usa il parametro 
lock, dovrebbe essere:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
        zImage  aha152x=0x340,11,3,1 root=/dev/sda1 lock
</PRE>
</CODE></BLOCKQUOTE>

Questo dovrebbe passare la stringa per il device al kernel,
oltre a settare il root device su <CODE>/dev/sda1</CODE> e salva l'intero
comando per riutilizzarlo in futuro.</P>
<P>Un esempio dell'uso di APPEND &egrave;:
<BLOCKQUOTE><CODE>
<PRE>
        APPEND = "aha152x=0x340,11,3,1"
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Notate che il parametro NON viene incluso nelle virgolette.</P>
<P>Notate inoltre che per la stringa che passate al kernel usando
il parametro APPEND, bisogna che il kernel stesso abbia il supporto
per quel comando. In caso contrario dovrete ricompilare il 
kernel con il supporto per il device richiesto.
Per i dettagli su come ricompilare il kernel, cd su <CODE>/usr/src/linux</CODE>
e leggete il file <CODE>README</CODE>, e leggete le LINUX FAQ e l'Installation
HOWTO. Alternativamente potete ottenere un kernel generico
che faccia al caso vostro.</P>
<P>I lettori sono fortemente invitati a leggere la documentazione del
LILO prima della sua installazione. Un uso incauto del parametro
``BOOT'' pu&ograve; danneggiare le partizioni.</P>

<H2><A NAME="ss5.7">5.7</A> <A HREF="Bootdisk-HOWTO.html#toc5.7">D. Come creo un filesystem su un disco RAM pi&ugrave; capiente?</A>
</H2>

<P>Un filesystem su un disco RAM &egrave; un filesystem residento su un disco
in memoria che ha una capacit&agrave; maggiore del disco di root dal quale
&egrave; stato caricato. Questo pu&ograve; essere molto utile quando si usa Ftape,
che richiede un controllo esclusivo del controller del floppy disk.</P>
<P>Due cose sono richieste: creare un filesystem pi&ugrave; capiente
sul disco di root e poi applicare una ``patch'' al kernel in modo
che sia in grado di caricare blocchi oltre la fine del dischetto.</P>
<P>Due sono i metodi possibili:
<UL>
<LI>Usare il parametro ``blocks'' del programma e2fsck per specificare
quanto occupa il filesystem che volete non disco RAM. Per esempio: 
<BLOCKQUOTE><CODE>
<PRE>
        mke2fs /dev/fd0 3000
</PRE>
</CODE></BLOCKQUOTE>

creer&agrave; un filesystem su dischetto di 3000 blocchi da 1Kb.
Il dischetto ha solo 1440 blocchi, ma mke2fs funzioner&agrave;
correttamente lo stesso. L'importante &egrave; non usare pi&ugrave;
di 1440 blocchi per i dati (permettendo l'uso di blocchi
come ``inodes'' o riservati etc).</LI>
<LI>Creare una partizione sul vostro hard-disk capiente quanto
il filesystem che intendete creare sul disco RAM. Poi creare
un filesystem su questa partizione e mettervi i file che desiderate.
Poi usate il comando dd per copiare  i primi 1440 blocchi sul
dischetto, e poi controllare che non sia rimasto nessun file non copiato.
Per esempio:

<BLOCKQUOTE><CODE>
<PRE>
        dd if=/dev/hdb of=/dev/fd0 bs=1024 count=1440
        dd if=/dev/hdb of=tailpart bs=1024 skip=1440
        cmp -l tailparm /dev/zero
</PRE>
</CODE></BLOCKQUOTE>
</LI>
</UL>

Scegliete una delle due; personalmente io preferisco la prima -
sembra pi&ugrave; facile e pi&ugrave; sicura.</P>
<P>La seconda cosa richiesta per avere un filesystem di maggior capienza
&egrave; di far fermare il kernel alla fine fisica del disco quando
tenta di caricare il dischetto di root nel disco RAM. Per fare
questo bisogna apportare una piccola modifica al kernel nel
driver per il disco RAM, che dovrebbe essere situato in
<CODE>/usr/src/linux/drivers/block/ramdisk.c</CODE>. Il seguente ``patch''
&egrave; stato fatto da Bruce Elliot. &Egrave; da applicare al kernel 1.2.0,
ma dovrebbe essere facile applicarlo anche ai kernel pi&ugrave;
recenti.  </P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
=================================================================
X--- ramdisk.c~ Mon Jan 23 13:04:09 1995
X+++ ramdisk.c  Mon May 29 00:54:52 1995
X@@ -113,6 +113,7 @@
X               (struct ext2_super_block *)&amp;sb;
X       int             block, tries;
X       int             i = 1;
X+      int             fblocks;
X       int             nblocks;
X       char            *cp;
X       
X@@ -168,12 +169,16 @@
X                                       nblocks, rd_length >> BLOCK_SIZE_BITS);
X                       return;
X               }
X-              printk("RAMDISK: Loading %d blocks into RAM disk", nblocks);
X+              fblocks = blk_size[MAJOR(ROOT_DEV)][MINOR(ROOT_DEV)];
X+              if (fblocks > nblocks)
X+                      fblocks = nblocks;
X+              printk(``RAMDISK: Loading %d blocks into %d block filesystem "
X+                                      "in RAM disk", fblocks, nblocks);
X 
X               /* We found an image file system.  Load it into core! */
X               cp = rd_start;
X-              while (nblocks) {
X-                      if (nblocks > 2) 
X+              while (fblocks) {
X+                      if (fblocks > 2) 
X                               bh = breada(ROOT_DEV, block, BLOCK_SIZE, 0,  PAGE_SIZE);
X                       else
X                               bh = bread(ROOT_DEV, block, BLOCK_SIZE);
X@@ -184,7 +189,7 @@
X                       }
X                       (void) memcpy(cp, bh->b_data, BLOCK_SIZE);
X                       brelse(bh);
X-                      if (!(nblocks-- &amp; 15)) printk(``.'');
X+                      if (!(fblocks-- &amp; 15)) printk(``.'');
X                       cp += BLOCK_SIZE;
X                       block++;
X                       i++;
=================================================================
</PRE>
</CODE></BLOCKQUOTE>

Con questa modifica, il kernel si fermer&agrave; nel caricare
alla fine fisica del disco, lasciando un filesystem pi&ugrave;
capiente del disco.</P>
<P>Alcuni avvertimenti: io sono stato in grado di creare in questo modo
un filesystem su un disco RAM di 3500 blocchi, ma provando con 3600
o pi&ugrave; il kernel collassava con un errore come ``fixup table
corrupt''. Non sono riuscito a evitare questa cosa, ma in ogni caso
3500 blocchi mi sembrano pi&ugrave; che sufficienti.</P>

<H2><A NAME="ss5.8">5.8</A> <A HREF="Bootdisk-HOWTO.html#toc5.8">D. All'atto del boot, rivevo un errore tipo <CODE>A: cannot execute B</CODE>.</A>
Perch&eacute;?</H2>

<P>Ci sono diversi casi di programmi che sono chiamati da altri programmi.
Questi casi non avvengono sempre, ma possono spiegare perch&eacute;
un eseguibile apparentemente non pu&ograve; essere trovato su un sistema
anche se potete vedere che &egrave; effettivamente presente.
Potete vedere se un programma chiama un altro programma usando il comando
``strings'' e filtrando l'output attreverso il programma grep.  </P>
<P>Esempi conosciuti sono:
<UL>
<LI>Shutdown in diversi versioni chiama <CODE>/etc/reboot</CODE>, quindi
<CODE>reboot</CODE> deve essere posto nella directory <CODE>/etc</CODE>.</LI>
<LI>Init ha causato problemi per almeno una persona, con il kernel che non
riusciva a trovarlo. </LI>
</UL>

Per risolvere questi problemi, spostate i programma nelle directory
corrette, o cambiate i file di configurazione (per esempio <CODE>inittab</CODE>)
per puntare alla directory corrette. Se siete in dubbio, mettete i
programmi nelle stesse directory in cui sono sul vostro
disco fisso, e usate lo stesso <CODE>inittab</CODE> e i file contenuti in
<CODE>/etc/rc.d</CODE>, cos&igrave; come appaiono sul vostro disco fisso.</P>

<HR>
<A HREF="Bootdisk-HOWTO-6.html">Avanti</A>
<A HREF="Bootdisk-HOWTO-4.html">Indietro</A>
<A HREF="Bootdisk-HOWTO.html#toc5">Indice</A>
</BODY>
</HTML>