Website-Suche

So orchestrieren Sie restic-Backups mit autorestic unter Linux


Restic ist ein modernes Backup-Programm mit Unterstützung für Verschlüsselung und Deduplizierung. Wie wir in diesem Tutorial gesehen haben, ist Restic einfach zu bedienen, verwendet jedoch keine Konfigurationsdatei und enthält keine native Methode zum Orchestrieren und Organisieren mehrerer Sicherungen. Hier kommt autorestic ins Spiel: Es ist ein Wrapper um Restic, der es uns ermöglicht, Backups in einer einzigen YAML-Konfigurationsdatei zu konfigurieren und zu orchestrieren, wobei mehrere Quellen (Speicherorte) und Ziele (Backends) angegeben werden.

In diesem Tutorial lernen wir, wie man autorestic unter Linux installiert, wie die Konfigurationsdatei strukturiert ist und wie man ein grundlegendes Setup erstellt.

In diesem Tutorial lernen Sie:

  • So installieren Sie autorestic unter Linux
  • Struktur der autorestischen Konfigurationsdatei
  • So konfigurieren Sie Restic-Backups mit autorestic
  • Ausführen von benutzerdefinierten Befehlen für autorestische Hooks

Installieren von autorestic

In diesem Artikel gehe ich davon aus, dass Sie bereits Restic installiert haben; Wenn Sie damit nicht vertraut sind, sollten Sie sich zuerst unser einführendes Tutorial ansehen.

Zum Zeitpunkt des Schreibens enthält von allen wichtigen Linux-Distributionen nur Fedora autorestic in seinen Repositories. Um die Software zu installieren, können wir entweder eine vorkompilierte Binärdatei aus dem GitHub-Repository des Projekts herunterladen oder das dedizierte Docker-Image verwenden. Lassen Sie uns diese Optionen untersuchen.

Manuelle Installation

Der einfachste Weg, autorestic zu installieren, besteht darin, die entsprechende Version der Binärdatei für unser Betriebssystem herunterzuladen und sie in einem Verzeichnis in unserem PATH abzulegen. Im folgenden Beispiel laden wir die neueste verfügbare x86_64 Linux-Version (1.8.2 zum Zeitpunkt des Schreibens) herunter und installieren sie im Verzeichnis /usr/local/bin. Zuerst laden wir das ".bz2"-Archiv herunter:

curl -LO https://github.com/cupcakearmy/autorestic/releases/download/v1.8.2/autorestic_1.8.2_linux_amd64.bz2

Sobald der Download abgeschlossen ist, extrahieren wir die Datei:

bzip2 -d autorestic_1.8.2_linux_amd64.bz2

Schließlich verschieben wir die Datei in das Zielverzeichnis und machen sie ausführbar:

sudo mv autorestic_1.8.2_linux_amd64 /usr/local/bin/autorestic && sudo chmod +x /usr/local/bin/autorestic

Installation über den Paketmanager (nur Fedora)

Wenn wir Fedora verwenden, ist der einfachste und bequemste Weg, autorestic zu installieren, die Verwendung des dnf-Paketmanagers, da das Tool in den offiziellen Repositories der Distribution enthalten ist:

sudo dnf install autorestic

Verwenden des autorestischen Docker-Images

Ein offizielles autorestisches Docker-Image ist verfügbar. Wenn wir einen darauf basierenden Container ausführen, müssen wir die Verzeichnisse, die wir sichern möchten, die autorestic-Konfigurationsdatei und das Ziel-Repository (wenn wir eine lokale Sicherung durchführen) irgendwo innerhalb des Containers binden und autorestic mit der Option -c auf den Pfad der Konfigurationsdatei verweisen. Hier ist ein Beispiel, in dem wir den Inhalt des Verzeichnisses host /data sichern:

sudo docker run --rm -v /data:/data:Z -v /etc/autorestic.yml:/etc/autorestic.yml:Z -v /mnt/restic_repo:/mnt/restic_repo:Z cupcakearmy/autorestic autorestic backup -va -c /etc/autorestic.yml

