Get Rewarded! We will reward you with up to €50 credit on your account for every tutorial that you write and we publish!

Installation und Konfiguration von BorgBackup

profile picture
Author
Hetzner Online
Published
2019-03-08
Time to read
10 minutes reading time

Einführung

BorgBackup (kurz: Borg) ist ein deduplizierendes Backupprogramm. Optional wird Kompression und authentifizierte Verschlüsselung unterstützt.

Das Hauptziel von Borg ist es eine effiziente und sichere Backup- Lösung anzubieten. Dank der Deduplizierung läuft der Backupprozess mit Borg sehr schnell ab und macht Borg auch für tägliche Backups sehr interessant. Je nach Datenmenge und Anzahl der Änderungen sind auch deutlich geringere zeitliche Abstände denkbar. Alle Daten werden bereits clientseitig verschlüsselt, was Borg auch für den Einsatz auf gehosteten Systemen interessant macht.

Weitere Informationen über BorgBackup finden Sie auf der offiziellen Website.

Schritt 1 - Installation

Es gibt drei Wege Borg zu installieren.

  • Distribution Package
  • Standalone Binary
  • From Source

In der Borg Dokumentation finden Sie sehr detaillierte Beschreibungen zu den unterschiedlichen Möglichkeiten. Deswegen gehen wir an dieser Stelle nicht weiter darauf ein.

Denken Sie bitte aus Kompatibilitätsgründen daran eine aktuelle Version von Borg zu verwenden! (>=1.0.9)

Schritt 2 - Arbeitsablauf mit Borg

Schritt 2.1 - Aktivierung von Borg und Konfiguration Ihrer Storage Box

Damit Borg auf Ihrer Storage Box aktiviert ist, müssen Sie den Dienst zuerst im Robot aktivieren. Gehen Sie dazu im Robot auf die Einstellungsseite Ihrer Storage Box und klicken bei "SSH-Support" auf aktivieren.

Falls SSH auf der Storage Box nicht verfügbar ist, müssen sie beispielsweise SFTP für diesen Schritt verwenden.

Für Borg können Sie zum einen Passwort-Authentifizierung verwenden, empfohlen ist aber die Authentifizierung über den Public Key. Dies ist besonders auch dann empfohlen, wenn Sie die Backups mit Cronjobs automatisieren möchten.

Für die Verwendung von Borg wird ihr SSH Key nicht(!) im RFC4716 Format wie bei SFTP/SCP benötigt. Sie müssen Ihren normalen Public Key hinterlegen. Sollten Sie sowohl Borg, also auch SFTP/SCP verwenden, müssen beide Keys (RFC4716 Format und normal) hinterlegt werden.

Erstellen Sie in Ihrer Storage Box den Ordner .ssh und legen darin die Datei authorized_keys ab. Diese muss Ihren Public Key enthalten:

ssh-rsa AAAAB3NzaC1yc2EAAAA.......rdj7eitNUjlIV8ovvAH/6SAsKD6

Setzen Sie die Berechtigungen für den .ssh-Ordner auf 0700 und für die authorized_keys auf 0600.

Genauere Informationen zum Einrichten eines SSH-Keys finden Sie in der offiziellen Storage Box Dokumentation. Relevant sind hierbei die Anweisungen zu Port 23.

Ihr Homeverzeichnis auf Ihrer Storage Box / Backup Space darf für Group und Others keine Schreibrechte haben, da sonst eine Authentifizierung über Keyfile nicht möglich ist. Standardmäßig ist dies so gesetzt, kann von Ihnen jedoch verändert werden.

Nun muss noch das Verzeichnis für das Backup-Repository in der Storage Box angelegt werden. Dazu legen Sie beispielsweise einen Ordner backups und darunter einen Ordner server1 an. Der Ordner server1 wird dann im nächsten Schritt als Borg Repository initialisiert. Unter backups könnten Sie dann noch weitere Verzeichnisse für andere Server, die gesichert werden sollen, anlegen.

/backups/server1

Schritt 2.2 - Borg Repository initialisieren

