
Copiar archivos con cp o scp está bien hasta que tienes que trabajar con directorios de miles de archivos, conexiones lentas o copias de seguridad incrementales. rsync soluciona todo eso en un solo comando.
¿Qué es rsync y cómo funciona?
rsync es una herramienta de sincronización y transferencia de archivos para Linux. A diferencia de cp, que copia todo cada vez, rsync analiza el origen y el destino y transfiere solo lo que ha cambiado. Esto lo hace mucho más rápido en transferencias repetidas.
El Algoritmo de Transferencia Delta
rsync divide los archivos en bloques de tamaño fijo y calcula sumas de verificación para cada uno. Compara las sumas de verificación entre el origen y el destino y luego transfiere solo los bloques que difieren. En un archivo de 1GB donde cambiaste 10KB, rsync transfiere aproximadamente 10KB. scp transfiere 1GB. La diferencia importa en enlaces lentos o conjuntos de copias de seguridad grandes.
Instalando rsync
En Debian/Ubuntu:
sudo apt install rsyncEn RHEL/CentOS:
sudo yum install rsyncVerifica tu versión:
rsync --versionSintaxis de rsync y Opciones Clave
Sintaxis básica:
rsync [OPTIONS] SOURCE DESTINATIONExplicación de las Opciones Principales
Las opciones que usarás en cada comando rsync:
- -a (–archive): Modo de archivo. Copia directorios de forma recursiva y preserva permisos, marcas de tiempo, enlaces simbólicos y archivos de dispositivo. Usa esto casi siempre.
- -v (–verbose): Muestra cada archivo que se está transfiriendo. Agrega -vv para aún más detalle.
- -z (–compress): Comprime datos durante la transferencia. Ahorra ancho de banda en conexiones lentas, añade carga de CPU en las rápidas.
- -P: Combina –progress y –partial. Muestra el progreso de la transferencia y mantiene archivos parciales si se interrumpe.
- –delete: Elimina archivos en el destino que ya no existen en la fuente. Mantiene el destino como un espejo exacto.
Usando -n para Pruebas en Seco
La opción de prueba en seco de rsync (-n o –dry-run) simula la transferencia sin mover nada:
rsync -avn source/ destination/Siempre ejecuta una prueba en seco primero al usar –delete. Muestra exactamente qué archivos se eliminarían antes de que lo ejecutes de forma definitiva.
Monitorear el Progreso con –progress
Para transferencias grandes, –progress muestra la velocidad de transferencia por archivo y la finalización estimada:
rsync -av --progress source/ destination/La salida de progreso de rsync muestra los bytes transferidos, la velocidad de transferencia y el tiempo estimado restante.
Cómo Usar rsync: Ejemplos Prácticos
Sincronizar Archivos Localmente
Copia un directorio local a otra ubicación:
rsync -av /home/user/documents/ /backup/documents/Fíjate en la barra final en el origen. Con un slash final, rsync copia el contenido del directorio. Sin él, rsync copia el propio directorio en el destino.
Copiar Archivos a un Servidor Remoto a través de SSH
rsync sobre SSH utiliza la misma sintaxis que scp pero con la eficiencia de rsync:
rsync -avz -e ssh /local/path/ user@remote-server:/remote/path/La opción -e ssh le indica a rsync que use SSH para la capa de transporte. Agrega un puerto personalizado si es necesario:
rsync -avz -e "ssh -p 2222" /local/path/ user@remote:/remote/path/Sincroniza desde el Servidor Remoto a Local
Extrae archivos de un servidor remoto:
rsync -avz user@remote-server:/remote/path/ /local/destination/La misma sintaxis, solo que fuente y destino están invertidos.
Copia de Seguridad de un Directorio con rsync
Un comando completo de rsync para hacer una copia de seguridad que refleje un directorio de origen y elimine los archivos borrados:
rsync -av --delete /source/directory/ /backup/directory/Ejecuta esto en un cron para realizar copias de seguridad incrementales automáticas.
Filtrado: Patrones de Exclusión e Inclusión
Excluyendo Archivos y Directorios
La opción de exclusión de rsync mantiene ciertos archivos o directorios fuera de la transferencia:
rsync -av --exclude='*.log' source/ destination/Excluye múltiples patrones:
rsync -av --exclude='*.log' --exclude='tmp/' source/ destination/Para reglas de filtro complejas, usa un archivo:
rsync -av --exclude-from='exclude-list.txt' source/ destination/Usando –delete para Espejar Directorios
La opción –delete de rsync elimina del destino los archivos que ya no existen en el origen:
rsync -av --delete source/ destination/Esto convierte rsync en una herramienta de espejado real. Ten cuidado: los archivos eliminados en el origen también se eliminarán en el destino. Siempre ejecuta una prueba en seco primero.
Automatizar rsync con Cron
Ejecuta una copia de seguridad nocturna a las 2 AM:
0 2 * * * rsync -az --delete /data/ /backup/data/ >> /var/log/rsync-backup.log 2>&1Redirige tanto stdout como stderr a un archivo de registro para poder comprobar si la copia de seguridad se ejecutó correctamente.
FAQ: Comando rsync
Ejecuta rsync en modo archivo (-a, que preserva permisos y recorre directorios), modo detallado (-v, muestra los archivos que se transfieren) y modo comprimido (-z, comprime los datos en tránsito). Es el punto de partida estándar para la mayoría de los comandos rsync.
Usa: rsync -avz -e ssh /ruta/local/ usuario@servidor:/ruta/remota/ La opción -e ssh dirige la transferencia a través de una conexión SSH. Para puertos no estándar: rsync -avz -e «ssh -p 2222» source/ user@host:/dest/
Agrega la opción -n: rsync -avn fuente/ destino/ Esto muestra todo lo que rsync haría sin transferir ni eliminar nada. Esencial antes de usar –delete.
Usa –exclude=’patrón’: rsync -av –exclude=’*.tmp’ fuente/ destino/ Para múltiples exclusiones, agrega múltiples banderas –exclude o usa –exclude-from con un archivo que contenga un patrón por línea.