Programster's Blog

Tutorials focusing on Linux, programming, and open-source

KVM - Add Disk

I run my virtual machines on SSD storage which is expensive compared to traditional HDD storage. Thus if a virtual machine needs a lot of storage, such as for a mirror, then I will give it an HDD disk to put the data on. Here's how to do just that.

Create the Disk

Qcow2

qemu-img create \
  -f qcow2 \
  -o lazy_refcounts=on,preallocation=metadata \
  $FILEPATH \
  [size]G

Raw

qemu-img create \
  -f raw \
  $FILEPATH \
  [size]G

Attach the Disk

Qcow2

virsh attach-disk $VM_ID \
  --source /path/to/disk.qcow2 \
  --target vd[x] \
  --persistent \
  --subdriver qcow2

The path to the disk for source has to be an absolute path, not a relative one. The command can be run to attach the disk whilst the VM Is running.

Raw

virsh attach-disk $VM_ID \
  --source /path/to/disk.raw \
  --target vd[x] \
  --persistent \
  --subdriver raw

At this point the disk should show up in your VM if you run the command:

ls /dev/vd*

To use the disk we need to create a filesystem on it.

sudo mkfs -t ext4 /dev/vd[x]

Now we need a place to mount the disk and add it to our /etc/fstab so that it will mount on boot.

sudo mkdir /media/data

Then add the following to your fstab

/dev/vdb /media/data ext4 defaults 0 2

Now you can mount everything

sudo mount -a

Detach Disk

If you wish to remove a disk, you can do so like so:

sudo virsh detach-disk $GUEST_ID vd[x]
Last updated: 5th July 2024
First published: 16th August 2018

This blog is created by Stuart Page

I'm a freelance web developer and technology consultant based in Surrey, UK, with over 10 years experience in web development, DevOps, Linux Administration, and IT solutions.

Need support with your infrastructure or web services?

Get in touch