## page was renamed from Emulatori/Kvm/GestioneOspiti
## page was renamed from FabioMarconi/Prove10
#format wiki
##Page updated 13-06-2011
#language it
< >
<>
<>
= Introduzione =
In questa pagina viene spiegata la gestione delle macchine virtuali da riga di comando o da interfaccia grafica.
= Gestione da terminale =
Per la gestione delle macchine virtuali da terminale usare [[http://help.ubuntu-it.org/current/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.xml
}}}
Per 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 sull'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 a un'interruzione dell'alimentazione sul sistema è:{{{
virsh # destroy mirror
Domain mirror destroyed
}}}
* Se vengono eseguiti cambiamenti al file di configurazione `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''' di modo che i cambiamenti abbiano effetto.
Il metodo raccomandato per la modifica degli attributi di una macchina virtuale è tramite '''virsh''' oppure '''virt-manager''' (sempre che supporti i cambiamenti hardware che volete effettuare):
0. Esportare il file `xml` della macchina virtuale da editare (aka 'dump')
0. Editare il file `xml`.
0. 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 macchina virtuale, fare il dump del file `xml` come sopra, quindi editarlo per avere:{{{
...
2
...
}}}
Definire la macchina virtuale come sopra.
= Aggiunta di memoria =
Per cambiare l'allolocazione di memoria in una macchina virtuale, fare il dump del file `xml` come sopra, quindi editarlo per avere:{{{
...
262144262144
...
}}}
Definire la macchina virtuale come sopra.
Tenere a mente che l'allocazione di memoria è in kilobytes, quindi per allocare 512 MB di memoria, usare 512 * 1024, oppure 524288.
= Cambiare il modello di scheda di rete =
'''kvm''' e '''qemu''' attualmente e in maniera prestabilita usano il NIC «rtl8139».
I NIC supportati in '''Ubuntu 8.04''' 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:{{{
...
...
...
}}}
Ridefinire la macchina virtuale come sopra.
= Aggiunta di dispositivi USB passanti =
== Limitazioni ==
* Solamente il protocollo USB 1.1
* Il dispositivo deve essere collegato prima dell'avvio di '''KVM'''.
* È necessario modificare Apparmor
== Modifica di Apparmor ==
Per consentire a un programma software di accedere correttamente a un dispositivo usb è necessario modificare Apparmor.
* Per fare ciò [[Ufficio/EditorDiTesto|editare]] il file `/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 digitando in una finestra di terminale:{{{
sudo /etc/init.d/apparmor restart
}}}
== Aggiunta di dispositivi USB ==
Cercare, relativamente all'USB il codice del costruttore (Vendor ID) e del prodotto (Product ID).
Per fare ciò digitare il seguente comando in una finestra di terminale:{{{
lsusb
}}}
il risultato sarà simile al seguente:{{{
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 ''':{{{
windowsxp
…
…
}}}
= 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]]
----
CategoryVirtualizzazione CategoryDaRevisionare