Cómo automatizar copias de seguridad en Linux con rsync y cron

Última actualización: 28/01/2026
Autor: Isaac
  • Rsync permite sincronizar datos de forma eficiente copiando solo los cambios y preservando permisos, ideal para copias de seguridad locales y remotas.
  • Combinando rsync con claves SSH y tareas programadas en cron se pueden automatizar backups seguros sin intervención manual.
  • Las opciones avanzadas como --delete, --link-dest, --exclude o --dry-run permiten afinar copias completas, diferenciales e incrementales y minimizar errores.
  • Un buen plan de backup con rsync incluye pruebas de restauración, rotación de copias, cifrado de datos sensibles y monitorización mediante logs y alertas.

automatizar copias de seguridad con rsync en linux

Si administras servidores o trabajas a diario con Linux, tarde o temprano te tocará plantearte cómo automatizar copias de seguridad fiables sin complicarte la vida. Ahí es donde entra en juego rsync, una herramienta veterana, muy pulida y perfecta para crear backups rápidos, incrementales y fáciles de programar con cron.

En esta guía vas a ver, con mucho detalle y sin rodeos, cómo usar rsync para hacer copias locales, remotas, completas, diferenciales e incrementales, cómo dejarlo todo automatizado con cron, cómo integrarlo con SSH sin pedir contraseña, qué errores típicos conviene evitar y qué buenas prácticas te ahorrarán sustos el día que algo falle.

Qué es rsync y por qué se usa tanto para backups

Rsync es una utilidad de línea de comandos pensada para sincronizar archivos y directorios entre dos ubicaciones: pueden estar en el mismo equipo, en servidores distintos o incluso en sistemas diferentes como Linux, Unix o macOS.

Su gran ventaja frente a comandos más simples como cp o scp es que no copia todo a lo bruto, sino solo lo que ha cambiado entre origen y destino. Para ello compara ambos lados y aplica un algoritmo que envía solo las diferencias, lo que reduce mucho el tiempo de copia y el ancho de banda consumido.

Además, rsync entiende muy bien los metadatos de los sistemas de archivos: puede conservar permisos, propietarios, grupos, marcas de tiempo, enlaces simbólicos o dispositivos, lo que lo hace ideal para copias de seguridad a nivel de sistema y para migraciones entre servidores.

Otro punto fuerte es que funciona sin problema sobre SSH, heredando el cifrado y la autenticación de este protocolo. De este modo puedes montar un sistema de backup remoto seguro sin tener que montar VPNs ni servicios adicionales, simplemente aprovechando el acceso SSH que ya usas a diario.

Instalación y verificación de rsync en Linux

instalar rsync en linux

En la mayoría de distribuciones modernas, rsync viene instalado por defecto. Aun así, siempre merece la pena comprobar la versión y, si hace falta, instalar o actualizar el paquete desde los repositorios oficiales.

Comprobar si rsync está instalado

En cualquier distribución basada en Debian o Red Hat puedes hacer algo tan sencillo como:

rsync --version

Si el comando devuelve información de versión, ya lo tienes disponible. Si ves un mensaje de «command not found» o similar, toca instalarlo desde el gestor de paquetes.

Instalar rsync en Ubuntu, Debian y derivados

En sistemas tipo Ubuntu o Debian, basta con:

sudo apt update
sudo apt install rsync

Con esto tendrás la versión que proporciona tu distribución, suficiente para copias locales, remotas y automatización con cron en la mayoría de escenarios.

Instalar rsync en Red Hat, CentOS, Rocky Linux y similares

En entornos basados en Red Hat, CentOS, Rocky Linux o AlmaLinux puedes utilizar:

sudo dnf install rsync

El gestor instalará rsync si no está presente y buscará actualizaciones si ya lo tienes, de forma que mantengas una versión reciente en origen y destino.

Sintaxis básica y opciones más usadas de rsync

La forma general del comando es muy directa, pero conviene pillarle el truco a la sintaxis para evitar confusiones con las rutas:

rsync ORIGEN DESTINO

Para sincronizar con un servidor remoto a través de SSH, lo que cambia es la notación de la ruta destino u origen:

rsync /ruta/local usuario@servidor:/ruta/remota

