Tutorial para automatizar copias de seguridad con rsync en Linux

  • Rsync permite copiar y sincronizar solo los cambios entre origen y destino, conservando permisos y metadatos, lo que lo hace ideal para tareas de backup en Linux.
  • Combinado con SSH y cron, rsync ofrece copias de seguridad remotas, seguras y totalmente automatizadas, sin necesidad de intervención manual.
  • Las opciones como --delete, --exclude, --dry-run o --link-dest permiten implementar copias completas, diferenciales e incrementales adaptadas a cada entorno.
  • Una buena política de backups con rsync exige revisar permisos, espacio, logs y pruebas de restauración para evitar errores típicos que puedan comprometer los datos.

cómo hacer copias de seguridad en Linux con comandos

Si administras servidores Linux o simplemente no quieres jugarte tus datos, tarde o temprano necesitas un sistema de copias de seguridad que funcione solo y no dependa de que te acuerdes de lanzarlo a mano. En este contexto, rsync más cron es una combinación brutalmente eficaz: flexible, rápida, segura y disponible prácticamente en cualquier distro.

En esta guía vamos a ver cómo montar un sistema de backups automatizados con rsync en Linux paso a paso: desde qué es rsync y cómo funciona, pasando por ejemplos prácticos (locales y remotos), hasta la creación de scripts, su programación con cron, buenas prácticas, errores típicos y escenarios avanzados como copias incrementales con --link-dest o uso del servicio rsyncd.

¿Qué aprenderás en esta guía?

  • Conceptos clave de rsync, sus ventajas frente a otros comandos y sus opciones más útiles.
  • Cómo hacer copias de seguridad manuales y automatizadas con rsync y cron, tanto en local como a través de SSH.
  • Distintos tipos de backup (completo, diferencial, incremental) aplicados a rsync con ejemplos claros.
  • Buenas prácticas, checklist y errores frecuentes al usar rsync para que no pierdas datos por un despiste.
Steam Windows 10
Artículo relacionado:
Copias de seguridad del Registro de Windows: guía completa

¿Qué es rsync y por qué es tan usado para backups?

El comando rsync es una herramienta de línea de comandos pensada para sincronizar archivos y directorios entre dos ubicaciones, ya sea dentro del mismo equipo o entre máquinas distintas a través de la red. A diferencia de un simple cp o de scp, rsync no copia todo otra vez: detecta qué ha cambiado y transfiere solo las diferencias.

Ese comportamiento incremental se consigue gracias a un algoritmo que compara origen y destino y decide qué bloques de datos hace falta enviar. Esto se traduce en un ahorro brutal de tiempo y ancho de banda, sobre todo cuando trabajas con árboles de directorios grandes donde solo cambian unos cuantos ficheros cada día.

Características principales de rsync

Rsync destaca por una serie de funciones que lo hacen ideal para copias de seguridad y sincronización de sistemas completos. Entre las más útiles están las siguientes:

  • Sincronización diferencial e incremental: solo se transfieren los bloques modificados de cada archivo, lo que permite hacer backups frecuentes sin saturar la red.
  • Operación local o remota: puedes usar rsync entre directorios del mismo equipo, o entre servidores a través de SSH o del demonio propio de rsync (rsyncd).
  • Compresión en tránsito: con la opción -z, los datos se envían comprimidos, algo muy útil si el enlace es lento.
  • Conservación de metadatos: mantiene permisos, propietarios, grupos, marcas de tiempo, enlaces simbólicos y archivos especiales, algo crítico en entornos de servidor.
  • Modo de ejecución en seco: con --dry-run puedes ver exactamente qué haría rsync sin tocar nada, perfecto para evitar desastres.
  • Reanudación y robustez: si una transferencia se corta, rsync reanuda sin volver a empezar desde cero, y salta los archivos ya sincronizados.
  • Soporte de exclusiones y filtros: permite excluir archivos por patrones, tamaños, rutas concretas, etc.
  • Integración con SSH: usando -e ssh o especificando un destino remoto, tienes cifrado y autenticación seguros sin inventar nada raro.

Sintaxis básica y opciones más usadas

La forma general del comando es bastante directa: primero las opciones, luego origen y por último destino. A partir de esa base se construye casi todo.

La estructura típica es:

rsync origen destino

Para copias remotas, la sintaxis más habitual es:

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

Algunas opciones que conviene memorizar porque las usarás una y otra vez son especialmente importantes para cualquier administrador:

  • -a: modo «archivo». Agrupa varias opciones (-r, -l, -p, -t, -g, -o, -D) para preservar recursividad, permisos, propietarios, grupos, tiempos y archivos especiales.
  • -v: salida «verbose». Muestra qué está pasando durante la transferencia.
  • -z: activa la compresión de datos en la transmisión para reducir el ancho de banda consumido.
  • --delete: hace que el destino se convierta en una réplica exacta del origen, borrando del destino lo que ya no exista en el origen.
  • --exclude: permite omitir archivos o directorios concretos usando patrones (--exclude='*.log', por ejemplo).
  • --dry-run: simula la ejecución. No copia ni borra nada, solo enseña qué acciones haría.
  • --progress: muestra el progreso de los archivos grandes en tiempo real, algo muy cómodo para supervisar.
  • -e ssh: fuerza a usar SSH como transporte cuando no se infiere automáticamente.
  • --log-file: guarda la salida detallada en un log, útil para auditoría y diagnóstico, sobre todo si llamas a rsync desde cron.

Instalación y comprobación de rsync en Linux

En la mayoría de distribuciones modernas, rsync viene instalado por defecto, pero conviene verificarlo antes de ponerte a montar tu sistema de copias. Comprobar la versión es tan simple como lanzar un comando desde la terminal con permisos de usuario normal:

rsync --version

Si el sistema responde con un número de versión, ya lo tienes listo. Cuando no esté instalado, la forma de añadirlo cambia ligeramente según la distro, aunque el proceso es muy sencillo:

  • En Debian, Ubuntu y derivadas puedes usar APT para instalar el paquete: sudo apt install rsync.
  • En Red Hat, CentOS, Rocky Linux o AlmaLinux lo habitual es tirar de DNF: sudo dnf install rsync.

En algunas guías más avanzadas se muestra también cómo habilitar el servicio rsyncd con systemd, copiando y ajustando la unidad /lib/systemd/system/rsync.service a /etc/systemd/system/rsync.service y reiniciando el servicio; esto se utiliza cuando quieres que otros equipos se conecten a tu servidor de backups usando el demonio de rsync en lugar de SSH.

Copias de seguridad locales con rsync

El caso más básico consiste en crear un backup de un directorio a otro dentro de la misma máquina. Es una forma sencilla y rápida de empezar a trabajar con rsync sin complicarse con claves SSH ni firewalls.

Imagina que quieres proteger tus documentos de usuario copiando /home/usuario/Documentos a un disco montado en /mnt/backup. El comando sería tan directo como este:

rsync -av /home/usuario/Documentos/ /mnt/backup/Documentos/

En este ejemplo, rsync recorre todo el contenido de Documentos y lo replica en la unidad de backup, manteniendo permisos, estructura de directorios y marcas de tiempo. La próxima vez que lo ejecutes, solo transferirá los cambios, lo que convierte esta aproximación en un «semi-incremental» muy económico.

cómo hacer copias de seguridad en Linux con comandos

Tipos de copias de seguridad con rsync

Con rsync puedes implementar las tres estrategias de backup clásicas sin necesidad de herramientas externas demasiado complejas. Cada enfoque tiene su utilidad y conviene entender bien qué hace cada uno antes de integrarlo en tu política de copias.

Copia completa

Una copia completa implica replicar todos los archivos del origen al destino, incluyendo subdirectorios. Para ello basta con usar el modo archivo:

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

Con esta variante obtienes un espejo completo del directorio de origen. Es ideal como primera copia de seguridad o cuando quieres un snapshot autónomo que no dependa de copias anteriores.

Copia diferencial

