restic - Meine Backup Lösung

Published on 2018-04-14 by Malte

In den letzten Jahren habe ich verschiedene Backuplösungen ausprobiert. Ob es rsync, DejaDup, Borg immer war es das Selbe, dass ich nie wirklich zufrieden bzw. begeistert von der Lösung war. Sicherlich lag es auch daran, dass ich nicht wirklich mich groß umstellen wollte, bzw. ich auch manchmal zu Faul war überhaupt Backups zu machen, was natürlich sehr oft zu einem schlimmer Ergebnis geführt hat :-).

Doch jetzt habe ich für mich die Lösung gefunden. Durch einen kleinen Hinweis auf der Fedora Project Page, konnte ich das Tool meiner Träume finden:

restic

restic ist eine OpenSource Backup Lösung die im Terminal läuft. Einige Vorteile von restic:

Installation

Die Installation von restic ist sehr gut in der Doku beschrieben. Es gibt für alle großen Distros fertige Pakete.

Repository

restic ähnelt im Konzept und dem Aufbau der Befehlen sehr git. Deswegen ist es auch nicht verwunderlich, dass die Speicherorte für die Backups Repositorys heißen. Im folgenden, werden wir ein lokales Repositiory einrichten. Für externe Repositorys schaut bitte in der Doku für den entsprechenden Aufbau des Befehls nach.

restic init --repo /run/media/malte/Backup/Sicherungen

Mit diesem einfachem Befehl wird uns Repository auf einer externen Festplatte eingerichtet. Nach der Eingabe des Befehls, werdet ihr nach eurem Wunschpasswort für die Repository und dessen Bestätigung gefragt. Wenn alles richtig verlaufen ist sieht es dann so aus:

[malte@FedLin ~] $ restic init --repo /run/media/malte/Backup/Sicherungen/
enter password for new repository: 
enter password again: 
created restic repository 2ba283f830 at /run/media/malte/Backup/Sicherungen/

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

Wir haben erfolgreich eine Repository angelegt und können nun mit dem Backupprozess beginnen.

Backup

Um ein Backup durchzuführen, müssen wir nur folgenden Befehl eingeben

restic -r /run/media/malte/Backup/Sicherungen/ backup /home/malte

Mit -r geben wir unsere Repository an, mit backup welcher Befehl durchgeführt werden soll und schlußendlich was man sichern soll. Nach erfolgreicher Sicherung, sieht es dann so aus:

[malte@FedLin Blog] $ restic -r /run/media/malte/Backup/Sicherungen/ backup /home/malte
enter password for repository: 
password is correct
using parent snapshot 5b523b51
scan [/home/malte]
scanned 3464 directories, 19166 files in 0:04
[0:10] 100.00%  16.300 GiB / 16.300 GiB  22630 / 22630 items  0 errors  ETA 0:00 
duration: 0:10
snapshot c8c62281 saved

Allerdings bin ich davon ein Freund bestimmte Dateien nicht mit zu sichern, das wären zum Beispiel mein Papierkorb, Cache Files und einiges mehr. Da ich aber nicht alle aufführen will im Befehl mache ich das in einer Exclude Datei. Zum Glück hat auch das schon jemand gemacht: github/rubo77/rsync-homedir-excludes. Um diese Datei nutzen zu können, machen wir folgendes:

wget https://raw.githubusercontent.com/rubo77/rsync-homedir-excludes/master/rsync-homedir-excludes.txt -O /var/tmp/ignorelist

Und jetzt noch schnell den Sicherungsbefehl anpassen:

restic -r /run/media/malte/Backup/Sicherungen/ backup /home/malte --exclude-file="/var/tmp/ignorelist" --exclude="/home/malte/Downloads"

Und fertig.

Snapshots

Mit dem snapshots Befehl ist es möglich die Snapshots zu verwalten:

[malte@FedLin Blog] $ restic -r /run/media/malte/Backup/Sicherungen/ snapshots
enter password for repository: 
password is correct
ID        Date                 Host        Tags        Directory
----------------------------------------------------------------------
91c5cf74  2018-04-14 14:57:46  FedLin                  /home/malte
f9f83b20  2018-04-14 15:10:55  FedLin                  /home/malte
9d3ff71e  2018-04-14 15:36:18  FedLin                  /home/malte
5f093a5f  2018-04-14 16:12:05  FedLin                  /home/malte
92f19ae4  2018-04-14 17:24:24  FedLin                  /home/malte
5b523b51  2018-04-14 17:25:47  FedLin                  /home/malte
c8c62281  2018-04-14 18:09:01  FedLin                  /home/malte
----------------------------------------------------------------------
7 snapshots

Um ein Snapshot zu entfernen, ist folgender Befehl nötig:

[malte@FedLin Blog] $ restic -r /run/media/malte/Backup/Sicherungen/ forget c8c62281

Jedoch sind die entsprechenden Verlinkungen noch vorhanden, um diese zu löschen, wird noch der folgende Befehl benötigt:

[malte@FedLin Blog] $ restic -r /run/media/malte/Backup/Sicherungen/ prune

Wiederherstellen

Es gibt zwei Wege die Backups wiederherzustellen, zurück spielen oder mounten. Der einfachste Weg ist der folgende:

restic -r /run/media/malte/Backup/Sicherungen/ restore latest --target /home/malte

Um einen speziellen Snapshot zurück zuspielen, muss der Befehl ein wenig angepasst werden:

restic -r /run/media/malte/Backup/Sicherungen/ restore 5b523b51 --target /home/malte

Um nur bestimmte Dateien zurück zuspielen, kann man auch einfach ein Snapshot mounten:

restic -r /run/media/malte/Backup/Sicherungen/ mount /mnt

Schlüssel

Es ist sehr einfach die Schlüssel für die Repo zu verwalten:

[malte@FedLin Blog] $ restic -r /run/media/malte/Backup/Sicherungen/ key list
enter password for repository: 
password is correct
 ID          User        Host        Created
----------------------------------------------------------------------
*af7f857b    malte       FedLin      2018-04-14 14:57:32
----------------------------------------------------------------------

Um einen neuen Schlüssel hinzuzufügen, muss man einfach nur folgenden Befehl ausführen:

[malte@FedLin Blog] $ restic -r /run/media/malte/Backup/Sicherungen/ key add

Und natürlich kann man den Schlüssel auch löschen

[malte@FedLin Blog] $ restic -r /run/media/malte/Backup/Sicherungen/ key remove af7f857b