BorgBackup — Deduplizierte, verschlüsselte Backups

Praxis-Guide zu BorgBackup: deduplizierte, komprimierte und verschlüsselte Backups, die nur geänderte Daten-Chunks speichern — ideal für große Datenbestände.

BorgBackup (Binary borg) ist ein dedupliziertes Backup-Werkzeug: Es zerlegt deine Daten in Chunks und speichert jeden Block nur ein einziges Mal — egal, in wie vielen Archiven oder über wie viele Läufe er vorkommt. Das spart drastisch Platz, und in Kombination mit Kompression und authentifizierter Verschlüsselung bekommst du Backups, die sich auch auf nicht vertrauenswürdigem Speicher oder per SSH auf einem Remote-Server gut aufgehoben fühlen. Dieser Guide führt dich vom Anlegen eines Repositorys über das Erstellen und Wiederherstellen von Archiven bis zu Aufbewahrungsregeln und Automatisierung.

Repository anlegen

borg init --encryption=repokey <path> — Legt ein neues lokales Repository mit Verschlüsselung an. Der Schlüssel wird im Repository selbst gespeichert.

borg init --encryption=repokey /mnt/backup/myrepo

borg init --encryption=keyfile <path> — Legt ein Repository mit Verschlüsselung an. Der Schlüssel liegt in ~/.config/borg/keys (sicherer für ausgelagerte Repositories).

borg init --encryption=keyfile /mnt/backup/myrepo

borg init --encryption=none <path> — Legt ein Repository ohne Verschlüsselung an. Für sensible Daten nicht empfohlen.

borg init --encryption=none /tmp/testrepo

borg init --encryption=repokey-blake2 <path> — Legt ein Repository mit repokey-Verschlüsselung an, die BLAKE2b nutzt (auf moderner Hardware schneller als SHA-256).

borg init --encryption=repokey-blake2 /mnt/backup/myrepo

borg init --encryption=repokey <user>@<host>:<path> — Legt ein Repository auf einem entfernten Server per SSH an.

borg init --encryption=repokey user@server.com:/backup/repo

Archive erstellen

borg create <repo>::<archive> <path> — Erstellt ein neues Archiv im Repository. Archivnamen müssen eindeutig sein.

borg create /mnt/backup/repo::home-2024-01-15 /home/user

borg create <repo>::'{hostname}-{now:%Y-%m-%d}' <path> — Erstellt ein Archiv mit automatischem Namen über Platzhalter für Hostname und Datum.

borg create /mnt/backup/repo::'{hostname}-{now:%Y-%m-%d}' /home/user

borg create --stats <repo>::<archive> <path> — Zeigt nach Abschluss Backup-Statistiken an (Originalgröße, komprimierte Größe, deduplizierte Größe).

borg create --stats /mnt/backup/repo::backup-today /home

borg create --progress <repo>::<archive> <path> — Zeigt den Fortschritt während der Backup-Erstellung an.

borg create --progress /mnt/backup/repo::daily-backup /home

borg create --exclude <pattern> <repo>::<archive> <path> — Schließt Dateien, die auf ein Muster passen, vom Archiv aus.

borg create --exclude '/home/*/.cache' /mnt/backup/repo::home-backup /home

borg create --exclude-from <file> <repo>::<archive> <path> — Liest Ausschlussmuster aus einer Datei.

borg create --exclude-from /etc/borg/excludes /mnt/backup/repo::daily /home

borg create --compression lz4 <repo>::<archive> <path> — Nutzt LZ4-Kompression (schnell). Optionen: none, lz4, zstd, zlib, lzma.

borg create --compression lz4 /mnt/backup/repo::home-daily /home

borg create --compression zstd,<level> <repo>::<archive> <path> — Nutzt Zstandard-Kompression mit der angegebenen Stufe (1–22). Stufe 3 ist ein guter Standardwert.

borg create --compression zstd,3 /mnt/backup/repo::home-daily /home

borg create -n <repo>::<archive> <path> — Probelauf: zeigt, was archiviert würde, ohne das Archiv tatsächlich anzulegen.

borg create -n /mnt/backup/repo::test-dry-run /home/user

Archive auflisten

borg list <repo> — Listet alle Archive im Repository auf.

borg list /mnt/backup/repo

borg list --short <repo> — Listet nur die Archivnamen auf, einen pro Zeile (praktisch für Skripte).

borg list --short /mnt/backup/repo

