Alias für mehrere externe USB Disks

  • Hallo,


    ich habe mehrere USB Disks an meiner TS-119. Mein Problem ist, dass nach Reboots, oder wenn ich die Platten mal abziehe, diese immer an unterschiedlichen Mount-Points auftauchen. Mal ist die 1. Platte /share/USBDisk1 mal /share/USBDisk2. Dadurch kann ich das Backup meiner in der TS-119 eingebauten Platte nicht einfach auf /share/USBDisk1 durchführen. Ich würde gerne eine Art festes Label für die Platte haben. Dies hatte ich an meiner Fritz!Box mal so realisiert, dass beim einstöpseln der USB Festplatte automatisch ein Skript von dieser gestartet wird, dass dann einen Alias auf den Mount Point der Platte legt. Gibt es dafür schon fertige Lösungen für die QNAPs, oder lassen sich auf irgendeinem Weg feste Labels, Aliases o.ä. für unterschiedliche externe Laufwerke vergeben? Vielen Dank im Voraus für alle Ideen!


    Danke!


    Sebastian

  • Soweit ich festgestellt habe, bekommt jeder USB-Datenträger in Abhängigkeit vom USB-Steckplatz immer den gleichen Mountpoint. Hinten rechts -> /share/external/sdt1 (für die erste Partition), vorderer Anschluß -> /share/external/sdi1. USBDISK1,2,3... sind nur Links auf diese. Das Mapping ist irgendwo unter /etc/config/ als usb_map oder so ähnlich hinterlegt. Ein Problem mit den Zuordnungen gibt es nur, wenn ein Datenträger wegen Benutzung nicht ordnungsgemäß ausgehangen werden konnte. Dann bleibt der Mountpoint belegt und beim nächsten Einhängen wird ein anderer Mountpoint verwendet und auch die USBDISK.Nummer wird erhöht.


    Linuxnutzer

  • Zitat von "linuxnutzer"

    Soweit ich festgestellt habe, bekommt jeder USB-Datenträger in Abhängigkeit vom USB-Steckplatz immer den gleichen Mountpoint. Hinten rechts -> /share/external/sdt1 (für die erste Partition), vorderer Anschluß -> /share/external/sdi1. USBDISK1,2,3...


    dem ist offenbar leider bei der TS-119 nicht so. Wenn ich das Gerät neu starte, bekommen die beiden hinteren Anschlüsse mal die USBDisk1 mal die USBDisk2 zugewiesen, so wie schon von frosch2 gesagt. Ich habe mich etwas mit den Prozessen beim Anstöpseln von USB Platten bei der TS-119 auseinandergesetzt. Es scheint etwas anders zu laufen als typischerweise bei Linux-Distributionen (hotplug oder udev). Es gibt ein hotswap (/sbin/hotswap) von Qnap der das Einhängen der externen Platten übernimmt. Leider kann dieser scheinbar nicht konfiguriert werden - allerdings bekommt auch hotplug die Events mit. Ggf. kann man ein passendes Skript für /etc/hotplug schnitzen bzw. das dortige usb.agent erweitern, das offenbar nur die Erkennung von UPSen erledigt. Werde mich mal etwas damit auseinandersetzen. Es sieht aber so aus, als könnte man theoretisch an das eingehängte Device kommen (allerdings wird dies wie gesagt von /sbin/hotswap erledigt), und dann dort ein Skript ausführen. Darin würde ich dann einen Link in /share setzen, und so die Platten unabhängig vom Mountpoint bzw. Link von Qnap (USBDisk1, USBDisk2 usw.) zugreifbar machen. Danke für die Hinweise!


    Sebastian

  • Hallo Sebastian,


    mal so am Rande, könntest du bitte deinen Text etwas User-freundlicher formatieren?
    Würde die Lesbarkeit um ??% steigern.
    Zum Thema:
    Ein umount der USB's mit anschließendem mount über udev wäre denkbar, per autorun.sh.
    Mehr fällt mir im Moment nicht ein.

  • Zitat von "flexobrian"


    dem ist offenbar leider bei der TS-119 nicht so. Wenn ich das Gerät neu starte, bekommen die beiden hinteren Anschlüsse mal die USBDisk1 mal die USBDisk2 zugewiesen, so wie schon von frosch2 gesagt.
    Sebastian


    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

  • 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

    Code
    udevadm monitor


    konnte man schon sehen, dass der Kernel grundsätzlich, wie erwartet, udev Support bietet. Hierbei wurden die angesteckten Platten korrekt erkannt. Ein

    Code
    lsusb -v


    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. :D


    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

    Code
    ipkg install http://rieger.info/tsx19/udevd_1.42-1_arm.ipk


    installieren. Danach kann der udevd mit

    Code
    /opt/etc/init.d/S50udevd start


    gestartet werden. Dabei werden vom init Skript auch alle angeschlossenen Geräte mit einem

    Code
    udevadm trigger


    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:


    Code
    #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:


    Bash
    #!/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


    Code
    /share/Flexnet/QNAP/bin/udevd-start &


    in dem Skript läuft dann folgendes abgekoppelt von der autorun.sh


    Code
    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 :D


    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.

    Einmal editiert, zuletzt von christian () aus folgendem Grund: Doppelte Beiträge vermeiden, siehe Forenregeln!

  • Der Beitrag ist zwar jetzt schon ein paar Jährchen alt, aber ich muss meiner USB Platte beim mounten noch ein paar Optionen mitgeben und will deshalb den mount Befehl selbst angeben.
    Ich habe versucht das ganze anhand des Beitrags zu implementieren und das funktioniert soweit auch mal prinzipiell. Das Problem ist, dass auf meiner TS-121 die USB Laufwerke automatisch gemountet werden... ich hab leider nicht rausbekommen wie das funktioniert, aber es ist auf jeden Fall schneller als der udev. Deshalb funktioniert der mount nicht beim anstecken der USB Platte, weil zu dem Zeitpunkt wo mein Skript ausgeführt wird, die Platte schon in das Standard Verzeichnis gemountet ist.
    Ich weiß aber, dass mein Skript funktioniert - wenn ich umount ausführe und dann den udevd neu starte funktioniert alles prima.


    Jetzt frag ich mich - war das Verhalten damals noch anders oder wie kann man das lösen? Wie funktioniert denn das automatische mounten von USB Laufwerken bei QNAP? Kann man das konfigurieren, evtl sogar die mount Parameter angeben?


    Danke schonmal für eure Antworten!


    Sebastian

  • Hey ich habe gerade deine Anleitung befolgt, weil ich gerne mittels udev rules meinen Scanner zum scannen bringen möchte, wenn ich ihn anschalte.
    Leider wird die rule nicht ausgeführt wenn ich das entsprechende Gerät einschalte. Hier die angepasste Regel:

    Code
    #USB-Stick ExampleBUS=="usb", KERNEL=="sd?1", SYSFS{idVendor}=="03f0", SYMLINK+="usbstick", RUN+="/tmp/test"


    Die idVendor habe ich hieraus entnommen:

    Code
    Bus 001 Device 012: ID 03f0:5511 Hewlett-Packard DeskJet F300 series


    das Skript /tmp/test ist erstellt und ausführbar, wird aber wie gesagt nicht ausgeführt. Auch der Symlink usbstick taucht nicht unter /dev auf. Ich habe auserdem festgestellt, das dmesg folgende Warung liefert:

    Code
    [53125.110000] udev: starting version 142
    [53125.110000] <3>udev: missing sysfs features; please update the kernel or disable the kernel's CONFIG_SYSFS_DEPRECATED option; udev may fail to work correctly


    immer wenn ich wie du beschrieben hast udevd mittels /opt/etc/init.d/S50udevd start starte. Kommt diese Meldung bei dir auch, und hast du vielleicht einen Tip warum die rule nicht ausgeführt wird?


    Grüße,
    Flo

  • das leuchtet mir ein :)


    brauch ich udev, um beim anstecken einer usbplatte ein script zu starten, oder gibt es eine andere möglichkeit?


    sollte udev eigentlich funktionieren, oder braucht es adaptionen? soweit ich sehe, läuft der dienst bei mir, nur kann ich keine regeln permanent speichern (nach einem neustart ist die datei wieder weg) und die regeln werden schlicht und einfach nicht ausgeführt.

  • Hast du dein Problem gelöst bekommen? ich habe an meinem TS 251 zwei externe Festplattengehäuse mit je 4 Festplatten angeschlossen. Jedes mal wenn das NAS neustartet werden die Platten in unterschiedlicher Reihenfolge gemountet.


    Die Lösung von flexobrian geht bei mir nicht weil ich eine x86-CPU habe.
    Ich bin völliger noob und bräuchte eine genaue Anleitung wie ich es hinbekomme, dass die Platten immer die gleiche Zuordnung bekommen.

  • hm tatsächlich hat das jetzt funktioniert. Das war vor einigen Monaten noch nicht möglich. Schön dass das geupdatet wurde. scheint zu funktionieren. Dann kann ich jetzt auch Kodi auf einem raspberry pie testen :)