Tutorial: Automatische inkrementelle Backups mit Tar unter Linux

Melden

Hier ist ein umfassendes Tutorial im Stil eines System-Administrator-Kurses über die Erstellung automatischer inkrementeller Backups mit tar.

In der Systemadministration ist die Datensicherung eine der kritischsten Aufgaben. Ein inkrementelles Backup spart Speicherplatz und Bandbreite, da nur die Dateien gesichert werden, die sich seit dem letzten Backup geändert haben.

Dieses Tutorial nutzt das Tool tar (Tape Archiver) und dessen eingebaute Snapshot-Funktion.


1. Das Konzept: Full vs. Incremental

  • Full Backup: Eine vollständige Kopie aller Daten.
  • Incremental Backup: Sichert nur Änderungen seit dem letzten Backup (egal ob Full oder Incremental).
  • Die Snapshot-Datei (.snar): Tar nutzt eine Metadaten-Datei, um zu tracken, welche Dateien sich geändert haben (Inode, Zeitstempel, etc.).

2. Vorbereitung der Verzeichnisstruktur

Wir erstellen eine Struktur für unsere Tests:

mkdir -p ~/backup_demo/data      # Die Quelldaten
mkdir -p ~/backup_demo/archives  # Wo die Backups landen
echo "Datei 1" > ~/backup_demo/data/file1.txt

3. Das erste Backup (Full Backup)

Beim ersten Durchlauf erstellen wir das Basis-Backup und die Snapshot-Datei.

Befehl:

tar -cvpf ~/backup_demo/archives/full_backup.tar.gz \
    --listed-incremental=~/backup_demo/archives/backup.snar \
    -z ~/backup_demo/data
  • -c: Create (Erstellen)
  • -v: Verbose (Anzeigen, was passiert)
  • -p: Preserve permissions (Rechte beibehalten)
  • -f: File (Name des Archivs)
  • --listed-incremental: Der Pfad zur Snapshot-Metadaten-Datei.
  • -z: Komprimierung mit gzip.

4. Das inkrementelle Backup erstellen

Nehmen wir an, es wurden Daten geändert:

echo "Datei 2" > ~/backup_demo/data/file2.txt

Nun führen wir denselben Befehl erneut aus, ändern aber den Namen des Archivs:

tar -cvpf ~/backup_demo/archives/inc_backup_1.tar.gz \
    --listed-incremental=~/backup_demo/archives/backup.snar \
    -z ~/backup_demo/data

Wichtig: Da die Datei backup.snar bereits existiert, erkennt tar, dass es ein inkrementelles Backup ist und packt nur file2.txt ein.


5. Automatisierung per Bash-Script

Als Admin schreibt man dafür ein Script, um Zeitstempel automatisch zu generieren.

Erstelle eine Datei backup_script.sh:

#!/bin/bash

# Variablen
SOURCE="/home/user/backup_demo/data"
DEST="/home/user/backup_demo/archives"
SNAR="$DEST/backup.snar"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
FILENAME="backup_$DATE.tar.gz"

# Backup ausführen
tar -cvpf "$DEST/$FILENAME" --listed-incremental="$SNAR" -z "$SOURCE"

echo "Backup abgeschlossen: $FILENAME"

Mache das Script ausführbar: chmod +x backup_script.sh.


6. Zeitplanung mit Cron (Automation)

Um das Backup täglich um 02:00 Uhr nachts auszuführen, nutzen wir crontab.

  1. Öffne die Crontab:
    crontab -e
  2. Füge folgende Zeile am Ende ein:
    0 2 * * * /pfad/zu/deinem/backup_script.sh

7. Wiederherstellung (Restore)

Bei inkrementellen Backups ist die Reihenfolge der Wiederherstellung entscheidend! Man muss mit dem Full Backup beginnen und dann alle inkrementellen Backups nacheinander einspielen.

Schritt 1: Full Backup entpacken

tar -xvpf full_backup.tar.gz -G -C /zielverzeichnis

Schritt 2: Inkrementelle Backups nacheinander entpacken

tar -xvpf inc_backup_1.tar.gz -G -C /zielverzeichnis
tar -xvpf inc_backup_2.tar.gz -G -C /zielverzeichnis
  • -x: Extract (Entpacken)
  • -G: (oder --incremental): Sagt tar, dass es mit inkrementellen Metadaten umgehen soll (wichtig für gelöschte Dateien).
  • -C: Change Directory (Zielordner).

Best Practices für System Admins

  1. Rotation: Löschen Sie die Snapshot-Datei (.snar) periodisch (z.B. einmal im Monat), um einen neuen "Full Backup"-Zyklus zu erzwingen.
  2. Validierung: Testen Sie die Wiederherstellung regelmäßig. Ein Backup, das nicht wiederhergestellt werden kann, ist wertlos.
  3. Offsite-Backup: Kopieren Sie die .tar.gz-Dateien nach der Erstellung per rsync oder scp auf einen externen Server.
  4. Logging: Leiten Sie die Ausgabe des Scripts in eine Logdatei um: >> /var/log/backup.log 2>&1.
0