Ricerca nel sito web

Concetti ed esercitazioni ZFS


 ZFS: concetti ed esercitazioni

Nella tua ricerca dell'integrità dei dati l'utilizzo di OpenZFS è inevitabile. In effetti, sarebbe piuttosto un peccato se utilizzassi qualcosa di diverso da ZFS per archiviare i tuoi dati preziosi. Tuttavia, molte persone sono riluttanti a provarlo. Il motivo è che ZFS, un filesystem di livello aziendale con un'ampia gamma di funzionalità integrate, deve essere difficile da utilizzare e amministrare. Niente può essere più lontano dalla verità. Usare ZFS è semplicissimo. Con una manciata di terminologie e ancora meno comandi sei pronto per utilizzare ZFS ovunque: dall'azienda al NAS di casa/ufficio.

Nelle parole dei creatori di ZFS: "Vogliamo rendere l'aggiunta di spazio di archiviazione al tuo sistema facile come aggiungere nuove chiavette RAM."

Vedremo più avanti come si fa. Utilizzerò FreeBSD 11.1 per eseguire i test di seguito, i comandi e l'architettura sottostante sono simili per tutte le distribuzioni Linux che supportano OpenZFS. L'intero stack ZFS può essere strutturato nei seguenti livelli:

  • Fornitori di storage: dischi rotanti o SSD

  • Vdevs: raggruppamento di provider di archiviazione in varie configurazioni RAID

  • Zpools – Aggregazione di vdev in singoli storage pool

  • Z-Filesystem: set di dati con funzionalità interessanti come compressione e prenotazione.

Crea Zpool

Per cominciare, iniziamo con una configurazione in cui abbiamo sei dischi da 20 GB ada[1-6]

$ls -al /dev/ada?

ada0 è il luogo in cui è installato il sistema operativo. Il resto verrà utilizzato per questa dimostrazione.

I nomi dei dischi potrebbero variare a seconda del tipo di interfaccia utilizzata. Esempi tipici includono: da0, ada0, acd0 e cd. Guardare dentro/devti darà un'idea di cosa è disponibile.

A zpool viene creato dal comando zpool create :

$zpool create OurFirstZpool ada1 ada2 ada3
# And then run the following command:
$zpool status

Vedremo un output accurato che ci fornirà informazioni dettagliate sul pool:

Questo è lo zpool più semplice senza ridondanza o tolleranza agli errori. Ogni disco ha il proprio vdev.

Tuttavia, otterrai comunque tutte le funzionalità ZFS come i checksum per ogni blocco di dati archiviato in modo da poter almeno rilevare se i dati archiviati vengono danneggiati.

I filesystem, ovvero i set di dati, ora possono essere creati su questo pool nel modo seguente:

$zfs create OurFirstZpool/dataset1

Ora usa il comando df -h che ti è familiare oppure esegui:

$zfs list

Per vedere le proprietà del filesystem appena creato:

Si noti come l'intero spazio offerto dai tre dischi (vdevs) sia disponibile per il filesystem. Ciò sarà vero per tutti i filesystem creati nel pool, a meno che non venga specificato diversamente.

Se vuoi aggiungere un nuovo disco (vdev), ada4, puoi farlo eseguendo:

$zpool add OurFirstZpool ada4

Ora, se vedi lo stato del tuo filesystem

La dimensione disponibile ora è aumentata senza il fastidio aggiuntivo di espandere la partizione o eseguire il backup e ripristinare i dati sul filesystem.

Dispositivi virtuali – Vdev

I Vdev sono gli elementi costitutivi di uno zpool, la maggior parte della ridondanza e delle prestazioni dipendono dal modo in cui i dischi sono raggruppati in questi cosiddetti vdev. Diamo un'occhiata ad alcuni dei tipi più importanti di vdev:

1. RAID 0 o Stripes

Ogni disco agisce come un proprio vdev. Nessuna ridondanza dei dati e i dati si diffondono su tutti i dischi. Noto anche come striping. Il guasto di un singolo disco significherebbe che l’intero zpool sarebbe reso inutilizzabile. Lo spazio di archiviazione utilizzabile è pari alla somma di tutti i dispositivi di archiviazione disponibili.

Il primo zpool creato nella sezione precedente è un RAID 0 o un array di archiviazione con striping.