borg list <repo>::<archive> — Listet alle Dateien innerhalb eines bestimmten Archivs auf.

borg list /mnt/backup/repo::home-2024-01-15

borg list <repo>::<archive> --pattern 'sh:<glob>' — Listet Dateien in einem Archiv auf, die auf ein Shell-Glob-Muster passen.

borg list /mnt/backup/repo::home-2024-01-15 --pattern 'sh:*.conf'

borg list --json <repo> — Gibt die Archive als JSON aus (für Skripte).

borg list --json /mnt/backup/repo | jq '.archives[-1].name'

Archive wiederherstellen

borg extract <repo>::<archive> — Entpackt das vollständige Archiv in das aktuelle Verzeichnis.

borg extract /mnt/backup/repo::home-2024-01-15

borg extract <repo>::<archive> <path> — Entpackt nur einen bestimmten Pfad oder eine Datei aus dem Archiv.

borg extract /mnt/backup/repo::home-2024-01-15 home/user/Documents

borg extract --strip-components <n> <repo>::<archive> — Entfernt beim Entpacken die ersten n Pfadkomponenten.

borg extract --strip-components 2 /mnt/backup/repo::home-2024-01-15

borg extract --dry-run <repo>::<archive> — Zeigt vorab, was entpackt würde, ohne tatsächlich Dateien zu schreiben.

borg extract --dry-run /mnt/backup/repo::home-2024-01-15

borg extract --stdout <repo>::<archive> <file> | <command> — Entpackt eine einzelne Datei und leitet ihren Inhalt nach stdout weiter.

borg extract --stdout /mnt/backup/repo::home-2024-01-15 home/user/db.sql | mysql -u root mydb

Archive einhängen (FUSE)

borg mount <repo> <mountpoint> — Hängt alle Archive des Repositorys als virtuelles Dateisystem ein (erfordert FUSE).

borg mount /mnt/backup/repo /mnt/borg

borg mount <repo>::<archive> <mountpoint> — Hängt ein einzelnes Archiv als virtuelles Dateisystem ein.

borg mount /mnt/backup/repo::home-2024-01-15 /mnt/borg

borg umount <mountpoint> — Hängt ein zuvor eingehängtes Borg-Dateisystem wieder aus.

borg umount /mnt/borg

Aufräumen & Löschen

Achtung – destruktiv: borg prune, borg delete und borg compact entfernen Archive bzw. Daten endgültig. Vorher immer mit --dry-run (und bei prune mit --list) prüfen, was wegfällt.

borg prune --keep-daily <n> --keep-weekly <n> --keep-monthly <n> <repo> — Wendet eine Aufbewahrungsregel auf das Repository an. Archive außerhalb der Regel werden gelöscht.

borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6 /mnt/backup/repo

borg prune --dry-run --keep-daily 7 --keep-weekly 4 <repo> — Zeigt vorab, welche Archive die Aufbewahrungsregel entfernen würde.

borg prune --dry-run --keep-daily 7 --keep-weekly 4 /mnt/backup/repo

borg prune --stats --keep-daily 7 <repo> — Räumt auf und zeigt Statistiken zum freigegebenen Speicher an.

borg prune --stats --keep-daily 7 /mnt/backup/repo

borg prune --keep-daily 7 --prefix <prefix> <repo> — Wendet die Aufbewahrungsregel nur auf Archive an, deren Namen mit dem angegebenen Präfix beginnen.

borg prune --keep-daily 7 --prefix 'home-' /mnt/backup/repo

borg prune --keep-daily 7 --glob-archives '<pattern>' <repo> — Wendet die Aufbewahrungsregel nur auf Archive an, die auf ein Glob-Muster passen.

borg prune --keep-daily 7 --glob-archives 'web-*' /mnt/backup/repo

borg delete <repo>::<archive> — Löscht ein bestimmtes Archiv aus dem Repository. Der Speicher wird erst nach borg compact freigegeben.

borg delete /mnt/backup/repo::home-2023-01-01

borg compact <repo> — Gibt nach dem Löschen von Archiven ungenutzten Speicher frei. Nach prune oder delete ausführen.

borg compact /mnt/backup/repo

Repository-Informationen

borg info <repo> — Zeigt Statistiken zum Repository an (Gesamtgröße, eindeutige Chunks, Verschlüsselung).

borg info /mnt/backup/repo

borg info <repo>::<archive> — Zeigt detaillierte Statistiken zu einem bestimmten Archiv an.

