How to increase KVM guest disk size using LVM VG as storage pool?

12,182

Solution 1

This is the procedure I went with:

  1. Extend the logical volume of the kvm guest

    # lvextend -L+50G /dev/storage_pool/guest.img
    
  2. Shutdown the kvm guest and deactivate the logical volume

    # virsh shutdown guest
    # lvchange -a n /dev/storage_pool/guest.img
    
  3. List and note the partition information of the kvm guest, most importantly the first sector. If it doesn't display sectors you may need to add the '-u' or '-u sectors' switch

    # fdisk -l /dev/storage_pool/guest.img
    
  4. Delete and recreate the partition to fill the whole extended space, make sure you are using sectors as units and to select the same first sector (usually 2048 if partition is aligned), you can use the 'u' fdisk command to toggle between units

    # fdisk /dev/storage_pool/guest.img
    Command (m for help): d
    Partition number (1-4): 1
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 1
    First sector (...): 2048
    Last sector...: hit enter and use the default last sector
    Command (m for help): a
    Partition number (1-4): 1
    Command (m for help): w
    
  5. Expose the ext3/4 filesystem and resize it

    # kpartx -a -v /dev/storage_pool/guest.img
    # e2fsck -p -f /dev/mapper/storage_pool-guest.img1
    # resize2fs /dev/mapper/storage_pool-guest.img1
    # e2fsck -p -f /dev/mapper/storage_pool-guest.img1
    # kpartx -d -v /dev/storage_pool/guest.img
    
  6. Activate the logical volume and start the kvm guest

    # lvchange -a y /dev/storage_pool/guest.img
    # virsh start guest
    

Solution 2

There is no need to shutdown the guest (at least no longer in 2019).

Simply

lvextend -L+<size>G /dev/<group>/<volume>

then

virsh blockresize <domain> /dev/<group>/<volume> --size <newsize>

and finally go into your guest and do whatever is necessary in your guest to make use of the extra space.

In a Windows guest you can do

diskpart

list volume

select volume <n>

extend

These are the exact steps I followed to expand the C: drive of a Windows 10 guest running as KVM domain under Ubuntu 19.04 with qemu 3.1.0

Share:
12,182

Related videos on Youtube

f10bit
Author by

f10bit

Updated on September 18, 2022

Comments

  • f10bit
    f10bit almost 2 years

    The KVM host server is running CentOS 6.5 and a LVM volume group "storage_pool" is used as the main storage pool for KVM.

    An Ubuntu guest is installed using an ext4 filesystem and mounts the whole /dev/vda1 as /. This is the guest disk configuration:

    <disk type='block' device='disk'>
      <driver name='qemu' type='raw' cache='none' io='native'/>
      <source dev='/dev/storage_pool/kvmguest.img'/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    

    What would be the best approach to increase the guest disk size? The VG has a lot of free space.

    I have found some examples but most use LVM inside the guests as well, or weren't completely applicable. As far as I understand, the common method is to create a larger LV in the same VG, shutdown the guest, transfer the data, edit the configuration to use the new LV?

    Thanks in advance for any suggestions or pointers

  • Marki555
    Marki555 over 4 years
    Please don't post url-only answers. The linked website can disappear anytime and the answer would be useless. Always copy important parts into the answer itself.
  • pingz
    pingz over 4 years
    @Marki555 another people already covered that. check this: serverfault.com/a/968764/119191 two years later,
  • John Mahowald
    John Mahowald almost 3 years
    Does blockresize allow --size option name before the size? Manual documents positional arguments only: blockresize domain path size