How to resize VirtualBox VMDK Hard disk size

This post is due to lack of clear instructions available where I searched for. These are notes which I used to perform a hard disk extension in Ubuntu host for a Windows Vista is guest/vm.

Summary of steps:

Step 1: Convert vmdk file to vdi (if you are using vmdk as hard drive)
Step 2: Resize vdi file to required hard drive size
Step 3: Convert the resized vdi file to a new vmdk file (so that the original file serves as backup)
Step 4: Remove the attached vmdk file in vm and add the newly converted vmdk file.
Step 5: If you are running a Windows OS which supports Disk Management > Extend Volume then the guest OS will recognize the size of extended hard disk.
Step 6: Remove the original vmdk file if everything is fine.

Steps and commands:

The commands which I used are as follows:

Step 1: Convert vmdk to vdi

VBoxManage clonehd "WinVistaDev-disk2.vmdk" "cloned.vdi" --format vdi

Step 2: Resize vdi file:

VBoxManage modifyhd "cloned.vdi" --resize 40000

The above will resize the existing vdi to 40GB from existing. The size must be specified in MB.

If you are getting the following error:
0%...
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage: error: Resize hard disk operation for this format is not implemented yet!

Run this command:
VBoxManage showhdinfo cloned.vdi 

The following information will be listed:
UUID:               a8cxxxxx-5xx-4xx-axxx-xxxxxxx
Parent UUID:    base
State:                 created
Type:                 normal (base)
Location:           /home/anantha/VMs/cloned.vdi
Storage format: VMDK
Format variant: dynamic default
Capacity:          25600 MBytes
Size on disk:    18915 MBytes

You have probably forgotten the --format vdi while cloning VMDK to VDI. If that is the case delete the VDI file and recreate the VDI with the proper command mentioned in Step 1.

Step 3: Convert VDI to VMDK back

VBoxManage clonehd "cloned.vdi" "WinVistaDev-disk3.vmdk" --format vmdk

Step 4: Remove the attached VMDK file in VM and add the newly converted VMDK file.

Click Settings of the VM guest, select Storage. Remove the existing attachment and add the new VMDK file that is created.

Step 5: If you are running a Windows OS which supports Disk Management > Extend Volume then the guest OS will recognize the size of extended hard disk.

Within Windows guest open Device Management, you must see the newly available free space as unallocated. Right click the drive and select Extend Volume. Save and restart the guest.

Check if guest is reporting the new hard disk size.

Step 6: Remove the original VMDK file if everything is fine.

Remove the old VMDK file.