创造一个虚假的现实:使用虚拟块设备进行测试

Creating a Fake Reality: Testing Using Virtual Block Devices

我正在编写一个程序,用于在 linux 上编辑块设备(/dev/sda 等)的分区。我已经让程序运行得相当好,并且我使用模拟对我的代码进行了单元测试(在 中完成),现在我想在实际设备上测试我的代码。

代码将分区 table 从一个驱动器复制到另一个驱动器,如果需要,可能会缩小分区 table。之后,它将文件从一个驱动器复制到另一个驱动器。所以我想使用各种相对大小的驱动器来测试我的驱动器。最后它使新驱动器 bootable,本质上是克隆 device.Unfortunately,我没有正确大小的物理驱动器来在合理的时间限制内测试这个程序。我正在使用python编写程序。

我一直在测试使用 .img(使用 dd 创建)文件和各种工具来安装它们,但显然 VirtualBox 不能 运行 在 VM 中使用这些文件,所以我不能真正测试他们是否启动。我还尝试使用 qemu-nbd 挂载 .vdi 文件,但 sgdisk 和类似工具可以编辑这些文件上的分区。我什至尝试挂载 .img 文件并使用 convertfromraw 命令尝试以这种方式挂载。但是,grub 无法正常启动并且无法读取硬盘驱动器上的文件系统。 (输入 ls (hd0) 返回 No such filesystem...

我可以使用什么来制作(几乎)任何大小的虚拟磁盘,我可以在我的 Linux 系统上编辑它然后从虚拟盒启动?

请注意,我并不是要进行单元测试。这些并不是自动测试,因此它不一定是计算机可以轻松完成的事情。

想通了。

最终使用 .img 文件效果最好。为了创建您的 img 文件,请使用 dd.

dd if=/dev/zero of=my-test.img bs=1M count=500 #Creates a 500 MB image file

使用 losetup 挂载文件

sudo losetup /dev/loop0 my-test.img #Mounts on loop device loop0
sudo partprobe /dev/loop0 #creates block files for any partitions on the image

应用你想要的任何命令;使用 sgdisk 编辑分区,甚至挂载分区和编辑数据。如果您希望您的测试驱动器可启动,请务必应用正确的引导加载程序命令(grub-install 等)。然后要使其在 VirtualBox 中可用,请使用以下命令。

VBoxManage convertdd my-test.img my-test.vdi 

这会将文件转换为 VirtualBox 可用的文件。如果文件不是由 dd 创建的,您可能需要使用其他 VBoxManage 命令将其转换为原始类型。

最后,使用 .vdi 文件在 VirtualBox 中简单地创建一个虚拟机并进行测试。