【问题标题】:Creating a Fake Reality: Testing Using Virtual Block Devices创建假现实:使用虚拟块设备进行测试
【发布时间】:2017-03-10 21:05:29
【问题描述】:

我正在编写一个程序,用于在 linux 上编辑块设备(/dev/sda 等)的分区。我已经让程序运行得很好,并且我已经使用模拟对我的代码进行了单元测试(正如在 previous question of mine 中所做的那样),现在我想在实际设备上测试我的代码。

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

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

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

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

【问题讨论】:

    标签: linux testing device


    【解决方案1】:

    想通了。

    最终使用 .img 文件效果最佳。要创建您的 img 文件,请使用 dd

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

    使用 losttup 挂载文件

    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 中简单地创建一个虚拟机并测试你的内容。

    【讨论】:

      猜你喜欢
      • 2012-12-26
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 2011-09-24
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多