Tutoriales

Utilice Rsync para sincronizar directorios locales y remotos en Linux

Sincronizar es una herramienta de copia de archivos poderosa y versátil que le permite Sincronizar directorios locales y remotos. Se puede utilizar para copiar archivos y directorios entre dos computadoras, o para mantener sincronizados dos directorios en la misma computadora.

Rsync es muy eficiente porque solo transfiere las partes del archivo que han cambiado desde la última sincronización. Esto lo hace ideal para sincronizar directorios grandes que contienen muchos archivos que cambian con frecuencia. X

También ofrece muchas características que lo hacen muy flexible, como poder:

  • Sincronizar directorios a través de SSH,
  • Comprimir datos durante la transmisión,
  • Preservar permisos de archivo y marcas de tiempo,
  • Elimine archivos en el directorio de destino que no existen en el directorio de origen.

Sintaxis de Rsync:

rsync [options] [source] [destination]

Opciones comunes de Rsync:

  • -a (--archive): Modo de archivo; esta opción garantiza que se conserven los enlaces simbólicos, los permisos, las marcas de tiempo y otra información importante.
  • -v (--verbose): Aumenta el nivel de detalle.
  • -r (--recursive): Sincroniza directorios de forma recursiva.
  • --delete: elimina archivos comprimidos del destino que no existen en el origen. Debe utilizar esta opción si desea sincronizar archivos.
  • -z (--compress): comprime datos durante la transmisión.
  • -h (--human-readable): Muestra el número en un formato legible por humanos.
  • -P: combinar --partial (Mantener archivos parcialmente transferidos) y --progress (Muestra el progreso durante la transferencia).

¿Por qué sincronizar directorios locales y remotos?

Hay muchas razones por las que es posible que desee sincronizar directorios locales y remotos. Por ejemplo, es posible que desees:

  • Mantenga copias de seguridad de archivos importantes en servidores remotos,
  • Compartir archivos entre dos máquinas,
  • Implementar el código en el servidor de producción.
  • Sincronice su entorno de desarrollo con su entorno de ensayo.

Mi configuración de prueba

Para los fines de esta guía, utilizaré el siguiente sistema:

Sistema local:

  • Sistema operativo: Escritorio Debian 11
  • directorio local: ~/local/sync/

Sistema remoto:

  • Sistema operativo: servidor Debian 12
  • usuario remoto: Östernik
  • Dirección IP remota:192.168.1.12/24
  • directorio remoto: ~/remote/sync/

Utilice Rsync para copiar archivos de la máquina local al directorio remoto

Asegúrese de que rysnc esté instalado en ambos sistemas y de que tenga los permisos necesarios tanto en el directorio de origen como en el de destino.

Supongamos que tiene un directorio local llamado ~/local/sync/ y desea copiarlo o sincronizarlo con un directorio en un servidor remoto [email protected]:~/remote/sync/.

Para hacer esto puedes usar el siguiente comando:

$ rsync -avzP ~/local/sync/ [email protected]:~/remote/sync/

Reemplace las rutas de origen y destino, la dirección IP del sistema remoto y el nombre de usuario con sus propias rutas.

Utilice Rsync para copiar archivos de la máquina local al directorio remoto

Aquí hay una descripción detallada del comando:

  • -a:Modo archivo, manteniendo las mismas propiedades mencionadas anteriormente.
  • -v: Salida detallada.
  • -z: comprime datos para ahorrar ancho de banda.
  • -P: muestra el progreso y garantiza que se conserven los archivos transferidos parcialmente.

Una vez completada la sincronización, el contenido ~/local/sync/ será el mismo que a continuación [email protected]:~/remote/sync/.

Listar archivos en sistemas locales y remotos
Listar archivos en sistemas locales y remotos

Utilice Rsync para sincronizar directorios locales y remotos

Como sabes, la replicación y la sincronización son diferentes.Cuando usas lo siguiente rsync Orden:

$ rsync -avzP ~/local/sync/ [email protected]:~/remote/sync/

Garantiza el contenido del directorio fuente (~/local/sync/) se refleja en el directorio de destino ([email protected]:~/remote/sync/). Se copiarán todos los archivos o directorios del origen que no estén en el destino.

