Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 002: ID 03f0:1027 Hewlett-Packard Virtual keyboard and mouse
Bus 001 Device 002: ID 058f:6387 Alcor Micro Corp. Flash Drive
Tue Dec 16 12:45:21 CST 2014
输出的信息里,每一行都对应一个 USB 设备或根集线器。比如 ID 058f:6387 那个就是我们要给虚拟机用的 U 盘,厂商 ID 是 0x058f,产品 ID 是 0x6387,总线号 1,设备号 2。
第二步:把需要的 USB 设备传给虚拟机
这一步可以通过 virt-manager 的图形界面添加 USB 设备,或者直接编辑虚拟机的 XML 配置文件。核心配置段如下:
复制代码
这里指定了厂商 ID、产品 ID 以及总线、设备号,告诉 KVM 把对应的 USB 设备直通给虚拟机。配置完成后重启虚拟机或动态热插拔即可生效。
第三步:测试效果
配置完成后,插上 U 盘,看看虚拟机里能不能正常识别。结果发现一个挺有意思的现象:在 CentOS 6.6 宿主机上的 Windows 7 虚拟机里,U 盘死活识别不出来。
最开始还以为是 Windows 7 的驱动问题,试了好几种驱动方案,问题依旧。但有意思的是,如果虚拟机也是 CentOS 6.6,同一个 U 盘插上去就能直接挂载使用,这说明问题可能出在 Windows 虚拟机对 USB 控制器类型的兼容性上。
后来换到 Fedora 21 上测试同一台 Windows 7 虚拟机,U 盘插上去就能直接识别,完全不需要额外配置。
甚至不需要手动挂载 USB 设备,虚拟机里直接就能看到新硬件。推测和 Fedora 上集成的 USB 转发器(比如 usbredir)版本有关——新版本内核和工具链在 USB 直通支持上做了不少改进。
所以如果遇到 CentOS 6 之类老版本系统上 Windows 虚拟机 USB 无法识别的情况,不妨换个新一些的宿主机发行版试试,或者升级一下相关的 USB 后端服务。这个坑,踩过才知道。