Virtualisierung mit KVM und libvirt unter Ubuntu 10.04

Um eine virtuelle Maschine mit libvirt einzurichten, benötigt man als erstes ein virtuelles Netzwerk. Dazu legt man unter /etc/libvirt/qemu/networks eine XML-Datei an oder editiert die dort bei der Installation angelegte default.xml. Wenn man sich z.B. für das virtuelle Netzwerk 192.168.34.0/24 entschieden hat, könnte diese Datei wie folgt aussehen:

<network>
  <name>subnetz1</name>
  <forward dev='eth0' mode='route'/>
  <bridge name='virbr2' stp='off' forwardDelay='0' />
  <ip address="192.168.34.1" netmask="255.255.255.0" />
</network>

Die fertige XML-Datei wird nach dem speichern und mittels virsh net-define in libvirt bekannt gemacht. Das neue Netzwerk hat in libvirt den Namen subnetz1. Wenn man nur die default.xml editiert hat entfällt dieser natürlich, da dieses Netz bereits bekannt ist.

Nach dem Aufruf von virsh net-autostart subnetz1 ist sichergestellt, dass das Netzwerk auch tatsächlich nach jedem Systemstart sofort verfügbar ist. Mit virsh net-start subnetz1 aktiviert man das Netz von Hand.

Damit die virtuelle Maschine mit der Außenwelt kommunizieren kann, muss jetzt noch IP Forwarding aktiviert werden. Bei Debian/Ubuntu wird das Forwarding in der Datei /etc/sysctl.conf aktiviert. In ihr sollte die folgende Zeile stehen:

net.ipv4.ip_forward=1

Danach kann eine neue virtuelle Maschine angelegt und gestartet werden. Diese muss dann nur noch eine freie IP-Adresse aus dem virtuellen Netzwerk bekommen und kann danach gestartet werden.

Erzeugen eines Festplattenimages

Wenn man ein Image einer Festplatte benötigt, reicht dazu eine gängige Linux Live-CD, wie z.B. Koppix.

Nachdem man die Live-CD gebootet hat kann man sich mit dem folgenden Befehlt eine Liste der Festplatten anzeigen lassen.

fdisk -l

Dabei bezeichnet /dev/hda die erste IDE-Platte und /dev/hdb bezeichnet die zweite IDE-Platte. Bei SCSI-Platten bezeichnet analog dazu /dev/sda die erste Platte und /dev/sdb die zweite. Befindet sich beispielsweise auf der Festplatte /dev/hda das System, kann man davon mit dem Programm dd ein Image erzeugen. Am besten leitet das Image gleich mit netcat auf einen anderen PC. Die genaue Anweisung dazu lautet dann wie folgt:

Empfänger:

netcat -w 30 -vvnl 3333 | gzip -dc > hda.raw

Sender:

dd if=/dev/sda | gzip -c | netcat -w 30 -vvn 192.168.1.1

In dem Beispiel liest dd die Festplatte /dev/hda und schickt die Standardausgabe durch gzip zum Komprimieren. Der komprimierte Datenstrom wird von netcat an die IP-Adresse 192.168.1.1 zu dem Port 3333 gesendet. Auf dem Empfangsrechner nimmt netcat den Datenstrom auf dem Port 3333 entgegen. gzip dekomprimiert diesen Datenstrom. Die Ausgabe wird in die Datei hda.raw umgeleitet. Ist die Übertragung zu Ende, kann dieses Image direkt in QEMU oder KVM als virtuelle Maschine getestet werden.

kvm -hda /mnt/berlindc_backup/sda.raw -m 1024 -net nic,model=virtio -vnc :1
192.168.30.2:1