如何在VMware vSphere虚拟机中使用USB设备

虚拟机监控程序的主要功能是在软件级别模拟虚拟机使用的设备。设备在虚拟机中创建,无论是虚拟控制器、磁盘、DVD-ROM、显卡、网络卡、输入设备等等。但如果您想连接打印机、扫描仪、USB闪存驱动器、USB硬盘驱动器、USB智能卡阅读器、安全加密狗、USB许可证密钥等外部物理设备呢?

对于具有USB接口的外部物理设备,您可以通过使用USB透传功能将它们连接到运行在VMware WorkstationESXi服务器上的虚拟机。本博文介绍了如何在ESXi主机上的VMware vSphere中使用此功能,包括要求和连接USB设备的步骤。

什么是USB透传?

VMware USB设备透传是一项功能,允许您将连接到物理ESXi服务器的USB端口的物理USB设备连接到虚拟机,就好像USB设备直接连接到虚拟机一样。VMware透传是从ESXi 4.1开始提供的功能。

ESXi 服务器将 USB 设备传递到虚拟机的操作系统(OS)的原因各不相同。例如,您可能有一台旧的扫描仪或打印机,它没有针对最新的 Windows 操作系统版本的驱动程序。您可以安装由 USB 设备支持的旧版 Windows 并将该设备连接到虚拟机。此功能的另一个用例是当您需要直接以高速从/到 USB 硬盘驱动器复制文件到/从虚拟机时。用户可能需要在虚拟机上使用受硬件 USB 许可密钥保护的软件。

USB 传递的工作原理

USB 传递功能需要三个主要组件:仲裁器、USB 控制器和物理 USB 设备。

仲裁器是 ESXi 服务器上的专用服务。仲裁器扫描连接到物理服务器的物理 USB 设备,并负责在物理主机和虚拟机之间路由 USB 设备流量。一次只能有一个 VM 访问 USB 设备。连接到一个 VM 的 USB 设备对其他 VM 被阻止访问。USB 仲裁器支持最多 15 个 USB 控制器(vSphere 7.0)。仲裁器服务在 ESXi 上默认启用。

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.

