How to resize the disk of a VMware virtual machine that's using a physical disk as its storage backend. The disk the virtual machine is using is an LVM logical volume, which is very easy to extend.
In this article I'm extending the disk, which is always easier than reducing. If you're reducing your disk, make sure the new size is still MORE than the space used on the file system, or you will lose data. And make a backup before you touch anything.
I'm running Windows 7 in a virtual machine on my Linux host. I figured 20 GB would be plenty for a guest OS I keep for my USB dongles that are not supported in Linux.
After the installation, Windows left me with only 7 GB of free space left. And to make use of Microsoft's cheap upgrade to Windows 8 program, 25 GB of disk space is a requirement. Time to grow that 20 to 30 GB!
- power down the virtual machine
- go to the directory that holds the virtual machine's disk file with extension
.vmdkand make a backup of the file
Extend the logical volume
The original size of my LV was 20 GB, or to be more precise: 2560 logical extents of 4 MB:
$ lvdisplay /dev/vg00/vm-win7 --- Logical volume --- LV Path /dev/vg00/vm-win7 LV Name vm-win7 VG Name vg00 LV UUID 739fos-h2dt-4k9f-Ghai-HiKk-AAAA-9Xqtjz LV Write Access read/write LV Creation host, time host, 2012-11-19 21:33:59 +0100 LV Status available # open 0 LV Size 20.00 GiB Current LE 2560 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:9
I increased the LV with 50 % by adding 1280 logical extents:
$ lvextend -l +1280 -n /dev/vg00/vm-win7 Extending logical volume vm-win7 to 30.00 GiB Logical volume vm-win7 successfully resized
There's a good reason for sizing the LV in logical extents (
-l) rather than in the easier to read megabytes/gigabytes/... with
-L, as you will see in the next step.
The LV of the VM has been extended, but the VM is still seeing the original size. The size is defined in the VM's
... # Extent description RW 41943040 FLAT "/dev/vg00/vm-win7" 0 ...
/dev/vg00/vm-win7 is defined to be 41943040 sectors large, and one sector is 512 bytes giving a total of 21474836480 bytes.
Because I used logical extents and not megabytes or gigabytes to extend the LV, calculating the new number of sectors is very easy: 41943040 + 50 % = 62914560. So the line in the
vmdk is changed to:
RW 62914560 FLAT "/dev/vg00/vm-win7" 0
Verify the new size in the virtual machine's settings: under
Hardware, go to
Hard Disk and you will see the resized capacity under
For more information on VMware's VMDK disk format, read the VMware Virtual Disk Format 5.0 technical note.
Resize the FS in the VM
The LV has been resized and VMware is aware of it, but the VM is still using a partition table and file system for the old size.
- download the GParted Live CD and connect it to your VM's virtual CD drive
- boot into GParted and resize the VM's disk to use the newly added space
- shutdown the VM and remove the virtual CD
- start the Windows VM as usual
- Windows will want to run a file system check, DO NOT CANCEL THIS!
- after the check, Windows will reboot and when it comes back the disk will show the new capacity!