2026-08-01

Backup con Restic fatti bene: cifratura, conservazione, consultazione e ripristino

#backup #linux #restic #sicurezza

Backup con Restic fatti bene

Restic è uno degli strumenti di backup più utili a disposizione di un amministratore Linux. Salva snapshot cifrati in un repository locale o remoto, trasferisce soltanto i dati non ancora presenti, supporta la compressione, verifica l'integrità del repository e permette di consultare o ripristinare versioni precedenti senza dover scompattare una catena di archivi.

Questo tutorial costruisce una configurazione Linux completa e manutenibile. Parte da un repository locale su disco esterno e affronta poi SFTP, esclusioni, automazione, conservazione, verifiche, consultazione, recupero selettivo e una strategia più sicura basata su due copie.

Gli esempi sono stati verificati con Restic 0.19.1. Prima di aggiornare un sistema di backup in produzione è sempre opportuno leggere le note di rilascio.

Un backup non è dimostrato da un comando `backup` terminato con successo. È dimostrato dal ripristino riuscito dei dati che servono davvero.

1. Che cosa fa Restic

Un repository Restic contiene una sequenza di snapshot. Ogni snapshot rappresenta i file e le directory selezionati in un determinato momento, ma Restic non crea ogni volta una seconda copia completa. I dati vengono suddivisi in blocchi determinati dal contenuto, cifrati e deduplicati. Un blocco già presente nel repository non deve essere memorizzato nuovamente.

Questo comportamento offre diverse proprietà utili:

  • dal punto di vista dell'utente ogni snapshot appare completo;
  • i backup ripetuti salvano normalmente solo i dati nuovi o modificati;
  • i contenuti duplicati possono essere riutilizzati anche quando compaiono in file diversi;
  • il contenuto del repository è cifrato;
  • l'integrità del repository può essere verificata;
  • gli snapshot più vecchi possono essere eliminati secondo una politica di conservazione;
  • sui sistemi supportati gli snapshot possono essere montati e consultati come un filesystem.

La compressione è supportata dal formato repository versione 2, attualmente usato come impostazione predefinita per i nuovi repository.

2. Installare Restic

Su Ubuntu o Debian:

sudo apt update
sudo apt install restic
restic version

I pacchetti delle distribuzioni possono essere meno recenti rispetto al progetto ufficiale. Per un'installazione in produzione conviene confrontare la versione installata con la versione stabile corrente di Restic. È possibile installare anche i binari ufficiali autonomi; un binario ufficiale può aggiornarsi con:

sudo restic self-update

Non automatizzare aggiornamenti alla cieca. Prova prima la nuova versione su un repository non critico e conserva una copia del binario precedente finché i controlli e la prova di ripristino non sono terminati correttamente.

3. Scegliere la posizione del repository

Il repository è la destinazione che contiene i dati cifrati del backup e i relativi metadati. Può essere:

  • una directory su un altro disco locale;
  • un disco USB rimovibile;
  • un server SFTP;
  • un server REST di Restic;
  • Amazon S3 o uno storage a oggetti compatibile;
  • un altro backend supportato direttamente o tramite `rclone`.

Per la prima configurazione supponiamo che un disco esterno sia montato in:

/media/backupdisk

Il repository sarà:

/media/backupdisk/restic/my-workstation

Non conservare l'unico repository sullo stesso disco fisico dei dati originali. In quel caso saresti protetto da una cancellazione accidentale, ma non da guasto del disco, furto, danno elettrico o ransomware capace di raggiungere entrambe le posizioni.

4. Creare una directory di configurazione protetta

Crea una directory per la configurazione di Restic, appartenente a root:

sudo install -d -m 0700 /etc/restic

Genera una password lunga e unica per il repository:

sudo sh -c 'umask 077; openssl rand -base64 48 > /etc/restic/password'

Controlla i permessi:

sudo stat -c '%a %U:%G %n' /etc/restic/password

Output atteso:

600 root:root /etc/restic/password

