Rsync es una herramienta de copia de archivos rápida y extraordinariamente versátil. Puede copiar localmente, hacia/desde otro host a través de cualquier shell remoto, o hacia/desde un demonio rsync remoto. Ofrece una gran cantidad de opciones que controlan todos los aspectos de su comportamiento y permiten especificaciones muy flexibles del conjunto de archivos a copiar. Es famoso por su algoritmo de transferencia delta, que reduce la cantidad de datos enviados a través de la red enviando solo las diferencias entre los archivos de origen y los archivos existentes en el destino. Rsync se usa ampliamente para copias de seguridad y duplicación y como un comando de copia mejorado para el uso diario.
Rsync encuentra archivos que deben transferirse mediante un algoritmo de "comprobación rápida" (de forma predeterminada) que busca archivos que han cambiado de tamaño o en la última hora de modificación. Cualquier cambio en los demás atributos conservados (según lo soliciten las opciones) se realiza directamente en el archivo de destino cuando la verificación rápida indica que no es necesario actualizar los datos del archivo.
Algunas de las funciones adicionales de rsync son
- soporte para copiar enlaces, dispositivos, propietarios, grupos y permisos
- excluir y excluir de opciones similares a GNU tar
- un modo de exclusión de CVS para ignorar los mismos archivos que CVS ignoraría
- puede usar cualquier shell remoto transparente, incluidos ssh o rsh
- no requiere privilegios de superusuario
- canalización de transferencias de archivos para minimizar los costos de latencia
- soporte para demonios rsync anónimos o autenticados (ideal para duplicación)
Sintaxis
La sintaxis básica del comando rsync es:
# rsync options source destination
Algunas de las opciones comúnmente utilizadas:
- –eliminar :elimina archivos que no existen en el remitente (sistema).
- -v :Salida detallada
- -e "opciones ssh" :especifique el ssh como shell remoto
- -a :modo de archivo
- -r :recurse a directorios
- -z :comprimir datos de archivos
Ejemplos de comandos rsync en Linux
sincronizar archivos y directorios en el sistema local
# rsync -zvr /usr/ /root/sync-data/
El comando anterior copiará o sincronizará todos los archivos y directorios de la carpeta /usr a la carpeta /root/sync-data.
sincronizar archivos localmente preservando los permisos
-a Las opciones hacen lo siguiente:proporciona funciones recursivas y conserva permisos, enlaces simbólicos, usuarios e información de grupos.
# rsync -azv /usr/ /root/sync-data/
sincronizar/copiar archivos de la máquina local al servidor remoto
# rsync -avz /root/sync-data/ [email protected]:/tmp
El comando anterior copiará los datos de la carpeta /root/syc-data a la máquina remota con las credenciales de usuario root en la carpeta /tmp.
sincronizar/copiar archivos del servidor remoto a la máquina local
# rsync -avz [email protected]:/tmp/src /opt [email protected]'s password: receiving file list ... done src/ src/debug/ src/kernels/ sent 38 bytes received 99 bytes 10.96 bytes/sec total size is 0 speedup is 0.00
El comando anterior copiará la carpeta /tmp/src del servidor remoto a la carpeta /opt de la máquina local.
Sincronización remota sobre ssh
rsync nos permite sincronizar archivos con una máquina remota y viceversa a través de ssh, es decir, comunicación segura. Use "rsync -e ssh" para especificar qué shell remoto usar. En nuestro caso, rsync usará ssh.
# rsync -avz -e ssh [email protected]:/var/lib/rpm /opt The authenticity of host '192.168.2.149 (192.168.2.149)' can't be established. RSA key fingerprint is 45:fc:99:57:34:ba:6a:bb:e3:6f:00:bb:ca:15:3d:c3. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.2.149' (RSA) to the list of known hosts. [email protected]'s password: receiving file list ... done rpm/ rpm/.rpm.lock rpm/Basenames rpm/Conflictname ............ rpm/Triggername sent 422 bytes received 12521670 bytes 115410.99 bytes/sec total size is 35467264 speedup is 2.83
Ver progreso con sincronización
Podemos usar la opción “–progress” para ver el progreso de la sincronización.
# rsync -avz --progress [email protected]:/usr /opt [email protected]'s password: receiving file list ... 44609 files to consider usr/ usr/tmp -> ../var/tmp usr/bin/ usr/bin/.fipscheck.hmac 65 100% 63.48kB/s 0:00:00 (xfer#1, to-check=44605/44609) usr/bin/.ssh.hmac 65 100% 63.48kB/s 0:00:00 (xfer#2, to-check=44604/44609) usr/bin/GET 14519 100% 248.75kB/s 0:00:00 (xfer#3, to-check=44603/44609) usr/bin/HEAD 14519 100% 232.44kB/s 0:00:00 (xfer#4, to-check=44602/44609) ............
Incluir y excluir opciones en rsync
rsync nos permite especificar el patrón que queremos incluir y excluir archivos o directorios mientras realizamos la sincronización.
# rsync -avz --include 'P*' --exclude '*' [email protected]:/var/lib/rpm/ /opt [email protected]'s password: receiving file list ... done ./ Packages Providename Provideversion Pubkeys sent 129 bytes received 9395561 bytes 695977.04 bytes/sec total size is 28999680 speedup is 3.09
El ejemplo anterior incluye solo los archivos o directorios que comienzan con 'P' y excluye todos los demás archivos. (usando rsync excluir '*')
Eliminar archivos en el destino si los archivos no están presentes en el origen
Con la ayuda de la opción “–delete” en rsync, podemos eliminar los archivos creados en el destino si los mismos archivos no están presentes en el origen.
# rsync -avz --delete [email protected]:/var/lib/rpm/ /opt
EJEMPLO:9 VER LOS CAMBIOS ENTRE FUENTE Y OBJETIVO UTILIZANDO LA OPCIÓN "-I"
Ver los cambios entre origen y destino
Puede ver los cambios entre los archivos de origen y de destino utilizando la opción "-i". Por ejemplo:
# rsync -avzi [email protected]:/var/lib/rpm/ /opt [email protected]'s password: receiving file list ... done >f+++++++ .rpm.lock >f+++++++ Basenames >f+++++++ Conflictname >f+++++++ Dirnames >f+++++++ Filedigests >f+++++++ Group >f+++++++ Installtid >f+++++++ Name >f+++++++ Obsoletename >f+++++++ Requirename >f+++++++ Requireversion >f+++++++ Sha1header >f+++++++ Sigmd5 >f+++++++ Triggername sent 328 bytes received 3126214 bytes 297765.90 bytes/sec total size is 35467264 speedup is 11.34
Limitar el tamaño del archivo de transferencia
Puede obligar a rsync a no transferir archivos que superen un tamaño específico utilizando la opción "–max-size".
# rsync -avz --max-size='200k' [email protected]:/var/lib/rpm/ /opt
El comando anterior hace que rsync transfiera solo los archivos que son menores o iguales a 200K. Podemos indicar M para megas y G para gigas.