ArkVault : une interface BorgBackup où le disque reconstruit lui-même votre machine Linux

Publié
11 juillet 2026
Par
Jacob Lloyd — rédigé avec l'aide de l'IA, une fois le projet terminé
Temps de lecture
10 min de lecture

En clair : Un logiciel de sauvegarde gratuit pour ordinateurs Linux, avec une fenêtre simple à utiliser à la souris. Il enregistre une copie chiffrée de vos fichiers importants sur un disque externe, et ce disque contient lui-même un guide de récupération étape par étape — donc si votre ordinateur tombe en panne, une machine toute neuve peut être reconstruite directement à partir du disque.

Branchez un disque de sauvegarde sur une installation Linux toute fraîche — rien de configuré, rien dessus — et vous récupérez bien plus que vos fichiers. ArkVault écrit un kit de restauration guidé sur le disque, juste à côté de la sauvegarde chiffrée : le disque sait donc lui-même comment reconstruire la machine — dotfiles, clés SSH, liens symboliques de lanceurs, unités systemd, tout le paquet.

TL;DR

  • Ce que c'est : une interface graphique GTK4 (plus un CLI headless complet) autour de BorgBackup, qui écrit un manifeste install-map et une copie d'elle-même sur chaque disque de sauvegarde.
  • Ce que ça coûte : gratuit, sous licence MIT. Le zip du code source est plus bas. Pas de compte, pas de cloud.
  • Ce qu'il vous faut : un Linux avec GTK4/libadwaita (natif sous Fedora/GNOME, une ligne d'apt sous Debian/Ubuntu), un disque disponible, et une soirée pour éditer le catalogue de ce qui vaut la peine d'être sauvegardé.
  • Ce que vous obtenez : une sauvegarde chiffrée et dédupliquée, plus un assistant de restauration qui tourne directement depuis le disque sur une machine sans rien d'installé. J'ai fait l'exercice de restauration pour de vrai, pas seulement dans le cas idéal.

Ce que vous obtenez

L'outil d'abord, la théorie ensuite. Les captures suivantes viennent d'un test en bac à sable avec des données factices, pas de la liste de fichiers de ma vraie machine.

Fenêtre principale d'ArkVault : sélecteur de destination de sauvegarde, quatre interrupteurs de profils avec estimation de taille en direct, un badge cadenas sur les profils Settings et Dotfiles, et un bouton « Back up everything important »

Quatre profils, des estimations de taille en direct, un badge cadenas partout où un profil touche à des éléments marqués secrets comme les clés SSH. Un seul bouton sauvegarde tout ce que vous avez activé.

Assistant de restauration d'ArkVault montrant les éléments de l'install-map regroupés par catégorie — Projects et Settings — avec des cases à cocher, une icône cadenas sur l'élément ssh, et un bouton « Set options »

C'est tout l'intérêt de l'outil : l'assistant de restauration lit l'install-map directement sur le disque et montre exactement ce qui a été capturé, regroupé et cochable, avec une icône cadenas sur tout ce qui est sensible. Pas de blob mystère.

Fenêtre de sauvegarde par glisser-déposer d'ArkVault, avec une collection nommée, une zone de dépôt pour fichiers et dossiers, et des boutons « Add files » ou « Add folder »

Il existe aussi un mode glisser-déposer pour les collections ponctuelles qui n'ont pas leur place dans le catalogue principal.

IndicateurValeur
Code~7 100 lignes de Python réparties sur 48 fichiers
Dépendances pipZéro — GTK vient du système, requirements.txt est volontairement vide
Suite de tests82/82 vérifications passent, pytest inutile
Taille du zip108 Ko, 53 fichiers (le binaire de Borg n'est pas inclus — l'installateur le télécharge)
Résultat de l'essai de restauration8 éléments sur 8 correctement replacés dans un second $HOME tout neuf
LicenceMIT, gratuite

Ce que Borg apporte concrètement

ArkVault n'est pas son propre moteur de sauvegarde. C'est une interface autour de BorgBackup, qui s'occupe des parties difficiles :

  • Chiffrement : repokey-blake2. La clé vit à l'intérieur du dépôt, protégée par votre phrase secrète. Qui vole le disque ne récupère rien.
  • Déduplication : découpage défini par le contenu, donc dix instantanés d'un dossier personnel qui change peu ne coûtent pas dix fois la place.
  • Compression : zstd niveau 6. Un bon compromis sans ralentir la sauvegarde à l'excès.
  • Rétention : borg prune conserve par défaut 7 sauvegardes quotidiennes, 4 hebdomadaires et 6 mensuelles (réglable), pour que les anciens instantanés s'effacent avec le temps au lieu de dévorer le disque.

ArkVault ajoute la partie dont Borg ne se soucie pas : quels fichiers comptent, quelles permissions ils demandent, et ce qui doit se passer une fois les fichiers en place pour que la machine refonctionne vraiment.

