装完 ESXi,机箱风扇全部拉满,声音大得不像话。CPU 温度 45 度,进风口温度正常,阵列卡和内存条都正常,硬件日志也干净。
这种情况我基本都是先看 IPMI 驱动,然后直接去 BIOS 里改设置,十次里有八次能解决。
风扇到底归谁管
服务器风扇的调速权在 BMC(iDRAC / iLO / XClarity)手里。BMC 自己读温度传感器,算一下该转多快,然后通过 SMBus 或者类似机制给风扇控制器下指令。
ESXi 装上 IPMI 驱动是为了监控——温度、电压、风扇转速这些数据,要在 vROps 里看,就得能读到。
问题出在有些 IPMI 驱动在读数据的同时,把调速的活也接了:
正常情况: BMC ─── 读传感器 ──→ 算温度 ──→ 调风扇转速 ESXi ←── 只读数据 ──────────────┘ 出问题的���况: BMC ─── 只剩上报温度的权限 ESXi ←── 接管调速,拿到的传感器数据比 BMC 少 不知道每个风扇的脾气、不知道风道设计 → 保守策略:全速关键点在于 ESXi 拿到的信息比 BMC 少。ESXi 不知道这个机箱有几个风扇、哪个该和哪个联动、每个风扇的转速上限是多少。信息不足时最安全的做法就是全速——宁可吵,不能热。
所以这个"故障"其实是ESXi 的保守兜底策略和它掌握的信息不匹配,不是硬件坏了。
先确认是不是这个原因
别急着改设置,先花两分钟验证。SSH 进 ESXi:
# ① IPMI 驱动装没装 esxcli software vib list | grep -i ipmi # 装过会有输出,常见的是 OEM 定制版: # ipmi-ipmi-si 5.10.0-1OEM.500.0.0.472560 # 带 -si 或 -OEM 标记的多半会接管调速 # ② IPMI 硬件在不在 esxcli hardware ipmi get # 输出: # IPMI Version: 2.0 # Watchdog Timer: Present # Chassis Power: OK第三条是关键,看传感器能读到什么:
# ③ 传感器列表(最关键的一步) esxcli hardware ipmi sensor list | head -30 # 典型情况: # CPU Temp | 45 C | ok # System Temp | 38 C | ok # Fan 1 Speed | N/A | N/A ← 读不到! # Fan 2 Speed | N/A | N/A # PSU 1 Temp | 40 C | ok如果 Fan Speed 那一栏全是 N/A,基本可以确认了:ESXi 接管了控制权,但读不到风扇转速数据,所以只能全速兜底。
反过来,如果 ESXi 能读到每个风扇的实际转速,但风扇还是全速,那就不是这个原因,要往硬件方向查(温感器故障、风扇本身损坏、BMC 里有告警)。
不是控制权问题的话
先查传感器有没有离线:
esxcli hardware ipmi sensor list | grep -iE "critical|fail|offline" # 典型错误: # CPU Temp | N/A | Offline # Fan 1 Speed | N/A | Offline传感器离线是硬件问题,配置改不了。风扇反馈线松了、温度探针坏了都会这样。
然后去 BMC 的日志里看,iDRAC 和 iLO 的位置不一样:
# iDRAC # Maintenance → Trace Log # iLO # Information → Support Information # 常见记录: # "Fan 3 sensor reading out of range" ← 风扇反馈异常 # "Ambient temperature sensor failure" ← 进风探针故障 # "Chassis intrusion detected" ← 机箱开过最后才是物理检查,这一步需要去机房:风扇有没有插紧、积灰严不严重、机箱叠放时前面板有没有挡住后面板的进风、服务器是不是塞得太紧。
怎么修
方案一:把控制权还给 BMC
这是最省事的做法,让 ESXi 只做监控,调速交回 BMC。需要在 BIOS 里关掉 OS 层的风扇控制。
# Dell (iDRAC 9 / 10) # 开机按 F2 → System Setup → iDRAC Settings → Thermal # Thermal Profile: Default # Fan Speed Offset: Off # User Mode: Disabled ← 这项是关键 # Save → Exit # HPE (iLO 5 / 6) # 开机按 F9 → BIOS/Platform Configuration → Power Management # HP Power Profile: Custom # HP Power Regulator: HP Static High Performance # Fan Control: Disable OS Fan Control ← 关键 # Save → Exit # Lenovo (XClarity) # 开机按 F1 → System Settings → Power → Cooling # Cooling Mode: Normal # Disable OS Thermal Control: Enabled ← 关键 # Save → Exit改完重启,风扇通常 30 秒内恢复。
同一功能在不同品牌 BIOS 里叫法差别很大,Dell 叫 User Mode,HPE 叫 Fan Control,Lenovo 叫 Disable OS Thermal Control。有些服务器不单独列出来,藏在 OS Thermal Management 或者 Cooling Fan Control 这样的二级菜单里。实在找不到就在 BIOS 里搜 fan 和 thermal。
方案二:装厂商的 IPMI 驱动
如果你希望 ESXi 既监控又自己管风扇,那就得装厂商为 ESXi 定制的驱动——它们能拿到完整的传感器数据,不需要保守兜底。
# Dell:OpenManage Server Administrator (OMSA) # 在 dell.com/support 搜对应机型,找 # "OpenManage Server Administrator" 章节下载 VIB esxcli software vib install \ -d /vmfs/volumes/datastore1/drivers/OM-Srv-Admin-Dell-Web-9.4.0-3766_VIB.zip \ --no-sig-check esxcli system shutdown reboot -r "install OMSA" # HPE:iLO Agent esxcli software vib install \ -d /vmfs/volumes/datastore1/drivers/ilo-release-2.0.0-1.vib \ --no-sig-check # Lenovo:XClarity Agent esxcli software vib install \ -d /vmfs/volumes/datastore1/drivers/XClarity-Controller-3.0.0.vib \ --no-sig-check装完验证:
esxcli hardware ipmi sensor list | grep -i fan # 期望: # Fan 1 Speed | 8400 RPM | ok # Fan 2 Speed | 8200 RPM | ok # # 能读到具体转速,说明 ESXi 拿到了完整数据, # 调速策略就能正常工作VIB 建议放 datastore 而不是 /tmp,后者重启会被清掉。
方案三:在 BMC 里手动限速
前两个方案都要重启主机。如果现在是噪音投诉需要马上处理,可以先在 BMC 网页里调:
# iDRAC # Configuration → System Settings → Thermal # Fan Speed Offset: Low # Maximum Exhaust Temperature: 50 C # iLO # Power Management → Fan Settings # Thermal Configuration: Optimal Cooling # Minimum Fan Speed: 30% # Maximum Fan Speed: 60% # XClarity # Configuration → Cooling → Fan # Manual Mode: Enabled这个方案的局限要清楚:手动设了转速上限之后,温度升高时不会自动加速。应急可以,长期不行。
几个方案怎么选
| 方案 | 要重启吗 | 谁调速 | 温度保护 |
|---|---|---|---|
| BIOS 关 OS 控制 | 要 | BMC | 完整保留 |
| 装厂商 IPMI 驱动 | 要 | ESXi(数据完整) | 完整保留 |
| BMC 手动限速 | 不要 | BMC(固定值) | 被削弱 |
我的建议:新装机器直接上方案一,一步到位。已经在跑的环境如果想保留 ESXi 侧的管理能力,再考虑方案二。方案三只用来临时顶一下。
检查脚本
这个脚本能区分"控制权问题"和"硬件问题",两种的处理路径完全不一样:
#!/bin/bash # fan_check.sh # 用法:在 ESXi 上执行 bash fan_check.sh # 退出码:0=正常,1=控制权问题,2=硬件问题 echo "==========================================" echo " 风扇状态检查 - $(hostname) - $(date)" echo "==========================================" # --- 1. IPMI 驱动 --- echo "" echo "[1/3] IPMI 驱动" if esxcli software vib list 2>/dev/null | grep -qi ipmi; then echo " 已安装:" esxcli software vib list | grep -i ipmi | sed 's/^/ /' else echo " 未安装 IPMI 驱动" echo " ▶ 风扇全速不是控制权问题,查传感器和 BMC 日志" exit 2 fi # --- 2. 传感器可读性 --- echo "" echo "[2/3] 传感器可读性" TOTAL=$(esxcli hardware ipmi sensor list 2>/dev/null | wc -l) FAN_OK=$(esxcli hardware ipmi sensor list 2>/dev/null | grep -i fan | grep -vc "N/A\|Offline") FAN_BAD=$(esxcli hardware ipmi sensor list 2>/dev/null | grep -i fan | grep -c "N/A\|Offline") OFFLINE=$(esxcli hardware ipmi sensor list 2>/dev/null | grep -c "Offline") echo " 传感器总数: $TOTAL" echo " 风扇可读: $FAN_OK" echo " 风扇不可读: $FAN_BAD" echo " 离线传感器: $OFFLINE" # --- 3. 判定 --- echo "" echo "[3/3] 判定" if [ "$OFFLINE" -gt 0 ]; then echo " ▶ 存在离线传感器,这是硬件问题" echo " 去 iDRAC/iLO 的 Trace Log 查具体传感器告警" echo " 常见:风扇反馈线松动、进风温度探针损坏" exit 2 elif [ "$FAN_BAD" -gt 0 ]; then echo " ▶ ESXi 已接管风扇控制,但读不到风扇传感器" echo "" echo " 处理方式(按推荐度):" echo " 1. BIOS 关闭 OS Fan Control(推荐,需重启)" echo " Dell: iDRAC Settings → Thermal → User Mode = Disabled" echo " HPE: Power Management → Fan Control = Disable OS Fan Control" echo " Lenovo: Cooling → Disable OS Thermal Control = Enabled" echo "" echo " 2. 安装厂商 IPMI 驱动(让 ESXi 拿到完整数据)" echo " Dell OMSA / HPE iLO Agent / Lenovo XClarity Agent" exit 1 else echo " ▶ 风扇传感器读取正常" echo " 若风扇仍全速,查:" echo " - BMC 的 Thermal 配置(是否设了最小转速)" echo " - 刚做完硬件维护?换内存会触发全速自检" echo " - BMC 里有没有未清除的历史告警" exit 0 fi三个出口对应三种结论:0 是正常,1 是控制权问题(改 BIOS),2 是硬件问题(去机房)。
几个细节
第一,风扇全速就拆机检查散热,这个顺序要反过来。先跑脚本,如果传感器离线数为 0、风扇读不到,那拆机也看不出问题——散热系统根本没坏。
第二,ESXi 上没有重置 BMC 的命令。控制权在 BIOS 设置和 BMC 固件两个地方,ESXi 命令改不到。
第三,不要在 BMC 里把风扇锁死到最低转速。温度升高时不会自动加速,夏天机房温度一高就烤 CPU。方案三只能应急。
第四,装 IPMI 驱动之前先确认驱动类型。OEM 定制版(带 -si 或 -OEM 字样)和 VMware 通用版行为不一样,前者可能接管调速,后者只读数据。搞不清就直接走方案一。
第五,批量改 BIOS 之前把每台机器的当前配置截图存档。不同代际的服务器选项位置差很多,一台改完不生效是常事,有个参照能省事。
第六,如果风扇问题是运行一段时间之后才出现的,而不是装完立刻出现,那还得看温感器漂移或者 BMC 自身的校准问题,方向和"装完就全速"不一样。
官方参考
vSphere 8.0 ESXi 主机管理指南里 IPMI 传感器管理那节讲了怎么读这些数据;KB1002833 讲 IPMI 传感器状态和风扇控制。各厂商的 iDRAC / iLO / XClarity 官方文档里搜 fan control 或 thermal management 能查到 BIOS 选项的详细说明。