So... habe nun endlich mal etwas Zeit gehabt und mich der Sache angenommen. Nachdem eine Analyse des hotswap Prozesses von QNAP keine Schnittstellen für eigene Erweiterungen offenbarte und der hotplug usb.agent schon für die UPS Erkennung genutzt wird, habe ich mir udev näher angesehen.
Mit
konnte man schon sehen, dass der Kernel grundsätzlich, wie erwartet, udev Support bietet. Hierbei wurden die angesteckten Platten korrekt erkannt. Ein
lieferte zudem die Hersteller-/Geräte-/Seriennummer der angeschlossenen USB-Platten.
Allerdings fehlte der unter anderen Linux Distributionen enthaltene udevd, der beim Erkennen neuer Geräte entsprechende Regeln ausführen kann, die dann feste Aliases für die erkannten Laufwerke (/dev/sd*) setzen und Skripte ausführen kann. Ich habe dank Optware mal den udevd kompiliert. Die aktuelle Version 144 ging leider nicht, da hier signalfd.h genutzt wird, die wohl erst ab der Linux-Kernel Version 2.6.25 unterstützt wird. Die udev Version 142 vom Mai 2009 passt aber noch zu dem 2.6.22 und ließ sich ohne Probleme kompilieren.
Ich habe mal ein ipk zusammengeschnürt, das den udevd und eine Demo-Rule, sowie ein init Skript enthält (http://rieger.info/tsx19). Das Ganze lässt sich mit
installieren. Danach kann der udevd mit
gestartet werden. Dabei werden vom init Skript auch alle angeschlossenen Geräte mit einem
neu ausgelesen, und alle Regeln unter /opt/etc/udev/rules.d ausgewertet. Für meine beiden Platten habe ich folgende Regeln in 01-usb-storage-custom.rules definiert:
#USB-Stick Example#BUS=="usb", KERNEL=="sd?1", SYSFS{idVendor}=="04e8", SYMLINK+="usbstick", RUN+="/tmp/test"BUS=="usb", KERNEL=="sd?1", SYSFS{serial}=="57442D574341534A31303333383136", SYMLINK+="usb-backup-disk", RUN+="/share/HDA_DATA/Flexnet/QNAP/bin/mount-backup"BUS=="usb", KERNEL=="sd?1", SYSFS{serial}=="57442D574341553431363836343838", SYMLINK+="usb-media-disk", RUN+="/share/HDA_DATA/Flexnet/QNAP/bin/mount-media"
dadurch ist die Platte mit der Seriennummer 57442D574341534A31303333383136 immer unter dem Alias /dev/usb-backup-disk erreichbar. In dem Skript mount-backup mache ich dann folgendes:
#!/bin/shSHARENAME="Backup"mount ${DEVNAME} /share/HDA_DATA/$SHARENAMEif [ -e /share/HDA_DATA/$SHARENAME/autorun.sh ]; then /share/HDA_DATA/$SHARENAME/autorun.sh &>/share/HDA_DATA/$SHARENAME/autorun.logfi
und mounte so die Backup-Platte immer zusätzlich unter /share/HDA_DATA/Backup. Beim Anstöpseln führe ich außerdem die Datei autorun.sh auf der angesteckten Platte aus. Klappt prima! :thumb: Das gleiche mache ich dann (nur mit anderem mount point) für die Media-Platte mit der anderen Seriennummer.
Das ganze lässt sich natürlich auch für USB Sticks oder andere USB Geräte verwenden, um sobald diese angestöpselt werden, Aktionen auszulösen. Ein Beispiel für einen USB Stick habe ich im obigen Beispiel auskommentiert.
Leider führt das Optware QPKG offenbar die Skripte unter /opt/etc/init.d nicht automatisch beim Neustart der QNAP aus Daher mache ich in meiner autorun.sh, die ich gemäß Wiki beim Neustart der QNAP ausführe folgendes... Ich starte zunächst
in dem Skript läuft dann folgendes abgekoppelt von der autorun.sh
while [ ! -d /opt/etc/init.d ];
do
sleep 1
done
/opt/etc/init.d/S50udevd restart &>/tmp/udev-start.log
Ich warte also, bis die Optware beim Neustart der QNAP eingehängt wurde, und führe dann das init Skript für den Start des udevd aus. Das Skript muss ich abkoppeln (also & verwenden), da sonst der Start der QNAP hängt und ich mich erst per SSH einloggen und den Prozess killen muss, da die Optware (/opt) erst nach dem erfolgreichen Durchlaufen des autorun.sh eingehängt wird
Vielleicht könnte man ein QPKG daraus machen - dort können scheinbar auch /etc/rcS.d/Q* Skripte angelegt werden, die dann beim Neustart der QNAP Kiste direkt gestartet werden. Vorerst läuft es aber auch über den obigen aus der autorun.sh abgekoppelten Prozess wunderbar
Gibt es eigentlich irgendwo Doku zum Erstellen von QPKGs? Es scheinen ja Skripte mit angehängtem TAR Archiv zu sein - aber eine Doku habe ich nicht gefunden.
EDIT:
Zitat von "linuxnutzer"
Also bei mir ist der hintere rechte Anschluß immer /share/external/sdt1 und vorne immer /share/external/sdi1. Ich starte meine TS-119 jeden Tag neu und mache Backups auf /share/external/sdt1, hat immer funktioniert.
Linuxnutzer
komisch klappt bei meiner TS-119 nicht. Hin und wieder ist nach einem Neustart der TS-119 eine andere Platte die USBDisk1 bzw. USBDisk2, so wie es auch frosch2 meinte.