borg info /mnt/backup/repo::home-2024-01-15

borg check <repo> — Prüft das Repository auf Konsistenz und Integrität.

borg check /mnt/backup/repo

borg check --verify-data <repo> — Verifiziert alle Daten, indem jeder Chunk entschlüsselt und dekomprimiert wird (langsam, aber gründlich).

borg check --verify-data /mnt/backup/repo

borg check --archives-only <repo> — Prüft nur die Archiv-Metadaten, nicht die Daten-Chunks.

borg check --archives-only /mnt/backup/repo

Schlüsselverwaltung

borg key export <repo> <keyfile> — Exportiert den Verschlüsselungsschlüssel des Repositorys in eine Datei. Bewahre sie sicher und ausgelagert auf.

borg key export /mnt/backup/repo ~/borg-key-backup.txt

borg key import <repo> <keyfile> — Importiert einen zuvor exportierten Schlüssel zurück ins Repository.

borg key import /mnt/backup/repo ~/borg-key-backup.txt

borg key change-passphrase <repo> — Ändert die Passphrase, die den Verschlüsselungsschlüssel schützt.

borg key change-passphrase /mnt/backup/repo

Umgebungsvariablen

export BORG_REPO=<path> — Setzt den Standard-Repository-Pfad, sodass er in Befehlen entfallen kann.

export BORG_REPO=/mnt/backup/repo

export BORG_PASSPHRASE=<passphrase> — Setzt die Repository-Passphrase für unbeaufsichtigte/automatisierte Backups. Vorsicht: im Klartext sichtbar — besser BORG_PASSCOMMAND verwenden.

export BORG_PASSPHRASE=mysecretpassword

export BORG_PASSCOMMAND=<command> — Führt einen Befehl aus und nutzt dessen stdout als Passphrase.

export BORG_PASSCOMMAND='pass show borg/main'

export BORG_RSH='ssh -i <keyfile>' — Nutzt einen bestimmten SSH-Schlüssel für die Verbindung zu einem entfernten Borg-Repository.

export BORG_RSH='ssh -i ~/.ssh/borg_backup_key'

export BORG_REMOTE_PATH=<path> — Pfad zur borg-Programmdatei auf dem entfernten Server.

export BORG_REMOTE_PATH=/usr/local/bin/borg

Praxis-Rezepte

borg create --stats --compression zstd,3 --exclude '/home/*/.cache' <repo>::'{hostname}-{now:%Y-%m-%dT%H:%M}' /home — Produktiv-Backup: zeitgestempeltes Archiv mit Zstandard-Kompression und Cache-Ausschluss.

borg create --stats --compression zstd,3 --exclude '/home/*/.cache' /mnt/backup/repo::'{hostname}-{now:%Y-%m-%dT%H:%M}' /home

borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --stats && borg compact — Wendet die Aufbewahrungsregel an und gibt den Speicher frei. In einem Cron-Job an das Backup anhängen.

borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --stats /mnt/backup/repo && borg compact /mnt/backup/repo

borg list --short <repo> | tail -1 — Ermittelt den Namen des neuesten Archivs.

borg list --short /mnt/backup/repo | tail -1

borg create <repo>::<archive> <path> 2>&1 | grep -E '(Duration|Original|Compressed|Deduplicated)' — Erstellt ein Backup und filtert aus der Ausgabe nur die Zusammenfassung zu Größe und Dauer heraus.

borg create /mnt/backup/repo::daily-$(date +%F) /home 2>&1 | grep -E '(Duration|Original|Compressed|Deduplicated)'

Fazit

BorgBackup verbindet Deduplizierung, Kompression und Verschlüsselung zu einer effizienten, alltagstauglichen Backup-Lösung — gerade für große, sich häufig ändernde Datenbestände. Behandle Passphrase und exportierten Schlüssel mit derselben Sorgfalt wie das Repository selbst: Ohne sie sind verschlüsselte Archive unwiederbringlich verloren. Und prüfe destruktive Schritte wie prune oder delete stets vorab mit --dry-run, bevor compact den Speicher endgültig freigibt.

Verwandte Kommandos

  • duplicity – verschlüsselte, inkrementelle Backups im GnuPG-Format
  • rclone – synchronisiert Dateien mit Cloud-Speicher-Diensten
  • rdiff-backup – inkrementelle Backups mit umkehrbaren Diffs