...

Copia de seguridad automática mediante rsync: seguridad de datos para administradores

Automatizo mi copia de seguridad rsyncpara evitar fallos y mantener previsibles las recuperaciones. Con Cron jobsTransporte SSH y ejecuciones incrementales, aseguro eficientemente servidores web, bases de datos y configuraciones.

Puntos centrales

  • AutomatizaciónLos trabajos controlados por tiempo reducen los errores y el esfuerzo.
  • EficaciaLa transferencia delta ahorra ancho de banda y memoria.
  • SeguridadSSH, gestión de claves y objetivos externos.
  • EstrategiaRetención GFS y objetivos RPO/RTO claros.
  • TransparenciaPruebas de registro, supervisión y restauración.

Por qué automatizo las copias de seguridad

Aseguro sistemáticamente los sistemas productivos porque un solo fallo puede paralizar proyectos enteros y yo Disponibilidad quiere garantizar. Una copia de seguridad programada a las 02:00 sustituye al trabajo manual, propenso a errores, y garantiza un estado limpio de los datos. Defino objetivos claros para cada servidor: Cuánta pérdida de datos es aceptable (RPO) y con qué rapidez debe producirse la recuperación (RTO). Estos objetivos influyen en el calendario, el objetivo de almacenamiento y las opciones para que pueda salvaguardar las operaciones de forma fiable. Para los servidores web en particular, reduzco los riesgos de defectos de hardware, ransomware o borrado accidental a un mínimo calculable.

rsync explicado brevemente: Funcionalidad y puntos fuertes

rsync sólo transfiere los cambios, utiliza un eficiente Transferencia Delta y evita copias innecesarias. Esto reduce significativamente los tiempos de ejecución, la carga de red y la IO en el sistema de destino. Trabajo en modo archivo (-a) para que los permisos, tiempos, propietarios y enlaces simbólicos permanezcan consistentes. Mantengo las réplicas actualizadas con -delete, pero presto atención al uso previsto y lo combino con directorios separados para el versionado. Utilizo SSH para el transporte, rutas directas para trabajos locales y añado compresión (-z) y límite de ancho de banda (-bwlimit) si es necesario.

Automatización con Cron: paso a paso

Empiezo con un guión sencillo, porque claro Líneas de base puede ampliarse más adelante. Primero instalo rsync, si falta, y creo un directorio de trabajo seguro para los registros y el estado. A continuación, escribo un script con las fuentes, el destino y las opciones adecuadas, incluidas las exclusiones. El cronjob se ejecuta a diario o cada hora en función del RPO y escribe archivos de registro para evaluación y alerta. Una ejecución en seco (-n) antes de la primera ejecución productiva evita eliminaciones no deseadas.

Instalación de # (Debian/Ubuntu)
sudo apt-get install rsync

# Ejecución mínima local
rsync -a /data/www/ /backup/www/

# Espejo remoto vía SSH con borrados
rsync -a --delete -e "ssh -i /root/.ssh/clave_backup" /data/www/ backup@backuphost:/srv/backups/www/

# Cron: diariamente a las 02:00 a.m.
0 2 * * * * /usr/local/bin/rsync-backup.sh >> /var/log/rsync-backup.log 2>&1

Configurar copias de seguridad SSH de forma segura

Utilizo claves SSH con derechos limitados porque Gestión de claves reduce la superficie de ataque. En el sistema de destino, limito los comandos mediante authorised_keys y utilizo un usuario de copia de seguridad independiente. Fail2ban, reglas de cortafuegos y opciones SSH restrictivas (por ejemplo, PasswordAuthentication no) aumentan la seguridad. Almaceno la clave del host para que el man-in-the-middle no tenga ninguna oportunidad. Si buscas un comienzo estructurado, puedes encontrar ideas probadas en Automatizar las copias de seguridad.

Tirar en vez de empujar: las ventajas de la seguridad en la práctica

En la medida de lo posible, dejo el Copia de seguridad del servidor en lugar de empujar el servidor de producción. Esto deja a los sistemas de producción sin claves de salida, y un servidor web comprometido no puede borrar las copias de seguridad externas. En el objetivo, limito la clave en el authorised_keys con opciones restrictivas y un comando forzado.

