我知道,在 Linux 中,循环设备是一种伪设备,它使计算机文件可以作为块设备访问。我需要一些非常类似的东西(或相同的东西?)来将文件用作 VirtualBox USB 设备。
我有一台 Linux 主机和一台 Linux 客户机。我的目标是在虚拟机中测试 Easy2Boot、UNetbootin、Ventoy 等工具。
最简单的情况是将真正的 USB 设备连接到主机,并将其用作客户机中的 USB 设备。这当然可行。
然而,我的问题是,由于我必须使用速度慢的真实 USB 进行几十次测试,因此我宁愿使用速度快的假 USB 进行相同的测试。
这个快速的假 USB 只不过是我电脑内置 SSD 驱动器中的一个文件。虚拟机也位于这个快速的 SSD 磁盘上。
答案1
答案是,使用 VirtualBox,这是不可能的,如评论中所述在 VirtualBox 中将文件用作 USB 设备。 但是,其他虚拟机管理程序(例如 QEMU)也可以实现。
在这种特定情况下,创建qcow2
虚拟磁盘并virt-manager
在其上安装我选择的 Linux 系统(例如 Linux Mint 21)后,我可以使用以下命令创建包含伪 USB 设备的文件:
fallocate -l 8G ./rawUsbDisk.img
我可以在主机上创建一个文件夹,并将其与 Samba 共享,以便客户机可以访问它(我需要将 ISO 文件放在那里进行测试)。QEMU 中的 SAMBA 共享说明如下https://techpiezo.com/linux/shared-folder-in-qemu-virtual-machine-linux/。
之后,我可以将qcow2
文件移动到主文件夹,以便与 QEMU 一起使用,而不是virt-manager
。
这是回答我的问题的命令:
/usr/bin/qemu-system-x86_64 -hda LinuxMint21.qcow2 -m 4096 -enable-kvm \
-smp 2 \
-cpu host \
-net nic -net user,smb=/home/francesco/Condivisione \
-device virtio-gpu-pci \
-drive if=none,id=usbstick,format=raw,file=./rawUsbDisk.img \
-usb \
-device usb-ehci,id=ehci \
-device usb-tablet,bus=usb-bus.0 \
-device usb-storage,bus=ehci.0,drive=usbstick \
-boot menu=on
该-boot menu=on
选项允许我在启动虚拟机时选择是从虚拟硬盘还是伪 USB 设备启动:
以下选项适用于假 USB,解释如下https://qemu.readthedocs.io/en/latest/system/devices/usb.html:
-drive if=none,id=usbstick,format=raw,file=./rawUsbDisk.img \
-usb \
-device usb-ehci,id=ehci \
-device usb-tablet,bus=usb-bus.0 \
-device usb-storage,bus=ehci.0,drive=usbstick
这样,在虚拟机内部,Gparted 就将其视为/dev/sdb
一个 USB 磁盘:
创建 msdos 分区表和单个 FAT32 分区后,虚拟机可以正确识别假 USB 驱动器:
我准备用 Unetbootin 和类似工具做尽可能多的测试:
运行 Unetbootin 或其他类似工具后,我可以重新启动虚拟机并从 USB 启动:
结果是,我可以在几分钟内运行一次测试,而不是由于我的硬件 USB 速度很慢而花半个小时或更长时间。