Posts Tagged ‘rsync’

Enlaces simbólicos y scp

Wednesday, July 9th, 2008

Me tocó hacer unos respaldos de cantidades importantes de archivos, entre dos equipos que se encontraban localizados en la misma red. Al enfrentar dicho trabajo, supuse erróneamente que sería muy fácil utilizando el comando scp, utilizando el parámetro r.


# scp -r /home/dante root@192.168.1.1:/mnt/disk015/dante

Se necesitaban respaldar aproximadamente 210GB. Calculé que el proceso iba a tomar aproximadamente unas 5 horas, dejo los cálculos, espero que estén bien :-P

  • 210 GB = 225485783040 Bytes
  • 225485783040 Bytes = 1803886264320 bits
  • 1803886264320 bits = 1803886 mbits
  • A 100 mbps -> 18038 segundos
  • 18038 segundos = 5 horas

La cuestión es que al pasar las cinco horas seguía copiando. Deje que siguiera, creyendo que había algún error de redondeo u horrores en los cálculos anteriores, pero luego de 3 horas más (con un total de 8 horas) ¡todavía seguía copiando!

Tenía dos hipótesis:

  1. Tengo serios problemas con las matemáticas.
  2. Pasa algo raro con el comando scp.

Con respecto a la primera todavía tengo dudas :-D En cuanto a la segunda, pude comprobar que scp no entiende los links simbólicos. Por lo tanto, al encontrar un link simbólico, no lo respeta y lo sigue, copiando todo el contenido al que apunta. Para entender la magnitud de esto, les sigo comentando mi experiencia.

rsync

Es un programa similar a rcp, pero tiene muchas más opciones. Además permite transferir sólo las diferencias entre archivos, logrando velocidad de transferencia.

Al revisar las copias, comprobé lo comentado anteriormente. Efectivamente, hacía copias de los contenidos apuntados por los links simbólicos. El problema principal fue un serie de links simbólicos que apuntaban a una carpeta llamada “Videos”,que pesaba unos 120GB y existían 3 links simbólicos a esta carpeta, entonces de los 120GB que creí que se debían copiar, pase a copiar ¡360GB!

Todo esto pude haberlo aludido si hubiese sabido sobre el comando rsync, su uso es tan sencillo como scp.


# rsync -r -l -t -v -u /home/dante root@192.168.1.1:/mnt/disk015/dante

Las opciones que utilicé indican.

r
Recursive, recurre dentro de los directorios.
l
Links, al encontrarse con un link simbólico lo copia como tal.
t
Time, preserva los tiempos (de los archivos) al copiarlos.
v
Verbosity, incrementa la verbosidad en la salida del comando.
u
Updates, no copia archivos que estén actualizados en el receptor.

Además de estas opciones, se encuentran muchas más y muy útiles. Puedes consultar todas las opciones y ejemplos de uso en las páginas man de rsync[samba.org].

Excluyendo carpetas o archivos

Al realizar un backup de una carpeta como home es frecuente que se encuentren archivos o carpetas que no necesitan ser respaldadas, esto puede ser indicado a rsync con el parámetro exclude. Por ejemplo, supongamos que queramos excluir del respaldo la carpeta foo/ relativa /home/dante/:


# rsync -r -l -t -v -u --exclude 'foo' /home/dante root@192.168.1.1:/mnt/disk015/dante

Nota: el archivo o carpeta a excluir debe ir entre comillas simples.

Excluir más de un archivo o carpeta

Será necesario editar un simple archivo de texto plano que liste los archivos o carpetas que no se deberán respaldar. Un pequeño ejemplo podría ser:


quux
quuux/tmp/*/*.pid
quuuux
baz

Guardamos el archivo como no_respaldar en /home/dante/ y se lo indicamos a rsync:


# rsync -r -l -t -v -u --exclude-from 'no_respaldar' /home/dante root@192.168.1.1:/mnt/disk015/dante

Problemas frecuentes

Al ejecutar el comando puede ser que obtengas la siguiente salida:


rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: remote command not found (code 127) at io.c(454) [sender=2.6.9]

Para solucionarlo basta instalar rsync también en la máquina remota.