Busqueda sobre Linux y software libre

Noticias sobre linux y software libre - Google 

Cómo instalar y configurar Rsync en linux

 Le pedimos a la inteligencia artificial gemini de Google que nos explique cómo instalar y configurar Rsync en linux

Explicanos detalladamente cómo instalar y configurar Rsync en linux

rsync (del inglés "remote sync") es una herramienta de línea de comandos increíblemente potente y versátil para sincronizar archivos y directorios en Linux y sistemas tipo Unix. Su principal fortaleza es su algoritmo diferencial, que le permite copiar solo los bloques de datos que han cambiado entre el origen y el destino. Esto lo hace extremadamente eficiente para copias de seguridad incrementales, sincronización de directorios locales o remotos, y replicación de datos, ahorrando ancho de banda y tiempo.

¿Por Qué Usar rsync ?

Eficiencia: Solo transfiere los cambios (deltas), no el archivo completo si ya existe una versión en el destino.

Flexibilidad: Puede usarse para sincronizar archivos y directorios de forma local, entre un sistema local y uno remoto, o entre dos sistemas remotos (a través de un host intermedio).

Preservación de Atributos: Por defecto, preserva los permisos, propietarios, grupos, fechas de modificación, enlaces simbólicos, y otros atributos de los archivos.

Reanudación de Transferencias: Si una transferencia se interrumpe, rsync puede reanudarla desde el punto de interrupción.

Amplio Soporte: Funciona sobre SSH (seguro y recomendado), o como un demonio rsync (para transferencias rápidas en entornos confiables).

Exclusión e Inclusión: Permite especificar qué archivos o directorios incluir o excluir de la sincronización.

Paso 1: Instalación de rsync

rsync es una herramienta tan fundamental en Linux que en la mayoría de las distribuciones ya viene preinstalada. Si por alguna razón no lo está, o quieres asegurarte de tener la última versión, el proceso es sencillo.

Verificar si rsync está instalado:

Abre una terminal y ejecuta:

Bash

rsync --version

Si ves información sobre la versión de rsync, ya está instalado. Si recibes un error como "command not found", necesitas instalarlo.

Instalar rsync:

Usa el gestor de paquetes de tu distribución:

Para Debian/Ubuntu y derivados:

Bash


sudo apt update

sudo apt install rsync -y


Para Fedora/RHEL/CentOS y derivados (usando dnf o yum):

Bash


sudo dnf install rsync -y

# O para versiones antiguas de CentOS/RHEL

# sudo yum install rsync -y

Para Arch Linux y derivados:

Bash


sudo pacman -S rsync

Paso 2: Configuración Básica y Uso de rsync

rsync se configura principalmente a través de sus opciones de línea de comandos. Para la mayoría de los casos de uso (copias de seguridad locales o a través de SSH), no necesitas un archivo de configuración separado.

Sintaxis Básica de rsync

La sintaxis general de rsync es similar a la de cp o scp:

Bash

rsync [OPCIONES] ORIGEN DESTINO

ORIGEN: El archivo o directorio que quieres copiar/sincronizar.

DESTINO:
La ubicación donde quieres que se copie/sincronice.

Opciones Más Comunes e Importantes:

Estas opciones son fundamentales para la mayoría de los casos de uso:

-a (archive mode): Este es el modo más recomendado para la mayoría de las copias de seguridad. Es un atajo para -rlptgoD, lo que significa que preserva recursivamente (directorios y subdirectorios), enlaces simbólicos, permisos, tiempos de modificación, grupo, propietario, y archivos de dispositivo.

Ejemplo
: rsync -a /ruta/origen /ruta/destino

-v (verbose): Muestra más información sobre el proceso de transferencia (qué archivos se están copiando, progreso). Útil para ver lo que está sucediendo.

-h (human-readable): Muestra los tamaños de archivo y las tasas de transferencia en un formato legible (KB, MB, GB).

--progress: Muestra una barra de progreso para cada archivo, útil para archivos grandes.

--delete: ¡MUY IMPORTANTE y PELIGROSA si no se usa con cuidado! Borra archivos en el destino que no existen en el origen. Esto sincroniza el destino para que sea una copia exacta del origen. Úsalo con extrema precaución, especialmente en el primer uso.

--dry-run (o -n): Realiza una "ejecución en seco". Muestra qué archivos se copiarían, borrarían o modificarían sin realizar ningún cambio real. ¡Úsalo siempre antes de ejecutar un comando rsync con --delete!

Casos de Uso Comunes:

Copia Local de un Directorio (con archive y verbose):

Bash

rsync -avh --progress /home/tu_usuario/Documentos /mnt/disco_copia_seguridad/respaldo_docs

Esto copiará el contenido de Documentos a respaldo_docs. Si el destino ya existe, solo copiará los cambios.

¡Nota importante sobre el / al final del origen!

rsync -a /home/user/dir/ /destino/ (con / al final de dir/): Copia el contenido de dir al destino.

rsync -a /home/user/dir /destino/ (sin / al final de dir): Copia el directorio dir dentro del destino.

Sincronización de un Directorio Local (con --delete):

Bash


# Primero, un dry-run para ver qué se borraría

rsync -avhn --delete /home/tu_usuario/Documentos /mnt/disco_copia_seguridad/respaldo_docs

# Si estás satisfecho, ejecuta el comando real

rsync -avh --delete /home/tu_usuario/Documentos /mnt/disco_copia_seguridad/respaldo_docs

Esto asegurará que respaldo_docs sea una copia idéntica de Documentos, eliminando cualquier archivo en respaldo_docs que ya no esté en Documentos.

Copia a un Servidor Remoto (vía SSH - Método más Común y Seguro):

rsync usa SSH por defecto cuando se especifica un usuario y un host remoto. Necesitarás tener SSH configurado y poder iniciar sesión en el servidor remoto.

Bash

# Copiar un directorio local a un servidor remoto

rsync -avh --progress /home/tu_usuario/MiProyecto user@remote_server_ip:/home/user/backups/proyectos/

# Copiar un directorio desde un servidor remoto a tu máquina local

rsync -avh --progress user@remote_server_ip:/var/www/html/ /home/tu_usuario/web_backup/

Te pedirá la contraseña del usuario remoto (a menos que uses autenticación por clave SSH sin contraseña, lo cual es muy recomendable para automatización).

Excluir Archivos/Directorios:

--exclude=PATRÓN: Excluye archivos o directorios que coinciden con el patrón. Puedes usar múltiples --exclude.

--exclude-from=ARCHIVO: Excluye patrones listados en un archivo de texto (uno por línea).

Bash

# Excluir el directorio 'node_modules' y todos los archivos '.log'

rsync -avh --exclude='node_modules' --exclude='*.log' /home/dev/proyecto /var/backups/

Reanudar Transferencias Incompletas:

-P: Es un atajo para --partial --progress. --partial mantiene los archivos parcialmente transferidos para que puedan ser reanudados.

--append / --append-verify: Si sabes que los archivos en el destino son solo parciales y quieres añadir al final, o si quieres verificar la integridad y luego añadir.

Bash

rsync -avhP /grandes_archivos/ big_backup_drive/

Paso 3: Configuración Avanzada de rsync (Modo Demonio)

Para casos de uso más avanzados, como la publicación de directorios para muchos clientes o respaldos centralizados, rsync puede ejecutarse como un demonio (daemon). Esto implica un archivo de configuración (/etc/rsyncd.conf) y un servicio.

Advertencia: Configurar rsync como demonio requiere una comprensión más profunda de la seguridad de red, ya que abre un puerto (por defecto 873) y puede ser un riesgo si no se configura correctamente. Para la mayoría de los usuarios, SSH es el método preferido y más seguro.

Configurar el Servidor rsync (el demonio):

Crear el archivo de configuración del demonio:

Bash


sudo nano /etc/rsyncd.conf

Ejemplo de /etc/rsyncd.conf:

Ini, TOML
 

# Archivo de configuración global

