Copias de seguridad incrementales en un VPS usando rsync y cron
Introducción
Las copias de seguridad son esenciales para cualquier VPS. Te protegen de eliminaciones accidentales, errores de configuración, corrupción de datos o compromisos del servidor.
Este manual explica cómo configurar copias de seguridad incrementales usando:
- rsync — herramienta eficiente de copia de archivos
- enlaces duros — para evitar datos duplicados en cada copia de seguridad
- cron — para programar copias de seguridad automáticas
Resultado: cada instantánea parece una copia de seguridad completa, pero solo los archivos cambiados ocupan espacio adicional. Este enfoque es simple, confiable y adecuado para la mayoría de las configuraciones comunes de VPS.
Cómo funcionan las copias de seguridad incrementales con rsync
rsync proporciona dos características clave:
- Sincronización de solo archivos cambiados
- Opción
--link-dest: crea enlaces duros para archivos no cambiados, permitiendo múltiples directorios de copia de seguridad "completos" sin consumir espacio adicional.
Ejemplo de estructura de directorios:
/backups/ daily.0/ - copia de seguridad de hoy daily.1/ - copia de seguridad de ayer daily.2/ - copia de seguridad de hace 2 días
Cada carpeta aparece como una copia de seguridad completa, pero solo las diferencias ocupan espacio.
Requisitos previos
En el VPS:
- Instalación de Linux
- Acceso como root o usuario con sudo
- Suficiente espacio en disco para instantáneas de copia de seguridad
- Opcional: almacenamiento remoto si se realiza una copia de seguridad en otro servidor
Instala rsync si es necesario:
sudo apt update
sudo apt install rsync
Advertencia: Detén tus servidores de bases de datos o excluye sus directorios de datos de la copia de seguridad. La copia de seguridad de bases de datos en línea a través de rsync puede causar una copia de seguridad de base de datos corrupta.
Creación de los directorios de copia de seguridad
Elige una ubicación para las copias de seguridad. Usualmente:
- Sistema de archivos local:
/backups/ - Disco externo:
/mnt/storage/backups/ - Servidor remoto vía SSH:
user@backup-server:/data/backups/
Ejemplo (local):
sudo mkdir -p /backups
sudo chmod 700 /backups
Comando básico de rsync para copias de seguridad incrementales
A continuación se muestra el comando clave de rsync:
rsync -a --delete \ --link-dest=/backups/daily.1 \ /source/data/ \ /backups/daily.0/
Explicación:
-a— modo archivo (preserva permisos, propietarios, marcas de tiempo, enlaces simbólicos)--delete— elimina archivos eliminados en la fuente--link-dest— crea enlaces duros a archivos no cambiados en la instantánea anterior/source/data/— directorio que deseas respaldar/backups/daily.0/— instantánea de hoy
Script de rotación para instantáneas diarias
Crea un script para:
- Rotar copias de seguridad existentes
- Crear una nueva copia de seguridad incremental
- Mantener N días (ejemplo: 7)
Crea el archivo:
sudo nano /usr/local/bin/backup_daily.sh
Pega:
#!/bin/bash BACKUP_DIR="/backups/" SOURCE="/" EXCLUDE="/etc/backup-exclude.txt" DAYS="7" #REMOTE_USER="<YOUR_REMOTE_USER>" #REMOTE_SERVER="<YOUR_REMOTE_SERVER>" REMOTE_DIR="/backups/" # Rotar for ((i=DAYS-1; i>=0; i--)); do if [ -d "$BACKUP_DIR/daily.$i" ]; then rm -rf "$BACKUP_DIR/daily.$((i+1))" mv "$BACKUP_DIR/daily.$i" "$BACKUP_DIR/daily.$((i+1))" fi done # Preparar directorios de copia de seguridad mkdir -p "$BACKUP_DIR/daily.0" if [ ! -d "$BACKUP_DIR/daily.1" ]; then mkdir -p "$BACKUP_DIR/daily.1" fi # Realizar copia de seguridad incremental rsync -a --delete \ --link-dest="$BACKUP_DIR/daily.1" \ --exclude-from="$EXCLUDE" \ "$SOURCE" "$BACKUP_DIR/daily.0" if [ -n "$REMOTE_USER" ] && [ -n "$REMOTE_SERVER" ] && [ -n "$REMOTE_DIR" ]; then rsync -azv --delete "$BACKUP_DIR" "$REMOTE_USER@$REMOTE_SERVER:$REMOTE_DIR" fi
Guarda y sal. Hazlo ejecutable:
sudo chmod +x /usr/local/bin/backup_daily.sh
Puedes cambiar las variables en la parte superior del script para ajustarlo a tus necesidades. Cambia SOURCE a un directorio específico si no necesitas una copia de seguridad completa del sistema de archivos raíz, por ejemplo.
Excluyendo directorios innecesarios
Crea un archivo de exclusión:
sudo nano /etc/backup-exclude.txt
Exclusiones típicas:
/proc/sys/tmp/run/dev/mnt/media/var/cache/backups
Programando copias de seguridad con cron
Edita crontab:
sudo crontab -e
Agrega (copia de seguridad a las 03:00 diariamente):
0 3 * * * /usr/local/bin/backup_daily.sh >/var/log/backup.log 2>&1
Esto asegura instantáneas automáticas regulares.
Realizando copias de seguridad en un servidor remoto (opcional)
Si deseas una copia de seguridad fuera del sitio, sigue los siguientes pasos. Crea una carpeta de destino en el servidor objetivo:
mkdir -p /backups
Asegúrate de que las claves SSH estén configuradas. Ejecuta el siguiente comando para generar tu clave SSH:
ssh-keygen
Reemplaza <YOUR_REMOTE_USER> con tu nombre de usuario en el servidor remoto, <YOUR_REMOTE_SERVER> con el nombre de dominio de tu servidor remoto y ejecuta el siguiente comando para copiar tu clave SSH al servidor remoto:
ssh-copy-id <YOUR_REMOTE_USER>@<YOUR_REMOTE_SERVER>
Descomenta las variables REMOTE_USER, REMOTE_SERVER en la parte superior de tu backup_daily.sh, reemplaza <YOUR_REMOTE_USER> con tu nombre de usuario en el servidor remoto, <YOUR_REMOTE_SERVER> con el nombre de dominio de tu servidor remoto y guarda backup_daily.sh para habilitar la copia de seguridad remota.
Subiendo copias de seguridad a INTROSERV CloudBox
INTROSERV proporciona almacenamiento en línea que te permite guardar automáticamente o manualmente copias seguras de tus archivos y datos importantes en servidores remotos. Para usarlo como tu almacenamiento de copia de seguridad remota, inicia sesión en la interfaz web de CloudBox y agrega tu clave ssh pública al perfil. Los ajustes del perfil se encuentran en la esquina superior derecha.

