Salta al contenuto principale

Orvieto Linux User Group | Promozione software libero a Orvieto

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:

  • rsync particolarmente adatto a sincronizzare directory trasferendo, a ogni esecuzione, solo i file nuovi o modificati;
  • tar permette 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:

~/Documenti

ha 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.gz

Le 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.gz

In 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.sh

e 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.sh

e 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