Die Virtualisierung ist ein mächtiges Werkzeug, das uns erlaubt, mehrere Betriebssysteme auf einer einzigen Hardware zu betreiben. Proxmox VE ist hierbei eine herausragende Open-Source-Lösung, die auf KVM und LXC basiert und sowohl für Heimanwender als auch für Unternehmen eine robuste Plattform bietet. Doch während viele Aspekte der Virtualisierung reibungslos funktionieren, stößt man oft auf eine vermeintliche Hürde: die USB-Durchreiche (USB Passthrough).
Geräte wie Drucker, Scanner, Software-Dongles, Sicherheits-Tokens oder sogar spezielle Industrie-Hardware müssen oft direkt in einer virtuellen Maschine (VM) verfügbar sein, als wären sie physisch an diese angeschlossen. Hier kommt die USB-Durchreiche ins Spiel. Viele Nutzer scheitern anfangs oder sind frustriert, wenn USB-Geräte in ihren VMs nicht zuverlässig erkannt werden. Dieser umfassende Guide beleuchtet die verschiedenen Methoden, Fallstricke und bewährte Praktiken, damit auch Sie die USB-Durchreiche in Proxmox garantiert erfolgreich meistern können!
Warum ist USB-Durchreiche so wichtig?
Der Bedarf an USB-Durchreiche entsteht, wenn ein virtuelles System eine direkte, exklusive Verbindung zu einem USB-Gerät benötigt. Standardmäßig virtualisiert Proxmox (bzw. KVM/QEMU) USB-Geräte nicht direkt; sie sind entweder für den Host reserviert oder werden überhaupt nicht gesehen. Die Durchreiche ermöglicht es der VM, das Gerät als ihr eigenes anzusehen und darauf zuzugreifen, als wäre es lokal angeschlossen. Häufige Anwendungsfälle sind:
- Spezialisierte Software-Dongles: Viele professionelle Anwendungen verwenden Hardware-Dongles zur Lizenzierung.
- Drucker und Scanner: Um die volle Funktionalität, oft mit proprietären Treibern, nutzen zu können.
- Sicherheits-Tokens (z.B. YubiKey): Für Zwei-Faktor-Authentifizierung (2FA) oder digitale Signaturen.
- Webcams und Mikrofone: Für Videokonferenzen in einer VM.
- Externe Speichermedien: USB-Sticks oder externe Festplatten, die direkt in einer VM benötigt werden.
- Industrie- oder Steuerungsgeräte: Spezielle Hardware, die über USB kommuniziert.
Ohne eine korrekte Durchreiche bleiben diese Geräte für die VM unsichtbar oder funktionieren nur eingeschränkt. Ziel ist es, dem Gastbetriebssystem eine möglichst „native” Erfahrung zu bieten.
Grundlagen: Wie Proxmox und USB-Geräte kommunizieren
Proxmox VE nutzt KVM (Kernel-based Virtual Machine) als Virtualisierungstechnologie und QEMU zur Hardware-Emulation. Wenn Sie ein USB-Gerät durchreichen möchten, instruieren Sie im Grunde QEMU, das Gerät nicht selbst zu emulieren oder zu verwalten, sondern den direkten Zugriff darauf an die virtuelle Maschine zu übergeben. Es gibt dabei zwei Hauptansätze:
- Geräte-basierte Durchreiche: Hier wird ein spezifisches USB-Gerät (identifiziert durch seine Vendor ID und Product ID) oder ein USB-Port an die VM weitergereicht. Dies ist die einfachere Methode für einzelne Geräte.
- Controller-basierte Durchreiche (PCI Passthrough): Dabei wird ein kompletter USB-Controller (z.B. eine USB 3.0 Erweiterungskarte oder ein onboard USB-Controller) an die VM übergeben. Dies ist die leistungsstärkere und robustere Methode, da die VM dann nativen Zugriff auf alle Ports dieses Controllers hat.
Beide Methoden haben ihre Vor- und Nachteile, die wir detailliert beleuchten werden.
Vorbereitung ist die halbe Miete: Dein Proxmox-Host
Bevor wir mit der eigentlichen Konfiguration beginnen, sind einige grundlegende Schritte auf Ihrem Proxmox-Host (dem physischen Server) unerlässlich. Diese Schritte bilden das Fundament für eine erfolgreiche USB-Durchreiche.
1. IOMMU aktivieren (für PCI Passthrough zwingend!)
Für die Durchreiche ganzer USB-Controller (Methode 2) ist die IOMMU (Input/Output Memory Management Unit)-Technologie zwingend erforderlich. Sie ermöglicht es dem Hypervisor, Hardware-Ressourcen direkt und isoliert an VMs zu übergeben. Ohne IOMMU ist PCI Passthrough nicht möglich. So aktivieren Sie sie:
- Im BIOS/UEFI: Suchen Sie nach Optionen wie „Intel VT-d” (für Intel CPUs) oder „AMD-Vi” / „AMD IOMMU” (für AMD CPUs) und aktivieren Sie diese. Die genaue Bezeichnung variiert je nach Mainboard-Hersteller.
- Im GRUB-Bootloader: Bearbeiten Sie die GRUB-Konfigurationsdatei.
nano /etc/default/grub
Suchen Sie die Zeile, die mit `GRUB_CMDLINE_LINUX_DEFAULT` beginnt, und fügen Sie hinzu:
- Für Intel: `intel_iommu=on`
- Für AMD: `amd_iommu=on`
Die Zeile könnte dann so aussehen:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
Nach dem Speichern die GRUB-Konfiguration aktualisieren und neu starten:
update-grub reboot
- Verifizierung: Nach dem Neustart überprüfen Sie, ob IOMMU aktiv ist:
dmesg | grep -e DMAR -e IOMMU
Sie sollten Ausgaben sehen, die auf die Aktivierung von IOMMU hinweisen, z.B. `DMAR: IOMMU enabled`.
2. Proxmox aktualisieren
Stellen Sie sicher, dass Ihr Proxmox-System auf dem neuesten Stand ist. Dies behebt Bugs und bietet die neuesten Features:
apt update && apt dist-upgrade -y
reboot
3. USB-Gerät/Controller identifizieren
Um ein spezifisches Gerät oder einen Controller durchzureichen, müssen Sie dessen IDs kennen. Verbinden Sie das USB-Gerät mit dem Proxmox-Host und nutzen Sie die folgenden Befehle:
- Für spezifische USB-Geräte:
lsusb
Die Ausgabe zeigt eine Liste der angeschlossenen USB-Geräte. Achten Sie auf die `Bus`- und `Device`-Nummern sowie auf die `ID` (Vendor ID:Product ID). Zum Beispiel: `Bus 001 Device 002: ID 046d:c077 Logitech, Inc. G403 Prodigy Gaming Mouse`. Hier wäre die Vendor ID `046d` und die Product ID `c077`.
- Für USB-Controller (PCI Passthrough):
lspci -nnk | grep -i usb
Dies listet alle PCI-Geräte auf, die „usb” im Namen haben, zusammen mit ihren Kernel-Treibern. Notieren Sie sich die PCI-ID (z.B. `00:14.0`) des Controllers, den Sie durchreichen möchten. Auch hier ist es wichtig, dass der Controller sich in einer eigenen IOMMU-Gruppe befindet. Das können Sie überprüfen mit:
find /sys/kernel/iommu_groups/ -type l
Schauen Sie, ob der gewünschte Controller alleine in einer Gruppe ist oder ob er sich andere Geräte teilt, die Sie nicht mit durchreichen wollen.
Methode 1: Spezifische USB-Geräte an eine VM durchreichen
Dies ist die einfachere und oft ausreichendere Methode für einzelne USB-Geräte.
Schritt-für-Schritt-Anleitung über die Proxmox GUI
- Wählen Sie die gewünschte VM im Proxmox Webinterface aus.
- Navigieren Sie zum Reiter „Hardware”.
- Klicken Sie auf „Hinzufügen” und wählen Sie „USB-Gerät”.
- Es erscheinen zwei Optionen:
- „USB Port verwenden”: Hier können Sie einen bestimmten physischen USB-Port des Proxmox-Hosts auswählen. Dies ist einfach, aber der Port kann sich nach einem Neustart des Hosts oder wenn andere USB-Geräte angeschlossen werden, ändern.
- „Hersteller-/Geräte-ID verwenden”: Dies ist die empfohlene Methode für spezifische Geräte. Wählen Sie hier die zuvor mit `lsusb` ermittelte `Vendor ID:Product ID` aus (z.B. `046d:c077`). Diese ID ist statisch und ändert sich nicht.
- Klicken Sie auf „Hinzufügen”.
- Starten Sie die VM neu (oder starten Sie sie, falls sie ausgeschaltet war).
Vorteile:
- Sehr einfach und schnell einzurichten.
- Keine IOMMU-Aktivierung notwendig.
Nachteile:
- Kann bei „USB Port verwenden” instabil sein, wenn sich die Zuordnung der Ports ändert.
- „Hersteller-/Geräte-ID verwenden” ist stabiler, aber das Gerät muss immer an den Host angeschlossen sein, bevor die VM startet oder während die VM läuft, damit es erkannt wird.
- Nicht ideal für Hochgeschwindigkeits-USB-Controller oder Geräte, die empfindlich auf Latenz reagieren.
- Unterstützt keine USB-Hubs innerhalb der VM.
Methode 2: Den gesamten USB-Controller per PCI Passthrough durchreichen
Diese Methode ist leistungsstärker, robuster und bietet der VM eine native Kontrolle über den gesamten USB-Controller. Sie ist ideal für USB 3.0/3.1/3.2 Geräte, USB-Hubs oder wenn Sie viele USB-Geräte an einer VM betreiben möchten.
Voraussetzungen:
- IOMMU ist aktiv! (Siehe „Vorbereitung” oben).
- Der USB-Controller muss sich in einer separaten IOMMU-Gruppe befinden. Ist dies nicht der Fall, und der Controller teilt sich eine Gruppe mit anderen essentiellen Geräten (z.B. einer Grafikkarte), kann es zu Problemen kommen oder ein Passthrough ist ohne fortgeschrittene Tweaks (ACS Override, was Risiken birgt) nicht möglich. In solchen Fällen ist der Kauf einer dedizierten PCI-USB-Erweiterungskarte, die in einer eigenen IOMMU-Gruppe landet, oft die einfachste Lösung.
Schritt-für-Schritt-Anleitung:
- Identifizieren des USB-Controllers:
Nutzen Sie `lspci -nnk | grep -i usb` um die PCI-ID des Controllers zu finden. Beispiel: `00:14.0 USB controller: Intel Corporation Comet Lake PCH-V USB 3.1 xHCI Host Controller (rev 00)`. Die ID ist `00:14.0`. - Treiber des Controllers im Host blockieren:
Damit der Proxmox-Host den Controller freigibt, muss sein Kernel-Treiber (z.B. `xhci_hcd`) im Host Blacklistet werden.echo "blacklist xhci_hcd" >> /etc/modprobe.d/blacklist.conf update-initramfs -u -k all reboot
Nach dem Neustart sollte `lspci -nnk | grep -i usb` für diesen Controller keine `Kernel driver in use` mehr anzeigen. (Achtung: Blacklisten Sie nur den Treiber des Controllers, den Sie durchreichen wollen. Wenn Sie einen Onboard-Controller durchreichen, der auch die Maus/Tastatur des Hosts bedient, kann der Host nach dem Neustart keine USB-Geräte mehr nutzen! Planen Sie dies entsprechend, z.B. mit einer IPMI- oder KVM-Konsole.)
- Hinzufügen des PCI-Geräts zur VM:
Über die Proxmox GUI:
- Wählen Sie die VM aus, gehen Sie zu „Hardware”, „Hinzufügen” und wählen Sie „PCI Gerät”.
- Wählen Sie den gewünschten USB-Controller aus der Liste. Die PCI-ID wird angezeigt.
- Wählen Sie optional „Alle Funktionen” und „Primäre GPU” (falls es ein Grafikcontroller ist, was hier nicht der Fall ist).
- Wichtig: Aktivieren Sie die Option „RomBar” und setzen Sie „PCI-Express” (falls die VM OVMF/UEFI verwendet) auf „Ja”.
- Klicken Sie auf „Hinzufügen”.
Über die Kommandozeile (für VMID 100 und PCI-ID 00:14.0):
qm set 100 -hostpci0 00:14.0
Für komplexere Szenarien mit PCIe und RomBar:
qm set 100 -hostpci0 00:14.0,pcie=1,x-vga=1
(Der Parameter `x-vga=1` ist für Grafikkarten relevant, kann aber bei einigen USB-Controllern, die auch Display-Funktionen haben, hilfreich sein.)
- VM starten:
Starten Sie die VM. Der USB-Controller sollte nun im Gastsystem als natives Hardware-Gerät erscheinen. Installieren Sie ggf. die entsprechenden Treiber im Gastsystem.
Vorteile:
- Robustheit und Performance: Die VM hat nativen Zugriff auf den Controller, was maximale Geschwindigkeit und Stabilität bietet.
- Plug-and-Play im Gast: USB-Geräte können direkt an die Ports des durchgereichten Controllers angeschlossen werden und werden sofort im Gastsystem erkannt.
- Unterstützt USB-Hubs innerhalb der VM.
Nachteile:
- Komplexere Einrichtung, erfordert IOMMU.
- Der Controller steht dem Proxmox-Host nicht mehr zur Verfügung.
- Kann problematisch sein, wenn der Controller in einer IOMMU-Gruppe mit anderen nicht durchzureichenden Geräten liegt.
Häufige Probleme und ihre Lösungen
Auch mit bester Vorbereitung kann es zu Stolpersteinen kommen. Hier sind die häufigsten Probleme und wie man sie löst:
- Problem: IOMMU nicht aktiv oder IOMMU-Gruppen ungünstig.
- Lösung: Überprüfen Sie BIOS/UEFI und GRUB-Einstellungen (siehe Vorbereitung). Ist ein Controller in einer ungünstigen IOMMU-Gruppe, hilft manchmal der Kauf einer günstigen dedizierten USB-PCIe-Karte, die oft in einer eigenen Gruppe landet.
- Problem: USB-Gerät wird in der VM nicht erkannt (Methode 1).
- Lösung: Überprüfen Sie, ob das Gerät am Host mit `lsusb` sichtbar ist. Ist die Vendor/Product ID korrekt in der VM-Konfiguration? Starten Sie die VM neu. Manchmal hilft es, das Gerät nach dem Start der VM kurz ab- und wieder anzustecken.
- Problem: PCI Passthrough Fehler (z.B. „Error 43” in Windows VM für Grafikkarte, aber auch bei USB-Controllern).
- Lösung: Dieses Problem tritt oft auf, wenn das Gastsystem (insbesondere Windows) erkennt, dass es in einer virtuellen Umgebung läuft.
- Stellen Sie sicher, dass „RomBar” in den PCI-Einstellungen der VM aktiviert ist.
- Fügen Sie der VM-Konfiguration (über CLI `qm set -args ‘-cpu host,hidden=1’`) den Parameter `hidden=1` hinzu. Dies lässt die VM glauben, sie sei auf physischer Hardware.
- Versuchen Sie, die VM mit OVMF (UEFI) anstelle von SeaBIOS zu starten.
- Überprüfen Sie, ob `pcie=1` in der PCI-Gerätekonfiguration gesetzt ist, wenn Ihre VM UEFI verwendet.
- Lösung: Dieses Problem tritt oft auf, wenn das Gastsystem (insbesondere Windows) erkennt, dass es in einer virtuellen Umgebung läuft.
- Problem: Gerät funktioniert, aber sehr langsam oder instabil.
- Lösung: Überprüfen Sie die USB-Version (USB 2.0 vs. USB 3.0). Ist der richtige Treiber im Gastsystem installiert? Sind die USB-Geräte an einem USB 3.0 Controller angeschlossen, wenn dieser durchgereicht wird? Bei Methode 1 kann dies auf eine Überlastung der emulierten USB-Schnittstelle hindeuten, hier ist PCI Passthrough die bessere Wahl.
- Problem: Controller wird nach Passthrough in der VM nicht angezeigt oder Treiberfehler.
- Lösung: Stellen Sie sicher, dass Sie den Treiber des Controllers im Host tatsächlich geblacklistet und `update-initramfs` ausgeführt haben. Im Gastsystem müssen die richtigen Treiber für den Controller installiert sein. Bei Windows VMs kann das Windows Update dies oft automatisch erledigen, andernfalls suchen Sie die Treiber des Mainboard- oder USB-Controller-Herstellers.
Best Practices und Empfehlungen
Um die Erfolgschancen zu maximieren und zukünftige Probleme zu vermeiden, beachten Sie diese Empfehlungen:
- PCI Passthrough bevorzugen: Wenn es die Hardware zulässt und Sie einen Controller ausschließlich für VMs benötigen, ist die Durchreiche des gesamten Controllers die zuverlässigste und leistungsfähigste Lösung.
- Qualität zählt: Investieren Sie bei Bedarf in eine separate, hochwertige USB-PCIe-Erweiterungskarte. Diese neigen dazu, besser mit IOMMU zu funktionieren.
- Host-Kernel aktuell halten: Regelmäßige Updates des Proxmox-Systems sorgen für die neuesten Bugfixes und Hardware-Unterstützung.
- Schritt für Schritt testen: Nehmen Sie immer nur eine Änderung vor und testen Sie diese, bevor Sie die nächste Konfiguration anpassen.
- Dokumentieren: Notieren Sie sich, welche Befehle Sie ausgeführt haben und welche Konfigurationen funktioniert haben. Das spart Zeit bei zukünftigen Problemen oder Neuinstallationen.
- VM-Snapshots: Erstellen Sie vor größeren Änderungen an der VM-Hardwarekonfiguration immer einen Snapshot. So können Sie bei Problemen schnell zum letzten funktionierenden Zustand zurückkehren.
- Geduld: Das Einrichten von PCI Passthrough kann manchmal eine knifflige Angelegenheit sein, die mehrere Anläufe erfordert. Bleiben Sie geduldig und arbeiten Sie die Schritte systematisch ab.
Fazit
Die USB-Durchreiche in Proxmox ist kein Hexenwerk, sondern eine Frage des Verständnisses der zugrunde liegenden Mechanismen und der systematischen Fehlerbehebung. Ob Sie nun ein einzelnes Gerät per ID durchreichen oder einen ganzen USB-Controller per PCI Passthrough übergeben – mit den in diesem Guide beschriebenen Schritten und Best Practices können Sie die Komplexität meistern und Ihre virtuellen Maschinen um essentielle Hardware-Funktionen erweitern.
Denken Sie daran: Die Vorbereitung Ihres Hosts, insbesondere die Aktivierung von IOMMU, ist der Schlüssel zum Erfolg beim PCI Passthrough. Mit etwas Geduld und der richtigen Herangehensweise werden Ihre USB-Geräte in Ihren Proxmox-VMs garantiert reibungslos funktionieren. Viel Erfolg beim Virtualisieren!