USB 标准和控制器模式为:

  • USB 2.0 和 USB 1.1(EHCI+UHCI
  • USB 3.0(xHCI)VM 硬件版本 8 或更高版本

通过使用 VMware USB 传递功能将物理 USB 设备连接到虚拟机后,您可能需要在客户操作系统中安装连接的 USB 设备的驱动程序。

要求USB 3.0

USB 3.0可用于VMware vSphere 5.5补丁3开始的ESXi服务器。 VM配置需要xHCI USB控制器。 使用USB 3.0透传的操作系统要求为:Windows 8.1或更高版本,Windows Server 2012 R2或更高版本,或Linux内核2.6.35或更高版本。自VMware vSphere 7.0起,支持USB 3.1设备的最大速度

USB透传的限制

在开始使用USB透传功能之前,您应该了解一些限制:

  • A USB drive cannot be used as a boot drive for a VM.
  • 如果使用USB驱动器引导ESXi,则无法将此USB驱动器连接到VM。
  • VM需要虚拟硬件版本7或更高版本。

某些USB设备可能不受VMware支持:

  • USB集线器
  • 使用异步数据传输的音频设备和摄像头
  • 某些USB键盘和鼠标(您可以在VMware 1021345文章中找到详细信息)
  • 使用CCID的某些智能卡可能需要额外调整以连接到VM

vMotion对于连接了USB透传设备的VM是可能的。在适当的VM配置和启用vMotion后,USB设备在迁移到另一个ESXi主机后仍保持连接到VM。

对于使用USB透传磁盘的VM,存在vMotion的限制:

  • 分布式电源管理(DPM)不受支持,因为 ESXi 主机在不断电断开 USB 设备从虚拟机(如果主机由 DPM 关闭电源,则 USB 设备会断开连接)。在此主机上应禁用 DPM。
  • 容错不受支持。
  • 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.
  • 拥有 USB 透传设备的 VM 的 ESXi 主机必须通过 VM 内核接口 vmk0(用于管理网络)和 TCP 端口 902 进行访问。

在使用热插拔功能并添加 CPU、内存或 PCI 设备之前,从 VM 断开 USB 设备。否则,USB 设备会自动断开连接,当您使用热插拔功能时,可能会丢失一些数据。如果您暂停一个 VM,然后恢复 VM,USB 设备将被断开连接,然后再次连接到 VM。

至于创建 VMware 虚拟 USB 驱动器或虚拟闪存驱动器以附加到在 ESXi 或 VMware Workstation 上运行的虚拟机,就像挂载虚拟软盘或 CD/DVD 光盘一样,目前不可能。

如何连接 USB 设备到 VM

既然我们已经熟悉了理论,我们可以进入实践部分,看看在 VMware vSphere 中的配置。

  1. 将 USB 设备插入 ESXi 服务器的 USB 端口。在我的情况下,我将插入一个 USB 闪存驱动器。
  2. 之后,您可以在 ESXi 命令行界面中检查 USB 设备是否连接到 ESXi:
    lsusb
  3. 正如您在下面的截图中所看到的,我的闪存驱动器现在已连接到ESXi服务器。
  4. USB仲裁服务必须正在运行。您可以使用以下命令检查服务状态:
    chkconfig usbarbitrator –list
  5. 如果USB仲裁服务已停止,您可以使用以下命令启动USB仲裁服务:
    /etc/init.d/usbarbitrator start

    注意:博客帖子中了解有关ESXiCLI的更多信息。

    VM驻留在由vCenter Server管理的ESXi主机上,这是我的示例。Windows已安装为我的VM上的客户操作系统。打开VMware vSphere Client,转到主机和集群。在导航器窗格中,选择要通过使用直通功能连接USB设备的虚拟机。VM应处于已关机状态。您应在客户操作系统中安装VMware Tools

  6. 选择虚拟机后,单击操作 > 编辑设置
  7. 编辑设置窗口中,检查虚拟机配置中是否存在USB控制器。如果缺少USB控制器,请单击添加新设备 > USB控制器,并选择USB控制器类型(USB 2.0或USB 3.0)。
  8. 如果存在USB控制器,则应将连接到ESXi服务器的USB设备添加到您的VM中。单击添加新设备>主机USB设备
  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).

    如果需要启用vMotion支持,请展开新主机USB设备,并选中“在连接设备时支持vMotion”复选框。请记住vMotion的要求和限制。点击确定保存配置并关闭此窗口。

  10. 启动虚拟机。一旦客户操作系统加载完成,等待直到USB闪存驱动器被初始化和安装。然后打开Windows设备管理器。右键点击我的电脑,在上下文菜单中,点击管理。在计算机管理窗口中,点击设备管理器并展开磁盘驱动器部分(因为我们连接了USB闪存驱动器,所以该设备应该显示在此类设备中)。我们可以看到Verbatim USB设备,这是我通过VMware USB直通功能连接到VM的USB闪存驱动器的名称。
  11. 计算机管理窗口中打开磁盘管理,确保将磁盘驱动器分配给USB闪存驱动器。在我的情况下,一切都是正确的,我现在可以将数据从USB闪存驱动器复制到客户端Windows中虚拟机的虚拟磁盘,反之亦然。

VMware PCI直通

如果您想要使用VMware USB直通功能连接到虚拟机的USB设备不受VMware支持,您可以尝试使用PCI直通功能,并连接具有PCI接口的整个物理USB控制器到虚拟机。

如果您的ESXi服务器插入了一个USB控制器到PCI插槽中,您可以将此PCI设备直通到虚拟机。VMware PCI直通也称为VMDirectPass。这种方法不如使用USB直通方便,但可以帮助您完成任务。

要求

