Backups sind eines der Themen, die man gern auf später verschiebt. Meist funktioniert ja alles – bis es das plötzlich nicht mehr tut.
Eine versehentlich gelöschte Datei, ein defekter Datenträger, ein kaputtes Update oder ein kompromittiertes System reichen aus. Dann zählt nicht mehr, ob man ein Backup geplant hatte, sondern ob es wirklich existiert und wiederherstellbar ist.
In dieser Anleitung zeige ich ein praktisches Backup-Setup mit restic. Gesichert wird täglich zuerst auf ein NAS und anschließend zusätzlich auf eine Hetzner Storage Box.
Ziel dieser Anleitung
Am Ende haben wir ein einfaches, erweiterbares Backup-Setup:
- tägliche Backups um 01:00 Uhr
- lokales Backup auf ein NAS
- zusätzliches Offsite-Backup auf eine Hetzner Storage Box
- verschlüsselte restic-Repositories
- getrennte Passwörter pro Repository
- ein kleines Backup-Script, das leicht erweitert werden kann
Als Beispiel sichern wir drei Verzeichnisse:
/home/mirko/Dokumente/srv/www/kerezovic.de/srv/www/catarix.de
Was ist restic?
restic ist ein modernes Backup-Programm für Linux, BSD, macOS und Windows. Es besteht aus einem einzelnen Programm und benötigt keinen eigenen Server.
Backups können auf viele unterschiedliche Speicherziele geschrieben werden: lokal, per SFTP, auf REST-Server, S3-kompatible Speicher, Cloud-Speicher und weitere Backends.
Besonders interessant sind drei Eigenschaften:
- Verschlüsselung: Daten werden vor dem Speichern verschlüsselt.
- Inkrementelle Sicherung: Nach dem ersten Backup werden nur Änderungen übertragen.
- Deduplizierung: gleiche Datenblöcke werden nicht mehrfach gespeichert.
Warum restic statt rsync oder scp?
rsync und scp sind sehr nützliche Werkzeuge.
Für echte Backups haben sie aber Grenzen.
- scp kopiert Dateien, bietet aber keine Snapshot-Historie.
- rsync synchronisiert sehr effizient, ersetzt aber ohne zusätzliche Logik alte Zustände.
- restic erstellt verschlüsselte Snapshots mit Historie, Deduplizierung und Wiederherstellung einzelner Zeitpunkte.
Das ist ein wichtiger Unterschied: Bei einer Synchronisation kann eine versehentlich gelöschte Datei auch am Ziel verschwinden. Ein Backup mit Snapshots erlaubt dagegen die Wiederherstellung älterer Zustände.
Die 3-2-1-Backup-Strategie
Ein gutes Backup-Konzept folgt oft der 3-2-1-Regel:
- 3 Kopien der Daten
- 2 unterschiedliche Speicherorte oder Medien
- 1 Kopie außer Haus
In unserem Beispiel sieht das so aus:
- Originaldaten auf dem Server
- Backup auf dem NAS im lokalen Netzwerk
- zusätzliches Offsite-Backup auf der Hetzner Storage Box
Damit schützt man sich nicht nur vor gelöschten Dateien, sondern auch vor Hardwaredefekten oder Problemen am eigenen Standort.
Verschlüsselung bei restic
restic verschlüsselt die Daten clientseitig, also bevor sie das System verlassen. Das ist besonders wichtig, wenn Backups auf externen Systemen oder bei einem Anbieter gespeichert werden.
Laut restic-Dokumentation werden die Daten im Repository mit AES-256 im Counter Mode verschlüsselt und mit Poly1305-AES authentifiziert.
Praktisch bedeutet das: Ohne das Repository-Passwort kann niemand die Daten sinnvoll lesen – auch nicht der Betreiber des Speicherziels.
Wichtig: Wenn das Passwort verloren geht, sind auch die Backups verloren. Das Passwort muss daher sicher dokumentiert werden.
Passwortdateien statt Umgebungsvariablen
In vielen einfachen Beispielen wird das restic-Passwort über eine Umgebungsvariable gesetzt. Für ein dauerhaftes Backup-Script ist eine rootgeschützte Passwortdatei aber meist sauberer.
Vorteile:
- kein Passwort direkt im Script
- besser für Cronjobs geeignet
- Zugriff über Dateirechte kontrollierbar
- pro Repository ein eigenes Passwort möglich
restic installieren
Unter Debian oder Ubuntu lässt sich restic direkt aus den Paketquellen installieren:
sudo apt update
sudo apt install restic
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
restic
...
Setting up restic ...
Anschließend prüfen wir die Version:
restic version
restic 0.16.4 compiled with go1.21.0 on linux/amd64
Verzeichnisstruktur vorbereiten
Wir legen ein kleines Verzeichnis für Passwortdateien und Scripts an:
sudo mkdir -p /root/.restic
sudo mkdir -p /root/scripts
sudo chmod 700 /root/.restic
sudo chmod 700 /root/scripts
ls -ld /root/.restic /root/scripts
drwx------ 2 root root 4096 May 6 01:00 /root/.restic
drwx------ 2 root root 4096 May 6 01:00 /root/scripts
Passwörter erstellen
Für jedes Repository verwenden wir ein eigenes Passwort. Das ist etwas mehr Aufwand, begrenzt aber den Schaden, falls ein Passwort kompromittiert wird.
sudo sh -c 'openssl rand -base64 48 > /root/.restic/dokumente.pw'
sudo sh -c 'openssl rand -base64 48 > /root/.restic/kerezovic.pw'
sudo sh -c 'openssl rand -base64 48 > /root/.restic/catarix.pw'
sudo chmod 600 /root/.restic/*.pw
sudo ls -l /root/.restic/
-rw------- 1 root root 65 May 6 01:01 catarix.pw
-rw------- 1 root root 65 May 6 01:01 dokumente.pw
-rw------- 1 root root 65 May 6 01:01 kerezovic.pw
Diese Dateien gehören zusätzlich in eine sichere Dokumentation, zum Beispiel in einen Passwortmanager. Nur auf dem Backup-Server allein sollten sie nicht die einzige Kopie sein.
NAS als Backup-Ziel einhängen
In diesem Beispiel gehen wir davon aus, dass das NAS unter /mnt/nas-backup erreichbar ist.
Die konkrete Einbindung hängt vom eigenen NAS ab.
Ein einfaches Beispiel mit CIFS könnte so aussehen:
sudo mkdir -p /mnt/nas-backup
sudo mount -t cifs //nas/backup /mnt/nas-backup \
-o credentials=/root/.smbcredentials,uid=0,gid=0,file_mode=0600,dir_mode=0700
mount | grep nas-backup
//nas/backup on /mnt/nas-backup type cifs (...)
Für den Artikel ist entscheidend:
Der Pfad /mnt/nas-backup muss zuverlässig verfügbar sein, bevor das Backup startet.
Repositories auf dem NAS initialisieren
Nun legen wir drei restic-Repositories auf dem NAS an.
sudo mkdir -p /mnt/nas-backup/restic/dokumente
sudo mkdir -p /mnt/nas-backup/restic/kerezovic
sudo mkdir -p /mnt/nas-backup/restic/catarix
Repository für Dokumente
sudo restic \
--repo /mnt/nas-backup/restic/dokumente \
--password-file /root/.restic/dokumente.pw \
init
created restic repository 3f6b8b4c23 at /mnt/nas-backup/restic/dokumente
Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
Repository für kerezovic.de
sudo restic \
--repo /mnt/nas-backup/restic/kerezovic \
--password-file /root/.restic/kerezovic.pw \
init
created restic repository 91c2e00a6d at /mnt/nas-backup/restic/kerezovic
Repository für catarix.de
sudo restic \
--repo /mnt/nas-backup/restic/catarix \
--password-file /root/.restic/catarix.pw \
init
created restic repository b1e4f72c5a at /mnt/nas-backup/restic/catarix
Erstes Backup auf das NAS
Jetzt führen wir das erste Backup aus. Beim ersten Lauf müssen alle Daten übertragen werden. Spätere Läufe sind deutlich schneller, weil restic nur neue oder geänderte Datenblöcke speichert.
sudo restic \
--repo /mnt/nas-backup/restic/dokumente \
--password-file /root/.restic/dokumente.pw \
backup /home/mirko/Dokumente
repository 3f6b8b4c opened (version 2)
created new cache in /root/.cache/restic
Files: 1240 new, 0 changed, 0 unmodified
Dirs: 180 new, 0 changed, 0 unmodified
Added to the repository: 2.418 GiB
processed 1240 files, 2.410 GiB in 1:12
snapshot 8c6a1d2f saved
Ein zweiter Lauf zeigt den Vorteil:
sudo restic \
--repo /mnt/nas-backup/restic/dokumente \
--password-file /root/.restic/dokumente.pw \
backup /home/mirko/Dokumente
repository 3f6b8b4c opened (version 2)
Files: 0 new, 2 changed, 1238 unmodified
Dirs: 0 new, 1 changed, 179 unmodified
Added to the repository: 4.128 MiB
processed 1240 files, 2.410 GiB in 0:08
snapshot a4d90e91 saved
Obwohl wieder ein vollständiger Snapshot entsteht, werden nur die geänderten Daten zusätzlich gespeichert. Das ist der große Unterschied zwischen einem einfachen Kopieren und einem modernen Backup.
Hetzner Storage Box vorbereiten
Die Hetzner Storage Box kann per SFTP genutzt werden. Die Zugangsdaten und der genaue Servername stehen im Hetzner Robot.
Beispielhaft verwenden wir:
- User:
u123456 - Server:
u123456.your-storagebox.de - Pfad:
/backups/restic
Zuerst testen wir den Zugriff:
sftp u123456@u123456.your-storagebox.de
Connected to u123456.your-storagebox.de.
sftp> mkdir backups
sftp> mkdir backups/restic
sftp> quit
Repositories auf der Storage Box initialisieren
Dokumente
sudo restic \
--repo sftp:u123456@u123456.your-storagebox.de:/backups/restic/dokumente \
--password-file /root/.restic/dokumente.pw \
init
created restic repository 5e2a4c9f11 at sftp:u123456@u123456.your-storagebox.de:/backups/restic/dokumente
kerezovic.de
sudo restic \
--repo sftp:u123456@u123456.your-storagebox.de:/backups/restic/kerezovic \
--password-file /root/.restic/kerezovic.pw \
init
created restic repository 67db1280ac at sftp:u123456@u123456.your-storagebox.de:/backups/restic/kerezovic
catarix.de
sudo restic \
--repo sftp:u123456@u123456.your-storagebox.de:/backups/restic/catarix \
--password-file /root/.restic/catarix.pw \
init
created restic repository 9a4b337d5e at sftp:u123456@u123456.your-storagebox.de:/backups/restic/catarix
Ein kleines Backup-Script
Jetzt bauen wir ein kleines Script. Es sichert jedes Verzeichnis zuerst auf das NAS und danach auf die Hetzner Storage Box.
sudo vi /root/scripts/restic-backup.sh
#!/bin/bash
set -euo pipefail
LOGFILE="/var/log/restic-backup.log"
STORAGEBOX_USER="u123456"
STORAGEBOX_HOST="u123456.your-storagebox.de"
STORAGEBOX_BASE="/backups/restic"
NAS_BASE="/mnt/nas-backup/restic"
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') $*" | tee -a "$LOGFILE"
}
backup_target() {
local NAME="$1"
local SOURCE="$2"
local PASSWORD_FILE="$3"
local NAS_REPO="$NAS_BASE/$NAME"
local REMOTE_REPO="sftp:${STORAGEBOX_USER}@${STORAGEBOX_HOST}:${STORAGEBOX_BASE}/${NAME}"
log "=== Backup startet: $NAME ==="
log "Quelle: $SOURCE"
if [ ! -d "$SOURCE" ]; then
log "FEHLER: Quelle existiert nicht: $SOURCE"
return 1
fi
if [ ! -d "$NAS_REPO" ]; then
log "FEHLER: NAS-Repository nicht gefunden: $NAS_REPO"
return 1
fi
log "Backup auf NAS: $NAS_REPO"
restic \
--repo "$NAS_REPO" \
--password-file "$PASSWORD_FILE" \
backup "$SOURCE" \
--tag "$NAME" \
--tag "nas"
log "Backup auf Storage Box: $REMOTE_REPO"
restic \
--repo "$REMOTE_REPO" \
--password-file "$PASSWORD_FILE" \
backup "$SOURCE" \
--tag "$NAME" \
--tag "storagebox"
log "Aufräumen alter Snapshots auf NAS: $NAME"
restic \
--repo "$NAS_REPO" \
--password-file "$PASSWORD_FILE" \
forget \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6 \
--prune
log "Aufräumen alter Snapshots auf Storage Box: $NAME"
restic \
--repo "$REMOTE_REPO" \
--password-file "$PASSWORD_FILE" \
forget \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6 \
--prune
log "=== Backup fertig: $NAME ==="
}
log "===== restic Backup gestartet ====="
backup_target \
"dokumente" \
"/home/mirko/Dokumente" \
"/root/.restic/dokumente.pw"
backup_target \
"kerezovic" \
"/srv/www/kerezovic.de" \
"/root/.restic/kerezovic.pw"
backup_target \
"catarix" \
"/srv/www/catarix.de" \
"/root/.restic/catarix.pw"
log "===== restic Backup abgeschlossen ====="
Danach machen wir das Script ausführbar:
sudo chmod 700 /root/scripts/restic-backup.sh
sudo touch /var/log/restic-backup.log
sudo chmod 600 /var/log/restic-backup.log
ls -l /root/scripts/restic-backup.sh /var/log/restic-backup.log
-rwx------ 1 root root 2450 May 6 01:20 /root/scripts/restic-backup.sh
-rw------- 1 root root 0 May 6 01:20 /var/log/restic-backup.log
Script testen
Vor dem Cronjob sollte das Script einmal manuell laufen.
sudo /root/scripts/restic-backup.sh
2026-05-06 01:21:00 ===== restic Backup gestartet =====
2026-05-06 01:21:00 === Backup startet: dokumente ===
2026-05-06 01:21:00 Quelle: /home/mirko/Dokumente
2026-05-06 01:21:00 Backup auf NAS: /mnt/nas-backup/restic/dokumente
repository 3f6b8b4c opened (version 2)
Files: 0 new, 2 changed, 1238 unmodified
Added to the repository: 4.128 MiB
snapshot a4d90e91 saved
2026-05-06 01:21:08 Backup auf Storage Box: sftp:u123456@u123456.your-storagebox.de:/backups/restic/dokumente
repository 5e2a4c9f opened (version 2)
Files: 0 new, 2 changed, 1238 unmodified
Added to the repository: 4.128 MiB
snapshot 6f13ab2c saved
...
2026-05-06 01:24:12 ===== restic Backup abgeschlossen =====
Täglichen Cronjob einrichten
Jetzt richten wir den täglichen Lauf um 01:00 Uhr ein.
sudo crontab -e
Eintrag:
0 1 * * * /root/scripts/restic-backup.sh
Prüfen:
sudo crontab -l
0 1 * * * /root/scripts/restic-backup.sh
Snapshots anzeigen
Mit snapshots sieht man, welche Sicherungen vorhanden sind.
sudo restic \
--repo /mnt/nas-backup/restic/dokumente \
--password-file /root/.restic/dokumente.pw \
snapshots
ID Time Host Tags Paths
--------------------------------------------------------------------------------
8c6a1d2f 2026-05-06 01:10:22 server nas,dokumente /home/mirko/Dokumente
a4d90e91 2026-05-06 01:21:04 server nas,dokumente /home/mirko/Dokumente
--------------------------------------------------------------------------------
2 snapshots
Backups prüfen
Ein Backup sollte nicht nur erstellt, sondern auch geprüft werden.
sudo restic \
--repo /mnt/nas-backup/restic/dokumente \
--password-file /root/.restic/dokumente.pw \
check
using temporary cache in /tmp/restic-check-cache-123456
repository 3f6b8b4c opened (version 2)
created new cache in /tmp/restic-check-cache-123456
create exclusive lock for repository
load indexes
check all packs
check snapshots, trees and blobs
no errors were found
Für eine vollständigere Prüfung kann zusätzlich ein Teil der Daten gelesen werden:
sudo restic \
--repo /mnt/nas-backup/restic/dokumente \
--password-file /root/.restic/dokumente.pw \
check --read-data-subset=5%
repository 3f6b8b4c opened (version 2)
check all packs
read all data
no errors were found
Restore testen
Ein Backup ist erst dann wirklich nützlich, wenn eine Wiederherstellung funktioniert. Darum sollte man regelmäßig einen Restore testen.
sudo mkdir -p /tmp/restore-test
sudo restic \
--repo /mnt/nas-backup/restic/dokumente \
--password-file /root/.restic/dokumente.pw \
restore latest \
--target /tmp/restore-test
repository 3f6b8b4c opened (version 2)
restoring snapshot a4d90e91 of [/home/mirko/Dokumente] at 2026-05-06 01:21:04.123456789 +0200 CEST by root@server to /tmp/restore-test
Danach prüfen:
ls -la /tmp/restore-test/home/mirko/Dokumente
drwxr-xr-x 12 root root 4096 May 6 01:30 .
drwxr-xr-x 3 root root 4096 May 6 01:30 ..
-rw-r--r-- 1 root root 2048 May 5 18:12 beispiel.txt
Einzelne Datei wiederherstellen
Auch einzelne Dateien lassen sich gezielt zurückholen:
sudo restic \
--repo /mnt/nas-backup/restic/dokumente \
--password-file /root/.restic/dokumente.pw \
restore latest \
--include "/home/mirko/Dokumente/beispiel.txt" \
--target /tmp/restore-single
repository 3f6b8b4c opened (version 2)
restoring snapshot a4d90e91 to /tmp/restore-single
Wichtige Hinweise
- Passwortdateien zusätzlich sicher dokumentieren.
- Restore regelmäßig testen.
- Logs kontrollieren.
- NAS-Verfügbarkeit vor dem Backup sicherstellen.
- Offsite-Backup nicht vergessen.
- Backup-Ziel nicht dauerhaft für normale Benutzer beschreibbar machen.
Gerade der letzte Punkt ist wichtig: Wenn Schadsoftware Zugriff auf das Backup-Ziel hat, kann sie im schlimmsten Fall auch Backups löschen oder beschädigen.
Du brauchst Unterstützung bei solchen Themen? Ich helfe mit Catarix IT bei Analyse, Optimierung und Umsetzung – von Systemen über Netzwerke bis hin zu individuellen IT-Lösungen.
Fazit
Mit restic lässt sich ein starkes Backup-Konzept ohne große Infrastruktur umsetzen.
Die Kombination aus Snapshots, Verschlüsselung, Deduplizierung und Verifikation macht restic deutlich mächtiger als einfaches Kopieren per scp oder Synchronisieren per rsync.
In diesem Beispiel sichern wir täglich zuerst auf ein NAS und danach zusätzlich auf eine Hetzner Storage Box. Damit entsteht ein praxisnahes 3-2-1-Backup-Konzept, das sich leicht erweitern lässt.
Das Wichtigste bleibt aber: Ein Backup ist erst dann ein Backup, wenn es automatisch läuft und eine Wiederherstellung getestet wurde.