Cuando hablamos de copia diferencial con rsync, normalmente nos referimos a mantener una copia que refleje el estado actual del origen, incluyendo eliminaciones, sin tener que transferirlo todo cada vez.

Para eso se combina la opción archivo con --delete:

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

Con esta configuración rsync copiará solo los archivos nuevos o modificados y borrará en el destino aquello que ya no existe en el origen. Es muy potente para mantener un espejo, pero hay que usarla con cabeza porque puedes perder archivos si te equivocas en las rutas.

Copia incremental con enlaces duros

Para obtener un sistema de copias incrementales «de verdad», donde cada día tengas un directorio distinto que parezca una copia completa pero sin duplicar archivos, se utiliza la opción --link-dest. Esta técnica se apoya en enlaces duros hacia una copia anterior.

La llamada típica sería algo así:

rsync -a --link-dest=/ruta/a/la/copiaprevia /ruta/al/directorio/fuente/ /ruta/al/directorio/destino_nuevo/

En este escenario, los archivos que no han cambiado se vinculan desde la copia previa en lugar de volver a copiarse, de forma que ahorras espacio en disco y sigues teniendo copias «completas» por fecha. Es una solución muy usada en servidores para mantener históricos de varios días o semanas.

Backups remotos con rsync y SSH

Hacer copias en el mismo equipo está bien, pero si el disco muere, de poco te sirve. Lo más sensato es que las copias vivan en otra máquina o incluso en otro CPD. Aquí es donde rsync luce de verdad combinándose con SSH.

Supón que guardas tus datos críticos en /var/backups y quieres enviarlos a un servidor de respaldo con IP 192.168.1.50 y usuario backup. Un comando típico sería:

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

En esta invocación rsync establece una sesión SSH con el servidor remoto y transfiere la información comprimida (si prefieres otras opciones de transporte seguro como SFTP, consulta transferencias FTP/SFTP seguras con FileZilla). La combinación de -a y -z te garantiza copias fieles con un uso de red razonable.

Si lo que quieres es traer archivos desde el servidor remoto al equipo local, simplemente inviertes el orden de las rutas:

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

Configurar acceso sin contraseña con claves SSH

mejores IDEs y editores de código para Windows 11
Artículo relacionado:
Cómo crear copias de seguridad automáticas de tus archivos en Windows 11 con Historial de archivos: guía completa y trucos avanzados

Para que rsync se pueda automatizar sin intervención humana, es imprescindible que la autenticación hacia el servidor remoto no pida contraseña. La manera estándar de conseguirlo es configurando claves SSH.

En líneas generales, el proceso es este:

  1. En la máquina origen, generas un par de claves (si no lo tienes ya):
    ssh-keygen -t ed25519
  2. Copias la clave pública al servidor de backups:
    ssh-copy-id backup@192.168.1.50
  3. Compruebas que puedes entrar sin contraseña:
    ssh backup@192.168.1.50

A partir de ese momento, rsync podrá usar SSH con autenticación por clave pública y ejecutarse desde cron sin bloquearse esperando que escribas nada por teclado.

Uso de rsync con el demonio rsyncd

Aunque la inmensa mayoría de escenarios se resuelven perfectamente con SSH, rsync también dispone de un modo demonio, que escucha en un puerto propio y ofrece «módulos» configurados en un archivo de configuración dedicado.

En un servidor típico, el fichero /etc/rsyncd.conf podría tener una estructura parecida a esta:

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

Además, se define un archivo de contraseñas en /etc/rsyncd.passwd con contenido del estilo:

backup-user:tu-pass

y se protegen los permisos con:

chmod 0600 /etc/rsyncd.passwd

Con esa configuración, desde la máquina que realiza el backup podrías lanzar un comando del tipo:

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

Esta técnica es especialmente útil cuando quieres centralizar copias desde muchos equipos hacia un servidor dedicado de backups sin exponer SSH o cuando necesitas un control muy fino sobre lo que se puede leer o modificar.

Programar backups automáticos con cron

