Usar una segunda nas apagada para hacer sincronización de una activa
#1
Lightbulb 
Hola

La semana pasada un usuario me comentó que tenía una vieja nas que usaba como respaldo o copia de seguridad de la principal.

Pero si lo quería automático por programaciones horarias, ambas nas debían estar activas de forma continuada.

Si quería que la nas de respaldo estuviese apagada, debía hacer el proceso manualmente, iniciar la nas vieja, lanzar la sincronización y apagarla manualmente.
Así evitaba una conexión constante con el riesgo del ransomware, un gasto energético inútil y alargaba la vida de los discos duros de la secundaria.

Estuve pensando como hacerlo de forma desatendida y el guion sería el siguiente:
  1. inicio programado de la nas secundaria (por ejemplo a las 21:45)
  2. ejecución de la tarea de sincronización en un sentido (de la principal a la secundaria). Es decir, se piden datos. Se inicia el proceso a las 22:00
  3. encadeno una segunda tarea de sincronización local en la nas secundaria que deja un archivo FLAG en una carpeta conocida.
  4. en la nas existe una tarea programada que comprueba cíclicamente la existencia de ese archivo FLAG en la carpeta conocida. Si existe el archivo, lo borro y lanzo un apagado de la nas secundaria.
Hay que hacer la operación del archivo flag ya que la duración del trabajo es indeterminada.


Bueno vamos con la preparación de rutas y de los archivos.
Lo voy a hacer en una carpeta compartida de nueva creación que nombro como "scripts". Podéis dar otros nombres, pero lo importante es saber la ruta.
En su interior creo otras dos carpetas :
-flags, que es la que será monitorizada desde el archivo bash escrito en el crontab
-flags_ini , donde en su interior creo un archivo llamado "apagar.txt" El contenido del archivo, es lo de menos.
Luego en la carpeta "scripts", creo un archivo script de bash llamado "comprobador_flag.sh" con el siguiente contenido:
Código:
#! /bin/bash
ruta="/share/scripts"
fecha=`date +%y-%m-%d`
hora=`date +"%H:%M"`
if [ -f $ruta/flags/apagar.txt ] ; then
    #existe el archivo de flag
    echo "elimino /share/scripts/flags/apagar.txt"
    #lo elimino para que no vuelva a apagarse tras el próximo inicio
    echo "elimino /share/scripts/flags/apagar.txt" >> $ruta/log.log
    rm $ruta/flags/apagar.txt
    echo "apago la nas el $fecha a las $hora" >> $ruta/log.log
    #doy orden de apagado
    poweroff
fi

La explicación breve del script es:
-defino un par de variables, una de ellas es la ruta de la carpeta compartida.
-compruebo si existe el archivo apagar.txt
-Si existe:
             elimino el archivo apagar.txt
             lo anoto en un archivo de registro log.log junto con la fecha y hora
             apago la nas

Ahora hemos de agregar en el crontab una línea mas al final para que se ejecute cíclicamente un script bash (el de comprobación y apagado).
Esto lo podemos hacer con los comandos siguientes:
Código:
vi /etc/config/crontab

crontab  /etc/config/crontab

/etc/init.d/crond.sh restart
Para nuestra "buena" suerte el editor vi es bastante espartano y arisco para los que no amigos de la consola. 
Por ello recomiendo que se use WinSCP que es mas visual, aunque deberíamos saber unos mínimos del editor vi.

La línea que debemos agregar en el crontab es 

Código:
*/10 * * * * /share/scripts/comprobador_flag.sh

Es decir cada 10 minutos ejecuta el script de bash. Evidentemente podemos modificar ese valor de 10.

Si queremos comprobar que funciona, sólo hemos de crear un archivo llamado "apagar.txt" en la carpeta "/share/scripts/flags/".
Y en el máximo de 10 minutos, la nas comenzará a apagarse.

Ahora vamos a preparar las sincronizaciones.
Una de ellas va a ser la que nos va a traer los datos desde la nas principal.

Abrimos HBS3, en mi caso es una máquina vieja con QTS 4.3.4 (es los nuevo es similar, pero otra entorno gráfico) y la definición de la primera tarea sería como las de las capturas siguientes:

   
Usamos RTRR (sincronización activa) para poder elegir traer datos. 
Si no lo hemos hecho, en la otra nas principal hemos de activar RTRR tal como se ve en la siguiente captura
   

