Ir al contenido
Borg: backups serios desde la terminal

Borg: backups serios desde la terminal

·749 palabras·4 mins
Graplo
Autor
Graplo
Usuario de CachyOS. Le gusta el terminal y contribuye con el open source y del tema favoríto Dracula.

¿Qué es Borg?
#

Borg es una herramienta de backup para terminal con tres características que la hacen destacar: deduplicación, compresión y encriptación. La deduplicación significa que solo guarda lo que cambió desde el último backup — si tienes 116GB de datos pero solo cambiaron 3GB, Borg solo guarda esos 3GB. El resultado es que puedes tener meses de backups diarios ocupando una fracción del espacio original.

Es de esas herramientas que entre más la usas más la respetas. Por fuera parece simple pero por dentro tiene mucho trabajo bien hecho.

Instalación
#

En CachyOS o cualquier distro basada en Arch:

sudo pacman -S borg

Conceptos básicos
#

Antes de empezar hay dos términos importantes:

  • Repositorio — la carpeta donde Borg guarda todo. Tiene su propia estructura interna, nunca la toques directamente con rm o mv.
  • Archive — cada backup individual dentro del repositorio. Puedes tener cientos de archives en un solo repositorio.

Init — una sola vez
#

El repositorio se inicializa una sola vez:

borg init --encryption=repokey /ruta/a/tu/backup

--encryption=repokey activa encriptación con contraseña — te la pedirá al crear y en cada operación posterior. Para pruebas puedes usar --encryption=none.

Crear un backup
#

borg create --progress --stats --compression zstd,3 \
    /ruta/backup::"home-{now:%Y-%m-%d_%H-%M-%S}" ~/

Las llaves {} generan el timestamp automáticamente. En Fish necesitas comillas dobles para que no interprete las llaves.

Compresión
#

Borg ofrece varias opciones de compresión:

AlgoritmoVelocidadCompresiónUso recomendado
noneMáximaNingunaSin prioridad de espacio
lz4Muy rápidaModeradaBackups frecuentes
zstd,3RápidaBuenaUso general — la más recomendada
zlibMediaModeradaAlternativa a lz4
lzmaLentaMáximaArchivado a largo plazo

El nivel de zstd va de 1 a 22 — el 3 es un buen balance entre velocidad y compresión.

Lo interesante es que puedes cambiar de algoritmo entre backups sin romper el repositorio — cada archive recuerda con qué compresión fue creado.

Flags útiles
#

FlagPara qué sirve
--progressMuestra los archivos mientras los procesa
--statsMuestra resumen al final: tamaño, compresión, deduplicación
--dry-runSimula el backup sin escribir nada
--excludeExcluir rutas

Listar backups
#

Ver todos los archives del repositorio:

borg list /ruta/backup

Ver el contenido de un archive específico:

borg list /ruta/backup::home-2026-05-24

Montar y explorar
#

Puedes montar un archive como si fuera una carpeta normal y explorarla con yazi o Nautilus — es lo que hace Pika Backup por debajo:

mkdir ~/borg/mount
borg mount /ruta/backup::home-2026-05-24 ~/borg/mount

# cuando termines
borg umount ~/borg/mount

Los archivos no son copias, se leen directo del repositorio. Para tener copias reales usa extract.

Restaurar archivos
#

Siempre hacer cd primero a un directorio temporal:

mkdir -p ~/borg/restore
cd ~/borg/restore
borg extract /ruta/backup::home-2026-05-24

Para restaurar solo un archivo o carpeta específica:

borg extract /ruta/backup::home-2026-05-24 home/graplo/.config/fish

Sin / inicial — Borg usa rutas relativas.

Importante: borg extract no acepta una ruta de destino como argumento — siempre extrae en el directorio actual, por eso el cd previo es obligatorio. El argumento opcional al final no es el destino sino el archivo o carpeta específica que quieres extraer:

# extrae todo el archive en ~/borg/restore
borg extract /ruta/backup::home-2026-05-24

# extrae solo una carpeta específica
borg extract /ruta/backup::home-2026-05-24 home/graplo/.config/fish

Prune y compact — limpiar backups viejos
#

prune marca los archives a eliminar según las reglas que definas, compact los borra físicamente. Siempre van juntos:

# primero prueba con --dry-run para ver qué borraría
borg prune --keep-daily=7 --keep-weekly=4 --dry-run /ruta/backup

# si todo se ve bien, ejecuta sin --dry-run
borg prune --keep-daily=7 --keep-weekly=4 /ruta/backup
borg compact /ruta/backup

Automatizar con un script
#

El verdadero poder de Borg viene cuando lo automatizas. Este es un script funcional para backup del home completo:

#!/usr/bin/env bash
set -euo pipefail

BACKUP_PATH="/run/media/graplo/db2/backup"
now=$(date +"%Y-%m-%d_%H-%M-%S")

borg create --progress --stats --compression zstd,3 "$BACKUP_PATH::home-${now}" \
    --exclude "$HOME/.cache/" \
    --exclude "$HOME/.local/share/Trash" \
    --exclude "$HOME/.local/share/Steam" \
    --exclude "$HOME/Descargas" \
    --exclude "$HOME/.var/app/*/cache" \
    --exclude "$HOME/.local/share/containers" \
    --exclude "$HOME/.ollama" \
    "$HOME"

borg prune --stats --keep-last 7 --glob-archives "home-*" "$BACKUP_PATH"

set -euo pipefail hace que el script muera si hay cualquier error en vez de continuar silenciosamente. Las exclusiones evitan backupear cachés, la papelera, imágenes de Steam, Flatpak, podman y modelos de ollama — todo lo que pesa mucho y se puede volver a descargar.

Pika Backup y la compresión
#

Si venías de Pika Backup, tus backups anteriores no tienen compresión — Pika la desactiva por defecto para simplificar la interfaz. Puedes seguir usando el mismo repositorio con zstd desde ahora sin problema, Borg maneja cada archive de forma independiente y no se confunde.