Sincronizar con rsync
Buenas tardes, internautas bloggeros.
En esta entrada les voy a contar sobre rsync, una herramienta tremenda que me permitió ahorrar mucho tiempo a la hora de copiar grandes volúmenes de información de una pc a otra.
Tal como dice la Wikipedia, rsync es una aplicación libre para sistemas de tipo Unix y Microsoft Windows que ofrece transmisión eficiente de datos incrementales, que opera también con datos comprimidos y cifrados. Mediante una técnica de delta encoding, permite sincronizar archivos y directorios entre dos máquinas de una red o entre dos ubicaciones en una misma máquina, minimizando el volumen de datos transferidos. Una característica importante de rsync no encontrada en la mayoría de programas o protocolos es que la copia toma lugar con sólo una transmisión en cada dirección. rsync puede copiar o mostrar directorios contenidos y copia de archivos, opcionalmente usando compresión y recursión.
En mi caso, tenía que sacar todos los archivos personales de mi notebook (unos 350GB) y enviarlos a mi desktop. En realidad no es mucha información, pero como no tengo disco externo y mis pendrives tienen capacidad de almacenamiento de 8GB y 16GB, tenía que encontrar la manera de hacer esto lo más rápido posible.
En mi primer intento de copiar los archivos usé ssh. Una mala elección verdaderamente. A través de MC la transferencia se hizo lenta y se me colgó varias veces.
Quizás podría haberlo hecho a través de FTP, pero no tenía los paquetes instalados y tenía que modificar el firewall de mi máquina. Por lo que opté usar rsync, a la vez que me permitiría aprender las funcionalidades y las virtudes de la herramienta.
La sintaxis básica de rsync es la siguiente:
rsync -avh /home/verovan /tmp/pruebas/
Las opciones utilidas más comunmente son:
-v: modo verboso.
-r: copia datos en forma recursiva pero no mantiene permisos ni propietarios.
-a: modo de archivo. Copia datos en forma recursiva y mantiene propietarios y permisos.
-z: comprime los datos al copiar.
-h: muestra números amigables para el usuario.
Algo que caracteriza a rsync es que se puede enviar archivos sobre un túnel SSH. Mediante este comando
rsync -avh /home/verovan verovan@192.168.0.1:/home/verovan
podemos enviar nuestros archivos de manera cifrada.
Peeeerooo... estaba enviado 20GB de datos y la velocidad de transferencia era de apenas 10000KB/s!!! Con la herramienta iptraf monitoreaba lo que ocurría:
![]() |
PC que envía los datos |
No me agradaba la idea de pasarme varias horas esperando a que todo se envíe, por lo que me puse a investigar para mejorar la velociadad de transferencia.
Básicamente, de acuerdo a lo que leí, era necesario habilitar el sistema de cifrado arcfour en la máquina destino, que si bien es inseguro pero es ligero, para alivianar el procesamiento y aumentar la velocidad de transferencia.
En el fichero /etc/ssh/sshd_config agregué
Ciphers 3des-cbc,blowfish-cbc,cast128-cbc,arcfour,arcfour128,arcfour256,aes128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
Hecho eso volví a probar el envío de información, pero esta vez de la siguiente manera:
rsync -aHAXxv --numeric-ids --delete --progress -e "ssh -T -c arcfour -o Compression=no -x" user@<source>:<source_dir> <dest_dir>
donde los nuevos parámetros significan lo siguiente:
- a: archive mode - rescursive, preserves owner, preserves permissions, preserves modification times, preserves group, copies symlinks as symlinks, preserves device files.
- H: preserves hard-links
- A: preserves ACLs
- X: preserves extended attributes
- x: don't cross file-system boundaries
- v: increase verbosity
- --numeric-ds: don't map uid/gid values by user/group name
- --delete: delete extraneous files from dest dirs (differential clean-up during sync)
- --progress: show progress during transfer
ssh
- T: turn off pseudo-tty to decrease cpu load on destination.
- c arcfour: use the weakest but fastest SSH encryption. Must specify "Ciphers arcfour" in sshd_config on destination.
- o Compression=no: Turn off SSH compression.
- x: turn off X forwarding if it is on by default.
Y... voliá! La velocidad aumentó notablemente a casi 90000KB/s! iptraf nos lo muestra:
![]() |
PC que envía los datos |
También algo determinante fue la elección del medio físico de transmisión. Sin darme cuenta usé un cable UTP cat 5 pero de dos pares, por lo que la velocidad jamás mejoría si no lo cambiaba por uno de cuatro pares.
Hay mucho más que esto para hacer con rsync. Para hacer respaldos incrementales es una de las herramientas más elegidas por su facilidad de uso. Sólo hay que ponerse manos a la obra y jugar un poco :D
Saludos... y happy config!
Muy buen post vero. Saludos
ResponderBorrarGracias, Dani!
Borrar