I have a Virtualbox on my Ubuntu (host) that serves few Windows guest OS.
Sometimes the running Windows virtual machine starts massive access to the disk which blocks me in my host environment. I would like to limit the read/write of data access to the physical harddisk.

How can I do it?

  • Sounds very much like a bug. What sort of activity caused the problem ? Are you running out of RAM (how much swap space are you using ? ) – Panther Mar 26 '12 at 13:32
  • 1
    There might be many reasons for massive access and you are right about one of them. However, my question is a generic one about limiting a VM so that even when it wants to the host won't allow it to use some portion of the bandwidth. – yossile Mar 26 '12 at 13:53
  • @bodhi.zazen I want to limit access (reads/writes) to the hard disk. RAM and CPU can be limited from the VM image settings but if an guest is doing heavy reading/writing to the disk (virtual disk of course) then there is no limit on that. – yossile Mar 26 '12 at 14:18

Starting from version 4.0 we are able to limit Virtual Box bandwith for acess to disk images (see Virtual Box Manual for details)

We need to create a bandwith group first (in the example below named "Limit" for 20 MB/s):

VBoxManage bandwidthctl "VM name" add Limit --type disk --limit 20M
VBoxManage storageattach "VM name" --storagectl "SATA" --port 0 --device 0 --type hdd
                                   --medium disk1.vdi --bandwidthgroup Limit
VBoxManage storageattach "VM name" --storagectl "SATA" --port 1 --device 0 --type hdd
                                   --medium disk2.vdi --bandwidthgroup Limit

If you get this error:

VBoxManage: error: Cannot register the hard disk '.../foo.vdi' {...} because a hard disk '.../foo.vdi' with UUID {...} already exists

then replace the path to the disk image with the UUID given in the error (both should be the same) including the {}

To further limit disk access to 10 MB/s we can then issue

VBoxManage bandwidthctl "VM name" set Limit --limit 10M 

This can even be done during runtime.

| improve this answer | |
  • 2
    --controller is no longer the correct command. It should now be --storagectl "SATA Controller Name" To limit access while the VM is running the command is VBOXManage bandwidthctrl "VMName" --name Limit --limit 10 – user77793 Jul 18 '12 at 15:13
  • Nice answer. But the command here in Virtual Box 4.2.12 was VBoxManage bandwidthctl "VM Name" add "Limit" --type disk --limit 10 and VBoxManage storageattach "VM Name" --storagectl "SATA" --port 0 --device 0 --type hdd --medium "Disk Name.vdi" --bandwidthgroup "Limit". – Erick Petrucelli Apr 25 '13 at 19:40

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.