restic sichert Dateien verschlüsselt und dedupliziert in ein Repository. Diese Referenz deckt den vollständigen Ablauf ab: Repository anlegen, sichern, prüfen, aufbewahren, wiederherstellen.

Repository anlegen und verbinden

# Zugangsdaten aus Umgebungsvariablen (empfohlen)
export RESTIC_REPOSITORY=sftp:backup@backup-host:/srv/restic/host01
export RESTIC_PASSWORD_FILE=/etc/restic/pw

restic init

# Alternativ direkt auf der Kommandozeile
restic -r /mnt/backup/restic init
restic -r s3:s3.example.org/bucket/prefix init

RESTIC_PASSWORD_FILE ist der bessere Weg als RESTIC_PASSWORD: Passwörter tauchen damit nicht in der Prozessliste auf. Die Datei braucht chmod 600.

Sichern

# Einfache Sicherung mehrerer Pfade
restic backup /etc /home /var/www

# Mit Ausschlussdatei und Tags
restic backup / --exclude-file=/etc/restic/exclude.txt --tag nightly

# Zusätzliche Metadaten und Fortschritt
restic backup /srv --host prod-web01 --verbose

# Vom Standardeingang (z. B. Datenbankdump)
pg_dump -Fc app | restic backup --stdin --stdin-filename app.dump

Ansehen und Vergleichen

restic snapshots                  # alle Sicherungen
restic snapshots --json | jq '.[-1]'
restic ls latest /etc/nginx       # Inhalt eines Snapshots
restic find "*.conf"              # Datei über alle Snapshots suchen
restic diff <snap-id-1> <snap-id-2>
restic stats --mode raw-data      # Größe des Repositories
restic stats latest --mode restore-size

Aufbewahrung

# Erst planen, dann anwenden (--dry-run zeigt, was gelöscht würde)
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 ...
        --keep-yearly 3 --dry-run

# Anschließend tatsächlich ausführen und Platz freigeben
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune

forget entfernt nur die Snapshot-Verweise, prune gibt den Platz tatsächlich frei. Ohne prune wächst das Repository weiter, obwohl alte Sicherungen „weg“ sind.

Wiederherstellen

# Alles aus dem neuesten Snapshot
restic restore latest --target /mnt/restore

# Nur einen Pfad
restic restore latest --target /mnt/restore --include /etc/nginx

# Einzelne Datei direkt ausgeben
restic dump latest /etc/nginx/nginx.conf > /tmp/nginx.conf

# Repository als Dateisystem einbinden und durchsuchen
mkdir /mnt/browse
restic mount /mnt/browse
ls /mnt/browse/snapshots/latest/etc/nginx
umount /mnt/browse

Integrität prüfen

restic check                          # Struktur und Index
restic check --read-data              # alle Datenblöcke prüfen (dauert lange)
restic check --read-data-subset=10%   # Stichprobe
restic repair index                   # Index neu aufbauen
restic repair snapshots               # defekte Snapshots bereinigen

Ein Backup, das nie mit check geprüft wurde, ist eine Annahme. Besonders wichtig ist --read-data in einer Rotation: Nur so werden stille Fehler auf dem Speichermedium entdeckt.

Automatisierung

# Passwort und Ziel in einer Datei für Cron
# /etc/restic/env
#   RESTIC_REPOSITORY=sftp:...
#   RESTIC_PASSWORD_FILE=/etc/restic/pw

# Cron-Eintrag
# 30 2 * * * . /etc/restic/env; restic backup /etc /home \
#   && restic forget --keep-daily 7 --keep-weekly 4 --prune

Verwandte Grundlagen: Restic, borg-Befehle, Backup, Backup-Strategien: 3-2-1 und Automatisierung.