KVM add disk image or swap image to virtual machine with virsh

23-02-2014 | Remy van Elst


Table of Contents


This tutorial shows you how to create and add a disk image to a KVM vm using virsh. This is useful when you for example want to expand the disk space of your virtual machine when it is using LVM, or if you want to add a swap disk to a virtual machine. Note that you can also create a swap file instead of a disk, however, this is an example for adding the disk.

Read this tutorial to learn how to set up a proper KVM hypervisor host: https://raymii.org/s/tutorials/KVMwithbondingandVLANtaggingsetuponUbuntu_12.04.html

Requirements

  • Host running KVM and virsh

  • Virtual Machine to add disk to

This was tested on a KVM hypervisor host running Ubuntu 12.04 LTS and a Ubuntu 13.10 virtual machine. The KVM hypervisor uses virsh for management.

The example vm is named example-vm in virsh (domain).

Create and attach the disk image

Execute these steps on the KVM hypervisor host.

cd to the folder where you store your disk images:

cd /var/lib/libvirt/images/

Create the new disk image:

qemu-img create -f raw example-vm-swap.img 1G

We use qemu-img to create a new raw disk image with a size of 1 GB.

Attach the disk to the example virtual machine using virsh:

virsh attach-disk example-vm --source /var/lib/libvirt/images/example-vm-swap.img --target vdb --persistent

We use virsh to attach the disk image /var/lib/libvirt/images/example-vm-swap as a virtio (/dev/vdb) disk to the domain (vm) example-vm. The --persistent option updates the domain xml file with an element for the newly attached disk.

Note that if you already have a /dev/vdb disk you need to change vdb to a free device like vdc or vdd.

Formatting the disk

Execute these steps in your virtual machine.

Reboot it so that the kernel sees the new disk:

reboot

Partition the drive with cfdisk. For our example we use filesystem type 82 (linux/linux swap):

cfdisk /dev/vdb

Format the disk as swap:

mkswap /dev/vdb1

Or format it as ext4:

mkfs.ext4 /dev/vdb1

Make the swap active:

swapon /dev/vdb1

Or mount the partition:

mkdir /mnt/new-disk
mount /dev/vdb1 /mnt/new-disk

Add to /etc/fstab for reboot persistence:

/dev/vdb1   swap            swap    defaults    0 0

Or for the ext4 disk:

/dev/vdb1   /mnt/new-disk   ext4    defaults    0 0

That's it. You've now created, attached, formatted and mounted a new disk in your VM.

Sources


Tags: disk, kvm, swap, ubuntu, virsh, virtualization,