The libvirt QEMU driver can manage any QEMU emulator from version 0.8.1 or later. It can also manage anything that provides the same QEMU command line syntax and monitor interaction. This includes KVM, and Xenner.
/usr/bin
for the presence of qemu
, qemu-system-x86_64
,
qemu-system-mips
,qemu-system-mipsel
,
qemu-system-sparc
,qemu-system-ppc
. The results
of this can be seen from the capabilities XML output.
/usr/bin
for the presence of qemu-kvm
and /dev/kvm
device
node. If both are found, then KVM fullyvirtualized, hardware accelerated
guests will be available.
/usr/bin
for the presence of xenner
and /dev/kvm
device
node. If both are found, then Xen paravirtualized guests can be run using
the KVM hardware acceleration.
The libvirt QEMU driver is a multi-instance driver, providing a single system wide privileged driver (the "system" instance), and per-user unprivileged drivers (the "session" instance). The of the driver protocol is "qemu". Some example conection URIs for the libvirt driver are:
qemu:///session (local access to per-user instance) qemu+unix:///session (local access to per-user instance) qemu:///system (local access to system instance) qemu+unix:///system (local access to system instance) qemu://example.com/system (remote access, TLS/x509) qemu+tcp://example.com/system (remote access, SASl/Kerberos) qemu+ssh://root@example.com/system (remote access, SSH tunnelled)
The QEMU driver currently supports a single native
config format known as qemu-argv
. The data for this format
is expected to be a single line first a list of environment variables,
then the QEMu binary name, finally followed by the QEMU command line
arguments
The virsh domxml-from-native
provides a way to convert an
existing set of QEMU args into a guest description using libvirt Domain XML
that can then be used by libvirt.
$ cat > demo.args <<EOF LC_ALL=C PATH=/bin HOME=/home/test USER=test \ LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 \ -nographic -monitor pty -no-acpi -boot c -hda \ /dev/HostVG/QEMUGuest1 -net none -serial none \ -parallel none -usb EOF $ virsh domxml-from-native qemu-argv demo.args <domain type='qemu'> <uuid>00000000-0000-0000-0000-000000000000</uuid> <memory>219136</memory> <currentMemory>219136</currentMemory> <vcpu>1</vcpu> <os> <type arch='i686' machine='pc'>hvm</type> <boot dev='hd'/> </os> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu</emulator> <disk type='block' device='disk'> <source dev='/dev/HostVG/QEMUGuest1'/> <target dev='hda' bus='ide'/> </disk> </devices> </domain>
NB, don't include the literral \ in the args, put everything on one line
The virsh domxml-to-native
provides a way to convert a
guest description using libvirt Domain XML, into a set of QEMU args
that can be run manually.
$ cat > demo.xml <<EOF <domain type='qemu'> <name>QEMUGuest1</name> <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> <memory>219200</memory> <currentMemory>219200</currentMemory> <vcpu>1</vcpu> <os> <type arch='i686' machine='pc'>hvm</type> <boot dev='hd'/> </os> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu</emulator> <disk type='block' device='disk'> <source dev='/dev/HostVG/QEMUGuest1'/> <target dev='hda' bus='ide'/> </disk> </devices> </domain> EOF $ virsh domxml-to-native qemu-argv demo.xml LC_ALL=C PATH=/usr/bin:/bin HOME=/home/test \ USER=test LOGNAME=test /usr/bin/qemu -S -M pc \ -no-kqemu -m 214 -smp 1 -name QEMUGuest1 -nographic \ -monitor pty -no-acpi -boot c -drive \ file=/dev/HostVG/QEMUGuest1,if=ide,index=0 -net none \ -serial none -parallel none -usb
<domain type='qemu'> <name>QEmu-fedora-i686</name> <uuid>c7a5fdbd-cdaf-9455-926a-d65c16db1809</uuid> <memory>219200</memory> <currentMemory>219200</currentMemory> <vcpu>2</vcpu> <os> <type arch='i686' machine='pc'>hvm</type> <boot dev='cdrom'/> </os> <devices> <emulator>/usr/bin/qemu-system-x86_64</emulator> <disk type='file' device='cdrom'> <source file='/home/user/boot.iso'/> <target dev='hdc'/> <readonly/> </disk> <disk type='file' device='disk'> <source file='/home/user/fedora.img'/> <target dev='hda'/> </disk> <interface type='network'> <source network='default'/> </interface> <graphics type='vnc' port='-1'/> </devices> </domain>
<domain type='kvm'> <name>demo2</name> <uuid>4dea24b3-1d52-d8f3-2516-782e98a23fa0</uuid> <memory>131072</memory> <vcpu>1</vcpu> <os> <type arch="i686">hvm</type> </os> <clock sync="localtime"/> <devices> <emulator>/usr/bin/qemu-kvm</emulator> <disk type='file' device='disk'> <source file='/var/lib/libvirt/images/demo2.img'/> <target dev='hda'/> </disk> <interface type='network'> <source network='default'/> <mac address='24:42:53:21:52:45'/> </interface> <graphics type='vnc' port='-1' keymap='de'/> </devices> </domain>