Sin embargo, utilizando las opciones proporcionadas en el comando anterior, los archivos o directorios presentes en el destino ([email protected]:~/remote/sync/) pero no en la fuente (~/local/sync/) voluntad constante en el destino.

Si desea asegurarse de que los directorios de origen y de destino sean idénticos en contenido (es decir, sincronizados), lo que significa que se eliminarán todos los archivos o directorios en el destino pero no en el de origen, puede agregar --delete Opciones:

$ rsync -avzP --delete ~/local/sync/ [email protected]:~/remote/sync/

junto con --delete opciones, rsync Cualquier archivo o directorio en el destino que no exista en el origen se eliminará, haciendo que el contenido de ambos directorios sea idéntico.

Para verificar que el contenido en ambas ubicaciones sea el mismo, inicie sesión en el sistema remoto y cree un archivo de texto de muestra (p. ej. example.txt) adentro ~/remote/sync/ Tabla de contenido.

user@remote $ touch remote/sync/example.txt

Ahora ejecuta lo anterior rsync comando con --delete Opciones del sistema nativo. Eliminará automáticamente los archivos del destino que no existen en el directorio de origen.

user@local $ rsync -avzP --delete ~/local/sync/ [email protected]:~/remote/sync/
[email protected]'s password:
sending incremental file list                                            
deleting example.txt                                                     
./                                                                       
                                                                         
sent 232 bytes  received 31 bytes  75.14 bytes/sec                       
total size is 27,538,241  speedup is 104,708.14
Utilice Rsync para sincronizar directorios locales y remotos en Linux
Utilice Rsync para sincronizar directorios locales y remotos en Linux

cuidadoso --delete opción porque si se usa incorrectamente, se pueden perder datos en el directorio de destino.Siempre verifique sus rutas, tal vez ejecute pruebas primero sin usar --delete Opciones para garantizar que todo funcione como se esperaba.

cuidadoso:

  1. La barra diagonal final en el directorio es importante. Si olvida la barra diagonal final (~/local/sync reemplazar ~/local/sync/), rsync Un directorio adicional llamado sync en el destino.
  2. Asegúrese de tener los permisos necesarios tanto en el directorio de origen como en el de destino.
  3. Si no está utilizando la autenticación de clave SSH, este comando le solicitará la contraseña de usuario en el servidor remoto.

Autenticación SSH basada en claves Rsync

Configurar Rsync con autenticación basada en claves SSH puede ayudarlo a evitar ingresar una contraseña ssh. Esto resulta útil cuando desea sincronizar archivos automáticamente entre dos computadoras.

Autenticación basada en claves SSH es un método automatizado común y seguro rsync No es necesario ingresar una contraseña SSH para operar.

Utilice autenticación basada en claves rsyncen este orden:

1. Genere un par de claves SSH (si aún no tiene uno)

En esta máquina, genere un par de claves SSH:

$ ssh-keygen

No introduzcas ninguna contraseña. Simplemente presione ENTER para aceptar el valor predeterminado.

De forma predeterminada, esto creará una clave privada (~/.ssh/id_rsa) y clave pública (~/.ssh/id_rsa.pub).

2. Copie la clave pública al servidor remoto.

usar ssh-copy-id Copie su clave pública a la clave autorizada del servidor remoto:

$ ssh-copy-id [email protected]

Después de completar este paso, debería poder acceder al servidor remoto a través de SSH sin contraseña.

Al configurar la autenticación basada en claves, no necesita ingresar manualmente su contraseña SSH. Recuerde proteger su clave privada y nunca compartirla ni filtrarla.

¿Qué sucede si agregamos un nuevo archivo o directorio al destino?

este rsync Cuando se usa de la manera típica descrita, la utilidad nunca modifica ni elimina nada en el directorio de origen. Solo lee la fuente y realiza cambios en el destino.

Por ejemplo, si agrega un nuevo directorio llamado test al directorio de destino (~/remote/sync/test en nuestro ejemplo) y luego ejecutar rsync comando con --delete opción, sucederá lo siguiente:

$ rsync -avzP --delete ~/local/sync/ [email protected]:~/remote/sync/

desde test existe en el directorio de destino (~/remote/sync/test) pero no en la fuente (~/local/sync), y estás usando --delete opciones, rsync será borrado test directorio desde el destino.

