432 lines
17 KiB
XML
432 lines
17 KiB
XML
<?xml version="1.0" encoding="iso-8859-15"?>
|
|
<!--
|
|
The FreeBSD Documentation Project
|
|
$FreeBSD$
|
|
Original revision: 1.18
|
|
-->
|
|
|
|
<chapter id="GEOM">
|
|
<chapterinfo>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Tom</firstname>
|
|
|
|
<surname>Rhodes</surname>
|
|
|
|
<contrib>Scritto da </contrib>
|
|
</author>
|
|
</authorgroup>
|
|
</chapterinfo>
|
|
|
|
<title>GEOM: Framework modulare per la trasformazione del disco</title>
|
|
|
|
<sect1 id="GEOM-synopsis">
|
|
<title>Sinossi</title>
|
|
|
|
<indexterm>
|
|
<primary>GEOM</primary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary>GEOM Disk Framework</primary>
|
|
<see>GEOM</see>
|
|
</indexterm>
|
|
|
|
<para>Questo articolo tratta l'utilizzo dei dischi attraverso la struttura
|
|
GEOM implementata in &os;. Questo include le più importanti
|
|
utility di controllo <acronym
|
|
role="Redundant Array of Inexpensive Disks">RAID</acronym>
|
|
che utilizzano la suddetta struttura per la loro configurazione.
|
|
Questo capitolo non si soffermerà in discussioni approfondite
|
|
su come la struttura GEOM utilizza o controlla gli I/O, il suo
|
|
sottosistema di funzionamento o il codice.
|
|
Queste informazioni sono fornite dalla manpage &man.geom.4; e
|
|
nei suoi vari riferimenti SEE ALSO. Questo capitolo non è nemmeno
|
|
la guida definitiva alla configurazione del <acronym>RAID</acronym>
|
|
Soltanto i dischi<acronym>RAID</acronym> classificati come "supportati
|
|
da GEOM" saranno discussi.</para>
|
|
|
|
<para>Dopo la lettura di questo capitolo saprai:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Quale genere di supporto<acronym>RAID</acronym> è
|
|
disponibile attraverso GEOM.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Come usare le utilities di base per configurare, manutenere,
|
|
e manipolare i vari livelli di <acronym>RAID.</acronym>
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Come creare dei mirror, degli stripe, criptare e connettere dischi
|
|
remoti attraverso l'utilizzo di GEOM.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Come sbrogliare problematiche relative ai dischi connessi
|
|
attraverso GEOM.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Prima di procedere alla lettura di questo capitolo dovresti:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Sapere la meccanica di utilizzo dei dischi da parte di &os;.
|
|
(<xref linkend="disks"/>).</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Sapere come configurare e installare un kernel personalizzato
|
|
sotto &os; (<xref linkend="kernelconfig"/>).</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect1>
|
|
|
|
<sect1 id="GEOM-intro">
|
|
<title>Introduzione a GEOM</title>
|
|
|
|
<para>GEOM permette l'accesso e il controllo alle classi — Master Boot
|
|
Records, <acronym>BSD</acronym> labels, ecc — attraverso l'uso
|
|
di forniture o di di files speciali in <filename
|
|
class="directory">/dev</filename>. Mediante il supporto di vari
|
|
software di configurazione<acronym>RAID</acronym> , GEOM fornisce un
|
|
accesso "trasparente" al sistema operativo
|
|
e alle utilità di sistema.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="GEOM-striping">
|
|
<sect1info>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Tom</firstname>
|
|
|
|
<surname>Rhodes</surname>
|
|
|
|
<contrib>Scritto da </contrib>
|
|
</author>
|
|
|
|
<author>
|
|
<firstname>Murray</firstname>
|
|
|
|
<surname>Stokely</surname>
|
|
</author>
|
|
</authorgroup>
|
|
</sect1info>
|
|
|
|
<title>RAID0 - Striping</title>
|
|
|
|
<indexterm>
|
|
<primary>GEOM</primary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary>Striping</primary>
|
|
</indexterm>
|
|
|
|
<para>Lo striping è un metodo utilizzato per unire gli hard disks in
|
|
un singolo volume. In molti casi, questo si ottiene attraverso dei
|
|
controllers hardware. Il sottosistema GEOM fornisce il supporto software
|
|
per il <acronym>RAID</acronym>0, conosciuto anche come disk
|
|
striping.</para>
|
|
|
|
<para>In un sistema <acronym>RAID</acronym>0, i dati sono tagliati in
|
|
blocchi che vengono "spalmati" su tutti i dischi della catena RAID.
|
|
Invece di aspettare che il sistema scriva un blocco di 256kb su un disco,
|
|
il <acronym>RAID</acronym>0 può scrivere blocchi di 64k ciascuno
|
|
su quattro differenti dischi, offrendo performances I/O migliori. Queste
|
|
performances possono essere ulteriormente migliorate utilizzando
|
|
più controllers per dischi.</para>
|
|
|
|
<para>In ogni "stripe" <acronym>RAID</acronym>0 ogni disco deve essere
|
|
della stessa grandezza degli altri, dal momento che le chiamate I/O sono
|
|
inframezzate per leggere e scrivere su più dischi in
|
|
parallelo.</para>
|
|
|
|
<mediaobject>
|
|
<imageobject>
|
|
<imagedata fileref="geom/striping" align="center"/>
|
|
</imageobject>
|
|
|
|
<textobject>
|
|
<phrase>Disk Striping Illustration</phrase>
|
|
</textobject>
|
|
</mediaobject>
|
|
|
|
<procedure>
|
|
<title>Creazione di uno stripe di dischi ATA non formattati</title>
|
|
|
|
<step>
|
|
<para>Caricare il modulo <filename>geom_stripe</filename>:</para>
|
|
|
|
<screen>&prompt.root; <userinput>kldload geom_stripe.ko</userinput></screen>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Assicurati che esiste una appropriato mount point. Se il volume
|
|
in questione diventerà una partizione di root, allora usa
|
|
temporaneamente un mount point diverso,ad esempio <filename
|
|
class="directory">/mnt</filename>:</para>
|
|
|
|
<screen>&prompt.root; <userinput>mkdir /mnt</userinput></screen>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Determina i nomi dei devices per i dischi che verranno configurati
|
|
in stripe e creali. Ad esempio per configurare in modalità
|
|
stripe 2 dischi <acronym>ATA</acronym>
|
|
<filename>/dev/ad2</filename> e <filename>/dev/ad3</filename>
|
|
non ancora partizionati potresti usare il seguente comando.</para>
|
|
|
|
<screen>&prompt.root; <userinput>gstripe label -v st0 /dev/ad2 /dev/ad3</userinput></screen>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Se questo volume sarà utilizzato come dispositivo di root
|
|
da cui effettuare il boot, allora prima di creare il filesystem devi
|
|
utilizzare il seguente comando:</para>
|
|
|
|
<screen>&prompt.root; <userinput>fdisk -vBI /dev/stripe/st0</userinput></screen>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Crea una tabella delle partizioni sul nuovo volume con in
|
|
seguente comando:</para>
|
|
|
|
<screen>&prompt.root; <userinput>bsdlabel -wB /dev/stripe/st0</userinput></screen>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Questa procedura dovrebbe aver creato altri due device in
|
|
<filename class="directory">/dev/stripe</filename> in aggiunta a
|
|
<devicename>st0</devicename>. Nella fattispecie
|
|
<devicename>st0a</devicename> e <devicename>st0c</devicename>.
|
|
Ora bisogna creare un filesystem nel device
|
|
<devicename>st0a</devicename> utilizzando il comando
|
|
<command>newfs</command> come segue:</para>
|
|
|
|
<screen>&prompt.root; <userinput>newfs -U /dev/stripe/st0a</userinput></screen>
|
|
|
|
<para>Dopo che per qualche secondo vedrete parecchi numeri scorrere
|
|
sullo schermo, la procedura sarà completa. Il volume è
|
|
stato creato ed è pronto per essere montato.</para>
|
|
</step>
|
|
</procedure>
|
|
|
|
<para>Per montare manualmente il dispositivo stripe appena creato usa il
|
|
seguente comando:</para>
|
|
|
|
<screen>&prompt.root; <userinput>mount /dev/stripe/st0a /mnt</userinput></screen>
|
|
|
|
<para>Per montare il filesystem stripe automaticamente all'avvio del
|
|
sistema, inserisci le informazioni del volume nel file
|
|
<filename>/etc/fstab</filename>:</para>
|
|
|
|
<screen>&prompt.root; <userinput>echo "/dev/stripe/st0a /mnt ufs rw 2 2" \</userinput>
|
|
<userinput>>> /etc/fstab</userinput></screen>
|
|
|
|
<para>Il modulo <filename>geom</filename> deve essere caricato contestualmente
|
|
all'avvio del sistema; questo lo si ottiene semplicemente inserendo la
|
|
seguente linea nel file <filename>/boot/loader.conf</filename>:</para>
|
|
|
|
<screen>&prompt.root; <userinput>echo 'geom_stripe_load="YES"' >> /boot/loader.conf</userinput></screen>
|
|
</sect1>
|
|
|
|
<sect1 id="GEOM-mirror">
|
|
<title>RAID1 - Mirroring</title>
|
|
|
|
<indexterm>
|
|
<primary>GEOM</primary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary>Disk Mirroring</primary>
|
|
</indexterm>
|
|
|
|
<para>Il mirroring è una tecnologia utilizzata da molte aziende e
|
|
utenti casalinghi per il salvataggio dei dati senza interruzioni.
|
|
La presenza di un "mirror" significa semplicemente che il disco B replica
|
|
il disco A;oppure che i dischi C e D replicano i dischi A e B.
|
|
Indipendentemente dalla configurazione del disco, l'aspetto importante
|
|
è che le informazioni presenti su un disco o una partizione sono
|
|
letteralmente "replicati". Successivamente queste informazioni possono
|
|
essere facilmente ripristinate,salvate senza che si verifichino
|
|
disservizi o interruzioni nel loro accesso e, addirittura, conservate
|
|
fisicamente in cassaforte.</para>
|
|
|
|
<para>Per cominciare assicurati che il sistema disponga di due dischi di
|
|
identica capacità. Questo esercizio si riferisce a dischi
|
|
<acronym>SCSI</acronym>ad accesso diretto (&man.da.4;),</para>
|
|
|
|
<para>Comincia installando &os; sul primo disco creando solamente due
|
|
partizioni. Una dovrebbe essere una partizione di swap, pari al doppio
|
|
della <acronym>RAM</acronym> presente nel sistema e il resto dello spazio
|
|
dedicato al filesystem di root (<filename class="directory">/</filename>).
|
|
È possibile creare partizioni separate per gli altri mount points,
|
|
aumentando parecchio la difficoltà di realizzazione del progetto;
|
|
questo è dovuto alla necessità di alterare manualmente i
|
|
settaggi di &man.bsdlabel.8; e &man.fdisk.8;.</para>
|
|
|
|
<para>Riavvia e aspetta che il sistema sia completamente attivo.
|
|
Non appena il boot è completato effettua il login come
|
|
<username>root</username>.</para>
|
|
|
|
<para>Crea il device <filename>/dev/mirror/gm</filename> e fai un link
|
|
dello stesso a <filename>/dev/da1</filename>:</para>
|
|
|
|
<screen>&prompt.root; <userinput>gmirror label -vnb round-robin gm0 /dev/da1</userinput></screen>
|
|
|
|
<para>Il sistema dovrebbe rispondere con:</para>
|
|
|
|
<screen>Metadata value stored on /dev/da1.
|
|
Done.</screen>
|
|
|
|
<para>Avvia GEOM,questa procedura caricherà nel kernel il modulo
|
|
<filename>/boot/kernel/geom_mirror.ko</filename></para>
|
|
|
|
<screen>&prompt.root; <userinput>gmirror load</userinput></screen>
|
|
|
|
<note>
|
|
<para>Questo comando dovrebbe ora avere creato i nodi di
|
|
device<devicename>gm0</devicename>,<devicename>gm0s1</devicename>,
|
|
<devicename>gm0s1a</devicename> e <devicename>gm0s1c</devicename> nella
|
|
directory <filename class="directory">/dev/mirror</filename>.</para>
|
|
</note>
|
|
|
|
<para>Crea una label generica e un codice di boot nel device
|
|
<devicename>gm0</devicename> appena creato utilizzando il comando
|
|
<command>fdisk</command>:</para>
|
|
|
|
<screen>&prompt.root; <userinput>fdisk -vBI /dev/mirror/gm0</userinput></screen>
|
|
|
|
<para>Ora crea una label di informazioni generica con
|
|
<command>bsdlabel</command>:</para>
|
|
|
|
<screen>&prompt.root; <userinput>bsdlabel -wB /dev/mirror/gm0s1</userinput></screen>
|
|
|
|
<note>
|
|
<para>Se sono presenti più slices e partizioni, i flags dei due
|
|
comandi precedenti richiederanno delle modifiche. Queste modifiche
|
|
devono combaciare con la grandezza delle slices e delle partizioni
|
|
dell'altro disco.</para>
|
|
</note>
|
|
|
|
<para>Utilizza l'utility &man.newfs.8; per creare un filesystem di default
|
|
sul nodo di device<devicename>gm0s1a</devicename>:</para>
|
|
|
|
<screen>&prompt.root; <userinput>newfs -U /dev/mirror/gm0s1a</userinput></screen>
|
|
|
|
<para>Questo dovrebbe causare la visualizzazione di un bel pò di
|
|
numeri e informazioni varie da parte del sistema. È corretto.
|
|
Esamina bene lo schermo per vedere se ci sono messaggi di errore e monta
|
|
il device in <filename class="directory">/mnt</filename>:</para>
|
|
|
|
<screen>&prompt.root; <userinput>mount /dev/mirror/gm0s1a /mnt</userinput></screen>
|
|
|
|
<para>Ora sposta tutti i dati presenti sul tuo disco di boot nel nuovo
|
|
filesystem. Questo esempio usa i comandi &man.dump.8; e &man.restore.8;
|
|
comunque anche &man.dd.1; dovrebbe funzionare nel contesto che stiamo
|
|
trattando. Evita di utilizzare &man.tar.1; dal momento che non copia il
|
|
codice di boot. In caso contrario il fallimento è
|
|
garantito.</para>
|
|
|
|
<screen>&prompt.root; <userinput>dump -L -0 -f- / |(cd /mnt && restore -r -v -f-)</userinput></screen>
|
|
|
|
<para>Questo deve essere fatto per ciascun filesystem. Disponi
|
|
semplicemente il filesystem appropriato nella posizione corretta quando
|
|
digiti il suddetto comando.</para>
|
|
|
|
<para>Ora edita il file <filename>/mnt/etc/fstab</filename> "replicato" e
|
|
rimuovi,o commenta (#) la riga relativa al file di swap.
|
|
<footnote>
|
|
<para>È opportuno chiarire che commentando la riga relativa
|
|
allo swap nel file <filename>fstab</filename> ti sarà chiesto
|
|
di ristabilire in un' altra maniera l'utilizzo dello spazio di
|
|
swapping. Per maggiori informazioni a riguardo fai riferimento a
|
|
<xref linkend="adding-swap-space"/>, grazie.</para>
|
|
</footnote>
|
|
Per utilizzare il nuovo disco cambia le altre informazioni di filesystem.
|
|
Dai un' occhiata al seguente esempio:</para>
|
|
|
|
<programlisting># Device Mountpoint FStype Options Dump Pass#
|
|
#/dev/da0s2b none swap sw 0 0
|
|
/dev/mirror/gm0s1a / ufs rw 1 1
|
|
</programlisting>
|
|
|
|
<para>Ora crea un file <filename>boot.conf</filename> in entrambe le
|
|
partizioni di root; quella corrente e quella nuova. Questo file
|
|
aiuterà il <acronym>BIOS</acronym> di sistema ad effettuare il
|
|
boot dal drive corretto.</para>
|
|
|
|
<screen>&prompt.root; <userinput>echo "1:da(1,a)/boot/loader" > /boot.config</userinput></screen>
|
|
|
|
<screen>&prompt.root; <userinput>echo "1:da(1,a)/boot/loader" > /mnt/boot.config</userinput></screen>
|
|
|
|
<note>
|
|
<para>Lo abbiamo inserito in entrambe le partizioni di root per
|
|
assicurarci un boot corretto. Se per qualche ragione il sistema non
|
|
potesse leggere la nuova partizione di root, è disponibile una
|
|
procedura di recupero.</para>
|
|
</note>
|
|
|
|
<para>Adesso aggiungi la seguente linea al nuovo file
|
|
<filename>/boot/loader.conf</filename>:</para>
|
|
|
|
<screen>&prompt.root; <userinput>echo 'geom_mirror_load="YES"' >> /mnt/boot/loader.conf</userinput></screen>
|
|
|
|
<para>Questo indicherà a &man.loader.8; come caricare il modulo
|
|
<filename>geom_mirror.ko</filename> durante l'inizializzazione del
|
|
sistema.</para>
|
|
|
|
<para>Riavvia il sistema:</para>
|
|
|
|
<screen>&prompt.root; <userinput>shutdown -r now</userinput></screen>
|
|
|
|
<para>Se tutto è andato liscio il sistema dovrebbe aver effettuato
|
|
il boot di device<devicename>gm0s1a</devicename> e il prompt di
|
|
<command>login</command> dovrebbe essere in attesa. Se qualcosa è
|
|
andato storto fai riferimento alla sezione successiva "risoluzione dei
|
|
problemi". Ora aggiungi al disco<devicename>da0</devicename> al device
|
|
<devicename>gm0</devicename>:</para>
|
|
|
|
<screen>&prompt.root; <userinput>gmirror configure -a gm0</userinput>
|
|
&prompt.root; <userinput>gmirror insert gm0 /dev/da0</userinput></screen>
|
|
|
|
<para>Il flag <option>-a</option> dice a &man.gmirror.8; di usare la
|
|
sincronizzazione automatica; ovvero mirrorare
|
|
automaticamente le scritture sul disco. La manpage descrive come
|
|
ricostruire o rimpiazzare i dischi, utilizzando
|
|
<devicename>data</devicename> al posto di
|
|
<devicename>gm0</devicename>.</para>
|
|
|
|
<sect2>
|
|
<title>Risoluzione dei problemi</title>
|
|
|
|
<sect3>
|
|
<title>Il sistema non effettua il boot</title>
|
|
|
|
<para>Se al boot il sistema mostra un prompt simile a questo:</para>
|
|
|
|
<programlisting>ffs_mountroot: can't find rootvp
|
|
Root mount failed: 6 mountroot>
|
|
</programlisting>
|
|
|
|
<para>Riavvia la macchina utilizzando il tasto di reset o il pulsante
|
|
di accensione. Arrivato al menu del boot, scegli l'opzione sei (6).
|
|
Questo forzerà il sistema al prompt di &man.loader.8;.
|
|
Carica manualmente il modulo del kernel:</para>
|
|
|
|
<screen>OK? <userinput>load geom_mirror.ko</userinput>
|
|
OK? <userinput>boot</userinput></screen>
|
|
|
|
<para>Se funziona significa che per qualche ragione il modulo non era
|
|
stato caricato correttamente. Inserisci:</para>
|
|
|
|
<programlisting>options GEOM_MIRROR</programlisting>
|
|
|
|
<para>nel file di configurazione del kernek,ricompilalo e reinstallalo.
|
|
Questo dovrebbe risolvere il problema.</para>
|
|
</sect3>
|
|
</sect2>
|
|
</sect1>
|
|
</chapter>
|