Pourquoi une distribution immuable a imposé une conception différente

J'ai construit ça pour une machine sous Bazzite — un Fedora immuable et atomique, racine en lecture seule. Cette contrainte a façonné tout l'outil :

  • Tout s'installe sous ~/.local. Rien ne touche à /.
  • Le venv est construit avec --system-site-packages, pour que GTK4/PyGObject vienne de l'hôte plutôt que de compiler des bindings contre une base en lecture seule.
  • pip install borgbackup ne fonctionne tout simplement pas ici — pas d'en-têtes liblz4, pas de wheels compatibles — ce qui est la vraie raison pour laquelle l'installateur télécharge le binaire Borg autonome officiel, un build PyInstaller avec FUSE inclus.
  • Aucun sudo nulle part. La seule opération qui a besoin des droits root — formater un disque — passe par une confirmation polkit/pkexec.

L'idée de fond : c'est le disque qui reconstruit la machine

Les outils de sauvegarde classiques vous rendent vos fichiers. À vous de vous souvenir d'où tout allait et quelles unités systemd réactiver. ArkVault écrit cette connaissance sur le disque, à chaque sauvegarde :

  • arkvault-repo/ — le dépôt Borg chiffré.
  • ArkVault-App/ — une copie autonome d'ArkVault, code source et installateur, copiée de façon atomique (répertoire temporaire puis renommage), pour qu'une copie interrompue ne laisse jamais une application à moitié copiée sur le disque.
  • arkvault-install-map.json et RESTORE-README.md — un manifeste de tout ce qui a été capturé, et un guide en texte brut lisible sans aucun outil.

L'install-map note qu'un fichier est secret, jamais son contenu. Le disque sait ce qu'il transporte sans jamais en révéler quoi que ce soit.

Ce qui se passe vraiment pendant une sauvegarde

Une sauvegarde suit une ligne droite : découvrir ce que le catalogue capture (les chemins manquants sont ignorés), mettre en pause si besoin les services à forte écriture pour que les bases de données actives soient cohérentes, borg create, borg prune, puis écrire le kit de restauration sur le disque.

Les précautions un peu paranoïaques

Voici le code qui a pris le plus de temps :

  • Le garde-fou de formatage refuse le disque système. Formater le mauvais disque est le désastre classique des outils de sauvegarde. ArkVault résout les chaînes device-mapper LUKS/LVM jusqu'aux disques physiques en parcourant /sys/class/block/*/slaves — le nom mapper d'une racine chiffrée ne ressemble en rien au disque sous-jacent, donc une vérification naïve du nom passe à côté. S'il ne peut pas du tout énumérer les disques système, il échoue de façon sécurisée et refuse de formater quoi que ce soit. Il vous reste quand même à taper le nom exact du périphérique pour confirmer.
  • Confinement des chemins à la restauration. Un install-map malformé ou trafiqué ne peut pas écrire en dehors du home ciblé : les ancêtres symboliques sont résolus, le lien symbolique final n'est volontairement pas suivi, et toute cible de redéploiement qui tente d'échapper au home est refusée.
  • Hygiène des secrets dans les journaux. La phrase secrète et tout ce qui est enregistré comme secret sont nettoyés par correspondance littérale, avec des filets de sécurité par expression régulière pour des motifs comme apiKey: et Bearer.
  • La fiche de récupération. La première sauvegarde affiche une fiche avec la phrase secrète en texte non sélectionnable — pas de copie accidentelle dans le presse-papiers —, et le bouton de fermeture reste désactivé tant que vous n'avez pas coché « J'ai enregistré ma phrase secrète ». Cette fiche n'est jamais écrite sur le disque. Perdez la phrase secrète, perdez la sauvegarde. C'est ce que signifie un vrai chiffrement.
  • FAT32 est refusé comme cible de dépôt — sa limite de 4 Go par fichier casse Borg net. exFAT est autorisé avec un avertissement, puisque Borg stocke de toute façon les métadonnées Unix en interne.
  • Les archives vides sont refusées. Si tous les chemins source ont disparu (disque démonté, faute de frappe dans le catalogue), ArkVault refuse d'écrire une archive vide qui aurait l'air d'une réussite.
  • La vérification vous appartient, quand vous voulez. borg check s'exécute depuis l'interface ou le CLI comme un vrai contrôle d'intégrité, et « Browse snapshot » monte une archive en lecture seule via FUSE pour que vous puissiez la parcourir avant de lui faire confiance.

Installation

Il vous faut les bindings PyGObject pour GTK4/libadwaita, udisks2, et polkit. Natif sur la famille Fedora/GNOME ; une seule ligne sous Debian/Ubuntu :

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

Puis l'installateur, qui est idempotent — sûr à relancer :

bash install.sh

