Backups mit restic – einfach, schnell und sicher einrichten

Terminal-based backup process using restic, showing encrypted backups and snapshot management in a Linux environment.
Inhaltsverzeichnis
  1. Ziel dieser Anleitung
  2. Was ist restic?
  3. Warum restic statt rsync oder scp?
  4. Die 3-2-1-Backup-Strategie
  5. Verschlüsselung bei restic
  6. Passwortdateien statt Umgebungsvariablen
  7. restic installieren
  8. Verzeichnisstruktur vorbereiten
  9. Passwörter erstellen
  10. NAS als Backup-Ziel einhängen
  11. Repositories auf dem NAS initialisieren
  12. Repository für Dokumente
  13. Repository für kerezovic.de
  14. Repository für catarix.de
  15. Erstes Backup auf das NAS
  16. Hetzner Storage Box vorbereiten
  17. Repositories auf der Storage Box initialisieren
  18. Dokumente
  19. kerezovic.de
  20. catarix.de
  21. Ein kleines Backup-Script
  22. Script testen
  23. Täglichen Cronjob einrichten
  24. Snapshots anzeigen
  25. Backups prüfen
  26. Restore testen
  27. Einzelne Datei wiederherstellen
  28. Wichtige Hinweise
  29. Fazit
Backups müssen zuverlässig und automatisiert laufen. Dieser Artikel zeigt, wie du mit restic in wenigen Schritten ein sicheres Backup-System einrichtest – lokal oder auf entfernten Systemen.

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
Übersichtsgrafik einer modernen 3-2-1-Backup-Strategie mit restic, NAS-Speicher, verschlüsseltem Offsite-Backup und mehreren Systemen in einer sicheren Backup-Infrastruktur.
Übersichtsgrafik einer modernen 3-2-1-Backup-Strategie mit restic, NAS-Speicher, verschlüsseltem Offsite-Backup und mehreren Systemen in einer sicheren Backup-Infrastruktur. (Bild: KI)

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.

War dieser Artikel hilfreich?
(0 Likes)