Website-Suche

Einführung in Borg Backup


Borg ist eine sehr nützliche Anwendung, mit der wir Deduplizierungs-Backups unter Linux erstellen können. Es handelt sich um kostenlose Open-Source-Software, die größtenteils in Python geschrieben ist und Datenkomprimierung und -verschlüsselung unterstützt. Dank der Datendeduplizierungsfunktion werden nur Daten archiviert, die sich tatsächlich ändern, und dies ermöglicht es uns, sowohl den Speicherplatz als auch die Ausführungszeit zu optimieren. Borg ist wirklich einfach zu installieren, da es verpackt und in den Repositories der am häufigsten verwendeten Linux-Distributionen enthalten ist.

In diesem Tutorial werden wir sehen, wie man Borg auf einigen der am häufigsten verwendeten Linux-Distributionen installiert, und einige Beispiele für seine Verwendung.

In diesem Tutorial lernen Sie:

  • So installieren Sie Borg
  • Die grundlegenden Borg-Konzepte
  • So initialisieren Sie ein Borg-Repository
  • So erstellen Sie ein Archiv
  • So listen Sie die Archive in einem Repository auf
  • So listen Sie den Inhalt von Archiven auf
  • Wie man ein Borg-Archiv einbindet
  • Wie man ein Borg-Archiv wiederherstellt
  • So löschen Sie ein Borg-Archiv

Installation

Auf Fedora ist Borg als "borgbackup" verpackt. Um es zu installieren, können wir den dnf-Paketmanager verwenden:

sudo dnf install borgbackup

Um die Installation unter Debian und seinen Derivaten durchzuführen, können wir stattdessen den apt-Wrapper verwenden:

sudo apt install borgbackup

Unter Archlinux ist Borg im "Community"-Repository verfügbar. Das Paket heißt einfach "borg". Wir können es mit pacman installieren:

sudo pacman -S borg

Wenn Ihre Lieblingsdistribution nicht zu den oben genannten gehört, werfen Sie einen Blick auf die offizielle Borg-Installationsanleitung, die viele andere Systeme enthält. Borg ist auch als einzelne Binärdatei mit all ihren Abhängigkeiten verfügbar: Sie kann von der Github-Releases-Seite des Projekts heruntergeladen werden.

Wie Borg funktioniert

Borg ist ein sogenanntes "Deduplizierungs-Backup-Programm". Ähnlich wie bei inkrementellen Backups werden in den nachfolgenden Backups nur die Daten archiviert, die sich nach einer vollständigen Sicherung tatsächlich auf dem Dateisystem ändern, aber die Ähnlichkeiten sind nur konzeptioneller Natur. Borg funktioniert, indem es jede Datei in Blöcke aufteilt, die durch ihre Hashsumme identifiziert werden. Nur Chunks, die von den Anwendungen nicht erkannt werden, werden dem "Repository" hinzugefügt. Diese Deduplizierungstechnik ist sehr effizient, da sie es uns unter anderem ermöglicht, eine Datei oder ein Verzeichnis zu verschieben, ohne dass dies als Änderung angesehen wird und daher zusätzlicher Speicherplatz erforderlich ist. Das Gleiche gilt für Zeitstempel von Dateien. Was wirklich zählt, sind nur die Dateiblöcke, die nur einmal gespeichert werden. Unter Linux unterstützt Borg die Beibehaltung aller standardmäßigen und erweiterten Dateisystemattribute wie ACLs und xattrs.

Die beiden Hauptentitäten, um die sich Borg dreht, sind "Archiv" und das bereits erwähnte "Repository". Ein Archiv ist im Wesentlichen eine Momentaufnahme eines Dateisystems zu einem bestimmten Zeitpunkt. Aufgrund der Funktionsweise von Borg werden Daten zwar nur einmal gespeichert, aber jedes Archiv enthält das komplette Dateisystem, und im Gegensatz zu inkrementellen Backups hängt ein Archiv nicht von den zuvor erstellten Archiven ab. Ein Repository hingegen ist ein Verzeichnis, das wir zum Speichern von Archiven verwenden, und das über einen bestimmten Befehl initialisiert werden muss, den wir gleich sehen werden. Schauen wir uns an, wie wir vorgehen würden, wenn wir inkrementelle Backups unseres gesamten Home-Verzeichnisses erstellen und die Archive unter /mnt/borg speichern möchten.

Initialisieren eines Repositorys

Das allererste, was wir tun müssen, um Borg zu verwenden, ist, das Verzeichnis, in dem wir die Archive speichern möchten, als Borg-Repository zu initialisieren. Wir führen diese Aufgabe mit dem Befehl init aus:

borg init --encryption=repokey /mnt/borg

Wenn wir ein Repository initialisieren, müssen wir entscheiden, welche Art von Verschlüsselung wir für unsere Backups verwenden möchten. Die Entscheidung, die wir treffen, ist wirklich wichtig und kann später nicht mehr geändert werden. Die wichtigsten Verschlüsselungsmodi, die wir auswählen können, sind die folgenden:

  • repokey/keyfile
  • beglaubigt
  • nichts

Die Optionen repokey und keyfile verwenden sowohl die AES-CTR-256-Verschlüsselung für die Verschlüsselung. Der Unterschied zwischen den beiden besteht darin, wo der Verschlüsselungsschlüssel gespeichert wird. Wenn wir "repokey" wählen, wird der Verschlüsselungsschlüssel in der Konfigurationsdatei des Repositorys gespeichert, daher basiert die Sicherheit der Backups nur auf der Passphrase, die wir zum Zeitpunkt der Initialisierung angeben müssen. Wenn wir stattdessen den "Schlüsseldatei"-Modus wählen, wird der Verschlüsselungsschlüssel in unserem Home-Verzeichnis in ~/.config/borg/keys gespeichert, so dass wir zum Entschlüsseln oder Erstellen eines Archivs sowohl etwas (den Schlüssel) als auch etwas wissen müssen (die Passphrase). In beiden Fällen ist es immer eine gute Idee, eine Sicherungskopie des Verschlüsselungsschlüssels zu erstellen.

Wenn wir den authentifizierten Modus wählen, wird keine Verschlüsselung verwendet, aber der Inhalt des Repositorys wird über denselben HMAC-SHA256-Hash "authentifiziert", der mit dem repokey a keyfile-Modus verwendet wird.

Wenn wir uns schließlich für keine entscheiden, werden weder Authentifizierung noch Verschlüsselung verwendet: Von der Verwendung dieses Modus wird aus offensichtlichen Gründen abgeraten. Es gibt auch andere Modi, aber es handelt sich um Varianten der oben genannten. Werfen Sie einen Blick in das Anwendungshandbuch, wenn Sie mehr über sie erfahren möchten.

Da wir im obigen Beispiel "repokey" als Verschlüsselungsmodus verwendet haben, werden wir beim Initialisieren des Repositorys aufgefordert, eine Passphrase für die Schlüsseldatei anzugeben und zu bestätigen:

Enter new passphrase: 
Enter same passphrase again:

Wenn wir früher oder später entscheiden, dass wir die Passphrase ändern wollen, können wir dies einfach mit dem Befehl "key change-passphrase" tun, indem wir den Pfad des Repositorys als Argument angeben:

borg key change-passphrase /mnt/borg

Sobald wir den Befehl ausgegeben haben, werden wir aufgefordert, das aktuelle Passwort für den Repository-Schlüssel einzugeben, und zwei Mal das neue:

Enter passphrase for key /mnt/borg: 
Enter new passphrase: 
Enter same passphrase again:

Sobald das Repository initialisiert ist, wird eine Reihe von Dateien und Verzeichnissen darin erstellt:

ls /mnt/borg
total 68
-rw-------. 1 egdoc egdoc 700 Apr 23 19:20 config
drwx------. 3 egdoc egdoc 4096 Apr 23 19:19 data
-rw-------. 1 egdoc egdoc 52 Apr 23 19:19 hints.1
-rw-------. 1 egdoc egdoc 41258 Apr 23 19:19 index.1
-rw-------. 1 egdoc egdoc 190 Apr 23 19:19 integrity.1
-rw-------. 1 egdoc egdoc 16 Apr 23 19:19 nonce
-rw-------. 1 egdoc egdoc 73 Apr 23 19:19 README

Da wir den "repokey"-Modus verwendet haben, wird der Verschlüsselungsschlüssel in der Repository-Datei "config" gespeichert:

[repository]
version = 1
segments_per_dir = 1000
max_segment_size = 524288000
append_only = 0
storage_quota = 0
additional_free_space = 0
id = a1dccd1d4613d4f582cb4617f3393656e0a0f05db1fb9c90e0aa5b3e675bf17f
key = hqlhbGdvcml0aG2mc2hhMjU2pGRhdGHaAN6CZjFu1nnPs3QMuYTQ4O1m1jC+pVQjpGR3pR
b+pq20AxAPXboKEQsUmBajJXm0m/7Box9WSzw6IrizBPDSxERhys1d3piFUUsVRJ7GzjNO
lfcgVRpy2BpI9w/QXPgOl6FjCmp2HU5R5YdQjtEH4aUND702hWFBfI486oZJ94v/LrUVRm
8MFmC8KSXXNHBbuRXOvBnH+cME0Owz/kRLQEGHFaxD18F+dZOVV+1wEn+UDL6XsIA7FKk4
jwHxWVzoekGeHsVcDKXlXg1FWN9ck6QRWipgojUMvFvt9/wTinGkaGFzaNoAILRxN39c/m
yH7mzsXEqdxx3vvi6rh3X9rqlab4BD2tDrqml0ZXJhdGlvbnPOAAGGoKRzYWx02gAg/Tam
mSE01YTDzTiPyYDPszuBt01L/Gfrt6dgN7v/veqndmVyc2lvbgE=