Rsync mantiene iguales los archivos en los directorios local y remoto
Rsync mantiene iguales los archivos en los directorios local y remoto

Básicamente, cuando se utiliza --deletedirectorio de destino (~/remote/sync/) se comparará con el directorio fuente (~/local/sync/).Cualquier archivo o directorio adicional (como nuestro test Los directorios en el destino que no existen en el origen) se eliminarán.

Si no desea este comportamiento y desea mantener test directorio de destino, simplemente omitir --delete Opciones:

$ rsync -avzP ~/local/sync/ [email protected]:~/remote/sync/

Esto asegurará test Los directorios del destino permanecen sin cambios.

Atención – Recuerde, rsync es una herramienta poderosa y utiliza ciertas opciones como --delete) puede provocar la pérdida de datos si se utiliza incorrectamente. Asegúrese siempre de comprender las opciones e incluso probar el comando en una máquina virtual antes de aplicarlo a producción.

Sincronización instantánea de archivos usando Rsync e Inotify

este rsync No tiene ningún mecanismo incorporado para monitorear los cambios sobre la marcha y copiar archivos inmediatamente después de los cambios.Sin embargo, puede lograr este comportamiento combinando rsync Utilice otra herramienta como inotify en Linux.

este inotify El conjunto de herramientas proporciona una forma de monitorear los cambios del sistema de archivos que puede combinar con rsync Reaccione a estos cambios inmediatamente.

Aquí hay un ejemplo básico usando inotifywait de inotify-tools embalar:

1. Instalación inotify-tools (si aún no está instalado):

En Debian/Ubuntu/Pop!_OS:

$ sudo apt install inotify-tools

En CentOS/Red Hat/Fedora/AlmaLinux/Rocky Linux:

$ sudo dnf install inotify-tools

2. Crear guión Monitorear cambios de directorio y desencadenantes rsync

$ nano rsyncnotify.sh

Agregue el siguiente contenido allí:

#!/bin/bash

SOURCE_DIR="/home/ostechnix/local/sync/"
DEST_DIR="[email protected]:/home/ostechnix/remote/sync/"

while true; do
    inotifywait -r -e modify,create,delete $SOURCE_DIR
    echo "Change detected, starting rsync..."
    rsync -avzP --delete $SOURCE_DIR $DEST_DIR
    echo "rsync completed."
done

Reemplace las rutas del directorio de origen y destino, el nombre de usuario y la dirección IP del host remoto con sus propios valores.

3.Haga que el script sea ejecutable:

$ chmod +x rsyncnotify.sh

4. Ejecute el script:

$ ./rsyncnotify.sh

Mientras el script se esté ejecutando, monitoreará el directorio de origen en busca de cambios (modify, createy delete evento) y activará rsync Sincronice directorios cuando se produzcan dichos cambios.

Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
/home/ostechnix/local/sync/ CREATE newfile.doc
Change detected, starting rsync...
sending incremental file list
./
newfile.doc
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=4/9)
newfile.txt
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=3/9)

sent 360 bytes  received 58 bytes  836.00 bytes/sec
total size is 27,538,241  speedup is 65,880.96
rsync completed.
[...]
Sincronización instantánea de archivos usando Rsync e Inotify
Sincronización instantánea de archivos usando Rsync e Inotify

cuidadoso:

  • La solución es reactiva, lo que significa que puede haber un retraso muy breve (normalmente unos pocos milisegundos) entre cambios de archivo y cambios de archivo. rsync Operación.
  • El script proporcionado monitorea el directorio continuamente, lo que puede no ser adecuado para todos los casos de uso, especialmente cuando el uso de recursos es una preocupación. Adáptese a sus requisitos específicos.
  • Cerciorarse rsync y inotifywait comando que se adapte a su caso de uso. Antes de implementar dichos scripts en producción, asegúrese de probarlos en un entorno controlado.

Especifique explícitamente la ruta de la clave SSH en el script Rsync (opcional)

En el script se menciona que la ruta a la clave privada es no es absolutamente necesario Si ha configurado correctamente la autenticación basada en claves y está utilizando la ruta de clave predeterminada.

De forma predeterminada, SSH buscará claves en las siguientes ubicaciones ~/.ssh/id_rsa (para claves RSA) y utilícelas si existen.

En el siguiente script, proporcioné rutas explícitas para ilustrar que puede especificar una clave, lo cual es especialmente útil si está utilizando una clave no predeterminada.

#!/bin/bash

SOURCE_DIR="/home/ostechnix/local/sync/"
DEST_DIR="[email protected]:/home/ostechnix/remote/sync/"

# Explicitly using the default private key; adjust the path if you're using a different key
RSYNC_SSH="ssh -i ~/.ssh/id_rsa"

while true; do
    inotifywait -r -e modify,create,delete $SOURCE_DIR
    echo "Change detected, starting rsync..."
    rsync -avzP --delete $SOURCE_DIR $DEST_DIR
    echo "rsync completed."
done

Haga que el script sea ejecutable usando el comando:

$ chmod +x your_script_name.sh

Ahora, cuando se detecta un cambio (modificar, crear, eliminar) SOURCE_DIReste rsync El comando sincronizará automáticamente los directorios mediante la autenticación basada en claves SSH.

Si usas el predeterminado ~/.ssh/id_rsa La clave utilizada para autenticarse con el servidor remoto; puede simplificar el script omitiéndola -e "$RSYNC_SSH" parte.

Si tiene varias claves y/o claves en una ubicación no predeterminada, debe especificar la ruta de la clave.Pero para una configuración sencilla usando teclas preestablecidas, puedes rsync Orden.

Recuerde probar este script en una máquina virtual antes de implementarlo en producción para asegurarse de que todo funcione como se esperaba.

Utilice cron para programar el proceso de sincronización

Puede programar el programa de sincronización para que se inicie a una hora específica usando el siguiente comando cron Categoría Programador de trabajos en sistemas Unix.De esta manera puedes Evite las limitaciones de recursos Esto puede deberse a una sincronización continua y la sincronización se produce en horas no pico, como a altas horas de la noche.

1. Abra crontab para editar:

$ crontab -e

2. Agregar nuevas tareas programadas para ti rsync Orden. Por ejemplo, para ejecutar la sincronización todos los días a las 2:00 a. m., agregue la siguiente línea:

0 2 * * * rsync -avzP --delete ~/local/sync/ [email protected]:~/remote/sync/

El formato de la sintaxis de temporización cron es:

minute (0-59)
hour (0-23)
day of the month (1-31)
month (1-12)
day of the week (0-7 where both 0 and 7 represent Sunday)

3. Guardar y salir editar.

Aquí hay algunos otros ejemplos:

  • Para ejecutar la sincronización al comienzo de cada hora:
  0 * * * * rsync -avzP --delete ~/local/sync/ [email protected]:~/remote/sync/
  • Para ejecutar la sincronización todos los lunes a las 3:30 a. m.:
  30 3 * * 1 rsync -avzP --delete ~/local/sync/ [email protected]:~/remote/sync/
  • Para ejecutar una sincronización a las 4:00 a. m. del día 15 de cada mes:
  0 4 15 * * rsync -avzP --delete ~/local/sync/ [email protected]:~/remote/sync/

Recuerda ajustarlo rsync Comando y recorrido según tus necesidades. Para obtener más ejemplos de comandos cron, consulte la siguiente guía.

Guía para principiantes de trabajos cron

usar cron Este enfoque es una forma eficaz de lograr una sincronización periódica sin ejercer una presión constante sobre los recursos. Solo asegúrese de que el tiempo que elija no entre en conflicto con otras tareas que consumen muchos recursos y supervise siempre la ejecución inicial para asegurarse de que todo funcione como se esperaba.


Lectura relacionada:


en conclusión

usar --delete Opción, puede usar rsync en Linux para sincronizar directorios locales y remotos. Como se mencionó anteriormente, tenga cuidado al usar esta opción, ya que eliminará archivos en el directorio de destino que no existen en el directorio de origen. «

Si se configura correctamente, Rsync puede sincronizar archivos de manera eficiente entre dos sistemas. Edite el script Rsync proporcionado en esta guía según sus requisitos y proteja sus datos importantes en sistemas Linux y similares a Unix.

LEER  Webmin: una herramienta de administración de sistemas basada en web para Linux

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba