[[Vorlage(getestet, bionic, focal, )]]

{{{#!vorlage Wissen
[:Pakete_installieren: Installation von Programmen] 
[:Terminal: Ein Terminal öffnen]
[:Kernelmodule:Umgang mit Kernelmodulen]
[:Benutzer und Gruppen: Gruppenverwaltung]
}}}

[[Inhaltsverzeichnis(1)]] 
[[Bild(kvmbanner-logo2.png, 128, align=left)]]
[http://kvm.qumranet.com KVM] {en}, Kernel-based Virtual Machine ist eine [:Virtualisierung: Virtualisierungstechnik] für Linux auf x86-Hardware. Sie wurde im Oktober 2006 der Öffentlichkeit vorgestellt. Seit der Version 2.6.20 des Linux-Kernels ist das Kernelmodul von KVM bereits in Linux enthalten. Entwickelt wird KVM von dem israelischen Unternehmen [http://www.qumranet.com Qumranet] {en}. Das Unternehmen wurde im September 2008 vom amerikanischen Linux-Distributor [http://www.redhat.com Red Hat] {en} übernommen. Seit Ubuntu 8.04 ist KVM die offiziell unterstützte (und im Serverbereich bevorzugte) Virtualisierungslösung von Ubuntu.

{{{#!vorlage Hinweis
Ein Vorteil von KVM ist, dass die Gastsysteme fast mit nativer Geschwindigkeit laufen, d.h. das Gastsystem reagiert nahezu so schnell wie ein natives System.
}}}

= Voraussetzung =
Um KVM unter Ubuntu zu nutzen, ist es zwingend erforderlich, dass man einen Prozessor hat, der Hardwarevirtualisierung direkt unterstützt. Dies kann man herausfinden, indem man '''cat /proc/cpuinfo''' in der Konsole eingibt. Ist dort unter ``flags`` entweder der Eintrag ``vmx`` oder ``svm`` vorhanden, beherrscht der Prozessor diese Technik. Dies erledigt auch der folgende Befehl [3]:

{{{#!vorlage Befehl
grep -E '^flags.*\b(vmx|svm)\b' /proc/cpuinfo
}}}

Alternativ kann man natürlich auch in das Datenblatt für den Prozessor schauen; eine (nicht zwingend aktuelle) Übersicht findet man auch bei Wikipedia für [wikipedia:Intel_VT:Intel-Prozessoren] und [wikipedia:AMD_Virtualization:AMD-Prozessoren].

Unterstützt der Prozessor Hardwarevirtualisierung, so werden in der Regel die beiden benötigten Kernel-Module beim Start des Systems automatisch geladen. Dies kann man mit folgendem Befehl prüfen [2]:

{{{#!vorlage Befehl
lsmod | grep kvm
}}}

Die Ausgabe sollte dann ungefähr so aussehen:

{{{
## für Intel-Prozessoren
# Module    Size   Used by
kvm_intel   86016  16
kvm        598016  1 kvm_intel

## für AMD-Prozessoren
# Module    Size   Used by
kvm_amd     86016  16
kvm        598016  1 kvm_amd
}}}

Ist KVM nicht geladen, steht da etwas wie:
{{{
kvm        598016  0
}}}

Sollten die Module nicht geladen sein, kann man sie mit den folgenden Befehlen laden:

{{{
## für Intel-Prozessoren
sudo modprobe kvm
sudo modprobe kvm_intel

## für AMD-Prozessoren
sudo modprobe kvm
sudo modprobe kvm_amd
}}}

Sollten dabei Fehler auftreten, dann liefert

{{{#!vorlage Befehl
dmesg | grep kvm
}}}

meist die Fehlerursache.

{{{#!vorlage Hinweis
Bei manchen Rechnern ist die Hardwarevirtualisierung im BIOS deaktiviert. Diese muss dann natürlich erst aktiviert werden, damit man KVM nutzen kann.
}}}

= Installation =
Für die Emulation von x86-Maschinen (32 und 64 bit) muss nur das Paket
{{{#!vorlage Paketinstallation
qemu-kvm
}}}

installiert werden. Dies installiert auch das Paket ''qemu-system-x86'' und weitere Abhängigkeiten automatisch.

Falls man andere CPU-Architekturen als x86 emulieren möchte, benötigt man zusätzlich das Paket ''qemu-system''.

Nach der Installation der Pakete sollte überprüft werden, ob man selber Mitglied in der Gruppe `kvm` ist, zB. mit dem Befehl `id`. Wenn nicht, muss man sich dieser Gruppe hinzufügen [4]:
{{{#!vorlage Befehl
sudo adduser $USER kvm
}}}

Die Änderung der Gruppenzugehörigkeit wird erst nach einem Neustart wirksam.

= Benutzung =
KVM an sich stellt "nur" die direkte Schnittstelle zum Linux-Kernel zur Verfügung, als Virtualisierungsumgebung kommt [:QEMU:] zum Einsatz. Lediglich der Aufruf erfolgt nicht mit `qemu`, sondern stattdessen mit `kvm`, also würde z.B. [2]

{{{#!vorlage Befehl
kvm -hda /home/otto/virtuelle_laufwerke/ubuntu.img -cdrom /dev/cdrom -m 384 -boot c
}}}

eine virtuelle Maschine aus dem Image `ubuntu.img` booten, zusätzlich das CD-ROM Laufwerk einbinden und der virtuellen Maschine 384 MB RAM zur Verfügung stellen.

Weiteres Beispiel, Booten von einer ISO Datei ohne Festplatte:
{{{#!vorlage Befehl
kvm -cdrom lubuntu-16.04-desktop-amd64.iso -m 512 -boot d
}}}

Alle Parameter und Optionen von KVM sind identisch mit denen von QEMU, daher sei an dieser Stelle auf den [:QEMU:QEMU-Artikel] verwiesen.
KVM ist nur ein Script, das QEMU aufruft mit dem Parameter -enable-kvm. 

= Unterstützte Gastsysteme =
Eine umfangreiche Übersicht über mögliche Gastsysteme findet man auf [http://www.linux-kvm.org/page/Guest_Support_Status dieser Seite] {en} im KVM-Wiki. Demnach sollten aber die meisten produktiv eingesetzten Betriebssysteme funktionieren (Zitat von der Wikiseite: „Qemu/kvm will likely run most production operating systems“).

= Management Tools/Clients =
[:virsh:]  ist eine Konsolenanwendung, die auf libvirt basiert. Sie eignet sich für die skriptbasierte Administration von KVM-VMs

= Links =
 * [:AQEMU:] - grafische Oberfläche für QEMU/KVM
 * [:QEMU:] - Grundlagen von QEMU
 * [wikipedia:Kernel-based_Virtual_Machine:Wikipedia zu KVM]
 * [https://help.ubuntu.com/community/KVM KVM-Eintrag] {en} im englischen Ubuntu-Community-Wiki mit vielen zusätzlichen Tipps und Infos
 * [ubuntu:kvm:KVM] im englischen Ubuntu-Wiki, recht kurzer Eintrag
 * [http://www.youtube.com/watch?v=2I6P8SN1tmE Einführungsvortrag über QEMU und KVM] {de} Youtube-Video von der Ubucon 2011
 * [http://www.pugetsystems.com/labs/articles/Multiheaded-NVIDIA-Gaming-using-Ubuntu-14-04-KVM-585/ Multiheaded NVIDIA Gaming using Ubuntu 14.04+KVM] {en} - Beispiel wie man eine oder mehrere Grafikkarten an ein virtuelle Maschine durchschleift
# tag: Emulation und Virtualisierung, KVM, QEMU