QEMU/Images

来源:百度文库 编辑:神马文学网 时间:2024/07/08 07:37:56

QEMU/Images

From Wikibooks, the open-content textbooks collection< QEMUJump to: navigation, search

Once QEMU has been installed, and kqemu compiled and configured, it should be ready to run a guest OS from a virtual disc image. A disc image is a file that represents the data on a hard disc. From the perspective of the guest OS, it actually is a hard disc, and the guest OS can actually create its own filesystem on the virtual disc.

You can download a few guest OS images from the QEMU website, including a simple 8MB image of a Linux distro. To run it, download and unzip the image in a folder and run the QEMU command.

qemu linux-0.2.img

Replace linux-0.2.img with the name of your guest OS image file. If it has a GUI and you want to use your mouse with it, double-click on the window and QEMU will grab your mouse. To make QEMU release your mouse again, hold down the Control and Alt keys simultaneously, then let go - your mouse will be released back to X.

Contents

[hide]
  • 1 Image types
  • 2 Creating an image
  • 3 Using multiple images
  • 4 Copy on write
  • 5 Mounting an image on the host
  • 6 Getting information
  • 7 Converting image formats
    • 7.1 Exchanging images with VirtualBox

[edit] Image types

QEMU supports several image types. The "native" and most flexible type is qcow2, which supports copy on write, encryption, compression, and VM snapshots.

If you need to copy files to and from the image directly from the host, however, you need to use the raw image type.

QEMU currently supports these image types or formats:

raw 
(default) the raw format is a plain binary image of the disc image, and is very portable. On filesystems that support sparse files, images in this format only use the space actually used by the data recorded in them.
cloop 
Compressed Loop format, mainly used for reading Knoppix and similar live CD image formats
cow 
copy-on-write format, supported for historical reasons only and not available to QEMU on Windows
qcow 
the old QEMU copy-on-write format, supported for historical reasons and superseded by qcow2
qcow2 
QEMU copy-on-write format with a range of special features, including the ability to take multiple snapshots, smaller images on filesystems that don't support sparse files, optional AES encryption, and optional zlib compression
vmdk 
VMware 3 & 4, or 6 image format, for exchanging images with that product

[edit] Creating an image

To set up your own guest OS image, you first need to create a blank disc image. QEMU has the qemu-img command for creating and manipulating disc images, and supports a variety of formats. If you don't tell it what format to use, it will use raw files. The "native" format for QEMU is qcow2, and this format offers some flexibility. Here we'll create a 3GB qcow2 image to install Windows XP on:

qemu-img create -f qcow2 winxp.img 3GB

The easiest way to install a guest OS is to create an ISO image of a boot CD/DVD and tell QEMU to boot off it. Many free operating systems can be downloaded from the Internet as bootable ISO images, and you can use them directly without having to burn them to disc.

Here we'll boot off an ISO image of a properly licensed Windows XP boot disc. We'll also give it 256MB of RAM, but we won't use the kqemu kernel module just yet because it causes problems during Windows XP installation.

qemu -m 256 -hda winxp.img -cdrom winxpsp2.iso -boot d

To boot from a real CD or DVD, tell QEMU where to find it. On Linux systems, you can usually use a logical device name like /dev/cdrom or /dev/dvd, or the physical name of the device, e.g. /dev/sr0

qemu -m 256 -hda winxp.img -cdrom /dev/cdrom -boot d

QEMU will boot from the ISO image or CD/DVD and run the install program. If you have two screens, move the QEMU screen off to the spare one where you can keep an eye on the installer, but get on with something else - it will take a while!

Once the guest OS has installed successfully, you can shutdown the guest OS (e.g. in Windows XP, click on Start and then Shutdown). Once it has shutdown, start QEMU up with the kqemu kernel module to give it a little more speed.

qemu -m 256 -hda winxp.img -cdrom winxpsp2.iso -kernel-kqemu

If you are running an x86-64 Linux (i.e. 64-bit), you will need to run the x86-64 version of QEMU to be able to utilise kqemu:

qemu-system-x86_64 -m 256 -hda winxp.img -cdrom winxpsp2.iso -kernel-kqemu

[edit] Using multiple images

