Home > Articolo Tecnico > Virtualizzazione con KVM

Virtualizzazione con KVM

October 28th, 2009 Leave a comment Go to comments

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

  1. Davide
    October 29th, 2009 at 21:44 | #1

    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’…

  1. No trackbacks yet.
You must be logged in to post a comment.