ArkVault: Eine BorgBackup-GUI, bei der das Laufwerk deinen Linux-Rechner neu aufbaut

Veröffentlicht
11 Juli 2026
Von
Jacob Lloyd — mit KI-Unterstützung geschrieben, im Nachhinein
Lesezeit
8 Min. Lesezeit

Kurz gesagt: Ein kostenloses Backup-Programm für Linux-Rechner mit einem einfachen Klick-Fenster. Es speichert eine verschlüsselte Kopie deiner wichtigen Dateien auf einer externen Festplatte, und das Laufwerk selbst trägt eine Schritt-für-Schritt-Wiederherstellungsanleitung — stirbt dein Rechner, kann eine brandneue Maschine direkt vom Laufwerk aus wiederaufgebaut werden.

Steck ein Backup-Laufwerk in eine frische Linux-Installation — nichts konfiguriert, nichts drauf — und bekomme mehr zurück als nur deine Dateien. ArkVault schreibt neben dem verschlüsselten Backup ein geführtes Restore-Kit aufs Laufwerk, sodass das Laufwerk selbst weiß, wie die Maschine wiederaufgebaut wird: Dotfiles, SSH-Schlüssel, Launcher-Symlinks, systemd-Units, das komplette Programm.

TL;DR

  • Was es ist: eine GTK4-GUI (plus ein vollwertiges Headless-CLI) rund um BorgBackup, die bei jedem Lauf ein Install-Map-Manifest und eine Kopie von sich selbst auf jedes Backup-Laufwerk schreibt.
  • Was es kostet: nichts, MIT-lizenziert. Quell-Zip unten. Kein Account, keine Cloud.
  • Was du brauchst: Linux mit GTK4/libadwaita (bei Fedora/GNOME vorinstalliert, unter Debian/Ubuntu eine apt-Zeile), ein übriges Laufwerk und einen Abend, um den Katalog dessen zu bearbeiten, was es wert ist, gesichert zu werden.
  • Was am Ende steht: ein verschlüsseltes, dedupliziertes Backup plus ein Restore-Assistent, der direkt vom Laufwerk auf einer Maschine läuft, auf der nichts installiert ist. Die Restore-Übung habe ich wirklich durchgespielt, nicht nur den Idealfall.

Was am Ende steht

Erst das Tool, die Theorie kommt später. Diese Bilder stammen aus einem Sandbox-Lauf mit Testdaten, nicht aus der Dateiliste meiner echten Maschine.

ArkVault-Hauptfenster: Auswahl des Backup-Ziels, vier Profil-Schalter mit Live-Größenschätzung, ein Schloss-Badge bei den Profilen Settings und Dotfiles, und ein Button 'Back up everything important'

Vier Profile, Live-Größenschätzungen, ein Schloss-Badge überall dort, wo ein Profil geheim markierte Elemente wie SSH-Schlüssel berührt. Ein Knopf sichert alles, was du aktiviert hast.

ArkVault-Restore-Assistent zeigt Install-Map-Elemente nach Kategorie gruppiert — Projects und Settings — mit Checkboxen, einem Schloss-Symbol beim ssh-Eintrag und einem 'Set options'-Button

Das ist der Kern des ganzen Tools: Der Restore-Assistent liest die Install-Map vom Laufwerk und zeigt genau, was gesichert wurde — gruppiert, ankreuzbar, mit Schloss-Symbol bei allem Sensiblen. Kein rätselhafter Datenklumpen.

ArkVault-Fenster für Drag-and-Drop-Backup mit einer benannten Sammlung, einer Ablagezone für Dateien und Ordner, und den Buttons 'Add files' bzw. 'Add folder'

Es gibt außerdem einen Drag-and-Drop-Modus für einmalige Sammlungen, die nicht in den Hauptkatalog gehören.

