«

»

21st abril 2012

Como hacer copias incrementales o transferir datos con Rsync en Linux

Normalmente las mejores utilidades suelen ser aplicaciones simples pero de gran funcionalidad, en los sistemas Unix suele haber muchas utilidades integradas por defecto en los sistemas y GNU/Linux no es una excepción. Rsync es una de las mejores aplicaciones para poder transferir datos mediante el protocolo ssh, el funcionamiento es simple pero ofrece multitud de opciones que a continuación iremos detallando. Rsync sirve para realizar backups incrementales como para transferir archivos de un ordenador a otro mediante red, ya sea por cable Ethernet, wifi o cualquier otra conexión compatible con nuestra red.

Lo mejor de todo es que funciona en modo texto en la terminal por lo que no sera necesario ni tener desplegado un servidor gráfico, la flexibilidad del programa permite ser utiliza tanto en entornos locales de red como por Internet permitiendo técnicas de compresión de archivos para facilitar la transmisión por Internet y no saturar el ancho de banda. Otra de las características del programa es que apenas consume recursos del ordenador por tanto es ideal para maquinas antiguas o servidores donde cada ciclo del procesador de mas cuenta.

Vamos a hacer un pequeño tutorial lo mas genérico posible para que los que leáis el post podáis adaptar la información a vuestras necesidades, esta explicación servirá tanto para hacer copias incrementales como para transferir datos. Las copias incrementales son realmente interesantes ya que si en una carpeta llena de archivos donde ademas ya tengamos hecho el backup añadimos mas archivos, al volver a copiar con Rsync este solo copiara los nuevos archivos detectados o el resto si ha sufrido cualquier tipo de cambio, lo que ahorra mucho tiempo y recursos.

Para el ejemplo tendremos dos ordenadores de los cuales llamaremos HOST1 y HOST2, no esta de mas recordar que si vamos a transferir datos muy pesados es ideal hacerlo mediante una vía de alta velocidad como Gigabit Ethernet, ya escribimos hace tiempo un tutorial sobre como saber a que velocidad va nuestro Ethernet.

Bien, si estamos utilizando Ubuntu, Debian o cualquier derivado, Rsync debería estar instalado por defecto, en el caso contrario lo instalamos con:

sudo apt-get install rsync

Para poder transferir mediante ssh también necesitaremos los paquetes correspondientes y crear una huella digital de identificación, para ello solo tenemos que instalar el paquete ssh de la siguiente manera

sudo apt-get install ssh

Como hemos podido ver se han creado dos tipos de encriptación para la autentificación en red. Si estamos utilizando cualquier otra distribución el uso en terminal sera igual, solamente tendréis que usar vuestro gestor de paquetes o actualizaciones para instalar Rsync y ssh en el caso de no tenerlos instalados.

Ahora necesitaremos conocer la dirección IP de cada ordenador, y si ademas ambos ordenadores en vez de estar conectados en modo ad-hoc lo están mediante un router, pasarela o switch también deberemos conocer la dirección IP en cuestión. Para ello en cada ordenador escribimos lo siguiente en la terminal:

ifconfig

Con esto nos mostrara la información de todas las tarjetas de red que tengamos instaladas en nuestros ordenadores y sus direcciones IP correspondientes. Para conocer la dirección del router al que están conectados en cualquier de los ordenadores ejecutamos el siguiente comando:

arp -a

Con esto nos mostrara la tabla arp indicándonos la dirección IP. Una vez apuntados estos datos procedemos a realizar la transferencia mediante Rsync. Como existen múltiples opciones para la transferencia solo vamos a explicar las mas comunes, en el caso de que queráis conocer mas a fondo os recomiendo leer la documentación completa del programa. Abrimos la terminal en el ordenador HOST2 donde queremos copiar unos archivos que están en HOST1, y escribimos lo siguiente:

sudo rsync -av -e ssh USUARIO@IP:/ruta/HOST1 /ruta/HOST2

