Restic zerlegt, dedupliziert, verschlüsselt und speichert Daten entweder in einem lokalen Verzeichnis, per SFTP auf einem entfernten Rechner oder bei diversen Cloud-Anbietern.
Das Paket enthält genau ein Programm und ein paar Handbuchseiten.
apt install restic
Auf dem Zielsystem legen wir einen Benutzer an, der die verschlüsselten Daten entegegen nimmt.
adduser --system --group --home /var/lib/restic restic
Damit wir einen passwortfreien Zugriff per
SSH
bekommen, hinterlegen wir dort den öffentlichen Schlüssel des
Administrators unter /var/lib/restic/.ssh/authorized_keys
.
Den Zielpfad und das zugehörige Passwort kennt nur das
zu sichernde Quellsystem.
/etc/restic.envRESTIC_REPOSITORY=/var/lib/restic RESTIC_PASSWORD=Password
Ein Timer sichert täglich alle wichtigen Datenverzeichnisse und Datenbanken.
/etc/systemd/system/restic-backup.service[Unit] Description=Restic backup service [Service] Type=oneshot EnvironmentFile=/etc/restic.env ExecStart=/usr/bin/restic backup --tag timer --exclude .cache /home /srv ExecStartPost=/usr/bin/restic forget --tag timer \ --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --keep-yearly 3
und
/etc/systemd/system/restic-backup.timer[Unit] Description=Daily backup with restic [Timer] OnCalendar=daily Persistent=true [Install] WantedBy=timers.target
Ein weiterer Timer räumt nicht mehr benötigter Brocken auf. Es genügt aber, wenn diese vergleichswiese teure Operation wöchentlich oder monatlich ausgeführt wird.
/etc/systemd/system/restic-prune.service[Unit] Description=Restic pruning service [Service] Type=oneshot EnvironmentFile=/etc/restic.env ExecStart=/usr/bin/restic prune
und
/etc/systemd/system/restic-prune.timer[Unit] Description=Monthly restic repository pruning [Timer] OnCalendar=monthly Persistent=true [Install] WantedBy=timers.target
Schließlich initialisieren wir das Depot und aktivieren die Wecker.
. /etc/restic.env export RESTIC_REPOSITORY export RESTIC_PASSWORD restic init systemctl daemon-reload systemctl enable --now restic-backup.timer systemctl enable --now restic-prune.timer
Je nachdem, ob wir eine einzelne Datei oder einen kompletten Server verloren haben: Zuerst verschaffen wir uns einen Überblick über die verfügbaren Sicherungen.
restic snapshots repository 96b02f94 opened successfully, password is correct ID Time Host Tags Paths ------------------------------------------------------------------------- 20d892ee 2020-02-20 13:33:37 nas timer /home /srv ceb50b9d 2020-02-20 00:01:09 nas postgres postgres.dump ------------------------------------------------------------------------- 1 snapshots
Die aktuellste erfolgreiche Sicherung heißt immer latest
.
Um nach einem kompletten Datenverlust alle Datenverzeichnisse
wiederherzustellen, tippen wir:
restic restore latest --target /
Analog dazu lassen sich auch verlorene Datenbanken wiederherstellen.
restic dump latest --tag postgres postgres.dump | psql
Manchmal möchte man nur nach einem wichtigen Dateimuster suchen.
restic find '*Thesis*.pdf'
Schließlich kann man auch ein Depot per FUSE montieren und durchsuchen. Dies ist vermutlich der intuitivste weg, um einzelne Dateien zu restaurieren.
restic mount /mnt
Diese Auflistung soll nur einen Überblick über die verfügbaren Kommandos und Optionen vermitteln und erhebt keinen Anspruch auf Vollständigkeit. Als authoritative Quelle gelten nur die Manpages und die offizielle Dokumentation.
Kommando | Operand | Beschreibung | |
---|---|---|---|
restic | help | [Command] | Hilfe (zu einem Kommando) ausgeben |
version | Version ausgeben | ||
generate | Handbuch und Skript für Autovervollständigung erzeugen | ||
self-update | Neue Programmversion herunterladen und installieren | ||
migrate | [Name] | Mögliche Migrationen auflisten oder durchführen | |
cache | Lokalen Zwischenspeicher verwalten | ||
Depot | |||
init | Neues Depot vorbereiten | ||
key | list | Passwörter tabellarisch auflisten | |
add | Passwort hinzufügen | ||
remove Id | Passwort löschen | ||
passwd Id | Passwort ändern | ||
check | Depot auf Fehler prüfen | ||
prune | Daten von ausgedünnten Sicherungen löschen | ||
list | Type | Interne Objektnummern auflisten | |
cat | Type Id | Internes Objekt als JSON ausgeben | |
rebuild-index | Index neu erzeugen | ||
unlock | Sperren von anderen Prozessen aufräumen | ||
mount | Dir | Depot per FUSE im Dateisystem einbinden | |
Sicherung | |||
snapshots | Sicherungen auflisten | ||
tag | Id | Sicherung etikettieren | |
stats | Id | Speicherverbrauch messen | |
forget | [Id] | Sicherungen ausdünnen | |
recover | Ausgedünnte Sicherungen wiederherstellen | ||
diff | Id Id | Unterschiede zwischen Sicherungen anzeigen | |
ls | Id [Path] | Dateien in einer Sicherung auflisten | |
dump | Id Path | Datei aus Sicherung ausgeben | |
find | Glob | Datei in allen Sicherungen suchen | |
Wiederherstellung | |||
backup | Path … | Neue Sicherung erstellen | |
restore | Id | Daten aus einer Sicherung wiederherstellen |
blobs
packs
index
snapshots
keys
locks
blob
pack
index
snapshot
key
masterkey
config
lock