KennzahlWert
Code~7.100 Zeilen Python auf 48 Dateien
Pip-Abhängigkeitennull — GTK kommt vom System, requirements.txt ist absichtlich leer
Testsuite82/82 Checks bestehen, kein pytest nötig
Zip-Größe108 KB, 53 Einträge (Borgs Binary ist nicht dabei — der Installer lädt sie)
Ergebnis der Restore-Übung8/8 Elemente landeten korrekt in einem zweiten, frischen $HOME
LizenzMIT, kostenlos

Was Borg tatsächlich leistet

ArkVault ist keine eigene Backup-Engine. Es ist ein Frontend rund um BorgBackup, das die harten Teile übernimmt:

  • Verschlüsselung: repokey-blake2. Der Schlüssel liegt im Repository selbst, geschützt durch deine Passphrase. Wer das Laufwerk stiehlt, bekommt nichts.
  • Deduplizierung: inhaltsdefiniertes Chunking, sodass zehn Snapshots eines sich langsam ändernden Home-Verzeichnisses nicht das Zehnfache an Platz kosten.
  • Kompression: zstd auf Stufe 6. Ordentliche Verdichtung, ohne das Backup auszubremsen.
  • Aufbewahrung: borg prune behält standardmäßig 7 tägliche, 4 wöchentliche, 6 monatliche Snapshots (einstellbar), sodass alte Stände altern, statt das Laufwerk zu füllen.

ArkVault ergänzt den Teil, um den sich Borg nicht kümmert: welche Dateien wichtig sind, welche Berechtigungen sie brauchen, und was passieren muss, nachdem die Dateien gelandet sind, damit die Maschine wirklich wieder läuft.

Warum eine unveränderliche Distro ein anderes Design erzwang

Gebaut habe ich das für eine Bazzite-Kiste — unveränderliches, atomares Fedora, Root schreibgeschützt. Diese Einschränkung hat das ganze Tool geformt:

  • Alles installiert unter ~/.local. Nichts fasst / an.
  • Die venv wird mit --system-site-packages gebaut, damit GTK4/PyGObject vom Host kommt, statt Bindings gegen eine schreibgeschützte Basis zu kompilieren.
  • pip install borgbackup funktioniert hier schlicht nicht — keine liblz4-Header, keine passenden Wheels — was der eigentliche Grund ist, warum der Installer die offizielle, von upstream bereitgestellte eigenständige Borg-Binary herunterlädt, ein PyInstaller-Build mit eingebautem FUSE.
  • Nirgends sudo. Die einzige Operation, die Root braucht — ein Laufwerk formatieren — läuft über eine polkit/pkexec-Abfrage.

Die eigentliche Idee: Das Laufwerk baut die Maschine wieder auf

Gewöhnliche Backup-Tools geben dir Dateien zurück. Du musst dir trotzdem merken, wo alles hingehört und welche systemd-Units du wieder aktivieren musst. ArkVault schreibt dieses Wissen bei jedem Backup aufs Laufwerk:

  • arkvault-repo/ — das verschlüsselte Borg-Repository.
  • ArkVault-App/ — eine mitgelieferte Kopie von ArkVault, Quellcode und Installer, atomar kopiert (erst ins tmp-Verzeichnis, dann umbenannt), sodass eine unterbrochene Kopie nie eine halbe App auf dem Laufwerk hinterlässt.
  • arkvault-install-map.json plus RESTORE-README.md — ein Manifest von allem Gesicherten und eine Klartext-Anleitung, die man ohne jedes Werkzeug lesen kann.

Die Install-Map speichert, dass eine Datei geheim ist, nie ihren Inhalt. Das Laufwerk weiß, was es trägt, ohne davon auch nur ein bisschen preiszugeben.

Was ein Backup-Lauf tatsächlich macht

Ein Backup-Lauf ist eine gerade Linie: herausfinden, was der Katalog trifft (fehlende Pfade werden übersprungen), optional schreibintensive Dienste ruhigstellen, damit lebende Datenbanken konsistent landen, borg create, borg prune, dann das Restore-Kit aufs Laufwerk schreiben.

Die paranoiden Teile

