En el artículo anterior arreglamos el backup del VPS y añadimos el del nodo Proxmox. Quedaba la parte más complicada: las máquinas físicas.
Complicada no por razones técnicas, sino prácticas. Un servidor está siempre encendido y el cron hace su trabajo sin que nadie lo mire. Un desktop no. Mi equipo de sobremesa, Solarium, se apaga cuando acabo de trabajar, no está en ninguna red de siempre disponible, y si el backup requiere abrir una terminal y recordar tres comandos... no se hará nunca.
La solución tenía que ser un icono en el escritorio. Doble clic, confirmar, esperar, listo.
Por qué restic
El backup del VPS y del nodo Proxmox usa tar+gz y rsync — funciona bien para configuraciones que pesan pocos megabytes y cambian poco. Para un desktop con gigabytes de datos que cambian a diario, necesitaba algo diferente.
Restic es una herramienta de backup incremental, deduplicada y cifrada. Lo que eso significa en la práctica:
- La primera vez sube todo.
- Las veces siguientes solo sube los bloques que han cambiado desde el último backup.
- Si tienes el mismo fichero en dos carpetas distintas, solo se almacena una vez.
- Todo el repositorio está cifrado con AES-256 antes de salir de tu máquina. El Storage Box nunca ve los datos en claro.
El modelo mental es parecido a PBS: snapshots con retención configurable, pero para máquinas físicas y hacia cualquier destino SFTP.
Decidir qué respaldar
Antes de configurar nada, hay que saber qué entra en el backup. En Solarium tengo:
Música 1,1 TB → fuera, proyecto aparte
Imágenes 95 GB → fuera, tengo RAID
Descargas 180 GB → fuera, prescindible
Vídeos 18 GB → fuera, mezclado con descargas
Dropbox 4,7 GB → fuera, cloud es la fuente de verdadCon todo eso fuera, el scope real se reduce a algo muy manejable:
~/.config/darktable 2,7 GB → base de datos de edición de fotos
~/.config/Code - OSS 452 MB → configuración VS Code
~/.config/REAPER 102 MB → DAW, proyectos y configs
~/.local/share/digikam 947 MB → catálogo de fotos
~/.local/share/fonts 177 MB → fuentes instaladas
~/.local/share/plasma 7,7 MB → configuración KDE
~/Fonts 623 MB → colección de fuentes
~/backups 63 MB → backups varios
~/.bashrc → configuración del shellTotal: unos 8 GB. Y con los incrementales de restic, los backups del día a día serán mínimos.
Ficheros de configuración editables
En lugar de hardcodear las rutas en el script, uso dos ficheros en ~/.config/restic-solarium/:
include.txt — rutas a respaldar:
/home/jaume/.config/darktable
/home/jaume/.config/REAPER
/home/jaume/.config/Code - OSS
/home/jaume/.local/share/digikam
/home/jaume/.local/share/fonts
/home/jaume/.local/share/plasma
/home/jaume/Fonts
/home/jaume/backups
/home/jaume/.bashrcexclude.txt — patrones a ignorar:
*.tmp
*.cache
*.log
*/.git
*/node_modules
*/cache
*/CacheCuando quiero añadir una ruta nueva — abro include.txt, añado la línea, guardo. El siguiente backup ya la incluye. Sin tocar el script.
Configurar restic con el Storage Box
Instalar restic
En Arch/EndeavourOS:
sudo pacman -S resticConfigurar el acceso SSH
Generamos una clave SSH dedicada para los backups:
ssh-keygen -t ed25519 -f ~/.ssh/id_storagebox -N ""La añadimos al Storage Box. Hetzner no soporta ssh-copy-id estándar, hay que usar -s:
ssh-copy-id -p 23 -s -i ~/.ssh/id_storagebox.pub uXXXXXX@uXXXXXX.your-storagebox.deY creamos un alias en ~/.ssh/config para no repetir parámetros:
Host storagebox
HostName uXXXXXX.your-storagebox.de
User uXXXXXX
Port 23
IdentityFile ~/.ssh/id_storageboxVerificar que conecta sin contraseña:
ssh storagebox "ls"Inicializar el repositorio
restic -r sftp:storagebox:backups/restic-solarium initRestic pedirá una contraseña para cifrar el repositorio. Esta contraseña es lo único que no se puede recuperar si se pierde — va directa a Bitwarden.
Guardamos la contraseña en un fichero para que el script no la pida interactivamente:
echo 'la_contraseña' > ~/.config/restic-solarium/repo.pass
chmod 600 ~/.config/restic-solarium/repo.passY verificamos que el repositorio abre correctamente:
restic -r sftp:storagebox:backups/restic-solarium \
--password-file ~/.config/restic-solarium/repo.pass \
snapshotsEl script con interfaz gráfica
El backup manual desde terminal funciona, pero no es lo que quiero para el día a día. El script combina kdialog (diálogos nativos de KDE) con zenity (ventana de progreso con texto en tiempo real).
El flujo completo es:
- Popup de confirmación — muestra la fecha del último backup
- ¿Apagar al terminar? — sí o no
- Aviso de guardar — si eligió apagar, recordatorio de cerrar trabajos abiertos
- Ventana zenity — progreso con la salida real de restic línea a línea
- Aplicar retención —
restic forget --pruneautomático - Resultado — popup con ID y fecha del snapshot, o error si algo falló
- Apagado — countdown de 30 segundos si se eligió apagar, con popup pasivo
La retención que uso: 7 diarios + 4 semanales + 3 mensuales.
Un detalle: el día que el backup es semanal, no hace diario — son excluyentes. Lo mismo que en el VPS.
Instalar las dependencias
sudo pacman -S kdialog zenityEl icono en el escritorio
Creamos un fichero .desktop en ~/Escritorio/:
[Desktop Entry]
Name=Backup Solarium
Comment=Hacer backup de Solarium al Storage Box
Exec=/home/jaume/bin/solarium-backup.sh
Icon=backup
Terminal=false
Type=Application
Categories=Utility;chmod +x ~/Escritorio/backup-solarium.desktopEn KDE puede que pida confirmar que es de confianza la primera vez — clic derecho y "Permitir ejecutar".
Lo que queda pendiente
El script tiene una sección donde pretende mostrar las ventanas abiertas antes del apagado para que puedas guardar los trabajos. El problema es que estoy en Wayland, y wmctrl — la herramienta estándar para esto — solo funciona en X11. No hay alternativa madura para KDE/Wayland todavía.
De momento el aviso es genérico: "guarda todos tus trabajos antes de continuar". Cuando aparezca una solución decente para Wayland, lo actualizamos.
También quedan pendientes los backups de música, imágenes y vídeo — más de un terabyte solo de CDs digitalizados. Eso requiere otra conversación, probablemente un NAS, y desde luego otro artículo.
Estado final del sistema de backup
| Qué | Herramienta | Destino | Cuándo |
|---|---|---|---|
| CTs y VMs del homelab | PBS | Storage Box | Automático, madrugada |
| VPS (webs + BBDD + configs) | Script bash + rsync | Storage Box | Automático, 3:00 |
| Nodo Proxmox (configuración) | Script bash + rsync | Storage Box | Automático, 5:00 |
| Solarium (configs + datos) | restic | Storage Box | Manual, icono escritorio |
| Música / Imágenes / Vídeo | Pendiente | — | — |
| VANT y otros equipos | Pendiente | — | — |
Los scripts están disponibles en el repositorio jferrep/jaws-audit en GitHub.