KVM - The Linux Kernel-Based Virtual Machine
News, Blogs and Resources on the Linux (KVM) Kernel-Based Virtual Machine

How you can use qemu/kvm base images to be more productive (Part 1)

There are some useful ways in which you can use qemu base images to build template virtual machines. If used wisely you can save yourself from ever having to install the same OS more than once. The main thing that you should be aware of when using base images is the dependency between images but once managed properly, you can save yourself a lot of time.

 

Qemu/KVM base images

Base imaging was inherited from the qemu userspace component as an added feature of kvm. The idea behind the base image is simple. You build a disk image as you would build a normal image. You then build a new image using the first image as your base image, also known as the backing file. From this point on, kvm will only read from your base image (backing file). If anything needs to be written to your image, kvm will only write to the new image. It is, in effect, similar to a diff where all new data is written only to the new image while preserving the state of your backing file. As a sideffect, your working image will be the same size as your base image. This is where the qemu copy on write term came from.

 

Building your base image

Your base image should be based on a template disk image that is a practical starting point for your needs. Personally I like to start with a base image that is at a state right after a fresh install; no patches, no applications, just the state of the machine right after installation and registration of the OS if it requires registration. You would start by using the usual qemu-img command as you normally would for creating your base image. For example, to install your base image for a windows xp base image you would create the image with the following command.

qemu-img create -f qcow2 windows-master.qcow2 10G

This image will be your base image. Once your image is created you boot the image and install the OS as you normally would with a command similar to the following:

qemu-system-x86_64  -hda  windows-master.qcow2  -m  512  -boot d  -cdrom /home/user/isos/en_winxp_pro_with_sp2.iso

Install your OS to completion and back up this image immediately. This is your new base image and you will not have to ever boot this image in life again.

 

Create a new image from your template base image

Now that you have your base image you are ready to install a new image from this template. You would create your new image with the following command using the –b flag.

qemu-img create -b windows-master.qcow2 -f  qcow2   windows-clone.qcow2

This will create a new copy-on-write image called windows-clone.qcow2 which uses your original windows-master as your template base image. You don’t need to specify a filesize with this command as it will automatically set your new image to the same size as your base image. At this point run the following command on your new image and note the size of your new image.

 # qemu-img info windows-clone.qcow2

image: windows-clone.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 56K
cluster_size: 4096
backing file: windows-master.qcow2 (actual path: windows-master.qcow2)

Note the size of your new image is 10G , the size of your original base image and note how small your image is, 56 k. At this point, your new image is basically a clone of your base image and dependent on your base image being in the same state it was at the time your clone was created. For this reason, you should try to never boot your base image again as some data may be inadvertently be written to disk causing some inconsistencies. Boot up your new clone image with a command similar to the following

qemu-system-x86_64  -hda  windows-clone.qcow2  -m 400

You new clone will boot up and you will see that it is a perfect clone of your original base image. As you install patches, applications and write data to your new image you can see it growing in size but your base image will always remain unchanged from it’s original state. You can use the qemu-img command to verify this. Try installing some applications on your new clone then run the following commands on both your base image and your new clone.

# qemu-img info windows-master.qcow2
# qemu-img info windows-clone.qcow2

You will see that your clone image is growing and your base image has remained the same size.

 

What next?

Using base images , you should never have to install your operating systems again after the first install. Perform your experiments on your new clone; if something goes wrong, simply delete your clone and recreate another clone. You can also have multiple clones running off of one base image without any problems.

Now that you know how to build a base image and images hanging off of your base image, the next thing that you will want to do is “rebasing” your images. For the next post in this series, I’ll walk through how you can rebase your new image to build new up to date base images for cloning.
 

See Also

Comments

Hmmz, very interesting. Is it

Hmmz, very interesting. Is it possible to have multiple clones of one base (with the clones running simultaneously)?

In what way do people use this functionality? For quickly restoring to previous states, or saving space?

Re: base images

J,

Yes, you can run multiple clones off of a single base image. Probably the most common usage is create clones. This way you can standardize machines and save time. You also save space as a benefit.

For saving states, you'll have to use something else like savevm or loadvm

How do you get clone to show up?

I've got a guest OS installed, and I successfully created a clone using the options listed above. However, when I run virt-manager, the clone is not listed. I looked at virsh and its define command, but that assumes there is an xml file already, which wasn't (?) created by the clone command.

How can I get get my clone to be available in virt-manager?

Thanks,
Brett

Hi Brett, If you're running

Hi Brett,

If you're running the latest virt-manager , version 0.7.0, then you can use the option when creating a new virtual machine to use existing storage rather than creating a new one. Below is a snapshot of this dialog where you'll actually choose your copy on write disk.

If you're using an earlier version of virt-manager then you'll have to do a workaround such as creating a new virtual machine and select the already created virtual disk as though it is a new one. If you do this though you'll need to boot a cdrom that allows you the option to boot from disk.
 

Using LVM to grow partitions

Thanks for the article.

I have a question: if I use that MASTER for multiple kvm instances, can I use LVM in my instances to grow filesystems?

Has anyone tried it?

run through q5.qcow2

Hi,

I have a snapshot(image) of running application through qemu manager. How can I run this snapshot through command line?

Post new comment

The content of this field is kept private and will not be shown publicly.