VirtualBox Best Hard disk

Be able to use dynamic sizing

VDI, VMDK, and VHD all support dynamically allocated sizing. VMDK has an additional capability of splitting the storage file into files less than 2 GB each, which is useful if your file system has a small file size limit.

Be able to have snapshots

All four formats support snapshots on VirtualBox.

Be able to move my virtual machine to another OS or even another free virtualization solution with minimal effort (probably something that would run fine on Ubuntu).

VDI is the native format of VirtualBox. I didn’t search for any other software that supports this format.

VMDK is developed by and for VMWare, but Sun xVM, QEMU, VirtualBox, SUSE Studio, and .NET DiscUtils also support it. (This format might be the most apt for you because you want virtualization software that would run fine on Ubuntu.)

VHD is the native format of Microsoft Virtual PC. This is a format that is popular with Microsoft products.


The format should not affect performance, or at least, performance impacts are negligible.

The factors that influence performance are:

Your physical device limitations (much more noticeable on a hard disk drive than a solid-state drive… Why?)
expanding a dynamically allocated virtual disk drive (write operations are slower as the virtual disk expands, but once it’s large enough, expanding should happen less)
virtualization technology (hardware vs. software; hardware virtualization helps VirtualBox and improves the speed of virtual operating systems)
the fact that you are running a virtual operating system. Performance is always slower than running an operating system on the host because of the virtualization process.

VMDK seems to offer the panacea I’ve been searching for in terms of incremental backups: I no longer have to back up an enormous, monolithinc VDI for a single bit change in the guest.

VDI, is the native format of VirtualBox;
VMDK (VMWare format) will increase compatibility with other virtual machine software.

VirtualBox will run fine on Ubuntu, so if the goal is Windows/Ubuntu interoperability, VDI would be a perfectly valid choice.

Both formats will fulfill your requirements.
As for the other two, VHD is a Microsoft-developed format, and HDD is an Apple-developed format; these are both proprietarily-licensed, so limit cross-platform support; I wouldn’t recommend them.

However a more universal option might be to use the VirtualBox File/Export function to create an “Open Virtualization Appliance” .ova file that can then be imported into VMware. With that approach, you can port to any virtualization system that supports .ova without caring what disk image format you use in VirtualBox.

If you need to export from the same VM at regular intervals, e.g. every day, that could be a pain. But if you only move to a different technology occasionally, it should be fine.

If you have a .vdi file already, You can test whether this works without having to create a new virtual machine. Export it to a .ova, then try importing with vmware.

How to migrate existing Windows installations to VirtualBox

Scaricale il file da Drive nella cartella Virtualbox e seguire le istruzioni sotto.

Windows installations, unlike Linux, cannot easily be moved from one hardware to another. This is not just due to Microsoft’s activation mechanism but the fact that the installed kernel and drivers depend on the actual hardware.

This document explains the common pitfalls and how to workaround these. We assume that either a physical Windows installation or a VMware image is the source of migration. It is also assumed that a suitable virtual disk image (either VDI or VMDK for VirtualBox >= 1.4) is already present.

There’s a step by step description below.


The hardware dependent portion of the Windows kernel is dubbed “Hardware Abstraction Layer” (HAL). While hardware vendor specific HALs have become very rare, there are still a number of HALs shipped by Microsoft. Here are the most common HALs (for more information, refer to this article:

  • Hal.dll (Standard PC)
  • Halacpi.dll (ACPI HAL)
  • Halaacpi.dll (ACPI HAL with IO APIC)

If you perform a Windows installation with default settings in VirtualBox, Halacpi.dll will be chosen as VirtualBox enables ACPI by default but disables the IO APIC by default. A standard installation on a modern physical PC or VMware will usually result in Halaacpi.dll being chosen as most systems nowadays have an IO APIC and VMware chose to virtualize it by default (VirtualBox disables the IO APIC because it is more expensive to virtualize than a standard PIC). So as a first step, you either have to enable IO APIC support in VirtualBox or replace the HAL. Replacing the HAL can be done by booting the VM from the Windows CD and performing a repair installation.

Hard Disk Support

For reasons we don’t understand, Windows memorizes which IDE/ATA controller it was installed on and fails to boot in case the controller changes. This is very annoying because you will run into this problem with basically all migrated images. The solution here is to perform several modifications to the Windows registry. This can be done while the installation is still running on the original system because all it does is relax the IDE checks. Therefore the installation will continue to work on the original system after the modification. The easiest way is to use the excellent MergeIDE Download utility from the German c’t computer magazine. Alternatively, instructions in Microsoft’s knowledge base article can be followed:

agp440.sys / intelppm.sys

There are a few Windows device drivers that does not play nice on VirtualBox’ hardware. Many physical PC systems (and VMware) have a AGP graphics bus which will cause agp440.sys to be installed. VirtualBox’ virtual graphics card is on the PCI bus and the driver will cause a system crash. The most correct approach is to boot the recovery console from the Windows installation CD and disable this service. However, it is also possible to just rename/delete agp440.sys the C:\Windows\SYSTEM32\drivers directory. Here is a knowledge base article containing more information:

A similar problem may exist with intelppm.sys, which can also cause a hang of the guest OS.

Step By Step Instructions For Windows XP

This should work for Win2k Vista and Windows 7 as well, but it’s untested.

  1. Run the MergeIDE utility as mentioned above on existing windows machine.
  2. Shut down windows machine.
  3. Either pull the drive from the windows machine or copy the data with a low level image tool (like dd) to a USB drive or other removable media. If making an image, DO NOT image just the partition, this will not work!
  4. Use VBoxMange convertfromfaw to convert the image or to copy from the drive you pulled from the windows machine.
    1. If you are converting from the image, the syntax is just
      VBoxManage convertfromraw ImageFile.dd OutputFile.vdi
    2. If you are converting from the drive, you need to use
      cat /dev/sdg | VBoxManage convertfromraw stdin OutPutFile.vdi NUMBEROFBYTES

      Note, if you use fdisk -l in Linux you can see how many bytes each drive is to supply this parameter. Example:

      # fdisk -l /dev/sda
      Disk /dev/sda: 1500.3 GB, 1500301910016 bytes

      To determine the same information on a Mac OS X host, you do

      # diskutil list
      # diskutil info /dev/disk0

      to list available disks and to show the number of bytes under Total Size:.

  5. Then use the media manager in VirtualBox to add the newly converted drive.
  6. Make a new virtual machine, using the drive you just added with the media manager.
  7. Once it is created, go in and turn on “Enable IO APIC”, select the # of processors you want etc.
  8. Try to boot the new virtual machine. It may “just work”, or you may get a BSOD. If it just works install guest additions and you are done. Depending on your license you might need to re-activate Windows.
  9. If it did not work, and you got a BSOD. Shutdown the virtual machine and boot up from a windows CD. Go through until you get to the select a partition, select the existing partition, and choose “repair”. It will basically reinstall windows and configure it for your new hardware (virtual hardware).
  10. Reinstall patches (Service packs) and updates.
  11. Install guest additions