Restic
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Restic 🇬🇧 ist eine Terminal basierte Datensicherungssoftware, welche die Backups automatisch mit AES-256 verschlüsselt, es arbeitet außerdem inkrementell und deduplizierend.
Alle Daten werden in einem Restic-Repository gespeichert. In einem Repository können Daten verschiedener Typen gespeichert werden, die später anhand einer ID angefordert werden können. Diese sogenannte "Speicher-ID" ist der SHA-256-Hash des Inhalts einer Datei. Alle Dateien in einem Repository werden nur einmal geschrieben und danach nie mehr geändert. Auf diese Weise können mehrere Clients gleichzeitig auf das Repository zugreifen und sogar darauf schreiben. Nur der Bereinigungsvorgang entfernt Daten aus dem Repository.
Des Weiteren lassen sich diese sehr gut in fast allen Clouds abspeichern, z.B. durch die Einbindung von rclone. Auch ist dieses Programm sehr schnell, wenn der erste Backupdurchlauf gemacht wurde, da nur geänderte Daten beim erneuten Backup/Snapshot geschrieben werden. So lassen sich zum Beispiel auch sehr große Dateien, wie bei einer virtuellen Maschine, auch bei kleinen Änderungen schnell sichern ohne wiederum die komplette Datei hochladen zu müssen.
Die Möglichkeit zum Einbinden eines Snapshots ist ein weiteres hilfreiches Feature, welches nicht ungenannt bleiben sollte.
Zur Überprüfung der Daten auf mögliche Fehler steht ein Kommando (check
) zur Verfügung.
Als Backup-Speicherplatz werden folgende unterstützt:
Lokaler Ordner (es empfiehlt sich hierbei, eine externe Festplatte zu nehmen)
SFTP-Server
REST-Server
Amazon S3
Minio Server
Wasabi
OpenStack Swift
Backblaze B2
Microsoft Azure Blob Storage
Google Cloud Storage
ALLE rclone-Server 🇬🇧, z.B. Owncloud, Webdav
Achtung!
Wer das Passwort zu seinem Backup vergisst, kann das Backup nicht mehr nutzen.
Installation¶
Restic kann direkt aus den Quellen installiert werden.
restic (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install restic
Oder mit apturl installieren, Link: apt://restic
Um die Möglichkeit des Einhängens von Sicherungen/Snapshots zu verwenden wird FUSE verwendet. Das Paket muss also installiert sein.
Zur Nutzung weiterer Clouddienste wie z.B. Owncloud, Webdav etc. wird das rclone-Paket zusätzlich benötigt.
rclone (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install rclone
Oder mit apturl installieren, Link: apt://rclone
Das Programm restic sollte daraufhin aktualisiert werden mit
sudo restic self-update
Bedienung¶
restic UNTERKOMMANDO PARAMETER -r PFAD-ZUM-REPO
Bei der Neuerstellung eines neuen Backups, wird PFAD-ZUM-REPO
zum Pfad zu einem leeren Ordner.
Einige Unterkommandos sind:
Untercommands | |
Untercommand | Bedeutung |
init | Erstellen eines neuen Backup-Speicherplatzes |
backup | Erstellt ein neues Backup |
diff | Zeigt die Unterschiede zwischen zwei verschiedenen Backups. |
snapshots | Zeigt alle Snapshots an |
self-update | führt ein Softwareupdate von restic durch, sudo restic self-update |
check | Überprüft den Index eines Backups |
restore | Für das Einspielen eines Backups |
forget | Löscht einen Snapshot aus dem Index |
prune | löscht unreferenzierte Daten aus dem Index. |
key | verwaltet die Nutzerschlüssel für das Login |
mount | Ein Backup mounten. |
cat | Wie cat nur im Backup |
list | Listet alle Objekte im Repo auf |
ls | Listet alle Dateien auf |
unlock | Löst alle Locks auf. |
ÜbersichtParameter | ||
Parameter | synonym | Funktion |
--repo | -r | Gibt den Speicherort eines Backups an (Hierbei können auch SFTP usw. angegeben werden) |
--verbose | -v | Gibt genauere Detailausgaben aus. |
--exclude | Was soll ausgeschlossen werden aus dem Backup? | |
--iexclude | Wie --exlude aber unter Ausschluss von Pfaden | |
--exclude-caches | Schließt Ordner mit einer gewissen Datei im Inneren aus. | |
--exclude-file= | Gibt eine Datei mit auszuschließenden Dateien/Ordnern an | |
--include-file | Gibt eine Datei mit beinhaltenden Dateien/Ordnern an | |
--exclude-if-present | Schließt einen Ordner aufgrund der Präsenz einer Datei aus (mit der Möglichkeit, den Header etc. zu bestimmen) | |
--target | Ziel vom Entpacken. | |
--prune | Löscht beim Vergessen auch gleich noch die nicht mehr referenzierten Daten. | |
--help | Gibt zu jedem Unterkommando noch eine erweiterte Übersicht über die verfügbaren Optionen |
Ausgewählte (wichtige) Paramter für die Subcomands =¶
Diese Liste hier ist nicht umfassend, bietet aber einen kurzen Überblick über alle Funktionen.
Parameter | |||
Flag | synonym | Unterkommando | Funktion |
--force | -f | backup | Liest alle Verzeichnisse neu ein, und geht davon aus, dass noch nichts im Repository ist (Deduplizierung findet trotzdem statt). |
--host HOSTNAME | -H HOSTNAME | backup | Lässt den Hostnamen automatisch setzen |
--one-file-system | -x | backup | Restic bleibt im selben Dateisystem (vgl. https://rclone.org/local/ 🇬🇧) |
--read-data | check | Liest auch alle Daten ein und prüft diese | |
--read-data-subset n/m | check | Liest den n-ten Teil von m Teilen ein und prüft diese | |
--dry-run | -n | forget | Sage was gemacht hätte werden sollen. |
Parameter für das automatische Löschen von Snapshots¶
Parameter | |
Parameter | Beschreibung |
--keep-last n | Die letzten n snapshots behalten. |
--keep-hourly n | Für die letzten n Stunden nur den Letzten behalten. |
--keep-daily n | Für die letzten n Tage nur den letzten pro Tag behalten. |
--keep-weekly n | Für die letzten n Wochen nur den letzten pro Woche behalten. |
--keep-monthly n | Für die letzten n Monate nur den letzten pro Monat behalten |
--keep-yearly n | Für die letzten n Jahre nur den letzten pro Jahr behalten |
--keep-within ZEITSPANNE | Behaltet alle Snapshots innerhalb der angegebenen Zeitspanne |
Ein Beispiel direkt aus der englischen Doku: Bei täglichen Backups über 100 Jahre würde der Befehl:
restic -r /PFAD/ZUM/BACKUP forget --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --keep-yearly 75 --prune
Die letzten sieben Backups, dann die vier Wochen davor (die erste Woche ist bereits durch den Tag bestimmt), dann 11 oder 12 am letzten Tag des Monates (in Abhängigkeit der Ausführungsdatums), und daraufhin noch 75 Jahre einen pro Jahr. Der Rest würde gelöscht werden.
Beispiele¶
Repository erstellen¶
Durch den Befehl init
wird im angegebenen Backupordnerpfad ein neues Repository erstellt und ein Passwort zur Eingabe abgefragt.
Local:
restic init -r /PFAD/ZUM/BACKUPORDNER
SFTP
restic -r sftp:user@host:/PFAD/ZUM/BACKUPORDNER init
restic -r rclone:REMOTE-NAME:/PFAD/AUF/REMOTE/BACKUPORDNER init
Weitere ausführliche Beispiele können unter https://restic.readthedocs.io/en/latest/030_preparing_a_new_repo.html 🇬🇧 abgerufen werden. (Z.B. für Amazon S3, Rest-Server, Backblaze B2 usw. )
Backup erstellen¶
Ein Backup kann ganz einfach mithilfe des folgenden Befehls erstellt werden:
restic -r /PFAD/ZUM/BACKUPORDNER backup /home /root
Hierbei ist anzumerken, dass /home
und /root
die zu speichernden Ordner sind. Es lassen sich viel mehr hinzufügen.
Mit einem zusätzlichen --verbose
sieht man mehr Details beim Backup erstellen.
Beim erstmaligen Ausführen von backup
erfolgt eine Meldung, weil noch kein Snapshot vorhanden ist mit welchem die Daten verglichen werden könnten.
Es können auch durch das Anhängen von den Parametern --files-from /PFAD/ZUR/DATEI/include.txt
(Achtung --files-from
OHNE =
) oder --exclude-file=/PFAD/ZUR/DATEI/exclude.txt
spezifischere Angaben gemacht werden, was oder was nicht gesichert werden soll. Eine gute Übersicht findet sich auch hier bei https://restic.readthedocs.io/en/latest/040_backup.html 🇬🇧.
Das ganze sieht dann zum Beispiel für ein eingerichtetes rclone so aus (die Textdateien können natürlich auch anders heißen):
restic -r rclone:BackupWebdav:ORDNERNAME backup --verbose --files-from /PFAD/ZUR/DATEI/include.txt --exclude-file=/PFAD/ZUR/DATEI/exclude.txt
Der Inhalt einer exclude.txt könnte wie folgt aussehen, absolute Pfade verwenden:
1 2 3 4 5 6 | #ignoriert hier alle ISO-Dateien *.iso #ignoriert das Verzeichnis Videos, samt Unterverzeichnisse home/user/Videos/ #ignoriert das Verzeichnis Trash home/user/.local/share/Trash/ |
Snapshots/Sicherungen anzeigen¶
Die vorhandenen Backups bzw. Snapshots können so aufgelistet werden:
restic -r /PFAD/ZUM/BACKUPORDNER snapshots
Hier werden die vorhandenen Backups/Snapshosts aufgelistet, die angegebene IDs können dann z.B. zur Wiederherstellung oder zur Überprüfung verwendet werden.
Ein Ausgabebeispiel dazu:
enter password for repository: repository 0e566285 opened successfully, password is correct ID Time Host Tags Paths ------------------------------------------------------------------------------ 88a5b52c 2020-12-22 15:14:51 test /home/test/.config /home/test/.putty /home/test/.vnc /home/test/Dokumente 8f27e3ab 2020-12-23 14:08:35 test /home/test/.config /home/test/.putty /home/test/.vnc /home/test/Dokumente ------------------------------------------------------------------------------ 2 snapshots
Backup einspielen¶
Mit dem folgenden Befehl wird ein Snapshot mit der ID 8f27e3ab nach /old/ zurückgespielt:
restic -r /PFAD/ZUM/BACKUPORDNER restore 8f27e3ab --target /old
Mounten eines Backups¶
Mit dem Folgenden Befehl wird ein Backup gemounted wie ein USB-Stick. Allerdings ohne Schreibrechte, es können nur Daten gelesen oder kopiert, aber nicht verändert werden. Es ist so möglich, sich durch alle vorhandenen Snapshots zu bewegen.
mkdir /mnt/backup restic -r /PFAD/ZUM/BACKUPORDNER mount /mnt/backup
Weitere nützliche Beispiele¶
Snapshots vergleichen:
restic -r /PFAD/ZUM/BACKUP/ORDNER diff SNAPSHOTID1 SNAPSHOTID2
Alle Snapshots anschauen, welche
/home
auf dem Hostmelcoox
beinhalten:restic -r /PFAD/ZUM/BACKUP snaphosts --path=`/home` --host melcoox
Index prüfen:
restic -r /PFAD/ZUM/BACKUP check
Index und Inhalt prüfen (Wer
--read-data
durch--read-data-subset=X/Y
austauscht prüft den X-ten Teil von Y teilen. (Wobei gilt: X<=Y)restic -r /PFAD/ZUM/BACKUP check --read-data
Snapshot vergessen und Daten löschen:
restic -r /PFAD/ZUM/BACKUP forget 564684b --prune
Schlüssel Optionen (
list
= anzeigen,add
= Hinzufügen,remove
= Entfernen,passwd
= Password ändern) :restic -r /PFAD/ZUM/BACKUP key list
Links¶
https://restic.readthedocs.io/en/stable/index.html 🇬🇧 restic Dokumentation
restic/restic 🇬🇧 Link zu Github
https://forum.restic.net/ 🇬🇧 Link zum Forum von restic
https://media.ccc.de/v/c4.openchaos.2016.01.restic 🇩🇪 sehr informatives Video zu restic