创造一个虚假的现实:使用虚拟块设备进行测试
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 中简单地创建一个虚拟机并进行测试。
我正在编写一个程序,用于在 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 中简单地创建一个虚拟机并进行测试。