Linux-Backup mit Restic

➤ Martin Döring, 23. November 2021

Ich habe mir Restic für's Backup auserkoren,

Voraussetzungen

Restic auf Quellsystem installieren

Je nachdem, welches Linux wir benutzen, kann Restic mit dem jeweiligen Paketmanager installiert werden:

sudo pacman -S restic   # auf Arch, Manjaro, ...
sudo apt install restic # Auf Debian, Ubuntu...

SSH-User auf Respository-Server anlegen

Jetzt kümmern wir uns um den entfernten Server, wo wir unsere Backups speichern wollen. Wir legen uns auf diesem Server, hier im Beispiel namens »server«, einen User »restic« an, welchen wir später benutzen, um in dessen Verzeichnis per SSH unsere Backup-Repositories zu speichern:

# User anlegen
ssh root@server
useradd -d /srv/restic -m -s /bin/bash -c "Restic User" restic
passwd restic

Das Homeverzeichnis sollte genug Platz haben, um viele Snapshots zu speichern.

Das SSH-Login per Passwort werden wir jetzt gegen einen schlüsselbasierten Zugang austauschen:

su - restic
mkdir -m 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Wenn auf dem Server SSH-Zugriff per Passwort abgeschaltet ist, was so sein sollte, dann müssen wir nun in diese noch leere Datei authorized_keys unseren öffentlichen SSH-Schlüssel eintragen, indem wir sie mit dem Editor öffnen und die Textzeile mit unserem Schlüssel über die Zwischenablage hineinkopieren.

Dein öffentlicher SSH-Schlüssel heißt in der Regel id_rsa.pub, bei Verwendung von RSA und entsprechend bei Verwendung anderer Algorithmen.

Für unseren User das Repository setzen

Damit wir bei Restic nicht das Repository zur Datensicherung bei jedem Befehl angeben müssen, speichern wir dieses in einer Umgebungsvariable ab. Wir tun dies in der letzten Zeile der Datei .bashrc, so dass uns diese Einstellung bei jeder interaktiven bash Shell zur Verfügung steht.

echo -e "\nexport RESTIC_REPOSITORY=sftp:restic@server:repo" >> ~/.bashrc

Dabei ist »restic« unser neu angelegter User, »server« der Namen unseres Servers im Internet oder zu Hause und »repo« ist ein beliebiger Name für unser Repository.

Wenn wir uns nicht neu einloggen möchten, können wir diese Umgebungsvariable auch in unserer laufenden Shell setzen:

export RESTIC_REPOSITORY=sftp:restic@server:repo

Lokales Repository als Alternative

Obwohl es besser ist, seine Datensicherung nicht da zu haben, wo das Original ist, kann es trotzdem manchmal sinnvoll sein, eine Datensicherung lokal zu machen, z.B. auf eine USB-Disk. Dafür wird als Repository einfach ein Pfad zu einem leerem Verzeichnis angegeben, der vom eigenen Benutzer beschreibbar sein muss! Hier als Beispiel ein eingesteckter und gemounteter USB-Stick:

export RESTIC_REPOSITORY=/run/media/martin/usbstick

Repository initialisieren

Jetzt führen wir unser erstes Restic-Kommando aus:

restic init

Jetzt haben wir über SSH oder lokal ein Repository für unsere Backup-Snapshots initialisiert. Jetzt können wir Snapshorts speichern.

Snapshots speichern

Nun können wir Backups erstellen. Wenn wir immer unser gesamtes Benutzerverzeichnis sichern wollen, dann geht das so:

restic backup $HOME

Damit wird eine neuer Snapshot unseres Userverzeichnisses angelegt

Wenn wir nur einzelne Unterverzeichnisse sichern wollen, geht das so:

cd ~  # gehe in das Home-Verzeichnis
restic backup Bilder Dokumente Musik

hinter »restic backup« muss also immer eine Liste von zu sichernden Verzeichnissen kommen. Die können übrigens immer unterschiedlich sein.

Mounten unseres Repositorys

Wollen wir einzelne Dateien vom Backup wiederholen, können wir unser Repository über einen temporären Mountpoint mounten und dann mit einem ganz normalen Dateimanager gucken, welche Dateien wir wieder auf unseren Rechner kopieren wollen.

mkdir /tmp/restic
restic mount /tmp/restic

Wir sehen dann z.B.:

enter password for repository: 
repository cd236289 opened successfully, password is correct
Now serving the repository at /tmp/restic
When finished, quit with Ctrl-c or umount the mountpoint.

Nun kann man mit dem Dateimanager direkt zu /tmp/restic gehen und alte Dateien wieder herkopieren, entweder aus älteren snapshots oder von »latest«. Alle alten Sicherungen werden als Verzeichnisstruktur angezeigt.

Repository auf Konsistenz prüfen

restic check

Snapshots anzeigen

Gespeicherte Snapshots kann man so anzeigen lassen:

restic snapshots

Snapshots löschen

Das »forget« Kommando löscht den Snapshot. Mit der Option »--prune« werden auch die dazugehörigen Daten real gelöscht, um Platz zu schaffen.

restic forget 50b47bca --prune

Der Platz wird allerdings nur dann frei, wenn die Datei in der gleichen Version in keinem anderen Snapshot mehr enthalten ist.

Will man immer die letzten 5 Snapshots aufheben, geht das so

restic forget --keep-last 5

Restic merkt sich das als »Policy« und beachtet es ab jetzt.

Will man für die letzten 12 Monate nur den jeweils letzten Snapshot eines Monats aufheben und alle anderen entfernen, dann geht das so:

restic forget --keep-monthly 12

Fazit

Ich hoffe, ich konnte Dir zeigen, wie einfach es ist, Restic zu benutzen. Viel einfacher und klarer, als mit irgendwelchen Clicky-Bunti-Tools. Restic kann noch viel mehr. Ich habe auf einem Raspberry Pi mit Minio einen S3-kompatiblen Server aufgesetzt, finde aber, dass der Aufwand sich gegenüber SSH nicht lohnt, da ja sowieso immer nur die veränderten Dateien gespeichert werden. Überhaupt habe ich keinen großen Geschwindigkeitsunterschied gemerkt. Am Längsten dauert die erste Sicherung, weil hier erstmal alles kopiert wird.

Ein Tipp noch: Wenn Du irgendwo einen Webspace hast, den Du per SSH erreichen kannst, kannst Du sogar diesen benutzen, um Backups anzulegen. Webspace ist ja teilweise sehr günstig. Ich mache das mit meinen persönlichen Dokumenten. Ist ja alles verschlüsselt. Selbstgemachte Videos und andere große Dateien speichere ich nur Lokal.

Links

🌐 Vollständige Restic–Dokumentation (englisch)

➤ Zurück
➤ Datenschutzinformation