KVM

Installation et utilisation

Installation sur Debian SQUEEZE

Note sur l'install de test : le système est installé sur un volume logique LVM de 10G (/boot 150M en primaire-ext3 + swap en logique + le reste en LVM, 1 Volum Group, 1 premier Volum Logic pour /).

Ainsi, si on manque de place sur /, on pourra toujours l'étendre par l'agrandissement du volume logique (ça obligera à booter sur un CD live, mais au moins on ne sera pas bloqué).

Les VM seront gérées dans des LV aussi.

Vérifier les possibilités de virtualisation du processeur :

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

Note : sur un DELL R310, il a fallu activer la virtaulisation dans le BIOS (CPU parameters/Virtualization technology) sinon kvm ne se chargeait pas, même si "vmx" apparaissait dans la commande ci-dessus.

Installer KVM. On installe aussi libvirt, librairie + outils permettant de gérer KVM en ligne de commande et à distance (il en existe d'autres, Proxmox utilise son propre outils "qm" par exemple).

apt-get install qemu-kvm libvirt-bin bridge-utils screen console-data console-tools debconf

Par sécurité il est conseillé de stopper la fonctionnalité de swapper la mémoire "sous-utilisée" (sinon risque de surcharge avec kvm)

sysctl vm.swappiness=0
echo "vm.swappiness=0" >> /etc/sysctl.conf

Modifier les interfaces réseau pour le bridge (les VMs passeront par ce bridge pour accéder au réseau). Dans /etc/network/interfaces :

...
#allow-hotplug eth0
#iface eth0 inet dhcp
# The primary network interface
auto eth0
iface eth0 inet manual

# Network bridge
auto br0
iface br0 inet static
address 192.168.1.110
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.254
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

Editer /etc/hosts pour mettre l'adresse 192.168.1.110 en face du hostname, puis

reboot

virt-manager

Sur un poste de travail (Ubuntu par ex.) installer virt-manager (partie client de la librairie libvirt). Echanger les clés avec le serveur pour avoir une connexion sans mot de passe, lancer virt-manager et créer une connexion "QEMU/KVM" sur "Tunnel SSH".

Création des VMs

Chargement d'un iso pour l'installation du guest

cd /var/lib/libvirt/images/
wget http://cdimage.debian.org/debian-cd/6.0.0/multi-arch/iso-cd/debian-6.0.0-amd64-i386-netinst.iso

Test d'une VM en fichier (on verra LVM plus tard):

1. création du fichier

kvm-img create -f qcow2 /var/lib/libvirt/images/vdisk.img 4G 

2. Boot et install OS :

kvm -hda /var/lib/libvirt/images/vdisk.img -cdrom /var/lib/libvirt/images/debian-6.0.0-amd64-i386-netinst.iso -boot d -m 512

Gestion des VMs

Sur l'hôte, on peut utiliser virsh pour interagir avec les VM

virsh list
virsh start my-guest-vm
virsh shutdown my-guest-vm

Note : pour lancer/arrêter un système invité avec virsh il faut que acpid et acpi-support soient installés sur l'invité (pour qu'il détecte la demande d'arrêt comme si on appuyait sur le bouton OFF)

Pour forcer l'arrêt d'une VM (arrêt brutal au bouton) utiliser

virsh destroy my-guest-vm

Convertir une image VirtualBox vers KVM

Pour convertir une image VDI vers KVM, convertir d'abord le disque Virtualbox VDI au format raw par VboxManage

VBoxManage clonehd --format RAW <chemin complet>/system.vdi system.img

Puis convertir l'image raw au format qcow par qemu-img

qemu-img convert -f raw system.img -O qcow2 system.qcow

C'est tout, normalement le fichier qcow peut être utilisé dans KVM.

Pour tester la nouvelle image :

kvm -m 512 -hda system.qcow

En cas d'erreur :

ERROR: Cannot register the hard disk '/home/user/.VirtualBox/VDI/Disque.vdi' with UUID {d587e3d6-b0e3-4a87-9777-6caa94242f54} because a hard disk '/home/user/.VirtualBox/VDI/Disque.vdi' with UUID {d587e3d6-b0e3-4a87-9777-6caa94242f54} already exists in the media registry ('/home/user/.VirtualBox/VirtualBox.xml')
Details: code NS_ERROR_INVALID_ARG (0x80070057), component VirtualBox, interface IVirtualBox, callee nsISupports
Context: "OpenHardDisk(Bstr(szFilenameAbs), AccessMode_ReadWrite, false, Bstr(""), false, Bstr(""), srcDisk.asOutParam())" at line 633 of file VBoxManageDisk.cpp

au moment de la conversion, pas de panique! Il faut simplement donner le chemin absolu de l'image source (VDI).