Für Backups nutze ich seit vielen Jahren rsync-time-backup. Allerdings hörte ich in letzter Zeit viel Gutes über die freie Software Restic. Restic selbst wird über GitHub entwickelt und ist unter der BSD-Lizenz in der Zweiklausel-Version lizenziert. Unter Linux und macOS kann Restic einfach über entsprechende Paketmanager installiert werden:
brew install restic
Restic arbeiten mit sogenannten Repositorys. In einem Repository befindet sich das entsprechende Backup mit all seinen Versionen. Um ein solchen Repository anzulegen wird der Befehl:
restic init --repo ./
genutzt. Bei Restic ist jedes Backup automatisch verschlüsselt, sodass bereits beim Anlegen eines Backups ein entsprechendes Passwort vergeben werden muss. Die Daten werden mit AES, bei 256 Bit, verschlüsselt.
Danach kann theoretisch mit dem ersten Backup begonnen werden:
restic -r /Volumes/Volume/ResticRepository backup /Users/User
In diesem Fall würde der Ordner /Users/User/ in das Restic-Repository gesichert. Bevor das Backup startet, muss das entsprechende Passwort des Repositorys eingegeben werden. Anschließend wird der Nutzer über den Fortschritt des Prozesses informiert:
repository 567f35fa opened successfully, password is correct created new cache in /Users/User/Library/Caches/restic [0:09] 10 files 4.296 MiB, total 451 files 224.551 MiB, 0 errors /Users/User/System/btrfstune /Users/User/System/busybox ...
Nach dem Abschluss des Backups erscheint eine entsprechende Meldung im Terminal:
Files: 25 new, 0 changed, 0 unmodified Dirs: 2 new, 0 changed, 0 unmodified Added to the repo: 616.694 KiB processed 25 files, 615.493 KiB in 0:00 snapshot 6c0d7af6 saved
Nun verfügt der Nutzer über ein Backup Repository mit einem bzw. mehreren Snapshots. Die angelegten Snapshots können über dem Befehl:
restic -r /Volumes/Volume/ResticRepository snapshots
angezeigt werden. Der Nutzer erhält eine entsprechende Ausgabe im Terminal:
repository fd5947c7 opened successfully, password is correct ID Time Host Tags Paths ------------------------------------------------------------------------------ 6c0d7af6 2020-01-05 10:09:15 Earth.local /Users/User/System 31d3160f 2020-01-05 10:11:30 Earth.local /Users/User/System 38d6cbca 2020-01-05 10:15:09 Earth.local /Users/User/System ea96fa22 2020-01-05 10:15:20 Earth.local /Users/User/System ------------------------------------------------------------------------------ 4 snapshots
Das beste Backup nutzt nichts, wenn es nicht wiederhergestellt werden kann. Dazu wird die Option restore genutzt:
restic -r /Volumes/Volume/ResticRepository restore 38d6cbca --target /Users/User/System
Anschließend wird der gewünschte Snapshop wieder hergestellt:
repository fd5947c7 opened successfully, password is correct restoring> to /Users/User/System
Soll anstatt eines bestimmten Snapshot der letzte Snapshot wiederhergestellt werden so wird anstatt einer Snapshot-ID einfach latest als Wert angegeben. Soll nur eine einzelne Datei wiederhergestellt werden, ist das komplette zurückspielen eines Backup eher suboptimal. Für einen solchen Fall können die Snapshots im Dateisystem gemountet werden.
restic -r /Volumes/Volume/ResticRepository mount /Volumes/Volume/ResticRepositoryMounted
Anschließend wird das Repository im Dateisystem unter dem angegebenen Mountpoint eingebunden:
repository fd5947c7 opened successfully, password is correct Now serving the repository at /Volumes/Volume/ResticRepositoryMounted When finished, quit with Ctrl-c or umount the mountpoint.
Im Gegensatz zu den Befehlen zur Wiederherstellung des Backups muss beim Mounten keine Snapshot-ID angegeben werden. In der gemounteten Struktur werden stattdessen alle Snapshots angezeigt. Die gewünschte Datei zur Wiederherstellung kann somit gesucht und wiederhergestellt werden.
Beim Backup sollen in vielen Fällen bestimmte Dateien nicht gesichert werden. Dies können z. B. temporäre Dateien oder Caches sein. Um diese Datei vom Backup auszuschließen, kann ein sogenanntes Exclude File genutzt werden:
restic -r /Volumes/Volume/ResticRepository backup /Users/User/System --exclude-file="/Users/User/excludes.txt"
Eine solche Datei könnte z. B. wie folgt aussehen:
+ /etc/ + /home/ + /root/ + /srv/ + /usr/local/ + /var/ - /* - /var/cache/* - /var/lib/lxcfs/* - /var/log/* - /var/tmp/*
Neben diesen Basisfunktionalitäten, verfügt Restic über weitere Funktionen, so z. B. zum Löschen alter Snapshots nach bestimmten Regeln. Alles in allem wirkt Restic für mich wie eine durchdachte Backup-Lösung, deren Nutzung durchaus ins Auge gefasst werden kann.
Gibt es genauere Informationen, wie die inkrementelle Sicherung realisiert ist? Ist es beispielsweise möglich, ältere Snapshots zu entfernen, oder werden dadurch andere unbrauchbar?
Ja es können Snapshots aus der Reihe entfernt werden ohne, dass die anderen Snapshots davon betroffen sind.
Danke! Durch etwas Graben habe ich noch die Information gefunden, dass restic zwar dedupliziert, aber nicht durch inkrementelle Backups. D.h. die Backups hängen nicht voneinander, dafür alle vom Deduplizierungs-Datenbestand ab, der nicht korrumpiert werden darf. Näheres hier: https://forum.restic.net/t/force-full-backup-after-x-time/1691
Bin kein Backup-Guru, aber das ist wohl immer noch eine bessere Variante, als eine lange Kette voneinander abhängiger Snapshots zu haben.
Vielleicht ist für dich auch borg-backup interessant. Gefühlt wirkt es im Zusammenspiel mit SSH etwas ausgereifter. Ich lasse mich aber auch gern eines bessern belehren.
Pingback: Browser für Restic-Repositories › seeseekey.net