Sincronización PC-USB-PC con rsync


Muchas veces termino de trabajar y al llegar a casa, en la tranquilidad del hogar, se me ocurren soluciones a problemas que me gustarían resolver, o quizás realizar pruebas o sencillamente, trastear un poco con el código que tengo. Pero para esto, he de mantener dos entornos de trabajo sincronizados y si no fuera por el firewall de la empresa, todo sería más fácil. Para resolver esto, decidí hace algún tiempo utilizar un pen-drive USB y rsync.



Dado que trabajo sólo con Eclipse, tener entornos (workspace) separados, es muy sencillo. Incluso tengo un eclipse para J2EE y otro para Android y será este último el que utilizare para el ejemplo.



En resumen: HOWTO Sincronizar con un pen-drive utilizando rsync.



Lo primero, instalar rsync y leer un poco la página man. A continuación, es conveniente, siempre y cuando nuestros entornos (casa y trabajo) soporten EXT3, formatear el pen-drive para que utilice este sistemas de ficheros. Esto es totalmente opcional, ya que con un pen-drive con FAT32 (el 99,9999999%) esto funcionará, sólo que rsync empezará a escupir errores al no poder cambiar los permisos de los ficheros.



Entonces, enchufamos el pen-drive y si se monta automáticamente, podremos ver los datos que queremos ejecutando el comando df. Lo que nos interesa es el dispositivo asignado al pen-drive en /dev, algo como /dev/sdb. Cada partición será indicada por el número que seguido a /dev/sdb. Por lo que nuestra primera partición en el pen-drive será /dev/sdb1. Hay que desmontar todas las particiones antes de continuar.


Particionar el pen-drive(opcional)


Podemos particionar el pen-drive con fdisk /dev/sdb para tener dos particiones, una EXT3 y otra FAT32 para mantener cierta compatibilidad con otros sistemas que no soportan EXT3 (Windows).



Formatear una partición del pen-drive con EXT3



$sudo mkfs.ext3 /dev/sdb1



Cambiamos el nombre a algo que nos guste:



$sudo e2label /dev/sdb1 linux-usb



Con esto ya tendremos la primera partición del pen-drive con el sistema EXT3. Sólo nos queda reconectar el pen-drive.


Sincronizar un directorio al USB con rsync



Debemos crear un directorio con el mismo nombre en el pen-drive al cual queremos sincronizar. En nuestro caso será android-workspace.



$sudo mkdir /media/linux-usb/android-workspace



Ahora cambiamos los permisos para que todos los usuarios puedan escribir en ese directorio:



$sudo chmod go+w /media/linux-usb/android-workspace



Gracias a esto nos ahorramos el ejecutar sudo cada vez que deseemos trabajar sobre este directorio.



Finalmente, ya podemos sincronizar nuestro directorio con el que hemos creado en el pen-drive:



$rsync -rupogt -delete /home/uber/android-workspace/ /media/linux-usb/android-workspace



Nota: es importante seguir rigurosamente el uso indicado de los /. Leed el man para saber por que.



También es importante indicar la opción -delete dada su importancia. Lo único que hace, es indicar a rsync que deseamos eliminar los ficheros y directorios en el directorio de destino que no estan en el directorio origen. De esta manera si movemos un fichero a un directorio distinto, lo mismo ocurrira al realizar la sincronización. Sin el -delete acabariamos con dos copias de ese fichero. Tambien es peligroso, así que utilizad con cuidado. La opción -n de rsync ayuda.



Ahora al llegar a casa, ejecutamos el mismo comando, pero a la inversa, y tendremos el mismo workspace de la oficina en casa.


Como dije antes, esto sería mucho más sencillo sin el firewall de por medio, pero al menos tengo mis datos almacenados en tres sitios distintos para los peores casos.