Algunas opciones fundamentales que usarás constantemente son:

  • -a: modo archivo. Agrupa varias opciones (-r, -l, -p, -t, -g, -o, -D) para recorrer subdirectorios y preservar permisos, propietarios, grupos, tiempos, enlaces y dispositivos.
  • -v: modo detallado, muestra lo que se va copiando. Útil para entender qué está haciendo rsync en cada pasada.
  • -z: comprime los datos durante la transferencia, lo que ahorra ancho de banda en enlaces lentos o saturados.
  • --progress: enseña el progreso en tiempo real de los archivos que se están transfiriendo.
  • --delete: elimina en el destino los archivos que ya no existen en el origen, manteniendo una réplica exacta.
  • --exclude: permite excluir archivos o directorios según patrones, por ejemplo --exclude="*.log" o --exclude="tmp/".
  • -e ssh: especifica el shell remoto, normalmente SSH para copias seguras. Suele ser implícito al usar un destino con usuario@host:, pero se puede indicar de forma explícita.
  • --dry-run: modo simulación, muestra qué ocurriría sin copiar ni borrar nada. Perfecto para probar comandos antes de lanzarlos en serio.
  • --log-file=/ruta/log: escribe el detalle de la ejecución en un archivo de log para auditoría o diagnóstico.

Primeros ejemplos prácticos de rsync

Para interiorizar bien cómo se comporta rsync, lo mejor es ver ejemplos sencillos tanto en local como en remoto y observar el efecto que tienen algunas opciones clave.

  Cómo grabar reuniones en Microsoft Teams: guía completa, trucos y herramientas

Copiar un directorio en local

Un ejemplo típico sería replicar un directorio dentro del mismo servidor:

rsync -av /origen/ruta/ /destino/ruta/

Ese comando copiará el contenido de /origen/ruta/ a /destino/ruta/, preservando metadatos. Fíjate en la barra final del origen: indica que quieres sincronizar el contenido del directorio y no el directorio como tal.

Sincronizar con un servidor remoto vía SSH

Si quieres enviar datos a otro servidor de forma segura, basta con introducir el usuario, la IP o dominio del servidor y la ruta remota:

rsync -avz /local/dir/ usuario@192.168.1.50:/backup/remote/dir/

La opción -z añade compresión, muy interesante en redes lentas o con mucha latencia. Si ya dispones de acceso SSH, rsync lo aprovechará directamente sin tener que configurar nada más.

Probar antes de ejecutar con –dry-run

Antes de usar opciones delicadas como --delete, es muy sensato lanzar una simulación:

rsync -avz --dry-run /local/dir/ usuario@remoto:/destino/

De este modo ves qué ficheros se copiarían, actualizarían o eliminarían sin tocar realmente los datos. Es una red de seguridad excelente cuando estás afinando tu comando.

Duplicar dos directorios 1:1

Si el objetivo es que el destino sea un espejo exacto del origen, incluyendo borrados, puedes usar:

rsync -av --delete /fuente/ /destino/

Con esto todo lo que desaparezca del origen acabará borrado en el destino. Ideal para copias que quieren ser una réplica fiel, pero conviene usarlo con cabeza.

Tipos de copia con rsync: completa, diferencial e incremental

Una vez dominada la base, es importante entender cómo modelar tus copias de seguridad. Con rsync puedes implementar copias completas, diferenciales e incrementales sin necesidad de herramientas adicionales, aunque conviene conocer alternativas como tutorial de Restic en Linux.

Copia completa con rsync

Una copia completa transfiere todos los archivos del directorio origen al destino, incluidas las subcarpetas:

rsync -a /ruta/al/directorio/fuente/ /ruta/al/directorio/destino/

Este patrón es el que usarás normalmente la primera vez que configuras un backup. A partir de ahí, las siguientes ejecuciones solo copiarán cambios, pero conceptualmente siguen siendo «completas» en el sentido de que el destino termina con una imagen total del origen.

Copia diferencial con –delete

Si quieres que el destino refleje fielmente el estado actual del origen, incluyendo archivos borrados, puedes añadir:

rsync -a --delete /ruta/al/directorio/fuente/ /ruta/al/directorio/destino/

La opción –delete mantiene el destino sincronizado al milímetro con el origen. Se transferirán solo los archivos nuevos o modificados, y se eliminarán en destino los que ya no existan en origen, funcionando como una copia diferencial continua.

Copia incremental con –link-dest

Para ir un paso más allá y ahorrar todavía más espacio puedes recurrir a copias incrementales basadas en enlaces duros usando la opción --link-dest.

La idea es la siguiente: tienes una copia previa (por ejemplo, del día anterior) y quieres crear una nueva «instantánea» diaria donde solo se almacenen físicamente los bloques que cambian, mientras que los archivos sin cambios se representan como enlaces a la copia anterior.

