rsync o sincronización remota es una utilidad de software para sistemas similares a Unix que sincroniza de manera eficiente archivos y directorios entre dos hosts o máquinas. Uno de ellos es la fuente o el host local desde el que se sincronizarán los archivos, el otro es el host remoto, en el que se realizará la sincronización. Básicamente, hay dos formas en que rsync puede copiar/sincronizar datos:
- Copiar/sincronizar a/desde otro host a través de cualquier shell remoto como ssh , rsh .
- Copiando/sincronizando a través del demonio rsync usando TCP.
Rsync es famoso por su algoritmo de transferencia delta , en el que copia solo las diferencias entre los archivos de origen presentes en el host local y los archivos existentes en el destino o el host remoto.
Ejemplo:
rsync local-file user@remote-host:remote-file
Qué sucede aquí: Rsync primero usará SSH para conectarse user
a un host remoto y le pedirá una user's
contraseña. Una vez conectado, invocará el rsync del host remoto y luego los dos programas determinarán qué partes del archivo local deben copiarse para que el archivo remoto coincida con el local. Tenga en cuenta el siguiente comportamiento de rsync:
- Se copian los archivos que no existen en el host remoto.
- Los archivos que se han actualizado se sincronizarán, rsync copiará solo las partes modificadas de los archivos al host remoto.
- Los archivos que son exactamente iguales no se copian en absoluto en el host remoto.
Sintaxis de rsync:
rsync [options] source [destination]
Opciones:
- -a, –archive: Esto es equivalente a usar -rlptgoD . El modo de archivo incluye todas las opciones necesarias, como copiar archivos de forma recursiva, conservando casi todo (como enlaces simbólicos, permisos de archivos, propiedad de usuarios y grupos y marcas de tiempo).
-a, --archive
Nota: el modo de archivo no conserva los enlaces duros, porque encontrar archivos con enlaces múltiples es costoso. Las opciones A -H deben especificarse explícitamente para enlaces duros.
- -v, –verbose: de forma predeterminada, rsync funciona en silencio. Una sola -v nos dará información sobre qué archivos se están transfiriendo y un breve resumen sobre los datos transferidos al final. Dos opciones -v nos darán información sobre el estado de la transmisión delta y sobre qué archivos están actualizados para omitirlos y un poco más de información al final. Por lo general, se utilizan más de dos opciones -v para depurar rsync.
-v, --verbose
- -h, –formato legible por humanos: Salidas en un formato legible por humanos.
-h, --human-readable format
- -z, –compress: comprime los datos del archivo durante la transferencia
-z, --compress
Ejemplos:
ls -l
.
rsync foo/
El comando anterior enumerará los archivos y directorios presentes en el directorio foo .
Producción:
rsync -avh foo/ bar/
El comando anterior copiará/sincronizará todos los archivos y directorios presentes en el directorio foo
a la barra de directorios . Si el directorio de destino no está presente (aquí bar
), rsync crea uno automáticamente y copia todos los datos en él.
Producción:
- Usar un programa de shell remoto como transporte (como
ssh
(Secure Shell) orsh
(Remote Shell)). - Ponerse en contacto con un demonio rsync directamente a través de TCP.
Aquí discutiremos rsync sobre ssh.
rsync -avhze ssh /foo user@remote-host:/tmp/
Para especificar el tipo de protocolo a utilizar, -e
se utiliza la opción.
Producción:
rsync -avhe ssh --chown=USER:GROUP /foo user@remote-host:/tmp/
El comando anterior sincronizará todos los archivos presentes en el directorio / foo con los archivos presentes en el directorio / tmp con remote-host
todos los archivos propiedad del USUARIO con el grupo GRUPO.
Producción:
Nota: El user
y group
ya debe estar creado en el host remoto.
--ignore-existing-files:
También podemos omitir los archivos ya existentes en el destino. Esto generalmente se puede usar cuando estamos realizando copias de seguridad usando la opción -link-dest , mientras continuamos con una ejecución de copia de seguridad que se interrumpió.
rsync --ignore-existing -avhe /foo user@remote-host:/tmp/
Por lo tanto, se copiarán todos los archivos que no existan en el destino. Aquí he eliminado la geeksforgeeks
carpeta del directorio foo
, por lo que debería copiar solo el geeksforgeeks
directorio.
Nota: Esto no ignora los directorios existentes, o no se haría nada. Incluso si hay algunos cambios en un archivo en el host local, aún no se sincronizará si está presente en el host remoto.
Producción:
-–progress
opción.
rsync -avhe ssh --progress /foo user@remote-host:/tmp/
Cuando se completa la transferencia de un archivo en particular, rsync genera una línea de resumen como se muestra a continuación.
Producción:
En la imagen de arriba, si miramos el archivo /foo/file2
, nos dice que
- El archivo tenía una longitud total de 44 bytes.
- La velocidad promedio de transferencia para todo el archivo fue de 42,97 kilobytes por segundo durante los 0:00:00 segundos que tardó en completarse.
- Fue la segunda transferencia durante la sesión actual de rsync .
- Quedan 10 archivos más para que el host remoto verifique (para ver si están actualizados o no) de los 13 archivos totales en la lista de archivos.
- Se copian los archivos que no existen en el host remoto.
- Los archivos que existen tanto en el local como en el remoto, pero que tienen una marca de tiempo más reciente en el host local, se copian en el host remoto. (Por el contrario, los archivos que tienen una marca de tiempo más antigua no se copian).
Aquí, hice algunos cambios en file1 y file2 , pero los cambios en file2 se realizaron recientemente. Entonces solo, el archivo 2 se sincronizará.
rsync -avhe ssh --progress --update /foo root@remote-host:/tmp/
Producción:
--remove-source-files
bandera para eliminar automáticamente los archivos del servidor web.
rsync -avhe ssh --remove-source-files /foo user@backup-server:/tmp
Producción:
Nota: Esto eliminará solo los archivos y no los directorios.
--delete
opción.
rsync -avhe ssh /foo --delete user@remote-host:/tmp/
Producción:
Entonces, aquí file1 , file2 , file3 se eliminaron en el host local y, como se puede ver, también se actualizaron en el host remoto.
Nota: rsync no elimina los archivos automáticamente para sincronizar los directorios presentes en ambos lados.
rsync -avhe ssh --dry-run --chown=USER:GROUP /foo user@remote-host:/
Producción:
Publicación traducida automáticamente
Artículo escrito por abhayTiwari2 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA