Virtualizzazione con KVM
KVM (Kernel-based Virtual Machine) è un sistema di virtualizzazione integrato nel kernel di linux (kvm.ko) su hardware x86 che disponga delle “virtualizzation extensions”. Per controllare che un processore disponga del supporto hardware deve essere presente nel file /proc/cpuinfo la stringa vmx|svm (questa verifica può essere fatta digitando il comando ~#egrep ‘(vmx|svm)’ /proc/cpuinfo). Verificato questo elemento si può procedere all’installazione. Prima di tutto scarichiamo i pacchetti
sudo apt-get install virt-manager libvirt-bin kvm
libvirt-bin è un toolkit il cui scopo è gestire diversi hypervisor (= la tecnologia di virtualizzazione scelta) tra cui XEN, QEMU e appunto KVM.
virt-manager è una applicazione desktop che ci permette di svolgere per via grafica praticamente tutte le più comuni operazioni relative alla creazione e gestione della macchina virtuale (detta anche domain).
Una volta installato il software necessario lanciamo il virt-manager
A questo punto cliccare con il tasto dx sulla riga “localhost (System)…” e scegliere la voce “New”. Apparirà il wizard per la creazione della macchina virtuale:
Cliccando su Forward andiamo avanti con l’installazione…
Scegliere a questo punto il sistema operativo che si vuole installare
Scegliere l’immagine ISO o il CD/DVD per caricare il sistema operativo da installare. (Per creare un immagine iso sotto linux è sufficiente – una volta inserito il cd – digitare il comando cat /dev/cdrom > image-name.iso )
A questo punto va scelta la dimensione del disco virtuale da cerare (Se il disco dovrà essere molto grande non conviene allocare subito l’intero spazio)
Scegliere il “default virtual network”
…e la quantità di RAM da allocare
A questo punto partirà l’installazione del Sistema Operativo…
Terminata l’installazione, il nostro nuovo sistema operativo (in questo caso windows xp) è pronto per essere utilizzato. Potremo navigare uscendo nattati con l’indirizzo della macchina che ospita il sistema virtualizzato (detta nodo), ma la cosa interessante è quella di configurare la rete della nostra macchina linux come un bridge. In questo modo è come se la macchina virtualizzata avesse “accesso diretto” alla scheda di rete fisica…Tutto ciò che possiamo fare con switch e macchine reali possiamo farlo anche con bridge e macchine virtuali.
Ecco come procedere (nodo: ubuntu server 8.04; domain: windows xp)
Sulla macchina fisica (ubuntu):
– scaricare le bridge utils (apt-get install bridge-utils)
– editare il file di gestione della rete (vi /etc/network/interfaces) e sostituire la configurazione nel seguente modo:
*nel caso si utilizzasse indirizzamento statico*
auto lo iface lo inet loopback auto eth0 iface eth0 inet manual auto br0 iface br0 inet static address 192.168.0.10 #sostituire l'IP con quello corretto network 192.168.0.0 #sostituire la network con quella corretta netmask 255.255.255.0 #sostituire la netmask con quella corretta gateway 192.168.0.1 #sostituire il gateway con quello corretto bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0
*nel caso si utilizzasse dhcp*
auto lo iface lo inet loopback auto eth0 iface eth0 inet manual auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0
Così facendo viene creata l’interfaccia br0 (ricordarsi di fare un restart della rete –> sudo /etc/init.d/networking restart)
Arrivati a questo punto è come se la macchina fisica (il nodo) fosse uno switch a cui è stato dato l’ip statico o in dhcp. A questo punto su questo switch (bridge) possiamo attaccare altre macchine virtuali (i domain).
Per “agganciare” la macchina virtuale al nostro bridge dobbiamo editare il file xml che rappresenta la nostra macchina virtuale vm1 (vi /etc/libvirt/qemu/vm1.xml ) e cambiamo
<interface type='network'> <mac address='%MAC%'/> <source network='default'/> </interface>
con
<interface type='bridge'> <mac address='%MAC%'/> <source bridge='br0'/> </interface>
A questo punto il gioco è fatto. Per ottimizzare il tutto non ci resta che installare sotto Windows i driver paravirtulizzati della scheda di rete (virtio – NetKVM) scaricarli direttamente dalla macchina virtuale. A questo punto va spenta la vm, va modificato il file xlm nel seguente modo
<interface type='bridge'> <mac address='%MAC%'/> <source bridge='br0'/> <model type='virtio'/> </interface>
e va riavviata la macchina.
— aggiornamento 08/07/2013 —
Clonare un virtual host da riga di comando
sospenedere l’host prima di cominciare la copia
[root@centos ~]# virsh suspend vm1 Domain vm1 suspended
eseguire il comando:
[root@centos ~]# virt-clone -o vm1 -n vm2 -f /vm/vm2.img Cloning /vm/vm2.img | 11 GB 01:33 Clone 'vm2' created successfully.
Riesumare vm1
[root@centos ~]# virsh resume vm1 Domain vm1 resumed
Grandioso! ;)))
KVM è l’hypervisor che preferisco in assoluto per la sua legerezza e per le sue prestazioni.
Purtroppo sofrre ancora qualche problema di gioventù… E anche libvirt deve migliorare un po’…