Backup incrementali su Linux con tar
Vi propongo uno scriptino, che sto usando ovviamente, per fare i backup incrementali su Linux usando tar.
Io lo sto usando per la home, ed i path che vi lascio sono reali.
Vi basterà cambiarli con i vostri.
In pratica:
- in avvio controlla se la directory di destinazione esiste
- poi controlla l'esistenza di un file .snar:
- se non esiste fa un backup full
- sennò lo fa incrementale
Quindi per rifarlo full da zero:
- o cancellate il file .snar
- o cambiate directory di destinazione
Inoltre come potete vedere c'è anche una lista di files e cartelle da escludere; anche in questo caso vedete voi se aggiungere o rimuovere qualcosa.
#!/bin/bash
BACKUP_DIR="/run/media/fermat/MATTE3TB/bck_home"
HOME_DIR="/home/fermat"
SNAPSHOT="$BACKUP_DIR/snapshot.snar"
DATE=$(date +%F_%H-%M)
# CONTROLLO CHE IL DISCO SIA MONTATO
if [ ! -d "$BACKUP_DIR" ]; then
echo "Disco di backup non trovato!"
exit 1
fi
# DECIDO SE FULLO O INCREMENTALE IN BASE ALLA PRESENZA DEL FILE .snar
if [ ! -f "$SNAPSHOT" ]; then
TYPE="full"
else
TYPE="inc"
fi
ARCHIVE="$BACKUP_DIR/home_${TYPE}_${DATE}.tar.zst"
echo "Backup $TYPE in corso..."
echo "→ $ARCHIVE"
tar -cvp --zstd \
--listed-incremental="$SNAPSHOT" \
--exclude="$HOME_DIR/.cache" \
--exclude="$HOME_DIR/.local/share/Trash" \
--exclude="$HOME_DIR/.npm" \
--exclude="$HOME_DIR/.gradle" \
--exclude="$HOME_DIR/.ivy2" \
--exclude="$HOME_DIR/.m2" \
--exclude="$HOME_DIR/.pub-cache" \
--exclude="$HOME_DIR/.dart-tool" \
--exclude="$HOME_DIR/.dartServer" \
--exclude="$HOME_DIR/.android" \
--exclude="$HOME_DIR/.var" \
--exclude="$HOME_DIR/.cargo" \
--exclude="$HOME_DIR/.rustup" \
--exclude="$HOME_DIR/go" \
--exclude="$HOME_DIR/.pyenv" \
--exclude="$HOME_DIR/.jdks" \
--exclude="$HOME_DIR/.flutter" \
--exclude="$HOME_DIR/.swiftpm" \
--exclude="$HOME_DIR/.sbt" \
--exclude="$HOME_DIR/.nuget" \
--exclude="$HOME_DIR/.dotnet" \
--exclude="$HOME_DIR/java_error_in_datagrip.hprof" \
--exclude="$HOME_DIR/VBox" \
-f "$ARCHIVE" \
"$HOME_DIR"
echo "Backup completato!"
Se poi volete fare un backup full limitandoci al primo backup:
tar -xvp --zstd \
--listed-incremental=/dev/null \
-f home_full_2026-01-30_08-24.tar.zst \
-C /
Se invece volete fare il backup full ma aggiungendo anche tutti gli incrementali:
tar -xvp --zstd \
--listed-incremental=/dev/null \
-f home_full_2026-01-30_08-24.tar.zst \
-C /
tar -xvp --zstd \
--listed-incremental=/dev/null \
-f home_full_2026-01-30_08-24.tar.zst \
-C /
for f in home_inc_*.tar.zst; do
tar -xvp --zstd \
--listed-incremental=/dev/null \
-f "$f" \
-C /
done
Ovviamente non ha senso fare gli incrementali senza partire dal full.
Detto ciò fate prima dei test!
Non mi prendo responsabilità per eventuali perdite di dati!
Enjoy!
linux tar snar
Commentami!