Come utilizzare i dispositivi USB con una macchina virtuale VMware vSphere

La funzione principale di un hypervisor è emulare i dispositivi utilizzati dalle VM a livello software. I dispositivi vengono creati in una VM, che siano controller virtuali, dischi, DVD-ROM, schede video, schede di rete, dispositivi di input, ecc. Ma cosa succede se si desidera collegare una stampante, uno scanner, una chiavetta USB, un disco rigido USB, un lettore di smart card USB, chiavi di licenza USB, ecc.?

Per dispositivi fisici esterni con interfaccia USB, è possibile collegarli a una VM in esecuzione su VMware Workstation o su un server ESXi utilizzando la funzionalità di passaggio USB. Questo post sul blog illustra come utilizzare questa funzionalità in VMware vSphere su host ESXi, includendo i requisiti e i passaggi per collegare dispositivi USB.

Cos’è il passaggio USB?

Il passaggio del dispositivo USB di VMware è una funzione che consente di collegare un dispositivo USB fisico collegato a una porta USB di un server ESXi fisico a una macchina virtuale come se il dispositivo USB fosse collegato direttamente a una macchina virtuale. Il passaggio di VMware è una funzionalità disponibile a partire da ESXi 4.1.

I motivi variano per l’uso del passaggio diretto per un dispositivo USB dal server ESXi a un sistema operativo (OS) ospite di una macchina virtuale. Ad esempio, si ha uno scanner o una stampante vecchi che non hanno driver per le ultime versioni di Windows OS. È possibile installare la vecchia versione di Windows supportata dal dispositivo USB e collegare questo dispositivo a una macchina virtuale. Un altro caso d’uso di questa funzionalità è quando è necessario copiare file da/un disco rigido USB a/da una macchina virtuale direttamente con alta velocità. Può accadere che gli utenti abbiano bisogno di utilizzare software protetto da chiavi di licenza USB hardware su macchine virtuali.

Come Funziona il Passaggio USB

Ci sono tre componenti principali necessarie per il funzionamento del passaggio USB: l’arbitro, il controller USB e il dispositivo USB fisico.

L’arbitro è un servizio dedicato su un server ESXi. L’arbitro esegue la scansione dei dispositivi USB fisici collegati al server fisico ed è responsabile del routing del traffico del dispositivo USB tra un host fisico e una macchina virtuale. Solo una VM può accedere al dispositivo USB alla volta. L’accesso al dispositivo USB collegato a una VM è bloccato per altre VM. L’arbitro USB supporta fino a 15 controller USB (vSphere 7.0). Il servizio Arbitro è abilitato su ESXi per impostazione predefinita.

A USB controller used on a physical ESXi server is the controller to which physical USB ports are connected. The physical USB controller works with physical USB devices inserted into the physical USB ports of the server. USB controllers can be onboard (they are also called integrated and are built-in on a chip in a motherboard) or external (implemented as PCI or PCIe cards that are inserted into the appropriate slots on a motherboard of a server). The onboard USB controller acts as a bridge between a USB bus and a PCIe (or PCI) bus. The onboard USB controller is physically connected by the appropriate number of PCIe lanes to a chipset on a motherboard.

A virtual USB controller is an emulated device created especially for a virtual machine running on a hypervisor. A virtual USB controller interacts with a physical USB controller when you passthrough a physical USB device from a physical ESXi server to a guest OS on the VM. Presence of a virtual USB controller in VM configuration is required to use the USB passthrough feature on the VM. A maximum of eight virtual USB controllers can be connected to a VM on an ESXi host. If you need to remove a virtual USB controller from a VM configuration, you have to remove all USB devices connected to that controller first. VMware USB driver is installed in a guest OS after adding a virtual USB controller to VM configuration.

A physical USB device is any USB device that has a USB interface and USB port for being connected to a computer. Maximum 20 USB devices can be connected to a single VM or ESXi host.

Le norme USB e le modalità del controller sono:

  • USB 2.0 e USB 1.1 (EHCI+UHCI)
  • USB 3.0 (xHCI) versione hardware della VM 8 o superiore

Dopo aver collegato un dispositivo USB fisico a una macchina virtuale utilizzando la funzionalità di passaggio USB di VMware, potrebbe essere necessario installare i driver per il dispositivo USB collegato in un sistema operativo ospite.

