!!!Kernel-based Virtual Machine (KVM)

KVM ist eine Virtualisierungs-Lösung, die vor etwa drei Jahren (Oktober 2006) in den Linux-Kernel (Version 2.6.20) integriert wurde.

Ich habe heute meine ersten Versuche damit gemacht: Es sieht sehr vielversprechend und unkompliziert aus.

Voraussetzung ist allerdings ein Prozessor, der die Virtualisierung durch Hardware unterstützt.

!!Installation unter Debian Squeeze

Die erste Installation habe ich mit Debian Lenny nach einem [Artikel auf Howto-Forge|http://www.howtoforge.com/virtualization-with-kvm-on-a-debian-lenny-server] vorgenommen.

Die Schritte im Einzelnen:

!!Installation 

!Host-System

Installation eines minimalen Debian-System auf dem Server.
Ich nutze den Logical Volume Manager, um später Volumes
als Festplatten für die virtuellen Server anlegen zu können.

!Hardware-Unterstützung

Dann prüfe, ob der Prozessor wirklich KVM unterstützt:

{{{
# egrep '(vmx|svm)' --color=always /proc/cpuinfo
}}}

Wenn die Ausgabe leer bleibt, unterstützt der Prozessor die Virtualisierung nicht. Dann hilft nur eine andere Virtualisierungs-Lösung.

!KVM Pakete installieren

{{{
# aptitude install kvm-qemu libvirt-bin virtinst bridge-utils
}}}

Einen ersten Test kann man durchführen mit:

{{{
# virsh list

 Id Name                 State
----------------------------------

}}}

Wenn nicht die leere Liste mit virtuellen System angezeigt wird,
stimmt irgendetwas nicht.

!Bridge einrichten

Damit die virtuellen Server später ans Netzwerk kommen, wird an dieser Stelle eine (Netzwerk-) ''Bridge'' eingerichtet.

Dazu die Konfiguration in ''/etc/network/interfaces'':
{{{
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet manual

# bridge
auto br0
iface br0 inet static
        address 192.168.1.10
        network 192.168.1.0
        netmask 255.255.255.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        bridge_ports eth0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off
}}}

Die Netzwerkadressen müssen natürlich den Gegebenheiten des lokalen Netzwerks angepasst werden.

Nach einem Neustart des Netzwerks (''/etc/init.d/networking restart'') sollte die Ausgabe von ''ifconfig'' etwa so aussehen:

{{{
# ifconfig
br0       Link encap:Ethernet  Hardware Adresse 00:1d:92:70:66:20  
          inet Adresse:192.168.1.10  Bcast:192.168.1.255  Maske:255.255.255.0
          inet6-Adresse: fe80::21d:92ff:fe70:6620/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:475 errors:0 dropped:0 overruns:0 frame:0
          TX packets:266 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:0 
          RX bytes:35080 (34.2 KiB)  TX bytes:36790 (35.9 KiB)

eth0      Link encap:Ethernet  Hardware Adresse 00:1d:92:70:66:20  
          inet6-Adresse: fe80::21d:92ff:fe70:6620/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:475 errors:0 dropped:0 overruns:0 frame:0
          TX packets:272 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:100 
          RX bytes:41730 (40.7 KiB)  TX bytes:37258 (36.3 KiB)
          Speicher:fdde0000-fde00000 

lo        Link encap:Lokale Schleife  
          inet Adresse:127.0.0.1  Maske:255.0.0.0
          inet6-Adresse: ::1/128 Gültigkeitsbereich:Maschine
          UP LOOPBACK RUNNING  MTU:16436  Metrik:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

}}}

!!Virtuellen Server einrichten

!Dateisystem anlegen

Zuerst lege ich eine Logical Volume an, die meinem virtuellen Server als Festplatte dienen soll.

Das folgende Kommando legt eine Volume ''vserv01'' in der Volume Group ''vgroup'' an. Die Größe ist 20 GByte. 
{{{
# lvcreate -n vserv01 -L 20G vgroup
}}}

!Debian installieren

Das Schöne ist, dass man das neue System einfach so von CD installieren kann. Ich lege eine Debian-Netzinstallations-CD in das CD Laufwerk des Servers ein und rufe auf:

{{{
virt-install -n vserv01 -r 512 --vcpus=2  \
  --disk path=/dev/mapper/vgroup-vserv01 -c /dev/cdrom --vnc --noautoconsole \
  --os-type linux --os-variant debianSqueeze --accelerate --network=bridge:br0 \
  --hvm
}}}

Das Kommando startet einen VNC-Server, über den der grafische Debian-Installer zur Installation des 
Gastes genutzt werden kann. Der VNC-Server lauscht allerdings nur am ''localhost''-Interface, so
dass man z.B. einen ssh-Tunnel braucht, um von einem anderen Rechner heranzukommen:

{{{
# ssh -L 192.168.1.10:5900:localhost:5900 localhost
}}}

!!Links

*[http://libvirt.org]
*[Wikipedia|http://de.wikipedia.org/wiki/Kernel-based_Virtual_Machine]
*[Howto-Forge Artikel|http://www.howtoforge.com/virtualization-with-kvm-on-a-debian-lenny-server]
*[Xen nach KVM Migration|http://blog.rompe.org/images-virtueller-maschinen-von-xen-nach-kvm-konvertieren-und-in-libvirt-einbinden]
*[der entscheidende Link für GRUB?|http://wiki-oar.imag.fr/index.php/Dealing_with_Grub_on_KVM_images]


[{Tag Virtualisierung}]