Copias de Seguridad con Restic: Solución de Backup Moderna, Rápida y Segura
Introducción
Restic es un programa de copias de seguridad moderno, rápido y seguro diseñado desde cero para la eficiencia, seguridad y facilidad de uso. Escrito en Go y liberado como software de código abierto, Restic se ha convertido rápidamente en una de las soluciones de backup más populares en el ecosistema Linux, ofreciendo características avanzadas como deduplicación, cifrado, compresión y soporte para múltiples backends de almacenamiento incluyendo almacenamiento local, SFTP, almacenamiento de objetos compatible con S3 y muchos proveedores en la nube.
Lo que distingue a Restic es su enfoque en la simplicidad sin sacrificar potencia. A diferencia de las herramientas de backup tradicionales que requieren configuración compleja o conocimiento especializado, Restic proporciona una interfaz de línea de comandos sencilla que lo hace accesible tanto para principiantes como para administradores de sistemas experimentados. Al mismo tiempo, sus sofisticados algoritmos de deduplicación, cifrado verificable y capacidades de backup incremental lo hacen adecuado para entornos de producción que gestionan terabytes de datos.
Esta guía completa cubre Restic desde la instalación hasta despliegues de producción avanzados, incluyendo gestión de repositorios, estrategias de backup, procedimientos de restauración, integración en la nube, automatización, monitoreo y escenarios del mundo real siguiendo la regla de backup 3-2-1 para protección completa de datos.
Entendiendo la Arquitectura de Restic
Cómo Funciona Restic
Restic implementa una arquitectura de backup sofisticada optimizada para seguridad y eficiencia:
Almacenamiento direccionable por contenido: Restic divide los archivos en fragmentos de tamaño variable utilizando un algoritmo de hash rodante (similar a Borg). Cada fragmento se almacena una vez independientemente de cuántos archivos o backups lo contengan, permitiendo una deduplicación eficiente.
Backups basados en snapshots: Cada backup crea un "snapshot"—una vista completa de tus datos en un momento específico. Sin embargo, debido a la deduplicación, solo los fragmentos nuevos o modificados consumen almacenamiento adicional.
Diseño con cifrado prioritario: Todos los datos se cifran en el cliente antes de salir de tu sistema. Restic usa AES-256 en modo contador con Poly1305-AES para autenticación. El formato del repositorio está documentado, asegurando la recuperabilidad a largo plazo.
Flexibilidad de backend: Restic soporta almacenamiento local, SFTP, servidores REST y numerosos proveedores de almacenamiento en la nube (S3, Azure Blob, Google Cloud Storage, Backblaze B2 y más) a través de una interfaz unificada.
Verificación e integridad: Cada snapshot puede ser verificado para asegurar la integridad de los datos. Restic comprueba tanto los metadatos de archivos como el contenido real de los datos durante la verificación.
Restic vs Otras Soluciones de Backup
Restic vs BorgBackup:
- Ambos: Deduplicación definida por contenido, cifrado, compresión
- Restic: Configuración más simple, soporte más amplio de backends (especialmente nube)
- Borg: Más maduro, modo solo-añadir, ligeramente más rápido para backups locales
- Restic: Escrito en Go (binario único, multiplataforma)
- Borg: Escrito en Python/C (más dependencias)
Restic vs Duplicity:
- Duplicity: Cadenas de backup completo + incremental tradicionales
- Restic: Basado en snapshots, no requiere cadenas de backup
- Duplicity: Restauración más compleja desde cadenas incrementales
- Restic: Restauración simple de snapshots, navegar cualquier snapshot directamente
- Restic: Mejor eficiencia de deduplicación
Restic vs rsnapshot:
- Rsnapshot: Snapshots basados en enlaces duros, formato de sistema de archivos
- Restic: Deduplicación basada en fragmentos, repositorio cifrado
- Rsnapshot: Estructura de directorios legible por humanos
- Restic: El repositorio requiere herramientas Restic para el acceso
- Restic: Soporte nativo de almacenamiento en la nube
Características Clave y Beneficios
Deduplicación universal: Los fragmentos idénticos se almacenan solo una vez en todos los snapshots, minimizando el consumo de almacenamiento.
Cifrado verificado: El cifrado AES-256 con autenticación previene tanto el acceso no autorizado como la manipulación.
Múltiples backends de almacenamiento: Backup a unidades locales, almacenamiento en red o proveedores en la nube sin cambiar flujos de trabajo.
Rápido y eficiente: Escrito en Go para rendimiento, operaciones paralelizadas, uso optimizado de red.
Navegación de snapshots: Monta cualquier snapshot como sistema de archivos de solo lectura para navegar archivos fácilmente y restauración selectiva.
Prune y forget: Elimina snapshots antiguos mientras limpia automáticamente fragmentos de datos sin referencias.
Multiplataforma: Binario único se ejecuta en Linux, macOS, Windows, sistemas BSD.
No requiere servidor especial: Usa almacenamiento estándar (sistemas de archivos, SFTP, S3) sin software de servidor propietario.
Instalación
Instalando Restic desde Gestores de Paquetes
Ubuntu/Debian:
# Update package lists
sudo apt update
# Install Restic
sudo apt install restic
# Verify installation
restic version
CentOS/Rocky Linux/RHEL:
# Enable EPEL repository
sudo dnf install epel-release
# Install Restic
sudo dnf install restic
# Verify installation
restic version
Instalando el Binario Más Reciente de Restic
Para la versión más reciente:
# Download latest release (check GitHub for current version)
cd /tmp
wget https://github.com/restic/restic/releases/download/v0.16.3/restic_0.16.3_linux_amd64.bz2
# Extract and install
bzip2 -d restic_0.16.3_linux_amd64.bz2
chmod +x restic_0.16.3_linux_amd64
sudo mv restic_0.16.3_linux_amd64 /usr/local/bin/restic
# Verify
restic version
Salida esperada:
restic 0.16.3 compiled with go1.21.5 on linux/amd64
Instalando desde Código Fuente
Para desarrollo o compilaciones personalizadas:
# Install Go (if not already installed)
wget https://go.dev/dl/go1.21.6.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.6.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
# Clone and build Restic
git clone https://github.com/restic/restic.git
cd restic
go run build.go
# Install binary
sudo cp restic /usr/local/bin/
restic version
Inicialización del Repositorio
Creando tu Primer Repositorio
Inicializa un repositorio para almacenar backups:
Repositorio local:
# Create repository directory
mkdir -p /backup/restic-repo
# Initialize repository
restic init --repo /backup/restic-repo
# enter password for new repository:
# enter password again:
# created restic repository abc123def456 at /backup/restic-repo
Repositorio remoto SFTP:
# Initialize on remote server via SFTP
restic init --repo sftp:user@backup-server:/backup/restic-repo
Almacenamiento compatible con S3 (AWS S3, MinIO, Wasabi, etc.):
# Export AWS credentials
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
# Initialize S3 repository
restic init --repo s3:s3.amazonaws.com/bucket-name/restic-repo
Backblaze B2:
# Export B2 credentials
export B2_ACCOUNT_ID="your-account-id"
export B2_ACCOUNT_KEY="your-account-key"
# Initialize B2 repository
restic init --repo b2:bucket-name:restic-repo
Gestión de Contraseñas del Repositorio
Usando archivo de contraseña (para automatización):
# Create password file
echo "your-secure-password" > /root/.restic-password
chmod 600 /root/.restic-password
# Use with Restic
restic --repo /backup/restic-repo --password-file /root/.restic-password snapshots
Usando variable de entorno:
# Set password in environment
export RESTIC_PASSWORD="your-secure-password"
# Or in scripts
export RESTIC_REPOSITORY="/backup/restic-repo"
export RESTIC_PASSWORD="your-secure-password"
restic snapshots
Usando comando de contraseña (leer desde bóveda segura):
# Example with pass password manager
restic --repo /backup/restic-repo \
--password-command "pass show backup/restic-password" \
snapshots
Configuración del Repositorio
Configurar valores predeterminados del repositorio:
# Set default repository
export RESTIC_REPOSITORY="/backup/restic-repo"
export RESTIC_PASSWORD_FILE="/root/.restic-password"
# Add to ~/.bashrc or backup scripts for persistence
echo 'export RESTIC_REPOSITORY="/backup/restic-repo"' >> ~/.bashrc
echo 'export RESTIC_PASSWORD_FILE="/root/.restic-password"' >> ~/.bashrc
Creando Backups
Creación Básica de Backup
Crea tu primer snapshot:
# Simple backup
restic backup /home/user
# Multiple paths
restic backup /home /etc /var/www
# With tags for organization
restic backup --tag daily --tag production /home /var/www
Con hostname descriptivo:
# Specify hostname (useful for multiple machines backing up to same repo)
restic backup --host web-server-01 /var/www
Salida detallada:
# Show progress and statistics
restic backup --verbose /home /etc
Ejemplo de salida:
repository abc123 opened successfully, password is correct
created new cache in /root/.cache/restic
Files: 1234 new, 0 changed, 0 unmodified
Dirs: 567 new, 0 changed, 0 unmodified
Added to the repo: 2.456 GiB
processed 1234 files, 5.234 GiB in 2:15
snapshot 9abc1234 saved
Excluyendo Archivos y Directorios
Optimiza backups con patrones de exclusión:
Exclusiones por línea de comandos:
restic backup /home \
--exclude='*.tmp' \
--exclude='*.log' \
--exclude='.cache' \
--exclude='node_modules' \
--exclude='Downloads'
Archivo de exclusión:
Crear /etc/restic/exclude.txt:
# Temporary files
*.tmp
*.swp
*.bak
~*
# Caches
.cache/
.thumbnails/
__pycache__/
*.pyc
node_modules/
vendor/
# Logs
*.log
/var/log/
# System directories
/proc
/sys
/dev
/run
/tmp
/lost+found
# Large media files (optional)
*.iso
*.img
*.vmdk
Usar archivo de exclusión:
restic backup --exclude-file=/etc/restic/exclude.txt /home /var/www
Excluir cachés automáticamente:
# Exclude directories with CACHEDIR.TAG
restic backup --exclude-caches /home
Prueba en Seco
Probar backup sin crear snapshot:
# Dry run to see what would be backed up
restic backup --dry-run --verbose /home
# Shows files that would be processed without actually backing up
Script de Backup de Producción
Script de backup completo para uso en producción:
#!/bin/bash
# /usr/local/bin/restic-backup.sh
set -e
# Configuration
export RESTIC_REPOSITORY="/backup/restic-repo"
export RESTIC_PASSWORD_FILE="/root/.restic-password"
BACKUP_PATHS="/home /etc /var/www /opt /root"
EXCLUDE_FILE="/etc/restic/exclude.txt"
LOG_FILE="/var/log/restic-backup.log"
ADMIN_EMAIL="[email protected]"
# Logging function
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"
}
# Error handler
error_exit() {
log "ERROR: $1"
echo "Restic backup failed: $1" | mail -s "Backup FAILED - $(hostname)" "$ADMIN_EMAIL"
exit 1
}
log "Starting Restic backup"
# Pre-backup: Database dumps
log "Creating database dumps"
mkdir -p /var/backups/db-dumps
mysqldump --all-databases --single-transaction \
| gzip > /var/backups/db-dumps/mysql-all.sql.gz || error_exit "MySQL dump failed"
sudo -u postgres pg_dumpall \
| gzip > /var/backups/db-dumps/postgresql-all.sql.gz || error_exit "PostgreSQL dump failed"
# Create backup snapshot
log "Creating backup snapshot"
restic backup \
--tag daily \
--tag $(date +%A) \
--exclude-file="$EXCLUDE_FILE" \
--verbose \
$BACKUP_PATHS \
/var/backups/db-dumps \
2>&1 | tee -a "$LOG_FILE"
if [ ${PIPESTATUS[0]} -ne 0 ]; then
error_exit "Restic backup command failed"
fi
# Check snapshot was created
log "Verifying snapshot creation"
restic snapshots --last 1 || error_exit "Snapshot verification failed"
# Forget old snapshots with retention policy
log "Applying retention policy"
restic forget \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 12 \
--keep-yearly 2 \
--prune \
2>&1 | tee -a "$LOG_FILE"
# Cleanup old database dumps
find /var/backups/db-dumps -name "*.sql.gz" -mtime +3 -delete
log "Backup completed successfully"
# Send success notification
SNAPSHOT_INFO=$(restic snapshots --last 1)
echo "Backup completed successfully at $(date)" | \
mail -s "Backup SUCCESS - $(hostname)" "$ADMIN_EMAIL"
exit 0
Hacer ejecutable:
sudo chmod +x /usr/local/bin/restic-backup.sh
Gestionando Snapshots
Listando Snapshots
Ver todos los backups en el repositorio:
# List all snapshots
restic snapshots
# Example output:
# ID Time Host Tags Paths
# ----------------------------------------------------------------
# 9abc1234 2026-01-10 02:00:01 web-server daily /home /etc /var/www
# 8def5678 2026-01-11 02:00:01 web-server daily /home /etc /var/www
Listar con filtros específicos:
# Snapshots for specific host
restic snapshots --host web-server
# Snapshots with specific tag
restic snapshots --tag daily
# Snapshots for specific path
restic snapshots --path /home
# Latest snapshot only
restic snapshots --last 1
# Compact output
restic snapshots --compact
Detalles del Snapshot
Obtener información detallada sobre snapshots:
# Show files in snapshot
restic ls 9abc1234
# Show directory tree
restic ls --long 9abc1234
# Show specific path in snapshot
restic ls 9abc1234 /home/user/
Comparando Snapshots
Encontrar diferencias entre backups:
# Compare two snapshots
restic diff 9abc1234 8def5678
# Shows added, removed, and modified files
Verificando Integridad del Repositorio
Verificar integridad del repositorio y datos:
# Quick check (metadata only)
restic check
# Read and verify all data
restic check --read-data
# Check subset of data (10%)
restic check --read-data-subset=10%
Retención y Limpieza
Comando Forget
Eliminar snapshots basándose en política de retención:
# Apply retention policy without deleting data
restic forget \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 12 \
--keep-yearly 2
# With --prune to actually remove unreferenced data
restic forget \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 12 \
--prune
Opciones de política de retención:
--keep-last N: Mantener N snapshots más recientes--keep-hourly N: Mantener N snapshots por hora--keep-daily N: Mantener N snapshots diarios--keep-weekly N: Mantener N snapshots semanales--keep-monthly N: Mantener N snapshots mensuales--keep-yearly N: Mantener N snapshots anuales--keep-within DURATION: Mantener snapshots dentro de duración (ej., "7d", "2m", "1y")--keep-tag TAG: Mantener todos los snapshots con etiqueta especificada
Ejemplos de políticas de retención:
Agresiva (almacenamiento mínimo):
restic forget --keep-daily 3 --keep-weekly 2 --keep-monthly 3 --prune
Equilibrada (recomendada):
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --keep-yearly 2 --prune
Extendida (cumplimiento/archivo):
restic forget --keep-daily 30 --keep-weekly 12 --keep-monthly 24 --keep-yearly 7 --prune
Retención basada en tiempo:
# Keep everything from last 30 days, then apply policy
restic forget --keep-within 30d --keep-monthly 12 --keep-yearly 5 --prune
Limpiando el Repositorio
La bandera --prune elimina datos sin referencias. Para más control:
# Forget snapshots without pruning
restic forget --keep-daily 7 --keep-weekly 4
# Prune separately
restic prune
# Show what would be pruned (dry run)
restic prune --dry-run
Procedimientos de Restauración
Montando Snapshots
Montar snapshot como sistema de archivos de solo lectura:
# Create mount point
mkdir -p /mnt/restic
# Mount latest snapshot
restic mount /mnt/restic &
# Browse snapshots
ls /mnt/restic/snapshots/
# 2026-01-10T020001/
# 2026-01-11T020001/
# Navigate snapshot
cd /mnt/restic/snapshots/2026-01-11T020001/home/user/
ls -la
# Unmount when done
fusermount -u /mnt/restic
# or
umount /mnt/restic
Montar snapshot específico:
# Mount single snapshot by ID
restic mount --snapshot-filter 9abc1234 /mnt/restic
Restaurando Archivos
Restaurar datos desde snapshots:
Restaurar snapshot completo:
# Restore to original location
restic restore latest --target /
# Restore to different location
restic restore latest --target /restore-destination/
Restaurar rutas específicas:
# Restore single file
restic restore latest \
--target /restore/ \
--include /home/user/important-file.txt
# Restore directory
restic restore latest \
--target /restore/ \
--include /home/user/documents/
# Restore multiple paths
restic restore latest \
--target /restore/ \
--include /etc/nginx/ \
--include /var/www/
Restaurar por ID de snapshot:
# Restore specific snapshot
restic restore 9abc1234 --target /restore/
Restaurar con filtros:
# Restore only specific file types
restic restore latest \
--target /restore/ \
--include '*.conf'
# Exclude certain paths during restore
restic restore latest \
--target /restore/ \
--exclude /var/log/
Restauración Selectiva de Archivos
Flujo de trabajo de restauración interactiva:
# 1. Find snapshot containing file
restic find important-document.pdf
# Output shows which snapshots contain the file
# Found matching entries in snapshot 9abc1234 from 2026-01-11
# /home/user/Documents/important-document.pdf
# 2. Mount snapshot
restic mount /mnt/restic
# 3. Copy file
cp /mnt/restic/snapshots/2026-01-11T020001/home/user/Documents/important-document.pdf /home/user/
# 4. Unmount
fusermount -u /mnt/restic
Restauración Completa del Sistema
Procedimiento de recuperación ante desastres:
# Boot from live USB/rescue system
# Partition and format disks
parted /dev/sda mklabel gpt
parted /dev/sda mkpart primary ext4 1MiB 100%
mkfs.ext4 /dev/sda1
# Mount target filesystem
mount /dev/sda1 /mnt/target
# Initialize Restic variables
export RESTIC_REPOSITORY="sftp:user@backup-server:/backup/restic-repo"
export RESTIC_PASSWORD="your-password"
# Restore latest snapshot
restic restore latest --target /mnt/target/
# Reinstall bootloader
mount --bind /dev /mnt/target/dev
mount --bind /proc /mnt/target/proc
mount --bind /sys /mnt/target/sys
chroot /mnt/target
grub-install /dev/sda
update-grub
exit
# Cleanup and reboot
umount /mnt/target/dev /mnt/target/proc /mnt/target/sys
umount /mnt/target
reboot
Integración con Almacenamiento en la Nube
Configuración de AWS S3
Configurar repositorio S3:
# Export AWS credentials
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
# Initialize repository
restic init --repo s3:s3.amazonaws.com/my-backup-bucket/restic-repo
# Create backup to S3
restic backup --repo s3:s3.amazonaws.com/my-backup-bucket/restic-repo /home /etc
Usando almacenamiento compatible con S3 (MinIO, Wasabi, DigitalOcean Spaces):
# MinIO example
export AWS_ACCESS_KEY_ID="your-minio-access-key"
export AWS_SECRET_ACCESS_KEY="your-minio-secret-key"
restic init --repo s3:https://minio.example.com/bucket-name/restic-repo
Configuración de Backblaze B2
Configurar repositorio B2:
# Export B2 credentials
export B2_ACCOUNT_ID="your-account-id"
export B2_ACCOUNT_KEY="your-application-key"
# Initialize repository
restic init --repo b2:my-backup-bucket:restic-repo
# Create backup
restic backup --repo b2:my-backup-bucket:restic-repo /home /etc
B2 con políticas de ciclo de vida (para optimización de costos):
- Configurar bucket B2 con reglas de ciclo de vida para transicionar datos antiguos a niveles de almacenamiento más económicos
- Restic funciona de manera transparente con los niveles de B2
Configuración de Azure Blob Storage
# Export Azure credentials
export AZURE_ACCOUNT_NAME="your-storage-account"
export AZURE_ACCOUNT_KEY="your-account-key"
# Initialize repository
restic init --repo azure:container-name:/restic-repo
# Create backup
restic backup --repo azure:container-name:/restic-repo /home /etc
Configuración de Google Cloud Storage
# Authenticate with gcloud
gcloud auth application-default login
# Initialize repository
restic init --repo gs:my-backup-bucket:/restic-repo
# Create backup
restic backup --repo gs:my-backup-bucket:/restic-repo /home /etc
Automatización y Programación
Configuración de Temporizador Systemd
Crear archivo de servicio (/etc/systemd/system/restic-backup.service):
[Unit]
Description=Restic Backup Service
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/restic-backup.sh
User=root
Nice=19
IOSchedulingClass=2
IOSchedulingPriority=7
# Environment variables
Environment="RESTIC_REPOSITORY=/backup/restic-repo"
Environment="RESTIC_PASSWORD_FILE=/root/.restic-password"
# Security hardening
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/backup /var/log /var/backups
# Timeout after 6 hours
TimeoutSec=21600
[Install]
WantedBy=multi-user.target
Crear archivo de temporizador (/etc/systemd/system/restic-backup.timer):
[Unit]
Description=Restic Daily Backup Timer
Requires=restic-backup.service
[Timer]
OnCalendar=daily
OnCalendar=*-*-* 02:00:00
Persistent=true
RandomizedDelaySec=30min
[Install]
WantedBy=timers.target
Habilitar e iniciar:
sudo systemctl daemon-reload
sudo systemctl enable --now restic-backup.timer
sudo systemctl list-timers restic-backup.timer
sudo journalctl -u restic-backup.service
Programación Basada en Cron
# Edit root crontab
sudo crontab -e
# Daily backup at 2 AM
0 2 * * * /usr/local/bin/restic-backup.sh >> /var/log/restic-cron.log 2>&1
# Weekly integrity check on Sunday at 3 AM
0 3 * * 0 /usr/local/bin/restic-check.sh >> /var/log/restic-check.log 2>&1
Script de Verificación Automatizada
#!/bin/bash
# /usr/local/bin/restic-check.sh
export RESTIC_REPOSITORY="/backup/restic-repo"
export RESTIC_PASSWORD_FILE="/root/.restic-password"
LOG_FILE="/var/log/restic-check.log"
ADMIN_EMAIL="[email protected]"
echo "[$(date)] Starting repository check" | tee -a "$LOG_FILE"
# Check repository integrity
restic check --read-data-subset=5% 2>&1 | tee -a "$LOG_FILE"
if [ ${PIPESTATUS[0]} -eq 0 ]; then
echo "Repository check completed successfully" | \
mail -s "Restic Check OK - $(hostname)" "$ADMIN_EMAIL"
else
echo "Repository check FAILED" | \
mail -s "Restic Check FAILED - $(hostname)" "$ADMIN_EMAIL"
fi
Escenarios de Implementación del Mundo Real
Escenario 1: Estación de Trabajo Personal a la Nube
Requisitos:
- Directorio home del usuario
- Backups diarios a Backblaze B2
- Retención de 30 días
- Almacenamiento económico
Implementación:
# Initialize B2 repository
export B2_ACCOUNT_ID="your-account-id"
export B2_ACCOUNT_KEY="your-key"
export RESTIC_PASSWORD="your-password"
restic init --repo b2:personal-backup:restic-repo
# Create backup script
cat > ~/bin/restic-backup.sh << 'EOF'
#!/bin/bash
export B2_ACCOUNT_ID="your-account-id"
export B2_ACCOUNT_KEY="your-key"
export RESTIC_REPOSITORY="b2:personal-backup:restic-repo"
export RESTIC_PASSWORD_FILE="$HOME/.restic-password"
restic backup \
--exclude-file="$HOME/.config/restic/exclude.txt" \
"$HOME"
restic forget --keep-daily 30 --prune
EOF
chmod +x ~/bin/restic-backup.sh
# Schedule with cron
crontab -e
# Add: 0 14 * * * ~/bin/restic-backup.sh
Escenario 2: Servidor de Producción a Múltiples Ubicaciones
Requisitos:
- Servidor web + bases de datos
- Backup local + SFTP remoto + S3
- Snapshots por hora
- Retención de 90 días
Implementación:
#!/bin/bash
# /usr/local/bin/restic-multi-backup.sh
BACKUP_PATHS="/var/www /etc /opt"
# Repository 1: Local
export RESTIC_REPOSITORY="/backup/restic-local"
export RESTIC_PASSWORD_FILE="/root/.restic-password-local"
restic backup $BACKUP_PATHS
restic forget --keep-hourly 24 --keep-daily 90 --prune
# Repository 2: Remote SFTP
export RESTIC_REPOSITORY="sftp:backup@remote-server:/backups/restic-repo"
export RESTIC_PASSWORD_FILE="/root/.restic-password-remote"
restic backup $BACKUP_PATHS
restic forget --keep-daily 90 --prune
# Repository 3: S3 (archival)
export AWS_ACCESS_KEY_ID="your-key"
export AWS_SECRET_ACCESS_KEY="your-secret"
export RESTIC_REPOSITORY="s3:s3.amazonaws.com/backup-bucket/restic-repo"
export RESTIC_PASSWORD_FILE="/root/.restic-password-s3"
restic backup $BACKUP_PATHS
restic forget --keep-monthly 12 --keep-yearly 7 --prune
Resolución de Problemas
Problemas de Bloqueo
Síntoma: repository is already locked
Solución:
# List locks
restic list locks
# Remove stale lock (if no backup running)
restic unlock
# Force unlock (use with caution)
restic unlock --remove-all
Optimización de Rendimiento
Backups lentos:
# Increase pack size for large files
export RESTIC_PACK_SIZE=64
# Limit upload bandwidth
restic backup --limit-upload 5000 /home
# Increase cache size
restic cache --max-size 2048
Reparación del Repositorio
Repositorio corrupto:
# Rebuild index
restic rebuild-index
# Remove corrupted data
restic prune --unsafe-recover-no-free-space
Conclusión
Restic proporciona una solución de backup moderna, segura y eficiente que equilibra simplicidad con características poderosas. Su deduplicación definida por contenido, cifrado fuerte y soporte flexible de backends lo hacen adecuado para casos de uso que van desde estaciones de trabajo personales hasta infraestructura empresarial.
Puntos clave:
-
Inicializar de forma segura: Elige contraseñas fuertes y protege los archivos de contraseñas apropiadamente.
-
Aprovechar almacenamiento en la nube: Aprovecha el soporte nativo de Restic para S3, B2, Azure y otros proveedores en la nube.
-
Automatizar consistentemente: Implementa temporizadores systemd o trabajos cron con manejo completo de errores.
-
Aplicar políticas de retención: Usa forget/prune regularmente para gestionar el consumo de almacenamiento.
-
Verificar regularmente: Ejecuta verificaciones periódicas de integridad para asegurar la salud del repositorio.
-
Probar la restauración: Practica procedimientos de restauración para asegurar familiaridad y confianza.
-
Implementar regla 3-2-1: Mantén múltiples copias en diferentes backends de almacenamiento y ubicaciones.
Restic destaca en entornos que requieren:
- Flujos de trabajo de backup nativos en la nube
- Requisitos de cifrado fuerte
- Soporte multiplataforma (Linux, macOS, Windows)
- Opciones flexibles de backend de almacenamiento
- Interfaz de línea de comandos simple e intuitiva
Combinado con planificación apropiada, automatización y la estrategia de backup 3-2-1, Restic proporciona protección de datos robusta y verificable para infraestructura moderna.


