通常我们使用 ESXi 就是为了搞虚拟化,在一台物理机上运行多个操作系统。但有的时候,在虚拟化的同时,我们可能也想要让一部分硬件能直接被虚拟机访问,也就是直通硬件。比如为虚拟机直通硬盘,那么我们就能轻易地将原本运行在独立硬件上的系统迁移到 ESXi 的虚拟化环境中。相应地,如果一台虚拟机的硬盘直通了一物理硬盘,那么将来也能轻易地将其上的系统迁移到独立的硬件上的运行。

下面以 ESXi 6.5 为例使用 VMware ESXi Web UI 及 SSH 来进行配置。

启用 SSH

首先,我们访问 https://<ESXi IP>/ui/ 进入 VMware ESXi Web UI:

VMware ESXi Web UI

登录进入系统后,找到 操作 -> 服务 -> 启用安全 Shell (SSH) 并启用 SSH:

VMware ESXi 启用安全 Shell (SSH)

通过 SSH 连接 ESXi 服务器

启用了 SSH 服务之后,我们需要通过 SSH 连接服务器,Windows 上可用 PuTTYBitvise SSH Client,Linux 或 macOS 可直接使用 ssh 命令连接。

连接目标为 ESXi 服务器的 IP,用户名密码与登录 Web UI 时相同。

创建 VMDK 直通硬盘

通过 SSH 连接上服务器后,我们可以使用以下命令来查看当前服务器上的所有硬盘及分区:

ls -lh /vmfs/devices/disks/

其中硬盘的名字类似如下:

t10.ATA_____Samsung_SSD_840_Series__________________S19MNEAD414936V_____

而分区的名字类似如下:

t10.ATA_____Samsung_SSD_840_Series__________________S19MNEAD414936V_____:1
t10.ATA_____Samsung_SSD_840_Series__________________S19MNEAD414936V_____:2
t10.ATA_____Samsung_SSD_840_Series__________________S19MNEAD414936V_____:3
t10.ATA_____Samsung_SSD_840_Series__________________S19MNEAD414936V_____:4

另外,输出结果中还包含硬盘及分区的大小,可以帮助我们找到想要直通的那块硬盘。

需要注意的是,一般我们的需求都是直通整块硬盘,而不是硬盘上的某一个分区,所以在随后的命令中输入注意不要弄错。

下面的示例代码中,将 t10.ATA_____Samsung_SSD_840_Series__________________S19MNEAD414936V_____ 这块 SSD 直通,并将生成的直通硬盘配置文件存放在默认的 datastore1 下,取名为 ZzzBuzzPassthruSSD

disk="t10.ATA_____Samsung_SSD_840_Series__________________S19MNEAD414936V_____"
datastore="datastore1"
vmdkname="ZzzBuzzPassthruSSD"

vmkfstools -z "/vmfs/devices/disks/$disk" "/vmfs/volumes/$datastore/$vmdkname.vmdk"

实际操作中,注意将相关变量替换。

创建/配置虚拟机使用直通硬盘

随后我们创建/配置虚拟机,在添加硬盘的时候选择现有硬盘:

VMware ESXi 编辑虚拟机 - 添加现有硬盘

并定位到之前创建硬盘直通文件时所选择存储的位置:

VMware ESXi 数据存储浏览器

之后,按常规创建/配置虚拟机即可。

注意:如果想要让直通的硬盘能同时在虚拟机和物理机的环境下同时工作,需要注意配置虚拟机的引导选项中的固件UEFI 安全引导与物理机 UEFI BIOS 中的配置一致。

VMware ESXi 编辑虚拟机 - 引导选项