Copias de seguridad incrementales en un VPS mediante rsync y cron
Introducción
Las copias de seguridad son esenciales para cualquier VPS. Le protegen frente a eliminaciones accidentales, errores de configuración, corrupción de datos o vulnerabilidades del servidor.
Este manual explica cómo configurar copias de seguridad incrementales utilizando:
- rsync — una herramienta eficaz para copiar archivos
- enlaces duros: para evitar la duplicación de datos en cada copia de seguridad
- cron: para programar copias de seguridad automáticas
Resultado: cada instantánea es como una copia de seguridad completa, pero solo los archivos modificados ocupan espacio adicional. Este enfoque es sencillo, fiable y adecuado para la mayoría de las configuraciones habituales de VPS.
Cómo funcionan las copias de seguridad incrementales con rsync
rsync ofrece dos características clave:
- Sincronización únicamente de los archivos modificados
- Opción
--link-dest: crea enlaces físicos para los archivos que no han cambiado, lo que permite tener varios directorios de copias de seguridad «completas» sin ocupar espacio adicional.
Ejemplo de estructura de directorios:
/backups/ daily.0/ - today's backup daily.1/ - yesterday's backup daily.2/ - backup from 2 days ago
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 como usuario con sudo
- Espacio en disco suficiente para las instantáneas de copia de seguridad
- Opcional: almacenamiento remoto si se realiza la copia de seguridad en otro servidor
Instala rsync si es necesario:
sudo apt update sudo apt install rsync
Detenga los servidores de bases de datos o excluya sus directorios de datos de la copia de seguridad. La copia de seguridad en línea de bases de datos mediante rsync puede provocar que la copia de seguridad de la base de datos resulte dañada.
Creación de los directorios de copia de seguridad
Elige una ubicación para las copias de seguridad. Normalmente:
- Sistema de archivos local:
/backups/ - Disco externo:
/mnt/storage/backups/ - Servidor remoto a través de SSH:
usuario@servidor-de-copias-de-seguridad:/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 de archivo (conserva permisos, propietarios, marcas de tiempo y enlaces simbólicos)--delete— elimina los archivos eliminados en el origen--link-dest: crea enlaces físicos a los archivos que no han cambiado en la instantánea anterior/source/data/— directorio del que se desea realizar una copia de seguridad/backups/daily.0/— instantánea de hoy
Script de rotación para instantáneas diarias
Crea un script para:
- Rotar las copias de seguridad existentes
- Crear una nueva copia de seguridad incremental
- Conservar N días (ejemplo: 7)
Crea un archivo:
sudo nano /usr/local/bin/backup_daily.sh
Pegar:
#!/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/" # Rotate 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 # Prepare backup directories mkdir -p "$BACKUP_DIR/daily.0" if [ ! -d "$BACKUP_DIR/daily.1" ]; then mkdir -p "$BACKUP_DIR/daily.1" fi # Perform incremental backup 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
Guardar y salir. Hacerlo ejecutable:
sudo chmod +x /usr/local/bin/backup_daily.sh
Puedes modificar las variables que aparecen al principio del script para adaptarlo a tus necesidades. Cambia SOURCE por un directorio específico si, por ejemplo, no necesitas una copia de seguridad completa del sistema de archivos raíz.
Excluir directorios innecesarios
Crea un archivo de exclusiones:
sudo nano /etc/backup-exclude.txt
Exclusiones habituales:
/proc/sys/tmp/run/dev/mnt/media/var/cache/copias de seguridad
Programar copias de seguridad con cron
Editar crontab:
sudo crontab -e
Añadir (copia de seguridad a las 03:00 todos los días):
0 3 * * * /usr/local/bin/backup_daily.sh >/var/log/backup.log 2>&1
Esto garantiza la realización de copias de seguridad automáticas periódicas.
Realizar una copia de seguridad en un servidor remoto (opcional)
Si deseas realizar una copia de seguridad externa, sigue los siguientes pasos. Crea una carpeta de destino en el servidor de destino:
mkdir -p /backups
Asegúrate de que las claves SSH estén configuradas. Ejecuta el siguiente comando para generar tu clave SSH:
ssh-keygen
Sustituye <YOUR_REMOTE_USER> por tu nombre de usuario en el servidor remoto, <YOUR_REMOTE_SERVER> por 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 y REMOTE_SERVER en la parte superior de tu archivo backup_daily.sh, sustituye <TU_USUARIO_REMOTO> por tu nombre de usuario en el servidor remoto, <TU_SERVIDOR_REMOTO> por el nombre de dominio de tu servidor remoto y guarda backup_daily.sh para habilitar la copia de seguridad remota.
Subir copias de seguridad a INTROSERV CloudBox
INTROSERV ofrece un servicio de almacenamiento en línea que te permite guardar, de forma automática o manual, copias seguras de tus archivos y datos importantes en servidores remotos. Para utilizarlo como almacenamiento de copias de seguridad remotas, inicia sesión en la interfaz web de CloudBox y añade tu clave pública SSH a tu perfil. La configuración del perfil se encuentra en la esquina superior derecha.

Introduce tu clave pública SSH en la sección «Claves públicas» para subir tu clave al servidor.

Descomente las variables REMOTE_USER y REMOTE_SERVER en la parte superior de su archivo backup_daily.sh, sustituya <YOUR_REMOTE_USER> por su nombre de usuario en el servidor de CloudBox, <YOUR_REMOTE_SERVER> por el nombre de dominio de tu servidor CloudBox y guarda el archivo backup_daily.sh para habilitar la copia de seguridad remota.
Prueba de las copias de seguridad
Antes de confiar plenamente en tu sistema, prueba las copias de seguridad.
- Ejecuta el script manualmente:
sudo /usr/local/bin/backup_daily.sh - Comprueba los tamaños:
du -sh /backups/*.Solo debe haber una copia de seguridad de gran tamaño. - Comprueba la integridad de los archivos:
ls -l /backups/daily.0/etc/
Restauración de datos
Puedes restaurar cualquier archivo individual:
cp /backups/daily.2/etc/nginx/nginx.conf /etc/nginx/
O restaurarlo todo:
sudo rsync -a /backups/daily.0/ /
La restauración de los directorios del sistema sobrescribe los archivos actuales.
Consideraciones de seguridad
- Aplica permisos estrictos a los directorios de copia de seguridad (
chmod 700). - Si utilizas SSH, desactiva el inicio de sesión con contraseña y utiliza únicamente claves.
- Si es posible, no almacenes las copias de seguridad en el mismo disco que el servidor.
- Cifra las copias de seguridad remotas utilizando LUKS o almacenamiento cifrado si es necesario.
Supervisión y registro
El registro ya está configurado en cron: /var/log/backup.log
Compruébalo periódicamente:
tail -f /var/log/backup.log
Conclusión
El uso de rsync con cron ofrece:
- Copias de seguridad incrementales rápidas
- Un uso eficiente del disco mediante enlaces duros
- Proceso de restauración sencillo
- Programación totalmente automatizada
Este método es fiable y sencillo para los administradores novatos, y funciona a la perfección en configuraciones de VPS con Linux.