I like using fixed disks for VirtualBox VMs. It just gives me a warm fuzzy feelings when it comes to stability. However, that comes at a cost of not being able to resize it easily. If you try, you’ll get VBOX_E_NOT_SUPPORTED
error.
vboxmanage modifyhd Test.vdi --resize 262144
0%...
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage: error: Failed to resize medium
VBoxManage: error: Resizing to new size 274877906944 is not yet supported
VBoxManage: error: Details: code VBOX_E_NOT_SUPPORTED (0x80bb0009)
VBoxManage: error: Context: "RTEXITCODE handleModifyMedium(HandlerArg*)" at line 816
But that doesn’t meant it’s impossible.
First we stop VM and clone its disk to a new image. This will automatically make it dynamic. And it will take a while.
sudo vboxmanage clonemedium "Test.vdi" "Test_new1.vdi"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'VDI'. UUID: 96e20ba5-65f6-4248-b42e-ab48683a4cf9
With dynamic disk, we can now resize disk image.
sudo vboxmanage modifymedium disk "Test_new1.vdi" --resize 262144
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
But resizing leaves us with dynamic disk which is not what I wanted. So we convert it back to fixed. Will take long time but we again have fixed disk once done.
sudo vboxmanage clonemedium "Test_new1.vdi" "Test_new2.vdi" --variant Fixed
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'VDI'. UUID: 2bc060b6-0637-43f9-8a55-8ac6bc69ea0d
Since we want direct replacement, we need to copy old UID to the new image.
UUID=`sudo vboxmanage showmediuminfo "Test.vdi" | egrep '^UUID' | awk '{print $2}'`
sudo vboxmanage internalcommands sethduuid "Test_new2.vdi" $UUID
UUID changed to: 4f046c99-d76a-478f-95cf-f52b07927bd0
And now we can remove intermediate step.
rm "Test_new1.vdi"
Then we copy file system properties of old image to the new one (probably not needed but it doesn’t hurt).
sudo chmod --reference="Test.vdi" "Test_new2.vdi"
sudo chown --reference="Test.vdi" "Test_new2.vdi"
And finally we replace the old image with the new one.
mv "Test_new2.vdi" "Test.vdi"
This whole process will take ages and it will require enough space to copy disk twice. Increasing disk from 128 to 256 GB required 128+128+256 - essentially 4x the disk space. But sometime roundabout way is the only way. :)