Requisiti per USB 3.0

USB 3.0 è disponibile per i server ESXi a partire da VMware vSphere 5.5 patch 3. Il controller USB xHCI è richiesto nella configurazione della VM a tale scopo. I requisiti del sistema operativo per utilizzare il passaggio USB 3.0 sono: Windows 8.1 o superiore, Windows Server 2012 R2 o superiore, o Linux con kernel Linux 2.6.35 o superiore. I dispositivi USB 3.1 sono supportati alla loro velocità massima dal VMware vSphere 7.0

Limitazioni per il Passaggio USB

Ci sono alcune limitazioni che dovresti conoscere prima di iniziare a utilizzare la funzione di passaggio USB:

  • A USB drive cannot be used as a boot drive for a VM.
  • Se un’unità USB viene utilizzata per avviare ESXi, questa unità USB non può essere collegata a una VM.
  • È richiesta la versione dell’hardware virtuale 7 o superiore per una VM.

Alcuni dispositivi USB potrebbero non essere supportati da VMware:

  • Hub USB
  • Dispositivi audio e videocamere che utilizzano trasferimento dati asincrono
  • Alcune tastiere e mouse USB (puoi trovare i dettagli nell’articolo VMware 1021345)
  • Alcune smart card che utilizzano CCID potrebbero necessitare di regolazioni aggiuntive per la connessione a una VM

vMotion è possibile per le VM con dispositivi USB in passaggio. Dopo una corretta configurazione della VM e l’abilitazione di vMotion, i dispositivi USB rimangono collegati alla VM dopo la migrazione su un altro host ESXi.

Vi sono limitazioni di vMotion per le VM che utilizzano dischi USB in passaggio:

  • Il Power Management Distribuito (DPM) non è supportato poiché un host ESXi non può essere spento per risparmiare energia senza scollegare un dispositivo USB da una VM (un dispositivo USB viene scollegato se l’host viene spento da DPM). DPM dovrebbe essere disabilitato su questo host.
  • La Fault Tolerance non è supportata.
  • A VM cannot be suspended or powered off (otherwise USB devices are disconnected from a VM and they can be reconnected only after migration of the VM to the initial ESXi server to which USB devices are physically connected). The VM must be manually migrated to the ESXi host with the attached USB device when you need to power on this VM. Linux guests that were resumed can mount USB devices to different mount points after reconnection.
  • Gli host ESXi che hanno VM con dispositivi USB inoltrati devono essere accessibili tramite l’interfaccia kernel della VM vmk0 (per la rete di gestione) e la porta TCP 902.

Scollegare i dispositivi USB da una VM prima di utilizzare la funzione di hot-add e aggiungere CPU, memoria o dispositivi PCI. Altrimenti i dispositivi USB vengono scollegati automaticamente e, quando si utilizza la funzione di hot-add, alcuni dati possono essere persi. Se si sospende una VM e quindi si riprende la VM, i dispositivi USB vengono scollegati e quindi ricollegati alla VM nuovamente.

Per quanto riguarda la creazione di un’unità USB virtuale VMware o di un’unità flash virtuale da allegare a una macchina virtuale in esecuzione su ESXi o VMware Workstation, proprio come si farebbe con il montaggio di un disco floppy virtuale o un disco CD/DVD, attualmente questa opzione non è possibile.

Come collegare un dispositivo USB a una VM

Ora che ci siamo familiarizzati con la teoria, possiamo passare alla parte pratica e osservare la configurazione in VMware vSphere.

  1. Inserire un dispositivo USB in una porta USB del server ESXi. Nel mio caso, sto per inserire una chiavetta USB.
  2. È possibile verificare se il dispositivo USB è collegato a ESXi dopo di che nell’interfaccia della riga di comando ESXi:
    lsusb
  3. Come potete vedere dalla screenshot sottostante, la mia chiavetta USB è ora connessa al server ESXi.
  4. Il servizio arbitro USB deve essere in esecuzione. Puoi controllare lo stato del servizio con il comando:
    chkconfig usbarbitrator –list
  5. Se l’arbitro USB è arrestato, puoi avviare l’arbitro USB con il comando:
    /etc/init.d/usbarbitrator start

    Nota: Per maggiori informazioni su ESXiCLI, leggi il post del blog.

    La VM risiede sull’host ESXi gestito da vCenter Server nel mio esempio. Windows è installato come OS ospite nella mia VM. Apri il client VMware vSphere, vai a Hosts and Clusters. Nella fascia Navigator seleziona una macchina virtuale a cui vuoi connettere il dispositivo USB utilizzando la feature passthrough. La VM deve essere in stato spento. Devi installare VMware Tools nell’OS ospite.

  6. Una volta selezionata la VM, clicca su Azioni > Modifica impostazioni.
  7. Nella finestra Modifica Impostazioni, verifica se nel configurazione della VM è presente un controller USB. Se il controller USB manca, clicca su Aggiungi Nuovo Dispositivo > Controller USB e seleziona il tipo di controller USB (USB 2.0 o USB 3.0).
  8. Se il controller USB è presente, è necessario aggiungere il dispositivo USB collegato al server ESXi alla tua VM. Clicca su Aggiungi nuovo dispositivo > Dispositivo USB host
  9. A new string is added to the VM configuration. In the New USB Host device string, select one USB device that you want to connect to the VM. Now I have two USB flash drives attached to my physical ESXi server, and I’m connecting the Verbatim Flash drive to my VM (Verbatim product 0x0302).

    Se hai bisogno di abilitare il supporto vMotion, espandi il dispositivo Nuovo dispositivo USB host e seleziona la casella di controllo “Supporta vMotion mentre il dispositivo è collegato”. Tieni presente i requisiti e le limitazioni di vMotion. Premi OK per salvare la configurazione e chiudere questa finestra.

  10. Avvia una macchina virtuale. Una volta che il sistema operativo guest è caricato, attendi che la chiavetta USB venga inizializzata e installata. Successivamente apri il Gestione dispositivi di Windows. Fai clic con il pulsante destro del mouse su Risorse del computer e nel menu di contesto fai clic su Gestisci. Nella finestra Gestione computer, fai clic su Gestione dispositivi ed espandi la sezione Unità disco (dato che abbiamo collegato una chiavetta USB, questo dispositivo dovrebbe essere visualizzato in questa categoria di dispositivi). Possiamo vedere il dispositivo USB Verbatim, che è il nome della mia chiavetta USB collegata alla VM con la funzionalità VMware USB Passthrough.
  11. Apri Gestione disco nella finestra Gestione computer, e assicurati che un’unità disco sia assegnata alla chiavetta USB. Nel mio caso, tutto è corretto e posso ora copiare dati dalla chiavetta USB al disco virtuale di una VM in Windows guest e viceversa.

VMware PCI Passthrough

Se il dispositivo USB che vuoi collegare a una VM utilizzando la funzione di passaggio USB VMware non è supportato da VMware, puoi provare a utilizzare la funzione di passaggio PCI e collegare l’intero controller USB fisico che ha l’interfaccia PCI a una VM.

Se il tuo server ESXi ha un controller USB inserito in uno slot PCI, puoi passare questo dispositivo PCI a una macchina virtuale. Il passaggio PCI di VMware è anche chiamato VMDirectPass. Questo metodo è meno conveniente rispetto all’utilizzo del passaggio USB ma può aiutarti a completare il compito.

Requisiti

Intel Directed I/O o AMD I/O Virtualization Technology (AMD IOMMU) devono essere supportati dall’hardware del server e abilitati in UEFI/BIOS. Se hai solo un controller USB nel tuo server, dovresti collegare un controller USB aggiuntivo per evitare di perdere le connessioni ai dispositivi USB utilizzati dal tuo server ESXi fisico.

Limitazioni:

  • A VM cannot be suspended.
  • A VM cannot be migrated to other ESXi hosts with vMotion.
  • Non sono supportati gli snapshot delle VM.

