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

虚拟化技术的主要功能是在软件层面上模拟虚拟机使用的设备。例如虚拟控制器、磁盘、DVD-ROM、显卡、网卡、输入设备等,都是在虚拟机中创建的设备。但是如果你想连接打印机、扫描仪、USB闪存盘、USB硬盘、USB智能卡读卡器、安全加密狗、USB授权密钥等设备该怎么办呢?

对于带有USB接口的外部物理设备,您可以使用USB透传功能将它们连接到运行 VMware Workstation 或者 ESXi主机的虚拟机上。本文档介绍了如何在 VMware vSphere 中的 ESXi 主机上使用这一功能,包括连接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设备流量。一次只能有一个虚拟机访问USB设备。其他虚拟机无法访问连接到虚拟机的USB设备。USB仲裁器支持最多15个USB控制器(vSphere 7.0)。仲裁器服务在ESXi中默认启用。

一个USB控制器是连接到物理ESXi服务器上的物理USB端口的控制器。物理USB控制器与插入服务器物理USB端口上的物理USB设备协同工作。USB控制器可以是内置的(也称为集成,焊接到主板上的芯片上)或者外置的(作为PCI或PCIe卡插入服务器主板上相应的插槽中)。内置USB控制器充当USB总线和PCIe(或PCI)总线之间的桥梁。内置USB控制器通过适当数量的PCIe通道物理连接到主板芯片集。

虚拟USB控制器是为在虚拟化层上运行的虚拟机创建的仿真设备。当物理USB设备从物理ESXi主机传递到虚拟机中的客户操作系统时,虚拟USB控制器与物理USB控制器进行交互。在虚拟机配置中使用USB透传功能时,必须在VM配置中包含虚拟USB控制器。在一个ESXi主机上的虚拟机上,最多可以连接八个虚拟USB控制器。如果您需要从VM配置中移除虚拟USB控制器,您必须首先移除连接到该控制器的所有USB设备。在向虚拟机配置中添加虚拟USB控制器后,VMware USB驱动程序将安装在客户操作系统上。

物理USB设备是通过USB接口和USB端口连接到计算机的任何USB设备。单个虚拟机或ESXi主机上最多可以连接20个USB设备。

USB标准和控制器模式包括:

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

在将物理USB设备通过VMware USB直通功能连接到虚拟机后,您可能需要在虚拟机操作系统中为该USB设备安装驱动程序。

USB 3.0 要求

USB 3.0 从 VMware vSphere 5.5 更新 3 开始对 ESXi 服务器可用。这需要 VM 配置中的 USB xHCI 驱动程序。使用 USB 3.0 直通的操作系统要求如下:Windows 8.1 或更高版本,Windows Server 2012 R2 或更高版本,或 Linux 内核 2.6.35 或更高版本的 Linux。从 VMware vSphere 7.0 开始,支持以全速使用 USB 3.1 设备。

USB 直通限制

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

  • USB 驱动器不能用作虚拟机的启动驱动器。
  • 如果使用 USB 驱动器启动 ESXi,则此 USB 驱动器不能连接到虚拟机。
  • 虚拟机需要虚拟硬件版本 7 或更高版本。

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

  • USB 集线器
  • 使用异步数据传输的音频设备和视频摄像头
  • 某些 USB 键盘和鼠标(详细信息请参阅 VMware 文章 1021345)
  • 使用CCID的一些智能卡可能需要额外的配置才能连接到虚拟机。

vMotion功能对连接了USB直通设备的虚拟机是可行的。在您正确配置虚拟机并启用vMotion之后,USB设备在迁移到另一个ESXi主机后仍然会连接到虚拟机。

使用USB直通硬盘的虚拟机存在一些vMotion限制:

  • 由于在未断开虚拟机上的USB设备之前,ESXi主机无法通过DPM关闭以节省电力(如果使用DPM关闭主机,则主机会断开与虚拟机的USB设备连接),因此不支持分布式电源管理(DPM)。应在这些主机上禁用DPM。
  • 不支持容错。
  • 虚拟机不能挂起或关闭(否则,USB设备会从虚拟机中断开,并且只有在将虚拟机迁移到最初连接USB设备的ESXi主机后才能重新连接)。当需要启动此虚拟机时,必须手动将虚拟机迁移到连接了USB设备的ESXi主机。在重新连接后,恢复的Linux客户机可以在不同的挂载点挂载USB设备。
  • 具有USB直通设备的虚拟机的ESXi主机必须通过虚拟机内核接口(用于管理网络的vmk0)和TCP端口902可用。

在使用热添加功能以及添加CPU、内存或PCI设备之前,请先从虚拟机中断开USB设备。否则,在使用热添加功能时USB设备会自动断开,可能会丢失一些数据。如果您挂起了一个虚拟机(VM),然后重新启动它,USB设备会被断开,然后重新连接到虚拟机。

至于创建VMware虚拟USB驱动器或虚拟U盘,以附加到运行ESXi或VMware Workstation的虚拟机,就像您会挂载虚拟软盘或CD/DVD盘一样,这个选项目前是不支持的。

如何将USB设备连接到虚拟机

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

  1. 将USB设备插入ESXi服务器上的USB端口。在我的情况下,我要插入一个U盘。
  2. 然后,您可以在ESXi命令行界面中检查USB设备是否已连接到ESXi:

    lsusb

  3. 如以下屏幕截图所示,我的U盘现在已连接到ESXi服务器。

  4. USB仲裁服务必须正在运行。您可以使用命令检查服务的状态:

    chkconfig usbarbitrator --list

  5. 如果USB仲裁器已停止,您可以使用以下命令启动它:

    /etc/init.d/usbarbitrator start

    注意:博客文章中了解更多关于ESXiCLI的信息。

    在我的示例中,虚拟机位于由管理的ESXi主机上。我在虚拟机上安装了Windows作为客户操作系统。打开VMware vSphere客户端,进入主机和集群。在导航窗格中选择一个您想要使用直通功能连接USB设备的虚拟机。虚拟机必须已关闭电源。您必须在客户操作系统中安装VMware Tools

  6. 选择虚拟机后,点击操作 > 编辑设置

  7. 编辑设置窗口中,检查虚拟机设置中是否有一个USB控制器。如果缺少USB控制器,点击添加新设备 > USB控制器,并选择USB控制器类型(USB 2.0或USB 3.0)。
  8. 如果USB控制器已存在,您需要将连接到ESXi主机的USB设备添加到您的虚拟机中。点击添加新设备 > 主机USB设备
  9. 在虚拟机配置中添加了一个新字符串。在新建USB主机设备字符串中,选择一个您想要连接到虚拟机的USB设备。我现在在我的物理ESXi服务器上连接了两个USB闪存驱动器,并将Verbatim闪存驱动器连接到我的虚拟机(Verbatim产品0x0302)。如果您需要启用vMotion支持,请展开新建USB主机设备,并选择“设备连接时支持vMotion”复选框。请注意vMotion的要求和限制。点击确定以保存设置并关闭此窗口。
  10. 启动虚拟机。一旦客户端操作系统加载完毕,等待它初始化并安装USB闪存驱动器。接下来,打开Windows设备管理器。右键单击我的电脑,从上下文菜单中单击管理。在计算机管理窗口中,单击设备管理器并展开磁盘驱动器部分(因为我们连接了一个USB闪存驱动器,这个设备应该出现在这个设备类别中)。我们可以看到Verbatim USB设备,这是通过VMware USB Passthrough功能连接到虚拟机的我的USB驱动器的名称。
  11. 计算机管理窗口中打开磁盘管理,确保USB闪存驱动器已分配有磁盘驱动器。在我的情况下,一切都很正确,现在我可以将USB闪存驱动器中的数据复制到Windows宿主中的虚拟机的虚拟磁盘,反之亦然。

VMware PCI 透传

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

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

要求

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

限制和局限:

  • 您无法挂起虚拟机。
  • 虚拟机无法使用vMotion 迁移到其他ESXi 主机。
  • 不支持虚拟机快照。

让我们看看使用PCI直通连接USB设备到虚拟机和将连接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客户端,并前往主机和集群
  5. 选择您虚拟机所在(您需要连接USB设备的)ESXi主机。
  6. 单击配置选项卡,在硬件部分选择PCI设备
  7. 使用您之前检测到的ID,从PCI设备列表中找到并选择所需的USB控制器。
  8. 现在,所选驱动程序的状态应该更改为可用
  9. 单击确定以保存设置。
  10. 重启ESXi主机以使更改生效。
  11. 确保您的虚拟机已经关闭。前往VM设置,点击添加新设备 > PCI设备 > 添加。从下拉菜单中选择您的USB控制器,使用正确的ID。
  12. 启动虚拟机。在来宾操作系统中检查设备。如果虚拟机上安装了Windows,请打开设备管理器并检查驱动程序和存储设备。

USB智能卡连接

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

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

PCSCD是控制智能卡读取器的ESXi守护进程。为了避免冲突,USB智能卡的访问对虚拟机是禁用的,因为ESXi主机需要智能卡。因此,在默认设置下无法使用USB直通。您必须编辑ESXi主机配置以启用USB智能卡的直通。

  1. 关闭虚拟机。打开虚拟机设置,选择虚拟机选项标签,然后点击编辑配置

  2. 配置参数窗口中,点击添加配置参数

    另外,您还可以通过使用SSH客户端连接到ESXi控制台,在命令行界面编辑虚拟机的VMX配置文件。

  3. 如果参数不存在,请编辑或添加此行到虚拟机配置中:

    usb.generic.allowCCID = "TRUE"

  4. 保存虚拟机设置。
  5. 使用以下命令在ESXi命令行上停止PCSCD服务:

    sudo /etc/init.d/pcscd stop

  6. 确保PCSCD服务没有运行:

    ps | grep pcscd

  7. 启动虚拟机,并检查设备以验证USB智能卡读卡器是否已连接到虚拟机。

结论

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

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

Source:
https://www.nakivo.com/blog/vmware-administration-essentials-configuring-esxi-vm-networks-2/