HomelabIT Praxis

BorgBackup – Datensicherung unter Proxmox

Wer schon einmal wichtige Daten verloren hat weiß spätestens dann, wie wichtig eine Datensicherung ist. Beim Einsatz von Proxmox sind verschiedene Datenbereiche zu betrachten, die geeignet gesichert werden sollten. In diesem Artikel beschreiben wir die Datensicherung unter Proxmox mit BorgBackup.


Sicherungsbereiche unter Proxmox

Innerhalb der Virtualisierungsplattform Proxmox existieren verschiedene Bereiche, die bedarfsgerecht gesichert werden sollten. Typische Datenbereiche sind

  • LXC mit ihren Daten
  • Virtuelle Maschinen mit ihren Daten
  • Konfigurationsdateien auf dem Promox Host
  • Ausgelagerte Volumes von Docker Containern, die auf dem Proxmox Host laufen
  • Daten aus einem ZFS-Storage auf dem Proxmox Host

Nachfolgend beschreibe ich meine Sicherungsmechanismen, die für mein Homelab ausreichend sind. Dabei werden der Proxmox Backup Server und Mechanismen wie ZFS Auto Snapshot bewusst außen vor gelassen, um die Sicherungen mit Bordmitteln einfach und ohne viel Vorwissen umsetzen zu können.


Sicherung von Containern und Virtuellen Maschinen unter Proxmox

Die Datensicherung unter Proxmox von Containern (LXC) und virtuellen Maschinen (VM) erfolgt mit den Backup-Mechanismen, die Proxmox von Hause aus mit sich brint. Zum Halten der Daten wurden verschiedene Sicherungsbereiche angelegt:

Proxmox Backup Storages

Hierzu wurden folgende Datenbereiche im Storagebereich im Rechenzentrum von Proxmox angelegt:

  • NFS-Freigabe auf ein Verzeichnis eines Synology-NAS (/mnt/pve/HomeNAS_Backup)
  • Ein Verzeichnis auf dem ZFS-Pool (/tank/backup)

Ebenfalls im Rechenzentrum wurden anschließend folgende Backup-Jobs eingerichtet:

Proxmox Backup Einstellungen

Im ersten Job werden alle ausgewählten LXCs und VMs täglich um 03:00 Uhr vollständig in das Verzeichnis /tank/backup im ZFS-Pool auf dem Proxmox-Host gesichert. Hiervon werden 7 Versionen = Tage vorgehalten.

Im zweiten Job werden die dieselben LXCs und VMs einmal die Woche, am Sonntag um 05:00 Uhr vollständig auf dem Synology-NAS gesichert. Hiervon werden 3 Versionen = 3 Wochen vorgehalten.

Für meinen Bedarf ist damit eine ausreichende Sicherung der Container und virtuellen Maschinen unter Proxmox erfolgt.


Sicherung von Systemdateien und ausgelagerten Daten mit BorgBackup

Mit dem zuvor beschriebenen Sicherungsmechanismus sind allerdings noch keine Systemdateien und auf dem Proxmox-Host ausgelagerten Dateien, zum Beispiel aus Docker Containern persistierte Daten, gesichert. Dies erfolgt mit BorgBackup.


Installation von BorgBackup

BorgBackup kann über apt install borgbackup installiert werden. Diese Variante ist NICHT zu empfehlen, da hiermit nur die Version 1.1 installiert wird, wir möchten aber die Version 1.2.3 installieren, da diese mehr Funktionen bietet.

Daher gehen wir auf die Release-Seite von BorgBackup und laden uns die borg-linux64 mit einem wget in das Home-Verzeichnis auf dem Proxmox-Host herunter.

root@pve1:~# wget https://github.com/borgbackup/borg/releases/download/1.2.3/borg-linux64
--2023-03-21 20:46:16--  https://github.com/borgbackup/borg/releases/download/1.2.3/borg-linux64
Resolving github.com (github.com)... 140.82.121.4
Connecting to github.com (github.com)|140.82.121.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/35517126/e86184db-cffb-4a32-996e-db7dc446ff76?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230321%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230321T194507Z&X-Amz-Expires=300&X-Amz-Signature=25c9a6c7e0d84714b429683188f7b85b1bd75e8038ba35a4bc8c8a5f1ba43d1c&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=35517126&response-content-disposition=attachment%3B%20filename%3Dborg-linux64&response-content-type=application%2Foctet-stream [following]
--2023-03-21 20:46:16--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/35517126/e86184db-cffb-4a32-996e-db7dc446ff76?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230321%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230321T194507Z&X-Amz-Expires=300&X-Amz-Signature=25c9a6c7e0d84714b429683188f7b85b1bd75e8038ba35a4bc8c8a5f1ba43d1c&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=35517126&response-content-disposition=attachment%3B%20filename%3Dborg-linux64&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.111.133, 185.199.108.133, 185.199.110.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.111.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22829040 (22M) [application/octet-stream]
Saving to: ‘borg-linux64’

