这是最直接的方法,把整个 USB 硬盘当作物理设备挂给虚拟机。
确认 USB 设备信息
lsusb输出类似:
Bus 002 Device 004: ID 1234:5678 SanDisk Corp.记下 Bus 和 Device,或者用 /dev/disk/by-id/ 也可以定位。
编辑虚拟机 XML
virsh edit k10在 <devices> 标签内添加:
<hostdev mode='subsystem' type='usb' managed='yes'>
<source>
<vendor id='0x1234'/>
<product id='0x5678'/>
</source>
</hostdev>
注意:vendor 和 product ID 用 lsusb 查到的实际值替换。
重启虚拟机
virsh shutdown k10 virsh start k10虚拟机中应该能看到这个 USB 硬盘(lsblk 或 fdisk -l)。
如果报权限错误解决
创建 udev 规则文件
sudo vi /etc/udev/rules.d/99-usb-passthrough.rules
添加以下内容(针对你的硬盘)
SUBSYSTEM=="usb", ATTR{idVendor}=="1058", ATTR{idProduct}=="25ed", MODE="0666"
重载 udev 规则并重新插拔 USB
sudo udevadm control --reload sudo udevadm trigger
确认权限
ls -l /dev/bus/usb/002/002
应该显示 crw-rw-rw-,普通用户就可以访问了。
重启虚拟机
virsh start k10
# 如果有挂载点,先卸载
sudo umount /dev/sdX1
# 或者通过挂载点卸载
sudo umount /mnt/your_mount_point
# 如果设备繁忙,可以强制卸载
sudo umount -l /dev/sdX1 # 懒卸载
# 或
sudo fuser -km /mnt/your_mount_point # 终止占用进程后再卸载
# 编辑虚拟机配置 virsh edit k10
<hostdev mode='subsystem' type='usb' managed='yes'>
<source>
<vendor id='0x1234'/>
<product id='0x5678'/>
</source>
</hostdev>
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!
