Nel tutorial precedente, abbiamo imparato come creare uno zpool e un filesystem o un set di dati ZFS. In questo tutorial, ti mostrerò passo dopo passo come lavorare con gli snapshot, i cloni e la replica di ZFS. Istantanea, clona. e la replica sono le funzionalità più potenti del filesystem ZFS.
Istantanee ZFS:una panoramica
Snapshot è una delle funzionalità più potenti di ZFS, uno snapshot fornisce una copia point-in-time di sola lettura di un file system o volume che non consuma spazio aggiuntivo nel pool ZFS. L'istantanea utilizza solo spazio quando i riferimenti di blocco vengono modificati. Le istantanee preservano lo spazio su disco registrando solo le differenze tra il set di dati corrente e una versione precedente.
Un tipico esempio di utilizzo di uno snapshot è avere un modo rapido per eseguire il backup dello stato corrente del file system quando viene eseguita un'azione rischiosa come l'installazione di un software o un aggiornamento del sistema.
Creazione e distruzione di uno snapshot ZFS
Non è possibile accedere direttamente agli snapshot dei volumi, ma possono essere clonati, sottoposti a backup e ripristinati. Creare e distruggere uno snapshot ZFS è molto semplice, possiamo usare i comandi zfs snapshot e zfs destroy per questo.
Crea un pool chiamato datapool.
# zpool create datapool mirror /dev/sdb /dev/sdc
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
datapool 1.98G 65K 1.98G - 0% 0% 1.00x ONLINE -
Ora abbiamo un pool chiamato datapool, quindi dobbiamo creare un filesystem ZFS per simulare la funzione snapshot.
# zfs create datapool/docs -o mountpoint=/docs
# zfs list -r datapool
NAME USED AVAIL REFER MOUNTPOINT
datapool 93.5K 1.92G 19K /datapool
datapool/docs 19K 1.92G 19K /docs
Per creare uno snapshot del file system, possiamo utilizzare il comando zfs snapshot specificando il pool e il nome dello snapshot. Possiamo utilizzare l'opzione -r se vogliamo creare uno snapshot in modo ricorsivo. Il nome dello snapshot deve soddisfare i seguenti requisiti di denominazione:
[email protected] [email protected]
# zfs snapshot datapool/[email protected]
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/[email protected] 0 - 19.5K -
Viene creato uno snapshot per datapool/docs.
Per distruggere lo snapshot, possiamo usare il comando zfs destroy come al solito.
# zfs destroy datapool/[email protected]
# zfs list -t snapshot
no datasets available
Ripristino di un'istantanea
Per la simulazione, dobbiamo creare un file di test nella directory /docs.
# echo "version 1" > /docs/data.txt
# cat /docs/data.txt
version 1
# zfs snapshot datapool/[email protected]
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/[email protected] 9K - 19.5K -
Ora cambiamo il contenuto di /docs/data.txt
# echo "version 2" > /docs/data.txt
# cat /docs/data.txt
version 2
Possiamo tornare completamente a uno snapshot più vecchio che ci fornirà la copia del momento nel momento in cui è stata scattata l'istantanea.
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/[email protected] 9.50K - 19.5K -
# zfs rollback datapool/[email protected]
# cat /docs/data.txt
version 1
Come possiamo vedere, il contenuto di data.txt è tornato al contenuto precedente.
Se vogliamo rinominare lo snapshot, possiamo utilizzare il comando zfs rename.
# zfs rename datapool/[email protected] datapool/[email protected]
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/[email protected] 9.50K - 19.5K -
Nota:un set di dati non può essere distrutto se esistono istantanee di questo set di dati, ma possiamo utilizzare l'opzione -r per sovrascriverlo.
# zfs destroy datapool/docs
cannot destroy 'datapool/docs': filesystem has children
use '-r' to destroy the following datasets:
datapool/[email protected]
# zfs destroy -r datapool/docs
# zfs list -t snapshot
no datasets available
Panoramica dei cloni ZFS
Un clone è un volume scrivibile o un file system il cui contenuto iniziale è lo stesso del set di dati da cui è stato creato.
Creazione e distruzione di un clone ZFS
I cloni possono essere creati solo da uno snapshot e uno snapshot non può essere eliminato finché non elimini il clone basato su questo snapshot. Per creare un clone, usa il comando zfs clone.
# zfs create datapool/docs -o mountpoint=/docs
# zfs list -r datapool
NAME USED AVAIL REFER MOUNTPOINT
datapool 93.5K 1.92G 19K /datapool
datapool/docs 19K 1.92G 19K /docs
# mkdir /docs/folder{1..5}
# ls /docs/
folder1 folder2 folder3 folder4 folder5
# zfs snapshot datapool/[email protected]
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/[email protected] 0 - 19K -
Ora creiamo un clone dal datapool di snapshot/[email protected]
# zfs clone datapool/[email protected] datapool/pict
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
datapool 166K 1.92G 19K /datapool
datapool/docs 19K 1.92G 19K /docs
datapool/pict 1K 1.92G 19K /datapool/pict
Il processo di clonazione è terminato, lo snapshot datapool/[email protected] è stato clonato in /datapool/pict. Quando controlliamo il contenuto della directory /datapool/pict, il contenuto dovrebbe essere lo stesso di /datapool/docs.
# ls /datapool/pict
folder1 folder2 folder3 folder4 folder5
Dopo aver clonato uno snapshot, lo snapshot non può essere eliminato finché non elimini il set di dati.
# zfs destroy datapool/[email protected]
cannot destroy 'datapool/[email protected]': snapshot has dependent clones
use '-R' to destroy the following datasets:
datapool/pict
# zfs destroy datapool/pict
Finalmente possiamo distruggere l'istantanea.
# zfs destroy datapool/[email protected]
# zfs list -t snapshot
no datasets available
Panoramica della replica ZFS
La base per questa replica ZFS è uno snapshot, possiamo creare uno snapshot in qualsiasi momento e possiamo creare tutti gli snapshot che vogliamo. Creando, trasferendo e ripristinando continuamente le istantanee, è possibile fornire la sincronizzazione tra una o più macchine. ZFS fornisce una funzione di serializzazione incorporata che può inviare una rappresentazione del flusso dei dati allo standard output.
Configura replica ZFS
In questa sezione, voglio mostrarti come replicare un set di dati da un pool di dati a un pool di backup, ma è possibile non solo archiviare i dati su un altro pool connesso al sistema locale ma anche inviarli su una rete a un altro sistema. I comandi usati per replicare i dati sono zfs send e zfs receive.
Crea un altro pool chiamato backuppool.
# zpool create backuppool mirror sde sdf
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
backuppool 1.98G 50K 1.98G - 0% 0% 1.00x ONLINE -
datapool 1.98G 568K 1.98G - 0% 0% 1.00x ONLINE -
Controlla lo stato della piscina:
# zpool status
pool: datapool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
datapool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
errors: No known data errors
pool:backuppool
stato:ONLINE
scansione:nessuno richiesto
config:
NOME STATO LEGGI SCRIVERE CKSUM
backuppool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0
errori:
Crea un set di dati che replicheremo.
# zfs snapshot datapool/[email protected]
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/[email protected] 0 - 19K -
# ls /docs/
folder1 folder2 folder3 folder4 folder5
È ora di eseguire la replica.
# zfs send datapool/[email protected] | zfs receive backuppool/backup
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
backuppool 83K 1.92G 19K /backuppool
backuppool/backup 19K 1.92G 19K /backuppool/backup
datapool 527K 1.92G 19K /datapool
datapool/docs 19K 1.92G 19K /docs
# ls /backuppool/backup
folder1 folder2 folder3 folder4 folder5
Il datapool del set di dati/[email protected] è stato replicato correttamente nel backuppool/backup.
Per replicare un set di dati su un'altra macchina, possiamo utilizzare il comando seguente:
# zfs send datapool/[email protected] | ssh otherserver zfs recv backuppool/backup
Fatto.
Conclusione
Snapshot, clonazione e replica sono le funzionalità più potenti di ZFS. Gli snapshot vengono utilizzati per creare copie point-in-time di file system o volumi, la clonazione viene utilizzata per creare un set di dati duplicato e la replica viene utilizzata per replicare un set di dati da un pool di dati a un altro sulla stessa macchina o per replicare pool di dati tra diversi macchine.