You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让QEMU虚拟机中的USB设备被识别为可移除设备?

问题:QEMU虚拟机中USB存储设备无/sys/class/block/xxx/removable文件

我正在编写一个检测可移除驱动器的程序,逻辑是检查/sys/class/block目录下是否存在removable文件且内容非零。比如物理机上,SATA硬盘对应的/sys/class/block/sdc/removable内容为0,USB启动盘的/sys/class/block/sdd/removable内容为1。

现在在QEMU虚拟机(内核版本6.1.14,已禁用CONFIG_SYSFS_DEPRECATED)中测试,通过以下命令添加了USB驱动器,/sys/class/block下能看到对应设备条目,设备也能正常挂载/卸载,但就是没有removable文件:

kvm -bios /usr/share/qemu/OVMF.fd \
    -net none \
    -drive file=root.img,format=raw \
    -m 1G -cpu host -smp 2 \
    -drive if=none,id=stick,format=raw,file=usb.img \
    -device nec-usb-xhci,id=xhci \
    -device usb-storage,bus=xhci.0,drive=stick

请问遗漏了什么配置?


解决方案
  • 添加QEMU设备的可移除属性:默认情况下QEMU的usb-storage设备不会标记为可移除,需要在设备参数里显式指定removable=on,修改后的命令如下:

    kvm -bios /usr/share/qemu/OVMF.fd \
        -net none \
        -drive file=root.img,format=raw \
        -m 1G -cpu host -smp 2 \
        -drive if=none,id=stick,format=raw,file=usb.img \
        -device nec-usb-xhci,id=xhci \
        -device usb-storage,bus=xhci.0,drive=stick,removable=on
    

    这个参数会让QEMU向内核报告该设备为可移除类型,内核会自动在sysfs中生成removable文件。

  • 确认内核配置项:确保内核已启用以下配置:

    • CONFIG_USB_STORAGE:USB存储驱动支持
    • CONFIG_SCSI:USB存储依赖SCSI子系统
    • CONFIG_BLOCK:块设备支持(默认一般已开启)
    • CONFIG_SYSFS:sysfs文件系统支持(你已经禁用了CONFIG_SYSFS_DEPRECATED,这个应该已开启)
  • 验证设备属性:启动虚拟机后,也可以通过udevadm info -q property -n /dev/sdX(替换sdX为你的USB设备)查看ID_REMOVABLE属性,确认是否被正确识别为可移除设备。

内容的提问来源于stack exchange,提问作者hochl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:42:36