服务器硬件必须支持Intel Directed I/O或AMD I/O虚拟化技术(AMD IOMMU),并在UEFI/BIOS中启用。如果您的服务器只有一个USB控制器,则应附加额外的USB控制器,以避免丢失物理ESXi服务器使用的USB设备的连接。

限制和局限性:

  • A VM cannot be suspended.
  • A VM cannot be migrated to other ESXi hosts with vMotion.
  • 不支持虚拟机快照。

让我们看一下使用PCI透传将USB设备连接到虚拟机的工作流程,并将整个USB控制器连接到虚拟机。

  1. 为了识别您的USB设备和连接USB设备的USB控制器(如果您的服务器上安装了多个USB控制器),请使用以下命令:
    lsusb -v | grep -e Bus -e iSerial
  2. 找到与连接到USB控制器的您的USB设备名称匹配的字符串,并识别控制器的ID(例如,bus002)。
  3. 当连接USB设备到ESXi服务器时,您可以检查VMkernel日志:
    tail -f /var/log/vmkernel.log | grep -i USB
  4. 打开VMware vSphere Client,然后转到主机和集群
  5. 选择您的VM所在的ESXi主机。
  6. 转到配置选项卡,然后在硬件部分中选择PCI设备
  7. 通过使用之前检测到的ID,在PCI设备列表中找到并选择所需的USB控制器。
  8. 所选控制器的状态现在应更改为可用
  9. 点击确定以保存设置。
  10. 重新启动ESXi主机以使更改生效。
  11. 确保您的虚拟机已关闭。转到VM设置,点击添加新设备 > PCI设备 > 添加。通过使用正确的ID在下拉菜单中选择您的USB控制器。
  12. 打开虚拟机。检查客户操作系统中的设备。如果虚拟机上安装了Windows,请打开设备管理器,然后检查控制器和存储设备。

连接 USB 智能卡

一些具有适当 CCID 类别的 USB 设备可能默认不支持连接到虚拟机。会显示错误信息“无法连接到此虚拟机的‘路径:0/1/6/1’。找不到设备”。在日志中,您可以看到以下消息:

(vmx-vcpu-0) 在使用之前未声明接口 0

PCSCD 是控制智能卡读卡器的 ESXi 守护程序。为了避免与 ESXi 服务器发生冲突,虚拟机禁用了对 USB 智能卡的访问,因为 ESXi 服务器需要智能卡。因此,默认配置下无法使用 USB 透传来使用 USB 智能卡。您需要编辑 ESXi 主机的配置以启用 USB 透传以支持 USB 智能卡。

  1. 停止虚拟机。打开虚拟机设置,选择 VM 选项 选项卡,然后单击 编辑配置
  2. 配置参数窗口中,单击添加配置参数
    作为替代,您可以通过使用 SSH 客户端连接到 ESXi 控制台,在命令行界面中编辑虚拟机的 VMX 配置文件。
  3. 如果参数不存在,请编辑或添加此行到 VM 配置:

    usb.generic.allowCCID = “TRUE”
  4. 保存 VM 配置。
  5. 通过在 ESXi 命令行中使用此命令停止 PCSCD 服务:

    sudo /etc/init.d/pcscd stop
  6. 确保 PCSCD 服务未运行:

    ps | grep pcscd
  7. 启动 VM,并检查设备以验证 USB 智能卡读卡器现已连接到 VM。

结论

您可以直接连接到物理 ESXi 服务器的 USB 端口附加的各种设备,并在 VM 的客户操作系统中使用它们,就像在常规物理计算机上使用这些 USB 设备一样。您甚至可以使用连接到父 ESXi 主机的外部 USB 设备通过 vMotion 将虚拟机迁移到另一台主机。尽管存在一些限制,但 VMware USB 透传功能在不同情况下增加了更多的功能和灵活性。

VMware虚拟机备份对于使用VMware vSphere的人来说非常重要。下载NAKIVO Backup & Replication并尝试这个通用数据保护解决方案,以保护您的VMware vSphere虚拟机和环境中的其他数据。

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