restic

Bin grad wieder mal dabei, mein Home “ein bisschen” zu sichern. Bisher hab ich meist BackInTime verwendet. Das funktionierte auch immer tadellos. Irgendwann hab ich mir aber mal Restic gebookmarkt, weil ich es noch interessant gefunden hab. Also sichere ich ab jetzt mein Home mit Restic, um das ganze ein bisschen genauer kennenzulernen…

Restic unterstüzt derzeit einige Cloud-Storages, lokale Verzeichnisse und SFTP als Backends. Ich habe nur mit lokalen Directories rumgespielt.

Restic ist in Go geschrieben und unterstützt die gängigsten Systeme, bei Debian ist es auch in den Repositories, wobei Stable eine sehr alte Version beinhaltet.

Features

Einige Features von restic sind:

Backup-Repository initialisieren

Einen Backup-Storage muss man erst mal initialisieren, um darin Snapshots abzulegen. Die Syntax ist ziemlich git-like:

Keys managen

Passwörter von Repositories können natürlich auch geändert werden. Das Command ‘key’ halt subcommands für list/add/passwd/remove. ‘passwd’ wird zum ändern eines Passwortes verwendet.

Das Passwort eines Repositories kann man also etwa so ändern:

Backup erstellen

Nachdem der Backup-Storage initialisiert wurde, kann man eigentlich auch schon mit Backups loslegen. Damit Restic weiss, wo sich der Storage befindet, gibt man ihn mit -r an.

Exports

Wenn man nicht ständig den Backup-Pfad, das Passwort, etc mitgeben möchte, kann man diese Werte einfach exportieren. Das macht das ganze auch recht gut scriptbar

oder direkt

eine weitere Variante das Passwort mitzugeben ist der –password-file Parameter.

Excludes

Excludes können via Paramter (–exclude=, beliebig oft anwendbar) oder mit einem File (–exclude-file=) mitgegeben werden

Beim exclude-file ist zu beachten, dass die Pfade relativ angegeben werden, wenn ich vom Home aus bspw. einen Snapshot ohne den ~/Downloads-Folder erstellen möchte, sollte der Pfad lediglich mit Downloads definiert werden.

Tags

Snapshots können auch getaggt werden, was sicherlich oft hilfreich sein kann.

Mit ‘add’ können Tags hinterlegt werden (was sich beliebig oft auch wiederholen lässt)

verwendet man ‘set’, werden bestehende Tags überschrieben

Dann gibt es halt natürlich noch remove etc, aber das findet man alles in der Dokumentation oder der Manpage von restic-tag.

Backups löschen

Snapshots können natürlich auch wieder entfernt werden.

Mittels forget und der Snapshot-ID kann nun ein Snapshot entfernt werden

Die referenzierten Files sind jedoch immer noch im Repository hinterlegt. Um komplett aufzuräumen verwendet man prune

Anstatt jedoch ständig zwei Commands auszuführen, kann man auch den Parameter ‘–prune’ beim forget mitgeben.

Policies

Mit Policies kann man festlegen, welche Snapshots behalten werden sollen. Man kann stündliche, tägliche, jährliche oder monatliche Snapshots definieren und/oder auch tags definieren, die behalten werden sollen.

Es lassen sich auch gleich mehrere Tags definieren

Ein anderes Beispiel aus der Dokumentation: Die aktuellsten 7 täglichen Snapshots, dann 4 wöchentliche (da die letzten 7 bereits eine Woche sind), die 11-12 Snapshots am letzten Tag des Monats und zusätzlich 75 der letzten-Tag-des-Jahres Snapshots behalten:

abgebrochene Backups

Wird ein laufendes Backup abgebrochen (z.B. mit C-c), sieht man zwar keine Snapshots, jedoch wurden bereits Daten geschrieben, also Speicherplatz verwendet. Generell sollte nach einiger Zeit auch ein resume möglich sein (siehe Github issue), d.h., dass wenn ein erneutes Backup erstellt wird, erkennt restic, dass die bereits gesicherten Daten vorhanden sind und von wird dort weiter machen anstatt komplett von vorne zu beginnen. Mittels prune können “verwaiste” Daten aber jederzeit entfernt werden.

Restore

Mit snapshots lassen sich alle Backups eines Repositories anzeigen

Um einen Snapshot aufzulisten, verwendet man ls

Nun kann man bspw. nur ein File restoren

oder das komplette Backup

FUSE-Mount

Das Backup lässt sich aber auch einfach mounten und man kann damit “ganz normal” arbeiten