Tutorial: Automatische inkrementelle Backups mit Tar unter Linux
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.
- Öffne die Crontab:
crontab -e - 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
- Rotation: Löschen Sie die Snapshot-Datei (
.snar) periodisch (z.B. einmal im Monat), um einen neuen "Full Backup"-Zyklus zu erzwingen. - Validierung: Testen Sie die Wiederherstellung regelmäßig. Ein Backup, das nicht wiederhergestellt werden kann, ist wertlos.
- Offsite-Backup: Kopieren Sie die
.tar.gz-Dateien nach der Erstellung perrsyncoderscpauf einen externen Server. - Logging: Leiten Sie die Ausgabe des Scripts in eine Logdatei um:
>> /var/log/backup.log 2>&1.