## 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:{{{ ... 262144 262144 ... }}} 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