Una vez que tienes claro el comando rsync que quieres usar, el siguiente paso es automatizarlo para que se ejecute de forma periódica sin que tengas que preocuparte. Cron es el sistema estándar en Linux para este tipo de tareas.

Para editar las tareas de cron del usuario actual se usa:

crontab -e

Dentro del archivo, cada línea define un trabajo con un formato de tiempo concreto y el comando a ejecutar. Por ejemplo, para lanzar un rsync todos los días a las 2 de la madrugada podrías incluir:

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

Los campos significan minuto, hora, día del mes, mes y día de la semana, en ese orden. En este caso, el comando se hará a las 02:00 de cada día. Es importante que el comando que pones en cron funcione bien si lo ejecutas primero a mano, y que la autenticación por clave SSH esté ya resuelta.

En otros escenarios, en lugar de llamar a rsync directamente desde cron, se prefiere encapsular la lógica en un script, por ejemplo /usr/local/sbin/rsync_dirs, hacerlo ejecutable con chmod +x y llamar al script desde cron:

00 23 * * * /usr/local/sbin/rsync_dirs

Este enfoque te permite sincronizar varios directorios, registrar logs y manejar errores de manera más ordenada dentro del propio script.

Excluir archivos, limitar tamaños y otras opciones útiles

En muchos casos no tiene sentido volcar absolutamente todo; a menudo querrás ignorar ficheros temporales, logs rotativos o caches que solo ocupan espacio y ralentizan las copias.

Para excluir archivos o carpetas por nombre o patrón se usa la opción --exclude. Un ejemplo muy típico sería:

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

Si lo que buscas es filtrar por tamaño, rsync dispone de --max-size y --min-size, con los que puedes indicar que solo se copien archivos por encima o por debajo de cierto umbral, por ejemplo:

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

También existe la posibilidad de realizar conversiones de codificación de caracteres durante la copia con la opción --iconv, útil cuando sincronizas entre sistemas con configuraciones distintas (como un Mac con UTF8-MAC y un Linux con UTF-8 estándar) y no quieres liarla con acentos o caracteres especiales.

Buenas prácticas al usar rsync para copias de seguridad

Rsync es un bisturí: muy preciso, pero si lo usas mal puedes hacer un destrozo serio. Por eso conviene seguir algunas recomendaciones para evitar sorpresas desagradables cuando automatices tus copias.

  • Antes de cualquier cambio gordo, usa siempre --dry-run para validar que las rutas y las opciones hacen lo que esperas.
  • Comprueba permisos y propietarios en origen y destino. Si faltan permisos de lectura o escritura, rsync fallará en silencio en ciertos ficheros si no revisas la salida.
  • Cuando uses --delete, asegúrate de que el destino es realmente un backup y no una carpeta con datos únicos; si te equivocas de ruta, los borrarás.
  • Registra la salida de tus trabajos con --log-file y revisa periódicamente los logs para detectar errores recurrentes o ficheros que nunca se copian bien.
  • Siempre que puedas, dispón de varias copias en lugares distintos (disco local, servidor remoto, nube) y rota los backups antiguos.
  • Para datos especialmente sensibles, añade cifrado adicional (por ejemplo con GPG) sobre los ficheros de backup, además del cifrado en tránsito que proporciona SSH.

Checklist rápida para configuración y mantenimiento

Para no perderte en los detalles, resulta muy práctico disponer de una pequeña lista de comprobación que te ayude a validar tu sistema de copias tanto al implantarlo como periódicamente.

  • Usuario y permisos verificados en origen y destino, incluyendo acceso de lectura a todos los datos y escritura en la ubicación de la copia.
  • Prueba manual reciente del comando rsync o del script de backup, revisando que no aparezcan errores en la salida.
  • Espacio libre suficiente en el dispositivo o volumen de destino, con monitorización básica para anticipar llenados.
  • Crontab comprobado y tareas activas, sin errores de sintaxis ni rutas relativas dudosas.
  • Logs de rsync revisados de forma regular, buscando fallos de conexión, permisos denegados o rutas inaccesibles.
  • Pruebas de restauración realizadas alguna vez, no solo ver que se copian los datos sino que puedes devolverlos a producción.

