Hyper-V und USB | Hyper-V Server Blog

Hyper-V und USB

usbWer öfters mit Hyper-V arbeitet, steht vielleicht oftmals vor dem Problem, Daten von einem USB-Stick auf eine virtuelle Maschine zu bekommen. Leider ist der Zugriff auf einen USB-Stick aus einer virtuellen Maschine, die über Hyper-V betrieben wird, nicht so einfach, bzw. nicht möglich. Dies liegt daran, dass der Hypervisor momentan keine Unterstützung für den Zugriff auf USB-Geräte bereitstellt, die physisch an den Host angeschlossen sind. Somit kann man dieses Problem nur mit Workarounds umgehen.

 

Möglichkeiten, dieses Problem zu umgehen, wären zum Beispiel:

Zugriff auf USB-Geräte über die Netzwerkschnittstelle mit sogenannten “USB-Device Servers”.

Zugriff über Lösungen, die mithilfe einer Bereitstellungssoftware auf dem Host und eines Clienten in der VM, den USB-Port virtuell zur Verfügung stellen. Vorteil dieses Verfahrens ist, dass es damit auch möglich sein soll, virtuelle Server mit Lizenz-Dongels zu betreiben.

Die dritte Lösung hat im Vergleich zu den vorig genannten einen entscheidenden Vorteil: Sie kostet kein Geld, dient aber auch “nur” dazu, Daten zu transportieren. In diesem Workaround möchte ich nun beschreiben, wie man Daten relativ einfach von einem USB-Stick auf eine virtuelle Maschine bekommt.

 

Ich beziehe mich hierbei auf ein Szenario, dass davon ausgeht, direkt am Hyper-V Host zu arbeiten.

imageZuerst benötigen wir eine virtuelle Festplatte, die als Zwischenspeicher für den Datentransfer zwischen USB-Stick und VM benötigt wird. Hierzu öffnet man den Hyper-V Manager und klickt oben rechts auf “Neu –> Festplatte”

Im Assistenten wählt man nun einen Festplattentyp aus, wobei ich in meiner Testumgebung “Dynamisch” genommen habe, da die Größe mit den Dateien variiert, die in ihr liegen. Den maximalen Speicherplatz habe ich auf 1Gb festgesetzt und sie mit dem Namen “vUSB-Stick.vhd” in D:\ gespeichert.

 

vhd-explorerNun öffnet man den Windows Explorer und findet in meinem Fall unter D:\ die erstellte virtuelle Festplatte, welche ab jetzt mein virtueller USB-Stick sein wird.

phys-StickAber ich möchte ja meine Daten von einem USB-Stick in die virtuelle Maschine transportieren. In diesem Beispiel soll eine Datei namens TEST.txt verschoben werden.

 

 

 

 

Die Datei wird nun erst einmal auf dem virtuellen USB Stick zwischengespeichert. Dazu muss dieser aber vorab in der Datenträgerverwaltung als virtueller Datenträger hinzugefügt werden: Start – Rechtsklick auf “Computer” – Verwaltung – Rechtsklick auf Datenträgerverwaltung – Virtuelle Festplatte anfügen. Im letzten Schritt wird sie noch auf “Online” geschaltet. Um dies aber nicht jedes Mal einstellen zu müssen, hat Ravikanth Chaganti in seinem Blog ein Script veröffentlicht, was diesen Vorgang erheblich vereinfacht. Das Script kann HIER heruntergeladen werden. Eine Voraussetzung für das Funktionieren ist die installierte Hyper-V Rolle.

Den Inhalt der Zip-Datei habe ich in meinem Testsystem in diesen Pfad entpackt: C:\Tools\vhdmount\

dateienEs befinden sich nun diese drei Dateien in dem Ordner, wovon HV-Reg.reg und vhdmount.vbs noch kurz bearbeitet werden müssen. Die HV-Reg.reg dient lediglich dazu, einen Eintrag im Kontextmenü beim Rechtsklick auf eine VHD-Datei zu Erstellen. Die vhdmount.vbs ist das eigentliche Script, was beim Mounten ausgeführt wird.

 

In der HV-Reg muss nun noch der Pfad zur vhdmount.vbs eingetragen werden. In meinem Testsystem sähe das dann so aus:

reg

Auch ist es nötig, den Pfad in der vhdmount.vbs in Zeile 28 zu ändern. Optional kann auch die Ziffer “1” hinter dem Pfad durch “0” ersetzt werden, damit das CMD Fenster, was sich beim Mounten öffnet, nicht sichtbar ist.

script

 

mountDamit ist die Konfiguration des Skriptes schon abgeschlossen und es kann mit der Ersteinrichtung des virtuellen Datenträgers weitergehen, wozu man mit der rechten Maustaste auf die vUSB-Stick klickt. Nun sieht man zu allererst zwei neue Einträge im Menü. Hier klickt man nun auf “Mount”, woraufhin die Meldung
“VHD Mounted Successfully”erscheint.

verwaltungLeider ist das Volume noch nicht im Windows Explorer verfügbar, weshalb man nun noch einmal die Datenträgerverwaltung aufsuchen muss.

 

 

 

 

volumeDort muss die virtuelle HDD initialisiert werden. Danach startet man den Assistenten zum erstellen eines neuen Volumes, Dieses neue Volume habe ich ebenfalls vUSB-Stick genannt.

 

 

 

 

 

vusb-explorerWenn man jetzt wieder den Windows Explorer öffnet, findet sich dort der virtuelle Datenträger und man kann die Dateien vom USB-Stick auf den vUSB-Stick übertragen. Nach dem Kopieren der Dateien, klickt man wieder auf die vUSB-Stick.vhd und geht auf “Dismount”, woraufhin die Platte aus dem Windows Explorer verschwunden ist.

 

 

scsiDamit ist der erste Teil geschafft und die Daten sind auf dem virtuellen Stick. Jetzt geht man wieder in den Hyper-V Manager, öffnet die Einstellungen einer beliebigen virtuellen Maschine und fügt im SCSI-Controller eine Festplatte hinzu. Wichtig ist, dass Sie dazu die Maschine NICHT ausschalten müssen!

 

 

vmIm der neu erschienen Einstellungsmaske können Sie nun unter “Datei für virtuelle Festplatte” den virtuellen Datenträger an dem jeweiligen Speicherort öffnen. Danach klicken Sie auf “Anwenden”, schließen die Einstellungen und öffnen die virtuelle Maschine. Wenn Sie den Datenträger im Windows Explorer sehen, dann wurde er automatisch online geschaltet und Sie können die Daten übertragen. Ansonsten müssen Sie ihn manuell online schalten. Um einfacher in die Datenträgerverwaltung zu kommen, können Sie sich auch eine neue Verknüpfung auf dem Desktop anlegen (“diskmgmt.msc”).

So, nun war es das bis hierhin. Jetzt können sie die Platte in den VM-Einstellungen entfernen und z.B.  mithilfe des Klickens auf “Mount” wieder auf dem Host zur Verfügung stellen und die Daten herauskopieren.

 

Was ist der Nutzen, dieser Methode?

Nun, Sie können diese virtuelle Platte jetzt dazu verwenden, Daten vom Host, bzw. zwischen virtuellen Maschinen hin und her zu transportieren, ohne ein virtuelles Netzwerk aufbauen oder die virtuellen Maschinen ausschalten zu müssen. Die virtuelle Platte kann zudem auch auf einem physischen USB-Stick transportiert werden, wobei dabei beachtet werden muss, dass es evtl. zu Fehlern kommen kann, wenn sie direkt vom Stick aus gemountet wird. Es ist zwar immer noch etwas mehr zu tun, als ein bloßes Anstecken des Sticks, aber ich finde, dass diese Methode akzeptabel ist, vor allem da das Skript den Aufwand doch erheblich herabsetzt.

Ich wünsche viel Spass beim Testen.

admin
 

  • Bartek sagt:

    Hallo,
    die Anleitung ist richtig gut und sie funktioniert auch fast so wie in der Beschreibung. Leider funktioniert bei mir das Hinzufügen der Festplatte in der VM im laufendem Betrieb unter Server 2008 nicht. Was mache ich falsch?
    Danke für die Hilfe!

  • Jan Kappen sagt:

    Hi,
    hast du auch den SCSI-Controller verwendet und nicht den IDE-Controller? Bei IDE funktioniert das Hot-Plug nämlich nicht…
    Gruß, Jan

  • Pjotr sagt:

    Möglicherweise hast Du die Virtuelle festplatte im Host noch nicht “Datached” ?

  • DigiP sagt:

    Moin, der 2008er ohne R2 unterstützt auf dem virtuellen SCSI Controller noch kein Hotplug. Erst der R2 ist da zu gebrauchen.

  • Jan Kappen sagt:

    Du hast natürlich recht, ich bin gedanklich irgendwie nicht mehr beim 2008er :)
    Gruß, Jan

  • Jens sagt:

    Ein ziemlicher Aufwand, wenn man bedenkt, dass man den Stick einfach mit einer Netzfreigabe zugänglich machen kann. Viel interessanter wäre meiner Meinung nach, die USB-Ports für andere Hardware als Massenspeicher freigeben zu können.

  • Bèla sagt:

    Ich habe es eben mal getestet, die Anleitung sind wirklich sehr gut.
    Wenn ich aber das Script verwenden, dann kommt immer die Fehlermeldung:
    Skrpit: D:Toolsvhdmount.vbs
    Zelle: 8
    Fehler: ungültige Klasse
    Code: 80041010
    Quelle: SWbemObjectSet

    Wo liegt mein Fehler? Ich hab eigentlich alles eingeben wie beschrieben, der Fehler kommt immer bei Mount und Dismount.

    Viele Grüße
    Béla

  • Jan Kappen sagt:

    Der Artikel ist mittlerweile von 2011, ich vermute es funktioniert mit den aktuellen Versionen einfach nicht mehr oder bringt, wie beschrieben, Fehler. Ich nutze mittlerweile den erweiterten Sitzungsmodus für sowas, das klappt super.
    Gruß, Jan

  • >