Como sincronizar dos ordenadores en Linux.

April 19, 06 by serumax

Transferencia de un archivo.

Si tu laptop es un complemento de tu desktop es probable que recurrentemente necesites sincronizar datos entre ambas (*). Por ejemplo, cuando estás en medio de un proyecto importante y sabes que por la tarde no estarás en casa sino que en la sala de espera del doctor o en el aeropuerto, entonces es bueno tener la posibilidad de transferir rápidamente los datos importantes y mails de un ordenador a otro. Esta nota te dirá como hacerlo entre dos máquinas GNU/Linux.

Si solo necesitas transferir un puñado de archivos o directorios, probablemente la forma más fácil de hacerlo de un sólo tirón es a través de secure shell (OpenSSH). Todas las distros linux incluyen OpenSSH, aunque no todas corren por defecto el deamon SSH que te permite conectar el computador vía SSH, incluso sin contraseña.

Iniciar el deamon es tan simple como escribir sshd en la línea en una terminal para root. También puedes configurar tu distro para que inicie el OpenSSH al iniciar el PC; cada distro tiene scripts de inicio distintos, por lo que debes leer la documentación respectiva para aprender a configurar esto .

Una vez que tienes el shell seguro iniciado, otros ordenadores pueden conectarse a tu PC usando una ventana de terminal con el comando shh y reliazar los respaldos a distancia con rsync, o bien puedes copiar los archivos sobre una conexión segura usando el comando scp. Después puedes hacer todo el trabajo de forma regular con el comando cp, excepto porque tienes que dar la dirección IP por lo menos a uno de los archivos.

scp picture.jpg 192.168.1.101:/home/user/pictures/

En este ejemplo un archivo llamado picture.jpg es transferido a la máquina de red con la dirección IP 132.168.1.101 y a la carpeta /home/user/pictures/. Por defecto, scp copia el archivo o directorio home apuntado al directorio del usuario que estás usando o con el que te has logueado; pero puedes especificar una ruta distinta después de los dos puntos siguientes a la IP. En el archivo /etc/hosts puedes crear un nickname para la máquina remota a la que estás copiando los archivos. Sólo agrega una nueva línea con la dirección IP del PC al que le vas a dar el nickname, presiona la tecla tab y escribe el nombre por el cual quieres llamarla.

192.168.1.101           laptop

En el siguiente ejemplo usaremos el nickname en vez de la dirección IP; especificaremos un usuario diferente al logueado en el terminal desde donde estamos copiando y copiaremos un directorio entero en vez de un solo archivo.

scp -r /home/user/pictures/ user2@laptop:/home/user2/

La -r significa recursivo y le dice al comando scp que debe copiar el directorio y todo lo que hay en él. El comando señalado creará un directorio llamado pictures en el directorio /home/user/ y copiará todo el contenido de /home/user/pictures/ de la máquina local. Pero si en la máquina remota ya existe un directorio pictures e igualmente quieres copiar todo lo que hay en la máquina local, lo que debes hacer es usar el comodín *.

