- KVM/Gestione
Gestione delle macchine virtuali
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]*******ancorare a sezione virsh. Per ottenere l'elenco dei comandi utilizzabili digitare "help". Per informazioni aggiuntive su uno specifico comando, digitare "help commando".
Definizione della nuova MV
Prima di poterla gestire 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.xml
Nota: per elencare la nuova MV, 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, distruggere MV
Le MV visualizzate con list --all sono VMs che sono state "definite" da un file XML. Ogni MV è configurata tramite un file XML in /etc/libvirt/qemu. Per rimuovere una MV dall'elenco delle MV 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 MV (simile all'esecuzione dello shutdown da linea di comando) - ma è anche possibile usare "destroy", il modo più brutale di spegnere una MV, 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 MV:
virsh # define /etc/libvirt/qemu/mirror.xml Domain mirror defined from /etc/libvirt/qemu/mirror.xml
Quindi per riavviare la MV:
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
Edizione degli attributi di una macchina virtuale
libvirt memorizza la sua configurazione come xml in '/etc/libvirt/qemu'. 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 conceto è 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 macchine 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
Modificare 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]