Scripting BASH – Creare backup automatici con rsync e tar
La sicurezza dei dati passa anche dalla possibilità di poter ripristinare rapidamente file e documenti in caso di cancellazioni accidentali, guasti hardware, errori software o altri problemi.
Una buona strategia di backup dovrebbe quindi prevedere la creazione frequente e automatizzata di copie dei propri dati, possibilmente conservando più versioni nel tempo.
Un backup può essere realizzato in diversi modi. In ambiente Linux, due strumenti particolarmente utili sono rsync e tar:
rsyncparticolarmente adatto a sincronizzare directory trasferendo, a ogni esecuzione, solo i file nuovi o modificati;tarpermette di creare un unico archivio contenente file e directory, eventualmente compresso.
I due strumenti possono essere utilizzati separatamente oppure combinati all’interno di uno script Bash.
Importante: un backup salvato sullo stesso disco dei dati originali protegge poco da guasti hardware, furto o danneggiamento del disco. Quando possibile, la destinazione dovrebbe essere un disco esterno, un NAS o uno spazio remoto.
Rsync: sincronizzare una directory
rsync è particolarmente adatto quando vogliamo mantenere una copia aggiornata di una directory.
L’opzione -a abilita la modalità archive, che conserva molte delle caratteristiche dei file, come permessi, timestamp e struttura delle directory.
Prima di eseguire una sincronizzazione reale è buona pratica utilizzare --dry-run, che permette di vedere cosa verrebbe modificato senza effettuare realmente le operazioni.
Ad esempio:
rsync -a --dry-run ~/Documenti/ /backup/Documenti/
Se il risultato è quello atteso, possiamo eseguire la sincronizzazione:
rsync -a ~/Documenti/ /backup/Documenti/
Attenzione a --delete
Se vogliamo che la destinazione sia una copia esatta della sorgente possiamo utilizzare:
rsync -a --delete ~/Documenti/ /backup/Documenti/
L’opzione --delete elimina dalla destinazione i file che non esistono più nella sorgente.
È quindi un’opzione potenzialmente distruttiva.
Per questo motivo è consigliabile provarla prima con:
rsync -a --delete --dry-run ~/Documenti/ /backup/Documenti/
e controllare attentamente l’elenco delle operazioni.
Un altro dettaglio importante è la presenza della / finale nella directory sorgente:
~/Documenti/indica il contenuto della directory Documenti, mentre:
~/Documentiha una semantica leggermente diversa nella destinazione.
Tar: creare un archivio
tar è invece utile quando vogliamo creare un archivio unico contenente una determinata directory.
Per creare un archivio compresso con gzip possiamo utilizzare:
tar -czf backup-documenti-$(date +%F).tar.gz ~/Documenti
Il nome del file conterrà la data, ad esempio:
backup-documenti-2026-09-02.tar.gzLe principali opzioni utilizzate sono:
-c→ crea un nuovo archivio;-z→ comprime con gzip;-f→ specifica il nome del file archivio.
Per visualizzare il contenuto dell’archivio senza estrarlo:
tar -tzf backup-documenti-2026-09-02.tar.gz
Possiamo limitarci, ad esempio, alle prime righe:
tar -tzf backup-documenti-2026-09-02.tar.gz | head
Per verificare che l’archivio gzip non sia corrotto:
gzip -t backup-documenti-2026-09-02.tar.gz
A differenza di rsync, tar non dispone di un’opzione --dry-run equivalente. Prima di creare o sovrascrivere un archivio è quindi importante controllare attentamente sorgente e destinazione.
Rsync oppure tar?
I due programmi risolvono problemi simili, ma con approcci differenti.
Rsync
È particolarmente indicato per mantenere una copia sincronizzata:
Documenti/
↓
rsync
↓
Backup/Documenti/Vantaggi:
- copia solo ciò che è necessario aggiornare;
- conserva permessi e timestamp;
- è molto efficiente per grandi quantità di dati;
- può lavorare anche verso macchine remote tramite SSH.
Tar
È più indicato quando vogliamo creare istantanee/versioni del backup:
Documenti/
↓
tar
↓
backup-2026-09-01.tar.gz
backup-2026-09-02.tar.gz
backup-2026-09-03.tar.gzIn questo caso possiamo conservare più versioni e scegliere successivamente quale archivio utilizzare per il ripristino.
Creiamo uno script Bash per generare backup con tar
A questo punto possiamo automatizzare il processo utilizzando Bash.
Uno script minimale potrebbe essere:
#!/bin/bash
# Directory da salvare
SOURCE="$HOME/Documenti"
# Directory dove conservare i backup
DEST="$HOME/Backup"
# Data corrente
DATE=$(date '+%Y-%m-%d_%H-%M-%S')
# Nome dell'archivio
BACKUP="$DEST/backup-documenti-$DATE.tar.gz"
mkdir -p "$DEST"
tar -czf "$BACKUP" "$SOURCE"
echo "Backup creato: $BACKUP"
Possiamo salvarlo, ad esempio, come:
backup_tar.she renderlo eseguibile:
chmod +x backup_tar.sh
quindi avviarlo con:
./backup_tar.sh
Esempio di script BASH per la generazione di backup con rsync
Un’alternativa alla creazione di un archivio compresso consiste nell’utilizzare rsync per mantenere una copia sincronizzata della directory originale.
In questo caso non vengono creati archivi .tar.gz: la destinazione contiene direttamente i file e le directory del backup. rsync permette inoltre di trasferire solamente i file nuovi o modificati, rendendo le successive operazioni molto più veloci.
Un semplice script Bash può essere realizzato nel seguente modo:
#!/bin/bash
# Directory da salvare
SOURCE="$HOME/Documenti/"
# Directory dove conservare il backup
DEST="$HOME/Backup/Documenti/"
# Crea la directory di destinazione se non esiste
mkdir -p "$DEST"
echo "Avvio del backup..."
rsync -av "$SOURCE" "$DEST"
if [ $? -eq 0 ]; then
echo "Backup completato correttamente."
else
echo "Errore durante il backup." exit 1
fi
Possiamo salvarlo, ad esempio, come:
backup_rsync.she renderlo eseguibile:
chmod +x backup_rsync.sh
quindi avviarlo con:
./backup_rsync.sh
Conclusione
L’utilizzo di rsync, tar e Bash permette di costruire in modo semplice ed efficace una procedura automatizzata per la protezione dei propri dati. La vera efficacia di un backup, però, non dipende solo dalla sua creazione, ma anche dalla frequenza delle copie, dalla conservazione su supporti differenti e dalla possibilità di verificarne e ripristinarne il contenuto. Automatizzare queste operazioni significa quindi ridurre il rischio di perdita dei dati e rendere il ripristino più rapido e affidabile.
LICENZA E CONDIZIONI D’USO
Questo How-to è rilasciato sotto licenza Creative Commons Attribution-NonCommercial 3.0 Italy.Â
CONTATTI DELL’AUTORE
Marco Ciammella marco@orvietolinux.it
Orvieto Linux User Group info@orvietolinux.it