# Ejemplo authorised_keys en el destino de copia de seguridad
from="10.0.0.10",no-agent-forwarding,no-pty,no-port-forwarding,no-X11-forwarding,command="/usr/local/bin/rsync-serve-backups"
/home/backup/.ssh/authorised_keys

El script llamado sólo permite llamadas al servidor rsync y establece límites de ruta. Así es como consigo un Principio de derechos mínimossin complicar el funcionamiento.

Control de versiones y almacenamiento con enlaces duros

Para varios stands construyo carpetas diarias, semanales y mensuales con -link-dest, porque Enlaces duros Ahorra memoria y simplifica las restauraciones. Cada generación se refiere a archivos idénticos y sin cambios de la copia de seguridad anterior; los archivos nuevos o modificados acaban físicamente en la nueva carpeta. Esto me permite conseguir muchos puntos de restauración con unos requisitos de almacenamiento moderados. Elimino las generaciones antiguas con un simple script de rotación sin poner en riesgo la coherencia de los datos. Un calendario fijo (por ejemplo, 7 días, 4 semanas, 6 meses) mantiene la planificación del almacenamiento clara y transparente.

Recursos de control: Ancho de banda, CPU y E/S

Limito el caudal de datos con -bwlimit para que Carga productiva permanece estable y los usuarios no experimentan pérdidas. Utilizo nice e ionice para priorizar los procesos de copia de seguridad. En redes lentas activo la compresión (-z), en medios locales rápidos la dejo desactivada. Para archivos grandes, selecciono -partial para poder continuar con las transferencias canceladas. Para las réplicas locales, suelo utilizar -whole-file porque el algoritmo delta no tiene ventajas en este caso.

Estados coherentes de los datos: instantáneas y bases de datos

Para mantener copias de seguridad coherentes a pesar de los archivos abiertos, utilizo Instantáneas o ganchos de aplicación. Los sistemas de archivos como LVM, ZFS o Btrfs permiten instantáneas rápidas, que utilizo como fuente para rsync. Esto me permite congelar lógicamente el estado de los datos sin bloquear los servicios durante mucho tiempo.

# Ejemplo: Instantánea LVM como fuente consistente
lvcreate -L 10G -s -n instant_datos /dev/vg0/datos
mount /dev/vg0/snap_datos /mnt/snap_datos
rsync -a --delete /mnt/data_snap/www/ backup@host:/srv/backups/www/
umount /mnt/data_snap
lvremove -f /dev/vg0/data_snap

Para Bases de datos Separo la lógica y los archivos. Hago copias de seguridad de MySQL/MariaDB mediante dump o soluciones Percona/Xtra, de PostgreSQL con pg_dump o basebackups. La secuencia es importante: primero crear un dump consistente, luego transferir la ruta del dump vía rsync. Así se evitan archivos a medio escribir en la copia de seguridad.

Fuentes típicas de error y cómo evitarlas

El obstáculo más común es la barra al final de una ruta, así que compruebo Detalles de la ruta doble: /src/ frente a /src. Pruebo las exclusiones con -dry-run y -itemise-changes para ver el efecto. Entrecomillo correctamente los patrones con espacios y guardo el fichero de exclusión en el repositorio. Antes de -delete compruebo los montajes, porque un objetivo no montado puede llevar a un borrado no deseado. Por último, registro los códigos de retorno y activo las alarmas para poder ver los errores inmediatamente.

Estrategia de copia de seguridad: GFS y objetivos de recuperación

Primero establezco RPO/RTO, porque claro Objetivos guían todas las decisiones sobre frecuencia, lugar de almacenamiento y conservación. Un esquema habitual es GFS: diferencial diario, semanal completo o fusionado mediante enlaces duros, mensual a largo plazo. Los requisitos de conformidad influyen en el periodo de conservación, por lo que separo los datos operativos de corta duración de los archivos a largo plazo. Para los sistemas críticos, planifico copias de seguridad externas además de copias locales. Esta combinación protege contra fallos del sitio y permite restauraciones rápidas y remotas.

Cron o systemd-timer: planificación fiable

Cron es sencillo y robusto. Para hosts que ocasionalmente duermen o se reinician, también uso systemd-timer con dependencias y gestión de ejecuciones fallidas. Esto garantiza que no se produzcan errores de ejecución tras un reinicio y que la secuencia sea correcta (por ejemplo, tras la recuperación de la red).

# /etc/systemd/system/rsync-backup.service
[Unidad]
Descripción=Rsync Backup
Después=red-online.destino
Wants=network-online.target

[Servicio]
Tipo=oneshot
ExecStart=/usr/local/bin/rsync-backup.sh
Nice=10
IOSchedulingClass=mejor-esfuerzo
IOSchedulingPriority=7

# /etc/systemd/system/rsync-backup.timer
[Unidad]
Descripción=Temporizador de copia de seguridad diaria de Rsync

[Temporizador]
OnCalendar=02:00
Persistente=true

[Instalar]
WantedBy=timers.target

Tabla: Opciones importantes de rsync en la vida cotidiana

Utilizo unos pocos, pero eficaces Opcionesque documento para cada trabajo y versión en el repositorio. El modo de archivo constituye la base y reduce los errores de configuración. Mantengo las réplicas limpias con -delete, pero sólo lo uso con la comprobación de destino correcta. Para el versionado, combino -link-dest con un plan de rotación. La siguiente tabla muestra los switches más importantes y su uso.

Opción Propósito Nota
-a Modo de archivo Asume derechos, tiempos, propiedad para Coherencia
-z Compresión Útil para WAN, a menudo se omite localmente
-borrar Elimina los archivos heredados eliminados Utilizar sólo con espejos, secar previamente
-bwlimit=KBPS Ancho de banda del acelerador Protege Sistemas productivos de los picos de carga
-enlace-dest=DIR Control de versiones mediante enlaces físicos Generaciones económicas con carpetas separadas
-e "ssh ..." Transporte seguro Claves, claves de host, usuarios restrictivos
-n / -dry-run Prueba de funcionamiento sin cambios Muestra las acciones planificadas con antelación

Prueba de recuperación: ejercicios de restauración

Pruebo regularmente la restauración, porque una copia de seguridad sin restauración es sólo Apariencia es. Para las muestras, restauro archivos individuales y webroots enteros en entornos de ensayo. Hago copias de seguridad de las bases de datos por separado mediante volcados y las importo a modo de prueba para comprobar su coherencia. Las sumas de comprobación me ayudan a confirmar la integridad y a reconocer errores de bits silenciosos. Después de cada prueba, adapto la documentación, los scripts y los playbooks para que la siguiente emergencia se ejecute más rápidamente.

Copias de seguridad básicas y del sistema: características especiales

Para las copias de seguridad del sistema o bare-metal, amplío las opciones de rsync a ACLs, xattrs y hardlinks para llevar contigo. En Linux, -aAXH y -numeric-ids han demostrado su eficacia. Excluyo los pseudosistemas de archivos como /proc, /sys, /run, /dev/pts y hago copias de seguridad de los archivos de arranque y configuración por separado.

# Copia de seguridad del sistema (ejemplo)
rsync -aAXH --numeric-ids \
  --exclude={"/proc/*","/sys/*","/run/*","/dev/pts/*","/tmp/*"} \
  / root@backup:/srv/backups/hostA/current/

# Restaurar (simplificado, desde medio en vivo)
rsync -aAXH --numeric-ids /srv/backups/hostA/current/ /mnt/target/
chroot /mnt/target update-initramfs -u
grub-install /dev/sda && update-grub

Planifico más tiempo para estas restauraciones, documento la secuencia y tengo a mano los pasos del cargador de arranque. Esto reduce significativamente el estrés en caso de emergencia.

Integración con Plesk: combinar inteligentemente los trabajos del panel

Combino las tareas de Plesk con rsync para que Copias de seguridad del panel y las copias externas funcionan conjuntamente. Los ganchos posteriores a la copia de seguridad transfieren inmediatamente copias de seguridad nuevas al almacenamiento externo. Las programaciones coinciden con las ventanas de mantenimiento para que los despliegues y las copias de seguridad no interfieran entre sí. La rotación de registros en el panel y en el sistema de destino evita el crecimiento de los directorios de registros. Un buen punto de partida es Mejores prácticas de Plesk con especial atención a los procesos repetibles.

Integración con cPanel: Homedirs y bases de datos

A continuación, tirar de copias de seguridad de cPanel a un host externo a través de rsync para que Protección externa permanece sin carga adicional. La estructura de directorios facilita la restauración selectiva de cuentas individuales. Para las grandes configuraciones de revendedores, planifico las ejecuciones diferenciales durante la noche y los soportes completos durante el fin de semana. En combinación con cuotas y rotaciones, mantengo transparentes los requisitos de almacenamiento. Un añadido práctico son las notas sobre Copias de seguridad de cPanel para unas operaciones cotidianas sólidas.

Escalado y estructura: gestión limpia de muchos trabajos

Cuando los entornos crecen, estructuro las fuentes y las exclusiones de forma centralizada. Con -archivos-de Transfiero listas que versiono en el repo. De esta forma cambio los registros sin tocar los scripts y mantengo la coherencia de las ubicaciones.

Archivos #-de ejemplo
/etc/backup/www.list
/data/www/
/etc/nginx/
/var/www/html/

rsync -a --delete --files-from=/etc/backup/www.list / backup@host:/srv/backups/www/

Evito solapamientos separando claramente la responsabilidad de las rutas (por ejemplo, Webroot por separado de los registros). Para grandes conjuntos, planifico conscientemente el paralelismo: prefiero unos pocos trabajos bien sincronizados que docenas de procesos en competencia.

Robustez de funcionamiento: bloqueo, reintentos, tiempos de espera

Para evitar solapamientos, utilizo flock o lockfiles. Intercepto problemas de red con Retries y -partial. Con -timeout termino las conexiones colgadas limpiamente y doy la alarma.

# /usr/local/bin/rsync-backup.sh (extracto)
# /usr/bin/env bash
set -euo pipefail

exec 9> /var/lock/rsync-backup.lock
flock -n 9 || { echo "Backup already running"; exit 1; }

LOG=/var/log/rsync-backup.log
SRC=/data/www/
DST=backup@backuphost:/srv/backups/www/

for i in {1..3}; do
  if rsync -a --delete --partial --timeout=600 -e "ssh -i /root/.ssh/backup_key" "$SRC" "$DST"; then
    echo "OK"; exit 0
  fi
  echo "Reintentar $i" | tee -a "$LOG"
  sleep 60
hecho
echo "Error tras reintentos" >> "$LOG"; exit 1

Opciones para casos especiales: ACLs, xattrs, sparse y atomicidad

Adapto rsync en función del tipo de datos. Para las rutas web y del sistema, hago copias de seguridad de ACLs y xattrs con -A -X. Los archivos grandes y poco utilizados (imágenes de máquinas virtuales, bases de datos) se benefician de -sparse. Con -delay-updates y -delete-delay Minimizo los estados intermedios y consigo actualizaciones casi atómicas en el destino. Para los datos sensibles, evito -inplace para que las transferencias defectuosas no sobrescriban la última copia buena.

# Ejemplo para metadatos extensos
rsync -aAXH --sparse --delete-delay --delay-updates SRC/ DST/

Si necesito directorios absolutamente atómicos (por ejemplo, para la puesta en escena), sincronizo a un destino temporal y ejecute a continuación, utilice mv para cambiar al directorio en vivo.

Límites de supresión seguros y controles de verosimilitud

Para evitar desastres causados por una configuración incorrecta, he configurado -máx-borrar que Guardrail. También compruebo los montajes, la memoria libre y los inodos antes de la ejecución. Tengo registrada la última copia de seguridad realizada con éxito y advierto de los valores atípicos (tasas extremas de borrado o modificación).

# Protección contra el borrado masivo
rsync -a --delete --max-delete=5000 SRC/ DST/

# Comprobación de plausibilidad (simple)
df -h /srv/backups
df -i /srv/backups

Brevemente resumido: Así es como procedo

Primero defino RPO/RTO, porque está claro Prioridades guiar cada elección técnica. A continuación, escribo una secuencia de comandos sencilla, la pruebo con -dry-run y registro cada ejecución. Con claves SSH, límites de ancho de banda y control de versiones, hago copias de seguridad eficientes y trazables. Los destinos externos complementan las copias locales, y los ejercicios regulares de restauración confirman su idoneidad. Así, mi copia de seguridad rsync sigue siendo fiable, rápida y siempre está lista para usar.

Artículos de actualidad