Quando i dati di famiglia vivono su un server di casa, il backup smette di essere un'opzione e diventa parte del servizio stesso. Tra gli strumenti disponibili, restic è uno dei più apprezzati da chi gestisce piccoli server: è un singolo programma, cifra tutto per impostazione predefinita, elimina i duplicati e salva su molte destinazioni diverse. Vediamo come usarlo in modo ordinato per i servizi ospitati in casa.
Come ragiona restic
Restic salva i dati in un repository, che può trovarsi su un disco esterno, su un altro computer via SFTP, su uno spazio di archiviazione compatibile S3 o su un server dedicato (rest-server). Ogni esecuzione crea uno snapshot, cioè una fotografia dei file in quel momento.
Tre caratteristiche lo rendono adatto all'uso domestico:
- Cifratura: i dati sono cifrati prima di lasciare il server. Chi accede alla destinazione vede solo blocchi illeggibili.
- Deduplicazione: i file vengono divisi in blocchi e ogni blocco viene salvato una sola volta. Cento snapshot di una cartella che cambia poco occupano poco più di uno.
- Snapshot indipendenti: ogni snapshot si può ripristinare da solo, senza catene di backup incrementali da ricostruire.
La conseguenza importante della cifratura è che perdere la password del repository significa perdere il backup. Va conservata in un gestore di password e, preferibilmente, anche su carta in un luogo sicuro.
Preparare il repository
La prima operazione è creare il repository. Con un disco esterno montato in /mnt/backup:
export RESTIC_REPOSITORY=/mnt/backup/restic
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init
Usare un file per la password, leggibile solo da root, evita di scriverla negli script o di vederla nella cronologia dei comandi.
Cosa salvare e come
Se i servizi sono organizzati in una struttura di cartelle coerente, il backup si riduce a pochi percorsi. Il punto delicato sono i database: copiarne i file mentre il servizio scrive può produrre un backup inconsistente. Le strade sono due:
- Fermare i servizi per il tempo del backup, poi riavviarli. Semplice e sicuro, adatto alle ore notturne.
- Esportare un dump prima del backup, per esempio con
pg_dumpper PostgreSQL, e salvare il file esportato insieme agli altri dati.
Un esempio di script notturno:
docker compose -f /srv/servizi/immich/compose.yaml stop
restic backup /srv/servizi --exclude-caches --tag notturno
docker compose -f /srv/servizi/immich/compose.yaml start
L'opzione --exclude-caches salta le cartelle marcate come cache, mentre i tag aiutano a distinguere i backup automatici da quelli fatti a mano prima di un aggiornamento.
Politiche di conservazione
Senza una regola di pulizia, il repository cresce all'infinito. Restic permette di stabilire quanti snapshot tenere per ciascun periodo:
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
Questa politica conserva gli ultimi sette giorni, quattro settimane e dodici mesi. Il comando forget decide cosa eliminare, mentre --prune libera davvero lo spazio rimuovendo i blocchi non più usati. Il prune è un'operazione più pesante: in casa basta eseguirla una volta alla settimana.
Una copia fuori casa
Un disco esterno collegato al server protegge dai guasti del disco principale, ma non da un furto, un incendio o un'infiltrazione d'acqua. Serve almeno una copia in un altro luogo. Con restic le possibilità sono diverse:
| Destinazione | Vantaggi | Attenzioni |
|---|---|---|
| Disco a casa di un parente | Nessun costo ricorrente | Serve una connessione o uno scambio periodico |
| Server remoto via SFTP | Controllo completo | Va mantenuto anche quello |
| Archiviazione compatibile S3 | Nessuna manutenzione | Costi di traffico e di spazio |
Si può inizializzare un secondo repository e lanciare il backup due volte, oppure copiare gli snapshot da un repository all'altro con restic copy.
Controllare che il backup funzioni
Un backup mai verificato è solo una speranza. Restic offre due livelli di controllo:
restic checkverifica la struttura del repository.restic check --read-data-subset=10%legge davvero una parte dei dati, a rotazione, per scoprire blocchi danneggiati.
Oltre ai controlli automatici, conviene fare ogni tanto un ripristino reale di un servizio su una cartella di prova con restic restore latest --target /tmp/prova, oppure esplorare uno snapshot montandolo con restic mount. È l'unico modo per essere certi che, il giorno del bisogno, i dati tornino davvero.
In sintesi
- Restic cifra, deduplica e salva snapshot indipendenti su molte destinazioni.
- La password del repository è insostituibile: va custodita con cura.
- I database vanno fermati o esportati prima del backup.
- Le politiche
forgeteprunetengono sotto controllo lo spazio. - Copia fuori casa e ripristini di prova completano il sistema.