Why can't I resize a dynamic VDI with modifyhd command?

65,335

Solution 1

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.

Solution 2

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 :)

Solution 3

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

Share:
65,335

Related videos on Youtube

Community
Author by

Community

Updated on September 18, 2022

Comments

  • Community
    Community almost 2 years

    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?

    • Luckyrings
      Luckyrings over 6 years
      same problem here with Ubuntu 16.04LTS and dynamic vdi. very strange
  • nicolas
    nicolas over 8 years
    I tripped here too. what a pain.
  • Sharun
    Sharun over 7 years
    To modify drives in fixed format , follow the answer by @ripper234
  • Ken
    Ken over 7 years
    How could i allocate the excess space on windows?
  • Trent
    Trent about 7 years
    @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.
  • Luckyrings
    Luckyrings over 6 years
    this helped. I did not with GUID but with drive filename
  • mwarren
    mwarren over 6 years
    @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
  • Mauricio Gracia Gutierrez
    Mauricio Gracia Gutierrez about 6 years
    check my answer it has all the details that you need and I can certify that it works
  • A.Wan
    A.Wan about 6 years
    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
    A.Wan about 6 years
    Never mind, I think I got it from VBoxManage list hdds
  • Mauricio Gracia Gutierrez
    Mauricio Gracia Gutierrez about 6 years
    @A.Wan this is the Virtual Media Manager - google.com.co/…
  • Madivad
    Madivad about 6 years
    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
  • Sean Burchett
    Sean Burchett over 5 years
    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.
  • Maksim Luzik
    Maksim Luzik almost 5 years
    Thanks, this helped. For linux don't forget to run pvresize command to take that space into use for linux
  • Maksim Luzik
    Maksim Luzik almost 5 years
  • Ricky Hewitt
    Ricky Hewitt almost 5 years
    GUIDs appear to be working for me in Windows (VboxManage -v shows 6.0.10r132072). Perhaps more recent builds have added GUID support. @SeanBurchett
  • Luc
    Luc over 4 years
    Or, when shrinking the medium, don't be silly like me and shrink the filesystem before doing clonemedium or it won't boot.