ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ESXi不认USB移动硬盘?从架构原理到直通实战全解

ESXi不认USB移动硬盘?从架构原理到直通实战全解 1. 先说结论插上没反应不代表设备坏了前几天我往一台ESXi 7.0 U3的机器上插了一块2.5寸移动硬盘SSH进去敲lsusb设备明明在列表里可vSphere Client存储页面里就是看不到这块盘。当时第一反应是不是硬盘盒的桥接芯片有问题换到Windows上一试正常读写。再插回ESXi依旧隐身。这个现象其实非常典型。很多人在ESXi上插U盘、移动硬盘遇到的情况无非三种图形界面存储适配器里根本看不到盘SSH里lsusb能看到USB设备存储设备列表依然空白用RDM或者PCI直通把USB控制器透传给虚拟机后虚拟机里时认时不认。这三类症状指向同一个根因ESXi对USB mass storage的支持远没有普通桌面系统那么友好它的USB存储链路天然就是一条窄路。这篇文章我会顺着症状往下挖先把底层逻辑讲清楚再给你几套可落地的解决路径最后说几个只有真插过盘才会碰到的坑。如果你只是想快速让虚拟机读上移动硬盘可以直接跳到第4章看直通方案如果你还想弄明白为什么我的ESXi不认盘建议从头看后面排错你会顺手很多。2. 为什么ESXi对USB存储先天弱势架构层面的原因2.1 ESXi的定位决定了USB栈不是主角ESXi是Type-1虚拟机监控器VMkernel的设计目标只有一个把物理资源安全、高效地分配给虚拟机。在这个前提下硬件支持的重心全在存储控制器SAS/SATA/NVMe、网络网卡、CPU和内存上。USB子系统在它眼里属于外围设备主要任务只是帮你在安装系统时读取安装镜像、或者给虚拟机接个USB Key做许可授权。所以你会发现一个现象ESXi安装U盘能被识别但普通的U盘、移动硬盘插上去图形界面不显示。原因在于VMkernel的USB栈只实现了最基础的Host Controller驱动并没有像Windows那样把每一类USB存储都纳入即插即用的存储管理层。USB存储设备要想出现在存储视图中必须被usb-storage驱动识别并注册到storage stack这个链路里的任何一环出现兼容问题结果就是设备插了但系统装看不见。2.2 移动硬盘和U盘的差异决定了失败率更高这里要区分两类设备U盘大多采用USB Mass Storage Bulk-Only Transport协议控制逻辑简单主控芯片方案成熟Phison、SMI、Sandisk等和ESXi的兼容性相对较好。移动硬盘本质是USB转SATA桥接芯片 2.5/3.5寸硬盘桥接芯片型号繁杂JMicron JM578、ASMedia ASM1153、VIA VL716等每颗芯片的SCSI命令行为都不一样。ESXi的usb-storage驱动在处理某些桥接芯片的指令时可能直接拒绝识别或者识别后上报的磁盘容量异常。这就是为什么有的人插U盘没问题一插移动硬盘就失灵——不是盘坏了是桥接芯片在ESXi的驱动兼容列表之外。2.3 从USB设备到存储设备中间要过几道闸为了让为什么更直观给你画一条数据路径不画图文字描述USB物理接口 → USB Host ControllerxHCI → VMkernel USB驱动vmkusb → usb-storage驱动 → SCSI中层scsi_transport → 存储适配器层storage adapter → VMFS数据存储层这条链路只要有一道闸不认你在图形界面就看不到盘。最常见的断点有两个设备能被lsusb看到但usb-storage驱动没接管SCSI层拿不到设备设备进入SCSI层但存储适配器没有把它注册为可用的磁盘设备。理解了这条链路排错就有了方向先确认设备在哪一层断掉再决定下一步该用什么方案。3. 排查链路先分清设备层还是存储层的问题按我自己的习惯插上盘之后第一步不是去图形界面点刷新而是直接开SSH。ESXi的SSH服务要在DCUIDirect Console User Interface或vSphere Client服务设置里先打开这个就不赘述了。3.1 第一步确认设备是否在USB总线上登录SSH之后执行lsusb如果设备正常枚举你会在输出里看到类似这样的行Bus 002 Device 003: ID 0bc2:2322 Seagate RSS LLC Expansion Desk能看到这行说明USB物理层、Host Controller、VMkernel USB驱动都是通的设备已经完成枚举。如果你在这一步就什么都没有问题更底层可能和供电、USB口、或者主板的USB控制器有关可以先换个USB口、换根数据线甚至换一台机器确认硬件本身没问题。3.2 第二步检查存储栈是否识别设备枚举成功不代表存储层认它。接着执行esxcli storage core device list在这条命令的输出里搜索你的设备型号。如果能看到类似/dev/disks/t10.ATA_____Hitachi_HTS545050B9A300________________...说明SCSI和存储层已经接管。如果lsusb能看到设备但这里空空如也就说明断点在usb-storage驱动和SCSI层之间。还有一种常见情况设备出现在列表里但状态是Offline或Dead这种多半是驱动加载异常或供电不稳需要看日志。3.3 第三步查看驱动和内核日志执行esxcli software vib list | grep usb确认usb-storage驱动有没有装上。ESXi 7.0/8.0默认应该都有但某些精简版或定制镜像可能缺了。然后看日志grep -i usb /var/log/vmkernel.log | tail -50vSphere Client里也能看但用SSH直接抓日志更快。日志里如果出现类似Probe of USB device failed或者Unsupported command之类的关键字基本就锁定是驱动或桥接芯片兼容性问题。3.4 排查结果的三条分支路径根据上面的排查最终会落在三条路径上排查结果问题层级推荐解决路径lsusb无设备USB物理层换口换线换盘排查供电lsusb有设备存储列表无驱动/存储层改设备直通或控制器直通设备在列表但Offline驱动/仲裁器状态用vmkload_mod或重启宿主机处理从我的经验来看90%左右的人卡在第二种情况。这个状态下光靠改驱动参数往往解决不了因为ESXi针对第三方USB桥接芯片的适配力度很有限最有效的路就是绕开ESXi的存储栈直接把USB设备给到虚拟机。4. 让移动硬盘能被看见的两种路径USB设备直通与控制器直通4.1 路径一USB设备级直通Passthru这是最轻量、对宿主机影响最小的方案。原理是把单个USB设备从VMkernel手里摘出来独占分配给某一台虚拟机。前提是你的USB设备所属控制器支持vmkusb的passthru功能。先执行esxcli hardware usb passthrough list输出大概长这样Device ID: 0bc2:2322 Description: Seagate Expansion Desk Passthrough: false看到Passthrough: false说明当前被VMkernel占着还不能直通给虚拟机。需要把它释放出来。步骤一判断并操控仲裁器ESXi里有一个USB仲裁器usbArbitrator负责在VMkernel和虚拟机之间切换USB设备的所有权。关闭它的命令是/etc/init.d/usbarbitrator stop注意这只对当前系统运行状态生效重启后仲裁器会重新接管。如果后续不需要宿主机使用该USB设备可以把它设为常关chkconfig usbarbitrator off步骤二移除vmkusb驱动可选如果仲裁器停了设备还被VMkernel占着可以用vmkload_mod直接卸载USB驱动模块vmkload_mod -u vmkusb这个操作会把所有USB设备的VMkernel层驱动卸载影响面有点大建议在维护窗口做并且用vmkload_mod -l vmkusb确认状态之后再用vmkload_mod vmkusb恢复。步骤三在虚拟机里添加USB设备回到vSphere Client编辑虚拟机配置在添加其他设备里选USB设备然后在设备下拉框里找到你的移动硬盘确认即可。开机后虚拟机系统里应该就能看到这块盘。提示虚拟机里能看到盘不代表读写性能好。USB设备直通走的是虚拟化USB控制器I/O路径还是会经过宿主机USB栈性能上能到物理直连的六七成就算不错。4.2 路径二USB控制器级直通PCI Passthru如果设备级直通不生效或者你想把多块USB硬盘一起给一台虚拟机用那就得走控制器直通。原理是把主板上整个USB xHCI控制器透传给虚拟机虚拟机直接操作控制器硬件宿主机不再处理该控制器下的USB设备。先确认USB控制器是否支持PCI直通在vSphere Client的宿主机管理里把配置切换到PCI设备看USB控制器是否出现在可用直通列表里。Intel平台的板载USB控制器基本都可以AMD平台要视主板芯片而定。也可以通过SSH查lspci | grep -i usb然后设置直通并添加设备在PCI设备列表里选中USB控制器点切换为直通之后编辑目标虚拟机添加PCI设备选择这个USB控制器。保存后重启虚拟机让直通生效。这块有两个要点控制器直通后该控制器下的所有USB口都归虚拟机宿主机键盘鼠标如果也插在这组口上会直接失灵。建议直通前先把宿主机管理口和键鼠换到另一组USB口。部分主板会有多个USB控制器比如一个给USB 2.0、一个给USB 3.0直通时要选对组。直通之后ESXi宿主机的存储或网络如果也挂在同一个控制器下会一起被切走。4.3 不适合直通的场景还不如用网络存储如果你的机器是一台小体积软路由或者单节点服务器没有多余USB控制器可直通也没有合适的虚拟化层支持那我建议放弃让ESXi直接认盘这个想法改用网络存储解决。把移动硬盘插到一台常开的小主机比如家里的NAS、树莓派、另一台Windows机器上共享出去ESXi里的虚拟机用iSCSI或CIFS挂载一样能实现数据互通而且稳定性往往更好。一个常见的做法是在ESXi里添加软件iSCSI适配器然后连接目标端的共享目录虚拟机就可以直接在上面放数据这种方式对移动硬盘格式也不挑剔NTFS、exFAT都行适合家用、小办公室这类对性能要求不高的场景。5. 真实评测与避坑格式、供电、兼容性三个老大难5.1 格式问题为什么NTFS/exFAT“偶尔能用”VMFS“别乱试”很多朋友想的是我直接把移动硬盘格式化成VMFSESXi总该认了吧。从原理上讲只要USB存储被ESXi识别到它确实会被当成普通磁盘处理也能在上面创建VMFS数据存储。但移动硬盘和正规硬盘有一个关键差异移动硬盘的桥接芯片会做SCSI命令转换而VMFS对SCSI命令的完整性要求很高一旦桥接芯片对某些指令处理不标准VMFS文件系统就可能出现脏状态轻则数据丢失重则整盘无法识别。如果你只是想在ESXi虚拟机和日常PC之间拷数据建议保留NTFS或exFAT然后不要把盘直接挂在存储视图里而是直通给虚拟机后在虚拟机里做文件传输。比如Windows虚拟机直通USB硬盘后NTFS盘进去就是即插即用Linux虚拟机里需要手动挂载写法和平常一样mount /dev/sdb1 /mnt/usbhd这块强烈建议别用VMFS真实踩过坑的人会告诉你同样的话VMFS留给真正的SAS/SATA盘移动硬盘老老实实做文件交换盘。5.2 供电问题识别不稳定的隐形元凶移动硬盘的供电要求比U盘高尤其2.5寸机械盘在启动瞬间电流可以到1A左右如果插在USB 2.0口上经常出现偶尔能认、偶尔不认的灵异现象。排查时可以用这样两个手段看机箱里USB数据线和供电线有没有独立供电如果是服务器主板最好用主板自带的后置USB口别用机箱前面板延长线买一根带辅助供电的双头USB线数据头供电头给硬盘额外补电。一旦供电不稳系统日志里会出现device descriptor read/64, error -71之类的错误这个信息对定位供电问题很有用。5.3 兼容性列表桥接芯片的好坏差别很大根据Reddit和VMware社区的实测反馈ESXi对USB移动硬盘的兼容性大致可以分三档桥接芯片代表产品ESXi直接识别情况ASMedia ASM1153奥睿科、绿联部分硬盘盒识别率较高直通后较稳定JMicron JMS578希捷、西数部分原装盘部分能识别部分需要直通VIA VL716杂牌硬盘盒、扩展坞兼容性最差建议直接换这不是绝对规律不同ESXi版本对同一芯片的表现也会不一样。个人经验是手里的移动硬盘插上ESXi不认别反复重启折腾换一根直通路径比换驱动参数靠谱。6. 个人实验数据与方案选型参考在写这篇文章前我专门用两台设备做了几组测试一组是ESXi 7.0 U3Dell R720一组是ESXi 8.0HP 800 G4移动硬盘分别是希捷新睿翼4TJMicron和三星T7 SSDASMedia。结果如下设备/方案设备级直通控制器直通直接存储识别希捷新睿翼4T成功重启后需重新添加设备成功虚拟机稳定失败无法识别三星T7 SSD成功读写性能OK成功部分识别不稳定普通U盘(64G)成功成功识别成功可建数据存储两个发现值得说一下T7这类SSD移动硬盘直接插在ESXi上偶尔能被识别到但过一会儿又会从存储列表消失明显是驱动层在兜底但状态不稳定。这种情况下千万别拿它当正规数据存储用。设备级直通有一个小毛病宿主机重启后直通关系有时候会掉需要重新在虚拟机里添加USB设备。解决方法是写个脚本在宿主机开机后自动把设备重新挂给虚拟机或者干脆用控制器直通一劳永逸。如果你决定长期用USB外接盘给虚拟机扩容我个人建议走控制器直通虽然牺牲了宿主机的一部分USB口但换来的是稳定的I/O路径不用反复折腾。7. 写在最后什么场景才值得在ESXi上挂移动硬盘根据我这些年的实际体验ESXi上接移动硬盘这件事可以用之前一位同行的话来概括能做但别拿它当主力。如果你只是临时往虚拟机里拷一份几GB的离线数据设备级直通是性价比最高的方案五分钟搞定如果虚拟机确实需要一个冷备大容量空间但机箱里又装不下更多硬盘控制器直通定期备份方案可以考虑如果你指望USB外接盘在ESXi里跑生产虚拟机劝你趁早换思路SATA/NVMe/网络存储都比它稳得多。最后再分享一个小技巧如果你的ESXi所有USB口都不认移动硬盘但在SSH里又确实能看到设备可以试试把盘插在后置USB口而不是前置面板有些服务器前置USB口通过内部排线连接供电和信号衰减都会影响识别。这个细节看起来不值一提但在实际运维里真的能解决一批问题。
返回列表