La password consente di decifrare e utilizzare il repository. Perderla significa perdere il backup. Conservane una copia separata e offline in un password manager o in un altro luogo sicuro che rimanga accessibile anche durante un disastro.

Non inserire la password direttamente nella riga di comando. Gli argomenti possono essere esposti nella cronologia della shell o durante l'ispezione dei processi. Un file protetto o un comando dedicato alla lettura della password sono normalmente più sicuri.

5. Definire le variabili d'ambiente

Crea `/etc/restic/workstation.env`:

sudo tee /etc/restic/workstation.env > /dev/null <<'EOF'
RESTIC_REPOSITORY=/media/backupdisk/restic/my-workstation
RESTIC_PASSWORD_FILE=/etc/restic/password
RESTIC_CACHE_DIR=/var/cache/restic
EOF

Proteggilo:

sudo chmod 0600 /etc/restic/workstation.env
sudo install -d -m 0700 /var/cache/restic

Quando lavori manualmente, caricalo nella shell corrente:

set -a
source /etc/restic/workstation.env
set +a

Controlla il percorso del repository senza visualizzare la password:

printf '%s\n' "$RESTIC_REPOSITORY"

6. Inizializzare il repository

Assicurati che il filesystem esterno sia montato, quindi crea il repository:

sudo mkdir -p /media/backupdisk/restic/my-workstation
sudo -E restic init

L'inizializzazione crea la struttura del repository e le chiavi di cifratura.

Questo comando va eseguito una sola volta per ogni repository. Se `restic init` segnala che il repository esiste già, fermati e verifica la situazione invece di sostituire qualcosa.

Elenca le chiavi del repository:

sudo -E restic key list

Restic può gestire più chiavi per lo stesso repository. È possibile aggiungere una nuova chiave prima di ritirare una vecchia password:

sudo -E restic key add

Non rimuovere mai l'ultima chiave utilizzabile.

7. Decidere che cosa salvare

Per una workstation, un insieme iniziale ragionevole potrebbe essere:

/home
/etc
/usr/local
/opt
/root

Non includere alla cieca pseudo-filesystem, cache e dati temporanei di runtime. Una strategia completa di ripristino Linux richiede anche elenchi dei pacchetti, dump dei database, configurazioni delle applicazioni, credenziali e documentazione della struttura dello storage. Restic conserva i file, ma non trasforma automaticamente uno snapshot arbitrario di un server acceso in un'immagine bare-metal avviabile.

Per i database crea prima un dump coerente. Salvare i file di un database vivo mentre vengono modificati può produrre uno snapshot difficile o impossibile da ripristinare correttamente.

Esempio di directory per i dump MariaDB:

sudo install -d -m 0700 /var/backups/database
sudo bash -o pipefail -c 'mariadb-dump --all-databases --single-transaction --routines --events \
  | gzip -c > /var/backups/database/all-databases.sql.gz'

Per sistemi importanti usa la procedura di backup raccomandata dal produttore del database.

8. Creare un file di esclusione

Crea `/etc/restic/excludes.txt`:

sudo tee /etc/restic/excludes.txt > /dev/null <<'EOF'
# Cache degli utenti e cestino
/home/*/.cache
/home/*/.local/share/Trash

# Cache dei browser
/home/*/.mozilla/firefox/*/cache2
/home/*/.cache/google-chrome
/home/*/.cache/chromium

# Dipendenze di sviluppo ricostruibili
**/node_modules
**/.venv
**/vendor

# Dati temporanei e di runtime
/tmp
/var/tmp
/var/cache
/var/run
/run

# Filesystem virtuali
/proc
/sys
/dev

# I filesystem montati vengono gestiti separatamente
/mnt
/media
EOF

Proteggi il file:

sudo chmod 0600 /etc/restic/excludes.txt

Controlla con attenzione le esclusioni. `node_modules` può essere eliminabile in un progetto, ma contenere modifiche locali non riproducibili in un altro. Escludi soltanto dati che sei davvero in grado di ricreare.

9. Eseguire il primo backup

Con le variabili d'ambiente caricate:

