Esercitazione sulle istantanee ZFS
Le istantanee sono importanti sia che tu stia utilizzando una semplice macchina virtuale sul tuo computer di casa o se si tratta di un database aziendale che viene costantemente aggiornato e modificato. È importante avere degli snapshot, cioè una copia dell'intero filesystem com'era in un dato periodo di tempo.
Spesso le persone perdono traccia di dove le cose sono andate storte, un file è stato eliminato e nessuno si è accorto che non c'era più. Sono passati diversi backup e ora ti rendi conto che manca un file importante da tutti i backup disponibili delle ultime 5 settimane. In questo tutorial, vedremo come utilizzare gli snapshot ZFS e toccheremo varie policy di snapshot che funzionerebbero in modo ottimale, sia in termini di utilizzo delle risorse che di recuperabilità.
Meccanismo di copia su scrittura
ZFS offre una panoramica di alto livello di file e directory e comprende come i dati vengono scritti sul disco. Quando si scrivono fisicamente i dati su un disco, ciò avviene in blocchi discreti. In genere, la dimensione del blocco può arrivare fino a 1 MB, ma il valore predefinito è solitamente 128 KB. Ora, questo significa che ogni modifica (lettura, scrittura o cancellazione) avverrà nei blocchi discreti.
Il meccanismo copy-on-write garantisce che ogni volta che un blocco viene modificato, invece di modificare direttamente il blocco, viene creata una copia del blocco con le modifiche richieste apportate al nuovo blocco.
Ciò è particolarmente utile nei casi in cui, ad esempio, si verifica un'interruzione di corrente e il sistema si blocca mentre vengono scritti nuovi dati sul disco. Se ciò accade in un filesystem tradizionale, i tuoi file verranno danneggiati o rimarranno con dei buchi. Ma se stai utilizzando ZFS, potresti perdere la transazione in corso mentre ciò accadeva, ma l’ultimo stato valido dei tuoi file rimarrà intatto.
Anche le istantanee si basano su questa funzionalità, e in effetti in modo piuttosto pesante. Quando si esegue uno snapshot di un determinato set di dati ("set di dati" è il termine ZFS per un file system), ZFS registra semplicemente il timestamp in cui è stato creato lo snapshot. Questo è tutto! Nessun dato viene copiato e non viene consumato spazio di archiviazione aggiuntivo.
Solo quando il filesystem cambia e i dati in esso contenuti divergono dallo snapshot, lo snapshot inizia a consumare spazio di archiviazione aggiuntivo. Quello che succede dietro le quinte è questo: invece di riciclare i vecchi blocchi nel tempo, ZFS li mantiene in giro. Ciò migliora anche l'utilizzo dello spazio di archiviazione. Se esegui lo snapshot di un set di dati da 20 GB e modifichi solo pochi file di testo qua e là, lo snapshot potrebbe richiedere solo pochi MB di spazio.
Creazione di istantanee
Per dimostrare l'uso degli snapshot, iniziamo con un set di dati che contiene molti file di testo, tanto per semplificare la questione. La macchina virtuale che utilizzerò per la demo esegue FreeBSD 11.1-RELEASE-p3 che è l'ultima versione stabile disponibile al momento in cui scrivo. Il filesystem root è montato sul pool zroot per impostazione predefinita e molte delle directory familiari come /usr/src, /home, /etc sono tutti i loro set di dati montati su zroot. Se non sai cosa significa pool (o zpool), nel gergo ZFS, varrebbe la pena leggerlo prima di continuare.
Uno dei tanti filesystem, o set di dati, forniti di default su FreeBSD è: zroot/usr/src
Per visualizzarne le proprietà, esegui il comando seguente.
Come puoi vedere, utilizza 633 MB di spazio di archiviazione. Contiene l'intero albero dei sorgenti del sistema operativo.
Facciamo uno snapshot di zroot/usr/src
Il simbolo @ funge da delimitatore tra il set di dati e il nome dello snapshot, che nel nostro caso è snapshot1.
Ora diamo un'occhiata allo stato dello snapshot mentre viene creato.
Eseguendo il comando:
Puoi vedere che l'istantanea non utilizza spazio aggiuntivo quando nasce. Non c'è nemmeno spazio disponibile, poiché si tratta di un set di dati rigorosamente di sola lettura, lo snapshot stesso non può crescere, modificare o ridursi. Infine, non è montato da nessuna parte, il che lo rende completamente isolato dalla gerarchia del filesystem data.
Ora rimuoviamo la directory sbin in /usr/src/
Guardando l'istantanea ora vedrai che è cresciuta,
Ciò è previsto perché qui è in funzione il meccanismo di copia su scrittura e l'eliminazione (o la modifica) dei file ha portato ad associare una maggior parte dei dati solo allo snapshot e non al set di dati effettivamente in uso.
Notare la colonna REFER nell'output precedente. Ti fornisce la quantità di dati accessibili sul set di dati mentre la colonna USED mostra solo quanto spazio è occupato sul disco fisico.
Il meccanismo Copy-On-Write di ZFS spesso fornisce questi risultati controintuitivi in cui l'eliminazione di un file farebbe sembrare che venga utilizzato più spazio rispetto a prima. Tuttavia, avendo letto finora, sai cosa sta realmente succedendo!
Prima di finire, recuperiamo lo sbin da snapshot1. Per farlo è sufficiente eseguire:
Politica sulle istantanee
La prossima domanda da porsi è: quanto spesso vuoi scattare le istantanee? Anche se può variare da un'azienda all'altra, prendiamo l'esempio di un database molto dinamico che cambia ogni tanto.
Per cominciare, inizieresti a scattare istantanee ogni 6 ore circa, ma poiché il database cambia così tanto, diventerebbe presto impossibile archiviare tutte le numerose istantanee create. Quindi il passaggio successivo sarebbe quello di eliminare gli snapshot più vecchi, ad esempio, di 48 ore.
Adesso il problema sarebbe recuperare qualcosa che è andato perduto 49 ore fa. Per aggirare questo problema, puoi conservare una o due istantanee della cronologia di 48 ore e conservarle per una settimana. Eliminateli quando invecchiano.
E se riesci a continuare in questo modo, potresti stipare istantanee fino alla genesi stessa del sistema, solo in ordine decrescente di frequenza. Infine, vorrei sottolineare che queste istantanee sono di SOLA LETTURA, il che significa che se vieni infettato da un ransomware e tutti i tuoi dati vengono crittografati (modificati). Queste istantanee, molto probabilmente, sarebbero ancora intatte.