USB auto reconnect nach Neustart des NAS

  • Moin liebe Community,


    ich suche schon seit längerem eine Lösung um die USB Geräte, die ich ständig am NAS hängen habe automatisch mit meiner VM zu verbinden und zwar immer dann, wenn ich das NAS neugestartet habe.

    Unter den Einstellungen in der Virtualization Station kann ich eine bestimmte VM ja "verzögert" starten lassen nachdem das NAS neugestartet wurde.

    Das klappt auch einwandfrei, jedoch muss ich nach jedem Neustart des NAS alle meine USB Geräte einzeln mounten, sehr nervig und manchmal vergesse ich es auch!


    Gibt es eine Lösung für dieses Problem?


    Gruß

    Mathze

  • So, nachdem ich ca. 1/2 Tag recherchiert habe, konnte ich mir nun selber helfen, möchte aber gerne anderen Leuten, die evtl. vor einem ähnlichen Problem wie ich standen mit dieser Anleitung helfen!


    Vorraussetzungen: Putty / Terminal (SSH Verbindung), optional WinSCP (um Dateien anzulegen)

    Ich habe gerne alles mit WinSCP gemacht, konnte ich mich leichter durch die Ordner navigieren!


    1. per SSH mit dem NAS verbinden

    192.168.178.46


    2. zuerst muss einmal der Command "virsh" importiert werden.


    2a. export LD_LIBRARY_PATH=/QVS/usr/lib:/QVS/usr/lib64/

    2b. export PATH=$PATH:/QVS/usr/bin/:/QVS/usr/sbin/


    3. Nun müssen wir den VM-Namen herausfinden

    3a. virsh list –all

    3b. Hier werden alle VM Namen angezeigt, durch Starten / Stoppen der VM kann man einfach erkennen, welche VM die Gesuchte ist!

    3c. Bei mir hieß sie: 24104906-bb07-4558-89f6-fcede13817af

    3d. Per "virsh domrename [ALTER_NAME] [NEUER_NAME]"

    Könnte man der VM einen sprechenden Namen geben

    3e. So könnte es dann aussehen:

    "virsh domrename 24104906-bb07-4558-89f6-fcede13817af MEINE_VM"

    Info: Dies klappte bei mir Aufgrund von vorhandenen Snapshots leider nicht!

    Ob man nun hier mit dem langen Namen oder mit einem Rename arbeitet, sei Euch freigestellt, jedoch muss dieser Name im Script unter Step 6 angegeben werden!


    4. Nun muss im Autostart vom QNAP NAS der Pfad zum Script eingegeben werden, welcher beim booten ausgeführt werden soll.

    4a. /etc/config/qpkg.conf


    5. Folgender Code muss in dieser Datei hinzugefügt werden, die Reihenfolge geht von oben nach unten, man kann ihn auch zwischendurch einfügen, wenn er nicht zum Schluss ausgeführt werden soll!


    5a. [autorun]

    Name = autorun

    Version = 0.1

    Author = Mathze

    Date = 2018-08-09

    Shell = /share/VM/.qpkg/autorun/autorun.sh

    Install_Path = /share/VM/.qpkg/autorun

    QPKG_File = autorun.qpkg

    Enable = TRUE


    5b. In meinem Fall habe ich einen eigenen VM-Ordner, in diesem liegt die Batch Datei:

    /share/VM/.qpkg/autorun/autorun.sh

    Man kann die Datei überall ablegen, muss dann aber den Pfad unter 4a. anpassen.


    6. Nun legt man via WinSCP in dem o.g. Pfad eine Datei mit dem Namen "autorun.sh" an.


    7. In die Datei wird nun das Script eingefügt. Unter "# Then mount USB" müssen die Pfade angepasst werden!

    "virsh attach-device 24104906-bb07-4558-89f6-fcede13817af /share/VM/.qpkg/autorun/Mount_USB_Bluetooth.xml"

    Rot = VM-Name siehe Step 3

    Orange = Pfad der XML Datei Step 10




    7a. Wichtig ist, dass zu dem Zeitpunkt, wenn das Script läuft, die VM unbedingt gestartet sein muss!


    8. Das Script ausführbar machen:

    chmod +x /share/VM/.qpkg/autorun/autorun.sh


    9. Nun benötigt man einige Informationen von den USB Gerat / Geräten, die man gerne automatisch mounten möchte

    9a. Per Putty / Terminal per "lsusb" sich die verbundenen USB Geräte anzeigen lassen

    9b. Folgende Informationen werden benötigt:

    vendor id = Ersten vier Zahlen hinter ID

    product id = Zweiten vier Zahlen hinter dem Doppelpunkt ":"


    Siehe Screenshot!


    Optional wird noch die Bus-Nummer und die Device-Nummer benötigt, falls es identische vendor- und product-id's gibt!


    10. Nun muss im Ordner: /share/VM/.qpkg/autorun/ eine .XML-Datei angelegt werden, wo genau diese Informationen von dem USB Gerät, welches gemountet werden soll geschrieben steht.

    10a. Zuerst wollen wir einen USB Bluetooth Stick mounten:

    Mount_USB_Bluetooth.xml (der Name ist frei wählbar, muss aber identisch mit dem Script von Step 6 sein!


    11. Öffnet diese XML Datei und fügt folgende Optionen hinzu:

    11a.

    Code
         <hostdev mode='subsystem' type='usb'>
            <source startupPolicy='optional'>
            <vendor id='0xAAAA'/>
            <product id='0xBBBB'/>
            </source>
         </hostdev>


    11b. "AAAA" und "BBBB" muss durch die jeweiligen Informationen aus Step 8b ersetzt werden!


    12. Bei mir ist es vorgekommen, dass zwei USB Sticks dieselbe vendor-id und product-id hatten, dann muss der XML-Datei Adresse hinzugefügt werden, dass schaut wie folgt aus:

    12a.

    Code
         <hostdev mode='subsystem' type='usb'>
            <source startupPolicy='optional'>
            <vendor id='0xAAAA'/>
            <product id='0xBBBB'/>
            <adress bus='X' device='Y'/> 
            </source>
         </hostdev>


    12b. "AAAA" und "BBBB" muss auch hier angepasst werden, außerdem muss auch noch "X" und "Y" durch Bus-Nummer und Device-Nummer aus "lsusb" angepasst werden!


    13. Für jedes USB Gerät, welches gemountet werden soll, muss eine extra .XML-Datei angelegt werden.

    Bei jeder Datei müssen die Informationen aus Step 10 angepasst werden Anhand der USB Informationen.



    Information:

    Auf diesem Weg ist es möglich mehr als die maximale Anzahl von 4 USB Geräten mit der VM-Ware zu verbinden!


    Da ich auf der VM mein SmartHome mit FHEM laufen habe, musste

    ich den Autostart von FHEM künstlich verzögern:


    1. Prüfen an welcher Stelle die "Virtualization Station" im Autostart ausgeführt wird.

    2. Starten der VM in der "Virtualization Station" ohne Verzögerung (hier kann man 0-600Sekunden Verzögerung einstellen!)

    3. Stopuhr starten um zu schauen, wie lange die VM braucht um hochgefahren zu sein

    4. Erst wenn die VM hochgefahren ist, darf das "autorun.sh" laufen, damit die USB Geräte gemountet werden können!

    5. Unter: "/etc/init.d/fhem" habe ich am Anfang ein "sleep 120" eingebaut um den Start von FHEM nach dem Start der VM um 120 Sekunden zu verzögern!


    Grund dafür war, dass FHEM ohne Verzögerung gestartet wurde, sobald die VM ready war, da zu diesem Zeitpunkt aber die USB Geräte noch nicht gemountet war, musste ich FHEM nach dem mounten per "shutdown restart" manuell neustarten, dass fällt jetzt weg!


    Gruß

    Mathze

  • Vielen Dank für die super Beschreibung! Bisher benötige ich es zwar nicht, aber vielleicht ist es irgendwann ja hilfreich.

  • Hallo Mathze,


    wow! Toll, dass Du diese ausführliche Beschreibung erstellt und gepostet hast. Ich habe ein ähnliches Problem, weiß aber nicht, ob da diese Vorgehensweise von Dir helfen würde:


    Ich habe einen Drucker, der nur selten in Betrieb ist. Nachdem ich diesen einschalte, muss ich diesen anschließend manuell in der Virtualization Station verbinden. Geht das nicht automatisch? Das läuft vermutlich - falls überhaupt möglich - auf ein Script hinaus, welches in Intervallen ständig versucht, diesen Drucker zu verbinden, nicht wahr? Wohl weniger ratsam und verursacht sicherlich irgendwo Error-Logs und Ressourcen-Probleme, wenn 365 Tage im Jahr jede Minute so ein Versuch unternommen wird...


    LG


    Lucas

  • Perfekte Anleitung.

    Genau das habe ich benötigt um mit einer VM mit node-red einen Zigbee USB Stick automatisch zu verbinden bei Restart.

    Das Qnap startet zwar nicht so oft neu, ist aber trotzdem sehr nervig.

    Verstehe nicht, warum sie das nicht konfigurierbar machen.

  • 2. zuerst muss einmal der Command "virsh" importiert werden.


    2a. export LD_LIBRARY_PATH=/QVS/usr/lib:/QVS/usr/lib64/

    2b. export PATH=$PATH:/QVS/usr/bin/:/QVS/usr/sbin/

    Hab' dazu eine Frage: Muss das jedesmal beim Neustart mit neuer FW angegeben werden? Bei mir war es gerade wieder weg. In anderem Zusammenhang arbeite ich mit einer autostart des NAS, dann müsste ich das wohl da einordnen. Steht ja da.


    Ach ja, die UUID bekommt man ja auch über die VS-Oberfläche in den Informationen angezeigt.

    3 Mal editiert, zuletzt von duke-f ()

  • Hallo Mathze

    ich habe Deine Anleitung gelesen, da ich genau vor dem gleichen Problem stehe. Eine Frage habe ich aber noch: Wo finde ich die autostart-Datei in der die Virtualisation Station gestartet wird? Ich habe das auf meiner qnap nicht gefunden. Ich hatte gedacht, es ist die qpkg.conf, aber da wird die Station offenbar nicht gestartet. Es gibt keinen Verweis auf die Virtualisation Station ...oder heisst die anders?


    Der Aufruf des Autorun-Script von Dir muss dann ja hinter den Start der VS gepackt werden, damit sichergestellt ist, dass die USB-Devices verbunden werden.


    Und die Verzögerung von fhem baust Du dann in der VM direkt auf der Debian-Ebene ein, richtig?


    Danke und Gruß,

    djhans

  • Jetzt habe ich wieder einen Fall, in dem mir diese Beschreibung sehr hilft:


    Ich habe schon immer das Problem, dass nach einigen mal verbinden und trennen externer Laufwerke über USB diese nicht mehr vernünftig eingebunden werden. Sie tauchen einfach nicht mehr irgendwo in den Komponenten des WI auf, bis das NAS schließlich komplett neu gestartet wird. Abhilfe habe ich zwar bisher nicht wirklich gefunden, aber Deine Beschreibung liefert für manche Situationen doch einen brauchbaren Workaround. Da das Anschließen und Trennen durchaus vom NAS erkannt wird (sehe ich per dmesg und lsusb) kann ich zumindest auf die beschriebene Weise auf eine externe Platte zugreifen.

  • Hallo zusammen


    ich hatte das gleiche Problem mit dem Startup der VM (Home Assistant mit USB Dongle). Mal hatte es funktioniert, und mal nicht mehr (weil das System aufgrund von mehr Apps langsamer wurde). Abhilfe könnte Installation auf SSD statt HD sein, für schnelleren Startup.


    Bei mir habe ich es so konfiguriert, dass das NAS um 5:30 am morgen startet und ich via cronjob (achtung /etc/config/crontab editieren und nicht mit crontab -e editieren, da es sonst immer wieder überschrieben wird durch QTS) mit folgendem Eintrag:

    0 6 * * * /QVS/usr/bin/virsh start 34e4bc13-e507-4bfa-b06a-xxxxxxxxx

    die UUID der VM kriegt man mit "sudo virsch list --all"


    Funktioniert einwandfrei - man könnte wohl auch einen regelmässigen Crontab aufsetzen, der gewisse Prüfungen macht (lsusb) und dann entsprechend die VM startet.


    Grüsse