sudo -E restic backup \
  /home \
  /etc \
  /usr/local \
  /opt \
  /root \
  /var/backups/database \
  --exclude-file=/etc/restic/excludes.txt \
  --one-file-system \
  --tag workstation \
  --tag automatic

In un terminale interattivo Restic mostra l'avanzamento. Il riepilogo indica file nuovi, modificati e invariati, quantità di dati analizzata, dati aggiunti al repository e identificativo del nuovo snapshot.

`--one-file-system` impedisce a Restic di attraversare altri filesystem montati sotto uno dei percorsi selezionati. È utile per evitare di entrare accidentalmente nel disco di backup, in mount di rete o in grandi volumi non pertinenti. Gli altri filesystem necessari vanno aggiunti esplicitamente.

Esegui un secondo backup senza modificare nulla:

sudo -E restic backup \
  /home /etc /usr/local /opt /root /var/backups/database \
  --exclude-file=/etc/restic/excludes.txt \
  --one-file-system \
  --tag workstation \
  --tag manual-test

La seconda esecuzione deve comunque analizzare i metadati, ma se le sorgenti non sono cambiate dovrebbe aggiungere pochissimi dati.

10. Esaminare gli snapshot

Elenca tutti gli snapshot:

sudo -E restic snapshots

Raggruppali per host e percorsi:

sudo -E restic snapshots --group-by host,paths

Mostra lo snapshot più recente:

sudo -E restic snapshots --latest 1

Visualizza le statistiche del repository:

sudo -E restic stats

Per una vista più dettagliata dei dati fisicamente memorizzati:

sudo -E restic stats --mode raw-data

La dimensione di uno snapshot è la dimensione logica dei dati rappresentati, non necessariamente lo spazio fisico aggiunto da quella esecuzione. Deduplicazione e compressione fanno sì che i due valori siano diversi.

11. Consultare il backup senza ripristinare tutto

Esistono tre metodi pratici per esaminare il contenuto.

Elencare i file di uno snapshot

sudo -E restic ls latest

Limita l'elenco a una directory:

sudo -E restic ls latest /home/daniele/Documents

Cercare un file

sudo -E restic find '**/invoice-*.pdf'

Cerca soltanto nello snapshot più recente:

sudo -E restic find --snapshot latest '**/invoice-*.pdf'

Racchiudi i pattern con wildcard tra apici, altrimenti la shell potrebbe espanderli prima che Restic li riceva.

Montare il repository con FUSE

Installa il supporto FUSE se necessario:

sudo apt install fuse3
sudo mkdir -p /mnt/restic

Monta il repository:

sudo -E restic mount /mnt/restic

Lascia il processo in esecuzione e consulta `/mnt/restic` da un altro terminale o da un file manager. Troverai viste organizzate per ID dello snapshot, date, host e tag.

Al termine smonta il filesystem:

sudo umount /mnt/restic

Non usare mai come punto di mount la directory del repository stesso o un percorso che si sovrappone ad essa.

12. Ripristinare un singolo file o una directory

Ripristinare in una directory vuota e separata è più sicuro che sovrascrivere direttamente i file in produzione.

Crea una destinazione:

sudo mkdir -p /var/tmp/restic-restore
sudo chmod 0700 /var/tmp/restic-restore

Ripristina una singola directory dallo snapshot più recente:

sudo -E restic restore latest \
  --target /var/tmp/restic-restore \
  --include '/home/daniele/Documents/Accounts/**'

Ripristina un file specifico:

sudo -E restic restore latest \
  --target /var/tmp/restic-restore \
  --include '/etc/ssh/sshd_config'

Controlla i dati ripristinati prima di copiarli in produzione:

sudo find /var/tmp/restic-restore -maxdepth 5 -ls

La directory ripristinata contiene normalmente il percorso assoluto originale sotto la destinazione. Per esempio `/etc/ssh/sshd_config` comparirà in:

/var/tmp/restic-restore/etc/ssh/sshd_config

13. Ripristinare uno snapshot completo

Scegli un ID con `restic snapshots`, quindi ripristinalo in una destinazione vuota:

