Virtualizzazione · 8 min read · Jan 12, 2026

Virtualizzazione Con KVM Su Ubuntu 12.04 LTS

Virtualizzazione Con KVM Su Ubuntu 12.04 LTS

Versione 1.0
Autore: Falko Timme
Seguimi su Twitter

Questa guida spiega come puoi installare e utilizzare KVM per creare ed eseguire macchine virtuali su un server Ubuntu 12.04 LTS. Mostrerò come creare macchine virtuali basate su immagini e anche macchine virtuali che utilizzano un volume logico (LVM). KVM è l’abbreviazione di Kernel-based Virtual Machine e sfrutta la virtualizzazione hardware, cioè, hai bisogno di una CPU che supporti la virtualizzazione hardware, ad esempio Intel VT o AMD-V.

Non fornisco alcuna garanzia che questo funzionerà per te!

1 Nota Preliminare

Sto usando una macchina con il nome host server1.example.com e l’indirizzo IP 192.168.0.100 qui come mio host KVM.

Poiché eseguiremo tutti i passaggi di questo tutorial con privilegi di root, possiamo o anteporre tutte le comandi in questo tutorial con la stringa sudo, oppure diventare root subito digitando

sudo su

2 Installazione di KVM e vmbuilder

Controlla prima se la tua CPU supporta la virtualizzazione hardware - se questo è il caso, il comando

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

dovrebbe visualizzare qualcosa, ad esempio come questo:

root@server1:~# egrep '(vmx|svm)' --color=always /proc/cpuinfo  
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush  
mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good nopl extd_apicid  
pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv  
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush  
mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good nopl extd_apicid  
pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv  
root@server1:~#

Se non viene visualizzato nulla, allora il tuo processore non supporta la virtualizzazione hardware, e devi fermarti qui.

Per installare KVM e vmbuilder (uno script per creare macchine virtuali basate su Ubuntu), eseguiamo

apt-get install ubuntu-virt-server python-vm-builder kvm-ipxe

Dopo dobbiamo aggiungere l’utente con cui siamo attualmente connessi (root) al gruppo libvirtd:

adduser `id -un` libvirtd  
adduser `id -un` kvm

Devi disconnetterti e riconnetterti affinché le nuove appartenenze al gruppo abbiano effetto.

Per controllare se KVM è stato installato con successo, esegui

virsh -c qemu:///system list

Dovrebbe visualizzare qualcosa come questo:

root@server1:~# virsh -c qemu:///system list  
 Id Name                 State  
----------------------------------  
  
root@server1:~#

Se visualizza un errore invece, allora qualcosa è andato storto.

Successivamente dobbiamo impostare un bridge di rete sul nostro server in modo che le nostre macchine virtuali possano essere accessibili da altri host come se fossero sistemi fisici nella rete.

Per fare ciò, installiamo il pacchetto bridge-utils…

apt-get install bridge-utils

… e configuriamo un bridge. Apri /etc/network/interfaces:

vi /etc/network/interfaces

Prima della modifica, il mio file appare come segue:

| # Questo file descrive le interfacce di rete disponibili sul tuo sistema # e come attivarle. Per ulteriori informazioni, vedere interfaces(5). # L'interfaccia di rete di loopback auto lo iface lo inet loopback # L'interfaccia di rete primaria auto eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 dns-nameservers 8.8.8.8 8.8.4.4 |

Lo cambio in modo che appaia così:

| # Questo file descrive le interfacce di rete disponibili sul tuo sistema # e come attivarle. Per ulteriori informazioni, vedere interfaces(5). # L'interfaccia di rete di loopback auto lo iface lo inet loopback # L'interfaccia di rete primaria auto eth0 iface eth0 inet manual auto br0 iface br0 inet static address 192.168.0.100 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 dns-nameservers 8.8.8.8 8.8.4.4 bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off |

(Assicurati di utilizzare le impostazioni corrette per la tua rete!)

Riavvia la rete…

/etc/init.d/networking restart

… e esegui

ifconfig