Erstellen von Archiven

Borg-Archive werden mit dem Befehl "create" erstellt. Um die erste relative Sicherung des Home-Verzeichnisses zu erstellen, würden wir zuerst in unser Home-Verzeichnis wechseln und dann Folgendes ausführen:

cd && borg create --list /mnt/borg::archive-{hostname}-{now} .

Werfen wir einen Blick auf den Befehl. Wir haben borg mit dem Befehl "create" aufgerufen und die Option --list verwendet: Dies ist nicht obligatorisch, führt jedoch dazu, dass die verarbeiteten Dateien und Verzeichnisse in der Standardausgabe gedruckt werden. Wir haben dann den Pfad des Repositorys angegeben, in dem das Archiv gespeichert werden soll, und den Namen des Archivs, getrennt von letzterem durch einen doppelten Doppelpunkt ::. Praktischerweise kann eine Reihe von Variablen verwendet werden, um den Archivnamen zusammenzusetzen:

  • {now} – Dies wird durch das aktuelle, lokalisierte Datum und die Uhrzeit ersetzt
  • {utcnow} – Wie oben, aber stattdessen wird die UTC-Zeit verwendet
  • {fqdn} – Dies wird durch den vollqualifizierten Domänennamen des Computers ersetzt
  • {hostname} – Dies wird durch den Hostnamen der Maschine ersetzt
  • {user} – Dies wird durch den Namen des Benutzers ersetzt, der den Befehl gestartet hat

Schließlich haben wir den Pfad des Verzeichnisses angegeben, das wir sichern möchten. Sobald wir den Befehl ausführen, werden wir aufgefordert, das Passwort anzugeben, das wir bei der Initialisierung des Repositorys gewählt haben:

Enter passphrase for key /mnt/borg:

Sobald wir dies getan haben, wird das Archiv erstellt. Da wir die Option --list verwendet haben, wird die Liste der verarbeiteten Dateien und Verzeichnisse gedruckt. Jede Datei wird durch ein Symbol vordefiniert. In der folgenden Tabelle sehen Sie alle Symbole und ihre Bedeutung:

SYMBOLBEDEUTUNG
EinReguläre Datei (hinzugefügt)
MReguläre Datei (geändert)
UReguläre Datei (unverändert)
dVerzeichnis
bGerät blockieren
cChar-Gerät
sSymLink
IchDaten, die von der Standardeingabe gelesen werden
–Probelauf
xDatei aufgrund von Ausschluss nicht in der Sicherung enthalten

Standardmäßig werden Archive mit dem lz4-Algorithmus komprimiert, aber dies kann mit der Option --compression geändert werden. Wir können uns entscheiden, andere Algorithmen wie zlib oder lzma zu verwenden und die Komprimierungsstufe auch mit der folgenden Notation anzugeben:

<algorithm>,<compression-level>

Dabei muss <compression-level> als Ganzzahl zwischen 0 und 9 ausgedrückt werden. Nur als Beispiel, um den lzma-Algorithmus mit der maximal verfügbaren Komprimierung zu verwenden, würden wir Folgendes ausführen:

borg create --list --compression lzma,9 /mnt/borg::archive-{hostname}-{now} .

Wir können uns auch entscheiden, überhaupt keine Komprimierung zu verwenden, indem wir 'none' als Argument an die Option --compress übergeben.

Abrufen der Liste der Archive in einem Repository

Um die Liste der Archive zu erhalten, die in einem Borg-Repository gespeichert sind, können wir den Befehl "list" verwenden und den Pfad des Repositorys als Argument übergeben. In unserem Fall würden wir Folgendes ausführen:

borg list /mnt/borg

Wir werden erneut aufgefordert, das Kennwort anzugeben, das mit dem Repository verknüpft ist. Sobald wir dies getan haben, wird die Liste der im Repository enthaltenen Archive angezeigt:

archive-fingolfin-2022-04-23T19:33:58 Sat, 2022-04-23 19:34:00 [4454c59a6d88b7e905612aa642f64c5341a63acd717c26061c3156f65bced397]

