To run virtual machines, QEMU needs images to store the filesystem of the guest OS. The image itself is a type of file, and it represents the guest filesystem residing on a virtual disk. QEMU supports various images and provides tools to create and manage them. In this recipe, we are going to build a blank disk image with the
To use this recipe, we need to have the
qemu-img utility installed. If you followed the steps in the first recipe, you should have that covered. To check what image types are supported on your Linux distribution, run the following command:
root@kvm:~# qemu-img -h | grep Supported
Supported formats: bochs vvfat rbd vpc parallels tftp ftp ftps raw https qcow dmg http qcow2 quorum null-aio cloop vdi iscsi null-co vhdx blkverify file vmdk host_cdrom blkdebug host_device sheepdog qed nbd
From the preceding output, we can see that there are many supported images on the test system that we are using. Make sure that your QEMU version supports the raw image type, as it's the default and that is what we are going to use in this recipe. One of the most commonly used image type is
qcow2, which supports copy on write, compression, encryption, and snapshotting. We are going to leverage that in later recipes.
Perform the following steps to create a blank raw image of a specified size and to verify that the file was created on the host:
- Create a raw image named
debian.imgwith size of 10 GB:
root@kvm:~# qemu-img create -f raw debian.img 10G
Formatting 'debian.img', fmt=raw size=10737418240
- Check that the file was created:
root@kvm:~# ls -lah debian.img
-rw-r--r-- 1 root root 10G Feb 10 16:58 debian.img
- Examine the file type:
root@kvm:~# file -s debian.img
- Obtain more information about the image:
root@kvm:~# qemu-img info debian.img image: debian.img file format: raw virtual size: 10G (10737418240 bytes) disk size: 0 root@kvm:~#
qemu-img utility allows us to create, convert, and modify guest images.
In step 1, we used the
-f flag specifying the image format; in this case,
raw, the name of the image to be created and the size in gigabytes.
In step 4, we used the
info subcommand to gather additional information about the existing image. Note how the disk size is showing as currently being zero. This is due to the fact that this is a blank image, not containing a filesystem. We are going to create one in the next recipe.
In this recipe, we listed the supported disk image formats by QEMU. The following is a brief description of the most common types that you might encounter:
raw: Raw disk image format. This is the default format and can be one of the fastest file-based formats. If you format this image with a filesystem that supports holes, for example, EXT3, then only sectors that have data will use space. The main drawback of the raw images is the lack of features, making them ideal for testing and quick prototyping.
qcow2: As we mentioned in the previous section, this is one of the most feature-rich formats. It supports VM snapshots, compression, and encryption for the price of slightly reduced performance.
qcow: This is an older QEMU image format that supports backing files, compact image files, encryption, and compression.
dmg: This is the Mac disk image format. The Mac disk image provides secure password protection and compression, and it is most commonly used to distribute software, rather than running virtual machines.
nbd: The network block device, typically used for accessing remote storage devices.
vdi: This disk format is used by the Oracle VirtualBox software and can be used to run virtual machines on various CPU platforms.
vmdk: This is the VMware disk image type, where a single virtual hard disk can span multiple files.
vhdx: Microsoft Hyper-V uses this image format. It provides large storage capacity, data corruption protection during power failures and read/write optimization for larger disk images.
In this book, we are going to use the
qcow2 disk formats, as they provide the best performance and toolset for running and manipulating them.