uid = nobody              # Usuario bajo el cual se ejecuta el proceso rsync

gid = nobody              # Grupo bajo el cual se ejecuta el proceso rsync

use chroot = yes         # Restringe el acceso al módulo rsync

max connections = 5  # Máximo de conexiones concurrentes

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsyncd.lock

log file = /var/log/rsyncd.log
 

# Módulo de respaldo (define un recurso compartido rsync)

[backup_data]

   path = /srv/rsync/data                     # El directorio que se compartirá

   comment = Datos de respaldo del servidor

   read only = no                                # Permitir escritura desde el cliente

   list = yes                                        # Permitir listado de módulos

   auth users = rsyncuser                   # Usuario permitido para autenticación (opcional)

   secrets file = /etc/rsyncd.secrets   # Archivo de secretos para autenticación (opcional)

   hosts allow = 192.168.1.0/24        # Permite conexiones desde esta subred (MUY IMPORTANTE)

   # hosts deny = *                            # Deniega todo lo demás

Crear el directorio del módulo:

Bash


sudo mkdir -p /srv/rsync/data

sudo chown nobody:nogroup /srv/rsync/data # O el uid/gid que definiste


Configurar autenticación (opcional pero recomendado):

Si usas auth users y secrets file, crea el archivo de secretos:

Bash


sudo nano /etc/rsyncd.secrets

Añade usuario:contraseña (ej., rsyncuser:mysecurepassword).

rsyncuser:mysecurepassword

Asegúrate de que este archivo tenga permisos estrictos:

Bash

sudo chmod 600 /etc/rsyncd.secrets

Iniciar el demonio rsync:

Método Systemd (la mayoría de las distros modernas):

Asegúrate de que rsync.service esté habilitado y corriendo. A veces se necesita editar el archivo de servicio.

Bash

# Asegúrate de que el archivo de servicio de rsync apunte a --daemon

# sudo nano /lib/systemd/system/rsync.service

# Busca la línea ExecStart y asegúrate de que contenga --daemon

# Ejemplo: ExecStart=/usr/bin/rsync --daemon --no-detach

sudo systemctl enable rsync

sudo systemctl start rsync

sudo systemctl status rsync


Iniciarlo manualmente para pruebas:

Bash


sudo rsync --daemon --no-detach

(Cierra la terminal o ponlo en segundo plano si quieres que siga corriendo).

Configurar el Firewall

Abre el puerto 873 (el puerto por defecto de rsync) en el servidor:

Bash

sudo ufw allow 873/tcp # Para UFW (Ubuntu/Debian)

# O

# sudo firewall-cmd --add-port=873/tcp --permanent # Para firewalld (Fedora/RHEL/CentOS)

# sudo firewall-cmd --reload


Uso de rsync en Modo Cliente (para el demonio):

Desde una máquina cliente, la sintaxis cambia para especificar el módulo:

Bash

rsync [OPCIONES] ORIGEN rsync://[USUARIO@]HOST[:PUERTO]/MODULO/ DESTINO

rsync [OPCIONES] rsync://[USUARIO@]HOST[:PUERTO]/MODULO/ ORIGEN DESTINO


MODULO: El nombre del módulo definido en /etc/rsyncd.conf (ej., backup_data).

Ejemplo de cliente a servidor rsync (con autenticación):

Bash


# Copiar datos locales al módulo 'backup_data' en el servidor rsync

rsync -avh --progress /home/cliente/mis_datos rsyncuser@your_rsync_server_ip::backup_data/

Te pedirá la contraseña configurada en /etc/rsyncd.secrets en el servidor.

Paso 4: Automatización y Mantenimiento

rsync es ideal para automatización con cron.

Crear un script de respaldo:

Es buena práctica poner tus comandos rsync complejos en un script de shell.

Bash

sudo nano /usr/local/bin/backup_home.sh

Contenido de backup_home.sh:

Bash


#!/bin/bash

LOG_FILE="/var/log/rsync_home_backup.log"

SOURCE_DIR="/home/tu_usuario/"