Un comando típico sería algo así:

rsync -a --link-dest=/backups/dia-anterior/ /datos/ /backups/hoy/

De este modo, en /backups/hoy/ solo se escriben datos nuevos o modificados y el resto de archivos son enlaces al backup anterior,
ahorrando un montón de espacio sin perder la sensación de tener instantáneas completas día a día.

Configurar backups manuales con rsync

Más allá de los conceptos, es crucial saber cómo montar ejemplos reales de backup con rutas concretas, tanto en local como hacia discos externos o servidores remotos.

Copia de seguridad de tu directorio personal

Imagina que quieres hacer una copia de /home/usuario/ hacia un disco montado en /mnt/disco_backup:

rsync -av /home/usuario/ /mnt/disco_backup/

Este comando conserva permisos, propietarios, grupos y tiempos, y deja el contenido del disco externo sincronizado con tu directorio personal.

Backup de configuración del sistema

Para cubrirte las espaldas con la configuración de un servidor, puedes copiar /etc/ a una ruta local o remota:

rsync -avz /etc/ usuario@servidor-remoto:/backup/etc/

Así tendrás siempre una instantánea reciente de los archivos de configuración, muy útil para restauraciones rápidas o para comparar cambios tras una actualización.

Respaldo remoto completo de /home

Un escenario típico en servidores multiusuario es copiar todo /home/ a otra máquina:

rsync -avz --delete /home/usuario/ usuario@servidor-remoto:/ruta/backup/

Con la opción –delete garantizas que el backup sea una réplica exacta. Combinado con -z para comprimir, se consigue una transferencia razonable incluso en redes no demasiado rápidas.

Excluir archivos y directorios innecesarios

En muchos proyectos no tiene sentido copiarlo absolutamente todo: logs, temporales o dependencias descargables suelen sobrar. Para eso puedes usar:

rsync -av --exclude='*.tmp' --exclude='node_modules/' /proyecto/ /backup/proyecto/

De este modo te quedas con lo importante y no llenas el disco de ruido que podrías regenerar fácilmente.

Rsync sobre SSH sin contraseña: preparar el entorno

Para que un sistema de backup automatizado sea realmente cómodo, necesitas que rsync pueda conectarse al servidor remoto sin que te pida contraseña cada vez. La forma estándar de lograrlo es usando autenticación SSH por clave pública.

Generar el par de claves SSH en el equipo origen

En el servidor desde el que vas a lanzar los backups, ejecuta:

  No puedo borrar una notificación en Android: guía completa de soluciones

ssh-keygen -t ed25519

Pulsa Enter en todas las preguntas para usar los valores por defecto. Esto creará una clave privada y otra pública en tu carpeta ~/.ssh/, que servirán para identificarte en el servidor remoto sin contraseña.

Copiar la clave pública al servidor de backups

Una vez tienes el par de claves, sólo queda copiar la pública al servidor destino:

ssh-copy-id backup@192.168.1.50

Sustituye backup y la IP por tu usuario y servidor concretos. Tras introducir la contraseña una vez, la clave quedará registrada en ~/.ssh/authorized_keys en el servidor remoto.

Probar el acceso sin contraseña

Para verificar que todo funciona, prueba a conectarte por SSH:

ssh backup@192.168.1.50

Si entras directamente sin que se solicite contraseña, ya puedes usar rsync de forma no interactiva, ideal para ser llamado desde scripts y tareas de cron.

Automatizar copias de seguridad con cron y rsync

Una vez que tienes tu comando rsync afinado y la autenticación por clave lista, el siguiente paso natural es automatizar las ejecuciones con cron para olvidarte de lanzar backups a mano.

Introducción rápida a cron

cron es el programador de tareas clásico de los sistemas Unix. Permite ejecutar comandos o scripts en intervalos definidos (cada minuto, cada hora, diario, semanal, etc.). Cada usuario tiene su propia tabla con tareas programadas, accesible con:

crontab -e

Las entradas siguen este formato:

MIN HORA DIA-MES MES DIA-SEMANA comando-a-ejecutar

Programar un backup diario con rsync

Supongamos que quieres hacer una copia diaria de /var/backups/ a un servidor remoto a las 2:00 de la mañana:

0 2 * * * rsync -avz /var/backups/ backup@192.168.1.50:/mnt/servidor_backups/

