我正在编写一个在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系统上编辑然后从虚拟机启动?
请注意,我不是要进行单元测试。这些并不是自动测试,因此它不一定是计算机可以轻松完成的事情。
答案 0 :(得分:1)
想出来。
使用.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中创建一个虚拟机并测试你内心的内容。