Extern USB-Platte schalten durch Unmount bei Synology DSM

Begonnen von Thorlaroid, 31 Juli 2016, 18:33:26

Vorheriges Thema - Nächstes Thema

Thorlaroid

Nach längerer Zeit habe ich endlich eine Lösung für mein Problem gefunden. Die Lösung teile ich nun auch gerne mit Euch.

Problem:
Auf meiner Synology NAS läuft jede Nacht ein Backup von Daten und dem System auf ein externes USB-Laufwerk. Das USB-Laufwerk ist eine 5-Bay RAID Station von Sharkoon, was nicht das leistete Gerät ist. Die Idee war also, dass FHEM einen Power-Switch vor dem Backup anstellt und nach dem Backup wieder abstellt. Das Anstellen ist natürlich kein Problem, da man dies ohne Probleme mit FHEM terminieren kann. Die Herausforderung ist die Herausforderung, bei der folgende Lösungsansätze leider nicht funktioniert haben:

  • Abschalten nach bestimmter Zeit: Schwierig, da je nach dem entstandenen Delta das Backup länger oder kürzer braucht. Das USB-Laufwerk länger laufen zu lassen ist natürlich keine Alternative.
  • Abschalten in Abhängigkeit der Spannung: Ob die Platten laufen oder nicht, ob das Laufwerk gemountet ist oder nicht, die Sharkoon Station verbraucht immer fast das gleiche. Abweichungen sind unregelmäßig und nicht beständig.

Die Lösung ist also, dass die NAS ein Signal geben muss, wenn das Backup durchgelaufen ist. Leider kann das Synology DSM maximal das USB-Laufwerk unmounten. Dies habe ich als Ansatz genommen. Die Lösungsschritte in der Kurzform sind:

  • FHEM schaltet den Power Switch des USB-Laufwerks 5 Minuten vor dem Backup-Job ein
  • USB-Laufwerk wird von der NAS erkannt
  • Backup läuft nach Plan durch.
  • Backup-Job unmounted das USB-Laufwerk
  • Regelmäßig Laufendes Skript stellt fest, dass das Laufwerk umounted ist und schaltet ein Dummy bei FHEM
  • Notify schaltet den Power Switch aus

Nun die Schritte zum einrichten mit dem notwendigen Code:
Backup Job
Der Backup Job im Hyper Backup Manager einstellen. Mein Backup läuft einmal am Tag um 1:00 Uhr an. Wichtig ist, dass Ihr den Harken setzt, der bewirkt, dass die Usb-Fastplatte nach dem Backup ausgeworfen wird.

Einstellungen in FHEM
################# Schaltung Backup ######################

define ThorBackupStatus dummy #Wird vom Skript auf der NAS an und ausgestellt
attr ThorBackupStatus devStateIcon on:it_remote_folder@green off:it_remote_folder@red
attr ThorBackupStatus room Arbeitszimmer
attr ThorBackupStatus webCmd on:off


### An ###
define Arbeitszimmer.Backup.On at *00:55:00 set FBDECT_16 on    #FBDECT_16 der Schalter an der USB-Festplatte; Wird 5 Minuten vor dem Backup geschaltet
define ThorBackupStatus.on notify ThorBackupStatus:on set FBDECT_16 on    #Nicht zwingend notwendig, aber so stimmt die Anzeige in FHEM ;)
### Aus ###
define ThorBackupStatus.off notify ThorBackupStatus:off set FBDECT_16 off   #Wenn das Dummy auf aus geht, weird auch der Schalter an der USB-Fastplatte ausgestellt.


Skript auf der NAS
Im Synology DSM findet Ihr unter Systemsteuerung den Punkt Aufgabenplaner. Unter Erstellen den Punkt Geplante Aufgabe -> Benutzerdefiniertes Skript auswählen. Unter Allgemein könnt Ihr einen freien Namen wählen. Der Benutzer muss root sein.
Die Einstellungen unter Zeitplan sind abhängig davon, wie häufig Euer Backup läuft. Ich habe Täglich, von 0:00-23.55, alle 5 Minuten eingestellt.
Unten Aufgabeneinstellungen könnte Ihr das folgende Skript ergänzen:

volume="/volumeUSB1/usbshare"
mount | grep "on ${volume} type" > /dev/null
if [ $? -eq 0 ]
then
DATA=$(wget -O - -q -t 1 http://192.168.178.101:8083/fhem?cmd=set%20ThorBackupStatus%20on)
else
DATA=$(wget -O - -q -t 1 http://192.168.178.101:8083/fhem?cmd=set%20ThorBackupStatus%20off)
fi

Zur Erläuterung:

  • Als volume ergänzt den Namen und Pfad Eurer USB Festplatte (wie man den identifiziert, erkläre ich gleich noch)
  • Die IF-Abfrage überprüft, ob das zuvor angegeben Volume gemounted ist.
  • Wenn ja, dann wird über json die zuvor in FHEM konfigurierte Dummy Variable auf on gestellt, wenn nicht, dann aus off
  • Kleines Detail: wget liefert auch einen Wert zurück, den wir hier aber nicht berücksichtigen. Aber egal, läuft auch so.

Volume Name und Pfad identifizieren
Benötigt Ihr den Namen und Pfad des USB Laufwerks, dann geht wie folgt vor:

  • USB-Festplatte einstecken und starten.
  • SSH im DSM anstellen. Das geht unter Systemsteuerung -> Terminal & SNMP
  • Terminal am Rechner öffnen, per SSH auf der NAS einloggen und den Befehl "df" ausführen. Dieser listet Euch alle Laufwerke auf. Hier den entsprechenden Pfad rauskopieren.
  • SSH wieder abstellen ;)

Ich hoffe es ist für Euch nachvollziehbar und hilfreich.

StefanP

Danke für den Beitrag. Auch auf die Gefahr, dass ich mich mal wieder als Komplett-Unwissender oute: wo ist denn da json?

Vorab danke für die Erleuchtung!

Gruß StefanP

Thorlaroid

Zitat von: StefanP am 31 Juli 2016, 21:15:07
Danke für den Beitrag. Auch auf die Gefahr, dass ich mich mal wieder als Komplett-Unwissender oute: wo ist denn da json?

Vorab danke für die Erleuchtung!

Gruß StefanP

Hinter dem URL Aufruf versteckt sich meiner Interpretation nach ein JSON Befehl.

Wernieman

Auch wenn es jetzt etwas her ist .. aber hat die Synology auf Shell-Ebene nicht den "nc"-Befehl?

Damit könnte sie dem FHEM Befehle "zuschmeisen"
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html