Errores habituales y cómo evitarlos

Por muy sencillo que parezca el comando, hay una serie de tropiezos típicos que se repiten una y otra vez cuando la gente empieza a usar rsync para copias de seguridad automáticas.

Permisos denegados

Uno de los problemas más comunes es que el usuario que ejecuta rsync no puede leer o escribir en alguna de las rutas. Esto se manifiesta con mensajes de «Permission denied» o directamente con archivos que no terminan de copiarse.

La solución pasa por revisar propietarios y permisos con ls -l, ajustar si hace falta con chown y chmod, y, en caso necesario, invocar rsync con sudo cuando se trata de rutas del sistema que solo el administrador puede manejar.

Confusión entre rutas absolutas y relativas

Otro fallo típico es liarse con rutas relativas frente a rutas absolutas y terminar copiando cosas donde no tocan. Una buena práctica es utilizar rutas absolutas (que empiezan por /) en los scripts y en cron, para evitar depender del directorio actual.

También es muy importante prestar atención a las barras finales en origen y destino: /origen y /origen/ no significan exactamente lo mismo para rsync, y eso puede marcar si el contenido va dentro o si se crea un directorio adicional en el destino.

Uso imprudente de –delete

La opción --delete es uno de los grandes atractivos de rsync, pero también una de sus mayores trampas. Mal combinada, puede borrar datos valiosos del destino que no tenías intención de tocar.

La recomendación es probar siempre con --dry-run antes de introducir --delete en un entorno de producción y, si es posible, empezar aplicándolo sobre copias de prueba para ver exactamente qué va a eliminar.

Elegir mal entre –ignore-existing y –update

Cuando trabajas con directorios que cambian tanto en origen como en destino, hay que decidir cómo debe comportarse rsync ante conflictos. Las opciones --ignore-existing y --update tienen matices importantes:

  • --ignore-existing hace que rsync nunca toque los archivos ya presentes en el destino, aunque el origen sea más nuevo.
  • --update solo copia si el archivo de origen no existe en el destino o es más reciente que el que hay allí.

Elegir una u otra sin pensarlo puede provocar que no se actualicen archivos críticos o, al contrario, que se sobrescriban cambios que querías conservar.

Alternativas y herramientas complementarias

Aunque rsync cubre la mayoría de escenarios de copias y sincronización, hay situaciones concretas en las que otras herramientas pueden encajar mejor o complementar su funcionamiento.

  • scp: el clásico para transferencias por SSH. Es más simple pero no hace sincronización inteligente ni copias incrementales, por lo que se queda corto para backups frecuentes.
  • rclone: pensado para trabajar con almacenamiento en la nube (S3, Google Drive, Dropbox, etc.). Ofrece funcionalidades de sincronización al estilo rsync, pero adaptadas a estos servicios.
  • Unison: orientado a sincronización bidireccional, útil cuando los cambios pueden producirse tanto en origen como en destino y quieres mantenerlos coherentes.
  • rsnapshot o lsyncd: proyectos que se apoyan en rsync para ofrecer, respectivamente, gestión avanzada de snapshots e actualización casi en tiempo real de directorios.
Ollama Desktop
Artículo relacionado:
Comandos de Linux para obtener información del hardware (comparativa con Windows)

Con todo esto en la mano, rsync se convierte en una especie de navaja suiza para tus copias de seguridad: te permite desde hacer un backup sencillo de tu carpeta de usuario hasta montar un sistema incremental con histórico diario en un servidor remoto, pasando por sincronización de servidores web, copias filtradas por tamaño o exclusión de temporales; si lo combinas con cron, claves SSH y buenas prácticas de verificación y restauración, tienes una solución sólida que te ahorrará tiempo, ancho de banda y más de un susto cuando algo falle. Comparte la guía y más usuarios sabrán automatizar sus copias de seguridad en Linux usando comandos RSTNC


Add as preferred source