Esta línea en tu crontab se encargará de lanzar el comando todos los días a las 02:00 sin intervención manual, aprovechando la autenticación SSH sin contraseña.

Usar scripts para tareas más complejas

Cuando tus necesidades crecen puede ser más cómodo encapsular la lógica en un script, en lugar de volcar todo en una línea del crontab. Por ejemplo:

vi /usr/local/sbin/rsync_backup.sh

Dentro del script podrías tener algo como:

#!/bin/bash
rsync -avz --delete /home/your_user/ backup@source.domain.com:/backups/home/ --log-file=/var/log/rsync-home.log

Luego lo haces ejecutable con:

chmod +x /usr/local/sbin/rsync_backup.sh

Y en el crontab solo añades:

0 23 * * * /usr/local/sbin/rsync_backup.sh

De este modo separarás claramente la lógica del backup de la programación, facilitando el mantenimiento y la depuración.

Rsync como demonio: backups con contraseña de archivo

Aunque la combinación rsync + SSH suele ser lo más cómodo, también puedes montar un servidor rsync como demonio y autenticarte con archivos de contraseña en vez de con claves SSH.

La configuración típica implicaría editar /etc/rsyncd.conf para definir módulos de datos, usuario, grupo y comportamiento de solo lectura, por ejemplo:

pid file = /var/run/rsyncd.pid
uid = backup-user
gid = backup-user
read only = yes

path = /path/to/backup
list = yes
auth users = backup-user
secrets file = /etc/rsyncd.passwd

El archivo de contraseñas se define en /etc/rsyncd.passwd con contenido del estilo:

backup-user:mi-pass-secreta

Y se protege con:

chmod 0600 /etc/rsyncd.passwd

En el cliente puedes usar:

rsync -a --password-file=/etc/rsyncd.passwd backup-user@source-server-ip::data /destino/path/$(date +%Y-%m-%d)/

Así se generan carpetas de backup organizadas por fecha, manteniendo los datos en solo lectura en el servidor origen para evitar modificaciones accidentales.

Buenas prácticas y checklist para backups con rsync

Montar un backup que funciona está bien, pero montar uno que aguanta años sin darte disgustos requiere seguir algunas buenas prácticas bastante básicas.

Qué incluir en tus copias

Cuando pienses qué respaldar, no te limites a los documentos obvios. Es importante cubrir:

  • Datos críticos: bases de datos, directorios de aplicaciones, ficheros de clientes, pedidos, etc.
  • Configuraciones del sistema: /etc/, archivos de configuración de servicios, virtual hosts, etc.
  • Archivos estáticos: imágenes, contenido web, material multimedia.

Los datos realmente sensibles suelen ser la mezcla de datos de negocio + configuración, porque permiten reconstruir el entorno de trabajo con rapidez.

Frecuencia de los backups

No todos los datos necesitan la misma cadencia. Una regla razonable sería:

  • Datos muy sensibles (bases de datos de producción, sistemas de facturación): copias diarias o incluso cada pocas horas.
  • Datos con cambios moderados: copias diarias o semanales según criticidad.
  • Datos casi estáticos (material de archivo, logs antiguos): copias más espaciadas o snapshots mensuales.

Recuerda que rsync, bien configurado, permite backups incrementales rápidos, así que es mejor pecar de prudente y hacer las copias con más frecuencia que quedarse corto.

Rotación y almacenamiento en varias ubicaciones

No tiene sentido acumular copias hasta llenar el disco. Una estrategia típica consiste en mantener un número limitado de copias (por ejemplo, los últimos 7 días) y borrar las más antiguas según se van creando nuevas.

También es vital distribuir tus backups en diferentes ubicaciones: disco local, servidor remoto, quizá algún almacenamiento en la nube. Así no dependes de un único punto físico.

Cifrado y protección de las copias

Si en los backups se guardan datos sensibles (y suele ser el caso), deberías plantearte cifrarlos con herramientas como GPG o almacenarlos en volúmenes cifrados. De nada sirve tener una política de backup exquisita si luego alguien se lleva un disco de la oficina y puede leerlo sin problemas.

Monitoreo y logs de las tareas

Un backup que falla en silencio no sirve para nada. Es importante:

  • Registrar las ejecuciones en archivos log con --log-file.
  • Revisar los logs periódicamente o integrar alertas (por correo, monitorización, etc.).
  • Hacer pruebas de restauración de vez en cuando para asegurarte de que las copias son realmente utilizables.

Errores frecuentes al usar rsync y cómo evitarlos

