ArkVault: una GUI de BorgBackup en la que el Disco Reconstruye tu Equipo Linux
- Categoría
- Herramientas y Descargas
- Publicado
- 11 julio 2026
- Por
- Jacob Lloyd — escrito con ayuda de IA, después del proyecto
- Tiempo de lectura
- 10 min de lectura
En palabras simples: Un programa de copias de seguridad gratuito para ordenadores Linux con una ventana sencilla de apuntar y hacer clic. Guarda una copia cifrada de tus archivos importantes en un disco externo, y el propio disco lleva una guía de recuperación paso a paso — así que si tu ordenador muere, una máquina completamente nueva puede reconstruirse directamente desde el disco.
Conecta un disco de backup a una instalación nueva de Linux — nada configurado, nada en él — y recuperas más que tus archivos. ArkVault escribe un kit de restauración guiado en el disco, junto al backup cifrado, así que el propio disco sabe cómo reconstruir la máquina: dotfiles, claves SSH, symlinks de lanzadores, unidades de systemd, todo.
TL;DR
- Qué es: una GUI en GTK4 (más una CLI headless completa) alrededor de BorgBackup que escribe un manifiesto install-map y una copia de sí misma en cada disco de backup.
- Qué cuesta: gratis, licencia MIT. Zip del código fuente más abajo. Sin cuenta, sin nube.
- Qué necesitas: Linux con GTK4/libadwaita (de serie en Fedora/GNOME, una línea de apt en Debian/Ubuntu), un disco de repuesto, y una tarde para editar el catálogo de qué merece la pena capturar.
- Qué obtienes: un backup cifrado y deduplicado más un asistente de restauración que funciona desde el disco en una máquina sin nada instalado. Hice el simulacro de restauración de verdad, no solo el camino feliz.
Lo que obtienes
Primero la herramienta, la teoría después. Esto viene de una ejecución en sandbox con datos ficticios, no la lista de archivos de mi máquina real.

Cuatro perfiles, estimaciones de tamaño en vivo, una insignia de candado allí donde un perfil toca elementos marcados como secretos, como las claves SSH. Un botón respalda todo lo que hayas activado.

Este es el punto central de toda la herramienta: el asistente de restauración lee el install-map del disco y muestra exactamente qué se capturó, agrupado y marcable, con icono de candado en cualquier cosa sensible. Nada de blobs misteriosos.

También hay un modo de arrastrar y soltar para colecciones puntuales que no pintan nada en el catálogo principal.
| Métrica | Valor |
|---|---|
| Código | ~7.100 líneas de Python en 48 archivos |
| Dependencias pip | Cero — GTK viene del sistema, requirements.txt está vacío a propósito |
| Suite de pruebas | 82/82 comprobaciones superadas, sin necesitar pytest |
| Tamaño del zip | 108 KB, 53 entradas (el binario de Borg no va incluido — el instalador lo descarga) |
| Resultado del simulacro de restauración | 8/8 elementos aterrizaron correctamente en un segundo $HOME limpio |
| Licencia | MIT, gratis |
Lo que Borg realmente te da
ArkVault no es su propio motor de backup. Es un frontend alrededor de BorgBackup, que se encarga de las partes difíciles:
- Cifrado: repokey-blake2. La clave vive dentro del repositorio, protegida por tu frase de paso. Quien robe el disco no consigue nada.
- Deduplicación: fragmentación definida por contenido, así que diez snapshots de un directorio home que cambia poco a poco no cuestan diez veces el espacio.
- Compresión: zstd a nivel 6. Buen ahorro sin ralentizar el backup hasta el arrastre.
- Retención:
borg pruneconserva 7 diarios, 4 semanales, 6 mensuales por defecto (configurable), así que los snapshots viejos caducan en lugar de comerse el disco.
ArkVault añade la parte que a Borg no le importa: qué archivos son importantes, qué permisos necesitan, y qué tiene que pasar después de que los archivos aterricen para que la máquina realmente vuelva a funcionar.
Por qué una distro inmutable obligó a un diseño distinto
Construí esto para una máquina Bazzite — Fedora inmutable y atómica, raíz de solo lectura. Esa restricción moldeó toda la herramienta:
- Todo se instala bajo
~/.local. Nada toca/. - El venv se construye con
--system-site-packagespara que GTK4/PyGObject venga del sistema anfitrión en lugar de compilar bindings contra una base de solo lectura. pip install borgbackupdirectamente no funciona aquí — no hay cabeceras de liblz4, ni wheels compatibles — que es la razón real por la que el instalador descarga el binario independiente oficial de Borg de upstream, un build de PyInstaller con FUSE incluido.sudono aparece en ningún sitio. La única operación que necesita root — formatear un disco — pasa por un aviso de polkit/pkexec.
La idea real: el disco reconstruye la máquina
Las herramientas de backup normales te devuelven archivos. Sigues teniendo que recordar dónde iba todo y qué unidades de systemd reactivar. ArkVault escribe ese conocimiento en el disco, en cada backup:
arkvault-repo/— el repositorio cifrado de Borg.ArkVault-App/— una copia autocontenida de ArkVault, código fuente e instalador, copiada de forma atómica (directorio temporal y luego renombrado), así que una copia interrumpida nunca deja una app a medias en el disco.arkvault-install-map.jsonmásRESTORE-README.md— un manifiesto de todo lo capturado y una guía en texto plano que puedes leer sin ninguna herramienta.
El install-map registra que un archivo es secreto, nunca su contenido. El disco sabe qué lleva encima sin filtrar nada de ello.
Lo que realmente hace una ejecución de backup
Una ejecución de backup es una línea recta: descubre qué coincide con el catálogo (las rutas ausentes se saltan), opcionalmente pausa los servicios que escriben mucho para que las bases de datos vivas aterricen consistentes, borg create, borg prune, y luego escribe el kit de restauración en el disco.
Las partes paranoicas
Este es el código que se llevó el tiempo:
- La protección de formateo se niega a tocar el disco del sistema. Formatear el disco equivocado es el desastre clásico de las herramientas de backup. ArkVault resuelve las cadenas de device-mapper de LUKS/LVM hasta los discos físicos recorriendo
/sys/class/block/*/slaves— el nombre del mapper de una raíz cifrada no se parece en nada al disco subyacente, así que las comprobaciones ingenuas por nombre se lo pierden. Si no puede enumerar los discos del sistema en absoluto, falla cerrado y se niega a formatear nada. Aun así, tienes que escribir el nombre exacto del dispositivo para confirmar. - Contención de rutas al restaurar. Un install-map malformado o manipulado no puede escribir fuera del home de destino: los enlaces simbólicos ancestros se resuelven, el enlace simbólico final deliberadamente no se sigue, y los destinos de redespliegue que intentan escapar del home se rechazan.
- Higiene de secretos en los logs. La frase de paso y cualquier cosa registrada como secreta se limpian por coincidencia literal más patrones de respaldo con expresiones regulares para cosas como
apiKey:yBearer. - La hoja de recuperación. El primer backup muestra una hoja con la frase de paso en texto no seleccionable — sin copiado accidental al portapapeles — y el botón de cerrar queda deshabilitado hasta que marcas "He guardado mi frase de paso". Esa hoja nunca se escribe en el disco. Pierdes la frase de paso, pierdes el backup. Eso es lo que significa el cifrado de verdad.
- FAT32 se rechaza como destino de repositorio — su límite de 4 GB por archivo rompe Borg directamente. exFAT se permite con un aviso, ya que Borg guarda los metadatos de Unix internamente de todos modos.
- Los archivos vacíos se rechazan. Si todas las rutas de origen desaparecieron (disco desmontado, error tipográfico en el catálogo), ArkVault se niega a escribir un archivo vacío que parecería un éxito.
- Verificar depende de ti, cuando quieras.
borg checkse ejecuta desde la UI o la CLI como una comprobación de integridad real, y "Browse snapshot" monta un archivo en modo solo lectura vía FUSE para que puedas curiosear antes de confiar en él.
Ponerlo en marcha
Necesitas los bindings de PyGObject para GTK4/libadwaita, udisks2 y polkit. De serie en la familia Fedora/GNOME; una línea en Debian/Ubuntu:
sudo apt install python3-gi gir1.2-gtk-4.0 gir1.2-adw-1
Luego el instalador, que es idempotente — seguro de volver a ejecutar:
bash install.sh
Eso copia la app a ~/.local/share/arkvault, construye el venv con --system-site-packages, descarga el binario independiente oficial de Borg, y deja ~/.local/bin/arkvault más una entrada de escritorio. Luego:
arkvault probe
Todo debería decir OK. arkvault a secas lanza la GUI; el mismo núcleo también gestiona una CLI headless:
arkvault probe|backup|restore|list|check
El único paso que realmente importa: editar el catálogo. El que viene incluido es un ejemplo genérico — core/discovery.py, profiles.py, core/quiesce.py, core/containers.py, y core/installmap.py tienen bloques marcados como "EDIT ME". Una lista curada de lo que una instalación nueva no te puede devolver es todo el sentido del asunto, y nadie puede escribir la tuya por ti.
Ejecuta el primer backup, guarda la hoja de recuperación en algún lugar que no sea el disco de backup, y haz clic en "Copy app to drive". Para ejecuciones desatendidas hay una plantilla de temporizador de usuario systemd en README-SETUP; lee la frase de paso del keyring o de ARKVAULT_PASSPHRASE.
Demostrando que realmente funciona
Un backup que nunca has restaurado de prueba es una esperanza, no un backup. Así que, contra un $HOME falso:
- Descomprimí el código fuente, ejecuté
install.sh— descarga real de Borg, 27,9 MB. arkvault probe: todo OK.arkvault backupde 3 perfiles de ejemplo hacia un directorio de disco de pruebas: 8 elementos entraron, repositorio inicializado con repokey-blake2, install-map + RESTORE-README + autopaquete escritos.arkvault list, luegoarkvault check: superado.arkvault restorehacia un segundo home limpio: los 8 elementos aterrizaron en las rutas correctas, checklist manual impresa para el resto.
La suite de pruebas sin dependencias marca 82/82 en el árbol exacto que trae el zip.
Cosas a tener en cuenta
- El zip arregla un bug que tenía el script de instalación original. Los releases de GitHub de Borg incluyen una firma GPG
.ascpero sin sidecar.sha256, así que la descarga del checksum del instalador daba 404 yset -emataba la instalación antes de que el propio fallback del script pudiera ejecutarse. Arreglado aquí, más una variable de entorno opcionalARKVAULT_BORG_SHA256para fijar un hash conocido como bueno. Mi propia máquina nunca lo sufrió — mi binario de Borg ya existía, así que la rama de descarga simplemente nunca se ejecutó. - FAT32 te arruinará la semana en silencio. ArkVault lo detecta y lo rechaza, pero un montón de discos USB vienen así de fábrica.
- Una ejecución que se cae deja un bloqueo de repositorio obsoleto.
borg break-locklo limpia (hay un botón para eso en la GUI), yBORG_LOCK_WAIT=120hace que las ejecuciones solapadas esperen en lugar de fallar al instante. - SQLite en vivo en modo WAL necesita capturar juntos los archivos db, wal y shm, o detener antes el servicio. Por eso existe el paso de pausa (quiesce) — su reinicio está en un bloque
finally, así que los servicios vuelven aunque el backup muera a mitad de la ejecución. - Restaurar con un nombre de usuario distinto funciona, porque cada destino se registra relativo al home. La propiedad que no se puede mapear al nuevo usuario acaba en la checklist manual en lugar de saltarse en silencio.
- ¿Sin GNOME keyring (máquina headless, CI)? Se degrada a una frase de paso en memoria más un aviso, en lugar de fallar.
- El bug aburrido:
python -m arkvault backup ...antes no hacía nada en silencio — el parser de argumentos de la GUI se comía el subcomando y salía con código 0.__main__.pyahora despacha los subcomandos de la CLI de forma explícita. Los bugs que dan miedo se anuncian solos; los peligrosos de verdad salen limpios y no hacen nada. - El catálogo incluido es un ejemplo en blanco a propósito. El que realmente uso yo indica con precisión dónde vive lo importante, que es exactamente lo que no debería ir en un zip público. En su lugar tienes un ejemplo limpio de Projects/Settings con una muestra de redespliegue resuelta — la misma estructura, ninguna de mis rutas.
Descargas
Gratis para uso personal. Si te ahorra una tarde, el botón del café está aquí cerca.