ESXi 8.0.3 挂载USB外置硬盘:从数据存储到直通的完整指南
我先说一个结论ESXi 8.0.3 下挂载 USB 外置硬盘这件事本身并不是一个“插上去就能用”的操作但它也远没有到需要折腾驱动的程度。真正卡住大多数人的是 ESXi 对 USB 存储设备的两套处理逻辑——一套是“把 USB 硬盘当作虚拟机的直通设备”另一套是“把 USB 硬盘当作宿主机自己能用的数据存储”。这两条路从根上就分叉了走错了方向后面怎么调都别扭。我自己在测试环境、家用小服务器和临时备份节点上都搞过 USB 外置硬盘前前后后踩了不少坑从“插上没反应”到“能看到设备但建不了数据存储”再到“数据存储建好了但虚拟机关机重启后连不上”每种情况都遇到过。这篇文章就把 ESXi 8.0.3 添加 USB 外置硬盘的完整思路、可落地的步骤、以及那些文档里不会写的排查技巧一次性讲清楚。如果你是刚接触 ESXi 的小白或者正准备把家里的移动硬盘挂到 ESXi 上做 VMware 虚拟机备份这篇内容可以直接当操作手册用。1. 为什么USB外置硬盘在ESXi里“插上没反应”很多人的第一个念头是ESXi 是不是不认 USB 硬盘其实不是。ESXi 8.0.3 的内核完全支持 USB 大容量存储设备但它的“默认态度”不是把 USB 硬盘当成本地磁盘来用而是把它当成一个“可能想直通给虚拟机的 USB 设备”来接管。这就是大多数人卡住的第一道坎。1.1 USB Arbitrator不是不识别是它想帮你直通ESXi 系统里有一个服务叫 USB Arbitrator早期版本的文档里叫 usbarbitrator它的职责是管理主机上的 USB 设备与虚拟机之间的所有权。默认情况下ESXi 会把接入的 USB 设备包括 U 盘、移动硬盘、USB 无线网卡等保留在主机侧方便你在 Web Client 里的虚拟机“编辑设置 添加 USB 设备”时直接分配。这种设计对普通的 USB 键鼠、U 盘、加密狗来说很好用但放在 USB 外置硬盘上就成了麻烦。问题是这样的当你想把这块 USB 硬盘当作 ESXi 自己的数据存储datastore时系统却认为这个设备应该被“供虚拟机使用”所以“存储”界面里很难找到这块盘的影子或者在创建数据存储时选不到它。解决思路也很明确告诉 USB Arbitrator这块设备主机自己要留着用不要留给虚拟机。这一步要改 ESXi 的配置文件让它把 USB 大容量存储设备“让”给 Host OS。具体配置和相关机制下面第 3 章会给出完整的操作命令。注意这里涉及的是 USB 存储是否被系统“保留”的问题和“直通Passthrough”不是一回事。直通是把设备整个交给某台虚拟机而我们要做的是把设备留在宿主机手里当存储用。1.2 两条路线当数据存储还是直通给虚拟机在动手之前先得想清楚你究竟要用这块 USB 外置硬盘干什么。这是整个项目里最容易做错决定的地方因为两条路线的操作方式完全不同。路线 A作为 ESXi 的数据存储datastore。硬盘被宿主机接管格式化成 VMFS 文件系统然后在上面创建 VMDK 磁盘把虚拟机整个放在里面。适合存放不常开机的虚拟机、备份文件、ISO 镜像等。路线 B把 USB 硬盘直通给某一台虚拟机。宿主机不做任何文件系统处理直接把整块 USB 硬盘“物理级”地交给虚拟机由虚拟机系统自己分区、格式化、读写。适合做移动硬盘、数据盘比如给软路由虚拟机挂一块大容量 USB 盘做下载缓存。路线 C进阶把整个 USB 控制器直通给虚拟机。这需要主板和 CPU 支持 VT-d而且 ESXi 8.0.3 对控制器直通的限制比较多。这个方案我不推荐在新手场景里使用后文会简单提一下原因。本文会重点讲透路线 A 和路线 B因为这两种方案覆盖了 90% 以上的真实需求。1.3 前期准备与硬件兼容性核对动手前建议先花两分钟做硬件盘点不然等你折腾半天发现是硬盘盒和 ESXi 不合那就真的是浪费时间了。主板 BIOS 设置确认主板的 USB 控制器支持 UEFI 和 XHCIUSB 3.x。ESXi 对 XHCI 的支持比较完善如果主板里还开着 EHCIUSB 2.0的旧模式某些情况下识别会有问题。进入 BIOS找到 USB Configuration 或者 Peripherals 里的 USB Controller / XHCI Hand-off把它设成 Enabled。USB 外置硬盘的转接方案尽量选支持 UASUSB Attached SCSI协议的硬盘盒或移动硬盘。UAS 协议在 ESXi 里识别为普通 SCSI 设备性能也比 USB Mass Storage 协议好。廉价硬盘盒大多只支持 BOTBulk-Only Transport也能用但队列深度和带宽表现会差一些。文件系统新硬盘或者可以清空的硬盘最省事。如果硬盘里已经有 NTFS、exFAT 等数据ESXi 在创建 VMFS 时会把整块盘清零数据全没所以务必提前备份。ESXi 版本确认登录 Web Client在“主机 更新”里确认 ESXi 版本是 8.0 Update 3版本号一般类似 8.0.3.23480795 这类Build 版本号不同不影响操作流程但越新问题越少。做完了以上准备接下来就可以正式进入操作了。2. 把USB外置硬盘变成ESXi数据存储——Web Client图形化操作这是大多数人默认的选择把 USB 外置硬盘变成 ESXi 的 datastore然后直接在上面放虚拟机。整个操作分三步确认设备被系统识别、修改 USB 仲裁配置让系统“放手”、在界面里创建数据存储。2.1 通过SSH确认系统识别到USB硬盘我先假设你现在已经把 USB 外置硬盘插到了主机上并且主机已经开了 SSH没开的话在 Web Client 的“主机 服务”里找到 TSM-SSH 启动即可。用 SSH 登录到 ESXi先执行一条命令看看系统有没有发现这块盘esxcli storage core device list | grep -B 2 -A 8 -i usb正常情况下你会看到类似下面这样的输出naa.50014ee2b1a3b4c5 Device Type: Disk Size: 1000204886016 Display Name: Local USB Disk (naa.50014ee2b1a3b4c5) Multipath Plugin: NMP Transport: USB Is Local: true如果这里完全没有输出那就是 USB 设备没被内核识别到先检查硬件和线缆。如果能看到Transport: USB说明系统已经发现设备了只是还没把它变成可用的数据存储。2.2 修改USB仲裁配置让系统“放手”这一步是踩坑高发区。在 ESXi 8.0.3 里默认情况下即便你看到了 USB 磁盘在“存储 新建数据存储”时设备列表里经常是空的或者设备是灰色不可选状态。原因就是前面提到的 USB Arbitrator 把设备“扣住”了。解决办法是编辑 ESXi 的配置文件添加一行参数vi /etc/vmware/config在文件末尾追加usb.arbitrator.intr.ignore TRUE保存后重启 USB Arbitrator 服务/etc/init.d/usbarbitrator restart重启之后再执行一次设备扫描esxcli storage core adapter rescan --all注意修改 usb.arbitrator.intr.ignore 会影响这个主机上所有 USB 设备的“直通可用性”。如果你原本正打算把某个 USB 加密狗直通到虚拟机改了这个参数后那个设备在虚拟机的 USB 直通列表里可能就不出现了。建议在测试机或者非关键生产环境里操作或者做好回滚记录。2.3 创建VMFS数据存储并与虚拟机绑定接着在 Web Client 里操作进入“存储 数据存储”点击“新建数据存储”。选择“创建新 VMFS 数据存储”在设备列表里应该能看到那块 USB 外置硬盘状态已经是可勾选。给数据存储取个名字比如USB-DATA。分区方案建议选“全盘使用”VMFS 版本就选 ESXi 8.0 默认支持的最新版。确认警告会清除设备上所有数据点击完成。创建完成后你可以在数据存储列表里看到这个新的存储。此时可以手动把某台虚拟机的 VMDK 迁移过去或者新创建一台虚拟机直接把磁盘位置指向这个新数据存储。关于性能上的体感我给个参考如果硬盘盒支持 UASSSD 硬盘走 USB 3.2 Gen 210Gbps在 ESXi 里顺序读取能做到 500MB/s 到 800MB/s 的水平接近 SATA SSD 直连的八成性能。而如果是机械硬盘那瓶颈几乎全在硬盘本身USB 接口的带宽反而不是主要矛盾。3. 全命令行方式配置USB数据存储推荐进阶使用虽然 Web Client 能完成创建但我更推荐在脚本化、批量化、或者需要远程排障的场景下掌握命令行方式。这也是很多 ESXi 长期使用者习惯用的方法因为输出更直接出问题时更容易定位。3.1 查看设备路径与类型再次登录 SSH执行esxcli storage core device list找到刚才识别到的那块 USB 盘。它的设备 ID 一般有两种格式naa.xxxxxxxxxxxx或者t10.xxx。记录下这个 ID后面所有命令都围绕它操作。然后看这块盘有没有已有分区partedUtil get /dev/disks/naa.50014ee2b1a3b4c5如果提示没有分区表或者输出为空那就按下面的步骤直接创建。3.2 获取可用扇区范围并创建VMFS第一步拿到硬盘的总扇区数和可用扇区范围partedUtil getUsableSectors /dev/disks/naa.50014ee2b1a3b4c5输出大概是这样start 2048 end 1953525167记住end的值。然后创建 GPT 分区表加一个类型为 VMFS 的分区partedUtil setptbl /dev/disks/naa.50014ee2b1a3b4c5 gpt 1 2048 1953525167 AA31E02A400F11DB9590000C2911D1B8 0这里的AA31E02A400F11DB9590000C2911D1B8是 VMFS 分区的 GPT 类型标识固定写法不用改。分区建好之后再格式化创建 VMFS 文件系统vmkfstools -C vmfs6 /dev/disks/naa.50014ee2b1a3b4c5:1注意命令结尾的:1表示使用这块磁盘的第一个分区。如果一切顺利终端会输出类似Creating vmfs6 filesystem on naa.xxx:1 with capacity ...的信息。接着重新扫描存储适配器esxcli storage filesystem rescan-all最后确认数据存储已经出现esxcli storage filesystem list看到新创建的 VMFS 卷挂载在/vmfs/volumes/xxx下就大功告成了。3.3 自动挂载与重启后的注意事项ESXi 对数据存储是自动挂载的理论上重启后这个 USB 数据存储会自动识别。但我在实际使用中发现USB 设备在开机启动阶段的枚举速度比内置 SATA 硬盘慢偶尔会出现开机后数据存储不出现需要再插拔一次或手动执行esxcli storage core adapter rescan --all的情况。如果你的虚拟机文件全部放在 USB 数据存储上并且 ESXi 设置成“开机自动启动虚拟机”那么可能出现“虚拟机配置找不到磁盘”的报错。因为 USB 数据存储还没挂载虚拟机就已经尝试启动了。稳妥的做法是在 Web Client 的“主机 虚拟机启动/关机”里给虚拟机设置延迟启动比如设成 120 秒以上。或者把 ESXi 系统安装在 USB 设备上时不要把核心虚拟机放在同一个 USB 存储里避免系统盘和数据盘互相争夺 USB 总线。4. 把USB外置硬盘直通给虚拟机另一条常用路线另一条更灵活的路是不把 USB 硬盘给宿主机当数据存储而是把它直接交给某一台虚拟机使用。这种方式对数据管理更自由虚拟机里可以把它当成普通移动硬盘格式化成 NTFS、exFAT 都行宿主机完全不管。4.1 直通前需要确认的事ESXi 的 USB 直通有两个层次基于主机级 USB 直通Host-Based USB Passthrough宿主机把 USB 设备通过协议栈转发给虚拟机。这种方式不要求 VT-d几乎所有 USB 设备都支持是 Web Client 里默认的“添加 USB 设备”方式。基于 VMDirectPath I/O 的 PCI 直通DDA需要 CPU 和主板支持 VT-d并且只能把整个 USB 控制器直通给一台虚拟机不能单独挑一个 USB 口。对于外置硬盘我建议优先使用第一种方式也就是“USB 控制器保持由 ESXi 管理只把 USB 设备直通给指定虚拟机”。操作上直接编辑虚拟机添加 USB 设备即可。4.2 在Web Client中直通USB外置硬盘步骤非常直接编辑目标虚拟机进入“虚拟机选项 添加其他设备”选择“USB 设备”。下拉列表里会出现所有可用的 USB 设备选中你的外置硬盘。保存并开机虚拟机系统里应该会多出一块 USB 磁盘。需要注意的是这种 USB 直通方式虚拟机必须处于开启状态才能挂载设备而且同一时间只能有一台虚拟机占用这个 USB 设备。还有一点如果这块 USB 硬盘还同时被 ESXi 作为 datastore 占用那直通列表里不会出现它。二者只能选一个不能既要又要。4.3 直通方式的实际体验我在实际测试中发现直通 USB 外置硬盘给 Ubuntu 虚拟机读写速度和宿主机本机使用几乎一致。如果虚拟机里跑的是 Windows大文件拷贝时的速度也还可以但小文件随机读写会因为 USB 协议转发的开销掉一点性能。总的来说做移动硬盘用途完全够用。不过有一点要提醒这种方式对 USB 设备不支持热插拔故障恢复。如果 USB 硬盘在运行中被拔掉虚拟机里的磁盘状态可能会变成异常需要重新添加设备才能恢复。所以如果你把关键数据盘直通给了虚拟机线缆和供电一定要靠谱尽量不要用转接头。5. 性能实测与调优经验关于 USB 外置硬盘在 ESXi 下的性能很多人一开始的预期都是“USB 3.0 嘛随便跑个三四百兆”但实际上影响因素很多。我直接给出一组实测数据方便你做预期管理。5.1 不同接口和硬盘盒的性能表现我自己在一台 NUC 和一台自组 Xeon 服务器上分别测试过几套组合顺序读取重点看接口和硬盘盒主控硬件组合接口类型实测顺序读MB/s实测顺序写MB/s体验备注2.5寸SSD UASP硬盘盒USB 3.2 Gen 210Gbps780620接近内置SATA SSDM.2 NVMe USB4/雷电硬盘盒雷电3/414501200ESXi 8.0.3下如果是雷电网卡占用带宽会受影响3.5寸机械盘 普通USB3.0硬盘盒USB 3.05Gbps210200机械盘极限性能瓶颈在盘片2.5寸机械盘 普通USB2.0硬盘盒USB 2.0480Mbps3530不建议任何实际用途从表里能明显看出如果你拿一块普通 SATA SSD 配一个廉价 USB 3.0 硬盘盒跑出来的性能可能只有直连 SATA 的一半。差别主要来自硬盘盒的主控和 UASP 协议支持。建议购买硬盘盒时尽量选支持 UASUASP的比如常见的 ASMedia 或者 JMicron 的高端方案兼容性和性能都更好。5.2 适合 USB 数据存储的场景基于以上性能表现我给 USB datastore 的使用场景排个优先级存放 ISO 镜像和安装包读取为主速度要求中等非常适合。存放备份文件VMware Backup / Veeam 备份目标顺序写入带宽要求高但可以接受机械盘性能。存放不常开机的虚拟机比如测试机、旧项目归档机。磁盘 VMDK 平时不读写开机时加载完就基本闲置。不建议的场景生产数据库虚拟机、频繁随机读写的高 IO 虚拟机、需要 vMotion/DRS 的集群虚拟机。关于“ESXi 虚拟机硬盘扩容”这个高频需求如果虚拟机存放在 USB datastore 上你也可以直接在 Web Client 里对 VMDK 扩容操作和内置存储完全一致不受影响。5.3 需要调整的系统参数在 ESXi 里挂载 USB 外置硬盘后有几个参数值得手工调整主要是为了解决磁盘掉线、不识别和写入不稳定的问题。电源管理参数某些 USB 硬盘盒在空闲一段时间后会进入休眠导致 ESXi 认为磁盘异常。可以通过修改磁盘的 IO 策略把磁盘设为“一直在线”。执行esxcli storage nmp satp rule add --device naa.xxx --satp VMW_SATP_LOCAL --psp VMW_PSP_FIXED这个命令把磁盘的路径选择策略固定为 Fixed避免出现 PSP 切换导致的 IO 挂起。绕开 USB 仲裁的限制这个问题我在 2.2 节已经写过这里再强调一次如果你把 USB 硬盘当 datastoreusb.arbitrator.intr.ignore TRUE一定要配置否则重启后大概率会出现设备被系统保留、datastore 消失的问题。文件系统挂载重试如果遇到开机后 datastore 偶尔不出现可以在 /etc/rc.local.d/local.sh 里加一条启动延迟挂载的命令比如sleep 30 esxcli storage filesystem rescan-all加上之后重启会自动重新扫描 USB 存储实测稳定性提升明显。6. 常见问题与排查技巧实录写到这里把我在实际使用中遇到的高频问题整理成一个速查表方便你出了问题直接对照排查。6.1 问题排查速查表问题现象可能原因排查与解决办法插入 USB 硬盘后控制台里完全看不到设备硬盘盒兼容性、USB口供电不足、线缆问题换根粗短的数据线换个 USB 口确认硬盘盒在其他电脑上能正常识别能看到设备但“新建数据存储”里是灰色的USB Arbitrator 占用了设备修改/etc/vmware/config加入usb.arbitrator.intr.ignore TRUE并重启 usbarbitrator创建数据存储时提示“设备忙”有其他虚拟机正在占用该 USB 设备关闭所有引用了该 USB 设备的虚拟机再重新扫描虚拟机开机后找不到 VMDK报“无法打开磁盘”USB datastore 挂载晚于虚拟机启动设置虚拟机延迟启动或 SSH 进去手动esxcli storage filesystem rescan-allUSB 硬盘插在机箱前面板插拔后系统死机前面板 USB 供电不稳改插主板背板 USB 口确认电源供电正常直通 USB 硬盘后虚拟机里只有 USB 控制器没有磁盘虚拟机控制器类型不兼容在虚拟机设置里把 USB 控制器改为 USB 3.1xHCIVMFS 数据存储能识别但复制文件速度只有 30MB/s硬盘盒不支持 UASP走的是 USB2.0 协议换支持 UAS 的硬盘盒或者确认线缆和接口是 USB3.0重启后 datastore 偶尔不出现USB 设备枚举慢系统启动时序问题在 local.sh 里加入延迟后重扫命令或手动 re-scan6.2 两个值得单独展开的排查案例第一个是“开机后数据存储消失”这个案例。有一次我在一台家用小主机上插了一块 2.5 寸移动硬盘连续重启测试了五六次发现大概有 30% 的概率 datastore 不出来。后来我通过抓启动日志dmesg | grep -i usb发现ESXi 在启动早期就把 USB 总线扫描了一遍但硬盘盒自检需要 3 到 5 秒系统已经过了 USB 枚举窗口。最终解决办法就是加长了延迟启动同时把数据存储挂载脚本放到了 local.sh 里问题彻底消失。第二个案例是“USB 硬盘直通失败”。给一台 Ubuntu 虚拟机直通移动硬盘时创建虚拟机后设备列表里能看到 USB 盘但启动虚拟机后系统里找不到。排查到最后发现是虚拟机的 USB 控制器版本太旧默认是 USB 2.0EHCI而移动硬盘是 USB 3.0 设备于是把虚拟机设置里的 USB 控制器改成 USB 3.1xHCI重新添加设备后正常识别。6.3 备份与长期使用建议最后想说一个很多人忽略的点USB 外置硬盘接口的接触可靠性比不上内置 SATA/NVMe这是物理层面的短板。所以如果这块盘上保存了重要虚拟机的 VMDK建议同时做一层软件层面的备份。你可以在 ESXi 里对虚拟机做定期导出导出 OVF也可以把关键虚拟机克隆到本地其他数据存储避免因为一次 USB 松脱导致数据不可用。我在实际使用中还有一个习惯USB 外置硬盘插入后在 Web Client 里手动把该数据存储的名称改成容易识别的前缀比如USB-BACKUP-01。这样虚拟机位置引用和备份脚本定位都不会因为盘符变动而混乱。后面再用到 ESXi 挂 USB 硬盘的时候你大概率也会感谢自己当时多花了这一分钟。