Wenn Sie einen SSH-Key verwenden, und dieser nicht der Standard-Key ist, haben Sie die Option über die Umgebungsvariable BORG_RSH den gewünschten Key anzugeben. Dabei können Sie den SSH Befehl angeben, den Borg verwenden soll. Der Standard wäre nur ssh:

$ export BORG_RSH='ssh -i /home/userXY/.ssh/id_ed25519'

Beim initialisieren von Borg werden Sie nach einem Passwort für Ihr Repository gefragt. Nur mit diesem Passwort kann in Zukunft auf das Repository zugegriffen werden. Es wird also bei jeder Schreib- oder Leseoperation auf dem Repository benötigt. Das Passwort sollten sie sich gut merken, da es nicht wiederhergestellt werden kann! Damit Sie das Passwort nicht bei jedem Aufruf von Borg eingeben müssen, können Sie optional die Umgebungsvariable BORG_PASSPHRASE setzen.

$ export BORG_PASSPHRASE="top_secret_passphrase"

Als erstes muss das Borg Repository initialisiert werden. Das Repository ist nichts anders als ein Ordner auf Ihrer Storage Box, der von Borg mit ein paar grundlegenden Strukturen versorgt wird. Darin werden dann alle Backups gespeichert.

Der folgende Befehl initialisiert den Ordner /backups/server1 auf Ihrer Storage Box.

$ borg init --encryption=repokey ssh://u123456@u123456.your-storagebox.de:23/./backups/server1

Schritt 2.3 - Erstes Backup erstellen

Mit dem folgenden Befehl sichern Sie beispielsweise die Ordner src und built aus Ihrem Homedirectory in das Repository auf Ihrer Storage Box. Jedes Backup muss mit einem eindeutigen Namen versehen werden. Ein Timestamp bietet sich hierfür an:

$ borg create ssh://u123456@u123456.your-storagebox.de:23/./backups/server1::2017_11_11_initial ~/src ~/built

borg create kann noch mit vielen weiteren Optionen aufgerufen werden. So kann beispielsweise der Fortschritt während oder eine Statistik zum Ende des Backups angezeigt werden. Außerdem können "exclude patterns" und einiges mehr angegeben werden.

Für weitere Informationen dazu besuchen Sie bitte die Borg create Dokumentation.

Schritt 2.4 - Folgebackups

Die weiteren Backups laufen identisch wie das erste ab. Dank der Deduplizierung, sind diese jedoch viel schneller und extrem speichereffizient.

Lediglich der Name des Backups muss beim Folgebackup angepasst werden, da dieser wie oben erwähnt eindeutig sein muss.

Versuchen Sie beim Folgebackup einfach mal die Option --stats um zu sehen, wie effizient die Speicherung ist.

$ borg create --stats ssh://u123456@u123456.your-storagebox.de:23/./backups/server1::2017_11_12 ~/src ~/built

Schritt 2.5 - Weitere Borg Befehle wie: Archive auflisten, Backups wiederherstellen

Die Borg Dokumentation bietet eine sehr detaillierte Beschreibung aller Borg Befehle.

Am Besten starten Sie mit einem Blick in den quick-start Abschnitt und tauchen dann im usage Abschnitt tiefer in die Details ein.

Hier finden Sie dann viele Beispiele zum Auflisten von Archiven, oder wiederherstellen von Backups. Es ist beispielsweise auch möglich Diffs zwischen Backup anzuzeigen oder alte Backups zu löschen, um Speicherplatz zurück zu gewinnen.

Wenn Sie die config-Datei bearbeiten wollen, können Sie dafür nicht den borg config-Befehl verwenden, da dieser auf dem Gerät ausgeführt werden muss, auf dem sich auch die config-Datei befindet. Stattdessen können Sie beispielsweise SFTP verwenden, um auf Ihre Storage Box zuzugreifen. Die config-Datei ist dort im Ordner ./backups/server1. Die Datei muss manuell bearbeitet werden.

Schritt 2.6 - Automatisierung der Backups mit Cron

Legen Sie ein Verzeichnis für die Logdatei an.

$ mkdir -p /var/log/borg