Volvemos a nuestra tarea en la nas vieja y seleccionamos como origen la nas remota.
   

si no está definida en la lista inferior, la agregamos tal como se ven en las siguiente captura
   

Una vez definida continuamos con el asistente
   

seleccionamos las carpetas a sincronizar. A la derecha estará la del origen (remota) y a la izquierda el destino (local)
   

En la programación horaria he puesto que se inicie a las 22:00. Esta hora debe ser posterior al encendido automático de la nas.
Si es muy lenta podemos dar un margen de 15 desde el encendido programado al lanzamiento de la tarea de sincronización.
   

   

En las opciones activos algunas interesantes como ignorar enlaces simbólicos, archivos duplicados,...pero la mas importante es la primera de "Eliminar archivos adicionales en la carpeta de destino". 

Es decir que si en posteriores sincronizaciones, hay un archivo en la local (de destino)  que no existe en la remota (de origen), éste será borrado para dejar el mismo contenido de la remota en la local.
   

Y llegamos a la creación final de la tarea de sincronización.  Recordad que la hemos llamado "Sincronizacion de datos"
   


Ahora vamos con una pequeña tarea de sincronización que va a copiar el archivo "apagar.txt" de una carpeta local a otra carpeta local. Que "casualmente" es la que es monitorizada por el script programado. 
El truco extra de esta tarea es que sólo la tarea se inicia tras la finalización de la anterior "Sincronizacion de datos"

Antiguamente se podían lanzar las tareas por comandos de consola, lo cual nos habría facilitado las cosa incluyendo un comando en el script de bash.
La definición de la tarea es sencilla y el del tipo "de una dirección", pongo capturas
   

Seleccionamos las carpetas a sincronizar, en nuestro caso el origen es "scripts/flags_ini" y la de destino es "scripts/flags"
   

Para la programación activamos la opción de inicio tras la finalización de otra tarea  de sincronización (que será nuestra trabajo real de sincronización).
   

ajustamos los ajustes de los filtros para que únicamente lo haga con un archivo, el de nombre "apagar.txt"
   
   

Y como guinda sólo nos queda hacer la programación de encendido automático de la nas.
Como la tarea principal de sincronización la hemos puesto a las 22:00, activamos una de inicio de la nas a las 21:45.

Para ello vamos al panel de control, energía y la sección de "Programar Energía" agregamos una actividad.
   

Con esto, ya hemos finalizado, ahora sólo nos queda apagar la nas, esperar a que se encienda, haga la copia y se apague.

P.D. Como siempre si veis alguna errata o error, indicármelo por privado y lo corrijo.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Responder
#2
(11-11-2021, 07:48 PM)Ganekogorta escribió:
Código:
#! /bin/bash
ruta="/share/scripts"
fecha=`date +%y-%m-%d`
hora=`date +"%H:%M"`
if [ -f $ruta/flags/apagar.txt ] ; then
    #existe el archivo de flag
    echo "elimino /share/scripts/flags/apagar.txt"
    #lo elimino para que no vuelva a apagarse tras el próximo inicio
    echo "elimino /share/scripts/flags/apagar.txt" >> $ruta/log.log
    rm $ruta/flags/apagar.txt
    echo "apago la nas el $fecha a las $hora" >> $ruta/log.log
    #doy orden de apagado
    poweroff
fi

Genial el aporte, lleva curro pero permite sacar todo el provecho del que tenga un NAS para estos menesteres. En cuanto compre la nueva NAS lo intento poner en práctica  Big Grin

Sólo un apunte, es una chorrada y realmente no altera ni mejora en nada el script, únicamente es práctico a efectos de programación y reduce algo el código.

El comando "tee"  es súper util y te permite prescindir de esos dos comandos "echo" a modo de tubería en "T" (de hecho el comando se llama así por eso mismo), imprimiendo por pantalla y redirigiendo (en modo append) a fichero al mismo tiempo, de la siguiente manera:


Código:
echo "elimino /share/scripts/flags/apagar.txt" | tee -a $ruta/log.log
TS-253A 2x4TB RAID1 8GB RAM
“La inteligencia es la habilidad de evitar hacer trabajo y conseguir que el trabajo se haga.” (Linus Torvalds)
  Responder
#3
Hola
Gracias por el comentario y se agradece.

Mis conocimientos de consola bash son de andar por casa.
Yo soy de los que viene de DrDos 5.0 [emoji6]
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Responder




Usuarios navegando en este tema: 1 invitado(s)