Das ist der Code, der Zeit gekostet hat:

  • Der Format-Guard verweigert die Systemdisk. Die falsche Platte zu formatieren ist die Klassiker-Katastrophe bei Backup-Tools. ArkVault löst LUKS/LVM-Device-Mapper-Ketten bis zu den physischen Platten auf, indem es /sys/class/block/*/slaves durchläuft — der Mapper-Name einer verschlüsselten Root sieht der zugrundeliegenden Platte in nichts ähnlich, naive Namensprüfungen übersehen das also. Kann es die Systemdisks überhaupt nicht enumerieren, schlägt es fehlgeschlossen und formatiert gar nichts. Zur Bestätigung musst du trotzdem den exakten Gerätenamen eintippen.
  • Pfad-Eingrenzung bei der Wiederherstellung. Eine fehlerhafte oder manipulierte Install-Map kann nicht außerhalb des Ziel-Home schreiben: Symlink-Vorfahren werden aufgelöst, der finale Symlink wird absichtlich nicht verfolgt, und Redeploy-Ziele, die versuchen, aus dem Home auszubrechen, werden abgelehnt.
  • Secret-Hygiene in Logs. Die Passphrase und alles, was als Secret registriert ist, wird per exaktem Treffer plus Regex-Backstops für Muster wie apiKey: und Bearer herausgeputzt.
  • Das Recovery-Blatt. Beim ersten Backup erscheint ein Passphrase-Blatt mit nicht auswählbarem Text — kein versehentliches Kopieren in die Zwischenablage —, und der Schließen-Button bleibt deaktiviert, bis du „Ich habe meine Passphrase gesichert" ankreuzt. Das Blatt wird nie aufs Laufwerk geschrieben. Verlierst du die Passphrase, verlierst du das Backup. Genau das bedeutet echte Verschlüsselung.
  • FAT32 wird als Repo-Ziel abgelehnt — die 4-GB-Dateigrenze bricht Borg komplett. exFAT ist mit Warnung erlaubt, da Borg Unix-Metadaten ohnehin intern speichert.
  • Leere Archive werden abgelehnt. Sind alle Quellpfade verschwunden (Laufwerk nicht eingehängt, Tippfehler im Katalog), verweigert ArkVault, ein leeres Archiv zu schreiben, das wie ein Erfolg aussehen würde.
  • Verifizieren liegt bei dir, wann immer du willst. borg check läuft aus der UI oder dem CLI als echte Integritätsprüfung, und „Browse snapshot" hängt ein Archiv schreibgeschützt über FUSE ein, damit du darin stöbern kannst, bevor du ihm vertraust.

Einrichtung

Du brauchst die GTK4/libadwaita-PyGObject-Bindings, udisks2 und polkit. Bei Fedora/GNOME vorinstalliert; unter Debian/Ubuntu eine Zeile:

sudo apt install python3-gi gir1.2-gtk-4.0 gir1.2-adw-1

Dann der Installer, der idempotent ist — sicher erneut auszuführen:

bash install.sh

Das kopiert die App nach ~/.local/share/arkvault, baut die --system-site-packages-venv, lädt die offizielle eigenständige Borg-Binary herunter und legt ~/.local/bin/arkvault plus einen Desktop-Eintrag an. Dann:

arkvault probe

Alles sollte OK melden. Nacktes arkvault startet die GUI; derselbe Kern treibt auch ein Headless-CLI:

arkvault probe|backup|restore|list|check

Der eine Schritt, der wirklich zählt: den Katalog bearbeiten. Der mitgelieferte ist ein generisches Beispiel — core/discovery.py, profiles.py, core/quiesce.py, core/containers.py und core/installmap.py haben alle mit „EDIT ME" markierte Blöcke. Eine durchdachte Liste dessen, was eine frische Installation nicht zurückbringen kann, ist der ganze Sinn der Sache, und die kann niemand für dich schreiben.

Führe das erste Backup aus, speichere das Recovery-Blatt irgendwo, das nicht das Backup-Laufwerk ist, und klick auf „Copy app to drive." Für unbeaufsichtigte Läufe gibt es eine systemd-User-Timer-Vorlage in README-SETUP; sie liest die Passphrase aus dem Keyring oder aus ARKVAULT_PASSPHRASE.

Der Beweis, dass es wirklich funktioniert

Ein Backup, das du nie test-wiederhergestellt hast, ist eine Hoffnung, kein Backup. Also, gegen ein gefälschtes $HOME:

  1. Quellcode entpackt, install.sh ausgeführt — echter Borg-Download, 27,9 MB.
  2. arkvault probe: alles OK.
  3. arkvault backup von 3 Beispielprofilen in ein Scratch-Laufwerkverzeichnis: 8 Elemente rein, Repository mit repokey-blake2 initialisiert, Install-Map + RESTORE-README + Self-Bundle geschrieben.
  4. arkvault list, dann arkvault check: bestanden.
  5. arkvault restore in ein zweites, frisches Home: alle 8 Elemente landeten an den richtigen Pfaden, für den Rest wurde eine manuelle Checkliste ausgegeben.

Die abhängigkeitsfreie Testsuite läuft auf dem exakten Baum im Zip mit 82/82.

Stolperfallen

  • Das Zip behebt einen Bug, den das ursprüngliche Installationsskript hatte. Borgs GitHub-Releases liefern eine GPG-.asc-Signatur, aber kein .sha256-Sidecar, sodass der Checksummen-Abruf des Installers mit 404 fehlschlug und set -e die Installation killte, bevor das eigene Fallback des Skripts laufen konnte. Hier behoben, plus eine optionale ARKVAULT_BORG_SHA256-Umgebungsvariable, um einen bekannt-guten Hash festzunageln. Meine eigene Kiste hat das nie getroffen — meine Borg-Binary existierte schon, also lief der Download-Zweig gar nicht erst.
  • FAT32 ruiniert dir still und leise die Woche. ArkVault erkennt und verweigert es, aber jede Menge USB-Laufwerke kommen genau so aus dem Karton.
  • Ein abgestürzter Lauf hinterlässt eine veraltete Repository-Lock. borg break-lock räumt sie weg (es gibt einen Button in der GUI dafür), und BORG_LOCK_WAIT=120 lässt überlappende Läufe warten, statt sofort zu scheitern.
  • Lebendes SQLite im WAL-Modus braucht die db-, wal- und shm-Dateien zusammen erfasst, oder der Dienst muss vorher gestoppt werden. Genau dafür gibt es den Quiesce-Schritt — sein Neustart steckt in einem finally-Block, sodass Dienste auch dann zurückkommen, wenn das Backup mittendrin stirbt.
  • Die Wiederherstellung unter einem anderen Benutzernamen funktioniert, weil jedes Ziel relativ zum Home gespeichert wird. Besitzrechte, die sich nicht auf den neuen Nutzer abbilden lassen, landen auf der manuellen Checkliste, statt still übersprungen zu werden.
  • Kein GNOME-Keyring (Headless-Kiste, CI)? Dann fällt es auf eine Passphrase im Speicher plus Eingabeaufforderung zurück, statt zu scheitern.
  • Der langweilige Bug: python -m arkvault backup ... tat früher still gar nichts — der Argument-Parser der GUI fraß den Subcommand und beendete sich mit Code 0. __main__.py dispatcht CLI-Subcommands jetzt explizit. Beängstigende Bugs melden sich lautstark; die gefährlichen beenden sich sauber und tun nichts.
  • Der mitgelieferte Katalog ist absichtlich ein leeres Beispiel. Der, den ich tatsächlich benutze, listet exakt auf, wo meine wichtigen Sachen liegen — und das ist genau das, was nicht in ein öffentliches Zip gehört. Du bekommst stattdessen ein sauberes Projects/Settings-Beispiel mit einem durchgespielten Redeploy-Beispiel — dieselbe Struktur, keiner meiner Pfade.

Downloads

Kostenlos für die private Nutzung. Wenn es dir einen Nachmittag erspart, ist der Kaffee-Button gleich in der Nähe.


← Mehr Tools & Downloads