#format wiki #LANGUAGE it <
> <> <> = Introduzione = Questa pagina descrive la gestione delle macchine virtuali da [[AmministrazioneSistema/Terminale|riga di comando]] o tramite [[AmbienteGrafico/AmbientiDesktop|interfaccia grafica]]. <> = Gestione da console Virsh = Per la gestione delle macchine virtuali da terminale utilizzare '''Virsh'''. Per iniziare è necessario stabilire una connessione all'hypervisor '''[[Virtualizzazione/Kvm|KVM]]'''/'''[[Virtualizzazione/Qemu|QEMU]]''' locale. Questo si ottiene utilizzando l'opzione `--connect`:{{{ virsh --connect qemu:///system }}}L'output sarà del tipo:{{{ Connecting to uri: qemu:///system Welcome to virsh, the virtualization interactive terminal. Type: 'help' for help with commands 'quit' to quit virsh # }}}Una volta connessi si accede al prompt interattivo '''virsh'''. {{{#!wiki note I comandi elencati nel proseguo di questa guida si intendono inseriti nel prompt '''virsh''' subito dopo la sigla `virsh #` }}} == Elenco dei comandi disponibili == * Per visualizzare l'elenco dei comandi disponibili digitare nel prompt '''virsh''':{{{ help }}} * Per informazioni aggiuntive su un comando specifico, digitare:{{{ help NOME_COAMANDO }}}sostituire `NOME_COAMANDO` con il comando specifico. <> == Definire nuova VM == * Prima di gestire la macchina virtuale con '''virsh''', è necessario definirla. Digitare nel prompt '''virsh''':{{{ define /etc/libvirt/qemu/newvm.xml }}}che restituirà:{{{ Domain newvm defined from /etc/libvirt/qemu/newvm.xml }}} {{{#!wiki note Ogni macchina virtuale è configurata tramite un file `XML` in `/etc/libvirt/qemu`. }}} == Elencare VM == '''Virsh''' consente di '''elencare''' le macchine virtuali presenti sull'host attraverso il comando `list`. * Visualizzare '''lista parametri''' del comando `list`:{{{ help list }}}si ottiene:{{{ NAME list - list domains SYNOPSIS list [--inactive | --all] DESCRIPTION Returns list of domains. OPTIONS --inactive list inactive domains --all list inactive & active domains }}} {{{#!wiki note Le macchine virtuali visualizzate con '''list --all''' sono definite dal file `XML`.<
>Il comando `list` senza opzioni mostra solo le macchine attualmente in esecuzione. }}} * Esempio di comando `list` senza opzioni:{{{ list }}}si ottiene un output del tipo:{{{ Id Name State ---------------------------------- 15 mirror running 16 vm2 running }}} * Esempio di comando `list` con opzione `--all`:{{{ list --all }}}si ottiene un output del tipo:{{{ Id Name State ---------------------------------- 15 mirror running 16 vm2 running - test5 shut off }}} <> == Spegnere VM == * Per '''spegnere''' nel modo più "delicato" una VM digitare:{{{ shutdown mirror }}}che restituirà{{{ Domain mirror is being shutdown }}} * Un metodo più brutale, equivalente a un'interruzione dell'alimentazione sul sistema, è dato dal comando:{{{ destroy mirror }}}Relativo output:{{{ Domain mirror destroyed }}} == Rimuovere VM == * Dopo aver [[#shutdown|spento]] la macchina virtuale, è possibile '''rimuoverla''' rendendola '''indefinita''':{{{ undefine test5 }}}L'output sarà;{{{ Domain test5 has been undefined }}} {{{#!wiki important Rendere una indefinita una macchina virtuale può cancellare il relativo file di configurazione `XML`. }}} == Riavviare VM == * Se vengono eseguiti cambiamenti al file di configurazione `XML`, è necessario che '''KVM''' lo ricarichi prima di riavviare la macchina virtuale. Digitare nella console '''virsh''':{{{ define /etc/libvirt/qemu/mirror.xml }}}che restituirà:{{{ Domain mirror defined from /etc/libvirt/qemu/mirror.xml }}} * Quindi per '''riavviare''' la macchina virtuale:{{{ start mirror }}}Output:{{{ Domain mirror started }}} == Sospensione/ripristino VM == * Per '''sospendere''' una macchina virtuale digitare:{{{ suspend mirror }}}Output:{{{ Domain mirror suspended }}} * Per '''riavviarla''':{{{ resume mirror }}}Output:{{{ Domain mirror resumed }}} = Modifica attributi = '''Libvirt''' memorizza la sua configurazione in formato `.xml` in `/etc/libvirt/qemu`. Il file è simile ai file `.vmx` di '''VMware'''. È possibile modificare questi file direttamente e riavviare '''libvirt''' affinché i cambiamenti abbiano effetto. Il metodo raccomandato per la modifica degli attributi di una macchina virtuale è tramite '''virsh''' o '''virt-manager''' (se supporta i cambiamenti hardware desiderati): <> 0. Esportare il file `xml` della macchina virtuale da modificare (dump). 0. Modificare il file `xml`. 0. Importare il file `xml` (define). Ad esempio, per modificare la macchina chiamata '''foo''' (per l'elenco utilizzare `virsh list --all`), eseguire:{{{ virsh dumpxml foo > /tmp/foo.xml }}}modificare /tmp/foo.xml come necessario e quindi digitare:{{{ virsh define /tmp/foo.xml }}} == Aggiunta di CPU == '''KVM''' consente di creare ospiti '''S'''ymmetric '''M'''ulti'''P'''rocessing. Per allocare due CPU a una macchina virtuale: 0. Effettuare il dump del file `xml` come descritto [[#dump|in precedenza]]. 0. Modificare e salvare il file `xml` per includere:{{{ ... 2 ... }}} 0. Definire la macchina virtuale come descritto [[#dump|in precedenza]]. == Aggiunta di memoria == Per modificare l'allocazione di memoria in una macchina virtuale: 0. Effettuare il dump del file `xml` come descritto [[#dump|in precedenza]]. 0. Modificare e salvare il file `xml` per includere:{{{ ... 262144 262144 ... }}} {{{#!wiki note Tenere presente che l'allocazione di memoria è in kilobyte. Quindi, per allocare 512 MB di memoria, utilizzare 512 * 1024, ovvero 524288. }}} 0. Definire la macchina virtuale come descritto [[#dump|in precedenza]]. == Cambiare modello scheda rete == '''[[Virtualizzazione/Kvm|KVM]]''' e '''[[Virtualizzazione/Qemu|QEMU]]''' possono emulare diversi modelli di schede di rete. Il modello di NIC '''raccomandato''' per le massime prestazioni in una macchina virtuale '''KVM''' è `virtio`, che sfrutta le ottimizzazioni para-virtualizzate. Altri modelli, come '''e1000''' o '''rtl8139''', sono disponibili per compatibilità con sistemi operativi guest meno recenti o in casi specifici, ma offrono prestazioni inferiori. Per utilizzare un NIC alternativo: 0. Effettuare il dump del file `xml` come descritto [[#dump|in precedenza]]. 0. Modificarlo per avere ad esempio '''virtio''':{{{ ... ... ... }}} 0. Definire la macchina virtuale come descritto [[#dump|in precedenza]]. = Aggiunta dispositivi USB passanti = == Limitazioni == * Il dispositivo deve essere collegato all'host prima dell'avvio della macchina virtuale. * Potrebbe essere necessario configurare opportunamente il controller USB emulato nella VM (es. USB 2.0/3.0) per la massima compatibilità e prestazioni. * È necessario modificare le policy di sicurezza come [[Sicurezza/AppArmor|Apparmor]] sull'host per consentire a [[Virtualizzazione/Qemu|QEMU]] l'accesso diretto all'hardware USB. == Modifica di Apparmor == Per consentire a un software di accedere correttamente a un dispositivo USB, è necessario modificare [[Sicurezza/AppArmor|Apparmor]]. 0. Aprire con i [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione] e un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/apparmor.d/abstractions/libvirt-qemu` e decommentare alcune righe:{{{ # 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, }}} 0. Salvare e chiudere il file. 0. '''Apparmor''' deve essere riavviato digitando nel il comando:{{{ sudo systemctl restart apparmor }}} == Aggiunta di dispositivi USB == Per aggiungere un dispositivo USB alla macchina virtuale è fondamentale identificare il '''Vendor ID''' e il '''Product ID''' del dispositivo. Successivamente è necessario configurare correttamente la macchina virtuale per emulare un controller USB adeguato al dispositivo e aggiungere il '''passthrough''' nel file XML. 0. '''Identificazione del dispositivo USB''': [[Hardware/Periferiche/IdentificarePeriferiche|identificare]], relativamente all'USB, il codice del costruttore '''Vendor ID''' e del prodotto '''Product ID''':{{{ 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, ad esempio, è necessario aggiungere '''Broadcom Corp. Bluetooth Controller''', i codici identificativi ID del costruttore e del prodotto sono rispettivamente '''0a5c''' e '''2110'''. 0. '''Configurazione del Controller USB della VM''': per supportare dispositivi USB 2.0 o 3.0 è cruciale che la macchina virtuale abbia un controller USB emulato del tipo corretto (es. `usb2` per EHCI, `usb3` per XHCI). Questo può essere aggiunto nella sezione `` del file XML della VM. Ad esempio per un controller USB 3.0:{{{ windowsxp }}}Se si utilizza '''virt-manager''' questo può essere aggiunto graficamente nelle impostazioni hardware della VM. 0. '''Aggiunta del dispositivo USB al profilo XML''': con il controller USB appropriato configurato è possibile aggiungere il dispositivo USB specifico utilizzando i '''Vendor ID''' e '''Product ID''' ottenuti. Ciò può essere fatto tramite '''virsh''' con il comando:{{{ sudo virsh edit domain }}}inserendo la seguente configurazione nella sezione ``:{{{ windowsxp }}}È importante assicurarsi che i valori `id` siano preceduti da `0x` per indicare che sono in formato esadecimale. = Ottenere nuovi ID = Quando si crea una nuova macchina virtuale o si desidera modificarne una esistente, potrebbe essere necessario assegnarle un nuovo indirizzo '''MAC''' (Media Access Control) o uno '''UUID''' (Universally Unique Identifier) univoco. Questo aiuta a evitare conflitti di rete o a garantire l'unicità dell'identificatore della VM. * Per ottenere un nuovo indirizzo MAC da inserire nel file `xml` di configurazione della macchina virtuale, utilizzare il seguente comando. Il prefisso `52:54:` è lo standard utilizzato da [[Virtualizzazione/Qemu|QEMU]] per gli indirizzi MAC virtuali:{{{ 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`, utilizzare il comando standard `uuidgen`:{{{ uuidgen }}} = Ulteriori risorse = * [[https://help.ubuntu.com/community/KVM/Managing|Documento originale]] ---- CategoryVirtualizzazione