QEMU can utilise up to four image files to present multiple virtual drives to the guest system. This can be quite useful, as in the following examples:

  • a pagefile or swapfile virtual disc that can be shared between QEMU guests
  • a common data drive where all data is stored, accessible from each QEMU guest but isolated from the host
  • giving additional space to a QEMU guest without reconfiguring the primary image
  • separating competing I/O operations onto different physical drive spindles by placing the separate QEMU images on different physical drives
  • emulating a multi-drive physical environment for testing / learning

Bear in mind that only one instance of QEMU may access an image at a time - shared doesn't mean shared simultaneously!

To utilise additional images in QEMU, specify them on the command line with options -hda, -hdb, -hdc, -hdd.

qemu -m 256 -hda winxp.img -hdb pagefile.img -hdc testdata.img -hdd tempfiles.img -kernel-kqemu

NB: QEMU doesn't support both -hdc and -cdrom at the same time, as they both represent the first device on the second IDE channel.

[edit] Copy on write

The "cow" part of qcow2 is an acronym for copy on write, a neat little trick that allows you to set up an image once and use it many times without changing it. This is ideal for developing and testing software, which generally requires a known stable environment to start off with. You can create your known stable environment in one image, and then create several disposable copy-on-write images to work in.

To start a new disposable environment based on a known good image, invoke the qemu-img command with the option -b and tell it what image to base its copy on. When you run QEMU using the disposable environment, all writes to the virtual disc will go to this disposable image, not the base copy.

qemu-img create -f qcow2 -b winxp.img test01.img 3GBqemu -m 256 -hda test01.img -kernel-kqemu &

NB: don't forget to copy any important data out of the disposable environment before deleting it. When developing and testing software in copy-on-write virtual environments, it is a good idea to use version control software like Subversion or CVS on a server external to your virtual environment. Not only is it easy to keep copies of your work outside your virtual environment, it is also very easy to set up a new virtual environment from version control.

[edit] Mounting an image on the host

Sometimes it is helpful to be able to mount a drive image under the host system. For example, if the guest doesn't have network support, the only way to transfer files into and out of the guest will be by the storage devices it can address.

Linux and other Unix-like hosts can mount images created with the raw format type using a loopback device. From a root login (or using sudo), mount a loopback with an offset of 32,256.

mount -o loop,offset=32256 /path/to/image.img /mnt/mountpoint

For example, to copy some files across to a FreeDOS hard drive image:

mkdir -p /mnt/freedosmount -o loop,offset=32256 freedos-c.img /mnt/freedoscp oldgames /mnt/freedosumount /mnt/freedos

NB: never mount a QEMU image while QEMU is using it, or you are likely to corrupt the filesystem on the image.

Note: if you have an image without partitions you should omit the ,offset=32256 part. This is for instance the case if you want to mount linux-0.2.img (which can be found at the qemu web site at the time of writing)

[edit] Getting information

The qemu-img program can tell you about the format, virtual size, physical size, and snapshots inside an image.

$ qemu-img info test.vmdk(VMDK) image open: flags=0x2 filename=test.vmdkimage: test.vmdkfile format: vmdkvirtual size: 20M (20971520 bytes)disk size: 17M

[edit] Converting image formats

The qemu-img program can be used to convert images from one format to another, or add compression or encryption to an image. Specify the source and target files for the image, and select from the following options:

  • -f fmt – optional, specify the format of the input file (QEMU can usually detect it)
  • -O fmt – specify the format of the output file
  • -e – use encryption in the output file (you will be prompted for a password)
  • -c – use compression in the output file (can't be used with encryption)
  • -6 – when converting to vmdk (VMware) format, make it compatible with VMware 6
qemu-img convert -O qcow2 test.vmdk test.qcow2

[edit] Exchanging images with VirtualBox

To convert a QEMU image for use with VirtualBox, first convert it to raw format, then use VirtualBox's conversion utility to convert and compact it in its native format. Note that the compact command requires the full path to the VirtualBox image, not just the filename.

qemu-img convert -O raw test.qcow2 test.raw(1) VBoxManage convertdd test.raw test.vdiVBoxManage modifyvdi /full/path/to/test.vdi compact

(1) or try :

VBoxManage convertfromraw -format VDI test.raw test.vdi

VBoxManage doesn't have the capability to convert an image back to raw format. However, an older tool was available for download off the VirtualBox website, vditool, can apparently convert from .vdi to raw format. UPDATE - Feb 2009 - current installations of VirtualBox should already include vditool. Kvditool is a GUI for managing vditool.

(2) or try :

VBoxManage internalcommands  converttoraw file.vdi file.raw