Cómo utilizar Rsync para sincronizar directorios locales y remotos

Introducció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 rsync
la 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_keys
archivo 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 rsync
instalado.
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 rsync
funciona de manera similar a otras herramientas, como ssh
, scp
, y cp
.
Primero, cambie a su directorio de inicio ejecutando el siguiente comando:
- cd ~
Luego crea un directorio de prueba:
- mkdir dir1
Crear otro directorio de prueba:
- mkdir dir2
Ahora agregue algunos archivos de prueba:
- touch dir1/file{1..100}
Ahora hay un directorio llamado dir1
con 100 archivos vacíos. Confirme enumerando los archivos:
- 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 dir1
to dir2
en el mismo sistema, ejecutarás rsync
y usarás el -r
indicador, que significa “recursivo” y es necesario para la sincronización de directorios:
- rsync -r dir1/ dir2
Otra opción es utilizar la -a
bandera, 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 -r
y es la bandera recomendada. Ejecute el mismo comando que en el ejemplo anterior, esta vez utilizando la -a
bandera:
- 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í:
- 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 rsync
comando. Rsync proporciona un método para hacer esto pasando las opciones -n
o --dry-run
. El -v
indicador , que significa “verbose”, también es necesario para obtener el resultado adecuado. Combinarás los indicadores a
, n
y v
en el siguiente comando:
- 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:
- 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 rsync
sincronizar con un sistema remoto, solo necesita tener configurado el acceso SSH entre sus máquinas local y remota, así como rsync
instalado en ambos sistemas. Una vez que haya verificado el acceso SSH entre las dos máquinas, puede sincronizar la dir1
carpeta 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:
- 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 dir1
directorio estuviera en el sistema remoto en lugar de en el sistema local, la sintaxis sería la siguiente:
- rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
Al igual cp
que 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 -z
opción:
- rsync -az source destination
La -P
bandera también es útil. Combina las banderas --progress
y --partial
. Esta primera bandera proporciona una barra de progreso para las transferencias, y la segunda bandera le permite reanudar las transferencias interrumpidas:
- 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:
- 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:
- touch dir1/file{1..10}
Luego, si ejecutas rsync
esto -azP
nuevamente, notarás en la salida cómo Rsync copia de manera inteligente solo los archivos modificados:
- 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, rsync
no se elimina nada del directorio de destino.
Puede cambiar este comportamiento con la --delete
opción . Antes de utilizar esta opción, puede utilizar -n
la --dry-run
opción , para realizar una prueba para evitar la pérdida de datos no deseada:
- 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:
- 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:
- rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
Por último, la opción de Rsync --backup
se puede utilizar para almacenar copias de seguridad de archivos importantes. Se utiliza junto con la --backup-dir
opción que especifica el directorio en el que se deben almacenar los archivos de copia de seguridad:
- 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.
Deja una respuesta