A prescindere dallo strumento utilizzato, la pratica del backup è sempre largamente consigliata, se non obbligatoria.
Ogni tipo di supporto di memorizzazione inevitabilmente non potrà mai vivere in eterno, e finirà per spirare più o meno improvvisamente.
Il mio personale suggerimento è quello di sviluppare una sorta di "agnosticismo" da qualsiasi dispositivo dotato di sistema operativo; mi spiego meglio.
Lo storage di PC, tablet e smartphone è sicuramente quello più sottoposto a stress logorante durante il suo ciclo vitale: le centinaia di operazioni di lettura e scrittura che avvengono quotidianamente non fanno che accorciare la vita di dischi e memorie solide.
Per di più, meglio non affidarsi completamente a device che possono essere facilmente smarriti o rubati, ma piuttosto renderli quasi esclusivamente dei contenitori di software, con i dati più importanti e voluminosi relegati a supporti esterni o al cloud (meglio se in self-hosting).
Un approccio del genere mi permette di non preoccuparmi troppo in caso di perdita o furto, e allo stesso tempo posso vivere su Linux anche in meno di 64 GB, aspetto da non sottovalutare con gli odierni prezzi degli SSD!
Restic è uno strumento sviluppato in linguaggio Go, open source e multipiattaforma, per la gestione avanzata dei backup.
Tra le sue caratteristiche spiccano:
Per consuetudine la rappresentazione dei comandi avviene con il prefisso "$ ", che non va digitato nella shell.
Il contenuto preceduto da "#" rappresenta un commento esplicativo.
Restic è disponibile praticamente ovunque, anche per Docker e con un paio di pacchetti non ufficiali sullo Snap Store.
Un esempio? Su Void Linux:
$ sudo xbps-install restic
Anche qui, come per Git, il concetto di repo è fondamentale.
Un repository è una directory che contiene al suo interno una serie di sottocartelle e file generati da Restic (i backup veri e propri, alcuni dati ad essi collegati e le chiavi di crittografia).
Per iniziare, posizioniamoci all'interno della cartella da utilizzare come repository, e digitiamo il comando di inizializzazione: $ restic -r . init Io preferisco lavorare in maniera lineare, ossia trovandomi sempre all'interno del repository, ma nulla vieta di specificare una percorso esterno o remoto. In ogni caso ciò che è specificato dopo l'opzione -r sta ad indicare la path del repository, ossia la destinazione dei backup, nell'esempio la directory corrente.
A questo punto vi verrà chiesto di inserire una password; come da avviso, sarà impossibile agire sulla repository (e soprattutto recuperare i file di un backup) senza di essa.
Ogni backup viene memorizzato sotto forma di uno snapshot della cartella sorgente. Il concetto di snapshot in Restic è assimilabile a quello di commit in Git: un'instantanea di una directory in un preciso momento.
Creiamo il nostro primo backup/snapshot: $ restic -r . backup /home/user/directory_da_backuppare Il comando backup si occuperà della creazione di una copia della cartella /home/user/directory_da_backuppare in uno snapshot nella repository in uso.
Trattandosi del primo snapshot, sarà effettuata una copia effettiva dell'intera directory.
Anche se alcune informazioni vengono spoilerate alla fine del processo di backup, esiste uno specifico comando per ottenere una lista dettagliata di tutti gli snapshot attuali: $ restic -r . snapshots L'output ottenuto in riposta risulterà alquanto adorabile e completo: una tabella con un identificativo dello snapshot (paragonabile all'hash dei commit di Git), il timestamp (data e ora), il nome dell'host da cui è stato eseguito il backup, eventuali etichette aggiuntive, il percorso della cartella di origine e la dimensione su disco. Tutto quello che serve, no?
Per il ripristino delle cartelle precedentemente sottoposte a backup, abbiamo almeno due possibilità: il mount e il restore.
Il mount permette di agire sui file contenuti all'interno di uno snapshot, senza che questi vengano copiati altrove. $ restic -r . mount /home/user/directory_di_ripristino All'interno della cartella specificata nel comando soprastante, troverete un'eloquente directory denominata snapshots, con tutto il contenuto dei vari backup.
Il montaggio è temporaneo, al termine delle operazioni per liberare il terminale si dovrà premere la combinazione di tasti CTRL+C sulla tastiera.
Restore è un comando più classico e selettivo, in quanto richiede la scelta di un preciso snapshot e del percorso della cartella di ripristino. $ restic -r . restore 79766175 --target /home/user/directory_di_ripristino # Ho inserito un id di casuale La cartella /home/user/directory_di_ripristino stavolta non fungerà da punto di montaggio temporaneo, bensì assumerà il ruolo di contenitore permanente.
Trattandosi di un sistema di backup versionato, con il tempo gli snapshot potrebbero diventare troppi.
Procediamo quindi con un'eliminazione selettiva: restic -r . forget 79766175 --prune L'opzione --prune del comando forget elimina anche i file collegati esclusivamente allo snapshot da cancellare. Seppure indicata come sicura nella documentazione ufficiale, è da usare comunque con cautela.
Hai notato qualche errore?
Pensi che sia stato poco chiaro, magari dando per scontato un termine o un concetto che non riesci a capire?
Vuoi proporre un approccio differente all'argomento?
Contattami per feedback e chiarimenti, l'open source è anche questo!