Der Befehl "list" kann auch verwendet werden, um die Liste der in den Archiven enthaltenen Dateien zu erhalten. Um beispielsweise den Inhalt des Archivs aufzulisten, das wir in diesem Tutorial erstellt haben, würden wir Folgendes ausführen:

borg list /mnt/borg::archive-fingolfin-2022-04-23T19:33:58

Bereitstellen eines Archivs

Wenn wir den Inhalt eines Archivs untersuchen möchten (z. B. den Inhalt einiger Dateien überprüfen möchten), können wir es in ein Verzeichnis auf dem Dateisystem einhängen. Der Befehl, der es uns ermöglicht, diese Aufgabe auszuführen, ist "mount". Um das Backup ":archive-fingolfin-2022-04-23T19:33:58" in unserem Repository im Verzeichnis /tmp/borg zu mounten, würden wir beispielsweise Folgendes ausführen:

sudo borg mount /mnt/borg::archive-fingolfin-2022-04-23T19:33:58 /tmp/borg

Das Archiv wird wie ein Dateisystem in das angegebene Verzeichnis eingehängt, und sein Inhalt ist leicht verfügbar. Sehr praktisch. Neben einem bestimmten Archiv können wir das Repository als Ganzes mounten:

sudo borg mount /mnt/borg /tmp/borg

In diesem Fall enthält der Einhängepunkt ein Verzeichnis für jedes der im Repository enthaltenen Archive.

Wiederherstellen eines Archivs

Wenn etwas Schlimmes passiert und wir das Backup, das wir mit Borg erstellt haben, wiederherstellen müssen, müssen wir den Befehl "extract" verwenden. Wenn der Befehl ausgeführt wird, wird das Archiv in das aktuelle Arbeitsverzeichnis extrahiert, daher sollten wir zuerst in das Verzeichnis hineinziehen, um die Dateien in unserem Home-Verzeichnis wiederherzustellen:

cd

Sobald wir uns in dem Verzeichnis befinden, in das wir das Archiv extrahieren möchten, können wir den Befehl "extract" ausführen. Wie üblich übergeben wir den Pfad des Repositorys zusammen mit dem Namen des Archivs, der als Argument extrahiert werden soll, und werden aufgefordert, das Repository-Passwort anzugeben. Im folgenden Beispiel haben wir die Option --list in den Befehl eingefügt, um die extrahierten Dateien zu visualisieren:

borg extract --list  /mnt/borg::archive-fingolfin-2022-04-23T19:33:58

Wenn wir nur einige bestimmte Dateien aus dem Archiv wiederherstellen möchten, können wir deren Pfade innerhalb des Archivs an den Befehl anhängen. Um beispielsweise die Dateien .bashrc und .bash_profile aus dem Archiv zu extrahieren, würden wir Folgendes ausführen:

borg extract --list /mnt/borg::archive-fingolfin-2022-04-23T19:33:58 .bashrc .bash_profile

Im Gegenteil, wenn wir die Dateien angeben möchten, die von der Extraktion ausgeschlossen werden sollen, können wir die Option --exclude verwenden. Nehmen wir also an, wir möchten alle Dateien ausschließen, die im Verzeichnis .local enthalten sind. Wir würden laufen:

borg extract --list /mnt/borg::archive-fingolfin-2022-04-23T19:33:58 --exclude .local

Löschen eines Archivs

Wenn wir ein bestimmtes Archiv löschen möchten, das in unserem Borg-Repository enthalten ist, müssen wir den Befehl "delete" verwenden und das Repository und den Archivnamen angeben. Um das Archiv zu entfernen, das wir in den vorherigen Beispielen verwendet haben, würden wir Folgendes ausführen:

borg delete /mnt/borg::archive-fingolfin-2022-04-23T19:33:58

Schlüsse

In diesem Tutorial haben wir die Grundlagen von Borg gelernt, einem wirklich effizienten Deduplizierungsprogramm für Backups. Wir haben gelernt, wie Borg unter der Haube funktioniert und um welche Konzepte es sich dreht. Wir haben gesehen, wie man ein Repository initialisiert und welche Verschlüsselungsmethoden wir dafür verwenden können, wie man Archive mit oder ohne Komprimierung erstellt, wie man sie mountet, wiederherstellt und löscht. Dieses Tutorial sollte nur eine Einführung in Borg sein: Es gibt wirklich viel mehr, was es kann. Um zu lernen, wie Sie das Programm in vollem Umfang nutzen können, werfen Sie bitte einen Blick in das Handbuch!

Verwandte Artikel: