|
Dimensione: 11811
Commento: importato da ivantu/Virtualizzazione/Kvm/GestioneOspiti
|
Dimensione: 12272
Commento: revisione
|
| Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
| Linea 5: | Linea 5: |
| <<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?t=371617"; rilasci="25.10 25.04 24.04 22.04 10.04")>> | <<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?t=371617"; rilasci="25.10 25.04 24.04 22.04")>> |
| Linea 11: | Linea 11: |
| = Gestione da terminale = 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 fa usando l'opzione --connect:{{{ |
= 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`:{{{ |
| Linea 17: | Linea 17: |
| }}}L'output sarà del tipo:{{{ | |
| Linea 24: | Linea 25: |
| }}}Una volta connessi, si accede al prompt interattivo `virsh #`. == Visualizzare l'elenco dei comandi disponibili == Per visualizzare l'elenco dei comandi disponibili, digitare all'interno del prompt di `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''':{{{ |
| Linea 30: | Linea 35: |
| }}}Per informazioni aggiuntive su un comando specifico, digitare: {{{ help <comando> }}}sostituire ''<comando>'' con il comando specifico. == Definizione della nuova Macchina Virtuale == Prima di gestire la macchina virtuale con '''virsh''', è necessario definirla. Questo comando viene eseguito dal prompt di `virsh`:{{{ virsh # define /etc/libvirt/qemu/newvm.xml |
}}} * 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à:{{{ |
| Linea 41: | Linea 47: |
{{{#!wiki note |
{{{#!wiki note |
| Linea 46: | Linea 51: |
| == Come elencare le Virtual Machine == '''Virsh''' consente di elencare le macchine virtuali presenti sull'host. Questi comandi sono eseguiti dal prompt `virsh #`:{{{ virsh # help list |
== 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: |
| {{{#!wiki note | {{{#!wiki note |
| Linea 68: | Linea 76: |
| * Senza opzioni:{{{ virsh # list |
* Esempio di comando `list` senza opzioni:{{{ list }}}si ottiene un output del tipo:{{{ |
| Linea 75: | Linea 84: |
| * Con opzioni:{{{ virsh # list --all |
* Esempio di comando `list` con opzione `--all`:{{{ list --all }}}si ottiene un output del tipo:{{{ |
| Linea 84: | Linea 94: |
| == Rimuovere macchine virtuali == * Per rimuovere una macchina virtuale dall'elenco, è necessario indefinirla:{{{ virsh # undefine test5 |
<<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 90: | Linea 115: |
== Indefinire macchine virtuali == {{{#!wiki important Indefinire macchina virtuale può cancellare il file XML. }}} * Per indefinire una macchina virtuale, è necessario 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). == Spegnere macchine virtuali == Il modo più "brutale" per spegnere una macchina virtuale, equivalente a un'interruzione dell'alimentazione sul sistema, è: {{{ virsh # destroy mirror Domain mirror destroyed }}} == Riavviare macchine virtuali == * 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 |
{{{#!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 116: | Linea 126: |
| * Quindi per riavviare la macchina virtuale:{{{ virsh # start mirror |
* Quindi per '''riavviare''' la macchina virtuale:{{{ start mirror }}}Output:{{{ |
| Linea 121: | Linea 132: |
| == Sospensione e ripristino di una macchina virtuale == '''Virsh''' consente di * Sospendere facilmente una macchina virtuale:{{{ virsh # suspend mirror |
== Sospensione/ripristino VM == * Per '''sospendere''' una macchina virtuale digitare:{{{ suspend mirror }}}Output:{{{ |
| Linea 129: | Linea 139: |
| * Riavviare:{{{ virsh # resume mirror |
* Per '''riavviarla''':{{{ resume mirror }}}Output:{{{ |
| Linea 134: | Linea 145: |
| = Modifica degli attributi di una macchina virtuale = '''Libvirt''' memorizza la sua configurazione come `.xml` in `/etc/libvirt/qemu`. Il file `.xml` è facilmente comprensibile e simile ai file `*.vmx` di '''VMware'''. È possibile modificare questi file direttamente e riavviare '''libvirt''' affinché i cambiamenti abbiano effetto. |
= 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. |
| Linea 140: | Linea 151: |
| <<Anchor(dump)>> | |
| Linea 144: | Linea 156: |
| Ad esempio, per modificare la macchina chiamata '''foo''' (per l'elenco delle macchine, usare '''virsh list --all'''), eseguire:{{{ | Ad esempio, per modificare la macchina chiamata '''foo''' (per l'elenco utilizzare `virsh list --all`), eseguire:{{{ |
| Linea 146: | Linea 158: |
| }}}modificare /tmp/foo.xml come necessario:{{{ | }}}modificare /tmp/foo.xml come necessario e quindi digitare:{{{ |
| Linea 150: | Linea 162: |
| = Aggiunta di CPU = '''KVM''' consente di creare ospiti '''S'''ymmetric '''M'''ulti'''P'''rocessing. Per allocare due CPU a una macchina virtuale, effettuare il dump del file `xml` come descritto sopra, quindi modificarlo per includere:{{{ |
== 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 160: | Linea 172: |
| }}}Definire la macchina virtuale come descritto sopra. = Aggiunta di memoria = Per modificare l'allocazione di memoria in una macchina virtuale, effettuare il dump del file `xml` come descritto sopra, quindi modificarlo per includere:{{{ |
}}} 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:{{{ |
| Linea 171: | Linea 186: |
| }}}Definire la macchina virtuale come descritto sopra. {{{#!wiki note |
}}} {{{#!wiki note |
| Linea 176: | Linea 190: |
= Cambiare il modello di scheda di rete = |
0. Definire la macchina virtuale come descritto [[#dump|in precedenza]]. == Cambiare modello scheda rete == |
| Linea 181: | Linea 196: |
| Il modello di NIC '''raccomandato''' per le massime prestazioni in una macchina virtuale KVM è `virtio`, che sfrutta le ottimizzazioni paravirtualizzate. 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, effettuare il dump del file `xml` come descritto sopra, quindi modificarlo per avere (ad esempio, per `virtio`):{{{ |
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 192: | Linea 209: |
| }}}Ridefinire la macchina virtuale come descritto sopra. = Aggiunta di dispositivi USB passanti = |
}}} 0. Definire la macchina virtuale come descritto [[#dump|in precedenza]]. = Aggiunta dispositivi USB passanti = |
| Linea 202: | Linea 220: |
| === Modifica di Apparmor === Per consentire a un programma software di accedere correttamente a un dispositivo USB, è necessario modificare [[Sicurezza/AppArmor|Apparmor]]. * Per fare ciò, aprire con un [[Ufficio/EditorDiTesto|editor]] il file `/etc/apparmor.d/abstractions/libvirt-qemu` e decommentare alcune righe:{{{ |
== 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:{{{ |
| Linea 214: | Linea 232: |
| * Dopo le variazioni, [[Sicurezza/AppArmor|Apparmor]] deve essere riavviato digitando nel [[AmministrazioneSistema/Terminale|terminale]] il comando:{{{ | 0. Salvare e chiudere il file. 0. '''Apparmor''' deve essere riavviato digitando nel il comando:{{{ |
| Linea 220: | Linea 239: |
| Per aggiungere un dispositivo USB alla macchina virtuale, è fondamentale prima di tutto 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|Cercare]], relativamente all'USB, il codice del costruttore (Vendor ID) e del prodotto (Product ID). Digitare il seguente comando nel [[AmministrazioneSistema/Terminale|terminale]]:{{{ |
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''':{{{ |
| Linea 232: | Linea 251: |
| }}}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:{{{ |
}}}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 247: | Linea 266: |
| }}}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 '''edit <domain>''', inserendo la seguente configurazione nella sezione `<devices>`:{{{ |
}}}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>`:{{{ |
| Linea 266: | Linea 287: |
| Quando si crea una nuova macchina virtuale o si desidera modificarne una esistente, potrebbe essere necessario assegnarle un nuovo indirizzo MAC o un 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 (Media Access Control) 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:{{{ |
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 271: | Linea 292: |
| * Per ottenere un nuovo UUID (Universally Unique Identifier) per il file `xml`, utilizzare il comando standard `uuidgen`:{{{ | * Per ottenere un nuovo UUID per il file `xml`, utilizzare il comando standard `uuidgen`:{{{ |
| Linea 274: | Linea 295: |
= Ulteriori risorse = * [[https://help.ubuntu.com/community/KVM/Managing|Documento originale]] |
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 domainsLe 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):
Esportare il file xml della macchina virtuale da modificare (dump).
Modificare il file xml.
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:
Effettuare il dump del file xml come descritto in precedenza.
Modificare e salvare il file xml per includere:
<domain type='kvm'> ... <vcpu>2</vcpu> ... </domain>
Definire la macchina virtuale come descritto in precedenza.
Aggiunta di memoria
Per modificare l'allocazione di memoria in una macchina virtuale:
Effettuare il dump del file xml come descritto in precedenza.
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.
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:
Effettuare il dump del file xml come descritto in precedenza.
Modificarlo per avere ad esempio virtio:
<domain type='kvm'> ... <interface type='network'> ... <model type='virtio'/> </interface> ... </domain>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.
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,
- Salvare e chiudere il file.
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.
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.
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.
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
