So orchestrieren Sie Borg-Backups mit Borgmatic
Borgmatic ist ein kostenloser und konfigurationsgesteuerter Open-Source-Wrapper rund um Borg, den sicheren und platzsparenden Archivierer. Borgmatic ermöglicht es uns, Borg-Backups zu orchestrieren, indem wir Redundanzen, Rotationen, Hooks und viele andere Dinge an einem zentralen Ort setzen: einer menschenfreundlichen und sehr gut kommentierten Konfigurationsdatei.
In diesem Tutorial sehen wir, wie man Borgmatic auf einigen der am häufigsten verwendeten Linux-Distributionen installiert und wie man es verwendet, um Borg-Backups zu orchestrieren.
In diesem Tutorial lernen Sie:
- So installieren Sie Borgmatic
- So generieren Sie eine Borgmatic-Konfigurationsdatei
- So orchestrieren Sie Backups über die Borgmatic-Konfigurationsdatei
- So validieren Sie eine Borgmatic-Konfigurationsdatei
Installation
Da es sich um freie Open-Source-Software handelt, ist Borgmatic in den offiziellen Repositories der am häufigsten verwendeten Linux-Distributionen verpackt und verfügbar und kann einfach mit ihren nativen Paketmanagern installiert werden. Um das Paket "borgmatic" auf Fedora und auf Fedora-basierten Distributionen zu installieren, müssen wir Folgendes ausführen:
sudo dnf install borgmatic
Um das Paket auf Debian und Debian-basierten Distributionen (Raspberry Pi OS enthalten) zu installieren, gehen Sie stattdessen wie folgt vor:
sudo apt install borgmaticAuf Archlinux und anderen darauf basierenden Distributionen können wir den pacman-Paketmanager verwenden, um das Paket aus dem "Extra"-Repository zu installieren:
sudo pacman -Sy borgmaticBorgmatic wird auch als Python-Paket vertrieben und kann daher auf "universelle" Weise mit "pip", dem Python-Paketmanager, installiert werden. Diese Methode hat den Vorteil, dass sie immer die neueste Version des Tools zur Verfügung stellt und keine Administratorrechte benötigt, wenn die Installation für einen bestimmten Benutzer oder in einer virtuellen Umgebung durchgeführt wird. Um Borgmatic mit pip zu installieren, führen wir Folgendes aus:
pip install --user borgmaticDer Befehl installiert die ausführbare Borgmatic-Datei im Verzeichnis ~/.local/bin, stellen Sie also sicher, dass sie Teil Ihres PATH ist.
Generieren der Borgmatic-Konfigurationsdatei
Borgmatic ist ein konfigurationsgesteuertes Programm: Wir können sein Verhalten optimieren, indem wir einfach seine Konfigurationsdatei generieren und bearbeiten. Um eine Konfigurationsdatei von Grund auf neu zu generieren, verwenden wir den Befehl borgmatic config generate und übergeben den Zielpfad der Konfigurationsdatei als Argument an die Option -d (wenn die Option weggelassen wird, versucht der Befehl, die Datei als /etc/borgmatic/config.yaml zu generieren, daher schlägt er fehl, wenn er nicht mit Root-Rechten gestartet wird). Auf Benutzerebene sucht Borgmatic nach einer Datei mit dem Namen config.yaml im Verzeichnis ~/.config/borgmatic, daher würden wir zur Generierung der Datei an Ort und Stelle Folgendes ausführen:
mkdir -p ~/.config/borgmatic && generate-borgmatic-config -d ~/.config/borgmatic/config.yamlBorgmatic verwendet eine YAML-Konfigurationsdatei. Werfen wir einen Blick darauf.
Definieren von Sicherungsquellen und -zielen
Um die zu sichernden Dateien und Verzeichnisse und die Sicherungsziele, die in der Borg-Welt als Repositories bezeichnet werden, festzulegen, müssen wir sie nur über die Schlüssel source_directories und Repositories in der Konfigurationsdatei auflisten:
location:
# List of source directories and files to backup. Globs and
# tildes are expanded. Do not backslash spaces in path names.
source_directories:
- /home
- /etc
repositories:
- path: ssh://user@backupserver/./sourcehostname.borg
label: backupserver
- path: /mnt/backup
label: local
Unter dem Schlüssel source_directories definieren wir die Verzeichnisse und Dateien, die wir in das Backup einbeziehen möchten, während wir unter den Repositories eine Liste der lokalen und/oder entfernten Borg-Repositories eingeben, die als Ziele verwendet werden sollen. In neueren Versionen von Borgmatic kann jedes Repository mit einem "Label" verknüpft werden: Dies ist praktisch, falls wir auf bequeme Weise von der Befehlszeile aus auf ein bestimmtes Repository verweisen möchten, als Argument für die Option --repository. Um redundante Backups zu erstellen, was immer eine gute Sache ist, können wir mehrere Ziele bereitstellen: Backups werden nacheinander durchgeführt.
Ausschließen von Dateien und Verzeichnissen aus der Sicherung
In bestimmten Situationen kann es sinnvoll sein, bestimmte Dateien und Verzeichnisse von einer Sicherung auszuschließen. Eine bequeme Möglichkeit, diese Aufgabe zu erledigen, ist die Verwendung des Schlüssels exclude_patterns in der Borgmatic-Konfigurationsdatei. Hier ist ein Beispiel:
exclude_patterns:
- '*.pyc'
- /home/*/.cache
Wie Sie im obigen Beispiel sehen können, haben wir einfache Glob-Muster verwendet. Alle Dateien oder Verzeichnisse, die mit einem Muster übereinstimmen, werden von der Sicherung ausgeschlossen. Wie in der Konfigurationsdatei angegeben, muss jedes Ausschlussmuster, in dem ein Glob verwendet wird, entweder mit dem Glob selbst beginnen oder ein absoluter Pfad sein, wie im zweiten Beispiel.
Alternativ können Ausschlussmuster aus einer Datei gelesen werden, die mit dem Schlüssel exclude_from angegeben werden kann:
exclude_from:
- /etc/borgmatic/excludes
Bereitstellen der Verschlüsselungspassphrase
Wie wir in dem Borg-Tutorial gesehen haben, werden Repositories mit einem Schlüssel verschlüsselt, der selbst im Repository (Repokey-Modus) oder auf dem lokalen Rechner (Keyfile-Modus) gespeichert werden kann. Wenn der Schlüssel in einem Repository gespeichert wird, muss er durch eine Passphrase geschützt werden. Um den Schlüssel zu entsperren, können wir:
- Legen Sie die Passphrase direkt in die Borgmatic-Konfigurationsdatei ein
- Geben Sie einen Befehl an, der zum Abrufen der Passphrase verwendet wird
Um die Passphrase direkt in der Borgmatic-Konfigurationsdatei anzugeben, können wir den Schlüssel encryption_passphrase verwenden. Hier ist ein Beispiel:
storage:
encryption_passphrase: "verysecurepassphrase"Das Schreiben eines Passworts in eine Klartextdatei ist nicht ideal. Eine etwas sicherere Alternative ist es, die Standardausgabe eines Befehls als Passphrase zu verwenden. Wir können dies tun, indem wir encryption_passcommand Schlüssel verwenden. Hier ist ein Beispiel, das die Verwendung von [pass](https://linuxconfig.org/how-to-organize-your-passwords-using-pass-password-manager), dem Befehlszeilen-Passwort-Manager, beinhaltet:
storage:
encryption_passcommand: pass borg-repokey
Rotierende Backups
Die Rotationsstrategie für Backups, die bei der Ausführung des Befehls "prune" angewendet werden soll, kann über den Aufbewahrungsschlüssel in der Konfigurationsdatei definiert werden. Wir können festlegen, wie viele zweite, minutenlange, stündliche, tägliche, wöchentliche, monatliche und jährliche Backups aufbewahrt werden sollen. Im folgenden Beispiel haben wir Borgmatic (und damit borg unter der Haube) so eingestellt, dass es 7 tägliche, 4 wöchentliche und 6 monatliche Backups aufbewahrt:
retention:
keep_daily: 7
keep_weekly: 4
keep_monthly: 6Borgmatic Haken
Eine sehr praktische Borgmatic-Funktionalität ist die Möglichkeit, Befehle und Skripte an verschiedenen Stellen während eines Backups auszuführen. Im Folgenden finden Sie eine nicht erschöpfende Liste, wann Befehle und Skripts ausgeführt werden können:
- Bevor oder nachdem alle Aktionen für alle Repositorys ausgeführt wurden
- Vor oder nach dem Erstellen eines Backups
- Vor oder nach dem Rückschnitt
- Vor oder nach der Verdichtung
- Vor oder nach der Konsistenzprüfung
- Vor oder nach dem Extrahieren einer Sicherung
Im Bereich "Hooks" können auch spezifische externe Dienste genutzt werden. Hier ist ein Beispiel. Angenommen, wir möchten eine Push-Benachrichtigung über den ntfy-Dienst erhalten, wenn eine Sicherung abgeschlossen ist oder wenn sie fehlschlägt. In der Konfigurationsdatei verwenden wir den Schlüssel ntfy und geben an, welches Thema wir abonniert haben und unter welchen Umständen eine Benachrichtigung gesendet werden soll. einen Titel, eine Nachricht und eine Priorität:
hooks:
ntfy:
topic: borgmatic_backups
finish:
title: Backup done!
message: Backup completed successfully!
fail:
title: Backup failed!
message: The backup has failed
priority: max
states:
- finish
- fail
Validieren der Konfigurationsdatei
Diejenigen, die ich oben aufgeführt habe, sind nur kleine Beispiele dafür, was durch die Verwendung von Borgmatic und seiner Konfigurationsdatei erreicht werden kann. Wenn wir mit der Definition unserer Konfiguration fertig sind, möchten wir überprüfen, ob sie gültig ist. Um dies zu tun, können wir einen dedizierten Befehl verwenden: validate-borgmatic-config. Wir übergeben den Pfad der Konfigurationsdatei, die wir als Argument validieren möchten, an die Option -c. In diesem Fall würden wir Folgendes ausführen:
validate-borgmatic-config -c ~/.config/borgmatic/config.yamlErstellen von Backups
Sobald alles eingestellt ist, können wir den folgenden Befehl ausführen, um ein Backup zu erstellen:
borgmatic create --list --statsDie Optionen --list und --stats können weggelassen werden, sind aber durchaus nützlich und entsprechen den gleichnamigen Borg-Optionen: Erstere sorgt dafür, dass Dateidetails während der Sicherung angezeigt werden, letztere zeigt am Ende der Sicherung eine Statistik über das erstellte Archiv an:
Archive name: foo-2023-07-02T19:43:56.764318
Archive fingerprint: bd31004d58f51ea06ff735d2e5ac49376901b21d58035f8fb05dbf866566e3c2
Time (start): Sun, 2023-07-02 19:44:11
Time (end): Sun, 2023-07-02 19:44:15
Duration: 4.17 seconds
Number of files: 5536
Utilization of max. archive size: 0%
------------------------------------------------------------------------------
Original size Compressed size Deduplicated size
This archive: 357.44 MB 340.69 MB 11.22 MB
All archives: 2.60 GB 2.28 GB 466.40 MB
Unique chunks Total chunks
Chunk index: 6729 66061
------------------------------------------------------------------------------Bereinigen von Sicherungen
Um die Aufbewahrungsrichtlinie, die wir in der Borgmatic-Konfigurationsdatei festgelegt haben, auf alle Repositories anzuwenden, können wir den Befehl prune verwenden:
$ borgmatic pruneWie Sie sehen können, ist Borgmatic ein Wrapper um Borg. Es ist sogar möglich, Borg-Befehle direkt mit dem Unterbefehl borg anzugeben. Nur als Beispiel, um den Befehl "list" direkt mit Borg auszuführen, würden wir Folgendes ausführen:
$ borgmatic borg listSchlüsse
In diesem Tutorial haben wir gelernt, wie man Borgmatic installiert, einen konfigurationsbasierten Wrapper um Borg, der es einfacher macht, Backups zu orchestrieren und verschiedene Aktionen an verschiedenen Punkten der Backup-Strategie durchzuführen. Anstatt uns die Option für Borg-Backups merken zu müssen, können wir einfach die Borgmatic-Konfigurationsdatei verwenden: Dies ermöglicht es uns auch, unsere Backup-Strategie mit Leichtigkeit zu replizieren.
