GNU/Linux >> Tutoriales Linux >  >> Linux

Ejemplos prácticos del comando rsync en Linux

Rsync (Remote Sync) es una herramienta de sincronización para copiar archivos y directorios en un sistema o entre sistemas. La mayor ventaja de rsync es que copia solo los archivos modificados y, por lo tanto, reduce el consumo de CPU y ahorra ancho de banda y tiempo al copiar archivos.

Ventajas de rsync sobre scp

Ya te mostré algunos ejemplos prácticos del comando scp. scp, abreviatura de copia segura, también se usa para copiar archivos entre dos sistemas remotos a través de ssh.

Pero rsync tiene ciertas ventajas sobre scp que lo convierten en una mejor opción.

  • rsync copia solo los archivos que se modifican, mientras que scp copia todos los archivos y los sobrescribe si es necesario. Por lo tanto, se garantiza una mejor velocidad en rsync.
  • rsync también puede funcionar sin cifrado. Esto puede reducir los gastos generales. Pero esto se debe considerar cuando no hay riesgo de seguridad de transferir sin encriptación.
  • Se puede reanudar una transferencia incompleta en rsync mientras que scp no lo permite.

Si no tienes rsync instalado, puede instalarlo usando su administrador de paquetes.

En Ubuntu y Debian, puede instalar rsync con el siguiente comando.

sudo apt install rsync

Ejemplos practicos del comando rsync en Linux

El rsync El comando tiene la siguiente estructura

rsync [OPTIONS] Source Destination

Dónde fuente y destino pueden ser rutas locales o rutas remotas en el formato [email protected]:ruta/al/archivo

Veamos cómo usar el comando rsync con algunos ejemplos útiles.

🗒️Si tiene un directorio A, use "A" para mencionarlo, no "A/". El uso de A/ se referirá a todos los archivos en el directorio A y no al directorio A en sí. Entonces, copiar A creará un nuevo directorio en el destino y luego copiará los archivos en A. Pero copiar A/ copiará solo los archivos en A en el destino.

1. Sincronizar archivos locales [Sincronización unidireccional]

Para copiar archivos locales del directorio A en Backup-A-dir ,

rsync A/ Backup-A-dir/

Este comando copia los archivos (si se encuentran cambios) del directorio A en Backup-A-dir. Esto no copiará ningún archivo adicional en Backup-A-dir en A que no esté en A inicialmente. Es por eso que se llama sincronización unidireccional.

2. Sincronizar archivos remotos [Sincronización unidireccional]

Para sincronizar archivos entre un sistema remoto y un sistema local, el comando es similar. Tenga en cuenta que la ubicación de origen y la ubicación de destino pueden ser rutas del sistema de archivos local o rutas del sistema remoto (ssh).

rsync dev/build [email protected]:~/Backup

3. Sincronización bidireccional

El comando anterior copia los archivos desde el origen al destino. Pero si el sistema tenía algunos archivos adicionales que no estaban en la fuente, la sincronización unidireccional no los eliminará. Si quieres eso, tendrás que usar la sincronización bidireccional.

Para mantener ambos puntos finales (directorios o archivos) en el mismo estado con los mismos archivos y sin extras en ninguno de los lados, simplemente agregue el –delete opción al comando original.

rsync A/ Backup-A-dir/ --delete

4. Eliminar archivos de origen después de copiar

Si necesita eliminar los archivos en origen una vez que se completa la transferencia, –remove-source-files La opción debería ser útil.

rsync A/ Backup-A-dir/ --remove-source-files

Debe tener cuidado con el comando anterior. Debe eliminar la fuente solo si se hicieron suficientes copias y los datos ya no son necesarios en la fuente.

5. Incluir y excluir archivos

Si necesita (o no necesita) transferir archivos cuyo nombre coincida con un patrón,
–incluir y –excluir se puede utilizar la opción. Cada opción debe tener un patrón después del signo '='.

rsync A/ Backup-A-dir/ --include=*.py --exclude=*.tmp.py

El comando anterior copia todos los archivos con extensión .py excepto aquellos con extensión .tmp.py.

Puede usar una expresión regular como patrón. Obtén más información al respecto aquí.

Sugerencia:si la lista de patrones para cualquiera de las opciones es enorme, puede almacenarla en un archivo y pasar sus nombres a –include-from y –excluir-de opción.

6. rsync sobre SSH

Si desea transferir los archivos a través de SSH, debe especificar ssh con -e opción.

