datentraeger

geistige Umweltverschmutzung

restic

May 30, 2018 Backup cli

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!

ncpamixer

get a real computer !

1 thought on “restic”
  1. Peter V. Beck, I.
    June 1, 2018 at 7:31 am

    restic https://blog.datentraeger.li/?p=1733

Comments are closed.

Search
Posts
  • Overleaf
  • wir haben 300’000 !!
  • ZNAP Wallet
  • wtf m$ S3150 ?!?
  • systemd failed status entfernen
Archives
Categories
Tags
3D-Printing Android Apple Arch Backup BBOS/QNX cli Container Database Debian/GNU Linux Docker foo.li FSFE git Gnome Gnusocial Groupware irc IT Java LaTeX lvm Mail Mobile Movies Multimedia Music Nonsense Office Packaging PHP Puppet Redmine SQL Think-About Uncategorized Vaping vim Virtualisierung Web Win WTF www-links X11 XMPP
Meta
  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
Blogroll
  • Datentraeger Pics
  • foo.li systeme + software
  • GnuSocial.li
Proudly powered by WordPress | Theme: Doo by ThemeVS.