Capitolo 19. GEOM: Framework modulare per la trasformazione del disco

19.1. Sinossi

Questo articolo tratta l’utilizzo dei dischi attraverso la struttura GEOM implementata in FreeBSD. Questo include le più importanti utility di controllo RAID 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 geom(4) e nei suoi vari riferimenti SEE ALSO. Questo capitolo non è nemmeno la guida definitiva alla configurazione del RAID Soltanto i dischiRAID classificati come "supportati da GEOM" saranno discussi.

Dopo la lettura di questo capitolo saprai:

  • Quale genere di supportoRAID è disponibile attraverso GEOM.

  • Come usare le utilities di base per configurare, manutenere, e manipolare i vari livelli di RAID.

  • Come creare dei mirror, degli stripe, criptare e connettere dischi remoti attraverso l’utilizzo di GEOM.

  • Come sbrogliare problematiche relative ai dischi connessi attraverso GEOM.

Prima di procedere alla lettura di questo capitolo dovresti:

19.2. Introduzione a GEOM

GEOM permette l’accesso e il controllo alle classi - Master Boot Records, BSD labels, ecc - attraverso l’uso di forniture o di di files speciali in /dev. Mediante il supporto di vari software di configurazioneRAID , GEOM fornisce un accesso "trasparente" al sistema operativo e alle utilità di sistema.

19.3. RAID0 - Striping

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 RAID0, conosciuto anche come disk striping.

In un sistema RAID0, 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 RAID0 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.

In ogni "stripe" RAID0 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.

Disk Striping Illustration

Procedure: Creazione di uno stripe di dischi ATA non formattati

  1. Caricare il modulo geom_stripe:

    # kldload geom_stripe.ko
  2. 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 /mnt:

    # mkdir /mnt
  3. Determina i nomi dei devices per i dischi che verranno configurati in stripe e creali. Ad esempio per configurare in modalità stripe 2 dischi ATA /dev/ad2 e /dev/ad3 non ancora partizionati potresti usare il seguente comando.

    # gstripe label -v st0 /dev/ad2 /dev/ad3
  4. 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:

    # fdisk -vBI /dev/stripe/st0
  5. Crea una tabella delle partizioni sul nuovo volume con in seguente comando:

    # bsdlabel -wB /dev/stripe/st0
  6. Questa procedura dovrebbe aver creato altri due device in /dev/stripe in aggiunta a st0. Nella fattispecie st0a e st0c. Ora bisogna creare un filesystem nel device st0a utilizzando il comando newfs come segue:

    # newfs -U /dev/stripe/st0a

    Dopo che per qualche secondo vedrete parecchi numeri scorrere sullo schermo, la procedura sarà completa. Il volume è stato creato ed è pronto per essere montato.

Per montare manualmente il dispositivo stripe appena creato usa il seguente comando:

# mount /dev/stripe/st0a /mnt

Per montare il filesystem stripe automaticamente all’avvio del sistema, inserisci le informazioni del volume nel file /etc/fstab:

# echo "/dev/stripe/st0a /mnt ufs rw 2 2" \
      >> /etc/fstab

Il modulo geom deve essere caricato contestualmente all’avvio del sistema; questo lo si ottiene semplicemente inserendo la seguente linea nel file /boot/loader.conf:

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

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

Questo comando dovrebbe ora avere creato i nodi di device gm0, 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

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 device gm0s1a:

# 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. 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

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 device gm0s1a e il prompt di login dovrebbe essere in attesa. Se qualcosa è andato storto fai riferimento alla sezione successiva "risoluzione dei problemi". Ora aggiungi al disco da0 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.


Questo, ed altri documenti, possono essere scaricati da https://download.freebsd.org/ftp/doc/

Per domande su FreeBSD, leggi la documentazione prima di contattare <freebsd-questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <freebsd-doc@FreeBSD.org>.