You are here
Converting a QEMU Image to a VirtualBox VDI
I use VirtualBox for hosting virtual machines on my laptop and received a Windows 2008R2 server image from a consultant as a compressed QEMU image. So how to convert the QEMU image to a VirtualBox VDI image?
Step#1: Convert QEMU image to raw image.
Starting with the file WindowsServer1-compressed.img (size: 5,172,887,552)
Convert the QEMU image to a raw/dd image using the qemu-img utility.
emu-img convert WindowsServer1-compressed.img -O raw WindowsServer1.raw
I now have the file WindowsServer1.raw (size: 21,474,836,480)
Step#2: Convert the RAW image into a VDI image using the VBoxManage tool.
VBoxManage convertfromraw WindowsServer1.raw --format vdi WindowsServer1.vdi
Converting from raw image file="WindowsServer1.raw" to file="WindowsServer1.vdi"...
Creating dynamic image with size 21474836480 bytes (20480MB)...
This takes a few minutes, but finally I have the file WindowsServer1.vdi (size: 14,591,983,616)
Step#3: Compact the image
Smaller images a better! It is likely the image is already compact; however this also doubles as an integrity check.
VBoxManage modifyhd WindowsServer1.vdi --compact
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Sure enough the file is the same size as when we started (size: 14,591,983,616). Upside is the compact operation went through the entire image without any errors.
Step#4: Cleanup and make a working copy.
Now MAKE A COPY of that converted file and use that for testing. Set the original as immutable [chattr +i] to prevent that being used on accident. I do not want to waste time converting the original image again.
Throw away the intermediate raw image and compress the image we started with for archive purposes.
rm WindowsServer1.raw
cp WindowsServer1.vdi WindowsServer1.SCRATCH.vdi
sudo chattr +i WindowsServer1.vdi
bzip2 -9 WindowsServer1-compressed.img
The files at the end:
File | Size |
---|---|
WindowsServer1-compressed.img.bz2 | 5,102,043,940 |
WindowsServer1.SCRATCH.vdi | 14,591,983,616 |
WindowsServer1.vdi | 14,591,983,616 |
Step#5
Generate a new UUID for the scratch image. This is necessary anytime a disk image is duplicated. Otherwise you risk errors like "Cannot register the hard disk '/archive/WindowsServer1.SCRATCH.vdi' {6ac7b91f-51b6-4e61-aa25-8815703fb4d7} because a hard disk '/archive/WindowsServer1.vdi' with UUID {6ac7b91f-51b6-4e61-aa25-8815703fb4d7} already exists" as you move images around.
VBoxManage internalcommands sethduuid WindowsServer1.SCRATCH.vdi
UUID changed to: ab9aa5e0-45e9-43eb-b235-218b6341aca9
Generating a unique UUID guarantees that VirtualBox is aware that these are distinct disk images.
Versions: VirtualBox 5.1.12, QEMU Tools 2.6.2. On openSUSE LEAP 42.2 the qemu-img utility is provided by the qemu-img package.
- Log in to post comments