Cela copie l'application dans ~/.local/share/arkvault, construit le venv --system-site-packages, télécharge le binaire Borg autonome officiel, et dépose ~/.local/bin/arkvault ainsi qu'une entrée de bureau. Ensuite :

arkvault probe

Tout devrait afficher OK. arkvault tout seul lance l'interface graphique ; le même cœur fait aussi tourner un CLI headless :

arkvault probe|backup|restore|list|check

La seule étape qui compte vraiment : modifier le catalogue. Celui fourni n'est qu'un exemple générique — core/discovery.py, profiles.py, core/quiesce.py, core/containers.py et core/installmap.py ont tous des blocs marqués « EDIT ME ». Une liste soigneusement choisie de ce qu'une installation neuve ne peut pas vous rendre, voilà tout l'intérêt de la démarche — et personne ne peut écrire la vôtre à votre place.

Lancez la première sauvegarde, enregistrez la fiche de récupération ailleurs que sur le disque de sauvegarde, et cliquez sur « Copy app to drive ». Pour les exécutions automatiques, il y a un modèle de timer utilisateur systemd dans README-SETUP ; il lit la phrase secrète depuis le trousseau ou via ARKVAULT_PASSPHRASE.

La preuve que ça marche vraiment

Une sauvegarde que vous n'avez jamais restaurée pour la tester n'est qu'un espoir, pas une sauvegarde. Alors, sur un faux $HOME :

  1. Décompressé le code source, lancé install.sh — vrai téléchargement de Borg, 27,9 Mo.
  2. arkvault probe : tout OK.
  3. arkvault backup de 3 profils d'exemple vers un répertoire de disque temporaire : 8 éléments capturés, dépôt initialisé avec repokey-blake2, install-map + RESTORE-README + copie autonome écrits.
  4. arkvault list, puis arkvault check : réussi.
  5. arkvault restore vers un second home tout neuf : les 8 éléments sont arrivés aux bons chemins, checklist manuelle affichée pour le reste.

La suite de tests sans dépendance obtient 82 sur 82 sur l'arborescence exacte du zip.

Pièges

  • Le zip corrige un bug du script d'installation d'origine. Les releases GitHub de Borg fournissent une signature GPG .asc mais pas de fichier .sha256 associé, donc la récupération du checksum par l'installateur renvoyait une 404, et set -e tuait l'installation avant que le repli du script lui-même ait pu s'exécuter. C'est corrigé ici, avec en plus une variable d'environnement optionnelle ARKVAULT_BORG_SHA256 pour fixer un hash connu comme bon. Ma propre machine n'a jamais rencontré ce cas — mon binaire Borg existait déjà, donc la branche de téléchargement ne s'est tout simplement jamais exécutée.
  • FAT32 peut discrètement vous gâcher la semaine. ArkVault le détecte et le refuse, mais beaucoup de clés USB sont formatées ainsi dès la sortie de la boîte.
  • Une exécution qui plante laisse un verrou de dépôt périmé. borg break-lock le lève (il y a un bouton dans l'interface), et BORG_LOCK_WAIT=120 fait attendre les exécutions qui se chevauchent au lieu d'échouer immédiatement.
  • Une base SQLite active en mode WAL a besoin que les fichiers db, wal et shm soient capturés ensemble, ou que le service soit arrêté au préalable. C'est pour ça que l'étape de mise en pause existe — son redémarrage se trouve dans un bloc finally, donc les services reviennent même si la sauvegarde meurt en cours de route.
  • Restaurer vers un nom d'utilisateur différent fonctionne, parce que chaque destination est enregistrée relativement au home. Les propriétaires qui ne peuvent pas être mappés vers le nouvel utilisateur atterrissent sur la checklist manuelle plutôt que d'être silencieusement ignorés.
  • Pas de trousseau GNOME (machine headless, CI) ? Ça se replie sur une phrase secrète en mémoire plus une invite, au lieu d'échouer.
  • Le bug ennuyeux : python -m arkvault backup ... ne faisait auparavant rien, silencieusement — l'analyseur d'arguments de l'interface graphique avalait la sous-commande et sortait avec le code 0. __main__.py distribue désormais explicitement les sous-commandes CLI. Les bugs qui font peur s'annoncent ; les vrais dangereux sortent proprement sans rien faire.
  • Le catalogue fourni est un exemple vide, exprès. Celui que j'utilise réellement liste exactement où se trouvent mes affaires importantes, ce qui est précisément ce qui ne devrait pas se retrouver dans un zip public. Vous obtenez à la place un exemple Projects/Settings propre, avec un exemple de redéploiement fonctionnel — même structure, aucun de mes chemins.

Téléchargements

Gratuit pour un usage personnel. Si ça vous fait gagner un après-midi, le bouton café n'est pas loin.


← Plus de Outils et Téléchargements