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 su2 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/cpuinfodovrebbe 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-ipxeDopo dobbiamo aggiungere l’utente con cui siamo attualmente connessi (root) al gruppo libvirtd:
adduser `id -un` libvirtd
adduser `id -un` kvmDevi disconnetterti e riconnetterti affinché le nuove appartenenze al gruppo abbiano effetto.
Per controllare se KVM è stato installato con successo, esegui
virsh -c qemu:///system listDovrebbe 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/interfacesPrima 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
ifconfigOra 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:
rebootSe 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 --helpper 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=br0La 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#Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.