Xarx.es

Dèries. La meua llibreta d'anotacions.

Rsync a Través De SSH. Almacenado en FAT


La intención es respaldar una serie de carpetas en un equipo cliente a otro servidor. Realmente manteniendo una copia (mirror) de la original sin compresión, ni backups incrementales o diferenciales.

Las características de los sistemas hacen que usemos:

1. rsync en el cliente-origen de la información
2. la transferencia sea a través de ssh
3. el servidor-receptor de la información carece de demonio rsync
4. el sistema de archivos en el que se almacena la información es FAT

Realmente el cliente es el taperserver del que ya hemos hablado anteriormente y el servidor en el que se almacena la información es un NSLU2 de Linksys al que se le ha modificado el firmware hasta un Unslung V2.3R63-uNSLUng-6.8 (ver nslu2-linux para mas detalle). Ambos están conectados a internet con conexiones de banda ancha (o más bien estrecha) de diferentes proveedores y en lugares separados.

Para poner en marcha esta copia necesitamos que inicialmente en el equipo cliente esté instalado rsync, cron y openssh. Este último es necesario para crear las claves para que no haya que introducir las claves cada vez y podamos automatizar la copia usando cron. En el servidor bastará con openssh.
Lo primero que deberemos hacer es probar manualmente que se puede realizar la copia. En la mayor parte de los tutoriales recomiendan ejecutar desde el cliente:
1
$ rsync -avz -e ssh carpeta-del-contenido-a-copiar/ usuarioremoto@serverdestino:/carpeta-destino/
donde las opciones son a:archive(=-rlptgoD), v:verbose y z:comprimir. Si se usa la opción –dry-run podemos hacer una prueba con todo menos con la copia real por lo que es una buena opción a incluir inicialmente.

Dado que tratamos de almacenar en un sistema FAT tendremos problemas con los nombres, con los permisos, con las fechas,… vamos que no nos sirve el -a. Se podría forzar el montaje del sistema de archivos con opciones de “lower” o “mixed” dependiendo de lo que nos convenga pero en el nslu2 con ese firmware me ha parecido que no permite seleccionarlo.

Las opciones típicas para rsync sobre FAT son “rsync -rvt –modify-window=1 –delete origen/ destino/” sin embargo también se deben considerar –size-only y –checksum (=-c). Esta última es más lenta pero es la que a mi me ha funcionado.

Una vez verificado el funcionamiento de rsync prepararemos las claves para que se pueda conectar sin pedirnos contraseña. Generamos en el equipo cliente el par de claves pública y privada:

1
$ ssh-keygen -t rsa -b 2048 -f /home/usuario/clave-de-este-host

Copiamos el archivo con la extensión .pub al servidor y lo añadimos en el archivo known_hosts de la carpeta .ssh del usuario que vamos a utilizar. En el cliente tenemos dos opciones, usar la opción -i cuando llamemos a ssh seguido del archivo de la clave privada o bien renombrarla como id_rsa y id_rsa.pub y moverlas a la carpeta .ssh del usuario que ejecutará la copia para que se tomen como las claves por defecto. Finalmente solo nos queda añadir la linea adecuada al cron del usuario:

‘Añadir a cron (ejemplo: crontab -e)’
1
2
#sincronizar respaldo
05 01 * /usr/bin/rsync -rvc -e 'ssh -c blowfish-cbc' carpeta-copiar/ usuario@nslu2:/carpeta-destino/ >> ~/archivo.log

donde la opción -c blowfixh-cbc tiene que ver con acelerar la transmisión con una encriptación menor. Dependiendo de que se vaya a transferir también se puede comprimir la transferencia con la opción adecuada en el ssh. Sin embargo la idea es que el nslu2 tenga la menor carga posible y además muchos de los archivos a transferir serán pdf, jpg o archivos ya comprimidos con lo que tampoco ganamos nada volviendo a comprimir.

Comentarios