rustic — Schnelle, restic-kompatible Backups in Rust

Praxis-Guide zu rustic — schnelle, verschlüsselte und deduplizierte Backups in Rust, kompatibel zu restic-Repositories mit Konfigurationsprofilen.

rustic ist eine in Rust geschriebene Backup-Lösung, die schnelle, verschlüsselte und deduplizierte Snapshots erzeugt – und dabei vollständig zu bestehenden restic-Repositories kompatibel bleibt. Du kannst also nahtlos zwischen beiden Werkzeugen wechseln. Gegenüber restic bringt rustic TOML-Konfigurationsprofile, native Cold-Storage-Unterstützung und feinere Aufbewahrungsregeln mit. Dieser Guide führt dich durch die wichtigsten Befehle: Repository anlegen, Backups erstellen, Snapshots durchsuchen, wiederherstellen und alte Stände aufräumen.

Repository initialisieren

rustic init -r <repo> — Initialisiert ein neues lokales Repository am angegebenen Pfad.

rustic init -r /mnt/backup/myrepo

rustic -r sftp:<user>@<host>:<path> init — Initialisiert ein Repository auf einem entfernten Server via SFTP.

rustic -r sftp:user@server.com:/backup/repo init

rustic -r opendal:s3 -o s3.bucket=<bucket> -o s3.region=<region> init — Initialisiert ein S3-kompatibles Repository über das OpenDAL-Backend.

rustic -r opendal:s3 -o s3.bucket=my-backups -o s3.region=eu-central-1 init

rustic -r rclone:<remote>:<path> init — Initialisiert ein Repository über rclone (nutzt jedes von rclone konfigurierte Backend).

rustic -r rclone:gdrive:backups/rustic init

rustic init --set-compression <level> — Initialisiert mit einer bestimmten Kompressionsstufe (-1 bis 22, Standard nutzt zstd-Automatik).

rustic init -r /mnt/backup/repo --set-compression 3

Konfigurationsprofile

rustic -P <profile> <command> — Führt einen Befehl mit einem benannten Profil aus ~/.config/rustic/.toml oder /etc/rustic/.toml aus.

rustic -P daily backup

[repository] in <profile>.toml — Profil-Abschnitt, der Repository, Passwortdatei, no-cache und weitere repository-weite Optionen definiert (TOML).

[repository]
repository = "/mnt/backup/repo"
password-file = "/etc/rustic/pw"

[backup] / [[backup.snapshots]] in <profile>.toml — Vorkonfigurierte Backup-Quellen mit Quellen, Tags und Ausschlüssen — aufgerufen über „rustic backup" ohne Argumente.

[[backup.snapshots]]
sources = ["/home", "/etc"]
tag = ["daily"]

[forget] in <profile>.toml — Standard-Aufbewahrungsregeln — angewendet von „rustic forget" ohne Flags.

[forget]
keep-daily = 7
keep-weekly = 4

Backups erstellen

rustic -r <repo> backup <path> — Sichert eine Datei oder ein Verzeichnis ins Repository.

rustic -r /mnt/backup/repo backup /home/user

rustic -r <repo> backup <path1> <path2> — Sichert mehrere Pfade in einem einzigen Snapshot.

rustic -r /mnt/backup/repo backup /home/user /etc

rustic backup --tag <tag> <path> — Fügt dem Snapshot ein oder mehrere Tags zum Filtern und für die Aufbewahrung hinzu.

rustic backup --tag daily --tag web /var/www

rustic backup --label <label> <path> — Setzt ein Label auf den Snapshot (praktisch, um Snapshots verschiedener Quellen zu gruppieren).

rustic backup --label production /var/www

rustic backup --glob <pattern> <path> — Schließt Dateien oder Verzeichnisse aus, die auf das angegebene Glob-Muster passen.

rustic backup --glob '!**/node_modules' /home/user/projects

rustic backup --glob-file <file> <path> — Liest Include-/Exclude-Glob-Muster aus einer Datei (eines pro Zeile, Präfix „!" schließt aus).

rustic backup --glob-file ~/.rusticignore /home/user

rustic backup --files-from <listfile> <path> — Liest zusätzliche zu sichernde Dateien und Verzeichnisse aus einer Datei.

rustic backup --files-from /etc/rustic/includes.txt

rustic backup --as-path <virtual-path> <path> — Speichert das Backup unter einem anderen (virtuellen) Pfad im Snapshot. Nützlich für umbenannte Quellen.

rustic backup --as-path /home/user /mnt/restore/home/user

rustic backup --json <path> — Gibt maschinenlesbare JSON-Fortschrittsausgabe für Skripte und Monitoring aus.

rustic backup --json /home/user | jq .

rustic backup --dry-run <path> — Zeigt, was gesichert würde, ohne ins Repository zu schreiben.

rustic backup --dry-run /home/user

Snapshots auflisten und inspizieren

rustic -r <repo> snapshots — Listet alle Snapshots im Repository auf.

rustic -r /mnt/backup/repo snapshots

rustic snapshots --filter-tag <tag> — Listet Snapshots gefiltert nach Tag auf.

rustic snapshots --filter-tag daily

rustic snapshots --filter-host <hostname> — Listet Snapshots eines bestimmten Hosts auf.

rustic snapshots --filter-host webserver01

rustic snapshots --json — Gibt die Snapshot-Liste als JSON für Skripte aus.

rustic snapshots --json | jq '.[].id'

rustic ls <snapshot-id> — Listet die Dateien innerhalb eines bestimmten Snapshots auf.

rustic ls a1b2c3d4

rustic ls latest — Listet die Dateien im jüngsten Snapshot auf.

rustic ls latest

rustic diff <snapshot1> <snapshot2> — Zeigt die Datei-Unterschiede zwischen zwei Snapshots.

rustic diff a1b2c3d4 latest

rustic cat <type> <id> — Gibt den rohen, dekodierten Inhalt eines Repository-Objekts aus (Snapshot, Tree, Blob, Config).

rustic cat snapshot a1b2c3d4

Daten wiederherstellen

rustic restore <snapshot-id> <target> — Stellt einen vollständigen Snapshot in das angegebene Zielverzeichnis wieder her.

rustic restore a1b2c3d4 /tmp/restore

rustic restore latest <target> — Stellt den jüngsten Snapshot wieder her.

rustic restore latest /tmp/restore

rustic restore latest:/<path> <target> — Stellt nur einen Unterpfad aus dem jüngsten Snapshot wieder her.

rustic restore latest:/home/user/Documents /tmp/restore

rustic restore --glob <pattern> <snapshot> <target> — Stellt nur Dateien wieder her, die auf ein Glob-Muster passen (Präfix „!" schließt aus).

rustic restore --glob '!**/*.log' latest /tmp/restore

rustic restore --dry-run <snapshot> <target> — Zeigt, was wiederhergestellt würde, ohne Dateien zu schreiben.

rustic restore --dry-run latest /tmp/restore

rustic restore --delete <snapshot> <target> — Löscht Dateien im Ziel, die im Snapshot nicht existieren (Spiegel-Wiederherstellung).

rustic restore --delete latest /var/www

rustic dump <snapshot>:<file> — Gibt den Inhalt einer einzelnen Datei aus einem Snapshot auf stdout aus.

rustic dump latest:/etc/nginx/nginx.conf

Snapshots einhängen (FUSE)

rustic mount <mountpoint> — Hängt alle Snapshots als schreibgeschütztes virtuelles Dateisystem ein (benötigt FUSE).

rustic mount /mnt/rustic

rustic mount <snapshot-id> <mountpoint> — Hängt einen einzelnen Snapshot als schreibgeschütztes Dateisystem ein.

rustic mount latest /mnt/rustic

Forget & Prune (Aufbewahrung)

rustic forget und rustic prune entfernen Snapshots und nicht referenzierte Daten endgültig – prüfe die Wirkung vorher immer mit --dry-run.

rustic forget --keep-last <n> — Behält nur die n jüngsten Snapshots und markiert den Rest zur Entfernung.

rustic forget --keep-last 7

rustic forget --keep-daily <n> --keep-weekly <n> --keep-monthly <n> — Wendet eine Standard-Aufbewahrungsrichtlinie an: behält n tägliche/wöchentliche/monatliche Snapshots.

rustic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12

rustic forget --keep-within <duration> — Behält alle Snapshots, die innerhalb der angegebenen Dauer erstellt wurden (z. B. 7d, 4w, 6m, 1y).

rustic forget --keep-within 30d

rustic forget --keep-tag <tag> — Behält stets Snapshots, die das angegebene Tag tragen.

rustic forget --keep-tag important

rustic forget --filter-tag <tag> --keep-last <n> — Wendet die Aufbewahrung nur auf Snapshots mit einem bestimmten Tag an.

rustic forget --filter-tag daily --keep-last 7

rustic forget --dry-run --keep-daily <n> — Zeigt eine Vorschau, welche Snapshots entfernt würden, ohne sie zu löschen.

rustic forget --dry-run --keep-daily 7

rustic forget --keep-daily 7 --prune — Wendet die Aufbewahrung an und entfernt unmittelbar nicht referenzierte Daten aus dem Repository.

rustic forget --keep-daily 7 --prune

rustic prune — Entfernt Daten, die von keinem Snapshot mehr referenziert werden. Mit --instant-delete die Sicherheitsverzögerung überspringen.

rustic prune

Repository-Wartung

rustic check — Prüft das Repository auf Fehler und verifiziert die Integrität der Metadaten.

rustic check

rustic check --read-data — Verifiziert alle Pack-Dateien, indem ihr Inhalt gelesen und entschlüsselt wird (langsam, gründlich).

rustic check --read-data

rustic check --read-data-subset <n>% — Verifiziert einen Prozentsatz der Daten. Nützlich für gestaffelte/geplante Verifikation.

rustic check --read-data-subset 10%

rustic repair index — Baut den Repository-Index neu auf. Nutzen, falls der Index verloren oder beschädigt ist.

rustic repair index

rustic repair snapshots — Repariert Snapshots, deren Daten teilweise fehlen (erstellt korrigierte Kopien, Originale bleiben).

rustic repair snapshots

rustic repoinfo — Zeigt Repository-Informationen: Pack-/Blob-Anzahl, Summen, Kompressionsrate.

rustic repoinfo

rustic key list — Listet alle im Repository gespeicherten Verschlüsselungsschlüssel auf.

rustic key list

rustic key add — Fügt dem Repository ein neues Verschlüsselungspasswort hinzu.

rustic key add

rustic copy --target <repo2> — Kopiert Snapshots in ein zweites Repository (3-2-1-Backup-Strategie).

rustic copy --target sftp:user@offsite.com:/backup

Tags & Snapshot-Verwaltung

rustic tag <snapshot-id> --add <tag> — Fügt bestehenden Snapshots Tags hinzu, ohne das Backup erneut auszuführen.

rustic tag a1b2c3d4 --add archive

rustic tag <snapshot-id> --remove <tag> — Entfernt Tags von bestehenden Snapshots.

rustic tag a1b2c3d4 --remove daily

rustic tag --set <tag> <snapshot-id> — Ersetzt alle Tags eines Snapshots durch das/die angegebene(n) Tag(s).

rustic tag --set archive a1b2c3d4

rustic merge <snapshot1> <snapshot2> — Führt zwei Snapshots zu einem einzigen neuen Snapshot zusammen.

rustic merge a1b2c3d4 e5f6g7h8

Umgebungsvariablen

export RUSTIC_REPOSITORY=<path> — Setzt das Standard-Repository, sodass -r entfallen kann.

export RUSTIC_REPOSITORY=/mnt/backup/repo

export RUSTIC_PASSWORD=<password> — Setzt das Repository-Passwort direkt. Praktisch für unbeaufsichtigte/Cron-Backups, aber sicherer sind RUSTIC_PASSWORD_FILE oder RUSTIC_PASSWORD_COMMAND.

export RUSTIC_PASSWORD=mysecretpassword

export RUSTIC_PASSWORD_FILE=<path> — Liest das Repository-Passwort aus einer Datei.

export RUSTIC_PASSWORD_FILE=/etc/rustic/password.txt

export RUSTIC_PASSWORD_COMMAND=<cmd> — Führt einen Befehl aus und nutzt dessen stdout als Passwort.

export RUSTIC_PASSWORD_COMMAND='pass show rustic/main'

export RUSTIC_USE_PROFILE=<profile> — Standardprofil, das geladen wird, wenn -P nicht angegeben ist.

export RUSTIC_USE_PROFILE=daily

export RUSTIC_NO_PROGRESS=1 — Deaktiviert Fortschrittsbalken (nützlich in Cron-/Nicht-TTY-Kontexten).

export RUSTIC_NO_PROGRESS=1

Häufige Rezepte

rustic -P daily backup && rustic -P daily forget --prune — Führt in einer Cron-Zeile ein tägliches Backup aus und wendet die Aufbewahrung aus einem Profil an.

0 3 * * * rustic -P daily backup && rustic -P daily forget --prune

rustic snapshots --json | jq -r '.[-1][1][-1].id' — Holt die ID des jüngsten Snapshots als reinen String.

rustic snapshots --json | jq -r '.[-1][1][-1].id'

rustic backup --glob-file ~/.rusticignore --tag daily /home — Tägliches Backup von /home mit Ausschlüssen und einem Tag für Aufbewahrungsrichtlinien.

rustic backup --glob-file ~/.rusticignore --tag daily /home

rustic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune — Standard-Aufbewahrungsrichtlinie: 7 tägliche, 4 wöchentliche, 12 monatliche Snapshots.

rustic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune

rustic copy --target <repo2> && rustic -r <repo2> check — Synchronisiert in ein Offsite-Repository und verifiziert es (3-2-1-Strategie mit Integritätsprüfung).

rustic copy --target sftp:user@offsite:/backup && rustic -r sftp:user@offsite:/backup check

Fazit

rustic verbindet die Geschwindigkeit und Speichersicherheit von Rust mit dem bewährten, deduplizierten Repository-Format von restic – eine attraktive Wahl, wenn du auf restic aufbaust, aber Konfigurationsprofile und mehr Komfort möchtest. Behandle dein Repository-Passwort wie jedes andere Geheimnis und prüfe forget/prune immer zuerst mit --dry-run. Und ein Backup, das du nie wiederhergestellt hast, ist nur eine Vermutung: teste rustic restore regelmäßig.

Verwandte Kommandos

  • restic – das Original; rustic ist zu seinen Repositories kompatibel
  • borgbackup – deduplizierendes Backup mit Kompression und Verschlüsselung
  • duplicity – verschlüsselte, inkrementelle Backups auf viele Storage-Backends
  • rclone – synchronisiert Dateien mit zahlreichen Cloud-Speichern