sudo mkdir -p /restore/full
sudo -E restic restore SNAPSHOT_ID --target /restore/full

Non indirizzare il primo ripristino completo verso `/`. Ripristina altrove, controlla il risultato, arresta i servizi interessati e copia i dati solo dopo aver definito un piano di recupero.

Il recupero di un server segue spesso questo ordine:

1. reinstallare o avviare un sistema operativo pulito; 2. ricreare storage, utenti e pacchetti necessari; 3. installare Restic e recuperare la password del repository; 4. ripristinare configurazioni e file delle applicazioni; 5. ripristinare i database con i loro strumenti nativi; 6. verificare proprietari, permessi, servizi e configurazione di rete; 7. provare l'applicazione prima di riaprire l'accesso.

14. Leggere direttamente un file da uno snapshot

Per un controllo rapido usa `dump`:

sudo -E restic dump latest /etc/ssh/sshd_config | less

Estrai un singolo file:

sudo -E restic dump latest /etc/ssh/sshd_config \
  > /var/tmp/sshd_config.from-backup

Puoi anche estrarre una directory come archivio:

sudo -E restic dump latest /home/daniele/Documents \
  --archive tar > /var/tmp/Documents.tar

15. Confrontare gli snapshot

Individua le differenze tra due snapshot:

sudo -E restic diff OLD_SNAPSHOT_ID NEW_SNAPSHOT_ID

È utile dopo una modifica sospetta della configurazione, una cancellazione accidentale o un aggiornamento dell'applicazione.

16. Verificare l'integrità del repository

Esegui regolarmente il controllo strutturale:

sudo -E restic check

Il comando verifica metadati, indici, snapshot, alberi e struttura dei pack memorizzati. Per impostazione predefinita non legge ogni byte di tutti i blocchi di dati.

Per una lettura completa:

sudo -E restic check --read-data

Una lettura completa può essere costosa su un grande repository remoto. Puoi distribuire il controllo su più esecuzioni:

sudo -E restic check --read-data-subset=1/7
sudo -E restic check --read-data-subset=2/7
sudo -E restic check --read-data-subset=3/7

Continua fino a `7/7` nei giorni successivi. In questo modo l'intero repository viene verificato in sette porzioni.

Il controllo di integrità è essenziale, ma non sostituisce una prova di ripristino a livello applicativo. Un dump del database può essere integro come file e comunque inutilizzabile perché la procedura di esportazione era sbagliata.

17. Definire una politica di conservazione

Gli snapshot si accumulano finché non vengono dimenticati esplicitamente. Inizia con una simulazione:

sudo -E restic forget \
  --keep-daily 7 \
  --keep-weekly 5 \
  --keep-monthly 12 \
  --keep-yearly 5 \
  --tag workstation \
  --dry-run

Leggi attentamente l'output. Quando corrisponde alle tue intenzioni, rimuovi `--dry-run`:

sudo -E restic forget \
  --keep-daily 7 \
  --keep-weekly 5 \
  --keep-monthly 12 \
  --keep-yearly 5 \
  --tag workstation

`forget` elimina i riferimenti agli snapshot, ma non recupera necessariamente subito spazio fisico.

Esegui `prune` per eliminare i dati non più referenziati:

sudo -E restic prune

Oppure combina le due operazioni:

sudo -E restic forget \
  --keep-daily 7 \
  --keep-weekly 5 \
  --keep-monthly 12 \
  --keep-yearly 5 \
  --tag workstation \
  --prune

Il pruning può scaricare, ricomporre e ricaricare dati, soprattutto con un repository remoto. Pianificalo meno frequentemente dei backup e non interromperlo senza motivo.

18. Creare uno script di backup riutilizzabile

Crea `/usr/local/sbin/restic-workstation-backup`:

sudo tee /usr/local/sbin/restic-workstation-backup > /dev/null <<'EOF'
#!/usr/bin/env bash
set -Eeuo pipefail

ENV_FILE=/etc/restic/workstation.env
EXCLUDE_FILE=/etc/restic/excludes.txt
LOCK_FILE=/run/lock/restic-workstation.lock

