Echando código: ¿Como hacer para que rsync sea más inteligente?

NYC Fifth Avenue
Rsync es como un tren eficiente el cual lleva información de un sitio a otro.

Rsync, uno de los mejores inventos 🙂

En otra oportunidad (y en otro blog) les comenté de que era Rsync y como utilizarlo para copiar largas cantidades de información, pero de manera inteligente; Hace poco me encontre con el siguiente problema:

  • Se está utilizando Rsync para replicar datos, pero si hay una falla queremos que Rsync reintente la conexión
  • No queremos que Rsync copie archivos ‘core‘ ya que son muy grandes y va a hacer que la copiada tarde mucho. La opción ‘-C‘ nos ayuda con eso ya que utiliza los mismos parámetros que CVS para ignorar archivos. El problema es que queremos copiar librerías dinámicas (shared libraries, *.so) y -C las excluye automáticamente.

¿Que podemos hacer?, Sencillo, sólo envenenamos a Rsync con un wrapper escrito en Bash.

   1:#!/bin/bash
2:#
3:# This small script is an "safer" version of rsync
4:# License: GPL
5:# Author: josevnz@yahoo.com
6:# Blog: KodeGeek.com
7:#
8:declare -i counter=0
9:declare -ri MAX=3
10:declare -ri ERROR=192
11:
12:if [ -z "$*" ]; then
13: exit $ERROR
14:fi
15:
16:function my_rsync {
17: rsync --include='*.so' $*
18: return $?
19:}
20:
21:for ((counter=0; counter < MAX; counter++ ))
22:do
23: my_rsync $*
24: if [ $? != 0 ]; then
25: exit $?
26: else
27: break
28: fi
29:done; exit $?

Usted puede agregar cualquier parámetro por la linea de comandos, como incrementar el tiempo de espera (–timeout); La idea es mantener al script flexible mientras le agregamos las partes que consideramos son importantes (lease los dos requisitos anteriores). Usted puede cambiar cuantas veces se debe reintentar el comando si este falla la primera vez.

Una salida de ejemplo:

[josevnz@localhost bash]$ ./safe_rsync.sh -Czv * /tmp/bash/
backup_mysql.sh
data.dat
disk-usage.sh
download_fedora.bsh
fedora_isos.txt
getautomount
host.bsh
minute_risk.pl
openldap.conf
raid-grub.sh
safe_rsync.sh
test_bc.sh

sent 7088 bytes received 284 bytes 4914.67 bytes/sec
total size is 15247 speedup is 2.07

Si está interesado, hagamelo saber y con gusto les doy más ejemplos de como Rsync puede hacer su vida más fácil en el trabajo. Puede bajarse el código de el script desde acá como siempre.

¿Como mejoraría el script?

Buscar en Technorati: ,

4 thoughts on “Echando código: ¿Como hacer para que rsync sea más inteligente?

  1. Epale, dejaste un comentario el otro dia en mi blog. Gracias por la invitacion a leer tu blog. Esta interesante, me solia pasar por “El Angel Negro” y vi tu propuesta de intercambiar links, asi que con gusto podemos establecer contacto entre KodeGeek y CLP. Cualquier cosa contactame, mi correo es oribior@cantv.net

    Saludos!

  2. Excelente, como siempre no dejes de pasarte por mi blog dejando tus opiniones. Todas las criticas constructivas son mas que bienvenidas.
    Asi como cualquier dato que puedas agregar a lo que escribo segun tu experiencia o conocimiento que enriquezca lo ya dicho.

    Saludos de nuevo, Ronald.

  3. Necesito saber como indicarle a deltacopy que es un wrapper de rsync, que si falla, que no realice ningun reintento.

    Muchas gracias.

Comments are closed.