Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Is is possible to convert a .vdi file into a .iso that can be burned to a cd or dvd and make it like an installer. Or Is it possible to convert virtual machines to physical environments?

share|improve this question
1  
This answer on AskUbuntu.com probably applies to a lot of environments running on Linux host machines: askubuntu.com/a/32506/31592 –  b.long Oct 11 '12 at 2:42
add comment

4 Answers

up vote 28 down vote accepted

Yes, and no.

You can convert a VDI into a disk image with the VBoxManage tool. This command clones a registered virtual disk image to another image file. If you want to convert your virtual disk to another format, this is the official VirtualBox tool to use[*].

VBoxManage clonehd file.vdi output.img --format RAW
  • If you're using a dynamic VDI, and you have an older version of VirtualBox, clonehd may not operate properly. VBoxManage's internalcommands tool includes converttoraw, which can convert a dynamic VDI into a raw disk image (source)[+].

VBoxManage internalcommands converttoraw file.vdi output.img

But... that output IMG file isn't an ISO image, and the OS that's installed will not be configured to run from a bootable CD/DVD. You can "burn" (write) the IMG onto a hard drive, and it might boot on bare hardware (eg not in a virtual machine). But it might not, because the OS installed on that IMG is expecting to see the virtual hardware that VirtualBox provides, and you're booting it on real hardware that it isn't expecting.

Some versions of Windows do not handle this situation well; some Linux distributions do. It is sometimes possible to configure an OS (beforehand or afterwards) to migrate it from one environment to the other like this, but specific steps depend completely on the OS being migrated.


On Windows, you may need to specify the full path to the program:

"C:\Program Files\Sun\VirtualBox\VBoxManage.exe" [...]

Add C:\Program Files\Sun\VirtualBox to your PATH to use the short version.


[*] I'm assuming the "--format RAW" option will convert to a standard disk image, as if you'd used the dd command on a physical harddrive. But frankly, I haven't found any documentation that backs this up, so be aware this may not be correct.

[+] I've just tested both commands under VirtualBox 3.1.2. Both output files are identical according to md5sum, but I haven't fully tested the output files.

See also the "All about VDIs" tutorial at the VirtualBox forums.

share|improve this answer
    
Thanks for the answer. I'll try this when I have time –  Ieyasu Sawada Feb 28 '10 at 7:06
    
What about the size of the VDI? Does that matter? Let's say the VDI size is 20GB and the actually HDD size is 200GB... What would happen? –  Pwnna Dec 12 '11 at 17:49
    
That first method "clonehd" seems awefully slow. But the second worked a treat. –  Matt H Sep 27 '12 at 23:16
add comment

The answer is a definite yes, in case your host and guest system is Linux. It's done with the packages qemu and TKLPatch. You can use both VDI or VMDK files.

Read more:

share|improve this answer
1  
+1 "definite" with the caveat "..as long as your guest is linux". and their (your?) solution relies on some TurnKey Linux tools. but the procedure looks sound. (welcome to Super User!) –  quack quixote Feb 28 '10 at 10:54
add comment

If your vdi file contains partitions and you want to extract only one of them use the following:

First, as quack quixote said before, convert the vdi file to a raw image file:

# VBoxManage clonehd file.vdi file.raw --format RAW

Then set up a loop device for the image:

# loopdev=$(losetup -s -f file.raw)

Use kpartx to create devices for each partition in the raw file:

# apt-get install kpartx
# kpartx -a $loopdev

See which devices we have now. In this example, there's only one device as there's only one partition in the raw image:

# ls /dev/mapper/loop*
/dev/mapper/loop0p1

Now mount it to verify that all works properly:

# mkdir /mnt/part1
# mount /dev/mapper/loop0p1 /mnt/part1
# ls /mnt/part1
# umount /mnt/part1

Use dd to copy the partition contents to a another target partition:

# dd if=/dev/mapper/loop0p1 of=/dev/sda2 bs=1M

After you're done remove the device mappings again:

# kpartx -d file.raw
share|improve this answer
add comment

I do this process in a very fast, with just two lines of command in Linux:

#VBoxManage internalcommands converttoraw your_disk_virtual.vmdk your_disk_virtual.img

OR

#VBoxManage internalcommands converttoraw your_disk_virtual.vdi your_disk_virtual.img

# mv your_disk_virtual.img your_disk_virtual.iso

My full article: http://www.previsioni.com.br/jailsonjan/?p=389

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.