rsync -e ssh A/ [email protected]:~/Backup-A-dir/

Esta es la forma preferida de transferir archivos a un sistema remoto ya que está encriptada. Se debe tener en cuenta que habrá una sobrecarga involucrada debido al cifrado. Por lo tanto, puede llevar más tiempo que la transferencia normal.

Para que esto funcione, debe habilitar los inicios de sesión ssh configurados en el lado del servidor. La clave pública y la clave privada también deben estar en sus rutas respectivas.

Para obtener más información sobre ssh y su configuración, lea estos artículos de LinuxHandBook sobre la configuración de SSH del lado del cliente y la configuración de SSH del lado del servidor.

7. Modo detallado

La mayoría de los comandos en Linux tienen una opción detallada para registrar la acción del comando en la terminal. rsync no es una excepción.

Pase -v opción o —detallado opción para detallar el comando. Enumerará las acciones que se están realizando y su progreso. Esto será muy útil durante la depuración.

rsync A/ Backup-A-dir/ -v -r

La salida será similar a la siguiente

$ rsync A/ Backup-A-dir/ -v -r
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 388 bytes received 168 bytes 1,112.00 bytes/sec
total size is 0 speedup is 0.00

8. Ejecución en seco:ejecute pero no copie

En caso de que desee saber los archivos que se van a copiar sin realizar la transferencia, puede usar –dry-run (o -n ) opción.

Hace toda la operación como el rsync normal el comando lo hace excepto por la parte de copia. Enumerará los archivos que se copiarán o eliminarán (si es necesario) y luego se detendrá justo antes de copiar.

rsync -v A/ Backup-A-dir/ --dry-run

Lo que resultará en

$ rsync -v A/ Backup-A-dir/ –dry-run
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 172 bytes received 72 bytes 488.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)

Tenga en cuenta que debe usar -v opción para ver el resultado anterior del comando de ejecución en seco. De lo contrario, se realizará la ejecución de prueba, pero no mostrará los resultados.

9. Mostrar el progreso de la transferencia

Si desea mostrar el progreso de la transferencia, use el –progress opción.

rsync A/ Backup-A-dir/ --progress

El comando anterior mostrará una barra de progreso similar a la siguiente:

$ rsync -r A/ Backup-A-dir/ –progress
sending incremental file list
created directory Backup-A-dir
./
file1.txt 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=5/7)
file2.txt 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=4/7)
file3.txt 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=3/7)
file4.txt 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=2/7)
file5.txt 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=1/7)
file6.txt 0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=0/7)

10. Comprimir y transferir datos

Si desea ahorrar tiempo y ancho de banda de la red, puede comprimir los datos que se transferirán usando -z opción. Se descomprimirá automáticamente en el destino.

Este truco puede ahorrar mucho tiempo y dinero en la red cuando los datos que se van a transferir son enormes. Debe evitarse para archivos pequeños, ya que la sobrecarga de procesamiento supera el tiempo total.

rsync -z A/ Backup-A-dir/
Tenga en cuenta que se debe evitar el uso de -z opción al hacer transferencias locales y archivos pequeños. Ralentizará las cosas innecesariamente.

11. Copie recursivamente los archivos y directorios

Todos los comandos anteriores copian solo archivos, no subdirectorios (el mismo caso con todos los comandos de Linux). Como resultado, los archivos dentro de esos subdirectorios no se copian. Esto se puede eliminar mediante la copia recursiva.

Para copiar recursivamente los archivos y directorios, -r se puede utilizar la opción.

rsync -r A/ Backup-A-dir/

12. Archivar y conservar metadatos

Si desea conservar los enlaces simbólicos, las marcas de tiempo, los permisos de archivo, la propiedad de los archivos por parte de usuarios y grupos, -a se puede utilizar la opción.

rsync -a A/ Backup-A-dir/

Esta opción también incluye la funcionalidad de -r opción. Por lo tanto, copia recursivamente los archivos y conserva los metadatos de los archivos copiados.

13. Establecer límite de tamaño de archivo

Para evitar la transferencia de archivos grandes, puede establecer un límite de tamaño de archivo con la ayuda de –max-size opción. Esto le ayuda a controlar el tamaño del archivo que se copiará.

rsync --max-size='100K' A/ Backup-A-dir/ 

14. Establecer límite de ancho de banda

Si tiene restricciones en las velocidades de la red, puede especificarlas con la ayuda de –bwlimit opción. límite de bw debe expresarse en kbps .

rsync --bwlimit=100 A/ Backup-A-dir/

15. Reanudar descarga con rsync

Si la descarga/transferencia está incompleta, puede usar el comando rsync para mantener las descargas incompletas para que la transferencia pueda reanudarse la próxima vez que se emita el mismo comando.

Para reanudar la transferencia, –append se puede utilizar la opción.

rsync --append A /Backup-A-dir/

Este hilo de StackExchange es un muy buen recurso para obtener más información sobre este tema.

Todos los comandos anteriores son básicos y copian el archivo en un solo flujo o proceso. Si hay 5 TB de datos y la transferencia de 1 TB tarda 2 horas, la transferencia completa durará 10 horas. Pero hay otra forma de acelerar la transferencia

Consejo extra:Acelerar Rsync / Transferencia paralela

paralelo es una utilidad GNU Se utiliza para ejecutar trabajos en paralelo. Rsync se puede combinar fácilmente con rsync .

Instale GNU paralelo en el sistema Ubuntu/Debian usando

sudo apt install parallel

Antes de continuar, comprendamos cómo funciona el paralelo. Consideremos una analogía.

Suponga que hay 1000 huevos y 100 canastas cada uno con un dron. La tarea es entregarlo a los clientes. El gerente asigna a cada canasta 10 huevos y ordena al dron que los entregue. Cada dron hace una operación (en nuestro caso proceso rsync de 10 archivos). El gerente supervisa todos los drones. Tenga en cuenta que los drones nunca sabrán que hay otros trabajos en paralelo. Solo el Gerente lo hace.

De manera similar, rsync ejecuta la transferencia de archivos como un dron. paralelo actúa como administrador.

paralelo divide los archivos que se enviarán y genera un número específico de procesos rsync, cada uno con una lista diferente de archivos. paralelo sólo gestiona todo el proceso. rsync no tiene conocimiento de otros procesos en paralelo ni tiene una funcionalidad de transferencia paralela. Parallel proporciona transferencia paralela al agrupar tareas.

Entonces, el comando paralelo consta de dos partes que están conectadas. Uno son los argumentos (huevos/archivos) y el otro es el comando paralelo (administrador).

ls A/* | parallel -j 20 rsync A/{} /Backup-A-dir/

En el comando anterior, cada archivo/directorio en la salida como resultado del primer comando antes del símbolo '|' actúa como un argumento. {} representa el argumento de la izquierda en el comando paralelo.

-jn – Se utiliza para establecer n número de puestos de trabajo o trabajadores. En nuestro caso, n es 20.
la siguiente parte es el comando rsync habitual para cada argumento.
Una vez generados los comandos, se agruparán en 20 procesos y se ejecutarán en paralelo.

Tenga en cuenta que puede agregar cualquier opción al comando rsync anterior como lo haría sin paralelo. Simplemente agregue las opciones de rsync (como -z,-a,-e ssh) después de la palabra rsync en el comando anterior.

Si desea obtener más información sobre el paralelo, consulte esta página.

Errores comunes con rsync

Es posible que encuentre errores al usar rsync. A continuación, se incluyen algunos de los más comunes junto con sus consejos para la resolución de problemas.

1. permiso rsync denegado

Este es un error que puede ocurrir cuando utiliza rutas para las que no tiene los derechos adecuados. Por ejemplo:

rsync B/ /home/

El comando anterior provocará un error de permiso denegado, si no tiene los permisos de escritura en /home/ (los usuarios normales generalmente no lo hacen)

2. rsync no pudo establecer tiempos en

Esto sucede cuando el sistema de archivos no puede manejar los tiempos de modificación de archivos y directorios. Puede obtener más información sobre esto en esta página.

Espero que hayas aprendido algunos buenos ejemplos del comando de sincronización en este artículo. Si tiene alguna sugerencia o comentario, no dude en dejarlos a continuación.


Linux
  1. 25 ejemplos prácticos útiles del comando find en Linux

  2. Comando cp en Linux:7 ejemplos prácticos

  3. Comando de apagado de Linux:5 ejemplos prácticos

  4. Ejemplos prácticos del comando Descomprimir en Linux

  5. 10 ejemplos prácticos de comandos de Linux nm

12 ejemplos prácticos de In Command en Linux

15 ejemplos prácticos del comando Rsync en Linux

5 ejemplos prácticos de Tail Command en Linux

Comando echo en Linux:7 ejemplos prácticos

Ejemplos de comandos rsync de Linux

Ejemplos prácticos de comando ping en Linux