rsync es muy fiable, pero hay varios tropiezos clásicos que conviene tener controlados para no liarla justo el día menos oportuno.

Permisos insuficientes

Uno de los fallos más habituales es que el usuario que ejecuta rsync no tenga permisos suficientes para leer en origen o escribir en destino. Si te encuentras con «Permission denied», revisa que:

  • El usuario tiene acceso de lectura al árbol que quieres copiar.
  • La ruta de destino es escribible por ese usuario.
  • Cuando sea necesario, uses sudo en el lado origen/local.

En remoto, asegúrate de que el usuario SSH con el que te conectas tiene permisos sobre las rutas de destino (y, si toca, configura sudo allí también).

Confusiones con rutas relativas, absolutas y barras finales

Las rutas relativas pueden crear malentendidos, especialmente en scripts. Lo más recomendable es usar siempre rutas absolutas que empiecen por «/» para evitar sorpresas según el directorio desde el que se ejecuta el comando.

En cuanto a las barras finales, recuerda:

  • /origen/ → copia el contenido de ese directorio.
  • /origen → copia el directorio en sí dentro del destino.

Si te equivocas aquí es fácil acabar con rutas anidadas de forma extraña, así que revisa bien el comportamiento deseado y apóyate en --dry-run para comprobarlo.

Uso peligroso de –delete

--delete es una opción potentísima y muy útil, pero también es donde más catástrofes se ven. Básicamente indica a rsync que borre en el destino todo lo que no vea en el origen, por lo que un error en la ruta origen puede vaciarte una carpeta buena en el servidor de backups.

Para reducir riesgos:

  • Prueba siempre el comando con --dry-run antes de quitarlo.
  • Revisa dos veces las rutas origen y destino.
  • En entornos muy críticos puedes optar por no usar –delete en todas las pasadas, sino sólo en tareas puntuales.

Problemas con tamaños y exclusiones

En backups muy grandes puede ser interesante limitar qué entra en la copia por tamaño, usando opciones como --max-size o --min-size. Por ejemplo, para copiar solo archivos entre 10 MB y 100 MB:

rsync -av --min-size=10M --max-size=100M /origen/ /destino/

Combinado con patrones de exclusión, te permite filtrar archivos prescindibles como logs inmensos, cachés o temporales, aligerando copias y restauraciones.

Casos de uso reales donde rsync brilla

Más allá de los ejemplos genéricos, hay varios contextos donde rsync se vuelve casi insustituible por su combinación de rapidez, flexibilidad y simplicidad.

E-commerce y aplicaciones de negocio

En tiendas online, ERPs o CRMs alojados en servidores Linux, rsync permite respaldar bases de datos (mediante dumps) y archivos estáticos (imágenes de productos, documentos de clientes, etc.) hacia un servidor de backup o hacia otro centro de datos, reduciendo al mínimo la ventana de pérdida de datos.

Medios, blogs y portales de noticias

En sitios con mucho contenido multimedia y gran volumen de artículos, rsync facilita:

  • Sincronizar los directorios de contenido estático entre servidores (por ejemplo, entre un servidor principal y uno de respaldo).
  • Copiar periódicamente capturas de bases de datos y ficheros clave a almacenamiento externo.

Al transferir solo lo que ha cambiado, las pasadas de backup son rápidas, incluso con mucha cantidad de imágenes o vídeos.

Entornos de desarrollo y CI/CD

En pipelines de integración y despliegue continuo, rsync se usa a menudo para:

  • Sincronizar código fuente y artefactos compilados hacia servidores de staging o producción.
  • Replicar directorios entre distintos nodos de una granja de servidores.
  • Actualizar solo la parte modificada de una aplicación, sin tener que re-subirlo todo en cada release.

Su combinación de velocidad, soporte SSH y preservación de permisos lo hace muy amigable para automatización con scripts y herramientas DevOps.

Con todo lo visto, rsync se convierte en una especie de navaja suiza para copias de seguridad y sincronización de archivos: sirve igual para un backup casero de tu carpeta personal que para la estrategia de respaldo de una flota de servidores en producción. Si lo combinas con claves SSH, cron, buenas prácticas de rotación, pruebas periódicas de restauración y algo de sentido común al usar opciones como --delete, tendrás un sistema de copias potente, flexible y muy robusto sin necesidad de desplegar soluciones pesadas o complejas.

tutorial restic en linux
Artículo relacionado:
Tutorial completo de Restic en Linux para copias de seguridad seguras