Respaldar archivos usando Rsync

martes, septiembre 18, 2012

En ocasiones nos toca respaldar gran cantidad de información de un equipo a otro y una de las maneras más cómodas de hacerlo es a través de la red. Para esta tarea usaremos Rsync que, al igual que netcat, son unas navajas suizas en lo que a red se refiere. Rsync, entre otras cosas, nos permite sincronizar directorios a través de la red y de esa forma lo usaremos para enviar nuestros archivos de un equipo a otro.

Comando y parámetros

Lo primero que necesitamos es acceso vía SSH al equipo remoto. Puede ser por clave pública o con usuario y contraseña. Luego nos ubicamos en la carpeta que queremos respaldar y ejecutamos el comando: $ rsync -ravz archivo_a_respaldar usuario@IP:directorio_destino Donde:
  • r: recorre los directorios de manera recursiva
  • a: conserva los atributos de los archivos (usuario, permisos, etc)
  • v: imprime información en pantalla
  • z: comprime los datos antes de enviar
Luego de la autenticación comenzará la copia de los archivos. Es importante resaltar que en el directorio_destino debemos colocar la ruta absoluta a la carpeta.

Copiar un archivo

Supongamos que queremos respaldar el archivo backup.tar.gz en un equipo remoto con IP 192.168.0.3, el usuario es satanas y el directorio destino es el home del usuario, el comando nos quedaría así:
$ rsync -avz backup.tar.gz satanas@192.168.0.3:~
El símbolo ~ puede sustituirse por la ruta absoluta /home/satanas.

Copiar un directorio y todos sus subdirectorios

Ahora supongamos que queremos respaldar el directorio /tmp/music en el mismo equipo anterior pero ahora el destino es la carpeta /home/satanas/musica, el comando nos quedaría así: $ rsync -ravz /tmp/music satanas@192.168.0.3:/home/satanas/musica

Con esta receta podremos pasar nuestro respaldo de archivos de un equipo a otro sin mucho inconveniente. Espero que les sirva

9 comentarios:

parismiguel dijo...

Buenas tardes, deseo hacer una copia de archivos de una computadora con Windows 7 en mi red wifi hacia mi Macbook ejecutando el siguiente script desde automator pero no logro que funcione. me pueden ayudar por favor?


rsync -auv parishpg@centralhpglam: /Peru /Users/Paris/Documents/HPG

Unknown dijo...

Hola Paris,

Estás usando incorrectamente la sintaxis del rsync. Debes colocar los parámetros, el origen (la ruta local a los archivos) y luego el destino, que viene formado por el usuario, la IP y la ruta remota sin espacios entre ellos: usuario@IP:/ruta/remota. Suponiendo que /Peru es tu ruta local y /Users/Paris/Documents/HPG es tu ruta remota quedaría:

rsync -auv /Peru parishpg@centralhpglam:/Users/Paris/Documents/HPG

Espero haberte ayudado.

Saludos

parismiguel dijo...

Muchas gracias Wil! aunque no estoy seguro de haberme explicado bien: en mi empresa trabajamos todos los documentos en la PC que tiene Windows conectandonos por red... esto funciona a manera de "servidor" pero solo es una PC. Yo me conecto al servidor desde mi Macbook para trabajar. Lo que quiero es luego tener copia actualizada de todo lo grabado en el servidor para llevarmelo en la Macbook en reuniones con mis clientes. Entonces, el origen es a PC con Windows y el destino es mi Macbook, ejecutando el script desde mi Macbook. Ayúdame por favor hermano!

Unknown dijo...

Paris,

En ese caso quedaría muy parecido a lo que posteaste al principio, solo que debes eliminar el espacio entre la ruta y los dos puntos (:) que siguen a la IP de la máquina windows, sería:

rsync -auv parishpg@centralhpglam:/Peru /Users/Paris/Documents/HPG

Si te fijas, seguimos usando la sintaxis origen-destino, solo que el origen lo accedemos vía ssh con el usuario y el host correspondientes.

Intenta y me avisas que tal te va

parismiguel dijo...

Gracias WIl. Desde ayer quiero responderte pero he tenido un dìa muy intenso. he probado y me sale el siguiente error:

ssh: Could not resolve hostname centralhpglam: nodename nor servname provided, or not known

Un abrazo,

Unknown dijo...

Paris,

Eso es porque el DNS no puede resolver el nombre centralhpglam, es decir no sabe a qué equipo está asociado. Recuerda que eso no es el nombre del equipo sino la IP. Intenta buscar la IP del equipo Windows y prueba con eso.

Me imagino que tienes un servidor de SSH en Windows, de lo contrario tampoco te funcionará.

Saludos

parismiguel dijo...

He obtenido el IP y modificado el script asi:

rsync -auv parishpg@192.168.1.35:/Peru /Users/Paris/Documents/HPG

Sin embargo, se queda "pensando" (timeout)
Como es el tema del servidor SSH en windows?
Gracias!

Unknown dijo...

Paris,

La configuración de un server ssh escapa del alcance de esta receta. Te recomiendo que busques en google "ssh server windows" y estoy seguro que encontrarás mucha información de cómo instalarlo/configurarlo. Es lo primero que necesitas para que te funcione la copia con rsync.

Saludos

parismiguel dijo...

gracias Wil. Me pongo a buscar.