Inserta tu clave SSH pública en la sección "Claves públicas" para subir tu clave al servidor.

Descomenta las variables REMOTE_USER, REMOTE_SERVER en la parte superior de tu backup_daily.sh, reemplaza <YOUR_REMOTE_USER> con tu nombre de usuario en el servidor CloudBox, <YOUR_REMOTE_SERVER> con el nombre de dominio de tu servidor CloudBox y guarda backup_daily.sh para habilitar la copia de seguridad remota.
Probando las copias de seguridad
Antes de confiar en tu sistema, prueba las copias de seguridad.
- Ejecuta el script manualmente:
sudo /usr/local/bin/backup_daily.sh - Verifica los tamaños:
du -sh /backups/*. Debe haber solo una copia de seguridad grande. - Verifica la integridad de los archivos:
ls -l /backups/daily.0/etc/
Restaurando datos
Puedes restaurar cualquier archivo individual:
cp /backups/daily.2/etc/nginx/nginx.conf /etc/nginx/
O restaurar todo:
sudo rsync -a /backups/daily.0/ /
Advertencia: Restaurar directorios del sistema sobrescribe los archivos actuales.
Consideraciones de seguridad
- Usa permisos estrictos en los directorios de copia de seguridad (
chmod 700). - Si usas SSH, desactiva el inicio de sesión con contraseña, usa solo claves.
- No almacenes copias de seguridad en el mismo disco que el servidor si es posible.
- Encripta las copias de seguridad remotas usando LUKS o almacenamiento encriptado si es necesario.
Monitoreo y registro
El registro ya está agregado en cron: /var/log/backup.log
Revisa regularmente:
tail -f /var/log/backup.log
Conclusión
Usar rsync con cron ofrece:
- Copias de seguridad incrementales rápidas
- Uso eficiente del disco a través de enlaces duros
- Proceso de restauración simple
- Programación completamente automatizada
Este método es confiable y fácil para administradores novatos y funciona perfectamente en configuraciones de VPS con Linux.