Esta es la sintaxis básica del programa, las opciones que hemos indicado son -a indica archive mode y sirve para que haga una lista con todos los archivos a copiar, es un modo de indexar los cambios al momento, -v indica verbose mode y como dice el nombre, es para que muestre en pantalla el progreso de la transferencia en tiempo real. La opción -e indica que queremos utilizar el protocolo ssh en vez del protocolo rsh que es el que utiliza Rsync por defecto, la diferencia es que ssh es mucho mas seguro ya que todos los paquetes están encriptados usando la huella que hemos creado anteriormente. Después tenemos que escribir el nombre del usuario del ordenador remoto mas la IP que antes hemos averiguado, una vez tenemos los datos de conexión escribimos la ruta donde están los archivos, el único inconveniente que tiene este método es que hay que escribirlo exactamente, si no la transferencia no se realizara debido a que no encontrara la ruta correcta. Para ser mas concretos, supondremos que queremos copiar el contenido de mi carpeta de música del ordenador HOST1 al otro ordenador HOST2. El comando seria el siguiente:

sudo rsync -av -e ssh leanux@192.168.1.XXX:/home/leanux/Musica/ /home/leanux/Musica

Si os fijáis en la ruta de los archivos, el espacio es para separar HOST1de HOST2, un detalle importante es que en la primera frase hay una barra después de Musica indicando que solo quiero copiar el contenido de dentro de la carpeta no la carpeta en si, y en la segunda frase estoy pidiendo que me copie esos archivos dentro de la carpeta Musica, por tanto me la tendrá que crear primero.

En el caso de querer realizar copiar incrementales es exactamente igual, si después de haber copiado todos los archivos de la carpeta música, volvemos a escribir el comando completo, solo se copiaran los cambios que no coincidan con la copia, así se evita tener que reescribir lo que ya tenemos.

Si estamos utilizando Rsync por Internet en vez de por una red local, hay una opción -z que lo que hace es comprimir todos los paquetes para que sea menos pesado transferir por Internet. Al principio puede parecer un poco ortopédico trabajar con Rsync, pero una vez que te acostumbras es de las mejores utilidades que hay.

4 comentarios

Sin pings

  1. Superuser escribió:

    Me ha parecido muy útil, cuando me haga falta lo pondré en práctica. Una duda, ¿por wi-fi sobre que velocidad debería transferir?.

    Positivo o Negativo: Thumb up 1 Thumb down 0

  2. Leanux Xenos escribió:

    Pues depende de que version de wifi estemos hablando, pero teniendo en cuenta que la mas comun a dia de hoy sigue siendo 802.11abg, con un maximo de 54Mbits, da una tasa de unos 6,75MB por segundo. Vamos, que como necesites pasar algunos GB te puedes ir a a cenar a un buen restaurante.

    Lo ideal es hacerlo por GIgabit Ethernet, aunque Fast Ethernet ya es el doble de ancho de banda que wifi g. Hace un par de meses compre un rack con soporte para Ethernet 10 Gigabit, y tengo una configuracion de cable cruzado por lo que son 10Gb de ida y 10Gb de vuelta. Ahora estoy limitado por la velocidad de escritura del disco duro y no por la red xD.

    Positivo o Negativo: Thumb up 0 Thumb down 0

  3. Superuser escribió:

    Creo que te vas a tener que esperar a que las SSD bajen de precio xD, por que ahora mismo— eso si, deben de ser una gozada, aunque tal y como están ahora mismo no los veo en otro sitio que en un ultrabook, para un fijo prefiero un disco duro a 7200 rpm que ya es rapidito, más económico y con mayor cantidad de almacenamiento.

    Positivo o Negativo: Thumb up 1 Thumb down 0

  4. Leanux Xenos escribió:

    Pues no creas xD, tengo un Corsair Force 3 en el sobremesa con escritura de unos 400MBps de media, pero con el nuevo sistema de red, dispongo de unos teoricos 1,2GB por segundo, vamos que ni juntando dos en RAID0, pero bueno, siempre esta bien tener mas margen en la red y que no haya cuellos de botella.

    Por fiabilidad tambien prefiero un disco mecanico, de hecho tengo discos SAS de 10k en el servidor y no los cambio por ningun SSD del mercado.

    Positivo o Negativo: Thumb up 0 Thumb down 0

Deja un comentario