borg-linux64                            100%[===============================================================================>]  21.77M  17.6MB/s    in 1.2s

2023-03-21 20:46:17 (17.6 MB/s) - ‘borg-linux64’ saved [22829040/22829040]

Anschließend die Datei nach /usr/local/bin kopieren, die Zugriffsrechte anpassen und ausführbar machen.

cp borg-linux64 /usr/local/bin/borg
chown root:root /usr/local/bin/borg
chmod 755 /usr/local/bin/borg

Die Versionsabfrage sollte dann wie folgt aussehen:

root@pve1:~# borg -V
borg 1.2.3

BorgBackup Repository erstellen

Der erste Schritt besteht darin, ein Repository zu erstellen, in dem unsere Backupdaten gehalten werden – es handelt sich quasi um einen Topf, in dem die Daten abgelegt werden. Grundsätzlich können beliebig viele solcher Repositories angelegt werden.

Ich habe dazu auf meinem Synology-NAS im Backup-Storage (siehe oben) ein zusätzliches Verzeichnis proxmox_docker_backup angelegt, in dem alle persistierten Daten aus meinen Docker-Containern abgelegt werden. Siehe hierzu auch den Artikel Proxmox / Docker – persistenten Storage in Container einbinden.

Die Initialisierung des Repositories erfolgt mit:

borg init -e repokey /mnt/pve/HomeNAS_Backup/proxmox_docker_backup

Dabei wird nach einer Passphrase gefragt, die man sich gut merken bzw. in einem Passwortmanager speichern sollte.

Das Repository ist jetzt angelegt und kann Daten aufnehmen.


Erstellen eines Backups mit BorgBackup

In diesem Beispiel wird der gesamte, ausgelagerte Datenbestand aus meinen Docker-Containern gesichert. Diese liegen unter /tank/docker.

borg create --stats --progress -C lz4 /mnt/pve/HomeNAS_Backup/proxmox_docker_backup::test /tank/docker/

Hier sind folgende Punkte wichtig:

–stats und –progressAusgabe von Fortschritts- und Statusinformationen zum erstellten Backup
-C lz4Die verwendete Komprimierungsmethode
/mnt/pve/HomeNAS_Backup/proxmox_docker_backup::testDas test ist der Name des zu erstellenden Backups und folgt per :: hinter dem Namen des Repositories
/tank/dockerDas zu sichernde Verzeichnis

Herausragend sind bei BorgBackup die Komprimierungs- und Deduplizierungsfunktionen, wie das folgende Beispiel zeigt:

root@pve1:~# borg info /mnt/pve/HomeNAS_Backup/proxmox_docker_backup
Enter passphrase for key /mnt/pve/HomeNAS_Backup/proxmox_docker_backup:
Repository ID: 05a16c7df94cee7bf68497fbd5cbe2f681d2269b73bcfb2982dd316ac6f713c7
Location: /mnt/pve/HomeNAS_Backup/proxmox_docker_backup
Encrypted: Yes (repokey)
Cache: /root/.cache/borg/05a16c7df94cee7bf68497fbd5cbe2f681d2269b73bcfb2982dd316ac6f713c7
Security dir: /root/.config/borg/security/05a16c7df94cee7bf68497fbd5cbe2f681d2269b73bcfb2982dd316ac6f713c7
------------------------------------------------------------------------------
                       Original size      Compressed size    Deduplicated size
All archives:                4.60 GB              1.76 GB            371.27 MB

                       Unique chunks         Total chunks
Chunk index:                    7530                45281

Differenz zwischen zwei Backups anzeigen lassen

Nehmen wir an, wir haben auf die beschriebene Weise zwei Backups test und test1 erstellt, kann man sich die Differenz zwischen den beiden Backups wie folgt anzeigen lassen:

 borg diff /mnt/pve/HomeNAS_Backup/proxmox_docker_backup::test test1

Löschen eines mit BorgBackup erstellten Backups

Ein erstelltes Backup wird wie folgt gelöscht:

borg delete /mnt/pve/HomeNAS_Backup/proxmox_docker_backup::test1

In diesem Fall wird das Backup mit dem Namen test1 gelöscht.


Automatische Datensicherung unter Proxmox mit BorgBackup

Selbstverständlich kann man auch verschiedene Quellen (Verzeichnisse) in ein Backup mit aufnehmen oder auch ausschließen, dazu verweise ich auf die Dokumentation von BorgBackup. Grundsätzlich ist das Ziel aber eine automatische Datensicherung unter Proxmox, diese wird mittels Cron-Job und einem Script umgesetzt.

Ich verwende dazu folgendes Backup-Script von der BorgBackup Seite, was ich für meine Bedürfnisse angepasst habe:

#!/bin/sh

# See the section "Passphrase notes" for more infos.
export BORG_PASSPHRASE='GEHEIME_PASSPHRASE'

# some helpers and error handling:
info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM

info "Starting backup"

# Back up the most important directories into an archive named after
# the machine this script is currently running on:

borg create                         \
    --verbose                       \
    --filter AME                    \
    --list                          \
    --stats                         \
    --show-rc                       \
    --compression lz4               \
    --exclude-caches                \
    --exclude '/tank/docker/data'    \
                                    \
    '/mnt/pve/HomeNAS_Backup/proxmox_docker_backup::{hostname}-{now}'              \
    /tank/docker                    \

backup_exit=$?

info "Pruning repository"

# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
# archives of THIS machine. The '{hostname}-*' globbing is very important to
# limit prune's operation to this machine's archives and not apply to
# other machines' archives also:

borg prune                              \
    --list                              \
    --show-rc                           \
    --keep-daily    7                   \
    --keep-weekly   4                   \
    --keep-monthly  6                   \
    '/mnt/pve/HomeNAS_Backup/proxmox_docker_backup'

prune_exit=$?

# actually free repo disk space by compacting segments

info "Compacting repository"

borg compact

compact_exit=$?

# use highest exit code as global exit code
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
global_exit=$(( compact_exit > global_exit ? compact_exit : global_exit ))

if [ ${global_exit} -eq 0 ]; then
    info "Backup, Prune, and Compact finished successfully"
elif [ ${global_exit} -eq 1 ]; then
    info "Backup, Prune, and/or Compact finished with warnings"
else
    info "Backup, Prune, and/or Compact finished with errors"
fi

exit ${global_exit}

Das Script habe ich nach /root/borg_backup/borg_docker_backup.sh gespeichert und mit chmod+x ausführbar gemacht.

Zusätzlich wurde mit crontab -e ein Cron-Job mit folgendem Eintrag erstellt:

05 05 * * * /bin/sh /root/borg_backup/borg_docker_backup.sh > /var/log/borgbackup.log 2>&1

Jeden Tag um 05:05 wird das Script aufgerufen und die Zusammenfassung in eine Logdatei geschrieben.


Fazit

Die Datensicherung unter Proxmox mit BorgBackup ist eine schöne Lösung ohne viel SchickSchnack, die einfach sehr gut funktioniert und mit der man auch testen und rumspielen kann, ohne sich gleich das ganze System irreparabel zu beschädigen. Im Zweifel löscht man das Repository hart per Hand auf dem Zielsystem und fängt von vorne an.

An dieser Stelle kann nicht auf alle Einstellungen und Konfigurationsmöglichkeiten eingegangen werden, da diese a) sehr vielfältig sind und b) von den individuellen Erfordernissen abhängen. Ich verweise daher nochmal auf die Dokumentation von BorgBackup.

Im kommenden zweiten Teil zu BorgBackup werden wir uns mit der Wiederherstellung von Backups beschäftigen, da es auch hier verschiedene Möglichkeiten gibt, verlorene Daten wiederherzustellen.

2 Gedanken zu „BorgBackup – Datensicherung unter Proxmox

  • Matthias

    Hallo,

    interessanter Artikel.
    Aber wo beschreibst Du die Sicherung der Systemdateien, falls Proxmox selbst neu aufgesetzt werden muss?

    VG
    Matthias

    Antwort
    • Hallo Matthias,

      danke Dir, grundsätzlich kannst Du mit der beschriebenen Vorgehensweise alles sichern, was Du möchtest. Du kannst ja eine beliebige Anzahl solcher Sicherungsjobs anlegen. Ich habe mich in dem Artikel auf ausgelagerte Nutzdaten von Container konzentriert.

      Viele Grüße

      Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert