Nachdem meine Workstation endlich auf neue Hardware umgezogen ist, wurde es Zeit, ein stündliches inkrementelles Backup aufzubauen, das die bisherige, auf rsnapshot basierende Lösung ersetzen kann. So kam ich zu diesem Ansatz mit restic und Minio – eine Kombination, die mir nicht nur mehr Flexibilität bietet, sondern auch Speicherplatz spart und einfacher zu verwalten ist.
Ich wollte eine Lösung, die sicher, schnell und leicht automatisierbar ist. Restic hat sich als genau das richtige Tool erwiesen, besonders in Kombination mit Minio als selbstgehostetem S3-Backend. Das Schöne daran? Die ersten Backups dauern lange, aber alle weiteren laufen blitzschnell.
Falls du ebenfalls nach einer zuverlässigen Backup-Lösung suchst, zeige ich dir hier meinen Ansatz – von der ersten Einrichtung bis zur Automatisierung mit Cron.
Vorbereitungen
Warum Restic?
- Alle Backups sind automatisch verschlüsselt.
- Durch Deduplizierung wird nur das gespeichert, was sich wirklich geändert hat.
- Perfekt für Cloud- und lokale Backups.
Warum Minio?
- Ein S3-kompatibler Storage-Server, den ich selbst hosten kann.
- Funktioniert nahtlos mit restic.
- Ideal für ein selbstbestimmtes Backup-Setup.
Restic installieren
Je nach Linux-Distribution kannst du restic ganz einfach installieren:
Debian/Ubuntu:
sudo apt update && sudo apt install restic -y
Arch Linux:
sudo pacman -S restic
RHEL-basiert:
sudo dnf install restic -y
Umgebung konfigurieren
Damit Restic mit Minio kommunizieren kann, muss eine .env
-Datei mit den erforderlichen Zugangsdaten erstellt werden:
export RESTIC_PASSWORD_FILE=/root/.restic
export RESTIC_REPOSITORY=s3:http://minio:9000/tardis-backup
export AWS_SECRET_ACCESS_KEY=<aws-secret>
export AWS_ACCESS_KEY_ID=tardis
Die Datei sollte aus Sicherheitsgründen mit eingeschränkten Berechtigungen versehen werden:
chmod 600 .env
Restic initialisieren
Bevor das Backup starten kann, muss das Repository initialisiert werden. Dazu wird zunächst die .env
-Datei geladen und dann das Repository eingerichtet:
source .env
restic init
Falls das Repository bereits existiert, gibt Restic eine entsprechende Meldung aus. Andernfalls wird das neue Repository erstellt und kann direkt genutzt werden.
Backup-Skript mit Restic
Mein Backup-Skript musste einfach sein: Es sollte alle relevanten Daten sichern, unnötige Dateien ignorieren und sich problemlos in meine bestehende Infrastruktur einfügen.
Hier ist mein aktuelles Backup-Skript:
#!/bin/bash
# Verzeichnisse, die gesichert werden sollendirs="/etc /home /root /home/olaf/Nextcloud/Keepass"
# Logfile erweitern
exec >> /tmp/cron.hourly 2>&1
# Umgebungsvariablen laden
source $(dirname "$0")/.env
# Lock-Datei erstellen, um doppelte Ausführung zu verhindern
mkdir /tmp/restic-backup || { echo "$0 already running" exit 1 }
trap "rm -r /tmp/restic-backup" EXIT
echo "Starting backup at $(date)"
time /usr/bin/restic --verbose backup --exclude-caches $dirs
echo "Pruning old snapshots"
time /usr/bin/restic --verbose forget --keep-last 4 --keep-hourly 24 --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --keep-yearly 4 --prune
echo "Backup finished at $(date)"
Wichtiger Hinweis zum ersten Backup
Ich war beim ersten Backup ehrlich gesagt etwas nervös, weil es mehrere Stunden gedauert hat. Restic musste ja alles von Grund auf speichern. Doch danach war ich beeindruckt: Die folgenden Backups liefen in wenigen Sekunden, da restic nur noch die geänderten Daten sichert. Falls du also denkst, dass es hängen geblieben ist – keine Sorge, das ist völlig normal!
Automatisierung mit Cron
Nachdem das Backup-Skript lief, wollte ich es automatisch ausführen lassen. Dafür eignet sich Cron perfekt:
echo "0 * * * * root /root/backup.sh" >> /etc/crontab
So wird das Backup stündlich angestoßen.
E-Mail-Benachrichtigung bei Fehlern
Ich wollte sichergehen, dass ich informiert werde, falls ein Backup fehlschlägt. Daher habe ich die MAILTO
-Variable in die Crontab gesetzt:
MAILTO="admin@example.com"
0 * * * * root /root/backup.sh
Jetzt bekomme ich automatisch eine Mail, falls etwas schiefgeht.
CACHEDIR.TAG nutzen, um unnötige Backups zu vermeiden
Damit Restic nicht sinnlos temporäre Dateien sichert, kannst du bestimmte Verzeichnisse mit einer CACHEDIR.TAG
-Datei ausschließen:
echo "Signature: 8a477f597d28d172789f06886806bc55" > /home/user/.cache/CACHEDIR.TAG
Dadurch ignoriert restic dieses Verzeichnis automatisch, wenn du --exclude-caches
verwendest.
Mehrere Clients ins Backup einbinden
Sobald mein Workstation-Backup lief, wollte ich auch meine anderen Rechner ins System einbinden. Dafür gibt es zwei Möglichkeiten:
- Per SSH-Tunnel zu Minio
- Minio über ein VPN erreichbar machen
Diese Lösungen werde ich in einem eigenen Beitrag detailliert beschreiben.
Troubleshooting & häufige Fehler
Hier sind einige Probleme, über die ich gestolpert bin – und wie ich sie gelöst habe:
- 403 Forbidden bei Minio: Stelle sicher, dass die Access-Keys korrekt sind.
- "Is there a repository at this location?" Falls du das Repository noch nicht initialisiert hast, führe
restic init
erneut aus. - Cronjob läuft nicht? Prüfe, ob
restic
imPATH
liegt und das Skript ausführbar ist (chmod +x backup.sh
).
Fazit & Ausblick
Ich bin mit meiner neuen Backup-Lösung mehr als zufrieden: Sie ist automatisiert, sicher und performant. Jetzt kann ich ruhig schlafen, weil ich weiß, dass meine Daten zuverlässig gesichert sind.
Aber das hier war nur der Anfang:
- Ohne Wiederherstellung kein echtes Backup! Im nächsten Beitrag zeige ich, wie du deine Backups problemlos zurückspielst.
- Minio von Grund auf installieren? Die Anleitung dazu findet ihr hier.
- Mehrere Clients effizient sichern? Ein weiteres spannendes Thema!
Bleib dran – und sichere dein Home-Lab!
Falls du Fragen oder eigene Erfahrungen teilen möchtest, hinterlasse gerne einen Kommentar oder diskutiere mit uns im Forum!