Sincronización Espejo
Ríos de tinta se ha escrito sobre cómo hacer una copia de seguridad y sus diferentes modalidades. Existen muchos tipos, como la diferencial, la completa, la incremental, etc. También hay otras modalidades como el backup completo sintético, la espejo, la incremental inversa y la protección de datos continua (CDP), entre otras. Sin embargo hay una muy crítica para cualquier entorno que consideramos la pena dedicarle un post. Se trata de la Sincronización o Backup Espejo.
Sin entrar en muchos detalles técnicos (puede consultarlos AQUI), básicamente una Sincronización Espejo es replicar un soporte de almacenamiento A en un soporte B, sin importar que sean soportes físicos (discos duros, dispositivos usb, etc) o virtuales (Discos VDI, VHD, etc).
Es importante aclarar que una sincronización o backup espejo es "1-way mirror" (de una sola vía: Disco A al B), en cambio las sincronizaciones en otras modalidades normalmente son "2-way sync" (doble vía: Disco A al B y viceversa).
Pero son muchas las herramientas que realizan esta modalidad de sincronización, de forma automática y desatendida, y describirlas todas es imposible. Es por eso que nos centraremos en un caso específico y para un sistema operativo en particular.
Es importante aclarar que una sincronización o backup espejo es "1-way mirror" (de una sola vía: Disco A al B), en cambio las sincronizaciones en otras modalidades normalmente son "2-way sync" (doble vía: Disco A al B y viceversa).
Pero son muchas las herramientas que realizan esta modalidad de sincronización, de forma automática y desatendida, y describirlas todas es imposible. Es por eso que nos centraremos en un caso específico y para un sistema operativo en particular.
Sincronización Espejo de sistemas Linux (en caliente)
Para sincronizar discos (o más bien contenido de discos), existen muchas aplicaciones. Por ejemplo SyncToy, SyncBack, Synkron, Goodsync, Allway Sync, Unison, y la archiconocida Rsync (de la cual se derivó gran parte de esta familia sync), entre muchas muchas otras similares.
Pero este no es un tema exclusivo de Windows, Linux o Mac. También marcas como Acer y sistemas operativos como Android, tienen sus aplicaciones específicas, solo para ellos, o sistemas multiplataforma y multipropósito, como Acersync y SimpleDrop, o por terminal. Saber cuál es la mejor o cuál se ajusta más a nuestras necesidades, puede ser tedioso. Una comparativa detallada la puede encontrar en el post A comparison of file synchronisation software.
Una limitante de FreeFileSync es que, a pesar de tener la opción Espejo (mirror) y reducir bastante el MTBF, no completa el procedimiento de Clonado Incremental durante la sincronización en Espejo de dos discos que contengan un SO en ejecución, ya que no copia el Sector de arranque.
De hecho ninguna aplicación actual, para ningún sistema operativo, es capaz de "sincronizar" el MBR/ Tabla de Particiones + Datos, "en caliente"; y mucho menos EFI-GPT (Vea MBR vs GPT), solamente compatible con sistemas de 64bits.
Una alternativa sería usar cualquier otra herramienta especializada para clonar el sector de arranque del disco A al B (ej: Clonezilla, Acronis, Norton Ghost, Paragon, etc) o decantarnos por el versátil comando DD, o usar sus herramientas GUI front-end AIR o Gdiskdump, clonando MBR/Tabla de Particiones y Contenidos y luego actualizar los datos con FreeFileSync.
Si opta por el clonado con el comando DD antes del sincronizado Espejo, debe hacer el siguiente procedimiento "en frío", desmontando las unidades.
Ejemplo de DD
# clonar disco hda en hdb (discos IDE): sudo dd if=/dev/hda |pv|dd of=/dev/hdb bs=1M # clonar disco sda en sdb (discos SATA): sudo dd if=/dev/sda |pv|dd of=/dev/sdb bs=1MDonde PV muestra el proceso y bs son bloque de 1 M, ideal para este tipo de transferencias.
También existen otras maneras de clonar/copiar/replicar un disco, como Copy the files from the old disk to the new disk, o con netcat + Partclone o solo con nc y con FreeFileSync completamos el sincronizado en espejo.
Instalando FreeFileSync en Ubuntu y derivados desde PPA (descontinuados)
Desde Repositorio PPA
Si dispone de entorno gráfico, inicie la aplicación, y en la opción "Arrastrar y Soltar" (a la izquierda) elija la unidad de disco origen y en la de la derecha la unidad de destino (donde se almacenará el espejo). Luego pulse F7, y le saldrá un cuadro: Seleccione "Espejo", en gestión de errores, seleccione "ignorar", en "al completar" elija "cerrar diálogo de progreso" y por último, en "Gestión de Borrado", elija "permanente" y pulse Aceptar. Finalmente pulse "Salvar como tarea lote" (en la versión 3.17 para Ubuntu 10.04.XX es "Guardar Configuración"). Seguidamente se activará una ventana, donde se repite nuevamente muchas de las opciones anteriores; o sea, en "gestión de errores" seleccionará "ignorar", en "Al completar" elegirá "Cerrar diálogo en progreso".
Logs
Hay dos casillas en la última ventana, llamadas "Mostrar diálogo en progreso" y "Guardar registro". Puede desmarcarlas, pero no se recomienda. La primera muestra el progreso del Espejo, y se cerrará una vez concluya y la segunda activa los log de la operación, y los guarda (donde decidamos), para luego poderlos consultar y determinar si se presentó algún error. Puede marcar la casilla "límite" y elegir que guarde los últimos 10 registro (cree una carpeta para estos registros). Al finalizar elija "guardar como" y guarde el archivo en su directorio preferido.
En este punto, en su "home" (o donde decidió guardar el archivo), se guardará un archivo de nombre similar a BatchRun.ffs_batch (o SyncSetting.ffs_gui para la v3.17 en Ubuntu 10.04.XX). El ultimo paso es programarlo en el cron:
Automatizando el Espejo (Desatendido)
Puede programarlo en el crontab pero siempre debe ser en su cuenta (no-root no-sudo). Si no está familiarizado con crontab y tiene Gnome, puede utilizar la herramienta Gnome-schedule (GUI de crontab) o también puede usar Webmin (Modulo Sistemas/Tareas Planificadas (Cron), compatible con cualquier versión de Linux.
Ej: gnome-schedule
add-apt-repository ppa:freefilesync/ffs --yeso
add-apt-repository ppa:eugenesan/ppa --yesActualizando e instalando
apt-get update && apt-get -y install freefilesyncConfiguración
Si dispone de entorno gráfico, inicie la aplicación, y en la opción "Arrastrar y Soltar" (a la izquierda) elija la unidad de disco origen y en la de la derecha la unidad de destino (donde se almacenará el espejo). Luego pulse F7, y le saldrá un cuadro: Seleccione "Espejo", en gestión de errores, seleccione "ignorar", en "al completar" elija "cerrar diálogo de progreso" y por último, en "Gestión de Borrado", elija "permanente" y pulse Aceptar. Finalmente pulse "Salvar como tarea lote" (en la versión 3.17 para Ubuntu 10.04.XX es "Guardar Configuración"). Seguidamente se activará una ventana, donde se repite nuevamente muchas de las opciones anteriores; o sea, en "gestión de errores" seleccionará "ignorar", en "Al completar" elegirá "Cerrar diálogo en progreso".
Logs
Hay dos casillas en la última ventana, llamadas "Mostrar diálogo en progreso" y "Guardar registro". Puede desmarcarlas, pero no se recomienda. La primera muestra el progreso del Espejo, y se cerrará una vez concluya y la segunda activa los log de la operación, y los guarda (donde decidamos), para luego poderlos consultar y determinar si se presentó algún error. Puede marcar la casilla "límite" y elegir que guarde los últimos 10 registro (cree una carpeta para estos registros). Al finalizar elija "guardar como" y guarde el archivo en su directorio preferido.
En este punto, en su "home" (o donde decidió guardar el archivo), se guardará un archivo de nombre similar a BatchRun.ffs_batch (o SyncSetting.ffs_gui para la v3.17 en Ubuntu 10.04.XX). El ultimo paso es programarlo en el cron:
Automatizando el Espejo (Desatendido)
Puede programarlo en el crontab pero siempre debe ser en su cuenta (no-root no-sudo). Si no está familiarizado con crontab y tiene Gnome, puede utilizar la herramienta Gnome-schedule (GUI de crontab) o también puede usar Webmin (Modulo Sistemas/Tareas Planificadas (Cron), compatible con cualquier versión de Linux.
apt-get install gnome-schedule o git clone git://git.gnome.org/gnome-scheduleY programar el horario en el que decida correr la sincronización espejo, eligiendo una tarea repetitiva
Para programarla a la hora deseada
Y al final probar su funcionamiento.
Configuración
Sin importar que use el crontab, gnome-schedule, Webmin, algún script o cualquier otro aplicativo para programar la tarea de la ejecución del archivo tipo *.ffs_batch, lo más importante es:
1. Definir quién es el que ejecuta la tarea: Este punto es crucial para evitar el error:
Unable to initialize GTK+, is DISPLAY set properly?Lo recomendado es que ejecute la tarea como usuario (ni como root, ni con sudo), ya que al ejecutarla como root (o con sudo) es altamente probable que salga el error.
2. Línea de comando en el crontab: En Windows, simplemente se agrega al programador de tareas y listo, pero en Linux muchos creen que con agregar la ruta hacia el archivo en el crontab es suficiente
/home/user/backup.ffs_batch
Sin embargo generará error. Esto se debe a que *.ffs_batch es un texto xml asociado a la aplicación FreeFileSync. Hay dos formas correctas de programarlo en el cron (crontab -e) (tambien puede hacerlo por webmin):
export DISPLAY=:0; /path_to/FreeFileSync /path_to/backup.ffs_batcho
/path_to/FreeFileSync /path_to/backup.ffs_batch --display=:0.0
Para concluir, es
importante
que defina los parámetros de ejecución (hora, minuto, día de la semana, etc), cuando se vaya a ejecutar la sincronización desatendida, porque si no define esto con exactitud, puede ocurrir que esta app se ejecute indefinidamente.
Ejemplo de la tarea Espejo en el programador del Webmin
Ejecutando varios scripts de FreeFileSync
Supongamos que programamos varias tareas en el crontab (del usuario crontab -e sin sudo), o sea realizamos varios backups de carpetas y archivos con Freefilesync y que estas tareas se van a ejecutar el mismo día pero de fuentes y en horario diferente. Ejemplo:
Ejecutando varios scripts de FreeFileSync
Supongamos que programamos varias tareas en el crontab (del usuario crontab -e sin sudo), o sea realizamos varios backups de carpetas y archivos con Freefilesync y que estas tareas se van a ejecutar el mismo día pero de fuentes y en horario diferente. Ejemplo:
1 1 * * * export DISPLAY=:0; /path_to/FreeFileSync /path_to/tarea1.ffs_batch 1 2 * * * export DISPLAY=:0; /path_to/FreeFileSync /path_to/tarea2.ffs_batchSin importar la hora de programación que le pongamos de diferencia entre tareas, puede suceder que FreeFileSync no haya terminado una tarea programada cuando la otra inicie su ejecución, haciendo colapsar nuestro equipo, si la tarea implica grandes volúmenes de datos. Desafortunadamente no hay manera de que podamos programar FreeFilesync para que espere a que termine una tarea antes de comenzar la siguiente, salvo poner mucha diferencia en el tiempo de ejecución de las tareas. Pero hay una solución más sencilla; echar mano de bash (donde ffs es el directorio en HOME donde se almacenan los scripts:
#!/bin/bash export DISPLAY=:0; /path_to/FreeFileSync /path_to/task1.ffs_batch & wait export DISPLAY=:0; /path_to/FreeFileSync /path_to/task2.ffs_batch echo done
Este sencillo script lo que hace es matar FreeFileSync "por si acaso", para evitar varias instancias corriendo al mismo tiempo, antes de lanzar en background las tareas, esperando a que termine una para lanzar la siguiente, y al terminar si quiere puede manda un mensaje de ejecución a syslog. agregando al script:
date=`date +%d/%m/%Y" "%H:%M:%S` echo "FreeFileSync Start $date" >> /var/log/syslogNo olvide correrlo como usuario (no root - no sudo) y darle permisos de ejecución, y reemplazar las ordenes de tareas en el crontab con el script, de acuerdo a su programación de tareas habitual. Ejemplo:
@daily /path_to/freefilesync.sh
Actualización 2020 (Ubuntu 18.04/20.04):
A la fecha todos los repositorios PPA están desactualizados (el Oficial FFS y los alternativos EugeneSan y GetDeb), la descarga no está disponible en SourceForge y hay una alternativa Flatpak (solo para los que les guste trabajar con este tipo de instaladores).
Por lo anterior lo más recomendable para obtener la última versión de FFS es descargarla del sitio oficial, descomprimirla y ejecutarla.
(vea el procedimiento en How to Install FreeFileSync on Ubuntu 16.04/14.04/15.10 y FreeFileSync – Compare and Synchronize Files in Ubuntu).
La mayoría de los portales recomiendan guardar FreeFileSync en el directorio /opt sin embargo, puede salir el error:
(vea el procedimiento en How to Install FreeFileSync on Ubuntu 16.04/14.04/15.10 y FreeFileSync – Compare and Synchronize Files in Ubuntu).
La mayoría de los portales recomiendan guardar FreeFileSync en el directorio /opt sin embargo, puede salir el error:
Cannot write file "/opt/FreeFileSync/GlobalSettings.xml".Error Code 13: Permission denied |
Una alternativa es ir a Herramienta/Opciones y marcar la casilla "Copiar Permisos de Acceso al Archivo" y luego crear el lanzador en /usr/share/applications/ y ejecutar el comando en el terminal:
sudo sed -i 's/Exec=\//Exec=sudo \//' /usr/share/applications/FreeFileSync.desktop
Otros portales sugieren distribuir los archivos en las rutas originales de instalación desde PPA, pero tal vez esto no sea una buena idea:
Ubicar a FFS en una ruta más amigable ( /home /.local etc). Para automatizar el proceso, hemos preparado el siguiente bash para Ubuntu 18.04 / 20.04, que descarga la versión más reciente, la descomprime en /.local/share y crea el lanzador directamente en el escritorio. Puede ajustar los parámetros del script a sus necesidades y no olvide reemplazar el contenido de la variable ffsuser="your_user" por el nombre de su usuario real. Guárdelo en $HOME/ffs como ffsupdate.sh dele permisos de ejecución (chmod +x $HOME/ffs/ffsupdate.sh) y ejecútelo en el terminal, sin privilegios (sin sudo - sin root):
/home/user/.FreeFileSync (GlobalSettings.xml LastError.log LastRun.ffs_gui LastSyncs.log) /usr/share/doc/FreeFileSync /usr/share/man/man1/FreeFileSync.1.gz /usr/bin/FreeFileSync /usr/share/FreeFileSync (ding.wav gong.wav harp.wav Help Languages Resources.zip)Sin embargo nosotros sugerimos algo mucho más sencillo:
Ubicar a FFS en una ruta más amigable ( /home /.local etc). Para automatizar el proceso, hemos preparado el siguiente bash para Ubuntu 18.04 / 20.04, que descarga la versión más reciente, la descomprime en /.local/share y crea el lanzador directamente en el escritorio. Puede ajustar los parámetros del script a sus necesidades y no olvide reemplazar el contenido de la variable ffsuser="your_user" por el nombre de su usuario real. Guárdelo en $HOME/ffs como ffsupdate.sh dele permisos de ejecución (chmod +x $HOME/ffs/ffsupdate.sh) y ejecútelo en el terminal, sin privilegios (sin sudo - sin root):
# user account MYUSER="user" # PATH ffspath=/home/$MYUSER/.local/share ffsdir=$ffspath/FreeFileSync ffsdesktop=$(xdg-user-dir DESKTOP) ffsfile=/home/$MYUSER/ffs/FreeFileSync.tar.gz if [ ! -d /home/$MYUSER/ffs ]; then mkdir -p /home/$MYUSER/ffs; fi # DEL OLD FFSDIR if [ -d $ffsdir ]; then rm -rf $ffsdir; fi # DEL OLD FFSFILE if [ -f $ffsfile ]; then rm -f $ffsfile; fi # DOWNLOAD echo "Start FreeFileync..." url="https://www.freefilesync.org/download.php" link=$(wget -q $url -O - | grep -Pio '/download/[^"]+Linux[^"]+gz') version=$(echo $link | sed -r 's:.*FreeFileSync_([0-9]+\.[0-9]+)_.*:\1:') echo "link: $link" echo "version: $version" echo "Download FreeFileync..." $(wget -q -O $ffsfile https://www.freefilesync.org$link -U "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/63.0.3239.84 Chrome/63.0.3239.84 Safari/537.36") tar xvf $ffsfile -C $ffspath >/dev/null 2>&1 unzip $ffsdir/Resources.zip -d $ffsdir/Resources/ >/dev/null 2>&1 # DESKTOP LAUNCHER echo "Create Desktop Launcher..." cat << EOF | tee $ffsdesktop/FreeFileSync.desktop >/dev/null 2>&1 [Desktop Entry] Name=FreeFileSync Type=Application Terminal=false Exec=/home/$MYUSER/.local/share/FreeFileSync/FreeFileSync %f Icon=/home/$MYUSER/.local/share/FreeFileSync/Resources/FreeFileSync.png Comment=FreeFileSync – Compare and Synchronize Files in Ubuntu EOF chmod +x $ffsdesktop/FreeFileSync.desktop # LAUNCHER PLANK (Optional) echo "Create Plank Launcher..." echo "[PlankDockItemPreferences] Launcher=file:///usr/share/applications/FreeFileSync.desktop" > ~/.config/plank/dock1/launchers/FreeFileSync.dockitem cat << EOF | sudo tee /usr/share/applications/FreeFileSync.desktop >/dev/null 2>&1 [Desktop Entry] Name=FreeFileSync Type=Application Terminal=false Exec=/home/$MYUSER/.local/share/FreeFileSync/FreeFileSync %f Icon=/home/$MYUSER/.local/share/FreeFileSync/Resources/FreeFileSync.png Comment=FreeFileSync – Compare and Synchronize Files in Ubuntu EOF sudo chmod +x /usr/share/applications/FreeFileSync.desktop echo "Done"
Nota: Para cambiar el sistema sistema operativo (por Debian u otra versión de Ubuntu) modifique línea "grep".
Tenga presente que estas nuevas versiones "portables" (no PPA) presentan algunos problemas en su aplicativo (no tienen disponibles algunas opciones del menú, tales como "close the results dialog after sync" o "on completion close progress dialog", etc. etc.), pero esto no impide que se pueda configurar correctamente.
En estos casos es mejor crear un archivo batch programado para acceder a estas funciones.
Recuerde que ahora debe especificar el nuevo path en el cron (no olvides cambiar "user" por tu usuario del sistema):
Tenga presente que estas nuevas versiones "portables" (no PPA) presentan algunos problemas en su aplicativo (no tienen disponibles algunas opciones del menú, tales como "close the results dialog after sync" o "on completion close progress dialog", etc. etc.), pero esto no impide que se pueda configurar correctamente.
En estos casos es mejor crear un archivo batch programado para acceder a estas funciones.
Recuerde que ahora debe especificar el nuevo path en el cron (no olvides cambiar "user" por tu usuario del sistema):
crontab -l # m h dom mon dow command * 2 * * 0,3 export DISPLAY=:0; $HOME/.local/share/FreeFileSync/FreeFileSync /path_to/backup.ffs_batchOtra de las grandes ventajas a este estupendo programa es la sincronización en la nube.
Autenticando FreeFileSync con Google Drive |
FreeFileSync sincronizando con nuestra cuenta en GDrive |
Por el momento solo incluyen FTP/SFTP y Google Drive. Esperemos que en un futuro no lejano incluyan otros servicios en la nube.
Para mayor información sobre visite en el foro oficial:
Problem with menu "Run a command after synchronization
Option "close the results dialog after sync" not appears
Actualización 2022
Para mayor información sobre visite en el foro oficial:
Problem with menu "Run a command after synchronization
Option "close the results dialog after sync" not appears
Actualización 2022
A partir de la versión 11.6 FreeFileSync cambió el instalador a un archivo .run, por tanto el script anterior no es funcional. Solo hay que descargar el programa, descomprimirlo y ejecutarlo con doble click y seguir las instrucciones en pantalla.
O puede usar el siguiente script y ejecutarlo en terminal con privilegios sudo:
sudo /path_to/ffsupdate.sh
Nota: modificaciones sin previo aviso.
#!/bin/bash echo "Starting FreeFileSync Update..." # checking script execution (optional) if pidof -x $(basename $0) > /dev/null; then for p in $(pidof -x $(basename $0)); do if [ "$p" -ne $$ ]; then echo "Script $0 is already running..." exit fi done fi # checking dependencies (optional) pkg='expect tcl-expect libnotify-bin' if apt-get -qq install $pkg; then echo "OK" else echo "Error installing $pkg. Abort" exit fi # ffs update ffsfile=FreeFileSync.tar.gz url="https://www.freefilesync.org/download.php" link=$(wget -q $url -O - | grep -Pio '/download/[^"]+Linux[^"]+gz') version=$(echo $link | sed -r 's:.*FreeFileSync_([0-9]+\.[0-9]+)_.*:\1:') echo "link: $link" echo "version: $version" echo "Download FreeFileync..." $(wget -q -O $ffsfile https://www.freefilesync.org$link -U "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/63.0.3239.84 Chrome/63.0.3239.84 Safari/537.36") tar xvf $ffsfile >/dev/null 2>&1 mv FreeFileSync*.run FreeFileSync.run >/dev/null 2>&1 chmod +x FreeFileSync.run echo OK echo "Run Update..." /usr/bin/expect << EOF set timeout -1 log_user 0 spawn ./FreeFileSync.run --accept-license log_user 1 expect -exact "to begin installation:" send -- "y\r" expect -exact "https://freefilesync.org/donate\r \r" EOF # Deleting downloaded files (optional) rm -fv FreeFileSync* echo "FreeFileSync Update Done: $(date)" notify-send "FreeFileSync Update Done" "$(date)" -i checkbox
FreeFileSync es un excelente programa que permite hacer un montó de cosas, incluso sincronizar carpetas al estilo nube, similar a como lo harían los clientes gdrive, mega, etc (obviamente solo con gdrive por el momento), usando RealSync. Para verlo en acción pulse el siguiente video AQUI.
Done 1 USD al proyecto Freefilesync y obtendrá la versión completa de este magnífico programa y ayudará a mantenerlo.
Post a Comment