↓ Ir al contenido

Restauración selectiva de archivos desde backups de Restic sin restaurar volúmenes completos

·3 mins
Rogelio Guerra Riverón
Autor
Rogelio Guerra Riverón
Construyendo mi propia infraestructura web desde cero. Aquí documento cada paso: servidores, redes, contenedores y lo que vaya surgiendo.

El problema
#

Cuando trabajas con backups de Restic en un servidor doméstico, muchas veces necesitas recuperar un archivo específico o una carpeta sin tocar el resto del sistema. Usar restic restore para recuperar todo un volumen es ineficiente y arriesgado.

La solución es montar el backup como un sistema de archivos usando FUSE (Filesystem in Userspace). De este modo puedes navegar el backup como si fuera un disco normal y copiar solo lo que necesitas.

Requisitos
#

  • Restic instalado y configurado
  • FUSE instalado en el sistema
  • Acceso a las credenciales del repositorio de Restic

En mi servidor corro todo en Docker, así que uso la imagen oficial de Restic. Para este caso usé una máquina física de Ubuntu Server 22.04.

Pasos prácticos
#

1. Instalar las herramientas necesarias
#

apt-get update
apt-get install -y fuse3 restic

Verificar que FUSE funciona:

ls -la /dev/fuse
# Debe existir el dispositivo

2. Configurar las variables de entorno
#

Antes de montar, necesitas que Restic acceda al repositorio:

export RESTIC_REPOSITORY="s3:s3.ejemplo.com/mi-bucket/restic"
export RESTIC_PASSWORD="tu-contraseña-o-archivo"
export AWS_ACCESS_KEY_ID="clave"
export AWS_SECRET_ACCESS_KEY="secreto"

En mi caso almaceno backups en MinIO local, así que:

export RESTIC_REPOSITORY="s3:http://192.168.x.x:9000/backups/restic"
export RESTIC_PASSWORD_FILE="/etc/restic/password"
export AWS_ACCESS_KEY_ID="minioadmin"
export AWS_SECRET_ACCESS_KEY="minioadmin"

3. Listar snapshots disponibles
#

Primero, identificar qué backup necesitas:

restic snapshots

Output típico:

ID        Time                 Host      Tags      Paths
--------------------------------------------------------------------
a1b2c3d4  2026-08-25 14:30:00  servidor  docker    /docker/volumes
e5f6g7h8  2026-08-26 14:30:00  servidor  docker    /docker/volumes

4. Montar el snapshot
#

Crear un directorio para el mount:

mkdir -p /mnt/restic-restore

Montar el snapshot específico:

restic mount /mnt/restic-restore

Esto mantiene el proceso en foreground. Si quieres ejecutarlo en background:

restic mount /mnt/restic-restore &

Esperar a que se monte (tarda unos segundos):

ls /mnt/restic-restore/
# Deberías ver los snapshots disponibles

5. Navegar y copiar archivos
#

El mount es read-only, así que es seguro:

cd /mnt/restic-restore/
ls -la

# Dentro verás las carpetas por snapshot (por ID)
cd a1b2c3d4/
ls -la

# Navega hasta el archivo que necesitas
find . -name "archivo-importante.txt"

# Copiar el archivo a su destino
cp /mnt/restic-restore/a1b2c3d4/docker/volumes/importante.tar /home/admin/

6. Desmontar cuando termines
#

fusermount -u /mnt/restic-restore

O si está en background:

pkill -f "restic mount"

Consideraciones importantes
#

Permisos: Restic se ejecuta como el usuario que lo invoca. Si corres como root, tendrás acceso total. Si usas un usuario normal, asegúrate de que tiene permisos sobre el directorio de mount.

Performance: Montar a través de FUSE es más lento que restaurar directamente. Es práctico para archivos pequeños. Para volúmenes grandes, sigue siendo mejor usar restic restore.

Tiempos de espera: La primera búsqueda en el mount puede tardar mientras Restic indexa el snapshot. Ten paciencia.

Seguridad: El mount es read-only. No puedes sobrescribir nada del backup accidentalmente.

Caso de uso real
#

Hace poco un dev pidió recuperar una versión antigua de un archivo de configuración. En lugar de restaurar todo el volumen de datos (500GB), monté el backup, encontré el archivo en cuestión, copié su versión antigua a /tmp en 2 minutos. Sin riesgo, sin lio.

Esta es la forma correcta de trabajar con backups en un entorno de producción casero.