von der Erstellung inkrementeller Backups mit Restic über die Einbindung eines entfernten Backup-Speichers per NFS bis hin zur Synchronisation mit Rclone und der Wiederherstellung im Notfall.
In diesem Beitrag zeige ich, wie ich meinen 43-GB-Server (mit 99 % Docker Compose-Apps und Cronjobs) effizient sichere – und das inkrementell, sodass nur geänderte Daten gespeichert werden. Mit einem Zielspeicher von 5 TB steht uns reichlich Platz zur Verfügung. Dabei kommen Restic, NFS und Rclone zum Einsatz.
1. Vollständige Systembackups mit Restic #
Warum Restic? #
Restic ist ein modernes Backup-Tool, das:
- Deduplizierung unterstützt (nur geänderte Daten werden gespeichert)
- Verschlüsselung und Komprimierung bietet
- Einfach per Skript automatisiert werden kann
Repository-Passwort sichern #
Um zu vermeiden, dass bei jedem Backup das Passwort manuell eingegeben werden muss, speichern wir es in einer geschützten Datei (z. B. /etc/restic-password). Wichtig: Die Datei sollte nur für root lesbar sein:
sudo sh -c 'echo "dein_geheimes_passwort" > /etc/restic-password'
sudo chmod 600 /etc/restic-passwordBackup-Skript #
Das folgende Skript führt das Backup, entfernt alte Snapshots und säubert unreferenzierte Daten. Es nutzt sudo -E, um Umgebungsvariablen (wie das Passwort) an Restic weiterzureichen.
#!/bin/bash
# Konfiguration
REPO_PATH="/mnt/backup_new/backup-server/"
EXCLUDE_FILE="/mnt/backup_new/excludes.txt"
LOG_FILE="restic-backup.log"
KEEP_DAILY=7
KEEP_WEEKLY=4
KEEP_MONTHLY=6
PASSWORD_FILE="/etc/restic-password"
# Sicherstellen, dass Restic installiert ist
if ! command -v restic &>/dev/null; then
echo "Restic ist nicht installiert. Bitte zuerst installieren." | tee -a "$LOG_FILE"
exit 1
fi
# Restic-Passwort laden
if [ -f "$PASSWORD_FILE" ]; then
export RESTIC_PASSWORD_FILE="$PASSWORD_FILE"
else
echo "Restic-Passwortdatei nicht gefunden unter $PASSWORD_FILE" | tee -a "$LOG_FILE"
exit 1
fi
# Backup starten
echo "[$(date)] Starte Restic-Backup..." | tee -a "$LOG_FILE"
sudo -E restic backup -r "$REPO_PATH" --exclude-file="$EXCLUDE_FILE" / 2>&1 | tee -a "$LOG_FILE"
# Alte Snapshots löschen (Forget + Prune)
echo "[$(date)] Lösche alte Snapshots..." | tee -a "$LOG_FILE"
sudo -E restic forget -r "$REPO_PATH" --keep-daily "$KEEP_DAILY" --keep-weekly "$KEEP_WEEKLY" --keep-monthly "$KEEP_MONTHLY" --prune 2>&1 | tee -a "$LOG_FILE"
# Unreferenzierte Daten entfernen
echo "[$(date)] Führe Prune aus, um nicht referenzierte Daten zu löschen..." | tee -a "$LOG_FILE"
sudo -E restic prune -r "$REPO_PATH" 2>&1 | tee -a "$LOG_FILE"
# Repository-Integrität prüfen
echo "[$(date)] Überprüfe die Repository-Integrität..." | tee -a "$LOG_FILE"
sudo -E restic check -r "$REPO_PATH" 2>&1 | tee -a "$LOG_FILE"
# Besitzrechte fuer rclone aendern
echo "[$(date)] Changing ownership for rclone access..." | tee -a "$LOG_FILE"
sudo chown -R "$BACKUP_USER":"$BACKUP_USER" "$REPO_PATH"
echo "[$(date)] Backup erfolgreich abgeschlossen." | tee -a "$LOG_FILE"Exclude-Datei anlegen #
Die Datei /mnt/backup_new/excludes.txt sollte dynamische und nicht benötigte Verzeichnisse ausschließen:
/dev
/proc
/sys
/tmp
/run
/mnt
/media
/lost+found
/var/lib/docker # Docker-Container und Images können separat gesichert werdenAutomatisierung per Cron #
Um das Backup täglich um 3 Uhr nachts auszuführen, fügen wir folgenden Eintrag zur Crontab hinzu (crontab -e):
0 3 * * * /pfad/zum/backup_script.sh >> restic-cron.log 2>&12. Backup-Speicher auf einem entfernten Server per NFS #
Für den zweiten Server, der im selben Netzwerk ist, aber keinen direkt angebundenen Speicher hat, empfiehlt sich ein NFS-Mount. Damit wird der Speicher, der an Server 1 angeschlossen ist, über NFS freigegeben und auf Server 2 eingebunden.
Einrichtung auf dem Speicher-Server (Server 1) #
Exports aktivieren:
sudo exportfs -ra
sudo systemctl restart nfs-serverExports konfigurieren: Bearbeite /etc/exports:
/mnt/backup_new 192.168.1.<Server2-IP>(rw,sync,no_root_squash,no_subtree_check)NFS-Server installieren:
sudo apt install nfs-kernel-server # Debian/Ubuntu
sudo dnf install nfs-utils # Fedora
sudo pacman -S nfs-utils # ArchEinrichtung auf dem Backup-Client (Server 2) #
Automatisches Mounten via fstab: Füge in /etc/fstab hinzu:
192.168.1.10:/mnt/backup_new /mnt/backup_new nfs defaults,_netdev 0 0Mount-Punkt erstellen und NFS-Freigabe einbinden:
sudo mkdir -p /mnt/backup_new
sudo mount -t nfs -o tcp 192.168.1.10:/mnt/backup_new /mnt/backup_newTipp: Falls DNS oder Port-Probleme auftreten, überprüfe Firewall-Einstellungen auf Server 1 und verwende die IP-Adresse anstelle des Hostnamens.
NFS-Client installieren:
sudo apt install nfs-common # Debian/Ubuntu
sudo dnf install nfs-utils # Fedora
sudo pacman -S nfs-utils # ArchAuf Server 2 greifen wir dann in unserem Backup-Skript auf den Pfad /mnt/backup_new/backup-server-2/ zu.
3. Synchronisation mit der Cloud via Rclone #
Zusätzlich zur lokalen Sicherung synchronisieren wir die Backups mit der Cloud – etwa via Rclone:
rclone sync /mnt/backup_new/backup-server remote:/backup-locationTipp: Wenn es zu “Permission Denied”-Fehlern kommt, prüfe die Dateiberechtigungen. In meinem Fall half es, den Besitz des Backup-Verzeichnisses zu ändern:
sudo chown -R deinuser:deinuser /mnt/backup_new/backup-server4. Wiederherstellung im Notfall #
Sollte einmal das System ausfallen, lässt sich das Backup mit Restic einfach wiederherstellen.
Gesamtes System wiederherstellen #
Um das komplette System an einem bestimmten Tag wiederherzustellen, führe folgenden Befehl aus:
sudo -E restic restore latest --target /Dieser Befehl stellt alle Dateien des letzten Snapshots in das Root-Verzeichnis (/) wieder her.
Hinweis: Für eine selektive Wiederherstellung kannst du den --include-Parameter nutzen:
sudo -E restic restore latest --target / --include /etc/Zusammenfassung #
- Restic sorgt für ein sicheres, inkrementelles Backup, das nur Änderungen speichert.
- Das Backup-Skript automatisiert den Prozess, inklusive Aufräumen alter Snapshots und Prüfen der Repository-Integrität.
- NFS ermöglicht es, den an einem anderen Server angeschlossenen Speicher in das Netzwerk einzubinden.
- Rclone synchronisiert die Backups zusätzlich mit der Cloud – nach Korrektur der Berechtigungen.
- Im Notfall kann das System einfach mit
restic restorewiederhergestellt werden.
Diese Lösung ist robust, effizient und automatisiert – ideal für Server, die in produktiven Umgebungen laufen. Ich hoffe, diese Dokumentation hilft euch dabei, eure eigenen Backups aufzusetzen und zu verstehen, wie ihr im Ernstfall schnell wiederherstellen könnt.