borg prune no libera espacio: hace falta borg compact
40 archivos a 11; el repositorio pasó de 41684 KiB a 41704 KiB tras prune y a 11392 KiB tras compact.
Contenido
Este artículo no contiene enlaces de afiliado.
En restic, forget --prune borra snapshots y libera espacio en un paso. En Borg 1.2 el reparto es distinto: borg prune solo borra archivos del índice y borg compact es lo que recupera el disco. Se midió.
Condiciones: Borg 1.2.8 en Linux arm64, repositorio local cifrado (repokey), contraseña desechable. 40 copias diarias de un fichero aleatorio de 1 MiB que cambia cada día, con fechas forzadas con --timestamp. No se probó con repositorios remotos ni con grandes volúmenes. Script completo al final.
Resultado
| Paso | Archivos | Tamaño del repositorio |
|---|---|---|
| Antes | 40 | 41684 KiB |
borg prune --keep-daily 7 --keep-weekly 4 |
11 | 41704 KiB |
borg compact |
11 | 11392 KiB |
--dry-run anunció 29 archivos a borrar, y los 11 que quedan son 7 diarios más 4 semanales. Tras el prune el tamaño no bajó (subió 20 KiB por el índice); solo bajó con compact.
Qué hacer en un script
Ejecuta borg prune ... seguido de borg compact y no des el espacio por liberado hasta que termine el segundo. Si solo ejecutas prune cada noche, el repositorio seguirá creciendo aunque borg list muestre pocos archivos. Para la misma política en restic, mira forget y prune; para elegir herramienta, restic vs Borg.
Script completo
#!/bin/bash
# borg 1.2 prune vs compact, same retention as restic forget. Usage: test-borg-prune-compact.sh WORKDIR
set -e
W=$1; rm -rf "$W"; mkdir -p "$W/data"
export BORG_PASSPHRASE=prueba-desechable BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes
R="$W/repo"; borg init -e repokey "$R" >/dev/null
for d in $(seq 0 39); do
head -c 1048576 /dev/urandom > "$W/data/diario.bin"
day=$(date -d "2026-08-20 +$d days" +%F)
borg create --timestamp "${day}T03:00:00" "$R::dia-$day" "$W/data" >/dev/null 2>&1
done
echo "archives before: $(borg list --short $R | wc -l); du: $(du -sk $R | cut -f1) KiB"
POL="--keep-daily 7 --keep-weekly 4"
borg prune $POL --dry-run --list "$R" 2>&1 | grep -c 'Would prune' | sed 's/^/dry-run would prune: /'
borg prune $POL "$R"
echo "after prune: archives $(borg list --short $R | wc -l); du: $(du -sk $R | cut -f1) KiB"
borg compact "$R" >/dev/null 2>&1
echo "after compact: archives $(borg list --short $R | wc -l); du: $(du -sk $R | cut -f1) KiB"