TL;DR — Kurzzusammenfassung
Borgmatic automatisiert verschlüsselte BorgBackup-Sicherungen unter Linux. YAML konfigurieren, systemd-Timer einrichten und die 3-2-1-Backup-Strategie umsetzen.
Borgmatic verwandelt die leistungsstarke, aber ausführliche CLI von BorgBackup in eine deklarative YAML-Konfiguration — eine einzige Datei verwaltet verschlüsselte, deduplizierte und komprimierte Backups mit Aufbewahrungsrichtlinien, Konsistenzprüfungen, Datenbank-Hooks und Überwachungsbenachrichtigungen. Dieser Leitfaden deckt jeden Schritt von der Installation bis zu einer produktionsreifen 3-2-1-Backup-Strategie mit Datenbankdumps und Healthcheck-Integration ab.
Voraussetzungen
- Linux-Server (Ubuntu 20.04+, Debian 11+, RHEL 8+ oder ähnlich)
- Python 3.8+ (für pip install) oder Zugang zu apt/dnf/pacman
- SSH-Zugang zu einem entfernten Backup-Ziel (für Offsite-Backups)
- Root- oder sudo-Zugang
- Grundkenntnisse in YAML und systemd
BorgBackup-Grundlagen
BorgBackup ist ein deduplizierendes Backup-Programm, geschrieben in Python und C. Bevor Borgmatic Sinn macht, ist es wichtig, was Borg bietet:
- Inhaltsbasierte Fragmentierung — Borg teilt Dateien in variable Blöcke basierend auf Content-Hashing auf, nicht in feste Blöcke. Eine leicht modifizierte große Datei dedupliziert effizient, da die meisten Blöcke identisch sind.
- Deduplizierung — Jeder eindeutige Block wird genau einmal über alle Archive im Repository gespeichert. Ein 100-GB-Server mit meist unveränderten Daten benötigt nur Megabytes für nachfolgende Backups.
- Verschlüsselung — Der
repokey-blake2-Modus speichert einen mit AES-256-CTR verschlüsselten Schlüssel im Repository, geschützt durch Ihre Passphrase und authentifiziert mit HMAC-SHA256. Ein vollständig kompromittierter Remote-Server gibt keine Klartextdaten preis. - Komprimierung —
lz4(schnellste, minimale CPU),zstd(ausgewogen, empfohlen) oderzlib/lzma(maximales Verhältnis).zstd,3ist der moderne Standard. - Nur-Anhängen-Modus — Repositories können gesperrt werden, sodass selbst ein kompromittierter Client neue Archive erstellen, aber keine vorhandenen löschen oder ändern kann — Ransomware kann die Backup-Historie nicht zerstören.
Schritt 1: BorgBackup und Borgmatic installieren
Via pip (empfohlen — immer neueste Version):
pip install --upgrade borgmatic
Via pipx (isolierte Umgebung):
pipx install borgmatic
Via apt (Ubuntu/Debian):
apt install borgmatic
Via Docker:
docker run --rm \
-v /etc/borgmatic:/etc/borgmatic \
-v /var/backup:/backup \
ghcr.io/borgmatic-collective/borgmatic
Installation überprüfen:
borgmatic --version
borg --version
Schritt 2: Borgmatic konfigurieren
Kommentiertes Template generieren:
mkdir -p /etc/borgmatic
borgmatic config generate --destination /etc/borgmatic/config.yaml
Minimale Produktionskonfiguration für einen Webserver mit Datenbankdumps und Überwachung:
source_directories:
- /etc
- /var/www
- /home
repositories:
- path: /var/backup/local-borg
label: lokal
- path: ssh://backup@192.168.1.100/~/backups/webserver
label: entfernt-lan
- path: ssh://backup@extern.beispiel.de:22/~/backups/webserver
label: entfernt-extern
storage:
encryption_passphrase: "ihre-lange-zufaellige-passphrase-hier"
compression: "zstd,3"
archive_name_format: "{hostname}-{now:%Y-%m-%dT%H:%M:%S}"
checkpoint_interval: 1800
retention:
keep_daily: 7
keep_weekly: 4
keep_monthly: 6
keep_yearly: 1
postgresql_databases:
- name: meine_app_produktion
username: postgres
format: custom
mysql_databases:
- name: wordpress
username: root
options: "--single-transaction"
hooks:
before_backup:
- echo "Backup gestartet am $(date)"
after_backup:
- curl -fsS https://hc-ping.com/ihre-uuid > /dev/null
on_error:
- echo "Backup FEHLGESCHLAGEN am $(date)" | mail -s "Backup-Fehler" admin@beispiel.de
Wichtige Konfigurationsfelder:
| Feld | Zweck | Empfohlener Wert |
|---|---|---|
encryption_passphrase | Schützt den Repository-Schlüssel | 40+ zufällige Zeichen |
compression | Algorithmus + Stufe | zstd,3 |
keep_daily | Täglich aufbewahrte Archive | 7 |
keep_weekly | Wöchentlich aufbewahrte Archive | 4 |
keep_monthly | Monatlich aufbewahrte Archive | 6 |
Schritt 3: Repository initialisieren
Jedes Repository vor dem ersten Backup initialisieren:
borgmatic init --encryption repokey-blake2
Für ein entferntes Repository im Nur-Anhängen-Modus (dringend empfohlen für Offsite-Sicherheit):
# Auf dem Backup-Server ~/.ssh/authorized_keys bearbeiten:
command="borg serve --restrict-to-path /home/backup/backups --append-only",restrict ssh-rsa AAAA... client@webserver
# Dann vom Client aus normal initialisieren
borgmatic init --encryption repokey-blake2
Repository-Schlüssel exportieren und offline speichern — dies ist kritisch:
borg key export /var/backup/local-borg /root/borg-schluessel-backup.txt
# In Passwort-Manager speichern UND auf USB-Stick ausserhalb des Standorts
Schritt 4: Backups ausführen und planen
Erstes Backup (ausführlich zur Überprüfung):
borgmatic create --verbosity 1 --list --stats
Reguläre Operationen:
borgmatic # erstellen + bereinigen + komprimieren + prüfen (vollständige Ausführung)
borgmatic create # nur Backup
borgmatic prune # Aufbewahrungsrichtlinie anwenden, alte Archive entfernen
borgmatic compact # freigegebenen Speicher zurückgewinnen (Borg 1.2+ erforderlich)
borgmatic check # Integrität von Repository und Archiven prüfen
Verfügbare Archive anzeigen:
borgmatic list
borgmatic info --archive latest
Schritt 5: Mit systemd-Timer planen
Borgmatic enthält eine systemd-Dienst- und Timer-Unit. Diese aktivieren:
systemctl enable --now borgmatic.timer
systemctl status borgmatic.timer
Der Standard-Timer läuft täglich zu einer zufälligen Zeit im Wartungsfenster. Um das Timing anzupassen, eine Override-Datei erstellen:
# /etc/systemd/system/borgmatic.timer.d/override.conf
[Timer]
OnCalendar=
OnCalendar=*-*-* 02:30:00
RandomizedDelaySec=30min
systemctl daemon-reload
systemctl restart borgmatic.timer
Schritt 6: Wiederherstellungsverfahren
Verfügbare Archive auflisten:
borgmatic list
Bestimmte Dateien oder Verzeichnisse wiederherstellen:
borgmatic extract \
--archive webserver-2026-03-23T02:30:00 \
--path /var/www/meineapp \
--destination /tmp/wiederherstellung
PostgreSQL-Datenbank wiederherstellen:
borgmatic restore --archive latest --database meine_app_produktion
Archiv mit FUSE zum Durchsuchen einbinden:
borgmatic mount --archive latest --mount-point /mnt/borg
ls /mnt/borg
borgmatic umount --mount-point /mnt/borg
Vergleich: Borgmatic vs Alternativen
| Funktion | Borgmatic | Restic | Duplicati | Kopia | Tarsnap |
|---|---|---|---|---|---|
| Engine | BorgBackup | Eigen | Eigen | Eigen | Eigen |
| Verschlüsselung | AES-256-CTR+HMAC | AES-256-CTR | AES-256 | AES-256-GCM | AES-256-CTR |
| Deduplizierung | Block-basiert | Inhaltsadressiert | Block-basiert | Ja | Ja |
| Konfiguration | YAML | CLI-Flags | GUI/XML | GUI/CLI | CLI |
| DB-Hooks | Nativ (PG, MySQL, SQLite) | Externe Skripte | Nein | Nein | Nein |
| Nur-Anhängen | Ja (SSH-Server) | Nein | Nein | Nein | Nein |
| Überwachungs-Hooks | Nativ vor/nach/Fehler | Extern | Extern | Extern | Nein |
Häufige Probleme
| Problem | Lösung |
|---|---|
Failed to create/acquire the lock | Vorherige Ausführung hängt; borgmatic borg break-lock /pfad/zum/repo ausführen |
Repository is not a valid Borg repository | Falscher Pfad oder Repository nicht initialisiert; borgmatic init ausführen |
Passphrase provided is incorrect | encryption_passphrase in Config prüfen — muss mit Init-Passphrase übereinstimmen |
Connection closed by remote host | SSH-Schlüssel fehlt in authorized_keys oder borg serve nicht auf Remote konfiguriert |
No archives found | Erstes Backup noch nicht ausgeführt; borgmatic create ausführen |
compact: repository does not support compaction | Borg < 1.2 auf Repository-Server; BorgBackup aktualisieren |
Zusammenfassung
- BorgBackup bietet inhaltsbasierte Fragmentierung, Deduplizierung, AES-256-CTR-Verschlüsselung, lz4/zstd/zlib-Komprimierung und Nur-Anhängen-Modus.
- Borgmatic kapselt Borg in einem einzigen YAML-Config für create, prune, compact, check, Datenbank-Hooks und Überwachungsbenachrichtigungen.
- systemd-Timer verwaltet die Planung mit
RandomizedDelaySec, um Lastspitzen zu vermeiden. - Datenbank-Hooks (PostgreSQL pg_dump, MySQL mysqldump, SQLite) gewährleisten konsistente Snapshots ohne Dienstunterbrechung.
- 3-2-1-Strategie — drei Kopien, zwei Medientypen, eine außerhalb des Standorts — durch Auflistung mehrerer Repositories in einem Config umgesetzt.
- Stellen Sie Wiederherstellungen immer vorher auf die Probe, bevor Sie sie benötigen;
borgmatic checkprüft die Integrität, aber nur ein erfolgreicher Extract bestätigt die Wiederherstellbarkeit.