Le persone spesso perdono traccia di dove sono andate storte, un file è stato eliminato e nessuno ha notato che era sparito. 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 le istantanee ZFS e toccare varie politiche di istantanee che funzionerebbero in modo ottimale, in termini di utilizzo delle risorse e recupero.
ZFS ha sia la panoramica di alto livello di file e directory e comprende come i dati sono scritti sul disco. Quando si scrive fisicamente dati su un disco, viene fatto in blocchi discreti. In genere, la dimensione del blocco può andare fino a 1 MB ma il valore predefinito è di solito 128 kb. Ora, questo significa che ogni modifica (lettura, scrittura o eliminazione) avverrà nei blocchi discreti.
Il meccanismo di copia-su-write garantisce che ogni volta che un blocco viene modificato, invece di modificare direttamente il blocco, fa una copia del blocco con le modifiche richieste apportate sul nuovo blocco.
Ciò è particolarmente utile nei casi in cui, diciamo, c'è un guasto all'alimentazione e il sistema si arresta in modo anomalo mentre nuovi dati venivano scritti sul disco. Se ciò accade in un filesystem tradizionale, i tuoi file saranno corrotti o lasciati con buchi. Ma se stai usando ZFS, potresti perdere la transazione in corso mentre stava accadendo, ma l'ultimo stato valido dei tuoi file rimarrà ancora toccato.
Le istantanee si affidano anche a questa funzionalità e abbastanza pesantemente. Quando si prevede un'istantanea di un determinato set di dati ("set di dati" è il termine ZFS per un filesystem), ZFS registra il timestamp quando è stata realizzata l'istantanea. Questo è tutto! Nessun dato viene copiato e non viene consumato alcuna memorizzazione aggiuntiva.
Solo quando il filesystem cambia e i dati in esso differiscono dall'istantanea, l'istantanea inizia a consumare un ulteriore archiviazione. Quello che accade sotto il cofano è questo - invece di riciclare i vecchi blocchi nel tempo, ZFS li tiene in giro. Questo migliora anche l'utilizzo dello stoccaggio. Se si istantaneamente un set di dati da 20 GB e modifichi solo alcuni file di testo qua e là, l'istantanea può richiedere solo alcuni MB di spazio.
Creazione di istantanee
Per dimostrare l'uso di snapshot, iniziamo con un set di dati che ha molti file di testo, solo per mantenere la questione semplice. La macchina virtuale che userò per la demo sta eseguendo FreeBSD 11.1-release-P3 che è l'ultima uscita stabile disponibile al momento di questa scrittura. Il filesystem di root è montato su zroot pool per impostazione predefinita e molte directory familiari come /usr /src, /home, /ecc sono tutti i loro set di dati montati su zroot. Se non sai cosa significa una piscina (o uno ZPool), nel Vernacolare ZFS, varrebbe la pena leggerlo prima prima di continuare.
Uno dei tanti filesystem, o set di dati, che arriva per impostazione predefinita su FreeBSD è: zroot/usr/src
Per guardarle proprietà, eseguire il seguente comando.
root@testbsd: ~ $ zfs elenco zroot/usr/src
Come puoi vedere, utilizza 633 MB di archiviazione. Contiene l'intero albero di origine per il sistema operativo.
Facciamo un'istantanea di zroot/usr/src
root@testbsd: ~ $ zfs snapshot zroot/usr/src@snapshot1
Il simbolo @ funge da delimitatore tra il set di dati e il nome snapshot, che nel nostro caso è Snapshot1.
Ora diamo un'occhiata allo stato dell'istantanea mentre viene creata.
Eseguendo il comando:
Elenco ZFS -Rt All Zroot/USR/SRC
Puoi vedere che l'istantanea non utilizza spazio extra quando nasce. Non esiste neanche spazio disponibile, perché è un set di dati rigorosamente lettura, l'istantanea stessa non può crescere, modificare o ridurre. Infine, non è montato da nessuna parte che lo rende completamente isolato dalla gerarchia del filesystem fornita.
Ora rimuoviamo il sbin directory in /usr/src/
root@testbsd: $ rm/usr/src/sbin
Guardando l'istantanea ora vedrai che è cresciuto,
Ciò è previsto perché il meccanismo di copia-on-write è al lavoro qui ed eliminare (o modificare) i file hanno portato a più dati associati solo all'istantanea e non al set di dati effettivamente in uso.
Notare la colonna REFERE nell'output sopra. Ti dà la quantità di dati accessibili sul set di dati mentre la colonna usata mostra solo quanto spazio è occupato sul disco fisico.
Il meccanismo di copia-on-write di ZFS spesso fornisce questi risultati contro-intuitivi in cui l'eliminazione di un file lo farebbe sembrare come se fosse ora utilizzato più spazio di prima. Tuttavia, avendo letto finora, sai cosa sta realmente accadendo!
Prima di finire, riprendiamo il sbin da Snapshot1. Per farlo semplicemente correre:
root@testbsd:/usr/src $ zfs rollback zroot/usr/src@snapshot1
Politica di snapshot
La prossima domanda da porre è: quanto spesso vuoi prendere le istantanee? Mentre può variare da un'impresa all'altra, prendiamo l'esempio di un database molto dinamico che cambia ogni tanto.
Per cominciare, inizieresti a prendere le istantanee ogni 6 ore circa, ma perché il database cambia così tanto che sarebbe diventato presto insignibile archiviare tutte le numerose istantanee create. Quindi il prossimo passo sarebbe quello di eliminare le snapshot più vecchie di, diciamo, 48 ore.
Ora, il problema sarebbe quello di recuperare qualcosa che è stato perso 49 ore fa. Per aggirare questo problema, puoi mantenere una o due istantanee da quella storia di 48 ore e tenerle in giro per una settimana. Purgali quando invecchiano.
E se riesci ad andare in questo modo, potresti stipare le istantanee fino alla stessa genesi del sistema, solo in diminuzione dell'ordine di frequenza. Infine, vorrei sottolineare che queste istantanee sono di sola lettura, il che significa che se vieni infettato da un ransomware e ottieni tutti i tuoi dati crittografati (modificati). Queste istantanee sarebbero, molto probabilmente, ancora intatte.