2. RAID 1 o Mirror

I dati vengono specchiati tra ndischi. La capacità effettiva di vdev è limitata dalla capacità grezza del disco più piccolo in quell'array di n-dischi. I dati vengono rispecchiati tra n dischi, ciò significa che puoi resistere al guasto di n-1 dischi.

Per creare un array con mirroring utilizzare la parola chiave mirror:

$zpool create tank mirror ada1 ada2 ada3

I dati scritti nel tank zpool verranno rispecchiati tra questi tre dischi e lo spazio di archiviazione effettivamente disponibile sarà pari alla dimensione del disco più piccolo, che in questo caso è di circa 20 GB.

In futuro, potresti voler aggiungere più dischi a questo pool ed è possibile eseguire due operazioni. Ad esempio, zpool tank ha tre dischi che eseguono il mirroring dei dati come un singolo vdev mirror-0 :

Potresti voler aggiungere un disco extra, ad esempio ada4, per eseguire il mirroring dei dati. Questo può essere fatto eseguendo il comando:

$zpool attach tank ada1 ada4

Ciò aggiungerebbe un disco extra al vdev che contiene già il disco ada1, ma non aumenterebbe lo spazio di archiviazione disponibile.

Allo stesso modo, puoi scollegare le unità da un mirror eseguendo:

$zpool detach tank ada4

D'altra parte, potresti voler aggiungere un vdev extra per aumentare la capacità di zpool. Questo può essere fatto usando il comando zpool add:

$zpool add tank mirror ada4 ada5 ada6

La configurazione di cui sopra consentirebbe lo striping dei dati sui vdev mirror-0 e mirror-1. In questo caso puoi perdere 2 dischi per vdev e i tuoi dati saranno comunque intatti. Lo spazio utilizzabile totale aumenta a 40 GB.

3. RAID-Z1, RAID-Z2 e RAID-Z3

Se un vdev è di tipo RAID-Z1 deve utilizzare almeno 3 dischi e il vdev può tollerare la scomparsa di uno solo di quei dischi. Le configurazioni RAID-Z non consentono di collegare i dischi direttamente a un vdev. Ma puoi aggiungere più vdev, utilizzando zpool add, in modo che la capacità del pool possa continuare ad aumentare.

RAID-Z2 richiede almeno 4 dischi per vdev e può tollerare fino a 2 guasti del disco e se il terzo disco si guasta prima che i 2 dischi vengano sostituiti, i tuoi dati preziosi andranno persi. Lo stesso vale per RAID-Z3, che richiede almeno 5 dischi per vdev, con un massimo di 3 dischi di tolleranza ai guasti prima che il ripristino diventi senza speranza.

Creiamo un pool RAID-Z1 e ampliamolo:

$zpool create tank raidz1 ada1 ada2 ada3

Il pool utilizza tre dischi da 20 GB rendendone disponibili 40 GB all'utente.

L'aggiunta di un altro vdev richiederebbe 3 dischi aggiuntivi:

$zpool add tank raidz1 ada4 ada5 ada6

I dati utilizzabili totali sono ora 80 GB e puoi perdere fino a 2 dischi (uno per ciascun vdev) e avere ancora una speranza di recupero.

Conclusione

Ora sai abbastanza di ZFS per importarvi tutti i tuoi dati in tutta sicurezza. Da qui in poi puoi cercare varie altre funzionalità fornite da ZFS come l'utilizzo di NVM ad alta velocità per le cache di lettura e scrittura, l'utilizzo della compressione integrata per i tuoi set di dati e invece di essere sopraffatto da tutte le opzioni disponibili cerca semplicemente ciò di cui hai bisogno per il tuo caso d'uso particolare.

Nel frattempo ci sono alcuni suggerimenti più utili riguardo alla scelta dell'hardware che dovresti seguire:

  1. Non utilizzare mai il controller RAID hardware con ZFS.

  2. La correzione degli errori RAM (ECC) è consigliata, ma non obbligatoria

  3. La funzionalità di deduplicazione dei dati consuma molta memoria, utilizza invece la compressione.

  4. La ridondanza dei dati non è un'alternativa al backup. Disponi di più backup, archiviali utilizzando ZFS!

Articoli correlati: