Ich habe mir Restic für's Backup auserkoren,
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...
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.
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
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
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.
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.
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.
restic check
Gespeicherte Snapshots kann man so anzeigen lassen:
restic snapshots
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
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.