2016-10-28 121 views
0

我正在編寫一個程序,用於在Linux上編輯塊設備(/ dev/sda等)的分區。我已經讓程序運行得很好,並且我有單元使用mocks測試了我的代碼(正如在previous question of mine中一樣),現在我想在實際設備上測試我的代碼。創建虛擬現實:使用虛擬塊設備進行測試

該代碼將一個分區表從一個驅動器複製到另一個驅動器,如果需要可能會縮小分區表。之後,它將文件從一個驅動器複製到另一個驅動器。所以我想用各種相對大小的驅動器來測試我的驅動器。最後,它使新驅動器可啓動,基本上克隆設備。遺憾的是,我沒有正確尺寸的物理驅動器在合理的時間限制內測試該程序。我正在使用python編寫程序。我一直在使用.img(創建使用dd)文件和各種工具來測試它們,但顯然VirtualBox無法在虛擬機中運行它們,所以我無法真正測試它們是否啓動。我也嘗試使用qemu-nbd安裝.vdi文件,但sddisk和類似的工具可以在這些文件上編輯分區。我甚至嘗試安裝.img文件並使用convertfromraw命令嘗試以這種方式安裝。但是,grub無法正常啓動,無法讀取硬盤上的文件系統。 (打字ls (hd0)返回No such filesystem...

我可以使用什麼來製作(實際上)任何大小的虛擬磁盤,我可以在我的Linux系統上編輯然後從虛擬盒啓動?

請注意,我並非試圖進行單元測試。這些並不是爲了自動測試,因此它不一定是電腦自己可以輕鬆完成的事情。

回答

0

想通了。

使用.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中簡單地創建一個虛擬機並測試您的心臟內容。