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:
- Deduplikation
- Verschlüsslung
- gute Dokumentation
- freie Software (BSD 2-Clause)
Backup-Repository initialisieren
Einen Backup-Storage muss man erst mal initialisieren, um darin Snapshots abzulegen. Die Syntax ist ziemlich git-like:
restic -r /mnt/storage init created restic repository 5a7a387b38 at /mnt/storage/ Please note that knowledge of your password is required to access the repository. Losing your password means that your data is irrecoverably lost.
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.
restic -r /mnt/storage key list enter password for repository: password is correct ID User Host Created ---------------------------------------------------------------------- *fcd3db62 peter peanut 2018-06-01 12:48:04 ----------------------------------------------------------------------
Das Passwort eines Repositories kann man also etwa so ändern:
restic -r /mnt/storage key passwd enter password for repository: password is correct enter password for new key: enter password again: saved new key as <Key of peter@host, created on 2018-06-06 17:02:50.78646922 +0200 CEST m=+11.944291578>
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.
restic -r /mnt/storage backup /home enter password for repository: password is correct scan [/home/] [0:02] 1829 directories, 51117 files, 4.070 GiB ...
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
export RESTIC_REPOSITORY=/mnt/storage export RESTIC_PASSWORD="I9n7G7G0ZpDWA3GOcJbIuwQCGvGUBkU5" ...
oder direkt
RESTIC_PASSWORD=foobar restic -r /mnt/storage/ snapshots password is correct ID Date Host Tags Directory ---------------------------------------------------------------------- 1978082b 2018-05-30 16:45:41 peanut /home/peter/work 984f8b7a 2018-05-30 16:53:55 peanut /home/peter/work ---------------------------------------------------------------------- 2 snapshots
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
restic -r /mnt/storage backup ~/work --exclude="*.c" --exclude-file=excludes.txt
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)
RESTIC_PASSWORD=foobar restic -r /mnt/storage tag --add TEST e9b91671
verwendet man ‘set’, werden bestehende Tags überschrieben
RESTIC_PASSWORD=foobar restic -r /mnt/storage tag --set BARFUSS 80aeff8
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.
RESTIC_PASSWORD=foobar restic -r /mnt/storage/ snapshots password is correct ID Date Host Tags Directory ---------------------------------------------------------------------- 1978082b 2018-05-30 16:45:41 peanut /home/peter/work 984f8b7a 2018-05-30 16:53:55 peanut /home/peter/work 28d32dc0 2018-05-30 17:15:43 peanut BARFUSS /home/peter/.vim -------------
Mittels forget und der Snapshot-ID kann nun ein Snapshot entfernt werden
RESTIC_PASSWORD=foobar restic -r /mnt/storage/ forget 28d32dc0 password is correct removed snapshot 28d32dc0
Die referenzierten Files sind jedoch immer noch im Repository hinterlegt. Um komplett aufzuräumen verwendet man prune
RESTIC_PASSWORD=foobar restic -r /mnt/storage/ prune password is correct counting files in repo building new index for repo [0:04] 100.00% 623 / 623 packs repository contains 623 packs (82727 blobs) with 2.813 GiB processed 82727 blobs: 0 duplicate blobs, 0B duplicate load all snapshots find data that is still in use for 2 snapshots [0:06] 100.00% 2 / 2 snapshots found 78083 of 82727 data blobs still in use, removing 4644 blobs will remove 0 invalid files will delete 13 packs and rewrite 0 packs, this frees 34.548 MiB counting files in repo [0:00] 100.00% 610 / 610 packs finding old index files saved new indexes as [0eb873bc] remove 5 old index files [0:00] 100.00% 13 / 13 packs deleted done
Anstatt jedoch ständig zwei Commands auszuführen, kann man auch den Parameter ‘–prune’ beim forget mitgeben.
RESTIC_PASSWORD=foobar restic -r /mnt/storage/ forget 28d32dc0 --prune
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.
restic forget --tag foo --keep-last 1
Es lassen sich auch gleich mehrere Tags definieren
restic forget --tag foo --tag bar --keep-last 1
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:
forget --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --keep-yearly 75
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.
restic prune
Restore
Mit snapshots lassen sich alle Backups eines Repositories anzeigen
restic -r /mnt/storage snapshots
Um einen Snapshot aufzulisten, verwendet man ls
restic -r /mnt/storage ls
Nun kann man bspw. nur ein File restoren
restic restore -t /tmp/restore -i "*.odt"
oder das komplette Backup
restic restore -t /tmp/restore/
FUSE-Mount
Das Backup lässt sich aber auch einfach mounten und man kann damit “ganz normal” arbeiten
RESTIC_PASSWORD=foobar restic -r /media/peter/hitachi1tb/backup/ mount ~/mnt password is correct Mountpoint /home/peter/mnt doesn't exist, creating it Now serving the repository at /home/peter/mnt Don't forget to umount after quitting!
1 thought on “restic”
restic https://blog.datentraeger.li/?p=1733
Comments are closed.