DEST_DIR="/mnt/respaldo_diario/home_backup/"

EXCLUDES="--exclude='Trash' --exclude='.cache' --exclude='Downloads'"

echo "--- $(date) --- Inicio del respaldo de Home ---" >> $LOG_FILE

rsync -avh --progress --delete $EXCLUDES $SOURCE_DIR $DEST_DIR >> $LOG_FILE 2>&1

echo "--- $(date) --- Fin del respaldo de Home ---" >> $LOG_FILE

Haz el script ejecutable:

Bash

sudo chmod +x /usr/local/bin/backup_home.sh

Programar con cron:

Edita la tabla cron del usuario root (recomendado para respaldos del sistema) o de tu usuario.

Bash


sudo crontab -e # Para root

# O

# crontab -e # Para tu usuario

Añade una línea al final para ejecutar tu script (ej., diariamente a las 02:00 AM):

Code snippet

0 2 * * * /usr/local/bin/backup_home.sh

Guarda y sal del editor.

Paso 5: Solución de Problemas Comunes de rsync

"Permission denied" 🚫

Causa: El usuario que ejecuta rsync no tiene permisos de lectura en el origen o de escritura en el destino. Para operaciones remotas, el usuario de SSH/rsync remoto no tiene permisos en el servidor.

Solución:


Verifica los permisos (ls -l, ls -ld) de los directorios y archivos.

Asegúrate de que el usuario que ejecuta rsync tenga los permisos adecuados (usa sudo si es necesario, pero con precaución).

Para SSH, asegúrate de que el usuario remoto tenga permisos en la máquina remota.

rsync no copia los archivos esperados / copia demasiados archivos

Causa: Confusión con el / al final de la ruta de origen, o problemas con las reglas de inclusión/exclusión.

Solución:

dry-run (-n): ¡Siempre úsalo para ver qué hará rsync antes de ejecutar el comando real!

rsync -a /dir_origen/ /dir_destino/: Copia el contenido de dir_origen a dir_destino.

rsync -a /dir_origen /dir_destino/: Copia el directorio dir_origen dentro de dir_destino.

Revisa cuidadosamente las reglas de --exclude o --include. Los patrones de rsync son potentes pero pueden ser complejos.

"No space left on device" 💾

Causa: El disco de destino se ha llenado.

Solución: Libera espacio en el disco de destino o usa un destino con más capacidad.

Conexión SSH fallida / rsync error 255

Causa: Problemas de red, servidor SSH no funcionando en el destino, firewall bloqueando el puerto 22, credenciales incorrectas, o problemas con la clave SSH.

Solución:


Prueba la conexión SSH directamente: ssh user@remote_server_ip.

Verifica que el servicio SSH (sshd) esté corriendo en el servidor remoto (sudo systemctl status ssh).

Asegúrate de que el firewall esté abierto en el puerto 22 (o el personalizado) en ambos lados.

Si usas claves SSH, verifica que la clave privada tenga los permisos 600 (chmod 600 ~/.ssh/id_rsa) y que la clave pública esté en ~/.ssh/authorized_keys en el servidor remoto.

rsync en modo demonio no funciona

Causa: El servicio rsync no está iniciado, firewall bloqueando el puerto 873, errores en /etc/rsyncd.conf, o permisos incorrectos en rsyncd.secrets.

Solución:


Verifica el estado del servicio:
sudo systemctl status rsync.

Revisa el firewall: sudo ufw status o sudo firewall-cmd --list-all.

Examina /var/log/rsyncd.log y los logs del sistema (journalctl -xe) para ver errores.

Asegúrate de que /etc/rsyncd.secrets tenga permisos 600.

Prueba con sudo rsync --daemon --no-detach en la terminal para ver la salida directa.

rsync es una herramienta indispensable para cualquier administrador de sistemas o usuario avanzado de Linux. Una vez que dominas sus opciones básicas y entiendes su comportamiento, se convierte en una columna vertebral fiable para tus necesidades de sincronización y respaldo.

Ads by CJ - Linux Foundation

Share This