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
    1.      <hostdev mode='subsystem' type='usb'>
    2.         <source startupPolicy='optional'>
    3.         <vendor id='0xAAAA'/>
    4.         <product id='0xBBBB'/>
    5.         </source>
    6.      </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
    1.      <hostdev mode='subsystem' type='usb'>
    2.         <source startupPolicy='optional'>
    3.         <vendor id='0xAAAA'/>
    4.         <product id='0xBBBB'/>
    5.         <adress bus='X' device='Y'/> 
    6.         </source>
    7.      </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