Wir haben die Konfigurationsdatei /etc/autorestic.yaml, die Verzeichnisse /data und /mnt/restic_repo (die jeweils die Quelle und das Ziel unseres Backups sind) an ihre jeweiligen Positionen innerhalb des Containers gebunden. Für jeden Bind-Mount haben wir die Option Z verwendet: Dies ist nur notwendig, wenn SELinux aktiv ist, da es das Label der referenzierten Dateien auf object_r:container_file_t ändert, so dass sie innerhalb des Containers zugänglich sind.

Die autorestische Konfigurationsdatei

Der Kern von autorestic ist die YAML-Konfigurationsdatei. In dieser Datei legen wir die Quellen und Ziele unserer Backups fest, die restic-Optionen, die wir verwenden möchten, und viele andere Dinge. Aus offensichtlichen Gründen können wir hier nicht alle möglichen Optionen abdecken, daher werden wir nur das Wesentliche sehen.

Autorestic sucht die Konfigurationsdatei an den folgenden Positionen in der Reihenfolge ihrer Priorität:

  1. .autorestic.yml
  2. ~/.autorestic.yml
  3. ~/.config/autorestic/.autorestic.yml

In der Konfigurationsdatei definieren wir die Quellen unserer Backups im Abschnitt "Speicherort" und deren Ziele im Abschnitt "Backends". Beginnen wir mit einem einfachen Beispiel. Angenommen, wir möchten den Inhalt des Verzeichnisses /data im lokalen Repository /mnt/restic_repo sichern. So würden wir die autorestische Konfigurationsdatei füllen, die wir als .autorestic.yml in unserem aktuellen Arbeitsverzeichnis speichern:

version: 2
locations:
  data:
    from: 
      - /data
    to:
      - localrepo

backends:
  localrepo:
    type: local
    path: /mnt/restic_repo
    key: repositorypassword

Jeder Standort wird durch einen Namen in Kleinbuchstaben gekennzeichnet. In diesem Fall haben wir "Daten" für den von uns erstellten verwendet. Mit dem Schlüssel from definieren wir ein oder mehrere Verzeichnisse, die wir sichern möchten: Die Pfade können absolut oder relativ zum Pfad der Konfigurationsdatei angegeben werden. Mit dem to-Schlüssel stellen wir stattdessen ein einzelnes oder mehrere Ziele oder Backends für den Speicherort bereit, wobei wir wiederum anhand des Namens auf sie verweisen. Wir definieren jedes Ziel oder "Backend" im Abschnitt "Backends".

In diesem Beispiel haben wir nur ein Backend definiert, das wir "localrepo" genannt haben (genau wie Standorte müssen Backend-Namen in Kleinbuchstaben definiert werden). Indem wir den Wert des Typschlüssels auf "local" setzten, haben wir angegeben, dass das Backend ein restic-Repository ist, das auf dem lokalen Dateisystem existiert (wie wir wissen, unterstützt restic viele Speicherplattformen; unter anderem: Backblaze, S3 und SFTP). Mit dem Pfadschlüssel haben wir den Pfad des Restic-Repositorys angegeben, und schließlich haben wir mit dem Schlüssel das Repository-Passwort gemeldet (das Einfügen eines Klartext-Passworts in eine Konfigurationsdatei kann gefährlich sein, wir werden später einige Alternativen zu diesem Verhalten sehen).

Starten eines Backups

Wenn wir nun das Backup zum ersten Mal ausführen, können wir den autorestic check-Befehl verwenden, um sicherzustellen, dass alles bereit ist. Der Befehl initialisiert automatisch die definierten Backends für uns, daher ist es nicht notwendig, die restic-Repositories vorher zu erstellen:

sudo autorestic check

Um das Backup zu starten, können wir nun den Befehl backup verwenden:

sudo autorestic backup -va

Oben haben wir autorestic mit der Option -v aufgerufen, um es im ausführlichen Modus ausführen zu lassen, und mit -a, um es anzuweisen, die Sicherung aller vorhandenen Speicherorte durchzuführen. Falls wir mehrere Speicherorte definiert haben und nur eine Teilmenge davon sichern möchten, können wir die kommagetrennte Liste ihrer Namen als Argument stattdessen an die Option -l übergeben, z.B.:

autorestic backup -v -l data

Festlegen von Restic-Optionen