Zunächst muss ein Skript erstellt werden, welches die Backups ausführt. Dies könnte wie folgt aussehen und unter /usr/local/bin/backup.sh liegen.

#!/usr/bin/env bash

##
## Setzten von Umgebungsvariablen
##

## falls nicht der Standard SSH Key verwendet wird können
## Sie hier den Pfad zu Ihrem private Key angeben
# export BORG_RSH='ssh -i /home/userXY/.ssh/id_ed25519'

## Damit das Passwort vom Repository nicht eingegeben werden muss
## kann es in der Umgepungsvariable gesetzt werden
# export BORG_PASSPHRASE="top_secret_passphrase"

##
## Setzten von Variablen
##

LOG='/var/log/borg/backup.log'
export BACKUP_USER='u602'
export REPOSITORY_DIR='server1'

## Hinweis: Für die Verwendung mit einem Backup-Account muss
## 'your-storagebox.de' in 'your-backup.de' geändert werden.

export REPOSITORY="ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}"

##
## Ausgabe in Logdatei schreiben
##

exec > >(tee -i ${LOG})
exec 2>&1

echo "###### Backup gestartet: $(date) ######"

##
## An dieser Stelle können verschiedene Aufgaben vor der
## Übertragung der Dateien ausgeführt werden, wie z.B.
##
## - Liste der installierten Software erstellen
## - Datenbank Dump erstellen
##

##
## Dateien ins Repository übertragen
## Gesichert werden hier beispielsweise die Ordner root, etc,
## var/www und home
## Ausserdem finden Sie hier gleich noch eine Liste Excludes,
## die in kein Backup sollten und somit per default ausgeschlossen
## werden.
##

echo "Übertrage Dateien ..."
borg create -v --stats                   \
    $REPOSITORY::'{now:%Y-%m-%d_%H:%M}'  \
    /root                                \
    /etc                                 \
    /var/www                             \
    /home                                \
    --exclude /dev                       \
    --exclude /proc                      \
    --exclude /sys                       \
    --exclude /var/run                   \
    --exclude /run                       \
    --exclude /lost+found                \
    --exclude /mnt                       \
    --exclude /var/lib/lxcfs

echo "###### Backup beendet: $(date) ######"
Weitere Befehle

Optional können Sie zusätzlich auch den borg prune-Befehl nutzen, welcher oftmals in automatisierten Backup-Skripts verwendet wird, wie in der Borg-Dokumentation vermerkt ist. Mit diesem Befehl werden alle Archive gelöscht, die nicht mit den angegebenen Optionen übereinstimmen. Verwenden Sie diesen Befehl daher ausschließlich, wenn Sie genau wissen, was Sie tun. Ansonsten könnte es passieren, dass Archive gelöscht werden, die Sie eigentlich noch benötigen. Beachten Sie dazu auch dieses Zitat (EN) aus der Borg-Dokumentation:

It is strongly recommended to always run prune -v --list --dry-run ... first so you will see what it would do without it actually doing anything.

Der borg prune-Befehl gibt keinen Speicher frei. Dazu führen Sie anschließend den borg compact-Befehl aus.



Jetzt sollte das Skript getestet werden, bevor der Cronjob erstellt wird.

$ chmod u+x /usr/local/bin/backup.sh
$ /usr/local/bin/backup.sh

Wenn alles fehlerfrei läuft, können Sie das Skript nun als Cronjob laufen lassen. Öffnen Sie dazu crontab als root:

crontab -e

Und fügen Sie die folgende Zeile hinzu um ein tägliches Backup um 00.00 Uhr auszuführen.

0 0 * * * /usr/local/bin/backup.sh > /dev/null 2>&1

Schritt 3 - Hinweise

Schritt 3.1 - Full-System Backup

Wenn Sie auf Ihrem Linux Server ein Backup des kompletten Systems machen möchten, sollten Sie daran denken, dass nicht alle Dateien und Ordner in ein Backup gehören. Einige sollten per default ausgeschlossen werden.

