Foro QNAP en español
inicio de nas, copia de HBS3 a usb y apagado de nas - Versión para impresión

+- Foro QNAP en español (https://www.qnapclub.es)
+-- Foro: GENERAL (https://www.qnapclub.es/forumdisplay.php?fid=3)
+--- Foro: Firmware, Aplicaciones y Tutoriales (https://www.qnapclub.es/forumdisplay.php?fid=39)
+---- Foro: Tutoriales (https://www.qnapclub.es/forumdisplay.php?fid=40)
+---- Tema: inicio de nas, copia de HBS3 a usb y apagado de nas (/showthread.php?tid=4480)



inicio de nas, copia de HBS3 a usb y apagado de nas - Ganekogorta - 06-02-2022

Hola

HBS3 tiene una función interesante que es la autodetección de disco usb al ser conectados.
Con ayuda de esto podemos automatizar o simplificar las copias/sincronzaciones para gente poco acostumbrada a usar las nas.
Sólo han de fijarse en un led para saber si está trabajando el disco usb y cuando pueden retirar el disco sin mas conocimientos.

Pero aquí voy a tratar una situación distinta, la idea es que disponemos de una nas (mas o menos obsoleta y poco potente) con un disco duro usb de gran capacidad para que contenga las copias o sincronizaciones de otras nas. Queremos iniciarla de forma arbitraria y que autoinicie la tarea de HBS3 y luego se apague tras la finalización.

En principio, con activar la tarea de auto detección sería suficiente, pero hay un problema de tiempos.
Las nas de Qnap tardan en iniciar todos los procesos y servicios. Para cuando HBS3 está activo, el disco duro ya ha sido detectado previamente y la tarea HBS3 no se lanza puesto que no salta el suceso de agregación de disco (ya estaba agregado).

Para hacerlo hemos de preparar varios scripts que nos los hagan. 
Básicamente el flujo es el siguiente:
-tengo activado autorun.sh . para crear un archivo temporal que me sirve a modo de flag para saber que la nas se ha iniciado y he de iniciar ciertas tareas
-se ha agregado en el crontab una ejecución cada 5 minutos de un script en bash que hace dos cosas (expulsar/conectar el disco usb y saber si ya puedo apagarla)

Descripción y configuración de todos los pasos

1-activo lo del autorun.sh. Yo para evitar el delicado sistema de montar, editar y desmontar para editar ese autorun.sh lo que hago es agregarle una línea que ejecute otro script que tengo en una ubicación editable fácilmente.
En mi caso autorun.sh contiene el siguiente código
   
Es decir ejecuta un script llamado mi_autorun.sh que contiene lo siguiente:
Código:
#! /bin/bash
origen="/share/CACHEDEV1_DATA/Scripts/flagini"
destino="/share/CACHEDEV1_DATA/Scripts/flags"
archivoorigen="backup1.txt"
archivodestino="arrancado.txt"

cp $origen/$archivoorigen $destino/$archivodestino

Lo que hace es copiar un archivo existente llamado "backup1.txt" ubicado en la ruta "/share/CACHEDEV1_DATA/Scripts/flagini" y lo copio a "/share/CACHEDEV1_DATA/Scripts/flags".
Evidentemente el archivo backup1.txt lo hemos creado con anterioridad y con un contenido de texto simple (un "hola" por ejemplo sirve).

-hemos activado la ejecución cíclica de un archivo bash en el crontab con periodo 5 minutos, pueden ser 10 sin ningún problema. No lo hago cada poco tiempo para no saturar a la nas.
El archivo bash está en la carpeta "/share/CACHEDEV1_DATA/Scripts" y tiene por nombre "check_backup1.sh"

Para ello ejecutamos las siguientes acciones en la consola:
Código:
echo -e "*/5 * * * * /share/CACHEDEV1_DATA/Scripts/check_backup1.sh">> /mnt/HDA_ROOT/.config/crontab
crontab  /etc/config/crontab
/etc/init.d/crond.sh restart

2-el contenido del archivo "check_backup1.sh" es el siguiente:
Código:
#! /bin/bash
destino="/share/CACHEDEV1_DATA/Scripts/flags"
origen="/share/CACHEDEV1_DATA/Scripts/flagini"
archivo="backup1.txt"
archivo1="arrancado.txt"

#compruebo si existe backup1.txt en una ruta concreta para saber que ya he terminado HBS3
if [ -f $destino/$archivo ]; then
    echo "Existe el archivo $archivo y lo borro"
    rm $destino/$archivo
    echo "Apago la nas"
    # apago la nas
    poweroff
fi    

#compruebo si existe arrancado.txt en un ruta concreta para saber que la nas ha iniciado
if [ -f $destino/$archivo1 ]; then
    # temporizo y expulso disco usb
    echo "detengo usb" >>$destino/log.log
    #DETENGO USB
    echo 0 > /sys/bus/usb/devices/2-4/authorized
    date >>$destino/log.log
        #espero 4 minutos antes de comprobar si HBS3 está arrancado
    sleep 240
    # compruebo que esta funcionando HBS3
    i=$(/bin/ps w | grep /HybridBackup | wc -l)
    i=${i: -1}
    echo "el valor de las lineas es= $i veces">> $destino/log.log
    if [ "$i" == "5"  ]; then
    # si hay 5 HybridBackup entonces si elimino el flag y activo USB
        echo "Existe el archivo $archivo y lo borro"
        rm $destino/$archivo1
        echo "activo usb" >>$destino/log.log
        date >>$destino/log.log
        #ACTIVO USB que desencadena el inicio de HBS3
        echo 1 > /sys/bus/usb/devices/2-4/authorized
        echo " " >>$destino/log.log
    fi
fi

Es en este script donde están las comprobaciones y acciones a realizar.
Hago dos cosas principalmente:
  • saber si hbs3 ha finalizado para apagar a la nas. Se sabe por la existencia de un archivo flag.
  • saber si la nas esta activa (se sabe por otro archivo flag) para detener el disco usb, luego comprueba si HBS3 esta activo (por número de procesos) y cuando lo está elimino el flag y activo el disco usb

Hay un punto a tener en cuenta en el script, no he encontrado una forma "elegante" de descubrir cual es el comando que conecta/desconecta nuestro disco duro usb.
Los comandos son los de la lineas "/sys/bus/usb/devices/2-4/authorized". Ese 2-4 indica el disco y dependiendo de cada nas  puede cambiar.
Lo mejor es que hagáis pruebas antes para saber si el disco duro es el adecuado. 
Hacer un ls de la carpeta "/sys/bus/usb/devices/" para ver cuales son los vuestros y haced la prueba con ellos para identificar el de nuestro disco usb conectado.

Para desconectar "echo o > /sys/bus/usb/devices/X-Y/authorized" y para conectar "echo 1 > /sys/bus/usb/devices/X-Y/authorized"

3-Tarea de sincronización / copia
Aquí tenemos que definir la tarea que queramos hacer, pero si es importante que se inicie cuando detecte nuestro disco duro usb.
   

Y ahora hemos de crear una nueva tarea de sincronización que sea lanzada tras la finalización de la anterior.
Lo que hace es copiar un archivo de una carpeta a otra. Es un flag que desencadenará el apagado de la nas.
Las propiedades de esta tarea son:
   

   

   

   

   

Lo hago como tarea separada para que sirva tanto si la inicial es de copia o de sincronización.
Nos podemos evitar esta segunda tarea si la primera es de sincronización y agregamos la carpeta del flag (ojo que ya podemos aplicar el filtro del copia )

Y con todo esto ya tendríamos la nas preparada para hacer copia y sincronización cuando la encendamos manualmente o por programación y luego apagarse.

Pegas de este sistema, si la tarea de sincronización de datos no encuentra a la nas origen de datos, esta falla y no lanza tarea encadenada para apagar la nas.
Otra pega es que HBS3 tiene límites en el número de carpetas a sincronizar por tarea, lo cual puede obligarnos a encadenar mas tareas intermedias.