exec 9>"$LOCK_FILE"
if ! flock -n 9; then
    echo "È già in esecuzione un altro backup Restic." >&2
    exit 75
fi

set -a
# shellcheck disable=SC1090
source "$ENV_FILE"
set +a

if ! mountpoint -q /media/backupdisk; then
    echo "Il disco di backup non è montato: operazione interrotta." >&2
    exit 1
fi

/usr/bin/restic backup \
    /home \
    /etc \
    /usr/local \
    /opt \
    /root \
    /var/backups/database \
    --exclude-file="$EXCLUDE_FILE" \
    --one-file-system \
    --tag workstation \
    --tag automatic

/usr/bin/restic check --with-cache
EOF

sudo chmod 0700 /usr/local/sbin/restic-workstation-backup

Prova manualmente lo script:

sudo /usr/local/sbin/restic-workstation-backup

Il blocco con `flock` impedisce esecuzioni sovrapposte. Il controllo del mount point evita un problema pericoloso: se il disco esterno manca, Restic potrebbe creare un nuovo repository nella normale directory vuota del punto di mount, riempiendo il disco di sistema.

19. Pianificare i backup con systemd

Crea `/etc/systemd/system/restic-workstation.service`:

[Unit]
Description=Backup cifrato Restic della workstation
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/restic-workstation-backup
Nice=10
IOSchedulingClass=best-effort
IOSchedulingPriority=7

Crea `/etc/systemd/system/restic-workstation.timer`:

[Unit]
Description=Esegue ogni giorno il backup Restic della workstation