scp /home/user/pictures/* laptop:/home/user/pictures/

(*) Nota del traductor: el texto original fue como guía para sincronizar información entre un laptop y un desktop. Pero lo mismo es válido para dos ordenadores de escritorio.

Transferencias más complejas

Hay muchos recursos de red que pueden usarse para transferir grandes cantidades de archivos en varios directorios (CVS, FTP, NFS), pero para lo que estamos haciendo ninguno de ellos es realmente una herramienta de sincronización ni hace lo que rsync.

Este software es muy similar a scp, salvo que está diseñado para transferencias complejas. Si tu laptop y tu desktop comparten el mismo software, la estructura del directorio /home, así como los datos, rsync los actualizará inteligentemente. Por ejemplo, si encuentra archivos duplicados en la máquina remota, comprobará si es nuevo y lo actualizará si está fuera del rango de tiempo adecuado conservarlo tal cual; por otra parte, si el archivo o carpeta no existe, entonces lo creará. También puedes programar para que rsync borre los archivos en la máquina remota que no hayan sido detectados en la máquina local, pero esto puede tener su riesgo, por lo que no usaremos esta alternativa en ningún ejemplo.

Tal como hicimos con OpenSSH, con rsync también debemos iniciar el deamon respectivo en la PC remota. El comando para esto es rsyncd. Igualmente, si deseas puedes programarlo para que se auto inicie en el booteo.

El siguiente ejemplo no requiere el demonio de rsync; en cambio, usa OpenSSH para transferir el archivo por lo que debes iniciar el demonio de SSH. Puedes especificar cual software usar para la transferencia usando solo un (SSH) o dos (rsync) dos puntos después del nombre o la IP del host. El ejemplo usará sólo una vez los dos puntos.

rsync -arvuz /home/user/ 192.168.1.101:/home/user/

También como en SSH, puedes usar /etc/hosts para crear un nickname para la IP de la máquina remota y puedes señalar otros usuarios después del símbolo @. Las opciones arvuz significan respectivamente mantener los permisos de usuario y grupo; recursivamente copiar el directorio /home/user/ y los archivos que hay en él; mostrar transparentemente qué archivos son trasferidos o actualizados; ignorar archivos idénticos o que tengan la misma fecha y comprimir los datos para usar menos ancho de banda en la red.

¿Pero que ocurre si no quieres transferir todo el directorio, sino solo los archivos y directorios importantes? Hay dos formas. Si recurrentemente necesitas copiar las mismas carpetas, puedes entonces crear un script sencillo para ahorrarte tiempo escribiendo manualmente los comandos. Con un editor de texto cualquiera creas un archivo llamado sync_laptop.sh y escribes lo siguiente (cambiando los directorios del ejemplo por los tuyos)

rsync -arvuz ‘/home/user/pictures /home/user/documents /home/user/jokes’ laptop:

Cuando lo guardes lo debes hacer ejecutable con chmod +x. El comando del ejemplo no funcionará con directorios que tengan más de un nivel adentro, por lo que, por ejemplo, /home/user/pictures/summer/ no servirá. Ninguno puede copiar archivos a cualquier otro directorio remoto que no sea /home, usado en ele ejemplo. Deberás agregar una nueva línea al script para cada subdirectorio que desees transferir, pero hay una forma más eficiente de hacerlo.

Primero crea un directorio en /home llamado sync. Te cambias a él en la línea de comando y creas un enlace simbólico a todos los directorios que quieres transferir. Si necesitas crear nuevos niveles o subdirectorios en /home/user/sync/, asegúrate de seguir el mismo procedimiento que realizaste al home cuando creaste los enlaces simbólicos de destino.

ln -sf /home/user/documents ./documents
mkdir .gconf
mkdir .gconf/apps
ln -sf /home/user/.gconf/apps/evolution ./.gconf/apps/evolution
ln -sf /home/user/.evolution ./.evolution
mkdir pictures
mkdir pictures/summer
ln -sf /home/user/pictures/summer ./pictures/summer

Ahora creas el script que hará la transferencia; llámalo sync_laptop.sh y ponlo en tu home:

# This script syncs a remote computer to this onecd /home/user/
# Uncomment the next command if you’d like to copy all of the
# files (not directories) in your home dir to the remote machine.
# cp * ./sync
rsync -arLuvz /home/user/sync/ laptop:/home/user

El parámetro -L le dice a rsync que trate tus symlinks como si fueran directorios reales.
Guarda el script y hazlo ejecutable con chmod +x. Cuando lo corras tu laptop será actualizada con todos los directorios y archivos del desktop. La primera vez que lo hagas tomará un buen tiempo, pero las siguientes veces demorará mucho menos porque rsync no sobrescribirá archivos que no tengan cambios.

Para hacer el proceso inverso debes hacer lo mismo en tu laptop, pero recuerda cambiar la IP o el nickname de la máquina remota.

Por si acaso, el ejemplo anterior copiará o actualizará tus cuentas de email, la libreta de contacto y otros datos de Evolution. Si estás configurando un nuevo laptop esto puede actualizar tus datos de Evolution de forma mucho más simple.

Nota final

Los ejemplos y consejos anteriores se simplificaron para el uso casero. OpenSSH y rsync son capaces de tareas mucho más avanzadas. Hay también diversas técnicas y acercamientos para los procesos ejemplificados. El primer y mejor lugar para buscar más información sobre estos programas es en sus manuales (man). Si estás buscando más ejemplos que los aquí expuestos, una búsqueda en Google le dará más información.

Jem Matzan es un experimentado técnico de electrónica, periodista independiente de tecnología, y el redactor jefe de The Jem Report, Entertainment in Review, Hardware in Review y Software in Review.

Texto original escrito por Jem Matzan
Fuente Linuxplanet.com

Traducción por Max Villegas

Post relacionados

Add your comment

9 responses for this post

  1. Manuel Says:

    Menuda chapuza, para algo existe rsync etc etc.

  2. Serumax Says:

    Síp, si pasas a la segunda página podrás ver la parte en que se habla de rsyn!!

  3. Pau Garcia i Quiles Says:

    Es más fácil usar Unison: http://www.cis.upenn.edu/~bcpierce/unison/

  4. Blaxter Says:

    muy bueno el Manuel, no sabe cambiar de página el mozo xD

    Unison está muy bien el programa, pero realmente prefiero ejecutar
    $ sincronizaYA
    y ejecutará el script que sincronizará los dirs que necesito, que estar con una ventanita del unison dandole con el raton… cuestión de gustos.

  5. Raid Says:

    Puedes utilizar unison en modo texto y hacer tantos scripts como quieras.

  6. Manolo Canga Says:

    Yo añadiría la opción de tener un dominio dinámico tipo noip ( no-ip.com ) es gratuito y permite tener siempre acceso desde tu laptop a tu pc. Así, ya estes en el médico, aeropuerto, fuera de tu lan, podrás conectarte a tu equipo comodamente.
    También añadiría que en vez de usar ssh, usar fish mediante konqueror. Así podrás hacerlo todo de una manera rápida y gráfica.

  7. JOAQUIN Says:

    HOLA TENGO UNA LAPTOP QUEROCONECTARLA A INTERNET PERO NOSE CUAL ES LA DIRECCION IP PARA HACERLO ME LA PUEDES PROPORCINAR GRACIAS

  8. Serumax Says:

    Ojalá pudiera, pero lamento informarte que las IP son asignadas dinámicamente por los poroveedores de acceso a Internet.

    Si tienes una conexión por adsl o cable puedes conocer tu IP con el comando de windows (dudo que uses linux) ipconfig.

    Aunque realmente ni siquiera es necesario… creo que lo que necesitas es un router o, al menos, un swish para compartir tu conexión entre dos o más computadores (laptop - pc) y dos tarjetas de red (una para cada pc)

  9. Problemas comunes III: respaldos a distancia con rsync | Viviendo en la era digital | La Web A Says:

    [...] Como sincronizar dos ordenadores en Linux [...]

Leave a Reply

Tag cloud widget powered by nktagcloud