In der autorestischen Konfigurationsdatei können wir die Optionen angeben, die wir an restic übergeben möchten, für jeden Standort oder global. Optionen, mit denen restic aufgerufen werden soll, werden als Wert des Optionsschlüssels bereitgestellt. Wir können die Optionen angeben, die wir für die Befehle backup und forget übergeben möchten, oder für beide, indem wir die Schlüssel backup, forget und all verwenden. Hier ist ein Beispiel. Angenommen, wir möchten alle Dateien mit der Erweiterung ".txt" ausschließen, wenn wir eine Sicherung des Speicherorts "data" durchführen. Wir würden schreiben:

version: 2
locations:
  data:
    from:
      - /data
    to: 
      - localrepo
    options:
      backup:
        exclude:
          - '*.txt'

backends:
  localrepo:
    type: local
    path: /mnt/restic_repo
    key: repositorypassword

Der restic-Befehl "forget" wird verwendet, um alte Snapshots aus einem Repository zu entfernen, gemäß der Richtlinie, die wir mit den Optionen --keep angeben. Um diese Optionen bereitzustellen, geben wir sie unter der Vergessen-Taste an. Um immer alle letzten 10 Schnappschüsse zu behalten und die älteren zu löschen, würden wir zum Beispiel --keep-last=10 verwenden:

version: 2
locations:
  data:
    from:
      - /data
    to: 
      - localrepo
    options:
      backup:
        exclude:
          - '*.txt'
      forget:
        keep-last: 10

backends:
  localrepo:
    type: local
    path: /mnt/restic_repo
    key: repositorypassword

Die "forget "-Optionen werden angewendet, wenn wir autorestic mit dem Befehl forget aufrufen:

autorestic forget -va

Wir können autorestic so konfigurieren, dass der Befehl "Vergessen" nach jeder Sicherung automatisch ausgeführt wird, indem wir die Taste "Vergessen" direkt in der Standortdefinition verwenden. Der Wert dieses Schlüssels kann auf true gesetzt werden, wenn wir nur möchten, dass die Snapshots vergessen werden, oder auf prune, wenn wir auch Daten im Zusammenhang mit den vergessenen Snapshots aus dem Repository entfernen möchten. Hier ist ein Beispiel:

version: 2
locations:
  data:
    from:
      - /data
    to: 
      - localrepo
    forget: prune
    options:
      backup:
        exclude:
          - '*.txt'
      forget:
        keep-last: 10

backends:
  localrepo:
    type: local
    path: /mnt/restic_repo
    key: repositorypassword

Die Optionen, die wir bisher in der Konfigurationsdatei festgelegt haben, gelten nur für den Speicherort "data". Wenn wir mehrere Standorte haben und bestimmte Optionen auf alle anwenden möchten, können wir den globalen Bereich füllen, z. B.:

version: 2
global:
  backup:
    exclude:
      - '*.txt'
  forget:
    keep-last: 10

locations:
  data:
    from:
      - /data
    to: 
      - localrepo

backends:
  localrepo:
    type: local
    path: /mnt/restic_repo
    key: repositorypassword

Standortspezifische Optionen haben Vorrang vor den Optionen, die im globalen Abschnitt festgelegt sind. Diese Strategie ist nützlich, wenn wir nur Ausnahmen angeben möchten.

Alternative Möglichkeiten zum Bereitstellen eines Backend-Passworts

In den vorherigen Beispielen haben wir das Passwort für das "localrepo"-Backend direkt in der Konfigurationsdatei angegeben. Alternativ können wir das Passwort als Wert einer Umgebungsvariablen festlegen, die wir beim Start von autorestic definieren können, oder in einer dedizierten Datei namens .autorestic.env, die sich im selben Verzeichnis wie die Konfigurationsdatei befinden muss. Damit die Variable automatisch mit einem bestimmten Backend verknüpft werden kann, definieren wir sie mit der folgenden Syntax:

AUTORESTIC_<BACKEND-NAME>_<VARIABLE_NAME>

Um also das Passwort für das "localrepo"-Backend zuzuweisen, würden wir schreiben:

AUTORESTIC_LOCALREPO_RESTIC_PASSWORD="repositorypassword"

