Copias de seguridad incrementales con rsync y cron
- rsync
- backup
- cron
- vps
- infraestructura
Las copias de seguridad no son una opción, son una obligación. Cualquier dato crítico en un servidor, ya sea de producción o de desarrollo, necesita un backup fiable. El problema es que hacer copias completas cada día consume espacio y tiempo de forma ineficiente.
Aquí es donde entran en juego las copias de seguridad incrementales con rsync y cron, una combinación que permite guardar solo los cambios, optimizando el uso de disco y la velocidad de ejecución.
Eficiencia de los backups incrementales
Un backup incremental guarda solo los archivos que han cambiado desde la última copia de seguridad, ya sea completa o incremental. Esto contrasta con los backups completos, que duplican todo el contenido cada vez. La principal ventaja es el ahorro de espacio en disco y una reducción drástica en el tiempo de ejecución.
Si los datos cambian con frecuencia, los backups incrementales son la única estrategia sensata. Permiten mantener un historial de versiones sin llenar el disco en pocos días.
Gestión de backups incrementales con rsync
rsync es la herramienta estándar de Linux para sincronizar archivos de forma eficiente. Su funcionamiento reside en que compara los archivos en origen y destino, transfiriendo solo las diferencias. Para crear backups incrementales “tipo Time Machine”, utiliza la opción --link-dest.
Esta opción crea enlaces duros a los archivos inalterados de un backup anterior, en lugar de copiarlos de nuevo. Esto significa que solo los archivos nuevos o modificados ocupan espacio adicional, mientras que los inalterados solo añaden una entrada de directorio.
Un comando rsync básico para un backup incremental podría ser:
#!/bin/bash
SOURCE="/var/www/mi-app/"
DESTINATION="/mnt/backups/mi-app/"
LAST_BACKUP=$(ls -td $DESTINATION/*/ | head -1) # Encuentra el último backup
# Crea un directorio con la fecha actual
CURRENT_BACKUP="$DESTINATION$(date +%Y-%m-%d_%H-%M-%S)"
mkdir -p "$CURRENT_BACKUP"
rsync -avh --delete \
--link-dest="$LAST_BACKUP" \
"$SOURCE" "$CURRENT_BACKUP"
# Envía una alerta si rsync falla
if [ $? -ne 0 ]; then
echo "¡Error en el backup de mi-app!" | mail -s "Backup fallido" [email protected]
fi
Este script crea un nuevo directorio para cada backup. Los archivos que no han cambiado desde el LAST_BACKUP se enlazan desde allí, mientras que los nuevos o modificados se copian directamente.
Programación de backups con cron
cron es el demonio de planificación de tareas en sistemas Unix/Linux. Permite ejecutar scripts o comandos a intervalos regulares, lo que lo hace perfecto para automatizar los backups. Para editar las tareas de cron de tu usuario, usa crontab -e.
Una entrada de crontab para ejecutar el script de backup cada noche a las 3 AM sería:
0 3 * * * /usr/local/bin/backup_mi_app.sh >> /var/log/backup_mi_app.log 2>&1
Redirigir la salida y los errores a un archivo de log es necesario para auditar cada ejecución. Un problema en cron que no genera logs es un problema invisible. Para una gestión más granular de los logs, revisa cómo organizar la gestión de logs en tu VPS.
rsync, cron y el almacenamiento: ventajas y desventajas
Lo que ganas:
- Eficiencia de espacio: Solo los cambios reales consumen nuevo espacio, ideal para retener múltiples versiones.
- Rapidez: Las ejecuciones diarias son rápidas porque
rsyncsolo transfiere datos modificados. - Control granular: Tienes control total sobre dónde y cómo se guardan tus copias de seguridad.
Lo que complicas:
- Gestión de la rotación: Necesitas un script adicional para limpiar copias antiguas (por ejemplo, borrar backups de más de 30 días).
- Recuperación: Puede ser más compleja que restaurar un backup completo, ya que implica entender la estructura de enlaces duros.
- Monitorización: Requiere configurar alertas para saber si el script de
cronfalla.
Requisitos no negociables:
- Backups externos: Las copias de seguridad deben estar en un almacenamiento separado del servidor de origen, idealmente fuera del mismo proveedor o data center.
- Verificación: Debes probar periódicamente la restauración de datos desde tus backups para asegurarte de que son funcionales.
Si estás montando tu estrategia de copias de seguridad para clientes, tengo un artículo sobre estrategias de backups para VPS de clientes que profundiza en estos puntos. Para evitar problemas comunes, revisa también los errores frecuentes al usar cron jobs en un VPS. Y si quieres estar al tanto de cualquier fallo, considera implementar alertas de Telegram para tu servidor.
Técnico freelance especializado en desarrollo a medida, automatizaciones con IA y gestión técnica para negocios en España. Más sobre mí →
¿Necesitas que alguien se ocupe de tu web?
Me encargo de que tu web funcione, esté segura y actualizada. Backups, actualizaciones y soporte directo. Planes desde 49 €/mes.