Ora dovrebbe mostrare il bridge di rete (br0):

root@server1:~# ifconfig  
br0       Link encap:Ethernet  HWaddr 00:1e:90:f3:f0:02  
          inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0  
          inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:29 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:1934 (1.9 KB)  TX bytes:2844 (2.8 KB)  
  
eth0      Link encap:Ethernet  HWaddr 00:1e:90:f3:f0:02  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:44613 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:23445 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:1000  
          RX bytes:63663064 (63.6 MB)  TX bytes:1792940 (1.7 MB)  
          Interrupt:41 Base address:0xa000  
  
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0  
          inet6 addr: ::1/128 Scope:Host  
          UP LOOPBACK RUNNING  MTU:16436  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)  
  
virbr0    Link encap:Ethernet  HWaddr 2a:4a:49:13:de:8f  
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)  
  
root@server1:~#

Prima di avviare la nostra prima macchina virtuale, ti consiglio di riavviare il sistema:

reboot

Se non lo fai, potresti ricevere un errore come open /dev/kvm: Permission denied nei log della macchina virtuale nella directory /var/log/libvirt/qemu/.

3 Creazione di una VM Basata su Immagine

Possiamo ora creare la nostra prima VM - una VM basata su immagine (se ti aspetti molto traffico e molte operazioni di lettura e scrittura per quella VM, usa invece una VM basata su LVM come mostrato nel capitolo 6 - le VM basate su immagine sono pesanti su IO del disco rigido).

Voglio creare le mie macchine virtuali nella directory /var/lib/libvirt/images/ (non possono essere create nella directory /root perché l’utente libvirt-qemu non ha permessi di lettura in quella directory).

Creeremo una nuova directory per ogni VM che vogliamo creare, ad esempio /var/lib/libvirt/images/vm1, /var/lib/libvirt/images/vm2, /var/lib/libvirt/images/vm3, e così via, perché ogni VM avrà una sottodirectory chiamata ubuntu-kvm, e ovviamente può esserci solo una di queste directory in /var/lib/libvirt/images/vm1, per esempio. Se provi a creare una seconda VM in /var/lib/libvirt/images/vm1, per esempio, riceverai un messaggio di errore che dice ubuntu-kvm already exists (a meno che tu non esegua vmbuilder con l’argomento –dest=DESTDIR):

root@server1:/var/lib/libvirt/images/vm1# vmbuilder kvm ubuntu -c vm2.cfg  
2009-05-07 16:32:44,185 INFO     Cleaning up  
ubuntu-kvm already exists  
root@server1:/var/lib/libvirt/images/vm1#

Utilizzeremo lo strumento vmbuilder per creare le VM. (Puoi saperne di più su vmbuilder qui.) vmbuilder utilizza un modello per creare macchine virtuali - questo modello si trova nella directory /etc/vmbuilder/libvirt/. Prima creiamo una copia:

mkdir -p /var/lib/libvirt/images/vm1/mytemplates/libvirt  
cp /etc/vmbuilder/libvirt/* /var/lib/libvirt/images/vm1/mytemplates/libvirt/

Ora arriviamo alla partizione della nostra VM. Creiamo un file chiamato vmbuilder.partition…

vi /var/lib/libvirt/images/vm1/vmbuilder.partition

… e definiamo le partizioni desiderate come segue:

| root 8000 swap 4000 --- /var 20000 |

Questo definisce una partizione root (/) con una dimensione di 8000MB, una partizione swap di 4000MB e una partizione /var di 20000MB. La linea — fa sì che la partizione successiva (/var in questo esempio) sia su un’immagine disco separata (cioè, questo creerebbe due immagini disco, una per root e swap e una per /var). Ovviamente, sei libero di definire qualsiasi partizione tu voglia (purché tu definisca anche root e swap), e ovviamente, possono essere in un’unica immagine disco - questo è solo un esempio.

Voglio installare openssh-server nella VM. Per assicurarmi che ogni VM ottenga una chiave OpenSSH unica, non possiamo installare openssh-server quando creiamo la VM. Pertanto, creiamo uno script chiamato boot.sh che verrà eseguito quando la VM verrà avviata per la prima volta. Installerà openssh-server (con una chiave unica) e costringerà anche l’utente (userò il nome utente predefinito administrator per le mie VM insieme alla password predefinita howtoforge) a cambiare la password quando accede per la prima volta:

vi /var/lib/libvirt/images/vm1/boot.sh

| # Questo script verrà eseguito la prima volta che la macchina virtuale si avvia # Viene eseguito come root. # Scade l'account utente passwd -e administrator # Installa openssh-server apt-get update apt-get install -qqy --force-yes openssh-server |

Assicurati di sostituire il nome utente administrator con il tuo nome di accesso predefinito.

(Puoi trovare ulteriori informazioni qui: https://help.ubuntu.com/community/JeOSVMBuilder#First%20boot)

(Puoi anche definire uno script “primo accesso” come descritto qui: https://help.ubuntu.com/community/JeOSVMBuilder#First%20login)

Ora dai un’occhiata a

vmbuilder kvm ubuntu --help

per conoscere le opzioni disponibili.

Per creare la nostra prima VM, vm1, andiamo nella directory della VM…

cd /var/lib/libvirt/images/vm1/

… e eseguiamo vmbuilder, ad esempio come segue:

vmbuilder kvm ubuntu --suite=precise --flavour=virtual --arch=amd64 --mirror=http://de.archive.ubuntu.com/ubuntu -o --libvirt=qemu:///system --ip=192.168.0.101 --gw=192.168.0.1 --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=/var/lib/libvirt/images/vm1/boot.sh --mem=256 --hostname=vm1 --bridge=br0

La maggior parte delle opzioni sono autoesplicative. –part specifica il file con i dettagli della partizione, relativo alla nostra directory di lavoro (è per questo che dovevamo andare nella nostra directory VM prima di eseguire vmbuilder), –templates specifica la directory che contiene il file modello (ancora relativo alla nostra directory di lavoro), e –firstboot specifica lo script di primo avvio. –libvirt=qemu:///system dice a KVM di aggiungere questa VM all’elenco delle macchine virtuali disponibili. –addpkg ti consente di specificare i pacchetti Ubuntu che desideri installare durante la creazione della VM (vedi sopra perché non dovresti aggiungere openssh-server a quell’elenco e usare invece lo script di primo avvio). –bridge imposta una rete bridged; poiché abbiamo creato il bridge br0 nel capitolo 2, specifichiamo quel bridge qui.

Nella linea –mirror, puoi specificare un repository ufficiale di Ubuntu in –mirror, ad esempio http://de.archive.ubuntu.com/ubuntu. Se ometti –mirror, verrà utilizzato il repository predefinito di Ubuntu (http://archive.ubuntu.com/ubuntu).

Il processo di costruzione può richiedere alcuni minuti.

Successivamente, puoi trovare un file di configurazione XML per la VM in /etc/libvirt/qemu/ (=> /etc/libvirt/qemu/vm1.xml):

ls -l /etc/libvirt/qemu/
root@server1:/var/lib/libvirt/images/vm1# ls -l /etc/libvirt/qemu/  
total 8  
drwxr-xr-x 3 root root 4096 May 21 13:00 networks  
-rw------- 1 root root 2082 May 21 13:15 vm1.xml  
root@server1:/var/lib/libvirt/images/vm1#

Le immagini disco si trovano nella sottodirectory ubuntu-kvm della nostra directory VM:

ls -l /var/lib/libvirt/images/vm1/ubuntu-kvm/
root@server1:/var/lib/libvirt/images/vm1# ls -l /var/lib/libvirt/images/vm1/ubuntu-kvm/  
total 604312  
-rw-r--r-- 1 root root 324337664 May 21 13:14 tmpE4IiRv.qcow2  
-rw-r--r-- 1 root root 294715392 May 21 13:15 tmpxvSVOT.qcow2  
root@server1:/var/lib/libvirt/images/vm1#
Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.