29

I see here How do I increase the hard disk size of the virtual machine.

It should work with a command like

VBoxManage modifyhd xp.vdi --resize 2000

When the VDI has a fixed size you can get this error:

~/VirtualBox VMs/xp$ VBoxManage modifyhd xp.vdi --resize 2000
0%...
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage: error: Resize hard disk operation for this format is not implemented yet!

The discusion and solution to that is here.

But I get that error while my VDI is dynamic

~/VirtualBox VMs/xp$ VBoxManage showhdinfo xp.vdi
UUID:           8880dc58-cd0c-4ffb-a583-f8dd50eda98e
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       /home/cip/VirtualBox VMs/xp/xp.vdi
Storage format: VDI
Format variant: dynamic default
Capacity:       8192 MBytes
Size on disk:   4693 MBytes
In use by VMs:  xp (UUID: e2b70963-3c26-41cf-88f6-4e03ca721e2d)

Why is that?

  • same problem here with Ubuntu 16.04LTS and dynamic vdi. very strange – Luckyrings Dec 31 '17 at 14:42
26

To use VBoxManage modifyhd we have the following caveats:

  • Drives need to be in .VDI or .VHD format.
  • Drives must be in dynamic format, not fixed (a fixed disk can be converted to dynamic by creating a clone).
  • Drive size will only affect the logical size, not the physical size.
  • Shrinking a drive to equal or below its physical size is not possible.
  • For shrinking the physical size we have to fill unused drive space with 0.
  • A Windows VDI may have to be defragmented before shrinking its physical size.

In the example above it was tried to resize a dynamic disk with a physical size of 4693 MB to 2000 MB, which is not possible. Hence the error.

  • 1
    I tripped here too. what a pain. – nicolas Feb 24 '16 at 9:17
  • 2
    To modify drives in fixed format , follow the answer by @ripper234 – Sharun Dec 12 '16 at 12:37
  • check my answer it has all the details that you need and I can certify that it works – Mauricio Gracia Gutierrez Jun 6 '18 at 3:28
  • I created this image over two years ago, I had long since forgotten it was a fixed size and not dynamic. Reading it in your answer reminded me. I've spent over an hour trying to work out why I couldn't do this :(... Thanks – Madivad Jun 25 '18 at 16:46
  • Thanks, this helped. For linux don't forget to run pvresize command to take that space into use for linux – Maksim Luzik Sep 6 at 11:58
24

This workaround worked for me:

  1. Shutdown the machine
  2. Create a new drive via the admin interface with the size you want
  3. Use VBoxManage clonemedium with the --existing flag

    VBoxManage clonemedium <source-guid> <destinatin-guid> --existing
    

Note: Now the new disk will be having the excess space as unallocated, and you will need to use gparted to extend the size to maximum.

Not sure why the VirtualBox guys couldn't use the above to implement this instead of throwing VBOX_E_NOT_SUPPORTED... at least link to this :)

  • 1
    How could i allocate the excess space on windows? – Ken Mar 27 '17 at 13:36
  • 4
    @Ken not sure if you figured it out; Start -> Run -> diskmgmt.msc, right click on C: (or whatever the primary drive is) and choose extend. – Trent Apr 20 '17 at 2:12
  • 2
    this helped. I did not with GUID but with drive filename – Luckyrings Dec 31 '17 at 15:20
  • 3
    @ripper234 The three steps need some in depth explanation - for people like me who aren't super sure what they are doing. In 2) are we creating a new fixed disk or what? .vdi .vdmk ?? Please give a proper example, maybe with a graphic. Also 3) What's clonemedium doing as opposed to clonehd? Where are the two guids coming from - in particular the destination one - it already exists even though we are cloning? Thanks – mwarren Mar 13 '18 at 13:56
  • Thank you. Now, I was directed here as a Windows user (even though this is askUbuntu), so I'll add here that, in the Windows version of VBoxManage, you have to put in the paths to the virtual hard drives, instead of the VM GUIDs. – Sean Burchett Dec 9 '18 at 20:32
4

Here is the whole process, I will try to be as detailed as possible

  1. Make sure that the machine that you are going to grow in size is in "Shutdown" state (not in "saved" or any other state)

In my case it is a 32 GB size machine and will call it the SMALL VM

  1. Create a new Virtual Machine with the new desired size

In my case I decided to make a new a 70 GB Virtual Machine, while restoring the contents of the small machine inside this new VM and I will refer to this as the LARGE VM

  1. Run the command VBoxManage list hdds or Open the Virtual Media Manager to obtain the the GUID of the SMALL VM (origin) and also the GUID of the LARGE VM (destination)

With those GUIDs build the following command

VBoxManage clonemedium SMALL_VM_GUID LARGE_VM_GUID --existing

In my case ORIGIN - SMALL VM is: 39143127-42b6-478a-afb2-5e58f14218b

In my case DESINATION - LARGE VM is: bb808b5b-b88c-49b2-a646-3414af906d84

Of course your GUIDs are going to be different than mine

Make sure you dont invert the GUIDs otherwise the brand new machine will replace the contents of your existing machine !!!!

After making sure you did not mix origin with destination run this command:

$ VBoxManage clonemedium 39143127-42b6-478a-afb2-5e58f14218b2 bb808b5b-b88c-49b2-a646-3414af906d84 --existing

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

Clone medium created in format 'VDI'. UUID: bb808b5b-b88c-49b2-a646-3414af906d84

  1. Start the new LARGE VM that you created on step 2.

  2. Check in the Computer Managment window tool that the machine has in fact more size unused/unformat space

  3. If you prefer you can run the "chkdsk" on the C drive to make sure everything is ready (this might take you two reboots on the LARGE VM)

  4. Using the gparted-live*.iso, "insert it" into the new virtual machine and reboot it

  5. Boot into the gparted environment

  6. Grow your partition and save changes

  7. "Eject" the gparted-live*.iso to boot again into Windows

  8. Check in the Computer Management window tool that the machine now has a bigger C drive to solve your spece issues

I had the screenshots of these process but decided not to include them since it will make my answer to big and intimidating for people who are "in a hurry" to get free space on their Windows virtual machine

  • Thanks for the guide. In step 3, where do you get the GUIDs from? I'm not sure what a Virtual Media Manager is. – A.Wan Jun 7 '18 at 18:26
  • 3
    Never mind, I think I got it from VBoxManage list hdds – A.Wan Jun 7 '18 at 18:27
  • @A.Wan this is the Virtual Media Manager - google.com.co/… – Mauricio Gracia Gutierrez Jun 7 '18 at 22:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy