[[Vorlage(Getestet, focal)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Programme_starten: Starten von Programmen] [:Terminal: Ein Terminal öffnen] [:mit Root-Rechten arbeiten:] [:Datensicherung:] [:Daten_verschlüsseln:] [:GnuPG/Symmetrische_Verschlüsselung:] }}} [[Inhaltsverzeichnis(1)]] [https://restic.readthedocs.io/en/stable/index.html Restic] {en} 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 {en}, z.B. Owncloud, Webdav {{{#!vorlage Warnung Wer das Passwort zu seinem Backup vergisst, kann das Backup nicht mehr nutzen. }}} = Installation = Restic kann direkt aus den Quellen installiert werden. {{{#!vorlage Paketinstallation restic, universe }}} 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. {{{#!vorlage Paketinstallation rclone, universe }}} Das Programm restic sollte daraufhin aktualisiert werden mit {{{#!vorlage Befehl sudo restic self-update }}} = Bedienung = {{{#!vorlage Befehl 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: {{{#!vorlage Tabelle <-2 tableclass="zebra_start3" rowclass="titel"> 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. }}} {{{#!vorlage Tabelle <-3 tableclass="zebra_start3" rowclass="titel"> Ü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. {{{#!vorlage Tabelle <-4 tableclass="zebra_start3" rowclass="titel"> 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/] {en}) +++ `--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 == {{{#!vorlage Tabelle <-2 tableclass="zebra_start3" rowclass="titel" :> 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: {{{#!vorlage 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. 1. Local:{{{#!vorlage Befehl restic init -r /PFAD/ZUM/BACKUPORDNER }}} 1. SFTP{{{#!vorlage Befehl restic -r sftp:user@host:/PFAD/ZUM/BACKUPORDNER init }}} 1. [https://rclone.org/ rclone]{{{#!vorlage Befehl restic -r rclone:REMOTE-NAME:/PFAD/AUF/REMOTE/BACKUPORDNER init }}} 1. Weitere ausführliche Beispiele können unter [https://restic.readthedocs.io/en/latest/030_preparing_a_new_repo.html] {en} 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: {{{#!vorlage Befehl 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] {en}. Das ganze sieht dann zum Beispiel für ein eingerichtetes rclone so aus (die Textdateien können natürlich auch anders heißen): {{{#!vorlage Befehl 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: {{{#!code text #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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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. {{{#!vorlage Befehl mkdir /mnt/backup restic -r /PFAD/ZUM/BACKUPORDNER mount /mnt/backup }}} == Weitere nützliche Beispiele == 1. Snapshots vergleichen:{{{#!vorlage Befehl restic -r /PFAD/ZUM/BACKUP/ORDNER diff SNAPSHOTID1 SNAPSHOTID2 }}} 1. Alle Snapshots anschauen, welche `/home` auf dem Host `melcoox` beinhalten: {{{#!vorlage Befehl restic -r /PFAD/ZUM/BACKUP snaphosts --path=`/home` --host melcoox }}} 1. Index prüfen:{{{#!vorlage Befehl restic -r /PFAD/ZUM/BACKUP check }}} 1. 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) {{{#!vorlage Befehl restic -r /PFAD/ZUM/BACKUP check --read-data }}} 1. Snapshot vergessen und Daten löschen:{{{#!vorlage Befehl restic -r /PFAD/ZUM/BACKUP forget 564684b --prune }}} 1. Schlüssel Optionen (`list` = anzeigen, `add` = Hinzufügen, `remove` = Entfernen, `passwd` = Password ändern) : {{{#!vorlage Befehl restic -r /PFAD/ZUM/BACKUP key list }}} = Links = * https://restic.readthedocs.io/en/stable/index.html {en} restic Dokumentation *[github:restic/restic:] {en} Link zu Github * https://forum.restic.net/ {en} Link zum Forum von restic * https://media.ccc.de/v/c4.openchaos.2016.01.restic {de} sehr informatives Video zu restic #tag: Netzwerk, Sicherheit, Datensicherung