Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "Virtualizzazione/Kvm/GestioneOspiti"
Differenze tra le versioni 20 e 38 (in 18 versioni)
Versione 20 del 17/04/2010 17.16.35
Dimensione: 8884
Commento:
Versione 38 del 25/10/2025 08.51.43
Dimensione: 12314
Autore: jeremie2
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 2: Linea 2:
#language it
[[Indice(depth=2)]]
[[Informazioni(forum="http://forum.ubuntu-it.org/index.php/topic,371617.0.html")]]
[[BR]]
 KVM/Gestione
#LANGUAGE it
<<BR>>
<<
Indice(depth=2)>>
<<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?t=371617"; rilasci="25.10 25.04 24.04 22.04")>>
Linea 10: Linea 9:
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
Questa pagina descrive la gestione delle macchine virtuali da [[AmministrazioneSistema/Terminale|riga di comando]] o tramite [[AmbienteGrafico/AmbientiDesktop|interfaccia grafica]].

<<Anchor(shell_virsh)>>
= 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:{{{
Linea 33: Linea 25:
virsh # define /etc/libvirt/qemu/newvm.xml 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.

<<Anchor(def)>>
== 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à:{{{
Linea 36: Linea 49:

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 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
 {{{#!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:{{{
Linea 64: Linea 72:

virsh # list
}}}

 {{{#!wiki note
Le macchine virtuali visualizzate con '''list --all''' sono definite dal file `XML`.<<BR>>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:{{{
Linea 70: Linea 85:

virsh # list --all
}}}
 * Esempio di comando `list` con opzione `--all`:{{{
list --all
}}}si ottiene un output del tipo:{{{
Linea 79: Linea 96:
== 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!
<<Anchor(shutdown)>>
== 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à;{{{
Linea 86: Linea 116:

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
}}}
 {{{#!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à:{{{
Linea 110: Linea 128:

* Quindi per riavviare la macchina virtuale:{{{
virsh # start mirror
 * Quindi per '''riavviare''' la macchina virtuale:{{{
start mirror
}}}Output:{{{
Linea 116: Linea 134:
== Sospensione e ripristino di una macchina virtuale ==

'''Virsh''' consente
di sospendere e riavviare facilmente una macchina virtuale:{{{
virsh # suspend mirror
== Sospensione/ripristino VM ==

 * Per '''sospen
dere''' una macchina virtuale digitare:{{{
suspend mirror
}}}Output:{{{
Linea 121: Linea 140:

virsh # resume mirror
}}}
 * Per '''riavviarla''':{{{
resume mirror
}}}Output:{{{
Linea 126: Linea 147:
= 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''' (sempre chè 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:{{{
= 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):

<<Anchor(dump)>>
 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:{{{
Linea 153: Linea 175:

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:{{{
 0. Definire la macchina virtuale come descritto [[#dump|in precedenza]].

=
= Aggiunta di memoria ==

Per modificare l'allocazione di memoria in una macchina virtuale:
 0. Effettu
are il dump del file `xml` come descritto [[#dump|in precedenza]].
 0. Modificare e sal
vare il file `xml` per includere:{{{
Linea 166: Linea 189:

Definire la macchina virtuale 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''' 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:{{{
 {{{#!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''':{{{
Linea 182: Linea 207:
      <model type='e1000'/>       <model type='virtio'/>
Linea 187: Linea 212:

Rid
efinire la macchina virtuale come sopra.

= Aggiunta di dispositivi USB passanti =
 0. Definire la macchina virtuale come descritto [[#dump|in precedenza]].

= Aggiunta dispositivi USB passanti =
Linea 194: Linea 218:
 * Solamente il protocollo USB 1.1
 * Il dispositivo deve essere collegato prima dell'avvio di '''KVM'''.
 * È necessario modificare Apparmor
 * 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.
 
Linea 200: Linea 224:
Per consentire ad un programma software di accedere ad un dispositivo usb correttamente è necessario modificare Apparmor. 

 * Per fare ciò [:Ufficio/EditorDiTesto:editare] il file `/etc/apparmor.d/abstractions/libvirt-qemu` e decommentare alcune linee:
{{{
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:{{{
Linea 211: Linea 234:

* Dopo le variazioni apparmor deve essere riavviato digitando in una finestra di terminale:{{{
$ sudo /etc/init.d/apparmor restart
 0. Salvare e chiudere il file.
0. '''Apparmor''' deve essere riavviato digitando nel il comando:{{{
sudo systemctl restart apparmor
Linea 218: Linea 241:
Cercare, relativamente all'USB il codice del costruttore (Vendor ID) e del prodotto (Product ID); digitare il seguente comando in una finestra di terminale:{{{
$ lsusb
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:{{{
Linea 227: Linea 253:
}}}

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>''':{{{
}}}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 `<devices>` del file XML della VM. Ad esempio per un controller USB 3.0:{{{
Linea 245: Linea 268:
}}}
}}}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 `<devices>`:{{{
<domain type='kvm'>
  <name>windowsxp</name>
  …
  <devices>
    …
    <hostdev mode='subsystem' type='usb'>
      <source>
        <vendor id='0x0a5c'/>
        <product id='0x2110'/>
      </source>
    </hostdev>
  </devices>
</domain>
}}}È importante assicurarsi che i valori `id` siano preceduti da `0x` per indicare che sono in formato esadecimale.
  
Linea 249: Linea 289:
 * Per avere nuovi indirizzi macchina da copiare nel file `xml`, usare questo comando:{{{ 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:{{{
Linea 251: Linea 293:
}}
 * Per ottenere un nuovo uuid per il file `xml`, usare:{{{ 
}}}
 * Per ottenere un nuovo UUID per il file `xml`, utilizzare il comando standard `uuidgen`:{{{
Linea 254: Linea 296:
}} }}}
Linea 257: Linea 300:
 *[https://help.ubuntu.com/community/KVM/Managing Documento originale]
##traduzione pagina del 20.02.2010
 * [[https://help.ubuntu.com/community/KVM/Managing|Documento originale]]
Linea 261: Linea 303:
CategoryHomepage CategoryInTraduzione CategoryVirtualizzazione


Guida verificata con Ubuntu: 22.04 24.04 25.10

Problemi in questa pagina? Segnalali in questa discussione

Introduzione

Questa pagina descrive la gestione delle macchine virtuali da riga di comando o tramite interfaccia grafica.

Gestione da console Virsh

Per la gestione delle macchine virtuali da terminale utilizzare Virsh.

Per iniziare è necessario stabilire una connessione all'hypervisor KVM/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.

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

    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

    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 spento la macchina virtuale, è possibile rimuoverla rendendola indefinita:

    undefine test5

    L'output sarà;

    Domain test5 has been undefined

    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):

  1. Esportare il file xml della macchina virtuale da modificare (dump).

  2. Modificare il file xml.

  3. 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 Symmetric MultiProcessing. Per allocare due CPU a una macchina virtuale:

  1. Effettuare il dump del file xml come descritto in precedenza.

  2. Modificare e salvare il file xml per includere:

    <domain type='kvm'>
      ...
      <vcpu>2</vcpu>
      ...
    </domain>
  3. Definire la macchina virtuale come descritto in precedenza.

Aggiunta di memoria

Per modificare l'allocazione di memoria in una macchina virtuale:

  1. Effettuare il dump del file xml come descritto in precedenza.

  2. Modificare e salvare il file xml per includere:

    <domain type='kvm'>
      ...
      <memory>262144</memory>
      <currentMemory>262144</currentMemory>
      ...
    </domain>

    Tenere presente che l'allocazione di memoria è in kilobyte. Quindi, per allocare 512 MB di memoria, utilizzare 512 * 1024, ovvero 524288.

  3. Definire la macchina virtuale come descritto in precedenza.

Cambiare modello scheda rete

KVM e 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:

  1. Effettuare il dump del file xml come descritto in precedenza.

  2. Modificarlo per avere ad esempio virtio:

    <domain type='kvm'>
      ...
        <interface type='network'>
          ...
          <model type='virtio'/>
        </interface>
      ...
    </domain>
  3. Definire la macchina virtuale come descritto 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 Apparmor sull'host per consentire a QEMU l'accesso diretto all'hardware USB.

Modifica di Apparmor

Per consentire a un software di accedere correttamente a un dispositivo USB, è necessario modificare Apparmor.

  1. Aprire con i privilegi di amministrazione] e un [[Ufficio/EditorDiTesto 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,
  2. Salvare e chiudere il file.
  3. 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.

  1. Identificazione del dispositivo USB: 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.

  2. 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 <devices> del file XML della VM. Ad esempio per un controller USB 3.0:

    <domain type='kvm'>
      <name>windowsxp</name>
      <devices>
        <hostdev mode='subsystem' type='usb'>
          <source>
            <vendor id='0x0a5c'/>
            <product id='0x2110'/>
          </source>
        </hostdev>
      </devices>
    </domain>

    Se si utilizza virt-manager questo può essere aggiunto graficamente nelle impostazioni hardware della VM.

  3. 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 <devices>:

    <domain type='kvm'>
      <name>windowsxp</name>
      <devices>
        <hostdev mode='subsystem' type='usb'>
          <source>
            <vendor id='0x0a5c'/>
            <product id='0x2110'/>
          </source>
        </hostdev>
      </devices>
    </domain>

    È 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 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


CategoryVirtualizzazione