Backup

Veröffentlicht: 07.06.2026 | Aktualisiert: 07.06.2026

Server Backup

(Lokales Dateisystem → ZFS storage →) ZFS Snapshot → ZFS Synchronisation.

Lokal

Um einen lokalen Ordner zwischen zwei Dateisystemen zu sichern nutzen wir Rsync + Crontab.

Zunächst richten wir das Zielverzeichnis ein, z.B.:

sudo mkdir /storage/backup/local
sudo chown -R USERNAME: /storage/backup/local

Das Backup script speichern wir unter /data/scripts/backup/local_docker.shund sieht wie folgt aus:

#!/bin/sh

#README: https://niklas-stephan.de/wiki/tutorials/backup/

# Set variables
SOURCE_DIR="/data/docker"
BACKUP_DIR="/storage/backup/local"
NTFY_URL="https://notify.handtrixxx.com/backup"

rsync -aX --delete --partial --inplace --timeout=60 \
    "$SOURCE_DIR" "$BACKUP_DIR"
RSYNC_EXIT="$?"
#RSYNC_EXIT="1"

if [ "$RSYNC_EXIT" -ne 0 ]; then
    if [ "$RSYNC_EXIT" -eq 23 ]; then
        MESSAGE="Backup of \"$SOURCE_DIR\" completed with partial errors (exit code 23 - some files could not be read)"
    else
        MESSAGE="Backup of \"$SOURCE_DIR\" failed with exit code $RSYNC_EXIT"
    fi
    curl --max-time 30 -s -o /dev/null\
        -H "Title: Backup failed on $(hostname)" \
        -H "Tags: warning" \
        -d "$MESSAGE" \
        "$NTFY_URL"
fi

Wir machen dieses Script ausführbar über:

chmod +x /data/scripts/backup/local_docker.sh

Um das Script manuell auszuführen gilt folgendes Kommando:

sudo /data/scripts/backup/local_docker.sh

Zur Automatisierung erstellen wir einen Cronjob der täglich 02:00 Uhr laufen soll.

sudo crontab -e

Und fügen diese Zeile hinzu:

0 2 * * * /data/scripts/backup/local_docker.sh >> /var/log/backup_local_docker.log 2>&1

Erläuterung:

  • Läuft 02:00 Uhr täglich (0 2 * * *)
  • Läuft als root
  • Erzeugt eine Log Datei zur Fehleranalyse