[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true
RandomizedDelaySec=15m

[Install]
WantedBy=timers.target

Abilitalo:

sudo systemctl daemon-reload
sudo systemctl enable --now restic-workstation.timer

Controlla la pianificazione:

systemctl list-timers restic-workstation.timer

Avvialo immediatamente:

sudo systemctl start restic-workstation.service

Leggi il log:

sudo journalctl -u restic-workstation.service -n 200 --no-pager

`Persistent=true` fa partire dopo il successivo avvio della macchina un'esecuzione saltata. `RandomizedDelaySec` evita che tutte le macchine contattino lo storage remoto nello stesso identico secondo.

20. Pianificare separatamente la manutenzione

I backup devono essere frequenti; il pruning può essere settimanale o mensile.

Crea `/usr/local/sbin/restic-workstation-maintenance`:

sudo tee /usr/local/sbin/restic-workstation-maintenance > /dev/null <<'EOF'
#!/usr/bin/env bash
set -Eeuo pipefail

set -a
# shellcheck disable=SC1091
source /etc/restic/workstation.env
set +a

exec 9>/run/lock/restic-workstation.lock
flock -n 9 || exit 75

/usr/bin/restic forget \
    --keep-daily 7 \
    --keep-weekly 5 \
    --keep-monthly 12 \
    --keep-yearly 5 \
    --tag workstation \
    --prune

WEEK_NUMBER=$(date +%V)
SUBSET=$((10#$WEEK_NUMBER % 4 + 1))
/usr/bin/restic check --read-data-subset="${SUBSET}/4"
EOF

sudo chmod 0700 /usr/local/sbin/restic-workstation-maintenance

Crea `/etc/systemd/system/restic-workstation-maintenance.service`:

[Unit]
Description=Conservazione, pruning e verifica parziale dei dati Restic
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/restic-workstation-maintenance
Nice=15
IOSchedulingClass=idle

Crea `/etc/systemd/system/restic-workstation-maintenance.timer`:

[Unit]
Description=Esegue settimanalmente la manutenzione Restic

[Timer]
OnCalendar=Sun *-*-* 04:15:00
Persistent=true
RandomizedDelaySec=30m

[Install]
WantedBy=timers.target

Abilitalo:

sudo systemctl daemon-reload
sudo systemctl enable --now restic-workstation-maintenance.timer

Lo script ricava un quarto del repository dal numero ISO della settimana, così le esecuzioni settimanali consecutive attraversano ciclicamente tutte e quattro le porzioni. Quando dimensioni e banda lo consentono, rimane utile anche un controllo completo occasionale.

21. Usare un repository SFTP

Configura prima l'autenticazione SSH con chiave per un account dedicato ai backup. Verifica che il collegamento funzioni senza password interattiva:

ssh backupuser@backup.example.net

Un percorso SFTP assoluto ha questa forma:

sftp:backupuser@backup.example.net:/srv/restic/workstation

Un percorso relativo alla home dell'utente remoto non contiene la barra iniziale dopo l'host:

sftp:backupuser@backup.example.net:restic/workstation

Imposta il repository nel file d'ambiente:

RESTIC_REPOSITORY=sftp:backupuser@backup.example.net:/srv/restic/workstation

Inizializzalo:

sudo -E restic init

Da quel momento puoi usare gli stessi comandi `backup`, `snapshots`, `restore`, `check`, `forget` e `prune`.

Usa un account dedicato e limita le sue capacità SSH. Una credenziale di backup non dovrebbe concedere accesso amministrativo generale al server remoto.

22. Proteggersi da ransomware e cancellazioni

La cifratura protegge la riservatezza. Non impedisce a un client compromesso, dotato dei permessi di scrittura e cancellazione, di eliminare il repository.

Un progetto più robusto separa la creazione dei backup dalla loro cancellazione:

  • il client ordinario può aggiungere nuovi backup;
  • un host amministrativo separato e affidabile esegue conservazione e pruning;
  • versioning, immutabilità o snapshot dello storage proteggono gli oggetti del repository;
  • almeno una copia non è continuamente scrivibile dalla macchina protetta.

Il server REST di Restic può essere configurato in modalità append-only. Questo limita ciò che un client di backup compromesso può cancellare, ma la manutenzione amministrativa richiede comunque accesso completo da un sistema meglio protetto.

Occorre prudenza con le politiche di conservazione sui repository append-only. Un aggressore capace di aggiungere snapshot fuorvianti potrebbe influenzare regole basate soltanto sul numero di snapshot giornalieri o settimanali. In questo scenario una conservazione temporale come `--keep-within` è più sicura, ma restano necessari monitoraggio operativo e protezioni indipendenti dello storage.

23. Mantenere un secondo repository

Un solo repository non costituisce un piano completo di disaster recovery. Un approccio pratico prevede:

  • repository cifrato principale su disco esterno locale o server di backup locale;
  • repository cifrato secondario in un'altra posizione fisica;
  • copia periodica offline o immutabile per i dati di maggior valore.

Puoi salvare le stesse sorgenti indipendentemente in due repository. È semplice e offre a ogni destinazione una propria storia di integrità.

Restic può anche copiare gli snapshot tra repository. Quando crei una destinazione appositamente per ricevere snapshot copiati, inizializzala con i parametri del chunker del repository sorgente, così la deduplicazione rimane efficace:

restic -r /srv/restic-repo-copy init \
  --from-repo /srv/restic-repo \
  --copy-chunker-params

Copia tutti gli snapshot:

restic -r /srv/restic-repo-copy copy \
  --from-repo /srv/restic-repo \
  --verbose

Se i repository hanno password diverse, fornisci quella della sorgente con `--from-password-file` e quella della destinazione con la normale opzione `--password-file` o con le corrispondenti variabili d'ambiente.

Il processo di copia decifra i dati dalla sorgente e li cifra per la destinazione, quindi può consumare molta banda in lettura, upload e download. Provalo con attenzione prima di affidargli un sistema di produzione e ricorda che una copia eseguita dallo stesso host compromesso non è automaticamente indipendente dalla compromissione.

24. Monitorare davvero il successo

Un timer eseguito non equivale a un backup riuscito. Controlla almeno:

  • stato di uscita del servizio systemd;
  • età dello snapshot più recente;
  • variazioni inattese della dimensione del backup;
  • risultati dei controlli del repository;
  • spazio libero sulla destinazione;
  • data ed esito dell'ultima prova di ripristino.

Un semplice controllo della freschezza:

sudo -E restic snapshots --json --latest 1

Per il monitoraggio automatico analizza il JSON e genera un avviso quando l'ultimo snapshot riuscito è più vecchio dell'obiettivo concordato per il punto di ripristino.

In un contesto non interattivo Restic normalmente non mostra l'avanzamento. Per scrivere periodicamente lo stato nei log, imposta `RESTIC_PROGRESS_FPS` su un valore basso, per esempio un aggiornamento al minuto:

RESTIC_PROGRESS_FPS=0.016666

Nei sistemi Unix, anche l'invio del segnale `SIGUSR1` a un processo Restic in esecuzione richiede un rapporto di avanzamento.

25. Eseguire una vera prova di ripristino

Almeno una volta ogni trimestre seleziona un insieme rappresentativo:

  • un normale documento;
  • una directory con molti file;
  • un file per il quale proprietario e permessi sono importanti;
  • una configurazione applicativa;
  • un dump del database;
  • un file proveniente da uno snapshot vecchio, non soltanto dall'ultimo.

Ripristina in una destinazione isolata, confronta gli hash quando opportuno, apri realmente i documenti e importa davvero il database in un'istanza temporanea.

Esempio di confronto degli hash:

sha256sum /home/daniele/Documents/important.pdf
sha256sum /var/tmp/restic-restore/home/daniele/Documents/important.pdf

Per una prova di disaster recovery, esegui il ripristino utilizzando soltanto documentazione e credenziali che sarebbero disponibili dopo la perdita della macchina originale.

26. Errori comuni

Il disco di backup non era montato

La directory del mount esisteva comunque e il backup ha riempito il disco di sistema. Verifica sempre con `mountpoint -q` prima di iniziare.

La password del repository esisteva solo sulla macchina sorgente

Dopo la perdita della macchina il repository era integro, ma inaccessibile. Conserva una copia offline protetta della password.

I database vivi sono stati copiati come normali file

Uno snapshot a livello di file non è automaticamente un backup transazionalmente coerente del database. Usa dump o meccanismi snapshot nativi.

La conservazione è stata attivata senza simulazione

Una regola di raggruppamento compresa male ha eliminato più snapshot del previsto. Esegui `forget --dry-run`, controlla i gruppi e documenta la politica.

I backup hanno funzionato per mesi, ma nessuno ha mai provato il ripristino

Errori di configurazione, esclusioni sbagliate o dump applicativi inutilizzabili sono rimasti invisibili. Pianifica le prove di ripristino come attività operativa.

Il client di backup poteva cancellare ogni copia

Ransomware o una credenziale rubata hanno eliminato sia i dati principali sia quelli di backup. Mantieni una copia offline, immutabile o amministrata separatamente.

Il repository è stato copiato con un normale sincronizzatore mentre era attivo

Copiare un repository durante modifiche concorrenti può produrre una seconda copia incoerente. Preferisci backup indipendenti, le funzioni di copia tra repository di Restic o uno snapshot dello storage eseguito con adeguate garanzie di coerenza.

27. Una checklist operativa compatta

Per un piccolo sistema Linux, la routine minima credibile è:

# Ogni giorno
restic backup ...

# Dopo ogni backup, o almeno con regolarità
restic snapshots --latest 1
restic check

# Ogni settimana o mese
restic forget --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --keep-yearly 5 --prune

# In porzioni a rotazione oppure periodicamente in modo completo
restic check --read-data-subset=1/4

# Ogni trimestre
restic restore SNAPSHOT_ID --target /isolated/restore-test

Conclusione

Restic rende piacevolmente semplice la creazione di snapshot cifrati, deduplicati e compressi. Il comando, però, è soltanto una parte di un sistema di backup affidabile.

Il sistema reale comprende una password protetta, un repository conservato in modo indipendente, esclusioni ragionevoli, dump coerenti dei database, esecuzione automatica, monitoraggio degli errori, conservazione, verifica del repository e ripetute prove di ripristino.

Questa è la differenza tra avere dei file di backup e avere un piano di recupero.

Riferimenti ufficiali