Cómo utilizar Rsync para sincronizar directorios locales y remotos

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Definición de Rsync
  • Comprender la sintaxis de Rsync
  • Cómo usar Rsync para sincronizar con un sistema remoto
  • Uso de otras opciones de Rsync
  • Conclusión
  • Rsync , que significa sincronización remota , es una herramienta de sincronización de archivos local y remota. Utiliza un algoritmo para minimizar la cantidad de datos copiados moviendo únicamente las partes de los archivos que han cambiado.

    En este tutorial, definiremos Rsync, revisaremos la sintaxis al usarlo rsync, explicaremos cómo usar Rsync para sincronizar con un sistema remoto y otras opciones disponibles para usted.

    Implemente sus aplicaciones frontend desde GitHub con la plataforma de aplicaciones DigitalOcean . Deje que DigitalOcean se concentre en escalar su aplicación.

    Prerrequisitos

    Para practicar rsyncla sincronización de archivos entre un sistema local y uno remoto, necesitará dos máquinas que actúen como su computadora local y su máquina remota, respectivamente. Estas dos máquinas pueden ser servidores privados virtuales, máquinas virtuales, contenedores o computadoras personales, siempre que estén configuradas correctamente.

    Si planea seguir esta guía utilizando servidores, sería prudente configurarlos con usuarios administrativos y configurar un firewall en cada uno de ellos. Para configurar estos servidores, siga nuestra Guía de configuración inicial de servidores .

    Independientemente del tipo de máquinas que utilices para seguir este tutorial, necesitarás haber creado claves SSH en ambas. Luego, copia la clave pública de cada servidor al authorized_keysarchivo del otro servidor como se describe en el Paso 2 de esa guía .

    Esta guía fue validada en máquinas que ejecutan Ubuntu 20.04, aunque generalmente debería funcionar con cualquier computadora que ejecute un sistema operativo basado en Linux que lo tenga rsyncinstalado.

    Definición de Rsync

    Rsync es una herramienta de sincronización en red muy flexible. Debido a su ubicuidad en sistemas Linux y similares a Unix y su popularidad como herramienta para scripts de sistema, se incluye en la mayoría de las distribuciones Linux de forma predeterminada.

    Comprender la sintaxis de Rsync

    La sintaxis de rsyncfunciona de manera similar a otras herramientas, como ssh, scp, y cp.

    Primero, cambie a su directorio de inicio ejecutando el siguiente comando:

    1. cd ~

    Luego crea un directorio de prueba:

    1. mkdir dir1

    Crear otro directorio de prueba:

    1. mkdir dir2

    Ahora agregue algunos archivos de prueba:

    1. touch dir1/file{1..100}

    Ahora hay un directorio llamado dir1con 100 archivos vacíos. Confirme enumerando los archivos:

    1. ls dir1
    Outputfile1    file18  file27  file36  file45  file54  file63  file72  file81  file90file10   file19  file28  file37  file46  file55  file64  file73  file82  file91file100  file2   file29  file38  file47  file56  file65  file74  file83  file92file11   file20  file3   file39  file48  file57  file66  file75  file84  file93file12   file21  file30  file4   file49  file58  file67  file76  file85  file94file13   file22  file31  file40  file5   file59  file68  file77  file86  file95file14   file23  file32  file41  file50  file6   file69  file78  file87  file96file15   file24  file33  file42  file51  file60  file7   file79  file88  file97file16   file25  file34  file43  file52  file61  file70  file8   file89  file98file17   file26  file35  file44  file53  file62  file71  file80  file9   file99

    También tienes un directorio vacío llamado dir2. Para sincronizar el contenido de dir1to dir2en el mismo sistema, ejecutarás rsyncy usarás el -rindicador, que significa “recursivo” y es necesario para la sincronización de directorios:

    1. rsync -r dir1/ dir2

    Otra opción es utilizar la -abandera, que es una bandera combinada y significa “archivo”. Esta bandera se sincroniza de forma recursiva y conserva los enlaces simbólicos, los archivos especiales y de dispositivos, las horas de modificación, los grupos, los propietarios y los permisos. Se utiliza con más frecuencia que -ry es la bandera recomendada. Ejecute el mismo comando que en el ejemplo anterior, esta vez utilizando la -abandera:

    1. rsync -a dir1/ dir2

    Tenga en cuenta que hay una barra diagonal final ( /) al final del primer argumento en la sintaxis de los dos comandos anteriores y resaltado aquí:

    1. rsync -a dir1/ dir2

    Esta barra diagonal final indica el contenido de dir1. Sin la barra diagonal final, dir1, incluido el directorio, se colocaría dentro de dir2. El resultado crearía una jerarquía como la siguiente:

    ~/dir2/dir1/[files]

    Otro consejo es comprobar dos veces los argumentos antes de ejecutar un rsynccomando. Rsync proporciona un método para hacer esto pasando las opciones -no --dry-run. El -vindicador , que significa “verbose”, también es necesario para obtener el resultado adecuado. Combinarás los indicadores a, ny ven el siguiente comando:

    1. rsync -anv dir1/ dir2
    Outputsending incremental file list./file1file10file100file11file12file13file14file15file16file17file18. . .

    Ahora compare ese resultado con el que recibe al eliminar la barra final, como en la siguiente imagen:

    1. rsync -anv dir1 dir2
    Outputsending incremental file listdir1/dir1/file1dir1/file10dir1/file100dir1/file11dir1/file12dir1/file13dir1/file14dir1/file15dir1/file16dir1/file17dir1/file18. . .

    Esta salida ahora demuestra que se transfirió el directorio en sí, en lugar de solo los archivos dentro del directorio.

    Cómo usar Rsync para sincronizar con un sistema remoto

    Para rsyncsincronizar con un sistema remoto, solo necesita tener configurado el acceso SSH entre sus máquinas local y remota, así como rsyncinstalado en ambos sistemas. Una vez que haya verificado el acceso SSH entre las dos máquinas, puede sincronizar la dir1carpeta de la sección anterior con una máquina remota utilizando la siguiente sintaxis. Tenga en cuenta que en este caso desea transferir el directorio real, por lo que omitirá la barra diagonal final:

    1. rsync -a ~/dir1 username@remote_host:destination_directory

    Este proceso se denomina operación push porque “envía” un directorio desde el sistema local a un sistema remoto. La operación opuesta es pull y se utiliza para sincronizar un directorio remoto con el sistema local. Si el dir1directorio estuviera en el sistema remoto en lugar de en el sistema local, la sintaxis sería la siguiente:

    1. rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine

    Al igual cpque en herramientas similares, la fuente siempre es el primer argumento y el destino siempre es el segundo.

    Uso de otras opciones de Rsync

    Rsync proporciona muchas opciones para alterar el comportamiento predeterminado de la utilidad, como las opciones de bandera que aprendió en la sección anterior.

    Si está transfiriendo archivos que aún no han sido comprimidos, como archivos de texto, puede reducir la transferencia de red agregando compresión con la -zopción:

    1. rsync -az source destination

    La -Pbandera también es útil. Combina las banderas --progressy --partial. Esta primera bandera proporciona una barra de progreso para las transferencias, y la segunda bandera le permite reanudar las transferencias interrumpidas:

    1. rsync -azP source destination
    Outputsending incremental file listcreated directory destinationsource/source/file1              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=99/101)sourcefile10              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=98/101)source/file100              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=97/101)source/file11              0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=96/101)source/file12              0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=95/101). . .

    Si vuelve a ejecutar el comando, recibirá una salida abreviada, ya que no se han realizado cambios. Esto ilustra la capacidad de Rsync de utilizar los tiempos de modificación para determinar si se han realizado cambios:

    1. rsync -azP source destination
    Outputsending incremental file listsent 818 bytes received 12 bytes 1660.00 bytes/sectotal size is 0 speedup is 0.00

    Digamos que desea actualizar la hora de modificación de algunos de los archivos con un comando como el siguiente:

    1. touch dir1/file{1..10}

    Luego, si ejecutas rsyncesto -azPnuevamente, notarás en la salida cómo Rsync copia de manera inteligente solo los archivos modificados:

    1. rsync -azP source destination
    Outputsending incremental file listfile1            0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)file10            0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)file2            0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=87/101)file3            0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=76/101). . .

    Para mantener dos directorios verdaderamente sincronizados, es necesario eliminar archivos del directorio de destino si se eliminan del directorio de origen. De manera predeterminada, rsyncno se elimina nada del directorio de destino.

    Puede cambiar este comportamiento con la --deleteopción . Antes de utilizar esta opción, puede utilizar -nla --dry-runopción , para realizar una prueba para evitar la pérdida de datos no deseada:

    1. rsync -an --delete source destination

    Si prefiere excluir ciertos archivos o directorios ubicados dentro de un directorio que está sincronizando, puede hacerlo especificándolos en una lista separada por comas después de la --exclude=opción:

    1. rsync -a --exclude=pattern_to_exclude source destination

    Si tiene un patrón específico para excluir, puede anular esa exclusión para los archivos que coincidan con un patrón diferente utilizando la --include=opción:

    1. rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination

    Por último, la opción de Rsync --backupse puede utilizar para almacenar copias de seguridad de archivos importantes. Se utiliza junto con la --backup-diropción que especifica el directorio en el que se deben almacenar los archivos de copia de seguridad:

    1. rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination

    Conclusión

    Rsync puede optimizar las transferencias de archivos a través de conexiones en red y agregar solidez a la sincronización de directorios locales. La flexibilidad de Rsync lo convierte en una buena opción para muchas operaciones diferentes a nivel de archivos.

    El dominio de Rsync le permitirá diseñar operaciones de respaldo complejas y obtener un control detallado sobre cómo y qué se transfiere.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

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

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion