首页/云/云平台与虚拟化速查/USB 设备直通(加密狗/采集卡)
虚拟化操作94 条

USB 设备直通(加密狗/采集卡)

USB 直通把物理 USB 设备交给 guest:用 lsusb 拿厂商与产品 ID,写成 usb hostdev;USB 3.0 设备需要 qemu-xhci 控制器配合。

云平台与虚拟化速查云更新于 2026-10-13

USB 设备直通

USB 直通把物理 USB 设备整个交给某台 guest 使用,宿主侧不再占用它。做法是用 lsusb 拿到设备的厂商与产品编号,写成 usb 类型的 hostdev 段落;高版本 USB 设备还需要对应的控制器型号配合,否则只能降速运行或识别不到。常见需求来自加密狗、采集卡、串口转换器这类必须在真实硬件上工作的外设。

基本信息

识别设备lsusb 输出中的 idVendor:idProduct 即匹配依据
控制器域定义里加 USB 控制器段落,USB 3.0 设备需对应型号的控制器
热插拔attach-device / detach-device 配一段 device XML 即可动态挂载
持久化managed 属性决定是否随域启动自动重挂
匹配方式厂商加产品编号较稳定;端口编号在重插后会变化

典型使用场景

  • 软件加密狗:授权绑定的业务系统必须在虚机里运行
  • 视频采集卡:需要真实设备才能采集与推流
  • 串口与调试设备:USB 转串口设备接入虚机做设备调试
  • USB 存储与读卡器:向隔离环境导入数据
  • 外设测试:验证驱动或应用在真实外设下的行为

hostdev USB 片段与热挂载

hostdev USB 片段与热挂载
lsusb                                  # 确认厂商与产品编号
# 域 XML 片段:
# <hostdev mode='subsystem' type='usb' managed='yes'>
#   <source>
#     <vendor id='0x1a86'/>
#     <product id='0x7523'/>
#   </source>
# </hostdev>
virsh attach-device vm1 usb-dongle.xml --live   # 动态挂载

常见问题

现象常见原因处理方向
guest 里看不到设备控制器型号不匹配按设备速率加对应 USB 控制器
重启后设备没挂上未使用自动重挂方式在定义中声明或改用持久挂载
挂错设备只用厂商与产品编号匹配同型号设备需补充端口信息
传输速度偏慢控制器能力不足确认控制器型号与设备速率匹配
USB 设备重插后端口号可能变化:用厂商与产品编号匹配比用端口稳定,同一型号有多台设备时再额外用地址区分。
直通期间宿主看不到该设备:依赖它做授权校验或运维的服务要一并评估,别把宿主自身的必要外设直通出去。
设备在宿主与虚机之间来回切换需要先卸载再挂载,热插拔频繁的场景建议固定归属,减少现场操作出错的机会。

易错点

  • 同型号多台设备只用 vendor/product 匹配:可能挂错设备,需加 address 区分
  • 宿主侧进程仍占用设备时直通失败,需先停掉占用方
  • 缺 USB 控制器段落,USB 3.0 设备只能降速或根本识别不到
  • 加密狗直通后宿主授权服务一并失效,重启后业务起不来

数据来源与参考

  • libvirt 文档:USB 直通
  • virsh 手册:attach-device
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