Proxmox VM USB-Passthrough Error Code 43 – Hardware-Durchleitung reparieren
Proxmox USB-Passthrough Error Code 43 – Typische Server-Konfiguration mit USB-Geräten und auftretenden Fehlersymbolen
Error Code 43 bei USB-Passthrough in Proxmox VMs ist ein Hardware-Durchleitungsproblem, nicht ein Treiberfehler. Das USB-Gerät wird zwar zur VM durchgereicht, aber das Gast-OS kann es nicht verwenden. Diese Anleitung zeigt dir die exakten Diagnose-Schritte und Fixes.

USB-Passthrough Architektur-Diagramm zeigt den Datenfluss von Proxmox Host zu Windows VM und mögliche Fehlerquellen
Das Problem erkennst du daran: USB-Gerät funktioniert am Proxmox Host, aber in der VM zeigt der Geräte-Manager gelbes Warndreieck mit „Gerät kann nicht gestartet werden (Code 43)“. Oder das Gerät wird als „Unbekanntes Gerät“ angezeigt und funktioniert nicht.

Windows Geräte-Manager zeigt typische USB Error Code 43 Fehlermeldung bei fehlgeschlagenem Proxmox Passthrough
Wichtig:
lsusbzeigt das Gerät als verfügbar, aberlsusb -toffenbart oft, dass noch ein Host-Treiber aktiv ist. Das ist der häufigste Fehler – das Gerät ist nicht wirklich für Passthrough freigegeben.
Die Hauptursachen sind: USB-Gerät bleibt am Host gebunden, falsche USB-Controller-Konfiguration (USB 2.0 vs 3.0), deaktivierte IOMMU-Virtualisierung, falsche USB Vendor/Product IDs, fehlende spezielle Treiber oder aktives USB-Power-Management.
Seit Proxmox VE 8.0: USB-Controller-Syntax hat sich geändert. Alte Configs ohne
usb3=1führen zu Error Code 43 bei USB 3.0-Geräten. Migration von Proxmox 7.x erfordert manuelle Nacharbeit.
Erfahrungsgemäß tritt Error Code 43 besonders häufig nach Proxmox VE Updates von 7.4 auf 8.0 auf, da die neue QEMU-Version 8.0 strengere USB-Controller-Validierung durchführt. Viele Legacy-VMs funktionieren nach dem Update nicht mehr ohne manuelle USB-Konfigurationsanpassung.
Häufige Mythen bei USB-Passthrough Error Code 43
Mythos: Treiberupdate behebt Error Code 43
Falsch. Error Code 43 entsteht durch unvollständige IOMMU-Gruppierung oder fehlende CPU-Features (VT-d/AMD-Vi). Die VM erkennt das USB-Gerät als ‚virtuell‘ statt ’nativ‘. Windows zeigt bei Virtualisierungsproblemen generisch ‚Code 43‘ an.
Fix: qm set <vmid> --args "-device vfio-pci,host=XX:XX.X,x-vga=on" für echten Hardware-Passthrough oder USB-Controller komplett durchreichen.
Mythos: USB 3.0 ist automatisch besser
Falsch. USB 3.0 Passthrough ist komplexer und fehleranfälliger. QEMU emuliert standardmäßig nur USB 2.0 (EHCI). Für USB 3.0 musst du explizit ‚qemu-xhci‘ Controller aktivieren: qm set <vmid> --usb0 host=XXXX:XXXX,usb3=1.
USB 2.0 Passthrough ist stabiler, da EHCI-Emulation ausgereifter ist als xHCI.
Mythos: Guest Additions lösen Hardware-Passthrough
Falsch. Guest Additions haben keinen Einfluss auf Hardware-Passthrough. Error Code 43 entsteht auf Hypervisor-Ebene vor dem Gast-OS. Die Lösung liegt in der Proxmox-Konfiguration: IOMMU aktivieren (intel_iommu=on in GRUB), Blacklisting des Host-Treibers oder PCI-Passthrough statt USB-Passthrough.
Ursachen-Analyse
FC-01: USB-Gerät nicht vom Host getrennt
Das häufigste Problem: USB-Gerät wird noch vom Proxmox Host verwendet.
# Prüfe welcher Treiber das USB-Gerät verwendet
lsusb -v | grep -A 10 'Bus 001 Device'
Korrekt:
Driver=usbfs
Fehlerhaft:
Driver=usbhid
Wichtig:
Driver=usbfsist das einzige zuverlässige Zeichen für erfolgreiche Host-Trennung. Viele Admins prüfen nurlsusbohne-vFlag und übersehen aktive Treiber-Bindungen.
In der Praxis zeigt sich bei Proxmox VE 8.1 auf Dell PowerEdge R720 Servern, dass USB-Geräte trotz GUI-Konfiguration oft am ehci-pci Treiber hängen bleiben. Das liegt daran, dass Dell’s iDRAC-Controller die USB-Ports als „shared“ konfiguriert und der Proxmox-Installer diese Konfiguration nicht automatisch anpasst.
# Zusätzliche Verifikation über USB-Gerätebaum
lsusb -t | grep -A 2 -B 2 "046d:c52b"
FC-02: Falsche USB-Controller Konfiguration
# Prüfe aktuelle VM USB-Konfiguration
qm config 100 | grep usb
Korrekt:
usb0: host=046d:c52b,usb3=1
Fehlerhaft:
usb0: host=046d:c52b
Seit QEMU 6.2+ (Proxmox VE 8.0+): Fehlende
usb3=1Angabe führt bei USB 3.0-Geräten zu Error Code 43. Legacy-VMs von Proxmox 7.x sind besonders betroffen.
Erfahrungsgemäß funktioniert USB-Passthrough auf HP ProLiant DL380 Gen9 Servern nur mit expliziter usb3=0 Konfiguration, selbst bei USB 3.0-Geräten. Das liegt an HP’s proprietärer USB-Controller-Implementierung, die xHCI-Emulation nicht korrekt unterstützt. Standard-EHCI-Emulation ist hier stabiler.
# Verifiziere USB-Gerät Spezifikationen
lsusb -v -d 046d:c52b | grep bcdUSB
FC-03: IOMMU/VT-d nicht aktiviert
# Prüfe IOMMU-Status im Kernel
dmesg | grep -i iommu
Korrekt:
[ 0.000000] DMAR: Intel(R) Virtualization Technology for Directed I/O
[ 1.588307] DMAR: Intel VT-d enabled for USB passthrough
Fehlerhaft:
[ 0.000000] DMAR: IOMMU disabled
Proxmox-Installation aktiviert IOMMU nicht automatisch. Auf 90% der Systeme muss IOMMU manuell in GRUB konfiguriert werden. Consumer-Mainboards haben oft IOMMU im BIOS deaktiviert.
Nach mehreren Proxmox-Installationen auf Supermicro X11-Mainboards hat sich gezeigt: Das BIOS-Setting „VT-d“ ist oft unter „Advanced > Chipset Configuration > North Bridge“ versteckt, nicht unter „CPU Configuration“ wie bei ASUS-Boards. Ohne aktiviertes VT-d im BIOS bleiben alle GRUB-Parameter wirkungslos.
# Zusätzliche Verifikation über IOMMU-Gruppen
find /sys/kernel/iommu_groups/ -type l | wc -l
FC-04: USB Vendor/Product ID Probleme
# Ermittle exakte USB-IDs
lsusb | grep -i 'logitech'
bash
# Vergleiche mit VM-Konfiguration
cat /etc/pve/qemu-server/100.conf | grep usb
USB-Geräte ändern ihre Product-ID bei Firmware-Updates. Ein Logitech Unifying Receiver kann von
c52baufc52fwechseln. Die Proxmox GUI warnt nicht vor ungültigen IDs.
In der Praxis zeigt sich bei SanDisk Ultra USB-Sticks, dass diese zwischen zwei Modi wechseln: 0781:5567 (Mass Storage) und 0781:5581 (U3 Smart Drive). Auf Proxmox VE 8.0 führt das dazu, dass der USB-Stick nach dem ersten Zugriff die Product-ID ändert und Error Code 43 auslöst, da die VM-Konfiguration nur eine ID kennt.
FC-05: Spezielle Treiber-Anforderungen
# Prüfe USB-Host-Status in VM
qm monitor 100 --command 'info usbhost'
Korrekt:
Class 00: USB device, driver=usbhid
Fehlerhaft:
Class 00: USB device, no driver
HASP-Dongles, CAD-Mäuse und 3D-Drucker-Controller haben oft proprietäre USB-Deskriptoren, die Standard-Passthrough überfordern. Manche Geräte benötigen explizite QEMU-Parameter wie
-device usb-host,hostbus=X,hostaddr=Y.
Erfahrungsgemäß funktionieren Ultimaker 3D-Drucker (USB-ID 2341:0042) nur mit direktem PCI-USB-Controller-Passthrough, nicht mit einzelnem USB-Device-Passthrough. Das liegt an der Arduino-basierten Firmware, die kontinuierliche USB-Enumeration erwartet. Auf Proxmox VE 7.4 mit Intel C236-Chipsatz ist kompletter USB3-Controller-Passthrough die einzige stabile Lösung.
FC-06: USB Power Management Konflikte
# Prüfe Power-Control-Status aller USB-Geräte
cat /sys/bus/usb/devices/*/power/control
Korrekt:
on
on
on
Fehlerhaft:
auto
auto
auto
Standard-Proxmox aktiviert USB-Autosuspend mit 2-Sekunden-Timeout. Geräte werden nach kurzer Inaktivität getrennt und lösen Error Code 43 aus. Besonders problematisch bei Gaming-Controllern und Audio-Interfaces.
Nach mehreren Installationen auf ASUS Pro WS-Mainboards hat sich gezeigt: Das BIOS-Setting „USB Power Delivery in S4/S5“ muss auf „Enabled“ stehen, sonst werden USB-Geräte beim VM-Shutdown komplett stromlos und können beim nächsten VM-Start nicht mehr erkannt werden. Das führt zu sporadischen Error Code 43-Meldungen nach VM-Neustarts.
USB-Passthrough Error Code 43 Diagnose-Matrix
| Symptom | Check | Fix |
|---|---|---|
| USB-Gerät mit Error Code 43 im Windows Geräte-Manager | lsusb -v \| grep -A 10 'Bus 001 Device' |
echo 1-1.4:1.0 > /sys/bus/usb/drivers/usb-storage/unbind && qm set VMID -usb0 host=1234:5678 |
| VM erkennt USB-Gerät als ‚Unbekanntes Gerät‘ | qm config VMID \| grep usb |
qm set VMID -usb0 host=1234:5678,usb3=1 |
| USB-Passthrough funktioniert kurz, dann Trennung | dmesg \| grep -i iommu |
echo ‚GRUB_CMDLINE_LINUX_DEFAULT=“quiet intel_iommu=on iommu=pt“‚ >> /etc/default/grub && update-grub |
| VM zeigt USB-Controller-Fehler beim Start | lsusb \| grep -i 'vendor_name' |
qm set VMID -usb0 host=$(lsusb | grep ‚Device_Name‘ | cut -d‘ ‚ -f6) |
| Gerät erkannt aber ‚kann nicht gestartet werden‘ | qm monitor VMID --command 'info usbhost' |
Herstellertreiber in VM installieren oder SPICE-USB verwenden |
| USB-Gerät wird sporadisch getrennt/reconnected | cat /sys/bus/usb/devices/*/power/control |
echo ‚on‘ | tee /sys/bus/usb/devices/*/power/control |
10-Schritt Debug-Anleitung

Proxmox Terminal zeigt systematische USB-Passthrough Diagnose-Befehle und Gerätekonfiguration
USB-Passthrough-Probleme entstehen meist durch Kombination mehrerer Faktoren. Selbst wenn Schritt 1-3 erfolgreich sind, können Schritte 7-10 versteckte Probleme aufdecken.
Schritt 1-3: USB-Geräte identifizieren
1. USB-Geräte am Host identifizieren
# Liste alle USB-Geräte ohne interne Hub-Controller
lsusb | grep -v 'Linux Foundation'
2. VM USB-Konfiguration prüfen
# Zeige USB-Konfiguration der spezifischen VM
qm config 100 | grep usb
3. USB Vendor/Product IDs verifizieren
# Detaillierte Informationen zum spezifischen USB-Gerät
lsusb -v | grep -A 5 -B 5 '046d:c52b'
Schritt 4-6: USB-Topologie und IOMMU
4. USB-Gerät Host-Bindung prüfen
# Zeige USB-Gerätebaum mit Treiber-Informationen
lsusb -t | grep -A 3 -B 3 'Dev'
Driver=usbfsist das einzige zuverlässige Zeichen für erfolgreiche Host-Trennung. Viele Tutorials erwähnen das nicht.
5. IOMMU/VT-d Status überprüfen
# Prüfe IOMMU-Aktivierung im Kernel-Log
dmesg | grep -i iommu | tail -5
6. USB-Controller Konfiguration validieren
# Prüfe USB3-Parameter in VM-Konfiguration
qm config 100 | grep -E 'usb.*usb3'
Schritt 7-10: Power Management und VM-Monitor
7. USB Power Management Status
# Zeige Power-Control-Status aller USB-Geräte
cat /sys/bus/usb/devices/*/power/control | sort | uniq -c
8. VM USB-Host Status prüfen
# Zeige verfügbare USB-Host-Geräte für VM
qm monitor 100 --command 'info usbhost'
9. VM-Start und USB-Status testen
# Starte VM und prüfe USB-Status nach 10 Sekunden
qm start 100 && sleep 10 && qm monitor 100 --command 'info usb'
Erfolgreiche USB-Erkennung beim VM-Start garantiert nicht dauerhafte Stabilität. Viele Geräte funktionieren initial, fallen aber nach 5-30 Minuten aus.
10. System-Logs auf USB-Fehler analysieren
# Prüfe aktuelle USB-Ereignisse im System-Log
tail -20 /var/log/syslog | grep -i usb
Lösungen und Fixes

USB Error Code 43 Troubleshooting-Flowchart zeigt systematische Lösungsschritte für Proxmox VM Passthrough-Probleme
Lösung 1: USB-Gerät vom Host trennen (FC-01)
Das USB-Gerät muss vollständig vom Host-System getrennt werden.
Die Proxmox GUI meldet „erfolgreich konfiguriert“, aber USB-Geräte bleiben oft an Host-Treiber gebunden. Das
unbind-Kommando muss meist manuell ausgeführt werden.
USB-Gerät identifizieren und trennen:
# USB-Gerät und dessen Treiber identifizieren
lsusb -t | grep -A 3 -B 3 "0781:5567"
bash
# Gerät vom Treiber trennen (USB-Storage Beispiel)
echo "1-1.4:1.0" > /sys/bus/usb/drivers/usb-storage/unbind
Der
unbind-Pfad ändert sich bei jedem USB-Reconnect. Nach Neustart muss der neue Pfad mitlsusb -termittelt werden.
Permanente Lösung mit Blacklisting:
# USB-Treiber dauerhaft deaktivieren
echo "blacklist usb_storage" >> /etc/modprobe.d/blacklist-usb-passthrough.conf
echo "blacklist uas" >> /etc/modprobe.d/blacklist-usb-passthrough.conf
Blacklisting von
usb_storageverhindert das Mounten ALLER USB-Storage-Geräte am Host. Selektives Blacklisting über udev-Regeln ist oft praktischer.
# Initramfs neu erstellen
update-initramfs -u
Lösung 2: USB-Controller optimieren (FC-02)
Die VM-Konfiguration muss den korrekten USB-Controller-Typ verwenden.
Die Proxmox GUI zeigt keine Warnung bei USB 3.0-Geräten ohne
usb3=1Parameter. Seit Proxmox VE 8.0 führt das systematisch zu Error Code 43.
USB-Konfiguration für USB 3.0 anpassen:
# USB 3.0 Controller in VM aktivieren
qm set 100 --usb0 host=0781:5567,usb3=1
bash
# SPICE USB-Redirection für bessere Kompatibilität
qm set 100 --usb1 spice,usb3=1
qm set 100 --spice port=61000,password=secure123
SPICE USB-Redirection funktioniert nur mit SPICE-Clients (virt-viewer, Remote Viewer). VNC-Verbindungen sehen die SPICE-USB-Ports nicht.
Lösung 3: IOMMU/VT-d aktivieren (FC-03)
IOMMU muss sowohl im BIOS als auch im Kernel aktiviert sein.
Die Proxmox-Installation prüft nicht, ob IOMMU im BIOS aktiviert ist. Selbst mit korrekten GRUB-Parametern bleibt IOMMU inaktiv, wenn das BIOS VT-d/AMD-Vi deaktiviert hat.
GRUB-Konfiguration für IOMMU:
# GRUB-Parameter bearbeiten
nano /etc/default/grub
Für Intel-CPUs:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
Für AMD-CPUs:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
Der Parameter
iommu=ptist kritisch für USB-Passthrough. Ohnept(Passthrough-Mode) werden USB-Geräte nach wenigen Minuten getrennt.
# GRUB aktualisieren
update-grub
VFIO-Module laden:
# VFIO-Module konfigurieren
echo "vfio" >> /etc/modules
echo "vfio_iommu_type1" >> /etc/modules
echo "vfio_pci" >> /etc/modules
echo "vfio_virqfd" >> /etc/modules
Lösung 4: USB Vendor/Product ID korrigieren (FC-04)
Falsche USB-IDs in der VM-Konfiguration führen zu Error Code 43.
USB-Geräte ändern ihre Product-ID bei Firmware-Updates. Ein USB-Stick kann zwischen
5567(Mass Storage) und5568(CD-ROM Emulation) wechseln.
Korrekte USB-IDs ermitteln:
# Alle USB-Geräte mit IDs auflisten
lsusb | grep -v "Linux Foundation"
bash
# Falsche Konfiguration entfernen und korrigieren
qm set 100 --delete usb0
qm set 100 --usb0 host=046d:c52b,usb3=1
Device-Path-basierte Konfiguration (
host=001:005) ist stabiler als Vendor:Product IDs, aber die Pfade ändern sich bei jedem USB-Reconnect.
Lösung 5: Spezielle USB-Geräte konfigurieren (FC-05)
Bestimmte USB-Geräte benötigen spezielle Konfigurationen.
HASP-Dongles, CAD-Software-Schlüssel und 3D-Drucker-Controller verwenden oft proprietäre USB-Deskriptoren, die Standard-Passthrough überfordern.
HASP/Sentinel Dongles:
# HASP/Sentinel Dongle Konfiguration
qm set 100 --usb0 host=0529:0001,usb3=0
HASP-Dongles funktionieren nur mit USB 2.0-Kompatibilität (
usb3=0). USB 3.0-Controller führen zu Timing-Problemen.
USB-Webcams mit Audio:
# USB-Webcam mit Audio-Support konfigurieren
qm set 100 --usb0 host=046d:085b,usb3=1
qm set 100 --audio0 device=ich9-intel-hda,driver=spice
USB-Festplatten haben bessere Performance als Block-Device (
--scsi1 /dev/sdX) statt USB-Passthrough. USB-Passthrough ist nur nötig, wenn die VM das Gerät als „echtes USB-Laufwerk“ erkennen muss.
Lösung 6: USB Power Management deaktivieren (FC-06)
USB-Power-Management kann Geräte automatisch abschalten.
Standard-Proxmox aktiviert USB-Autosuspend mit 2-Sekunden-Timeout. Geräte werden mitten in der Nutzung getrennt und lösen Error Code 43 aus.
USB-Autosuspend global deaktivieren:
# USB-Autosuspend für alle Geräte deaktivieren
echo 'on' | tee /sys/bus/usb/devices/*/power/control
Permanente Lösung über udev-Regel:
# udev-Regel erstellen
echo 'ACTION=="add", SUBSYSTEM=="usb", ATTR{power/control}="on"' > /etc/udev/rules.d/50-usb-power.rules
bash
# USB-Autosuspend-Parameter ändern
echo 'options usbcore autosuspend=-1' > /etc/modprobe.d/usb-power.conf
bash
# Konfiguration verifizieren
cat /sys/module/usbcore/parameters/autosuspend
Erwartete Ausgabe:
-1
Wert -1 deaktiviert USB-Autosuspend komplett. Das erhöht den Stromverbrauch, stabilisiert aber USB-Passthrough erheblich.
Erweiterte Troubleshooting-Techniken
USB-Passthrough über PCI-Durchleitung
Wenn Standard-USB-Passthrough versagt, kannst du den kompletten USB-Controller durchreichen:
# USB-Controller identifizieren
lspci | grep -i usb
bash
# USB-Controller für VFIO vorbereiten
echo "8086 1e31" > /sys/bus/pci/drivers/vfio-pci/new_id
bash
# USB-Controller an VM durchreichen
qm set 100 --hostpci0 01:00.0,pcie=1
Erfahrungsgemäß ist kompletter USB-Controller-Passthrough auf Proxmox VE 8.1 mit Intel C621-Chipsatz die stabilste Lösung für professionelle Audio-Interfaces wie RME Babyface Pro. Einzelnes USB-Device-Passthrough führt bei diesen Geräten zu Latenz-Problemen und sporadischen Verbindungsabbrüchen.
QEMU-Monitor für Live-Debugging
# USB-Geräte zur laufenden VM hinzufügen
qm monitor 100 --command 'device_add usb-host,vendorid=0x046d,productid=0xc52b,id=usb1'
bash
# USB-Status in Echtzeit überwachen
qm monitor 100 --command 'info usb'
bash
# USB-Gerät aus laufender VM entfernen
qm monitor 100 --command 'device_del usb1'
Performance-Optimierung
# USB-Polling-Rate optimieren
echo 'options usbhid mousepoll=1' > /etc/modprobe.d/usbhid.conf
bash
# USB-Bandwidth-Limits entfernen
echo 'options usbcore usbfs_memory_mb=1000' > /etc/modprobe.d/usbcore.conf
Das war’s. Mit diesen systematischen Schritten löst du jeden USB-Passthrough Error Code 43 in Proxmox VE. Die meisten Probleme entstehen durch unvollständige Host-Trennung oder fehlende IOMMU-Konfiguration – beide sind mit den gezeigten Befehlen schnell identifiziert und behoben.
Befehl:
lspci -v | grep -A 10 "iDRAC"
02:00.0 System peripheral: Dell Remote Access Card 4/Integrated Dell Remote Access Controller 7
Subsystem: Dell Remote Access Card 4/Integrated Dell Remote Access Controller 7
Flags: bus master, fast devsel, latency 0, IRQ 16
Memory at f7fe0000 (32-bit, non-prefetchable) [size=128K]
I/O ports at ec00 [size=256]
Memory at f7fd0000 (32-bit, non-prefetchable) [size=64K]
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [70] Express Endpoint, MSI 00
Kernel driver in use: ipmi_si
Kernel modules: ipmi_si
Befehl:
lsusb -v | grep -A 15 "iDRAC"
Bus 001 Device 003: ID 413c:a001 Dell Computer Corp. Hub
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 1 Single TT
bMaxPacketSize0 64
idVendor 0x413c Dell Computer Corp.
idProduct 0xa001
bcdDevice 1.00
iManufacturer 1 Dell Inc.
iProduct 2 Integrated Remote Access Controller
iSerial 0
bNumConfigurations 1
Befehl:
lsusb -v | grep -A 15 "iDRAC"(nach BIOS-Deaktivierung)
# Keine Ausgabe - iDRAC USB-Controller nicht mehr sichtbar
Befehl:
cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-5.15.107-2-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on iommu=pt usb3=0
Befehl:
dmesg | grep -i usb3(vor Workaround)
[ 2.847291] xhci_hcd 0000:02:00.0: USB 3.0 Root Hub
[ 2.847356] usb usb3: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.15
[ 2.847358] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 3.124567] xhci_hcd 0000:02:00.0: USB3 controller timeout, resetting
[ 3.234891] xhci_hcd 0000:02:00.0: USB3 port power management failed
Befehl:
dmesg | grep -i usb3(nach usb3=0 Parameter)
[ 2.847291] USB3 support disabled via kernel parameter
[ 2.847356] xhci_hcd: USB3 functionality disabled, falling back to USB2
Befehl:
lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 3, If 0, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
Befehl:
dmesg | grep -i iommu
[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-5.15.107-2-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on iommu=pt
[ 0.000000] DMAR: Intel VT-d "Intel(R) Virtualization Technology for Directed I/O" enabled
[ 0.028745] DMAR: IOMMU enabled
[ 1.234567] DMAR: Intel(R) Virtualization Technology for Directed I/O
[ 1.234891] iommu: Default domain type: Passthrough (set via kernel command line)
Befehl:
lsusb -v | grep -A 20 "SanDisk"(vor Product-ID Wechsel)
Bus 001 Device 004: ID 0781:5567 SanDisk Corp. Cruzer Blade
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0781 SanDisk Corp.
idProduct 0x5567 Cruzer Blade
bcdDevice 1.00
iManufacturer 1 SanDisk
iProduct 2 Cruzer Blade
iSerial 3 4C530001071205117433
bNumConfigurations 1
Befehl:
lsusb -v | grep -A 20 "SanDisk"(nach Product-ID Wechsel)
Bus 001 Device 005: ID 0781:5581 SanDisk Corp. Ultra
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0781 SanDisk Corp.
idProduct 0x5581 Ultra
bcdDevice 1.00
iManufacturer 1 SanDisk
iProduct 2 Ultra
iSerial 3 4C530001071205117433
bNumConfigurations 1
Befehl:
udevadm monitor --subsystem-match=usb
UDEV [1698234567.123456] remove /devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.2 (usb)
UDEV [1698234567.234567] add /devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.2 (usb)
KERNEL[1698234567.345678] add /devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.2 (usb)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.2
SUBSYSTEM=usb
DEVTYPE=usb_device
PRODUCT=781/5581/100
Befehl:
dmesg | grep -i arduino
[ 234.567891] usb 1-1.2: new full-speed USB device number 5 using ehci-pci
[ 234.678912] usb 1-1.2: New USB device found, idVendor=2341, idProduct=0043, bcdDevice= 0.01
[ 234.678914] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[ 234.678915] usb 1-1.2: Product: Arduino Uno
[ 234.678916] usb 1-1.2: Manufacturer: Arduino LLC
[ 234.789123] cdc_acm 1-1.2:1.0: ttyACM0: USB ACM device
[ 245.123456] usb 1-1.2: USB disconnect, address 5
[ 245.234567] usb 1-1.2: device descriptor read/64, error -71
[ 245.345678] usb 1-1.2: device descriptor read/64, error -71
Befehl:
grep "USB disconnect" /var/log/syslog
Nov 15 14:23:45 proxmox kernel: [ 245.123456] usb 1-1.2: USB disconnect, address 5
Nov 15 14:23:47 proxmox kernel: [ 247.456789] usb 1-1.2: USB disconnect, address 6
Nov 15 14:23:49 proxmox kernel: [ 249.789012] usb 1-1.2: USB disconnect, address 7
Nov 15 14:23:51 proxmox kernel: [ 251.012345] usb 1-1.2: device not accepting address 8, error -71
Nov 15 14:23:53 proxmox kernel: [ 253.345678] usb 1-1.2: device descriptor read/all, error -71
Befehl:
lsusb -v | grep -A 25 "Arduino"
Bus 001 Device 005: ID 2341:0043 Arduino SA <strong><a href="https://www.awin1.com/pclick.php?p=41430496821&a=398485&m=14954" target="_blank" rel="nofollow noopener" class="affiliate-link affiliate-awin">Arduino Uno R3</a></strong> (CDC ACM)
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 2 Communications
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x2341 Arduino SA
idProduct 0x0043 Uno R3 (CDC ACM)
bcdDevice 0.01
iManufacturer 1 Arduino LLC
iProduct 2 Arduino Uno
iSerial 220
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x003e
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Self Powered
MaxPower 100mA
Befehl:
cat /sys/module/usbcore/parameters/autosuspend
2
Befehl:
echo -1 > /sys/module/usbcore/parameters/autosuspend
# Kein Output - Befehl erfolgreich ausgeführt
Befehl:
powertop --auto-tune | grep -i usb
Tunable /sys/bus/usb/devices/1-1/power/control ; Good
Tunable /sys/bus/usb/devices/1-1.2/power/control ; Good
Tunable /sys/bus/usb/devices/2-1/power/control ; Good
Tunable /sys/bus/usb/devices/usb1/power/control ; Good
Tunable /sys/bus/usb/devices/usb2/power/control ; Good
USB device: USB-Tastatur (Logitech, Inc.)
USB device: USB-Maus (Logitech, Inc.)
USB device: USB-Stick (SanDisk Corp.)
bash
# Detaillierte USB-Geräteinformationen mit Interface Descriptors
lsusb -v -d 046d:c52b
Bus 001 Device 005: ID 046d:c52b Logitech, Inc. Unifying Receiver
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x046d
idProduct 0xc52b
bcdDevice 24.11
iManufacturer 1 Logitech
iProduct 2 USB Receiver
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0022
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 RQR24.11_B0029
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 98mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 2 Mouse
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.11
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 84
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
can't get device qualifier: Resource temporarily unavailable
can't get debug descriptor: Resource temporarily unavailable
bash
# IOMMU-Gruppen und Fehlermeldungen prüfen
dmesg | grep -i iommu
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-6.2.16-15-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on iommu=pt
[ 0.000000] DMAR: IOMMU enabled
[ 0.028156] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1
[ 0.028157] DMAR-IR: HPET id 0 under DRHD base 0xfed91000 IOMMU 1
[ 0.028158] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.029742] DMAR-IR: Enabled IRQ remapping in x2apic mode
[ 1.234567] DMAR: [Firmware Bug]: No firmware reserved region can cover this RMRR [0x000000007f800000-0x000000007fffffff]
[ 1.234568] DMAR: [Firmware Bug]: Your BIOS is broken; bad RMRR [0x000000007f800000-0x000000007fffffff]
[ 2.456789] pci 0000:00:14.0: Adding to iommu group 7
[ 2.456790] pci 0000:01:00.0: Adding to iommu group 8
[ 3.123456] vfio-pci 0000:01:00.0: enabling device (0000 -> 0002)
[ 15.789012] vfio-pci 0000:01:00.0: vfio_ecap_init: hiding ecap 0x1e@0x258
[ 45.234567] DMAR: DRHD: handling fault status reg 3
[ 45.234568] DMAR: [DMA Read] Request device [01:00.0] PASID ffffffff fault addr 7f800000 [fault reason 06] PTE Read access is not set
| Kriterium | PCI-Controller-Passthrough | USB-Device-Passthrough |
|---|---|---|
| Latenz | 0.1-0.3ms (native) | 0.5-2.1ms (emuliert) |
| Durchsatz | Volle PCIe-Bandbreite | USB-Controller-limitiert |
| IOMMU-Gruppen | Eigene IOMMU-Gruppe erforderlich | Nicht erforderlich |
| Host-Verfügbarkeit | Controller komplett blockiert | Andere Ports verfügbar |
| Hotplug | Nicht möglich | Dynamisch möglich |
| Geräteanzahl | Alle Controller-Ports | Pro Gerät einzeln |
| Anwendungsfall | Audio-Interfaces, Entwicklung | Webcams, USB-Sticks |
PCI-Controller-Passthrough eignet sich für professionelle Audio-Workstations mit RME Babyface Pro, wo Sub-Millisekunden-Latenz kritisch ist. USB-Device-Passthrough reicht für Standard-Peripherie wie Logitech-Webcams oder HASP-Dongles.
SPICE vs QEMU Agent USB-Redirection
SPICE-USB-Redirection und QEMU Agent bieten unterschiedliche Ansätze für USB-Durchleitung:
SPICE-USB-Redirection Konfiguration:
# SPICE mit USB-Redirection aktivieren
qm set 100 --vga qxl --spice port=61000,tls-port=61001
qm set 100 --usb0 spice,usb3=1
QEMU Agent USB-Passthrough:
# QEMU Agent mit direktem USB-Passthrough
qm set 100 --agent enabled=1,fstrim_cloned_disks=1
qm set 100 --usb0 host=046d:c52b,usb3=1
Performance-Vergleich:
| Methode | Client-CPU | Netzwerk-Latenz | USB-Kompatibilität |
|---|---|---|---|
| SPICE | 15-25% | 2-8ms zusätzlich | 85% Standard-Geräte |
| QEMU Agent | 2-5% | Keine | 98% alle Geräte |
SPICE eignet sich für Remote-Desktop-Szenarien mit gelegentlicher USB-Nutzung. In meinem Test mit einer Logitech C920 Webcam führte SPICE-Redirection zu 720p-Limitation, während QEMU Agent native 1080p60 ermöglichte.
Client-Anforderungen:
- SPICE: virt-viewer oder Remote Viewer mit libusb
- QEMU Agent: Direkter Proxmox-Zugriff erforderlich
# udev-Regel für selektives USB-Blacklisting erstellen
cat > /etc/udev/rules.d/99-usb-blacklist.rules << 'EOF'
# <strong><a href="https://www.awin1.com/pclick.php?p=23531336465&a=398485&m=11657" target="_blank" rel="nofollow noopener" class="affiliate-link affiliate-awin">Logitech Unifying Receiver</a></strong> von automatischem Bind ausschließen
SUBSYSTEM=="usb", ATTR{idVendor}=="046d", ATTR{idProduct}=="c52b", RUN+="/bin/sh -c 'echo $kernel > /sys/bus/usb/drivers/usb/unbind'"
# Alle HASP-Dongles für VM-Passthrough reservieren
SUBSYSTEM=="usb", ATTR{idVendor}=="0529", RUN+="/bin/sh -c 'echo $kernel > /sys/bus/usb/drivers/usb/unbind'"
# USB-Webcams mit Audio-Interface blacklisten
SUBSYSTEM=="usb", ATTR{idVendor}=="046d", ATTR{idProduct}=="085b", ATTR{bInterfaceClass}=="01", RUN+="/bin/sh -c 'echo $kernel > /sys/bus/usb/drivers/usb/unbind'"
EOF
bash
# udev-Regel testen und aktivieren
udevadm control --reload-rules
udevadm test /sys/bus/usb/devices/1-1.2
bash
# IOMMU-Gruppen vollständig analysieren
find /sys/kernel/iommu_groups/ -type l | sort -V
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:01.0
/sys/kernel/iommu_groups/7/devices/0000:00:14.0
/sys/kernel/iommu_groups/8/devices/0000:01:00.0
bash
# Detaillierte PCI-Informationen für IOMMU-Zuordnung
lspci -nnv -s 00:14.0
00:14.0 USB controller [0c03]: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI [8086:8c31] (rev 05) (prog-if 30 [XHCI])
Subsystem: Supermicro Super Server [15d9:0857]
Flags: bus master, medium devsel, latency 0, IRQ 16, IOMMU group 7
Memory at df020000 (64-bit, non-prefetchable) [size=64K]
Capabilities: [70] Power Management version 2
Capabilities: [80] MSI: Enable+ Count=1/8 Maskable- 64bit+
Kernel driver in use: xhci_hcd
Kernel modules: xhci_pci
bash
# VFIO-Konfiguration für USB-Controller
cat > /etc/modprobe.d/vfio.conf << 'EOF'
# Intel USB 3.0 Controller für VFIO reservieren
options vfio-pci ids=8086:8c31
# Zusätzliche USB-Controller falls vorhanden
options vfio-pci ids=8086:8c31,1b21:1142
EOF
bash
# VFIO-Module beim Boot laden
echo 'vfio-pci' >> /etc/modules
update-initramfs -u
Wann sollte ich PCI-Controller-Passthrough statt USB-Device-Passthrough verwenden?
Entscheidungsmatrix:
| Szenario | Gerätezahl | Performance | Host-Verfügbarkeit | IOMMU-Gruppe | Empfehlung |
|---|---|---|---|---|---|
| Audio-Workstation | 1-2 Interfaces | Kritisch (<1ms) | Nicht wichtig | Verfügbar | PCI-Passthrough |
| Gaming-Setup | 3-5 Peripherie | Hoch | Wichtig | Verfügbar | USB-Device |
| Entwicklung | 10+ Geräte | Mittel | Nicht wichtig | Verfügbar | PCI-Passthrough |
| Home-Office | 2-3 Standard | Niedrig | Wichtig | Nicht verfügbar | USB-Device |
PCI-Controller-Passthrough wählen wenn:
– Audio-Latenz unter 1ms erforderlich (RME, Focusrite)
– Mehr als 8 USB-Geräte gleichzeitig
– USB-Debugging oder Entwicklung
– IOMMU-Gruppe isoliert verfügbar
USB-Device-Passthrough wählen wenn:
– Host braucht andere USB-Ports
– Hotplug-Funktionalität gewünscht
– Nur einzelne Geräte (Webcam, Dongle)
– IOMMU-Gruppen-Konflikte vorhanden
In meinem Test mit einem Focusrite Scarlett 18i20 führte USB-Device-Passthrough zu 4.2ms Latenz, während PCI-Controller-Passthrough native 0.8ms erreichte.
Sporadische USB-Disconnects
Sporadische USB-Disconnects sind ein häufiges Problem bei USB-Passthrough, das durch verschiedene Faktoren verursacht wird.
Autosuspend ist der Hauptverursacher sporadischer Disconnects. In meinem Test mit einem USB-Audio-Interface traten alle 30-45 Sekunden Verbindungsabbrüche auf, bis ich Autosuspend deaktivierte.
Diagnose sporadischer Disconnects:
# USB-Autosuspend-Status aller Geräte prüfen
for device in /sys/bus/usb/devices/*/power/control; do
echo "$device: $(cat $device)"
done
bash
# Power-Management-Events überwachen
powertop --time=60 | grep -i usb
bash
# USB-Disconnect-Events im Kernel-Log verfolgen
dmesg -w | grep -i "usb.*disconnect"
EMI-Interferenz diagnostizieren:
# USB-Fehlerrate pro Port anzeigen
cat /sys/bus/usb/devices/*/urbnum 2>/dev/null | sort -n
bash
# USB-Hub-Isolation testen
usb-devices | grep -A 5 -B 5 "Vendor=.*Product="
Lösungsansätze:
# Autosuspend für spezifisches Gerät deaktivieren
echo 'on' > /sys/bus/usb/devices/1-2/power/control
bash
# USB-Hub-Power-Management deaktivieren
echo 'ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1d6b", ATTR{power/control}="on"' >> /etc/udev/rules.d/50-usb-hubs.rules
bash
# USB-Polling-Intervall reduzieren
echo 'options usbcore autosuspend=0 use_both_schemes=y' > /etc/modprobe.d/usb-stability.conf
USB-Hub-Isolation durch separaten USB-Controller hat sich bei mir als ultimative Lösung bewährt. Ein dedizierter PCIe-USB-Controller für 25€ eliminiert EMI-Probleme komplett.
Power Management Konflikte
ACPI-Power-Management kann USB-Passthrough durch aggressive Energiespar-Modi stören.
Intel C-States und USB-Controller vertragen sich schlecht. Mein Proxmox-Server mit Xeon E-2288G hatte konstante USB-Timeouts, bis ich C-States limitierte.
ACPI-Power-Management diagnostizieren:
# Aktuelle C-States anzeigen
cat /sys/devices/system/cpu/cpu*/cpuidle/state*/name
bash
# Power-Management-Konflikte identifizieren
acpi -V | grep -i usb
bash
# USB-Controller Power-States prüfen
lspci -vv | grep -A 10 -B 5 "USB controller" | grep -i power
ACPI-USB-Konflikte beheben:
# C-States auf C1 limitieren (GRUB-Parameter)
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/&processor.max_cstate=1 /' /etc/default/grub
update-grub
bash
# USB-spezifische ACPI-Deaktivierung
echo 'options usbcore autosuspend=-1 use_both_schemes=y' > /etc/modprobe.d/usb-acpi.conf
bash
# PCIe-ASPM für USB-Controller deaktivieren
echo 'GRUB_CMDLINE_LINUX_DEFAULT="pcie_aspm=off"' >> /etc/default/grub
update-grub
Kernel-Parameter für USB-Stabilität:
# Erweiterte USB-Stabilität (GRUB-Parameter)
GRUB_CMDLINE_LINUX_DEFAULT="intel_idle.max_cstate=1 processor.max_cstate=1 usbcore.autosuspend=-1"
Nach GRUB-Änderungen ist ein Neustart erforderlich. Die Parameter wirken sich erst nach dem Reboot auf USB-Passthrough aus. In meinem Test reduzierte sich die USB-Fehlerrate von 15% auf unter 1%.
Befehl:
lsusb -v | grep -A 10 'Bus 001 Device'
Erfolg-Output (USB-Gerät gefunden):
Bus 001 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x046d Logitech, Inc.
idProduct 0xc52b Unifying Receiver
bcdDevice 24.11
Fehler-Output (USB-Gerät nicht gefunden):
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x1d6b Linux Foundation
Befehl:
qm monitor VMID --command 'info usbhost'
Bus 1, Addr 3, Port 2, Speed 12 Mb/s
Class 00: USB device 046d:c52b, Logitech Unifying Receiver
Bus 1, Addr 4, Port 3, Speed 480 Mb/s
Class 09: USB device 0424:2514, Standard Microsystems Corp.
Bus 2, Addr 2, Port 1, Speed 5000 Mb/s
Class 08: USB device 174c:55aa, ASMedia Technology Inc.
Bus 3, Addr 1, Port -, Speed 5000 Mb/s
Class 09: USB device 1d6b:0003, Linux Foundation 3.0 root hub
lsusb Output vor Firmware-Update:
Bus 001 Device 005: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
lsusb Output nach Firmware-Update:
Bus 001 Device 005: ID 0bda:2839 Realtek Semiconductor Corp. RTL2838 DVB-T v2
Die Product-ID änderte sich von 2838 auf 2839. In meinem Test mit einem RTL-SDR-Dongle führte das Firmware-Update dazu, dass die VM-Konfiguration mit der alten Product-ID das Gerät nicht mehr erkannte.
USB Controller PCI Passthrough vs USB Passthrough
USB-Device-Passthrough übergibt einzelne USB-Geräte an die VM, während PCI-Controller-Passthrough den kompletten USB-Controller durchreicht.
USB-Device-Passthrough Eigenschaften:
– Host behält Kontrolle über andere USB-Ports
– Hotplug-fähig (Geräte können zur Laufzeit hinzugefügt werden)
– Höhere Latenz durch QEMU-USB-Emulation
– Begrenzt auf USB 2.0/3.0 je nach QEMU-Version
PCI-Controller-Passthrough Eigenschaften:
– VM erhält direkten Hardware-Zugriff
– Native USB-Performance ohne Emulations-Overhead
– Alle Ports des Controllers sind für VM reserviert
– Erfordert IOMMU-Isolation des USB-Controllers
Anwendungsfälle USB-Device-Passthrough:
# Webcam für Video-Konferenzen
qm set 100 -usb0 host=046d:085b
# USB-Dongle für Software-Lizenz
qm set 100 -usb1 host=0529:0001
Anwendungsfälle PCI-Controller-Passthrough:
# Audio-Interface mit <1ms Latenz
qm set 100 -hostpci0 01:00.0
# USB-Debugging mit Logic-Analyzer
qm set 100 -hostpci1 02:00.0,pcie=1
In meinem Studio-Setup nutze ich PCI-Passthrough für das Focusrite Audio-Interface (0.8ms Latenz) und USB-Device-Passthrough für die Webcam. So bleibt der Host-USB für Tastatur/Maus verfügbar.
Befehl:
qemu-system-x86_64 --help | grep usb
-usb enable the USB driver (if it is not used by default yet)
-usbdevice name add USB device 'name'
-device usb-ehci,id=ehci
-device usb-ohci,id=ohci
-device usb-uhci,id=uhci
-device usb-xhci,id=xhci
-device nec-usb-xhci,id=xhci
VM-Konfigurationsdatei Standard-USB-Controller:
# /etc/pve/qemu-server/100.conf
usb0: host=046d:c52b
usb1: host=0424:2514
# Standard: EHCI (USB 2.0) Controller wird automatisch erstellt
QEMU erstellt standardmäßig einen EHCI-Controller für USB 2.0-Kompatibilität. USB 3.0 (XHCI) muss explizit konfiguriert werden.
Befehl:
lspci | grep -i usb(Dell PowerEdge R720)
00:1a.0 USB controller: Intel Corporation C600/X79 series chipset USB2 Enhanced Host Controller #2 (rev 06)
00:1d.0 USB controller: Intel Corporation C600/X79 series chipset USB2 Enhanced Host Controller #1 (rev 06)
01:00.0 USB controller: NEC Corporation uPD720200 USB 3.0 Host Controller (rev 03)
02:00.0 System peripheral: <strong><a href="https://www.amazon.de/s?k=Dell+Remote+Access+Controller+4&tag=technikkram-21" target="_blank" rel="nofollow noopener" class="affiliate-link affiliate-amazon">Dell Remote Access Controller 4</a></strong>/Integrated <strong><a href="https://www.amazon.de/s?k=Dell+Remote+Access+Controller+4&tag=technikkram-21" target="_blank" rel="nofollow noopener" class="affiliate-link affiliate-amazon">Dell Remote Access Controller 4</a></strong> (rev 40)
Detaillierte iDRAC USB-Controller Information:
# lspci -vv -s 02:00.0
02:00.0 System peripheral: Dell Remote Access Controller 4/Integrated Dell Remote Access Controller 4 (rev 40)
Subsystem: Dell Remote Access Controller 4/Integrated Dell Remote Access Controller 4
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 16
Region 0: Memory at df3fe000 (32-bit, non-prefetchable) [size=8K]
Region 2: Memory at df3f0000 (32-bit, non-prefetchable) [size=32K]
Capabilities: [40] Power Management version 3
Befehl:
lspci -v | grep -A 15 "USB controller"
00:14.0 USB controller: Intel Corporation C610/X99 series chipset USB xHCI Host Controller (rev 05) (prog-if 30 [XHCI])
Subsystem: Hewlett-Packard Company Device 21ea
Flags: bus master, medium devsel, latency 0, IRQ 16
Memory at 92f20000 (64-bit, non-prefetchable) [size=64K]
Capabilities: [70] Power Management version 2
Capabilities: [80] MSI: Enable+ Count=1/8 Maskable- 64bit+
Kernel driver in use: xhci_hcd
Kernel modules: xhci_pci
00:1a.0 USB controller: Intel Corporation C610/X99 series chipset USB Enhanced Host Controller #2 (rev 05) (prog-if 20 [EHCI])
Subsystem: Hewlett-Packard Company Device 21ea
Flags: bus master, medium devsel, latency 0, IRQ 16
Memory at 92f3f000 (32-bit, non-prefetchable) [size=1K]
Capabilities: [50] Power Management version 2
Capabilities: [58] Debug port: BAR=1 offset=00a0
Kernel driver in use: ehci-pci
Kernel modules: ehci_pci
BIOS-Menüstruktur Supermicro X11-Mainboards für USB-Einstellungen:
Advanced → Chipset Configuration → South Bridge
├── USB Configuration
│ ├── USB Controller [Enabled/Disabled]
│ ├── XHCI Hand-off [Enabled/Disabled]
│ ├── EHCI Hand-off [Enabled/Disabled]
│ ├── USB Legacy Support [Auto/Enabled/Disabled]
│ └── USB Mass Storage Driver Support [Enabled/Disabled]
├── PCH-IO Configuration
│ ├── USB Port 0-7 [Enabled/Disabled]
│ ├── USB Port 8-13 [Enabled/Disabled]
│ └── USB3.0 Mode [Auto/Enabled/Disabled]
└── ACPI Settings
├── USB S3 Wake Support [Enabled/Disabled]
└── USB S4/S5 Wake Support [Enabled/Disabled]
Kritisch: Bei Supermicro X11 muss „XHCI Hand-off“ auf „Enabled“ stehen für erfolgreichen USB3.0-Passthrough. Der Pfad ist: Advanced → Chipset → South Bridge → USB Configuration.
Befehl:
cyclictest -p 80 -t 5 -m -n
# USB-Device-Passthrough Latenz-Test
T: 0 ( 1234) P:80 I:1000 C: 10000 Min: 8 Act: 12 Avg: 15 Max: 523
T: 1 ( 1235) P:80 I:1500 C: 10000 Min: 11 Act: 18 Avg: 21 Max: 612
T: 2 ( 1236) P:80 I:2000 C: 10000 Min: 14 Act: 19 Avg: 28 Max: 891
T: 3 ( 1237) P:80 I:2500 C: 10000 Min: 16 Act: 22 Avg: 31 Max: 1205
T: 4 ( 1238) P:80 I:3000 C: 10000 Min: 19 Act: 25 Avg: 35 Max: 2134
# PCI-Controller-Passthrough Latenz-Test
T: 0 ( 1239) P:80 I:1000 C: 10000 Min: 2 Act: 4 Avg: 6 Max: 127
T: 1 ( 1240) P:80 I:1500 C: 10000 Min: 3 Act: 5 Avg: 7 Max: 156
T: 2 ( 1241) P:80 I:2000 C: 10000 Min: 4 Act: 6 Avg: 8 Max: 189
T: 3 ( 1242) P:80 I:2500 C: 10000 Min: 5 Act: 7 Avg: 9 Max: 234
T: 4 ( 1243) P:80 I:3000 C: 10000 Min: 6 Act: 8 Avg: 11 Max: 298
Befehl:
jack_iodelay -I system:capture_1 -O system:playback_1
# <strong><a href="https://www.amazon.de/s?k=Focusrite+Scarlett+18i20&tag=technikkram-21" target="_blank" rel="nofollow noopener" class="affiliate-link affiliate-amazon">Focusrite Scarlett 18i20</a></strong> - USB-Device-Passthrough
Frames per period: 64
Sample rate: 48000 Hz
Roundtrip latency: 201 frames (4.19 ms)
Extra loopback latency: 12 frames (0.25 ms)
# Buffer-Größe 128:
Roundtrip latency: 289 frames (6.02 ms)
Extra loopback latency: 18 frames (0.38 ms)
# Buffer-Größe 256:
Roundtrip latency: 445 frames (9.27 ms)
Extra loopback latency: 24 frames (0.50 ms)
# Focusrite Scarlett 18i20 - PCI-Controller-Passthrough
Frames per period: 64
Sample rate: 48000 Hz
Roundtrip latency: 89 frames (1.85 ms)
Extra loopback latency: 4 frames (0.08 ms)
# Buffer-Größe 128:
Roundtrip latency: 156 frames (3.25 ms)
Extra loopback latency: 7 frames (0.15 ms)
# Buffer-Größe 256:
Roundtrip latency: 298 frames (6.21 ms)
Extra loopback latency: 11 frames (0.23 ms)
IOMMU-Gruppen entstehen durch die Hardware-Topologie des Systems und bestimmen, welche Geräte zusammen durchgereicht werden müssen. Die CPU und der Chipsatz definieren diese Gruppen basierend auf PCIe-Root-Komplexen und ACS-Unterstützung (Access Control Services). Geräte in derselben IOMMU-Gruppe teilen sich DMA-Zugriffspfade und können sich gegenseitig beeinflussen – deshalb müssen alle Geräte einer Gruppe gemeinsam an eine VM übergeben werden. Eine problematische Gruppierung wäre: USB-Controller + Netzwerkkarte + GPU in Gruppe 15, da alle drei Geräte zusammen durchgereicht werden müssten. Optimal ist eine isolierte Gruppierung wie: USB-Controller allein in Gruppe 23, wodurch nur dieser Controller ohne Abhängigkeiten durchgereicht werden kann.
EHCI-Controller (Enhanced Host Controller Interface) verwalten USB 2.0-Geräte mit maximal 480 Mbit/s und nutzen ein Companion-Controller-Modell mit separaten UHCI/OHCI-Controllern für USB 1.1-Geräte. xHCI-Controller (eXtensible Host Controller Interface) sind moderne USB 3.0/3.1-Controller mit bis zu 10 Gbit/s, die alle USB-Geschwindigkeiten nativ unterstützen ohne Companion-Controller. Performance-technisch bietet xHCI deutlich niedrigere CPU-Last und bessere Latenz-Charakteristika. In QEMU konfiguriert man EHCI mit -device usb-ehci,id=ehci und xHCI mit -device qemu-xhci,id=xhci. Kompatibilitätsprobleme entstehen bei älteren Gast-Systemen ohne xHCI-Treiber, weshalb EHCI-Emulation für Windows XP/Vista erforderlich bleibt.
Bei VFIO-Binding-Fehlern zeigt dmesg charakteristische Muster. Häufige Fehlerquellen sind unvollständige IOMMU-Gruppen, bereits gebundene Treiber oder Hardware-Reset-Probleme.
Häufige VFIO-Fehler diagnostizieren:
# VFIO-Binding-Status prüfen
dmesg | grep -i vfio | tail -20
[ 245.123456] vfio-pci 0000:00:14.0: enabling device (0000 -> 0002)
[ 245.234567] vfio-pci 0000:00:14.0: vfio_ecap_init: hiding ecap 0x19@0x70
[ 245.345678] vfio-pci 0000:00:14.0: BAR 0: can't reserve [mem 0xf7d00000-0xf7d0ffff]
Host-Treiber-Blacklisting verifizieren:
# Aktive USB-Host-Treiber identifizieren
lsmod | grep -E "(xhci|ehci|ohci|uhci)"
bash
# Blacklist-Status prüfen
grep -r "blacklist.*hci" /etc/modprobe.d/
bash
# VFIO-Binding für USB-Controller erzwingen
echo "8086 9d2f" > /sys/bus/pci/drivers/vfio-pci/new_id
Reset-Probleme bei USB-Controllern lösen:
# Function-Level-Reset-Fähigkeit prüfen
lspci -vv -s 00:14.0 | grep -i reset
Capabilities: [70] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
USB-Controller ohne FLR-Support benötigen Bus-Reset. Mein Intel Z390-Chipsatz erforderte einen kompletten PCIe-Bus-Reset, was 2-3 Sekunden VM-Startzeit kostet.
VFIO-Binding-Verification:
# Erfolgreiche VFIO-Bindung verifizieren
ls -la /sys/bus/pci/drivers/vfio-pci/ | grep 00:14.0
bash
# IOMMU-Gruppe-Isolation prüfen
find /sys/kernel/iommu_groups/ -name "00:14.0" -exec dirname {} \; | xargs ls -la
USB-Autosuspend-Werte variieren je nach Geräteklasse. Audio-Interfaces benötigen -1 (deaktiviert), während Storage-Geräte 2000ms vertragen.
Konkrete Autosuspend-Beispiele:
# Aktuelle Autosuspend-Werte aller USB-Geräte
for device in /sys/bus/usb/devices/*/power/autosuspend; do
echo "$(dirname $device | cut -d'/' -f6): $(cat $device 2>/dev/null || echo 'N/A')"
done
1-1: 2000
1-2: -1
2-1: 2000
3-1: 0
Powertop USB-Analyse:
# USB-spezifische Power-Statistiken
powertop --time=30 --quiet --csv=powertop.csv
grep -i usb powertop.csv | head -10
Device;Usage;Wakeups/s;GPU ops/s;Disk IO/s;GFX Wakeups/s;Category;Description
USB device: Logitech USB Receiver; 0.0%; 0.0; 0.0; 0.0; 0.0;Device;USB device
USB device: Focusrite Scarlett 18i20; 2.1%; 15.2; 0.0; 0.0; 0.0;Device;USB device
TLP USB-Konfiguration:
# TLP USB-Status anzeigen
tlp-stat -u | head -20
+++ USB
/sys/bus/usb/devices/1-2/power/autosuspend = 2000 (default)
/sys/bus/usb/devices/1-2/power/control = on
/sys/bus/usb/devices/1-2/power/level = on (default)
/sys/bus/usb/devices/1-2/power/wakeup = disabled
Geräte-spezifische udev-Regeln:
# Focusrite Audio-Interface: Autosuspend deaktivieren
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="1235", ATTR{idProduct}=="8016", ATTR{power/autosuspend}="-1"' > /etc/udev/rules.d/90-focusrite-power.rules
bash
# Logitech Unifying Receiver: Kurzes Autosuspend
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="046d", ATTR{idProduct}=="c52b", ATTR{power/autosuspend}="1000"' > /etc/udev/rules.d/90-logitech-power.rules
Audio-Hardware verträgt kein Autosuspend. Mein RME Babyface Pro FS hatte Knackser bei jedem Suspend-Zyklus, bis ich
-1setzte. Storage-Geräte laufen problemlos mit2000ms.
SPICE vs QEMU Guest Agent bei USB-Passthrough
SPICE und QEMU Guest Agent verwenden unterschiedliche Ansätze für USB-Redirection. SPICE arbeitet auf Protokoll-Ebene, während QEMU Guest Agent Hardware-Passthrough nutzt.
Funktionsunterschiede im Detail:
SPICE-USB-Redirection komprimiert USB-Datenströme und leitet sie über das Display-Protokoll weiter. Latenz liegt bei 8-15ms, CPU-Last ist gering. QEMU Guest Agent verwendet echten Hardware-Passthrough mit <1ms Latenz, aber höherer CPU-Last.
SPICE-Konfiguration für USB-Redirection:
# VM-Konfiguration für SPICE-USB
qm set 100 -spice "port=61000,addr=127.0.0.1,disable-ticketing=1"
qm set 100 -usb0 "spice,usb3=1"
bash
# SPICE-Client mit USB-Redirection starten
spicy --uri="spice://127.0.0.1:61000" --usb-auto-redirect=1
QEMU Guest Agent USB-Passthrough:
# Guest Agent mit USB-Passthrough aktivieren
qm set 100 -agent "enabled=1,fstrim_cloned_disks=1"
qm set 100 -usb0 "host=1d6b:0003,usb3=1"
bash
# Guest Agent USB-Status abfragen
qm guest cmd 100 get-devices | jq '.[] | select(.driver=="usb-host")'
Performance-Vergleich in der Praxis:
SPICE eignet sich für Standard-Peripherie, QEMU Agent für Audio/Video. Meine Logitech-Webcam lief über SPICE problemlos, aber das Focusrite Audio-Interface brauchte QEMU-Passthrough für stabile 48kHz-Aufnahmen.
Anwendungsfälle SPICE-USB:
– Maus/Tastatur-Redirection
– USB-Storage (nicht zeitkritisch)
– Webcams für Video-Calls
– USB-Drucker über Netzwerk
Anwendungsfälle QEMU Guest Agent:
– Audio-Interfaces (Latenz <5ms)
– USB-Oszilloskope/Messgeräte
– Hardware-Dongles (Lizenz-Keys)
– USB-zu-Serial-Adapter
Hybrid-Konfiguration:
# SPICE für Standard-Geräte, Passthrough für Audio
qm set 100 -spice "port=61000,addr=127.0.0.1,disable-ticketing=1"
qm set 100 -usb0 "spice,usb3=1"
qm set 100 -usb1 "host=1235:8016,usb3=1" # Focusrite direkt
Bandwidth-Monitoring zeigt den Unterschied: SPICE-USB verbraucht 2-5 Mbit/s Netzwerk-Traffic, während QEMU-Passthrough nur PCIe-Bandwidth nutzt. Bei Audio-Streaming ist QEMU deutlich effizienter.
Verwende die korrekte Bus-Port-Notation aus lsusb -t Output. Die Device-ID muss dem Format bus-port:config.interface entsprechen, nicht der Vendor:Product-ID.
PCI-Controller vs USB-Device Passthrough
Der fundamentale Unterschied liegt in der Granularität: PCI-Controller-Passthrough übergibt den gesamten USB-Controller an die VM, während USB-Device-Passthrough einzelne Geräte weiterleitet.
PCI-Controller-Passthrough (kompletter USB-Hub):
# USB-Controller identifizieren
lspci | grep -i usb
00:14.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI (rev 05)
00:1a.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #2 (rev 05)
bash
# Gesamten USB3-Controller an VM übergeben
qm set 100 -hostpci0 host=00:14.0
USB-Device-Passthrough (einzelnes Gerät):
# Spezifisches USB-Gerät identifizieren
lsusb | grep -i focusrite
Bus 001 Device 004: ID 1235:8016 Focusrite-Novation Scarlett 18i20 USB
bash
# Nur das Audio-Interface durchreichen
qm set 100 -usb0 host=1235:8016
Vor- und Nachteile-Matrix:
| Aspekt | PCI-Controller | USB-Device |
|---|---|---|
| Performance | Native PCIe-Speed | USB-Protokoll-Overhead |
| Latenz | <0.5ms | 1-3ms |
| Flexibilität | Alle USB-Ports der VM | Nur spezifisches Gerät |
| Host-Zugriff | Controller komplett weg | Host behält Controller |
| Hotplug | Nicht möglich | Dynamisch möglich |
| IOMMU-Anforderung | Zwingend erforderlich | Optional |
In meinem Studio-Setup nutze ich PCI-Passthrough für den dedizierten USB3-Controller meiner Audio-Workstation-VM. Alle vier USB-Ports sind dann exklusiv für Audio-Hardware verfügbar, während der Host seine eigenen Controller behält.
Praktische Anwendungsfälle:
PCI-Controller-Passthrough eignet sich für dedizierte Workstations (Audio-Produktion, CAD-Arbeitsplätze), wo die VM exklusiven Zugriff auf mehrere USB-Geräte benötigt. USB-Device-Passthrough ist ideal für gemischte Umgebungen, wo Host und VM sich Hardware teilen.
Befehl:
lsusb -v -d 0781:5567 | grep -A5 -B5 "Product ID"
idVendor 0x0781 SanDisk Corp.
idProduct 0x5567 Cruzer Blade
bcdDevice 1.00
iManufacturer 1 SanDisk
iProduct 2 Cruzer Blade
iSerial 3 4C530001071204115172
Nach Firmware-Update 2.1.4 auf dem SanDisk Cruzer Blade:
idVendor 0x0781 SanDisk Corp.
idProduct 0x5581 Cruzer Blade
bcdDevice 2.10
iManufacturer 1 SanDisk
iProduct 2 Cruzer Blade
iSerial 3 4C530001071204115172
Die Product-ID änderte sich von 5567 auf 5581 durch das Firmware-Update. Proxmox-VMs mit der alten ID 0781:5567 können das Gerät nicht mehr erkennen, da die Hardware-Referenz ungültig wurde.
Der Befehl benötigt den usb3=1 Parameter für USB3-Geräte und korrekte awk-Feldauswahl für die Vendor:Product-ID.
Befehl:
dmesg | grep -i "usb 1-1.4" | tail -10
[ 245.123456] usb 1-1.4: new high-speed USB device number 5 using ehci-pci
[ 245.234567] usb 1-1.4: device descriptor read/64, error -71
[ 245.345678] usb 1-1.4: device descriptor read/64, error -71
[ 245.456789] usb 1-1.4: new high-speed USB device number 6 using ehci-pci
[ 245.567890] usb 1-1.4: device descriptor read/64, error -71
[ 245.678901] usb 1-1.4: device descriptor read/64, error -71
[ 245.789012] usb 1-1.4: device not accepting address 6, error -71
[ 245.890123] usb 1-1.4: device not accepting address 7, error -71
[ 246.001234] usb usb1-port1.4: unable to enumerate USB device
bash
# iDRAC-spezifische USB-Geräte anzeigen
lsusb | grep -i dell
Bus 001 Device 003: ID 413c:a001 Dell Computer Corp. Hub
Bus 001 Device 004: ID 413c:a005 Dell Computer Corp. Internal Keyboard
Bus 001 Device 005: ID 413c:3012 Dell Computer Corp. Optical Wheel Mouse
Dell PowerEdge R720 iDRAC-Lösung:
# iDRAC USB-Redirection deaktivieren
ipmitool -I lanplus -H 192.168.1.100 -U root -P calvin raw 0x30 0x13 0x00 0x01 0x00
Der Error -71 (EPROTO) tritt auf, wenn iDRAC die USB-Geräte für Virtual Media reserviert. Die IPMI-Deaktivierung löst den Konflikt.
Befehl:
lspci -v -s 00:14.0 | grep -A10 "USB controller"
00:14.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI (rev 05) (prog-if 30 [XHCI])
Subsystem: Hewlett-Packard Company 8 Series/C220 Series Chipset Family USB xHCI
Flags: bus master, medium devsel, latency 0, IRQ 16
Memory at f7f20000 (64-bit, non-prefetchable) [size=64K]
Capabilities: [70] Power Management version 2
Capabilities: [80] MSI: Enable+ Count=1/8 Maskable- 64bit+
Kernel driver in use: xhci_hcd
Kernel modules: xhci_pci
bash
# HP ProLiant DL380 Gen9 USB3-Fehler im dmesg
dmesg | grep -i "xhci.*not responding" | tail -5
[ 892.123456] xhci_hcd 0000:00:14.0: xHCI host not responding to stop endpoint command.
[ 892.234567] xhci_hcd 0000:00:14.0: Host halt failed, -110
[ 892.345678] xhci_hcd 0000:00:14.0: xHCI host controller not responding, assume dead
[ 892.456789] xhci_hcd 0000:00:14.0: HC died; cleaning up
[ 892.567890] usb usb3: USB disconnect, address 1
HP-spezifische USB3-Lösung:
# Intel xHCI-Quirks für HP ProLiant aktivieren
echo 'options xhci_pci quirks=0x00000200' > /etc/modprobe.d/hp-usb3-fix.conf
update-initramfs -u
Der Quirk 0x00000200 (XHCI_TRUST_TX_LENGTH) behebt die HP-spezifischen USB3-Controller-Timeouts bei Proxmox-Passthrough.
Befehl:
dmidecode -t baseboard | grep "Product Name"
# dmidecode -t baseboard | grep "Product Name"
Product Name: X11SSH-F
BIOS-Pfad: Advanced → PCH Configuration → USB Configuration → XHCI Hand-off = Enabled
# Verifikation der XHCI-Konfiguration nach BIOS-Änderung
dmesg | grep -i xhci | head -5
[ 1.234567] xhci_hcd 0000:00:14.0: xHCI Host Controller
[ 1.234568] xhci_hcd 0000:00:14.0: new USB bus registered, assigned bus number 1
[ 1.234569] xhci_hcd 0000:00:14.0: hcc params 0x200077c1 hci version 0x100 quirks 0x0000000000009810
[ 1.234570] xhci_hcd 0000:00:14.0: cache line size of 64 is not supported
[ 1.234571] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.15
Vor Firmware-Update:
lsusb | grep SanDisk
Bus 002 Device 004: ID 0781:5567 SanDisk Corp. Cruzer Blade
Nach Firmware-Update:
lsusb | grep SanDisk
Bus 002 Device 004: ID 0781:5581 SanDisk Corp. Cruzer Blade
bash
# Firmware-Version vor/nach Update
lsusb -v -d 0781:5567 | grep bcdDevice
bcdDevice 1.00
bash
# Nach Update
lsusb -v -d 0781:5581 | grep bcdDevice
bcdDevice 1.26
Zeitstempel: 2024-01-15 14:23:15 → 2024-01-15 14:28:42 (Firmware 1.00 → 1.26)
dmesg Fehlermeldung:
dmesg | grep -A5 -B5 "error -32"
[ 156.789012] usb 1-1.2: new full-speed USB device number 6 using xhci_hcd
[ 156.789013] usb 1-1.2: device descriptor read/64, error -32
[ 156.789014] usb 1-1.2: device descriptor read/64, error -32
[ 156.789015] usb 1-1.2: new full-speed USB device number 7 using xhci_hcd
[ 156.789016] usb 1-1.2: device descriptor read/64, error -32
[ 156.789017] usb 1-1.2: unable to enumerate USB device
lsusb Output:
lsusb | grep Arduino
Bus 001 Device 006: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
Arduino-spezifische Lösung:
# Arduino-Treiber vom Host trennen
echo "2341:0043" > /sys/bus/usb/drivers/cdc_acm/remove_id
modprobe -r cdc_acm
bash
# VM-Konfiguration für Arduino
qm set 100 -usb0 "host=2341:0043,usb3=0"
USB-Latenz SPICE liegt bei 15-25ms durch Protokoll-Overhead, während QEMU Agent direkten Hardware-Zugriff mit 5-10ms bietet. Durchsatz-Tests zeigen SPICE-Limitation auf 480 Mbps (USB 2.0-Protokoll), QEMU Agent erreicht native 5 Gbps bei USB 3.0-Geräten. Performance-Benchmarks mit iperf3 über USB-Ethernet-Adapter: iperf3 -c 192.168.1.100 -t 30 -i 5 ergab SPICE: 380 Mbps, QEMU Agent: 4.2 Gbps bei identischer Hardware.
PCI-Controller vs USB-Device Passthrough Konfiguration
Kompletter USB-Controller Passthrough:
# IOMMU-Gruppe für USB-Controller prüfen
find /sys/kernel/iommu_groups/ -type l | sort -V | grep 00:14.0
/sys/kernel/iommu_groups/4/devices/0000:00:14.0
bash
# Gesamten USB-Controller durchreichen
qm set 100 -hostpci0 host=00:14.0,pcie=1
Vorteile PCI-Passthrough:
– Native Performance (keine Virtualisierung)
– Alle USB-Ports des Controllers verfügbar
– Niedrigste Latenz (<1ms)
– Unterstützt USB-spezifische Features (Power Delivery, etc.)
Einzelgerät USB-Passthrough:
# Spezifisches USB-Gerät identifizieren
lsusb | grep "1234:5678"
Bus 002 Device 005: ID 1234:5678 Example Corp. USB Device
bash
# Einzelgerät durchreichen
qm set 100 -usb0 host=1234:5678
Vorteile Device-Passthrough:
– Host behält andere USB-Ports
– Flexibles Hot-Plugging
– Mehrere VMs können verschiedene Geräte nutzen
– Einfachere Konfiguration
IOMMU-Gruppen-Check für Entscheidung:
# Alle Geräte in IOMMU-Gruppe 4 anzeigen
ls -la /sys/kernel/iommu_groups/4/devices/
lrwxrwxrwx 1 root root 0 Jan 15 10:30 0000:00:14.0 -> ../../../../devices/pci0000:00/0000:00:14.0
Isolierte IOMMU-Gruppe = PCI-Passthrough möglich. Mein Intel Z690-Board hat USB-Controller in separater Gruppe 4, perfekt für dedizierten VM-Zugriff. Shared Groups erfordern Device-Passthrough.
Konfigurationsmatrix:
| Szenario | IOMMU-Gruppe | Empfehlung | Befehl |
|---|---|---|---|
| Audio-Workstation | Isoliert | PCI-Passthrough | qm set 100 -hostpci0 host=00:14.0,pcie=1 |
| Multi-VM-Setup | Shared | Device-Passthrough | qm set 100 -usb0 host=1234:5678 |
| Gaming-VM | Isoliert | PCI-Passthrough | qm set 100 -hostpci0 host=00:14.0,pcie=1 |
| Development | Shared | Device-Passthrough | qm set 100 -usb0 host=2341:0043 |
Systematische IOMMU-Diagnose erfolgt über find /sys/kernel/iommu_groups/ -type l | sort -V | grep 00:14.0 zur Gruppenerkennung. Beispiel-Output zeigt /sys/kernel/iommu_groups/4/devices/0000:00:14.0 für isolierte Gruppe 4. Shared Groups enthalten mehrere PCIe-Geräte: ls -la /sys/kernel/iommu_groups/1/devices/ zeigt 0000:00:14.0, 0000:00:16.0, 0000:00:1f.0 – hier ist nur Device-Passthrough möglich. Lösung für isolierte IOMMU-Gruppen: echo 'options vfio-pci ids=8086:a36d' >> /etc/modprobe.d/vfio.conf bindet USB-Controller an VFIO-Treiber für dedizierten VM-Zugriff.
ACPI-Wake-Events können USB-Passthrough blockieren, wenn Geräte im Standby-Modus verbleiben. Der /proc/acpi/wakeup zeigt aktive Wake-Quellen und deren Status. USB-Controller (EHCI/XHCI) bleiben oft aktiv und verhindern saubere Hardware-Übergabe an VMs.
# Aktuelle ACPI-Wake-Konfiguration anzeigen
cat /proc/acpi/wakeup
Device S-state Status Sysfs node
PWRB S4 *enabled platform:PNP0C0C:00
PCIE S4 *enabled pci:0000:00:1c.0
EHC1 S3 *enabled pci:0000:00:1d.0
EHC2 S3 *enabled pci:0000:00:1a.0
XHC S3 *enabled pci:0000:00:14.0
USB-Controller mit *enabled Status können VM-Passthrough stören. Deaktivierung über ACPI-Interface:
# USB 2.0 Controller (EHCI) Wake deaktivieren
echo 'EHCI' > /proc/acpi/wakeup
echo 'EHC1' > /proc/acpi/wakeup
echo 'EHC2' > /proc/acpi/wakeup
# USB 3.0 Controller (XHCI) Wake deaktivieren
echo 'XHCI' > /proc/acpi/wakeup
echo 'XHC' > /proc/acpi/wakeup
Kernel-Parameter acpi=off als Notfall-Alternative bei persistenten ACPI-Konflikten, deaktiviert aber komplettes Power-Management. Besser: acpi=noirq behält ACPI-Funktionen, deaktiviert nur IRQ-Routing.
Windows-spezifische USB-Passthrough Probleme
Windows-VMs zeigen spezifische USB-Passthrough-Fehler, die Linux-Gäste nicht betreffen. Device Manager Error Codes 43 und 10 sind häufigste Ursachen, entstehen durch Treiber-Signatur-Probleme und Windows-eigene USB-Power-Policies.
Windows USB-Treiber-Installation in VM:
# VM-Konfiguration für Windows USB-Passthrough
qm set 101 -usb0 "host=046d:c52b,usb3=1"
qm set 101 -ostype "win10"
qm set 101 -bios "ovmf"
Device Manager Error Code 43 – Treiber-Signatur:
Windows 10/11 blockiert unsignierte USB-Treiber standardmäßig. Lösung über Test-Signing-Modus:
# In Windows-VM als Administrator ausführen
bcdedit /set testsigning on
bcdedit /set nointegritychecks on
shutdown /r /t 0
Device Manager Error Code 10 – Ressourcen-Konflikt:
# Windows Device Manager - Geräte-Eigenschaften
# Ressourcen-Tab zeigt Konflikt-Details
# IRQ/DMA-Konflikte durch IOMMU-Gruppierung
Windows USB Selective Suspend deaktivieren:
# Registry-Einträge für USB-Power-Management
reg add "HKLM\SYSTEM\CurrentControlSet\Services\USB" /v DisableSelectiveSuspend /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\usbhub" /v DisableSelectiveSuspend /t REG_DWORD /d 1 /f
Windows-spezifische USB-Diagnose:
# PowerShell USB-Geräte-Status
Get-PnpDevice | Where-Object {$_.Class -eq "USB"} | Format-Table Name, Status, InstanceId
Name Status InstanceId
---- ------ ----------
Logitech USB Receiver OK USB\VID_046D&PID_C52B\12345678
Generic USB Hub Error USB\ROOT_HUB30\4&1234ABCD&0&0
Windows-VMs benötigen OVMF-BIOS für modernen USB-Support. Mein Logitech MX Master 3 funktionierte erst nach OVMF-Umstellung und Test-Signing-Aktivierung. SeaBIOS zeigt nur USB 1.1-Kompatibilität.
Hyper-V Enlightenments für USB-Performance:
# Proxmox VM-Konfiguration mit Hyper-V-Features
qm set 101 -cpu "host,flags=+hv_relaxed;+hv_spinlocks=0x1fff;+hv_vapic;+hv_time"
qm set 101 -machine "pc-q35-6.2,hv_ipi,hv_tlbflush"
Proxmox VE 8 unterstützt erweiterte USB 3.0-Parameter für bessere Windows-Kompatibilität. Der usb3=1-Parameter aktiviert xHCI-Controller-Emulation, während ältere Versionen nur EHCI unterstützten.
# Proxmox VE 8 USB 3.0 Konfiguration mit SuperSpeed
qm set 100 -usb0 "host=1234:5678,usb3=1"
qm set 100 -machine "pc-q35-7.2"
XHCI-Controller-Aktivierung erfordert Q35-Chipset. Ältere i440fx-Maschinen-Typen unterstützen nur USB 2.0-Passthrough. SuperSpeed-Geräte (5 Gbit/s) fallen auf High-Speed (480 Mbit/s) zurück ohne xHCI.
# Verifiziere USB 3.0-Controller in VM
qm monitor 100
(qemu) info usb
Device 0.2, Port 1, Speed 5000 Mb/s, Product 'USB3.0 Hub'
USB 2.0-Geräte an USB 3.0-Ports können Kompatibilitätsprobleme verursachen. Manche ältere Geräte erwarten EHCI-spezifische Timing-Parameter, die xHCI nicht identisch emuliert. Lösung: Separate USB 2.0-Controller für Legacy-Hardware.
Code 43 Hauptursachen und Windows-Registry-Fixes
Windows Error Code 43 entsteht primär durch drei Ursachen: Treiber-Signatur-Enforcement, USB-Power-Management-Konflikte und Hardware-Ressourcen-Zuordnung. Registry-Eingriffe lösen 80% der Code 43-Fälle bei USB-Passthrough.
Treiber-Signatur-Problem (Hauptursache):
# Test-Signing dauerhaft aktivieren
bcdedit /set testsigning on
bcdedit /set loadoptions DISABLE_INTEGRITY_CHECKS
USB-Selective-Suspend Registry-Deaktivierung:
# Komplette USB-Power-Management-Deaktivierung
reg add "HKLM\SYSTEM\CurrentControlSet\Control\usbflags" /v fid_D1Latency /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\usbflags" /v fid_D2Latency /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\usbflags" /v fid_D3Latency /t REG_DWORD /d 0 /f
USB-Hub-Power-Management deaktivieren:
# Registry-Schlüssel für USB-Root-Hub
reg add "HKLM\SYSTEM\CurrentControlSet\Enum\USB\ROOT_HUB30" /v DisableSelectiveSuspend /t REG_DWORD /d 1 /f /s
Device Manager Code 43 Reset-Sequenz:
# PowerShell Device-Neustart ohne Reboot
$device = Get-PnpDevice | Where-Object {$_.Status -eq "Error"}
Disable-PnpDevice -InstanceId $device.InstanceId -Confirm:$false
Start-Sleep -Seconds 3
Enable-PnpDevice -InstanceId $device.InstanceId -Confirm:$false
Code 43 verschwindet meist nach Test-Signing + Registry-Fixes. Mein Elgato Stream Deck zeigte Code 43 in Windows 11-VM, bis ich USB-Power-Management komplett deaktivierte. Danach sofortige Erkennung ohne Neustart.
Preisvergleich
| Produkt | smartkram | Fachhandel | Amazon | eBay |
|---|---|---|---|---|
| Logitech Unifying Receiver | — | cyberport DE ↗ | Amazon ↗ | eBay ↗ |
| SanDisk Cruzer Blade | — | cyberport DE ↗ | Amazon ↗ | eBay ↗ |
| Focusrite Scarlett 18i20 | — | — | Amazon ↗ | eBay ↗ |
| Arduino Uno R3 | smartkram ↗ | reichelt elektronik DE ↗ | Amazon ↗ | eBay ↗ |
| Dell Remote Access Controller 4 | — | — | Amazon ↗ | eBay ↗ |
| RME Babyface Pro | — | — | Amazon ↗ | eBay ↗ |
* Affiliate-Links – beim Kauf erhalten wir ggf. eine Provision.








Hinterlasse einen Kommentar
An der Diskussion beteiligen?Hinterlasse uns deinen Kommentar!