Wir können diese Strategie auch nutzen, um zusätzliche Informationen bereitzustellen. Wenn wir beispielsweise ein Remote-Backblaze-Backend verwenden, können wir sowohl die Konto-ID als auch den Kontoschlüssel angeben. Angenommen, wir definieren ein Backup namens "backblaze", dann schreiben wir:

AUTORESTIC_BACKBLAZE_B2_ACCOUNT_ID="123"
AUTORESTIC_BACKBLAZE_B2_ACCOUNT_KEY="456"

Eine andere Alternative besteht darin, die restic native Option --password-command zu verwenden. Mit dieser Option können wir einen Befehl bereitstellen, der das Passwort an stdout zurückgeben muss. Mit dieser Strategie können wir zum Beispiel das Passwort aus einer externen Datei auslesen, wie wir es unten getan haben:

version: 2
locations:
  data:
    from:
      - /data
    to: 
      - localrepo
    options:
      all:
        password-command: cat /root/.password
      backup:
        exclude:
          - '*.txt'
      forget:
        keep-last: 10

backends:
  localrepo:
    type: local
    path: /mnt/restic_repo

Wir haben die Option im Abschnitt "all" verwendet, damit sie immer übergeben wird, unabhängig davon, ob wir den Befehl backup oder forget ausführen.

Autorestische Hooks

Autorestic ermöglicht es uns, benutzerdefinierte Befehle in bestimmten Momenten auszuführen, indem wir die folgenden Hooks verwenden:

  • Vorvalidieren
  • vor
  • nach
  • Versagen
  • Erfolg

Der Prevalidate-Hook wird vor allem anderen ausgeführt, sogar bevor verschiedene Prüfungen ausgeführt werden (autorestische Überprüfungen, z. B. ob Quellverzeichnisse existieren, die mit einem Speicherort verknüpft sind); Der Before-Hook wird stattdessen nach den Prüfungen, aber vor dem Start des Backups ausgeführt. Der after-Hook wird immer nach Beendigung des Backups ausgeführt, unabhängig vom Exit-Status (er wird stattdessen übersprungen, wenn das Backup aufgrund von Fehlern in den "prevalidate "" oder "before " Hooks überhaupt nicht gestartet werden kann). Schließlich werden Befehle, die mit den Fehler- und Erfolgs-Hooks verknüpft sind, aufgerufen, nachdem die Sicherung erfolgreich ausgeführt wurde bzw. nachdem sie fehlgeschlagen ist.

Im folgenden Beispiel senden wir eine Push-Benachrichtigung über den ntfy.sh-Dienst, wenn die Sicherung erfolgreich ist:

version: 2
locations:
  data:
    from:
      - /data
    to: 
      - localrepo
    options:
      all:
        password-command: cat /root/.password
      backup:
        exclude:
          - '*.txt'
      forget:
        keep-last: 10
    hooks:
      success:
        - curl -d "backup executed succesfully!" ntfy.sh/lxcfg

backends:
  localrepo:
    type: local
    path: /mnt/restic_repo

Während eines Hooks können wir auf zusätzliche Informationen zugreifen, die in einigen vordefinierten Variablen gespeichert sind. Hier sind einige Beispiele:

  • AUTORESTIC_SNAPSHOT_ID
  • AUTORESTIC_ELTERN_SNAPSHOT_ID
  • AUTORESTIC_DATEN_HINZUGEFÜGT
  • AUTORESTIC_DATEIEN_GEÄNDERT
  • AUTORESTIC_FILES_UNMODIFIED
  • AUTORESTIC_ORT

Schlüsse

In diesem Tutorial haben wir gesehen, wie man Restic-Backups mit dem autorestischen Wrapper orchestriert und organisiert. Mit Autorestic konnten wir mehrere Speicherorte in mehreren Backends sichern, indem wir eine YAML-Konfigurationsdatei erstellten und auffüllten. Wir haben gesehen, wie man autorestic auf den am häufigsten verwendeten Linux-Distributionen installiert und wie man Standorte und Backends konfiguriert. Wir haben auch gelernt, wie man ein Backup startet und wie man benutzerdefinierte Befehle an die von autorestic bereitgestellten Hooks anhängt. Um mehr über autorestic zu erfahren, können Sie einen Blick in die offizielle Dokumentation werfen.

Verwandte Artikel: