Backup incrementali su Linux con tar

Mattepuffo's logo
Backup incrementali su Linux con tar

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!


Condividi

Commentami!