How do you increase a KVM guest's disk space?

How do you go about increasing KVM virtual machine guest's disk space from the command line if you initially set insufficient amount of disk space?

  1. Shutdown the VM
  2. Move the current image

    mv mykvm.img mykvm.img.bak
  3. Create a new image

    qemu-img create -f raw addon.raw 30G
  4. concatenate the 2 images

    cat mykvm.img.bak addon.raw >> mykvm.img
  5. start the VM (using the newly created mykvm.img)
  6. run fdisk inside VM and delete & re-create LVM partition
    % fdisk /dev/vda
    ...
    Device Boot Start End Blocks Id System
    /dev/vda1 * 1 13 104391 83 Linux
    /dev/vda2 14 3263 26105625 8e Linux LVM

    Command (m for help): d
    Partition number (1-4): 2

    Command (m for help): p

    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System
    /dev/vda1 * 1 13 104391 83 Linux

    Command (m for help): n
    Command action
    e extended
    p primary partition (1-4)
    p
    Partition number (1-4): 2
    First cylinder (14-5874, default 14): 14
    Last cylinder or +size or +sizeM or +sizeK (14-5874, default 5874):
    Using default value 5874

    Command (m for help): p

    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System
    /dev/vda1 * 1 13 104391 83 Linux
    /dev/vda2 14 5874 47078482+ 83 Linux

    Command (m for help): t
    Partition number (1-4): 2
    Hex code (type L to list codes): 8e
    Changed system type of partition 2 to 8e (Linux LVM)

    Command (m for help): p

    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System
    /dev/vda1 * 1 13 104391 83 Linux
    /dev/vda2 14 5874 47078482+ 8e Linux LVM

    Command (m for help): w
    The partition table has been altered!

    Calling ioctl() to re-read partition table.

    WARNING: Re-reading the partition table failed with error 16: Device or
    resource busy.
    The kernel still uses the old table.
    The new table will be used at the next reboot.
    Syncing disks.
    %

  7. Reboot the VM
  8. Resize the LVM physical volume
    % pvdisplay
    --- Physical volume ---
    PV Name /dev/vda2
    VG Name VolGroup00
    PV Size 24.90 GB / not usable 21.59 MB
    Allocatable yes (but full)
    PE Size (KByte) 32768
    Total PE 796
    Free PE 0
    ...

    % pvresize /dev/vda2

    % pvdisplay
    --- Physical volume ---
    PV Name /dev/vda2
    VG Name VolGroup00
    PV Size 44.90 GB / not usable 22.89 MB
    Allocatable yes
    PE Size (KByte) 32768
    Total PE 1436
    Free PE 640
    ...

  9. Resize the LVM Logical Volume
    % lvresize /dev/VolGroup00/LogVol00 -l +100%FREE
    Extending logical volume LogVol00 to 43.88 GB
    Logical volume LogVol00 successfully resized
  10. Grow the File system
    % resize2fs /dev/VolGroup00/LogVol00
    resize2fs 1.39 (29-May-2006)
    Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required
    Performing an on-line resize of /dev/VolGroup00/LogVol00 to 11501568 (4k) blocks.
    The filesystem on /dev/VolGroup00/LogVol00 is now 11501568 blocks long.

Comments

Great stuff !

Tested it and worked from the first try. ( rhel7.2 VM )

I've resized my VM with qemu-img as I had a qcow2 disk image : qemu-img resize my-server.qcow2 +10GB

Thank you

Add new comment

Filtered HTML

  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Lines and paragraphs break automatically.
  • Web page addresses and e-mail addresses turn into links automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.