Unison: Sincronización y backups en Linux
Por norma general cuando quiero realizar copias de seguridad o simplemente sincronizar carpetas o ficheros, suele utilizar rsync además de ssh si existe otro servidor destino u origen. Unison, la herramienta de que vamos a hablar en este artículo, nos promete realizar sincronizaciones entre dos puntos, de forma eficaz.
Primero de todo veamos en que consiste Unison: Se trata de una herramienta de sincronización de archivos bidireccional que se ejecuta en sistemas operativos tipo Unix (incluidos Linux, macOS y Solaris), además de Microsoft Windows. Permite que dos réplicas de una colección de archivos y directorios se almacenen en diferentes hosts (o diferentes discos en el mismo host), se modifiquen por separado y luego se actualicen propagando los cambios en cada réplica a la otra.
Lo cierto que para esta entrada he tenido que investigar un poco, ya que, por lo menos en Centos 7 y en Debian 10, no incluye página de man una vez instalada la herramienta. Al final de la entrada listaré las fuentes consultadas.
Instalación de Unison en GNU/Linux
Por defecto esta herramienta no viene preinstalada, por lo que debemos realizar la instalación. Por suerte el paquete viene incluido en la mayoría de los repositorios. La herramienta también tiene una versión de escritorio (utiliza GTK), pero esa no la instalaremos, solo la de línea de comandos.
Instalación de Unison en RHEL y Centos
sudo yum -y install Unison240
Instalación en Debian 10
sudo apt install unison
Instalación en Ubuntu
sudo apt install unison
Instalación en Arch y derivadas
sudo pacman -S unison
Una vez instalada la herramienta ya podemos empezar a trabajar con ella.
Ejemplos básicos de uso de Unison
Su forma básica es la siguiente:
unison origen/ destino/
En la imagen podemos ver un ejemplo de su uso:
A continuación veamos el resultado una vez he añadido unos ficheros al origen:
Por defecto la sincronización es interactiva con el usuario, esto es, nos hará una serie de preguntas. Debemos confirmar cada uno de los cambios propuestos. Para evitarlo podemos utilizar los parámetros «-auto» o «-batch» En cualquier caso debemos añadir «yes» al finalizar.
También se muestra un resumen de las operaciones: las flechas muestran que se está transfiriendo un archivo. Al final de todas las operaciones, se muestra un resumen.
Modificar ficheros de preferencias
Los archivos de preferencias son la forma más segura de usar unison. Las preferencias se almacenan en el fichero .unison en el directorio de inicio, con nombres que terminan con una extensión .prf. Por normal general, tendríamos un default.prf que se usa cuando no se especifica una preferencia con el comando.
En mi caso:
david@servdebian10-1:~$ ls -la .unison/default.prf
-rw------- 1 david david 25 ago 19 11:14 .unison/default.prf
Para crear un perfil a nuestro gusto, debemos eguir estos cuatro pasos básicos utilizando líneas comentadas para ayudar a realizar un seguimiento de las secciones:
Podemos empezar con la etiqueta «label=» en esta podemos añadir una descripción con información sobre que vamos a sincronizar.
Listamos el primer directorio raíz. Por ejemplo, para el usuario david:
#Root (source)
root= /home/david
Indicamos el segundo directorio raíz al que se sincronizarán los archivos. En una línea separada, también podemos agregar cualquier argumento ssh, como el puerto a usar y la opción de ejecutar en modo silencioso. Siempre utilizando «sshargs=» Por ejemplo:
#Target Directory
root=ssh://otro-servidor /home/david/destino
sshargs=-p22
sshargs=-q
Listamos, los subdirectorios y archivos del directorio raíz o la fuente para incluir en la operación. Por ejemplo:
#Directories and Files to include
path=Descargas
path=Imagenes
Listamos los archivos a ignorar. Aquí pueden ser muy útiles las expresiones regulares:
#Files to Ignore
ignore=*.tmp
Como los archivos se sincronizan en el segundo directorio raíz, estos se sobreescribirán. Como precaución, podemos hacer una copia de seguridad de los archivos originales en el segundo directorio raíz en otra ubicación, utilizando los siguientes campos. Si la ubicación de respaldo se especifica como local, los archivos de respaldo se almacenan en el segundo directorio raíz. En cambio, si la especificación es central, los archivos de respaldo se almacenan en otro directorio que se especifica en el directorio de backup.
Los ficheros de backup utilizan la extensión «.bak.VERSION.FILENAME» La versión comienza con 1 para la más reciente y puede limitarse en número usando el campo «maxbackups=«. El nombre del archivo es el nombre del archivo original, incluida cualquier extensión. Esta convención se puede anular utilizando los campos «backupprefix=» y «backupsuffix=«, uno de los cuales debe contener la versión. Por ejemplo:
#Backups
backuplocation=central
backupdir=/home/david/backups
backup= Name *
backupprefix=$VERSION.
backupsuffix=
maxbackups=10
Unison puede también utilizar comandos externos como «diff» o «merge»
Podemos habilitar el registros de actividad de la herramienta, añadiendo:
#Log
log=true
Laboratorio de pruebas
Para probar la herramienta con algo en «producción» he probado de sincronizar los ficheros que tengo en un servidor remoto, que da servicio de Minecraft, para mis hijos y sus amigos.
Con la siguiente configuración:
# Unison preferences file
label=Pruebas de Unison
#Root (source)
root=ssh://minecraft@servubuntu01.bitsandlinux.com//home/minecraft
sshargs=-p22
sshargs=-q
#Directorio objetivo
root=/home/davidochobits/backup/minecraft/
#Directorios y ficheros a incluir
path=world
path=server.properties
path=logs
path=run.sh
path=server1
#Ficheros a ignorar
#Backups
backuplocation = central
backupdir = /home/davidochobits/backup/minecraft
backup = Name *
backupprefix = $VERSION.
backupsuffix=
maxbackups=10
#Log
log=true
Previamente he realizado intercambio de llaves entre mi portátil y el servidor.
Programar la sincronización
Lo ideal, en un entorno productivo es realizar la programación de la sincronización de ficheros y carpetas, para ello programaremos un trabajo con Cron
De la siguiente manera:
#Primero escribimos:
crontab -e
#Y añadimos la programación:
* 5 * * * /usr/bin/unison &> /dev/null
Esto es, todos los días, a las cinco de la mañana se realizará un backup de los ficheros del servidor (en el caso que donde se guarde el backup este encendido a esa hora, claro)
Nos ha quedado pendiente hablar de la interfaz gráfica de la aplicación, pero eso será otro día 🙂
Y esto es todo, espero que la información os sea de utilidad en algún momento.
Fuentes consultadas
Web de Philip J. Guo – Unison File Synchronizer: Liberation through Data Replication
ArchWiki – Unison
Twiki.org – Replication Using Unison
Superuser.com – How to make unison ignore all files with .swp extension