How to create a disk image in QEMU

From Computernewb Wiki
Revision as of 22:43, 17 May 2022 by Dartz (talk | contribs) (1 revision imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This page documents how to create a hard disk image in QEMU.

The command

The standard command for creating a basic hard disk image is this.

qemu-img create -f qcow2 example.img 100M

It will create an output similar to this:

How the command works

The command is broken down like this:

  • qemu-img
This is the name of the program. It is necessary for using the following command.
  • create
This tells qemu-img that we are creating a disk image.
Other arguments include "dd", "info", "map", "measure", "snapshot", "rebase", and "resize". There is no documentation for these arguments for now, they will be described in more detail later.
  • -f
An argument that specifies which file format we are going to be using.
  • qcow2
The file format we are using, in this case qcow2.
qcow2 is the recommended since it is dynamically allocated - e.g. it only allocates space when needed, but at a (pretty much) unnoticeable speed loss. There are many other file formats, which will be listed below.
  • example.img
This specifies the name of the image we are going to be using. It can be whatever, and have whatever extension (or none at all), it doesn't matter.
  • 100M
This specifies the size of the virtual disk. 100M stands for 100 megabytes. Of course modern operating systems take up much more than that, so it's recommended to make it at least 30 gigabytes or more, which can be done by replacing 100M with 30G.
The following letters are accepted:
K
K stands for Kilobytes. For instance, 100K would be 100 kilobytes. Unrecommended. You can create hard disk images in pure kilobytes if you wanted, e.g. 30000000k for 30 gigabytes.
M
M stands for Megabytes. For instance, 100M would be 100 megabytes. You can also create hard disk images in pure megabytes if you want, e.g. 30000M for 30 gigabytes.
G
G stands for Gigabytes. For instance, 100G would be 100 gigabytes.
T
T stands for Terabytes. For instance, 1T would be 1 terabyte.
P
P stands for Petabytes. For instance, 1P would be 1 petabyte. Unrecommended unless you happen to have a supercomputer handy.
E
E stands for Exabytes. For instance, 1E would be 1 exabytes. Unrecommended unless you happen to have a supercomputer handy.
  • Fun fact: The ext4 file system is capable of a maximum of 1.1529215 exabytes!

And then when you combine them together, you get something like this:

qemu-img create -f qcow2 example.img 100M

More useful example commands:

# All of these will be using QCow2 format for convenience.

qemu-img create -f qcow2 DOS622.img 70M
qemu-img create -f qcow2 Win95.img 200M
qemu-img create -f qcow2 Win98.img 500M
qemu-img create -f qcow2 WinME.img 800M
qemu-img create -f qcow2 Win2k.img 1G
qemu-img create -f qcow2 WinXP.img 3G
qemu-img create -f qcow2 WinVista.img 8G
qemu-img create -f qcow2 Win7_64.img 10G
qemu-img create -f qcow2 Win8.img 20G
qemu-img create -f qcow2 Win81.img 25G
qemu-img create -f qcow2 Win10.img 30G
qemu-img create -f qcow2 Win11.img 40G

If you're going to experiment with the arguments for a bit, you may use these commands for reference:

qemu-img create -f vdi XP.vdi 1G
qemu-img create -f vmdk 2000.vmdk 2G
qemu-img create -f vhdx Server2012.vhdx 8G
qemu-img create -f parallels Win7_32.img 16G

File formats

QEMU can recognize and read several different file formats, but this section will list the ones you can create with qemu-img.

qcow2

The recommended file format. It is fast, dynamically allocated, and has decent support in QEMU. However it does have a minor speed loss compared to raw, but this is unnoticeable in normal use.

qcow

This is an older version of the qcow2 file format. The main difference between the qcow2 and qcow file formats is that qcow2 supports multiple snapshots through a newer, flexible model for storing snapshots. It is recommended to use qcow2 instead.

raw

As the name suggests - it is a "raw" file format, which means it will allocate all the space to the disk immediately, e.g. if you formatted a file named raw with 2G as the size, it would take up 2 gigabytes of space on the disk. This is the fastest option, and is recommended if you have a lot of disk space to spare.

vdi

A file format which is also compatible with VirtualBox 1.1. Recommended only if you are going to be switching through VirtualBox and QEMU frequently.

  • static - If set, the image will be created with metadata preallocation.

vmdk

A file format which is compatible with VMWare 3 and 4. Recommended only if you are going to be switching through VMWare and QEMU frequently. It supports the following arguments:

  • compat6 - Create a VMDK 6 image, instead of the default VMDK 4.
  • hwversion - Specify the vmdk virtual hardware version. If set, the Compat6 flag cannot be enabled.

vpc

A file format which is compatible with Windows Virtual PC. Recommended only if you are going to be switching through Windows Virtual PC and QEMU frequently.

vhdx

A Hyper-V compatible image format. Not recommended unless you're going to switch between Hyper-V and QEMU frequently.

parallels

A Parallels compatible image format. Not recommended unless you're going to switch between Parallels and QEMU frequently.

file

Not a file with any format - just a plain raw file.

cow

Ancient, depreciated QEMU file format that is not present in newer versions. Like qcow2 and qcow, it is a dynamically allocated file format. This cannot be used in Win32. Not recommended.

Read only file formats

bochs

Bochs image file.

cloop

Linux Compressed Loop image, useful only to reuse directly compressed CD-ROM images present for example in the Knoppix CD-ROMs.

dmg

Apple disk image.