Diamo un’occhiata al flusso di lavoro per collegare un dispositivo USB a una VM utilizzando il passaggio PCI e collegando l’intero controller USB a cui è collegato un dispositivo USB a una VM.

  1. Per identificare il dispositivo USB e il controller USB a cui è collegato il dispositivo USB (se ci sono più controller USB installati sul server) utilizza questo comando:
    lsusb -v | grep -e Bus -e iSerial
  2. Trova la stringa con il nome del tuo dispositivo USB collegato al controller USB e identifica l’id del controller (ad esempio, bus002).
  3. Puoi controllare il registro VMkernel quando colleghi un dispositivo USB a un server ESXi:
    tail -f /var/log/vmkernel.log | grep -i USB
  4. Apri VMware vSphere Client e vai su Ospiti e Cluster.
  5. Seleziona l’host ESXi su cui risiede la tua VM (a cui devi collegare un dispositivo USB).
  6. Vai alla scheda Configura, quindi seleziona Dispositivi PCI nella sezione Hardware.
  7. Trova e seleziona il controller USB necessario nell’elenco dei dispositivi PCI utilizzando l’ID che hai rilevato in precedenza.
  8. Lo stato del controller selezionato dovrebbe ora cambiare in Disponibile.
  9. Premi OK per salvare le impostazioni.
  10. Riavvia l’host ESXi affinché le modifiche abbiano effetto.
  11. Assicurati che la tua VM sia spenta. Vai alle impostazioni della VM, clicca su Aggiungi nuovo dispositivo > Dispositivo PCI > Aggiungi. Seleziona il tuo controller USB nel menu a discesa utilizzando l’ID corretto.
  12. Accendi la VM. Controlla i dispositivi nel sistema operativo guest. Se Windows è installato sulla VM, apri Gestione dispositivi, quindi controlla i controller e i dispositivi di archiviazione.

Connessione di Smart Card USB

Alcuni dispositivi USB che hanno la classe appropriata di CCID potrebbero non essere supportati per impostazione predefinita per la connessione alle VM. Viene visualizzato il messaggio di errore “Impossibile connettere ‘percorso: 0/1/6/1’ a questa macchina virtuale. Il dispositivo non è stato trovato“. Nei log, è possibile vedere il messaggio:

(vmx-vcpu-0) non ha richiesto l’interfaccia 0 prima dell’uso

PCSCD è il demone ESXi che controlla i lettori di smart card. L’accesso alle smart card USB è disabilitato per le macchine virtuali per evitare conflitti perché è necessaria una smart card da parte di un server ESXi. Di conseguenza, non è possibile utilizzare il passaggio USB con la configurazione predefinita per le smart card USB. È necessario modificare la configurazione dell’host ESXi per abilitare il passaggio USB per le smart card USB.

  1. Arresta la macchina virtuale. Apri le impostazioni della macchina virtuale, seleziona la scheda Opzioni VM e clicca su Modifica configurazione.
  2. Nella finestra Parametri di configurazione, fare clic su Aggiungi parametri di configurazione.
    Come alternativa, è possibile modificare il file di configurazione VMX della macchina virtuale nell’interfaccia della riga di comando collegandosi alla console ESXi con un client SSH.
  3. Modificare o aggiungere questa riga alla configurazione della VM se il parametro non è presente:

    usb.generic.allowCCID = “TRUE”
  4. Salvare la configurazione della VM.
  5. Arrestare il servizio PCSCD utilizzando questo comando nella riga di comando ESXi:

    sudo /etc/init.d/pcscd stop
  6. Assicurarsi che il servizio PCSCD non sia in esecuzione:

    ps | grep pcscd
  7. Accendere la VM e controllare i dispositivi per verificare che il lettore di smart card USB sia ora collegato alla VM.

Conclusione

È possibile collegare dispositivi vari collegati alle porte USB dei server ESXi fisici alle macchine virtuali direttamente e utilizzarli nei sistemi operativi guest delle VM proprio come si utilizzano questi dispositivi USB su computer fisici regolari. È persino possibile migrare le macchine virtuali utilizzando dispositivi USB esterni collegati all’host ESXi principale con vMotion su un altro host. Nonostante alcune limitazioni, la funzionalità di passaggio USB di VMware aggiunge più capacità e flessibilità in diverse situazioni.

Il backup delle VM VMware è importante per coloro che utilizzano VMware vSphere. Scarica NAKIVO Backup & Replication e prova questa soluzione universale di protezione dei dati per proteggere le tue VM VMware vSphere e altri dati nel tuo ambiente.

Source:
https://www.nakivo.com/blog/how-to-use-usb-devices-with-a-vmware-vsphere-virtual-machine/