Indice(depth=2) Informazioni(forum="http://forum.ubuntu-it.org/index.php/topic,371617.0.html") BR
- KVM/Gestione
Introduzione
In questa pagina viene spiegata la gestione delle macchine virtuali da linea di comando o da interfaccia grafica.
Gestione da terminale
Per la gestione delle macchine virtuali da terminale usare [http://help.ubuntu-it.org/9.10/ubuntu/serverguide/it/libvirt.html Virsh].
Per ottenere l'elenco dei comandi utilizzabili digitare:
help
Per informazioni aggiuntive su uno specifico comando, digitare:
help commando
Definizione della nuova Macchina Virtuale
Prima di gestire la macchina virtuale con virsh, è necessario definirla:
$ virsh --connect qemu:///system
Connecting to uri: qemu:///system
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh # define /etc/libvirt/qemu/newvm.xml
Domain newvm defined from /etc/libvirt/qemu/newvm.xmlPer elencare la nuova macchina virtuale, si deve usare list --inactive oppure list --all, dato che list senza opzioni elenca solo le macchine attualmente in esecuzione.
Come elencare le MV
Virsh consente di elencare le macchine virtuali presenti sul host:
yhamon@paris:/etc/libvirt/qemu$ virsh --connect qemu:///system
Connecting to uri: qemu:///system
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh # help list
NAME
list - list domains
SYNOPSIS
list [--inactive | --all]
DESCRIPTION
Returns list of domains.
OPTIONS
--inactive list inactive domains
--all list inactive & active domains
virsh # list
Id Name State
----------------------------------
15 mirror running
16 vm2 running
virsh # list --all
Id Name State
----------------------------------
15 mirror running
16 vm2 running
- test5 shut off
Definire, indefinire, avviare, spegnere e distruggere macchine virtuali
Le macchine virtuali visualizzate con list --all sono definite da un file XML. Ogni macchina virtuale è configurata tramite un file XML in /etc/libvirt/qemu.
Per rimuovere una macchina virtuale dall'elenco occorre indefinirla:
virsh # undefine test5 # WARNING: undefine will delete your XML file! Domain test5 has been undefined virsh # list --all Id Name State ---------------------------------- 15 mirror running 16 vm2 running
per indefinire una macchina virtuale bisogna innanzitutto spegnerla:
virsh # shutdown mirror Domain mirror is being shutdown
questo comando avvia lo spegnimento dolce della macchina virtuale (simile all'esecuzione dello shutdown da linea di comando), ma è anche possibile usare destroy.
Il modo più brutale per spegnere una macchina virtuale, equivalente ad una interruzione dell'alimentazione sul sistema è:
virsh # destroy mirror Domain mirror destroyed
Se vengono eseguiti cambiamente al file di confiurazione XML è necessario che KVM lo ricarichi prima di riavviare la macchina virtuale:
virsh # define /etc/libvirt/qemu/mirror.xml Domain mirror defined from /etc/libvirt/qemu/mirror.xml
Quindi per riavviare la macchina virtuale:
virsh # start mirror Domain mirror started
Sospensione e ripristino di una macchina virtuale
Virsh consente di sospendere e riavviare facilmente una macchina virtuale.
virsh # suspend mirror Domain mirror suspended virsh # resume mirror Domain mirror resumed
Modifica degli attributi di una macchina virtuale
libvirt memorizza la sua configurazione come .xml in '/etc/libvirt/qemu'. Il file .xml è facilmente comprensibile, ed è simile ai file *.vmx di VMware. Quindi è possibile editare questi file sul posto e riavviare libvirt perchè i cambiamenti abbiano effetto. Il metodo raccomandato per la modifica degli attributi di una macchina virtuale è tramite virsh (oppure virt-manager, semprechè supporti i cambiamenti hardware che volete effettuare). Il concetto è semplice:
- Esportare il file xml della MV da editare (aka 'dump')
- editare il file xml
- Importare il file xml (aka 'define')
Per esempio, per editare la macchina chiamata 'foo' (per avere l'elenco delle macchine usare 'virsh list --all'), eseguire:
$ virsh dumpxml foo > /tmp/foo.xml (editare /tmp/foo.xml come necessario) $ virsh define /tmp/foo.xml
Aggiunta di CPU
KVM permette di creare ospiti SMP. Per allocare due CPU in una MV, fare il dump del file xml come sopra, quindi editarlo per avere:
<domain type='kvm'> ... <vcpu>2</vcpu> ... </domain>
Definire la MV come sopra.
Aggiunta di memoria
Per cambiare l'alolocazione di memoria in una MV, fare il dump del file xml come sopra, quindi editarlo per avere:
<domain type='kvm'> ... <memory>262144</memory> <currentMemory>262144</currentMemory> ... </domain>
Definire la MV come sopra. tenere a mente che l'allocazione di memoria è in kilobytes, quindi per allocare 512MB di memoria, usare 512 * 1024, oppure 524288.
Cambiare il modello di scheda di rete
kvm e qemu attualmente ed in maniera prestabilita usano il NIC rtl8139. I NIC supportati in Ubuntu 8.04 LTS sono i82551, i82557b, i82559er, ne2k_pci, pcnet, rtl8139, e1000, e virtio. Per usare un NIC alternativo, fare il dump del file xml come sopra, quindi editarlo per avere:
<domain type='kvm'>
...
<interface type='network'>
...
<model type='e1000'/>
</interface>
...
</domain>Ridefinire la MV come sopra.
Aggiunta di dispositivi USB passanti
Limitazioni
- Solamente il protocollo USB 1.1
- Il dispositivo deve essere collegato prima dell'avvio di KVM
- È necessari modificare Apparmor
Modifica di Apparmor
Per consentire ad un programma software di accedere ad un dispositivo usb correttamente è necessario modificare Apparmor. Per fare ciò editare /etc/apparmor.d/abstractions/libvirt-qemu e decommentare alcune linee:
# WARNING: uncommenting these gives the guest direct access to host hardware. # This is required for USB pass through but is a security risk. You have been # warned. /sys/bus/usb/devices/ r, /sys/devices/*/*/usb[0-9]*/** r, /dev/bus/usb/*/[0-9]* rw,
Dopo le variazioni apparmor deve essere riavviato:
$ sudo /etc/init.d/apparmor restart
Aggiunta di dispositivi USB
Innanzitutto cercare, relativamente all'USB il codice del costruttore (Vendor ID) e del prodotto (Product ID):
$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 005 Device 012: ID 0a5c:2110 Broadcom Corp. Bluetooth Controller Bus 005 Device 003: ID 0483:2016 SGS Thomson Microelectronics Fingerprint Reader Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Se per esempio bisogna aggiungere Broadcom Corp. Bluetooth Controller i codici identificativi (ID) del costruttore e del prodotto sono rispettivamente 0a5c e 2110. Questi valori vanno inseriti nel profilo xml. Ciò può essere fatto tramite virsh con il comando edit <domain>:
<domain type='kvm'>
<name>windowsxp</name>
…
<devices>
…
<hostdev mode='subsystem' type='usb'>
<source>
<vendor id='0x0a5c'/>
<product id='0x2110'/>
</source>
</hostdev>
</devices>
</domain>
Ottenere nuovi ID
Per avere nuovi indirizzi macchina da copiare nel file xml, usare questo comando:
MACADDR="52:54:$(dd if=/dev/urandom count=1 2>/dev/null | md5sum | sed 's/^\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4/')"; echo $MACADDR
Per ottenere un nuovo uuid per il file xml, usare: uuidgen
Ulteriori risorse
[https://help.ubuntu.com/community/KVM/Managing Documento originale]
