Module 12 - Building a VM with KVM¶
Historical miniclass
This lesson was recovered from the former Sandia minimega site. It is preserved for reference and may describe obsolete software, operating systems, commands, or external resources. Consult the current documentation before applying it.
Module 12 - Building a VM with KVM
Introduction¶
In this guide we are going to build a VM using KVM
Disk Creation¶
KVM typically stores virtual machine hdd images in single qcow2 format file and minimega provides a way to create those files.
Note: A 100G file is not created. This is just the maximum size the VM can grow to.
You can create disks in more formats using the qemu-img command.
root@ubuntu:~/minimega# qemu-img create -f qcow /home/ubuntu/test.img 1G
Formatting '/home/ubuntu/test.img', fmt=qcow2 size=1073741824 encryption=off cluster_size=65536 lazy_refcounts=off refcount_bits=16
You can also enable things like compression if you want to sacrifice speed for file size.
Disk Conversion¶
Sometimes you will need to convert disk images from one file type to another. Such as qcow->qcow2, vmdk->qcow2, or qcow2->qcow. Thankfully qemu-img convert can be used for this.
root@ubuntu:~/minimega# qemu-img create -f qcow /home/ubuntu/file.qcow 1G
Formatting '/home/ubuntu/file.qcow', fmt=qcow size=1073741824 encryption=off
root@ubuntu:~/minimega# qemu-img convert -f qcow -O qcow2 /home/ubuntu/file.qcow /home/ubuntu/file.qcow2
Disk Shrinking¶
There is a side effect to the way virtual image formats work. If you create a large file say 50GB and then delete the large file.
The file on disk will have grown to 50GB+ and will not shrink back down on its own. Shrinking a disk is a very time consuming process.
You need to create a file of all zeros that fills the disk and then delete it.
With a Windows Guest this can be done with fsutil
With a Linux Guest you can use dd
When that is complete you can convert the disk with qemu-img convert
VM Creation¶
Now we have a disk image, we can use this in minimega to save files. Notice how we turn snapshot to false. When snapshot is false all writes are committed to a disk. When you kill and remove a VM the changes will remain.
Lets use the ISO module 0 to install Ubuntu Server to a disk image.
minimega:/tmp/minimega/minimega$ disk create qcow2 /home/ubuntu/ubuntuserver.qcow2 100G
minimega:/tmp/minimega/minimega$ clear vm config
minimega:/tmp/minimega/minimega$ vm config disk /home/ubuntu/ubuntuserver.qcow2
minimega:/tmp/minimega/minimega$ vm config cdrom /home/ubuntu/ubuntuserver.iso
minimega:/tmp/minimega/minimega$ vm config memory 1024
minimega:/tmp/minimega/minimega$ vm config snapshot false
minimega:/tmp/minimega/minimega$ vm launch kvm ubuntuserver
minimega:/tmp/minimega/minimega$ vm start ubuntuserver
Installing¶
Connect to the VNC session and finish the install following the guide in Module 1.