!!!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}]