KVM QEMU Download Installation, Grundlagen und Praxis kernelbasierter Virtualisierung mit Linux
(Link zu dieser Seite als [[QEMU-KVM-Buch/ QEMU+KVM unter Linux]])

qemu-kvm & libvirt
4. Auflage 2010
ISBN: 978-3-8370-0876-0
276 Seiten, 27,27 EUR
Bestellen
Inhaltsverzeichnis |
[bearbeiten] Installation von QEMU und KVM unter Linux
Die Unterstützung der Hardware-Virtualisierung ist im BIOS meist deaktiviert. Dadurch werden Rootkits verhindert, die die Hardware-Virtualisierung verwenden. Für den Einsatz der KVM-Kernel-Module muss die Unterstützung der Hardware-Virtualisierung aktiviert werden (Beispiel):
Advanced CPU Configuration Virtualization Technology [Enabled]
Unter Linux wird die Unterstützung der Hardware-Virtualisierung (Hardware Virtual Machine – HVM) überprüft.
Host ~$ grep "vmx" /proc/cpuinfo
Werden Zeilen mit vmx ausgegeben, handelt es sich um Prozessoren vom Typ Intel VT.
Host ~$ grep "svm" /proc/cpuinfo
Werden Zeilen mit svm ausgegeben, handelt es sich um Prozessoren vom Typ AMD-V. Erfolgt keine Ausgabe wird die Hardware-Virtualisierung nicht unterstützt. QEMU kann dann nur ohne KVM-Beschleunigung installiert werden.
Zu empfehlen ist die Installation eines 64-Bit-Linux. Dies ist natürlich nur bei einer 64-Bit-CPU möglich. Eine 64-Bit-CPU erkennt man am Flag lm (Long Mode). Werden beim folgenden Befehl Zeilen mit lm ausgegeben, kann ein 64-Bit-Linux installiert werden.
Host ~$ grep " lm " /proc/cpuinfo
Optional ist Kernel Samepage Merging (KSM) zu aktivieren. Mit KSM wird den virtuellen Maschinen mehr Arbeitsspeicher zur Verfügung gestellt, als das Host-System besitzt. Allerdings erfordert dies Rechenleistung der CPUs. Zu empfehlen ist KSM bei knappen Arbeitsspeicher des Host-Systems. Mit folgendem Befehl wird ermittelt, ob der Kernel KSM unterstützt.
Host ~$ grep KSM /boot/config-`uname -r` CONFIG_KSM=y
In diesem Beispiel wird KSM unterstützt. Ob der KSM-Support auch aktiviert ist, zeigt die Datei /sys/kernel/mm/ksm/run an.
Host ~$ cat /sys/kernel/mm/ksm/run 0
In diesem Beispiel ist der KSM-Support nicht aktiviert. Aktiviert wird er mit einer 1. Damit der KSM-Support auch nach einem Neustart aktiviert wird, ist diese Zeile in der Datei /etc/rc.local einzutragen.
Host ~$ sudo echo 1 > /sys/kernel/mm/ksm/run
Mit einer 2 in der Datei /sys/kernel/mm/ksm/run wird der KSM-Support beendet und die zusammengelegten Speicherbereiche werden wieder aufgeteilt.
Host ~$ sudo echo 2 > /sys/kernel/mm/ksm/run
Ein Fein-Tuning erfolgt durch Anpassen der Dateien im Verzeichnis /sys/kernel/mm/ksm/.
Unter Debian/Ubuntu erfolgt diese Konfiguration in der Datei /etc/default/qemu-kvm.
# /etc/default/qemu-kvm # To disable qemu-kvm's page merging feature, set KSM_ENABLED=0 and # sudo restart qemu-kvm KSM_ENABLED=1 #SLEEP_MILLISECS=2000
[bearbeiten] Software-Pakete
Download: http://qemu-buch.de/download/qemu-self-compiled_1.3-1_amd64.deb
Bei neueren Linux-Distributionen werden QEMU und die Kernel-based Virtual Machine in dem Paket qemu-kvm zusammengefasst. Ansonsten sind die Pakete kvm und qemu zu installieren. Da das Paket qemu-kvm nur x86-Gast-Systeme unterstützt, ist die Installation des Paketes qemu-kvm-extras zum empfehlen. Es enthält die Emulatoren der anderen Architekturen.
Unter Debian und Ubuntu kann man die Installation mit dem grafischen Paketmanager Synaptic vornehmen. Zuvor sollten alle Programmquellen aktiviert werden (Menü System, Administration, Software-Quellen). Die Synaptic-Paketverwaltung wird über das Menü System, Administration, Synaptic-Paketverwaltung aufgerufen. Nach Auswahl der Pakete wird die Installation aus dem Internet mit dem Button Anwenden gestartet. Alternativ kann die Installation mit einer Befehlszeile erfolgen.
Host ~$ sudo apt-get install kvm qemu-kvm qemu-kvm-extras
Unter Fedora, Red Hat Enterprise Linux und CentOS erfolgt die Installation mit yum.
Host ~# yum install qemu-kvm qemu-kvm-extras
Unter OpenSUSE werden Konfigurationen und Softwareinstallationen mit dem Tool YAST vorgenommen (Punkt Software installieren und löschen). Dort sucht man die Pakete qemu-kvm und qemu-kvm-extras und installiert sie.
[bearbeiten] Quellen kompilieren
Die von den Distributionen zur Verfügung gestellten Pakete sind nicht immer aktuell und haben mitunter Einschränkungen im Funktionsumfang. Dann ist die Software aus den Quellen zu kompilieren. Es ist möglich die kompilierte Version zusätzlich zur Paket-Installation zu betreiben.
[bearbeiten] QEMU 1.4 unter Debian/Ubuntu
Download: http://wiki.qemu.org/Download
Die Abhängigkeiten für das Kompilieren des Paketes qemu-kvm werden mit folgenden Befehl aufgelöst.
Host ~$ sudo apt-get build-dep qemu-kvm
Zur Anpassung an eigene Wünsche sollten die notwendigen Pakete einzeln ausgewählt und installiert werden.
Host ~$ sudo apt-get install build-essential gcc make wget Host ~$ sudo apt-get install libdirectfb-dev libjpeg-dev Host ~$ sudo apt-get install zlib1g-dev libsdl-gfx1.2-dev Host ~$ sudo apt-get install gcc libsdl1.2-dev libasound2-dev Host ~$ sudo apt-get install pkg-config libpci-dev Host ~$ sudo apt-get install dh-autoreconf
Zu empfehlen ist das Paket checkinstall. Damit baut man Slackware-TGZ-, RPM- oder DEB-Paketen beim Kompilieren. Statt make install wird beim Kompilieren der Befehl checkinstall verwendet.
Host ~$ sudo apt-get install checkinstall
Die folgenden Pakete sind zwar nicht unbedingt nötig, erweitern aber die Funktionalität von QEMU. Für die Absicherung von VNC-Sessions sind die Pakete cyrus-sasl-devel und gnutsl-devel zu installieren. libjpeg8-dev wird für den VNC-JPEG-Support benötigt. Mit der VDE-Library ist das Anlegen von virtuellen VDE-Switches möglich.
Host ~$ sudo apt-get install libsasl2-dev libgnutls-dev Host ~$ sudo apt-get install libjpeg8-dev libvdeplug2-dev
Die Bibliothek curl-devel unterstützt das Booten über Web-Protokolle.
Host ~$ sudo apt-get install libcurl4-gnutls-dev
Für Bluetooth-Unterstützung werden die Pakete libbluetooth-dev und bluez benötigt.
Host ~$ sudo apt-get install libbluetooth-dev bluez
Für den Xen-Support erwartet der Compiler die Bibliothek libxen-dev.
Host ~$ sudo apt-get install libxen-dev
Zur Generierung der Dokumentationen dienen die Pakete texi2html und texinfo.
Host ~$ sudo apt-get install texi2html texinfo
Wird der Sparse-Checker (cgcc) benötigt, ist das Paket sparse zu installieren.
Host ~$ sudo apt-get install sparse
Die Bibliothek libbrlapi-dev wird für die Braille-Ausgabe verwendet.
Host ~$ sudo apt-get install libbrlapi-dev
Damit der SPICE-Support in QEMU aktiviert werden kann, ist die Bibliothek libspice notwendig (siehe auch http://qemu-buch.de/d/Netzwerkoptionen/_Netzwerkdienste#SPICE).
Host ~$ sudo apt-get install libspice-protocol-dev libspice-server-dev
Für die iSCSI-Unterstützung ist das Paket libiscsi-dev zu installieren.
Host ~$ sudo apt-get install libiscsi-dev
Zum Kompilieren von QEMU wird das Quellpaket heruntergeladen und entpackt. Kompiliert wird mit normalen Benutzerrechten mit ./configure && make. Erst die Installation erfordert root-Rechte. Mit checkinstall beziehungsweise make install werden die angelegten Dateien in die Verzeichnisse /usr/local/bin/ und /usr/local/share/qemu kopiert.
Host ~$ mkdir -p ~/source Host ~$ cd ~/source Host ~$ wget \ http://wiki.qemu-project.org/download/qemu-1.4.0.tar.bz2 Host ~$ tar xjvf qemu-1.4.0.tar.bz2 Host ~$ cd qemu-1.4.0
Die Optionen für das Kompilieren zeigt der folgende Befehl an.
Host ~$ ./configure --help
Usage: configure [options] Options: [defaults in brackets after descriptions] Standard options: --help print this message --prefix=PREFIX install in PREFIX [/usr/local] --interp-prefix=PREFIX where to find shared libraries, etc. use %M for cpu name [/usr/gnemul/qemu-%M] --target-list=LIST set target list (default: build everything) Available targets: i386-softmmu x86_64-softmmu alpha-softmmu arm-softmmu cris-softmmu lm32-softmmu m68k-softmmu microblaze-softmmu microblazeel-softmmu mips-softmmu mipsel-softmmu mips64-softmmu mips64el-softmmu or32-softmmu ppc-softmmu ppcemb-softmmu ppc64-softmmu sh4-softmmu sh4eb-softmmu sparc-softmmu sparc64-softmmu s390x-softmmu xtensa-softmmu xtensaeb-softmmu unicore32-softmmu i386-linux-user x86_64-linux-user alpha-linux-user arm-linux-user armeb-linux-user cris-linux-user m68k-linux-user microblaze-linux-user microblazeel-linux-user mips-linux-user mipsel-linux-user or32-linux-user ppc-linux-user ppc64-linux-user ppc64abi32-linux-user sh4-linux-user sh4eb-linux-user sparc-linux-user sparc64-linux-user sparc32plus-linux-user unicore32-linux-user s390x-linux-user Advanced options (experts only): --source-path=PATH path of source code [/home/ich/source/qemu-1.4.0] --cross-prefix=PREFIX use PREFIX for compile tools [] --cc=CC use C compiler CC [cc] --host-cc=CC use C compiler CC [cc] for code run at build time --objcc=OBJCC use Objective-C compiler OBJCC [cc] --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS --make=MAKE use specified make [make] --install=INSTALL use specified install [install] --python=PYTHON use specified python [python] --smbd=SMBD use specified smbd [/usr/sbin/smbd] --static enable static build [no] --mandir=PATH install man pages in PATH --datadir=PATH install firmware in PATH/qemu --docdir=PATH install documentation in PATH/qemu --bindir=PATH install binaries in PATH --sysconfdir=PATH install config in PATH/qemu --localstatedir=PATH install local state in PATH --with-confsuffix=SUFFIX suffix for QEMU data inside datadir and sysconfdir [/qemu] --enable-debug-tcg enable TCG debugging --disable-debug-tcg disable TCG debugging (default) --enable-debug enable common debug build options --enable-sparse enable sparse checker --disable-sparse disable sparse checker (default) --disable-strip disable stripping binaries --disable-werror disable compilation abort on warning --disable-sdl disable SDL --enable-sdl enable SDL --disable-virtfs disable VirtFS --enable-virtfs enable VirtFS --disable-vnc disable VNC --enable-vnc enable VNC --disable-cocoa disable Cocoa (Mac OS X only) --enable-cocoa enable Cocoa (default on Mac OS X) --audio-drv-list=LIST set audio drivers list: Available drivers: oss alsa sdl esd pa fmod --audio-card-list=LIST set list of emulated audio cards [ac97 es1370 sb16 hda] Available cards: ac97 es1370 sb16 cs4231a adlib gus hda --block-drv-whitelist=L set block driver whitelist (affects only QEMU, not qemu-img) --enable-mixemu enable mixer emulation --disable-xen disable xen backend driver support --enable-xen enable xen backend driver support --disable-xen-pci-passthrough --enable-xen-pci-passthrough --disable-brlapi disable BrlAPI --enable-brlapi enable BrlAPI --disable-vnc-tls disable TLS encryption for VNC server --enable-vnc-tls enable TLS encryption for VNC server --disable-vnc-sasl disable SASL encryption for VNC server --enable-vnc-sasl enable SASL encryption for VNC server --disable-vnc-jpeg disable JPEG lossy compression for VNC server --enable-vnc-jpeg enable JPEG lossy compression for VNC server --disable-vnc-png disable PNG compression for VNC server (default) --enable-vnc-png enable PNG compression for VNC server --disable-vnc-ws disable Websockets support for VNC server --enable-vnc-ws enable Websockets support for VNC server --disable-curses disable curses output --enable-curses enable curses output --disable-curl disable curl connectivity --enable-curl enable curl connectivity --disable-fdt disable fdt device tree --enable-fdt enable fdt device tree --disable-bluez disable bluez stack connectivity --enable-bluez enable bluez stack connectivity --disable-slirp disable SLIRP userspace network connectivity --disable-kvm disable KVM acceleration support --enable-kvm enable KVM acceleration support --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI) --disable-nptl disable usermode NPTL support --enable-nptl enable usermode NPTL support --enable-system enable all system emulation targets --disable-system disable all system emulation targets --enable-user enable supported user emulation targets --disable-user disable all user emulation targets --enable-linux-user enable all linux usermode emulation targets --disable-linux-user disable all linux usermode emulation targets --enable-bsd-user enable all BSD usermode emulation targets --disable-bsd-user disable all BSD usermode emulation targets --enable-guest-base enable GUEST_BASE support for usermode emulation targets --disable-guest-base disable GUEST_BASE support --enable-pie build Position Independent Executables --disable-pie do not build Position Independent Executables --fmod-lib path to FMOD library --fmod-inc path to FMOD includes --oss-lib path to OSS library --enable-uname-release=R Return R for uname -r in usermode emulation --cpu=CPU Build for host CPU [x86_64] --disable-uuid disable uuid support --enable-uuid enable uuid support --disable-vde disable support for vde network --enable-vde enable support for vde network --disable-linux-aio disable Linux AIO support --enable-linux-aio enable Linux AIO support --disable-cap-ng disable libcap-ng support --enable-cap-ng enable libcap-ng support --disable-attr disables attr and xattr support --enable-attr enable attr and xattr support --disable-blobs disable installing provided firmware blobs --enable-docs enable documentation build --disable-docs disable documentation build --disable-vhost-net disable vhost-net acceleration support --enable-vhost-net enable vhost-net acceleration support --enable-trace-backend=B Set trace backend Available backends: nop, stderr, ust, simple, dtrace --with-trace-file=NAME Full PATH,NAME of file to store traces Default:trace-<pid> --disable-spice disable spice --enable-spice enable spice --enable-rbd enable building the rados block device (rbd) --disable-libiscsi disable iscsi support --enable-libiscsi enable iscsi support --disable-smartcard-nss disable smartcard nss support --enable-smartcard-nss enable smartcard nss support --disable-usb-redir disable usb network redirection support --enable-usb-redir enable usb network redirection support --disable-guest-agent disable building of the QEMU Guest Agent --enable-guest-agent enable building of the QEMU Guest Agent --disable-seccomp disable seccomp support --enable-seccomp enables seccomp support --with-coroutine=BACKEND coroutine backend. Supported options: gthread, ucontext, sigaltstack, windows --enable-glusterfs enable GlusterFS backend --disable-glusterfs disable GlusterFS backend --enable-gcov enable test coverage analysis with gcov --gcov=GCOV use specified gcov [gcov] NOTE: The object files are built at the place where configure is launched
Der Befehl ./configure ist aufzurufen. Soll das Management der virtuellen Maschinen mit den Tools der Bibliothek libvirt erfolgen, ist die Option --prefix=/usr anzugeben. Dann werden die Binaries, wie von libvirt erwartet, unter /usr/bin installiert. Lässt man die Option --prefix=/usr weg, werden die Binaries unter /usr/local/bin/ abgelegt.
Wenn das Kompilieren fehlschlägt, sollte SPICE mit --disable-spice deaktiviert werden (siehe https://bugs.launchpad.net/qemu/+bug/816370).
Host ~$ ./configure --prefix=/usr --enable-spice \ --audio-card-list=ac97,es1370,sb16,adlib,gus,cs4231a \ --enable-trace-backend=simple
Install prefix /usr BIOS directory /usr/share/qemu binary directory /usr/bin library directory /usr/lib libexec directory /usr/libexec include directory /usr/include config directory /usr/etc local state directory /usr/var Manual directory /usr/share/man ELF interp prefix /usr/gnemul/qemu-%M Source path /home/ich/source/qemu-1.4.0 C compiler cc Host C compiler cc Objective-C compiler cc CFLAGS -O2 -D_FORTIFY_SOURCE=2 -g QEMU_CFLAGS -fPIE -DPIE -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fstack-protector-all -Wendif-labels -Wmissing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -I/usr/include/libpng12 -I$(SRC_PATH)/pixman/pixman -I$(BUILD_DIR)/pixman/pixman LDFLAGS -Wl,--warn-common -Wl,-z,relro -Wl,-z,now -pie -m64 -g make make install install python python smbd /usr/sbin/smbd host CPU x86_64 host big endian no target list i386-softmmu x86_64-softmmu alpha-softmmu arm-softmmu cris-softmmu lm32-softmmu m68k-softmmu microblaze-softmmu microblazeel-softmmu mips-softmmu mipsel-softmmu mips64-softmmu mips64el-softmmu or32-softmmu ppc-softmmu ppcemb-softmmu ppc64-softmmu sh4-softmmu sh4eb-softmmu sparc-softmmu sparc64-softmmu s390x-softmmu xtensa-softmmu xtensaeb-softmmu unicore32-softmmu i386-linux-user x86_64-linux-user alpha-linux-user arm-linux-user armeb-linux-user cris-linux-user m68k-linux-user microblaze-linux-user microblazeel-linux-user mips-linux-user mipsel-linux-user or32-linux-user ppc-linux-user ppc64-linux-user ppc64abi32-linux-user sh4-linux-user sh4eb-linux-user sparc-linux-user sparc64-linux-user sparc32plus-linux-user unicore32-linux-user s390x-linux-user tcg debug enabled no gprof enabled no sparse enabled no strip binaries yes profiler no static build no -Werror enabled no pixman internal SDL support yes curses support yes curl support yes mingw32 support no Audio drivers oss Extra audio cards ac97 es1370 sb16 adlib gus cs4231a Block whitelist Mixer emulation yes VirtFS support yes VNC support yes VNC TLS support yes VNC SASL support yes VNC JPEG support yes VNC PNG support yes VNC WS support yes xen support no brlapi support yes bluez support yes Documentation yes NPTL support yes GUEST_BASE yes PIE yes vde support yes Linux AIO support no ATTR/XATTR support yes Install blobs yes KVM support yes TCG interpreter no fdt support no preadv support yes fdatasync yes madvise yes posix_madvise yes sigev_thread_id yes uuid support no libcap-ng support no vhost-net support yes Trace backend simple Trace output file trace-<pid> spice support yes (/) rbd support no xfsctl support no nss used no usb net redir no OpenGL support yes libiscsi support no build guest agent yes seccomp support no coroutine backend ucontext GlusterFS support no virtio-blk-data-plane no gcov gcov gcov enabled no
Mit make wird kompiliert.
Host ~$ make
Zu empfehlen ist das Generieren eines Softwarepaketes mit checkinstall. Es wird statt make install aufgerufen. Eine Hilfestellung erhält man mit checkinstall --help. Das Programm checkinstall stellt einige Fragen, die meist mit den Default-Vorgaben beantwortet werden können. Eindeutig ist aber der Paket-Name vorzugeben, zum Beispiel qemu-kvm-self-compiled. Im aktuellen Verzeichnis wird das Paket angelegt und installiert. Unter Debian/Ubuntu listet es der Befehl dpkg -l auf und mit dpkg -r deinstalliert man es bei Bedarf.
Host ~$ sudo checkinstall --fstrans=no --pkgname=qemu-self-compiled \ --pkgversion=1.3 Should I create a default set of package docs? [y]: y Bitte geben Sie eine Beschreibung für das Paket ein. >> qemu-self-compiled >> Das Paket wird entsprechend dieser Vorgaben erstellt: ... Geben Sie die betreffende Nummer ein, um die Vorgaben zu ändern: 2 Geben Sie einen neuen Namen ein: >> qemu-self-compiled Das Paket wird entsprechend dieser Vorgaben erstellt: 0 - Maintainer: [ root@meinpc ] 1 - Summary: [ qemu-self-compiled ] 2 - Name: [ qemu-self-compiled ] ... Geben Sie die betreffende Nummer ein, um die Vorgaben zu ändern: [Enter]
Man kann alternativ auch auf herkömmliche Weise die Software installieren.
Host ~$ sudo make install
Ein Blick in die Datei qemu-doc.html ist zu empfehlen. Wurde unter Ubuntu vorher QEMU als Paket installiert, liegt dieses im Pfad /usr/bin/. Die kompilierte Version liegt ohne Vorgabe des Prefix unter /usr/local/bin/. Unter Angabe des vollständigen Pfades wird jeweils die gewünschte Version aufgerufen.
Host ~$ /usr/bin/qemu-system-x86_64 -version QEMU emulator version 1.4.0, Copyright (c) 2003-2008 Fabrice Bellard
[bearbeiten] Der neueste Source-Code
Wer zum experimentieren den neusten Source-Code benötigt, muss diesem mit einem Git-Client (http://git-scm.com) herunterladen. Der Git-Client ist unter Ubuntu mit einer Befehlszeile installiert.
Host ~$ sudo apt-get install git
Der Source-Code von QEMU wird heruntergeladen. In dem angelegten Verzeichnis qemu erfolgt das Kompilieren wie oben beschrieben.
Host ~$ mkdir -p ~/source Host ~$ cd ~/source Host ~$ git clone git://git.qemu.org/qemu.git Host ~$ cd qemu Host ~$ ./configure && make Host ~$ i386-softmmu/qemu-system-i386 -version
Möchte man lieber einen stabilen Branch verwenden, ist zuerst dessen Name zu ermitteln.
Host ~$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master remotes/origin/stable-0.10 remotes/origin/stable-0.11 remotes/origin/stable-0.12 remotes/origin/stable-0.13 remotes/origin/stable-0.14 remotes/origin/staging
In diesem Beispiel wird der Branch stable-0.12 verwendet.
Host ~$ git checkout stable-0.12 Host ~$ git branch master * stable-0.12 Host ~$ ./configure && make Host ~$ i386-softmmu/qemu-system-i386 -version QEMU PC emulator version 0.12.5, Copyright (c) 2003-2008 Fabrice Bellard
[bearbeiten] KVM-Kernel-Module
Bei Ubuntu sind die KVM-Kernel-Module Bestandteil der Distribution. Sind die KVM-Kernel-Module korrekt geladen, gibt im QEMU-Monitor der Befehl info kvm die Meldung kvm support: enabled aus.
Host ~$ qemu-system-x86_64 -monitor stdio -machine type=pc,accel=kvm (qemu) info kvm kvm support: enabled
Bis QEMU 0.14 wird KVM mit der Option -enable-kvm aktiviert.
Host ~$ qemu-system-x86_64 -monitor stdio -enable-kvm (qemu) info kvm kvm support: enabled
Wurden die Kernel-Module nicht geladen, wird diese Meldung ausgegeben:
Host ~$ qemu-system-x86_64 -monitor stdio -machine type=pc,accel=kvm Could not access KVM kernel module: No such file or directory failed to initialize KVM
Folgende Befehle laden die Kernel-Module:
Host ~$ sudo modprobe kvm
Bei Prozessoren vom Typ Intel ist das Modul kvm_intel notwendig.
Host ~$ sudo modprobe kvm_intel
Bei Prozessoren vom Typ AMD ist das Modul kvm_amd notwendig.
Host ~$ sudo modprobe kvm_amd
Mit der Option nested=1 wird das Betreiben einer Virtualisierungslösung innerhalb der Gast-Systeme ermöglicht. Das heißt, innerhalb einer KVM-Instanz kann eine weitere KVM-Instanz betrieben werden. Dazu musste bisher das Host-System über AMD-Prozessoren verfügen. Ab dem Kernel 3.1 ist die Nested Virtualization integriert es werden auch Intel-Prozessoren unterstützt. Notwendig ist die Emulation einer entsprechenden 64-Bit-CPU. Weiterhin wird mit der Option npt=1 Nested Paging aktiviert.
Host ~$ sudo modprobe -r kvm_amd Host ~$ sudo modprobe kvm_amd nested=1 npt=1
Man überprüft das Laden der Module.
Host ~$ dmesg | grep kvm [ 4147.118755] kvm: Nested Virtualization enabled [ 4147.118767] kvm: Nested Paging enabled
Bei einigen Linux-Distributionen ist ein Test mit dem Skript kvm-ok (Paket cpu-checker) möglich.
Host ~$ sudo apt-get install cpu-checker Host ~$ kvm-ok INFO: Your CPU supports KVM extensions INFO: /dev/kvm exists KVM acceleration can be used
Für eine dauerhafte Konfiguration legt man die Datei /etc/modprobe.d/kvm_amd.conf mit folgenden Inhalt an:
# /etc/modprobe.d/kvm_amd.conf options kvm_amd nested=1 npt=1
Die Zugriffsrechte für /dev/kvm werden bei den meisten Linux-Distributionen mit der Gruppe kvm geregelt.
Host ~$ sudo groupadd kvm Host ~$ sudo chown root:kvm /dev/kvm Host ~$ sudo usermod -a -G kvm `whoami`
Alternativ ermöglicht folgender Befehl allen Benutzern das Device /dev/kvm zu beschreiben:
Host ~$ sudo chmod a+rwx /dev/kvm
Unter Debian/Ubuntu werden die Module mit dem Skript /etc/init.d/qemu-kvm ge- und entladen.
Host ~$ sudo restart qemu-kvm
Falls das Skript /etc/init.d/qemu-kvm nicht existiert, trägt man die notwendigen Befehle in der Datei /etc/rc.local ein. Hier ein Beispiel mit AMD-Prozessoren:
# /etc/rc.local echo 1 > /sys/kernel/mm/ksm/run modprobe kvm_amd chmod a+rwx /dev/kvm exit 0
Unter Fedora ist in der Datei /etc/sysconfig/modules/kvm.modules diese Zeile zu konfigurieren:
modprobe -b kvm_amd >/dev/null 2>&1
Damit man nicht immer den Befehl qemu-system-x86_64 -machine type=pc,accel=kvm eingeben muss, legt man einen Alias in der Datei ~/.bash_aliases (Ubuntu) beziehungsweise ~/.bashrc (Fedora) an. Man braucht dann nur noch k eingeben.
alias k="qemu-system-x86_64 -machine type=pc,accel=kvm"
[bearbeiten] Probleme
Unterstützen die Prozessoren keine Hardware-Virtualisierungstechniken werden folgende Fehlermeldungen ausgegeben:
Host ~$ sudo modprobe kvm_intel FATAL: Error inserting kvm_intel: Operation not supported
Beziehungsweise:
Host ~$ sudo modprobe kvm_amd FATAL: Error inserting kvm_amd: Operation not supported
Es kann aber auch sein, dass im BIOS die Hardware-Virtualisierung deaktiviert ist.
Wird ein Kernel vor 2.6.29 verwendet, wird folgende Fehlermeldung ausgegeben.
Host ~$ ./configure --enable-kvm #error Missing KVM capability KVM_CAP_DESTROY_MEMORY_REGION_WORKS NOTE: To enable KVM support, update your kernel to 2.6.29+ or install recent kvm-kmod. ERROR ERROR: User requested feature kvm ERROR: configure was not able to find it ERROR
Zu empfehlen ist die Installation eines neueren Kernels. Ist dies nicht möglich, so sind die entsprechenden Quellen der KVM-Kernel-Module zu installieren. Unter Ubuntu wird die richtige Version mit dem Paket kvm-source installiert.
Host ~$ sudo apt-get install kvm-source Host ~$ make clean Host ~$ ./configure --enable-kvm Host ~$ make Host ~$ sudo checkinstall --fstrans=no --pkgname=qemu-self-compiled Host ~$ qemu-system-x86_64 -monitor stdio -machine type=pc,accel=kvm (qemu) info kvm kvm support: enabled
[bearbeiten] Quickstart
Eine Anleitung für die ersten Schritte mit QEMU findet man unter der URL http://qemu-buch.de/d/Quickstart.