19.4. RAID1 - Mirroring

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.

Per cominciare assicurati che il sistema disponga di due dischi di identica capacità. Questo esercizio si riferisce a dischi SCSIad accesso diretto (da(4)),

Comincia installando FreeBSD sul primo disco creando solamente due partizioni. Una dovrebbe essere una partizione di swap, pari al doppio della RAM presente nel sistema e il resto dello spazio dedicato al filesystem di root (/). È 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 bsdlabel(8) e fdisk(8).

Riavvia e aspetta che il sistema sia completamente attivo. Non appena il boot è completato effettua il login come root.

Crea il device /dev/mirror/gm e fai un link dello stesso a /dev/da1:

# gmirror label -vnb round-robin gm0 /dev/da1

Il sistema dovrebbe rispondere con:

Metadata value stored on /dev/da1.
Done.

Avvia GEOM,questa procedura caricherà nel kernel il modulo /boot/kernel/geom_mirror.ko

# gmirror load

Nota:

Questo comando dovrebbe ora avere creato i nodi di devicegm0,gm0s1, gm0s1a e gm0s1c nella directory /dev/mirror.

Crea una label generica e un codice di boot nel device gm0 appena creato utilizzando il comando fdisk:

# fdisk -vBI /dev/mirror/gm0

Ora crea una label di informazioni generica con bsdlabel:

# bsdlabel -wB /dev/mirror/gm0s1

Nota:

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.

Utilizza l'utility newfs(8) per creare un filesystem di default sul nodo di devicegm0s1a:

# newfs -U /dev/mirror/gm0s1a

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 /mnt:

# mount /dev/mirror/gm0s1a /mnt

Ora sposta tutti i dati presenti sul tuo disco di boot nel nuovo filesystem. Questo esempio usa i comandi dump(8) e restore(8) comunque anche dd(1) dovrebbe funzionare nel contesto che stiamo trattando. Evita di utilizzare tar(1) dal momento che non copia il codice di boot. In caso contrario il fallimento è garantito.

# dump -L -0 -f- / |(cd /mnt && restore -r -v -f-)

Questo deve essere fatto per ciascun filesystem. Disponi semplicemente il filesystem appropriato nella posizione corretta quando digiti il suddetto comando.

Ora edita il file /mnt/etc/fstab "replicato" e rimuovi,o commenta (#) la riga relativa al file di swap. [8] Per utilizzare il nuovo disco cambia le altre informazioni di filesystem. Dai un' occhiata al seguente esempio:

# Device                Mountpoint      FStype  Options         Dump    Pass#
#/dev/da0s2b             none            swap    sw              0       0
/dev/mirror/gm0s1a       /               ufs     rw              1       1
    

Ora crea un file boot.conf in entrambe le partizioni di root; quella corrente e quella nuova. Questo file aiuterà il BIOS di sistema ad effettuare il boot dal drive corretto.

# echo "1:da(1,a)/boot/loader" > /boot.config
# echo "1:da(1,a)/boot/loader" > /mnt/boot.config

Nota:

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.

Adesso aggiungi la seguente linea al nuovo file /boot/loader.conf:

# echo 'geom_mirror_load="YES"' >> /mnt/boot/loader.conf

Questo indicherà a loader(8) come caricare il modulo geom_mirror.ko durante l'inizializzazione del sistema.

Riavvia il sistema:

# shutdown -r now

Se tutto è andato liscio il sistema dovrebbe aver effettuato il boot di devicegm0s1a e il prompt di login dovrebbe essere in attesa. Se qualcosa è andato storto fai riferimento alla sezione successiva "risoluzione dei problemi". Ora aggiungi al discoda0 al device gm0:

# gmirror configure -a gm0
# gmirror insert gm0 /dev/da0

Il flag -a dice a gmirror(8) di usare la sincronizzazione automatica; ovvero mirrorare automaticamente le scritture sul disco. La manpage descrive come ricostruire o rimpiazzare i dischi, utilizzando data al posto di gm0.

19.4.1. Risoluzione dei problemi

19.4.1.1. Il sistema non effettua il boot

Se al boot il sistema mostra un prompt simile a questo:

ffs_mountroot: can't find rootvp
Root mount failed: 6 mountroot>

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 loader(8). Carica manualmente il modulo del kernel:

OK? load geom_mirror.ko
OK? boot

Se funziona significa che per qualche ragione il modulo non era stato caricato correttamente. Inserisci:

options	GEOM_MIRROR

nel file di configurazione del kernek,ricompilalo e reinstallalo. Questo dovrebbe risolvere il problema.



[8] È opportuno chiarire che commentando la riga relativa allo swap nel file fstab ti sarà chiesto di ristabilire in un' altra maniera l'utilizzo dello spazio di swapping. Per maggiori informazioni a riguardo fai riferimento a Sezione 11.14, «Aggiunta di Spazio di Swap», grazie.

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.

Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.