usb port auf externem usb-hub resetten

  • hi,

    Seit gestern probiere ich dieses Problem zu lösen:

    Ich habe am NAS einen externen (aktiven) USB-Hub angeschlossen. An diesem hängt in meinem test-Aufbau eine 2,5-hdd (ohne eigeme Stromversorgung). auf die Platte soll ein Backup laufen. Nach dem bachup-Job wird die Platte ausgeworfen und eine IP-Steckdose schaltet den Hub aus (damit die Platte zwischen den Backup-Jobs aus ist).

    Wenn der nächste Job startet und der Hub eingeschaltet wird, dann wird die Platte zwar erkannt laut dmesg, aber nicht gemountet.

    Bei 3,5-Platten mit eigenem Netzteil reicht das command...


    Code
    echo 0 > /sys/bus/usb/devices/SPEZIFISCHE-PORTNUMMER/authorized
    echo 1 > /sys/bus/usb/devices/SPEZIFISCHE-PORTNUMMER/authorized

    ...damit die Platte wieder gemountet wird.


    bei den 2,5-Platten (nur mit USB-Strom) klappt das aber nicht. Meine Theorie ist, dass sie trotz abgeschaltetem USB-Hub weiter Strom über den QNAP-USB-Port (und durch den Hub) bekommen, nicht genug, dass sie angeht, aber auch nicht wirklich weg ist.


    Nun will ich in meinem Script bei den 2,5-Platten einbauen, dass der usb-Port, an dem sie stecken, "resettet" wird. Ich habe folgendes getestet (die Platte hängt an Port 2-2.4.4.1):


    Code
    echo '2-2.4.4.1' > /sys/bus/usb/drivers/usb/unbind
    echo '2-2.4.4.1' > /sys/bus/usb/drivers/usb/bind

    Die commands lassen sich ausführen, aber es passiert nichts, auch in dmesg sehe ich nichts, dass irgendwas passiert.

    Warum klappt das nicht? Kennt vielleicht jemand ein anderes comamnd, um per command ein Aus-und-Wieder-Anstecken einer USB-Platte zu simulieren? Oder einen ganz anderen Lösungsansatz?

  • bei den 2,5-Platten (nur mit USB-Strom) klappt das aber nicht. Meine Theorie ist, dass sie trotz abgeschaltetem USB-Hub weiter Strom über den QNAP-USB-Port (und durch den Hub) bekommen, nicht genug, dass sie angeht, aber auch nicht wirklich weg ist.

    Viele USB-Hubs funktionieren auch ohne externe Stromversorgung. Die meisten 2,5" USB-Festplatten der heutigen Zeit erhalten genügend Strom über den USB-Port. Von dem her müsste die 2,5 USB-Festplatte komplett auch ohne Stromversorgung des Hubs funktionieren. Aber vielleicht verteilt der Hub nicht genügend Strom weiter (ohne externes Stromnetzteil) oder die Festplatte ist etwas älter. Habe auch noch so eine im Einsatz, die nicht genügend Strom über den normalen USB-Port erhält.


    USB-Port reseten? :/ Was sicher funktioniert ist ein Neustart des NAS. Dies kann ja in der Nacht per Aufgabe durchgeführt werden. Dies kann per WebGUI eingerichtet werden. Wenn dies nur einmal in der Woche benötigt wird.

    Allerdings dürfte so die USB-Festplatte vor einer Überspannung nicht geschützt sein. Da hilft nur manuelles physisches Ausstecken.

  • Mavalok2


    Vorab:

    nas neu starten geht nicht, weil sich auf dem NAS ein shared storage für esxi befindet mit laufenden VMs. Ausserdem qvr pro, kodi datenbank usw.



    Ich bin mir nicht sicher, ob ich klar genug gemacht habe, was ich erreichen will.

    Stell dir das Szenario so vor:

    - 2,5-hdd ist an aktivem usb-hub angeschlossen in in QTS gemountet.

    - HBS23 backupjob läuft auf die Platte und HBS3 wirft die Platte am ende des Jobs aus (ist nicht mehr runter externe Datenträger bzw fileStation in Qts sichbar).

    - IP-Steckdose trennt Strom zum aktiven usb-hub --> 2,5-hdd geht aus.

    Soweit so gut und so sollee s auch sein.

    - neuer backupjob steht an:

    - ip-Steckdose schaltet usb-hub wieder an --> 2,5-hdd läuft an.

    - PROBLEM: 2,5-hdd wird allerdings nicht mehr per automount eingebunden; sie ist aber unter dmesg sichtbar, allerdings ungemountet. auch mit lsusb ist sie sichtbar.

    -----> nicht praktikable, da nicht autarke Lösung: Platte physikalisch vom Port trennen und wieder einstecken -> Platte wird wieder per automount eingebunden

    ------> workaround Lösung, autark aber funktioniert (noch) nicht: das physikalische ab-und-wieder-anstecken der Platte per script erledigen --> Platte wird wieder per rautomount eingebunden.


    Ich dachte ursprünglich, dass die gekappte Stromzufuhr des aktiven USB-Hubs ausreicht, damit die Platte beim wiedereinschalten des Hubs wie frisch angesteckt per automount eingebunden wird, deswegen ja der aktive Hub und die IP-Steckdose (könnte auch eine Zeitschaltuhr übernehmen).

    Der selbe Aufbau mit einer 3,5-Platte mit externem Netzteil (das gemeinsam mit dem Hub ein und ausgeschaltet wird), funktioniert, wenn nach dem Einschalten ein Script läuft:

    Code
    echo 0 > /sys/bus/usb/devices/2-2.4.4.1/authorized
    echo 1 > /sys/bus/usb/devices/2-2.4.4.1/authorized

    (wobei "2-2.4.4.1" der Hub-Port ist, unter dem die jeweilige Platte angeschlossen ist.*)

    * herauszufinden mit lsusb und

    Code
    for X in /sys/bus/usb/devices/*; do 
        echo "$X"
        cat "$X/idVendor" 2>/dev/null 
        cat "$X/idProduct" 2>/dev/null
        echo
    done

    Da selbe Script, also der "authorize"-Befehl, klappt abern icht bei der 2,5-platte.

    Da es mit der 3,5-Platte klappt und mit der 2,5-Platte nicht, gehe ich davon aus, dass die 3,5 beim abgeschaltetem Netzteil wirklich komplett aus ist, die 2,5 aber weiter ein bisschen Strom bekommt, der aus dem Nas-USB-Port raus und in den (abgeschalteten) USB-Hub und damit zur 2,5-hdd geht. Dieder Strom macht der 3,5-Platte nix aus, die bleibt komplett tot, aber die 2,5 beleibt irgendwie "unsichtbar" an. Ich könnte jetzt komplett auf 3,5 mit Netzteil umrüsten, aber ich habe leider bis auf die eine nur 2,5-Platten da, deswegen will ich das hinbekommen. Ein bisschen Ehrgeiz kommt auch dazu.

    Ich danke mir also, da das "resetten" des devices selbst mit "authorize" bei der 2,5 nicht funktioniert, ichentweder den spezifischen Port des usb-Hubs, wo die 2,5-platte dranhängt, irgendwie resetten muss, oder gleich den ganzen Hub. Ich verstehe allerdings den syntax bzw Aufbau von "2-2.4.4.1" noch nicht ganz. Darin sind jedenfalls alle Hubs und Ports des ganzen Weges enthalten (Hub und Port auf der Qnap, Hubs und Port am externen Hub**).

    **ein 10 Port-hub besteht doch aus mehreren kleineren logischen Hubs, die zusammenschaltet sind. Aber jetzt komme ich vom eigentlichen Thema ab.

    Eigentlich dachte ich, dass dieser Code den Port der 2,5er Platte zurücksetzt:

    Code
    echo '2-2.4.4.1' > /sys/bus/usb/drivers/usb/unbind
    echo '2-2.4.4.1' > /sys/bus/usb/drivers/usb/bind

    und die Platte dann wie ab und wieder angesteckt behandelt und autogemountet wird, aber es funktioniert nicht.

    Und da stehe ich jetzt und weiss nicht weiter.


    (in nahe rZukunft werd eich mir ein 3. Nas kaufen, das rein als backup-Ziel für nas 1und 2 dient, und dass auch nur während eines backups an ist. Aber Im Moment kan nich mir das wegen der blöden Corona-Kurzarbeit nicht leisten, also NAs plus die ganzen festplatten).


    Ein komplett anderer Lösungsansatz wäre, die Platte per script zu mounten. Müsste funktionieren, da sie ja unter lsusb da ist. Da aber später insgesamt 5 Platten an dem Hub hängen sollen, die dann alle per script gemoutnet werden müssen, weiss ich nicht, ob die Platten bzw die Partition drauf immer gleich erkannt werden, also zb hdd-A immer als zb sda. Wenn ja, könnt eich unter /share/external/ 5 mountpoints (sprich Verzeichnisse anlegen und dann eins cript mit:


    Code
    mount /dev/sda1 /share/external/backup-platte-1
    mount /dev/sdj1 /share/external/backup-platte-2
    usw.
  • Doch, doch. Habe ich schon so verstanden.


    Eigentlich müsste doch eine 3,5" Festplatte auch ohne "Script" wieder funktionieren. Ohne Strom vom Netzteil ist die doch komplett aus, da die kein Strom über USB beziehen, im Gegensatz zu den 2,5-Festplatten.


    So irgendwie kann ich mir nicht vorstellen, dass das Script so funktionieren kann. Kenne jetzt die Befehle für USB-Ports nicht, aber der Befehl echo dient eigentlich der Ausgabe an ein Gerät. Ohne irgendetwas würde der erste Teil also echo 0 oder echo '2-2.4.4.1' nur zur Bildschirmausgabe von 0 oder 2-2.4.4.1 führen. Durch > wird dies jedoch weitergeleitet an ein bestimmtes Gerät. In Deinem Fall wohl an den USB-Bus. Aber wieso 0 1 oder '2-2.4.4.1' den Port reseten soll...? Aber wie gesagt kenne die Befehle nicht dazu.

  • Mod: Zitat ohne Quellenangabe ... korrigiert! :handbuch::arrow: Die Zitat Funktion des Forums richtig nutzen

    Eigentlich müsste doch eine 3,5" Festplatte auch ohne "Script" wieder funktionieren. Ohne Strom vom Netzteil ist die doch komplett aus, da die kein Strom über USB beziehen, im Gegensatz zu den 2,5-Festplatten.

    Ja eh, da hast du schon recht. In de rPraxis geht es aber nur in jedem 2. fall, warum auch immer. Mit "authorized" klappt es jedesmal. Schlimmstenfalls ahue ich die Platte nochmal raus und dann wieder rein.


    So irgendwie kann ich mir nicht vorstellen, dass das Script so funktionieren kann. Kenne jetzt die Befehle für USB-Ports nicht, aber der Befehl echo dient eigentlich der Ausgabe an ein Gerät.

    Bin ein ziemliche rnoob wa slinux angeht, aber ich versuch egerade, alle sin mich aufzusaugen. den Befehl habe ich daher:

    http://migueleonardortiz.com.a…-their-ports-in-linux/164

    https://askubuntu.com/questions/798040/how-to-unbind-bind-a-usb-device-as-normal-use

    Wenn du dir da smal ansiehst, wäre ich hoch erfreut. Bin wie gesagt Linux-Anfänger, aber bin gewillt, mich da einzuarbeiten.


    habe meinen obigen post noch ergänzt um den Lösungsansatz mit manuelllem mounten. Was meinst du dazu.



    update:

    noch ein link:

    https://karlcode.owtelse.com/b…bling-usb-ports-on-linux/


    der befehl hier lautet:


    Code
    $ echo '1-1.6' | sudo tee /sys/bus/usb/drivers/usb/unbind

    sudo gibts ja auf qnap nicht, bzw ist der admin eh root, also kann der befehl so funktionieren (was "tee" ist, weiss ich nicht)?:


    Code
    $ echo '1-1.6' | tee /sys/bus/usb/drivers/usb/unbind
  • nur zur info.

    Habe mir jetzt doch 2 externe seagate 10tb bestellt, mit Netzteil. Bin mit den 2,5 platten einfach zu keiner Lösung gekommen und habe aufgegeben.

  • Wenn du dir da smal ansiehst, wäre ich hoch erfreut. Bin wie gesagt Linux-Anfänger, aber bin gewillt, mich da einzuarbeiten.

    Was unter Ubuntu bzw. Lubuntu funktioniert, braucht noch lange nicht unter Alpine Linux oder QTS zu funktionieren. QTS is wesentlich kleiner, damit es auch auf kleinen NAS verfügbar ist, typisch für embedded Systeme eben. Und je nach Plattform unterscheidet sich der Funktionsumfang von QTS ebenfalls, bei gleicher Versionsnummer.

  • So irgendwie kann ich mir nicht vorstellen, dass das Script so funktionieren kann. Kenne jetzt die Befehle für USB-Ports nicht, aber der Befehl echo dient eigentlich der Ausgabe an ein Gerät. Ohne irgendetwas würde der erste Teil also echo 0 oder echo '2-2.4.4.1' nur zur Bildschirmausgabe von 0 oder 2-2.4.4.1 führen. Durch > wird dies jedoch weitergeleitet an ein bestimmtes Gerät. In Deinem Fall wohl an den USB-Bus. Aber wieso 0 1 oder '2-2.4.4.1' den Port reseten soll...? Aber wie gesagt kenne die Befehle nicht dazu.

    Das ist schon richtig so. Die Dateien unter /sys sind Pseudodateien, die in Wirklichkeit interne Kernel-Funktionen repräsentieren. In manche davon kann man etwas reinschreiben, um Funktionen des Kernels oder eines Treibers zu steuern. Der echo-Befehl ist ein Weg dazu, das beliebte sudo tee ein anderer.

  • habe jetzt alles mit externen 3,5 Platten mit netzteil geregelt. Da funktioniert alles wie gedacht. habe halt 300 euro ausgeben müssen.

  • der befehl hier lautet:

    Code
    $ echo '1-1.6' | sudo tee /sys/bus/usb/drivers/usb/unbind

    sudo gibts ja auf qnap nicht, bzw ist der admin eh root, also kann der befehl so funktionieren (was "tee" ist, weiss ich nicht)?:

    Code
    $ echo '1-1.6' | tee /sys/bus/usb/drivers/usb/unbind

    man tee erklärt Dir, was tee ist.

    (Auf einem unverkrüppelten Linux-System oder in der Suchmaschine Deiner Wahl eingeben - QTS hat den man-Befehl leider nicht an Bord, vermutlich weil QNAP sowieso nicht will, dass man sich da auf der Kommandozeile rumtreibt.)


    sudo tee ist ein beliebter Trick, um einen Output Redirect mit sudo-Rechten hinzubekommen.

    (sudo echo something > somewhere funktioniert nicht. Warum nicht, überlassen wir dem Leser als Übungsaufgabe.)

    Wenn man den Befehl unter root ausführt, braucht man das nicht.

    Dann lautet der Befehl schlicht:

    Code
    # echo '1-1.6' > /sys/bus/usb/drivers/usb/unbind

    HTH
    Tilman