¿Sincronizar varios ordenadores o backups? unison


Seguramente todos nos encontramos con el problema de querer sincronizar directorios de varios ordenadores, y además que las modificaciones en uno de ellos se propague automáticamente a los demás. Si te has dado cuenta de la restricción principal del rsync (hay un “maestro” y la sincronziación es unidireccional), lo tuyo es el unison.

Unison permite mantener actualizados árboles completos en el mismo ordenador (diferentes directorios) o en ordenadores remotos (usando ssh u otros métodos). Además propaga las modificaciones en ambos sentidos. Así es posible mantener sincronizados casi los ordenadores que querramos. Si no hay conflictos (i.e. el mismo fichero modificado en ordenadores distintos y que es imposible hacerles un “merge”), todos tendrán las mismas copias.
Sincronización remota
El unison me soluciona perfectamente mi problema de tener sincronizado mi ordenador de escritorio de casa con portátil (minime) y con el de mi despacho (pcgallir). En los ejemplo sinzcronizo el directorio “Proyectos” y “Presentacions”. La solución es muy sencilla, directorio a directorio y usando el ssh desde mi $HOME:

unison Proyectos ssh://minime/Proyectos

Es es equivalente a:

unison /home/gallir/Proyectos ssh://minime//home/gallir/Proyectos

Si no queremos que nos pregunte por cada opción, podemos hacer por ejemplo:

unison -auto -batch Proyectos ssh://minime/Proyectos

IMPORTANTE: El unison borra los ficheros eliminados en uno de los ordenadores que sincroniza, si queréis mantener copia de los borrados, mirad la opción -backup en la documentación.

Perfiles
Con lo anterior es suficiente para sincronizar entre varios ordenadores, pero tiene algo aún más potente, los perfiles. Con ello es posible crear un perfil para cada ordenador con el queramos sincronizar. Los perfiles se crean en $HOME/.unison/nombre_perfil.prf. Por ejemplo, para sincronizar con minime tengo definido los siguiente:
$ cat ~/.unison/minime.prf
auto = true
batch = true
root = /home/gallir
root = ssh://minime
path = Proyectos
path = Presentacions
ignore = Path */.directory
ignore = Path */Olds
ignore = Name {olds,*~}

Ahora sólo hay que ejecutar:

unison minime

Supongo que véis claramente que se especifica dos veces root para indicar el origen y destino, y luego path las veces que queráis. Los ignore ya os imagináis, es para no copiar ficheros o directorios completos. El unison trabaja con expresiones regulares, permite especificar “Name” donde se toma en cuante sólo el nombre del fichero, Path para especificar el nombre completo, o directamente regexp para especificar la expresión regular.
Abajo es muestro la salida de un sincronziación con el perfil anterior justo después de agregar un fichero (novembre.sxw).

$ unison minime
Contacting server…
Looking for changes
Presentacions
Presentacions/PReina

Proyectos/Campos2004
Waiting for changes from server
Reconciling changes

local minime
new file —-> Proyectos/SaNostra/novembre.sxw
Propagating updates

UNISON started propagating changes at 17:59:51 on 11 Nov 2004
[BGN] Copying Proyectos/SaNostra/novembre.sxw
from /home/gallir
to //minime//home/gallir
[END] Copying Proyectos/SaNostra/novembre.sxw
UNISON finished propagating changes at 17:59:51 on 11 Nov 2004

Saving synchronizer state
Synchronization complete

Si os hacéis la pregunta ¿se pueden mantener sincronizados varios ordenadores en cadena? La respuesta es sí, sin problemas, es “transitivo”. Y seguramente también os preguntáis si usa un algoritmo como el rsync para minimizar las transferencias de datos, pues sí.
Backups
Este es el caso más sencillo el unison, y muy útil para hacer esos backups tan habituales entre discos o particiones. Por ejemplo:

unison /home/gallir /disk2/home/gallir

Seguramente no queréis que se hagan copias de algunos ficheros, o asegurar que siempre “manda” la versión del original, también podéis crear perfiles para ello, por ejemplo:
$ cat ~/.unison/backup.prf
auto = true
batch = true
root = /home/gallir/
root = /disk2/home/gallir/
prefer = /home/gallir/
ignore = Path */.directory
ignore = Path */Olds
ignore = Name {olds,*~,tmp,temp,.*}

Automatizar en el crontab
Ahora sólo queda automatizarlo llamándolo desde el crontab. Por ejemplo:

31 6 * * * unison backup
0 7 * * * unison minime

En el caso del backup está claro que casi no hay mejora posible (además de redireccionar toda la salida a /dev/null, o indicar la opción -silent del unison, pero es que todavía estoy controlando que funcione correctamente), pero en el caso de sincronizar con el portátil… ¿qué pasa si no está conectado o está apagado? Pues muy fácil, para eso ya somos unos manitas con los script en shell:
0 7 * * * if ping -c 1 minime; then unison minime; fi
Et voilà… y nunca más preguntes como se puede hacer para recuperar ficheros borrados en ext3 🙂

Este post ha sido traido de forma automatica desde https://web.archive.org/web/20140625063149/http:/bulma.net/body.phtml?nIdNoticia=2113 por un robot nigromante, si crees que puede mejorarse, por favor, contactanos.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.