Dafür verfügt der create Befehl über eine --exclude Option oder es kann eine Exclude-Datei angegeben werden. Die Verwendung wird in der Borg create Dokumentation genau beschrieben.

Hier ein beispielhafter Aufruf von borg create für ein Backup des kompletten Systems:

borg create -v --stats                   \
    $REPOSITORY::'{now:%Y-%m-%d_%H:%M}'  \
    /                                    \
    --exclude /dev                       \
    --exclude /proc                      \
    --exclude /sys                       \
    --exclude /var/run                   \
    --exclude /run                       \
    --exclude /lost+found                \
    --exclude /mnt                       \
    --exclude /var/lib/lxcfs

Schritt 3.2 - Deduplizierung und Verlässlichkeit

Die Deduplizierung sorgt bei Borg Backups für einen sehr effizienten Speicherverbrauch und hohe Geschwindigkeit.

Man muss sich jedoch auch bewusst sein, dass dadurch jede Datei genau einmal gespeichert wird. Sollte eine Datei z.B. durch einen Festplattenfehler beschädigt sein, ist diese in allen Backups beschädigt.

Deshalb gehört es zum Best Practice sehr wichtige Daten in mehr als einem Repository zu speichern!

Schritt 3.3 - Borg Version am Server

Zur Vermeidung von Kompatibilitätsproblemen ist es empfehlenswert, dass Sie an Ihrem Server und auf der Storage Box / Backup Space die gleiche Version von Borg Backup verwenden.

Für jedes Major-Update stehe eine Version zur Verfügung, die von uns regelmäßig und zeitnah aktualisiert wird. Die Version, die Sie auf Ihrer Storage Box / Backup Space verwenden möchten können Sie mit dem --remote-path Parameter von Borg angeben. Wird der Parameter nicht angegeben wird die neueste Version verwendet, die auf der Storage Box / Backup Space vorhanden ist.

Momentan sind die Versionen 1.1 und 1.2 installiert. Die neueste Version, also 1.2, ist die Default-Version. Falls Sie noch Version 1.1 verwenden möchten verwenden Sie:

$ borg init --encryption=repokey --remote-path=borg-1.1 ssh://u123456@u123456.your-storagebox.de:23/./backups/server1

borg-1.1 steht hierbei für die Version 1.1.x.

Im Changelog der BorgBackup Dokumentation finden Sie Informationen zu den Änderungen zwischen Versionen und zu möglichen Kompatibilitätsproblemen, falls welche auftreten können.

Schritt 3.4 - Borg und SSH

BorgBackup nutzt SSH über Port 23. Der SSH Zugriff ist jedoch auf Borg beschränkt und ein Login ist nicht möglich!

Schritt 3.5 - Borg und SFTP/SCP parallel mit Keyfile nutzen

Wie oben beschrieben, benötigt Borg den normalen Public Key, SFTP/SCP hingegen den SSH Key im RFC4716 Format. Sollten Sie sowohl Borg, also auch SFTP/SCP verwenden, müssen beide Keys (RFC4716 Format und normal) in der authorized_keys Datei hinterlegt werden.

Schritt 3.6 - Borg Keyfile und Passwort

Das Passwort, das Sie für Ihr Borg-Repository wählen, wird bei uns nicht gespeichert und kann von uns nicht wiederhergestellt werden! Bewahren Sie es sicher auf.

Im Repokey mode (default), liegt der Repo-Key in der Repo-Config, also auf der Storage-Box. Es ist empfehlenswert, dass Sie ein Backup des Key bei sich speichern. Mehr Informationen dazu finden Sie in der Borg Dokumentaion.

Fazit

Hiermit haben sie mit Borgbackup eine platzsparende und automatisierte Software für ihre Backups installiert und konfiguriert.

Want to contribute?

Get Rewarded: Get up to €50 in credit! Be a part of the community and contribute. Do it for the money. Do it for the bragging rights. And do it to teach others!

Report Issue

Discover our

Storage Box

Access your storage from everywhere and at any time via PC, smartphone, and tablet.

Want to contribute?

Get Rewarded: Get up to €50 credit on your account for every tutorial you write and we publish!

Find out more