Speed up rsync

Hace un tiempo en Speed up rm, les conté como ejecutar en paralelo muchos rm’s para borrar muchos archivos. ¡Pues ahora les traigo lo contrario!

¿Qué pasa cuando quienes copiar muchos archivos o directorios que son muy grandes?  ¡Pues acá el paralelismo también nos ayuda!

Usualmente se usa rsync para este tipo de labores, pero cuando son muy grandes y muchos, esto se puede volver brutalmente lento.

Por ejemplo, si quisiéramos copiar todos los datos del un servidor mysql hacia el /var/lib/mysql/data de otro servidor podemos ejecutar algo como esto:

cd /var/lib/mysql/data
ls | xargs --max-procs=4 -I% rsync -avz % root@servidorDestino:$PWD/

Con esto, vamos a ejecutar 4 rsync’s en paralelo con 1 archivo o directorio cada uno (ya que -I implica –max-args=1), desde el servidor local al servidorDestino.

Notas:

  • En el servidor local, se debe bajar el servicio mysql primero, do’h!
  • Se asume que el directorio /var/lib/mysql/data está creado y vacio en el servidor de destino.
  • Se utilizó ssh para realizar la conexión.
  • La autenticación se realizó utilizando llave ssh. Esto es altamente recomendable, si no, por cada rsync deberán introducir una contraseña.

¡Ojalá les sirva!

Speed up rm

¿Han tenido alguna vez que borrar muchos archivos en un mismo, pero son tanto que se aburren de esperar que eso suceda?

Pues, a mi me pasa regularmente con directorios que contienen millones de archivos pequeños.

Acá, rm es muy lento, ya que el borrado se hace en serie… uno por uno… Seremos abuelos antes de que termine. 🙁

¿Y no se puede paralelizar?
Por supuesto que si se puede acelerar rm!!

Que les parece si creamos 100 procesos de rm que borren 1000 archivos cada uno?

ls | xargs --max-args=1000 --max-procs=100 rm -f

Y bueno, pueden ser tan creativos como quieran….

find $directory -mmin +$seconds -type f | xargs --max-args=1000 --max-procs=100 rm -f {} \;

Que lo disfruten! 😉