利用 ipmitool 识别与处理常见硬件问题
适用于 Linux 本机通过 OpenIPMI/KCS 访问 BMC(联想 XCC、Dell iDRAC、浪潮、Supermicro 等多数 IPMI 机型)。
原则:先定位、再处理;有真实故障先修硬件,历史告警再清日志。
写法:说明与命令分开,代码块可直接复制执行。
输出约定(重要)
- 打到当前终端的输出控制在 100 行以内(下文多用
head/tail,一般取 80 行留余量)。 - 完整日志/全量列表重定向到文件,需要时再
less/grep文件,避免终端被 SEL 刷屏。 - 多条命令拆成多块执行;不要把会大段输出的命令串在同一块里无限制地连跑。
一、使用前准备
说明
- 需 root(或具备 IPMI 设备权限)。
- 本机方式一般无需
-H/-U/-P;远程则在每条命令前加-I lanplus -H <BMC_IP> -U <用户> -P <密码>。 sdr elist里 grep 到Fail等字样,可能只是传感器名字含 Fail,要以状态列(ok/ns/cr等)为准。
命令:确认工具与版本
which ipmitool
ipmitool -V
命令:BMC 基本信息(终端)
ipmitool mc info
命令:FRU 信息(完整进文件,终端只看前 80 行)
ipmitool fru print > /tmp/fru_$(date +%F_%H%M%S).txt
FRU_BAK=$(ls -t /tmp/fru_*.txt | head -n 1)
wc -l "$FRU_BAK"
head -n 80 "$FRU_BAK"
二、快速健康巡检(推荐固定流程)
说明
按块执行:底板 → 机箱 → 异常传感器 → SEL 概况 → 最近事件。
黄灯时重点看 SEL 是否将满/已满,以及是否有未恢复的 Critical。
命令:底板与机箱
ipmitool mc info
ipmitool chassis status
命令:异常传感器(终端最多约 80 行)
ipmitool sdr elist | grep -iE 'fail|crit|ncrit|warn|nc |cr |ns ' | head -n 80
命令:SEL 容量与最近事件
ipmitool sel info
ipmitool sel elist | tail -n 80
命令:电源 / 风扇 / 温度(分项,避免一次刷屏)
ipmitool sdr type 'Power Supply' | head -n 80
ipmitool sdr type Fan | head -n 80
ipmitool sdr type Temperature | head -n 80
ipmitool sensor list | grep -iE 'PSU|Fan|Temp|Inlet|CPU|DIMM' | head -n 80
三、读懂输出(对照用)
SDR 传感器状态(常见)
| 状态 | 含义 | 处理倾向 |
|---|---|---|
ok |
正常 | 无需处理 |
nc |
Non-Critical,预警 | 关注趋势,排查散热/冗余 |
cr / crit |
Critical | 尽快处理硬件 |
nr |
Non-Recoverable | 紧急停机/换件评估 |
ns |
No Reading / 不可用 | 可能未装该部件或传感器禁用 |
SEL 事件关键词
| 关键词 | 常见含义 |
|---|---|
Asserted |
告警产生/条件成立 |
Deasserted |
告警恢复 |
Log almost full / Log full |
SEL 将满/已满,常导致机箱黄灯 |
Power Supply ... AC lost |
电源掉电或线缆松动 |
Non-Redundant |
电源冗余丢失(单路供电) |
Predictive Failure |
部件预测故障(常见硬盘) |
Front Video ... Absent |
前面板视频未在位(很多机房常态,易刷屏) |
四、场景:前面板黄灯 / 告警灯
说明
- 先确认当前传感器是否仍有
cr/nc故障。 - 若传感器全
ok,多为 历史 SEL 未清 或 SEL 已满。 - 清 SEL 前把完整日志备份到文件;终端只看摘要。
- 清完仍亮,可冷重启 BMC(一般不影响业务 OS)。
命令:看现况传感器
ipmitool sdr elist | grep -iE ' fail|crit|ncrit| nc | cr | nr ' | head -n 80
命令:看 SEL 是否将满
ipmitool sel info
命令:完整备份 SEL(不刷屏)+ 终端看末 80 行
ipmitool sel elist > /tmp/sel_backup_$(date +%F_%H%M%S).txt
SEL_BAK=$(ls -t /tmp/sel_backup_*.txt | head -n 1)
wc -l "$SEL_BAK"
tail -n 80 "$SEL_BAK"
命令:清除 SEL 并确认
ipmitool sel clear
ipmitool sel info
ipmitool sel elist | head -n 80
命令:BMC 冷重启(可选)
ipmitool mc reset cold
五、场景:电源(PSU)告警
说明
Presence detected+ok:电源在位正常。AC lost/IN Failure/Non-Redundant:检查电源线、插座、PDU,确认双路都供电。- 历史 PSU 故障若 SDR 已回
ok,清 SEL 即可灭历史灯。 - 仍报 Critical:按厂商规范更换电源模块。
命令:电源传感器
ipmitool sdr type 'Power Supply' | head -n 80
ipmitool sdr elist | grep -i PSU | head -n 80
命令:电源相关历史事件(完整进文件,终端 ≤80 行)
ipmitool sel elist > /tmp/sel_full_$(date +%F_%H%M%S).txt
SEL_BAK=$(ls -t /tmp/sel_full_*.txt | head -n 1)
grep -iE 'PSU|Power Supply|Power Unit|Redundant' "$SEL_BAK" | tail -n 80
六、场景:风扇 / 温度过高
说明
- 风扇
nc/cr:查防尘网、空调、缺扇。 - 温度持续偏高:先改善散热,勿只清日志。
命令:风扇与温度传感器
ipmitool sdr type Fan | head -n 80
ipmitool sdr type Temperature | head -n 80
ipmitool sensor list | grep -iE 'Fan|Temp|Inlet|Outlet|CPU' | head -n 80
命令:相关 SEL(先有全量文件时)
SEL_BAK=$(ls -t /tmp/sel_full_*.txt /tmp/sel_backup_*.txt 2>/dev/null | head -n 1)
grep -iE 'Fan|Temp|Thermal|Inlet' "$SEL_BAK" | tail -n 80
若还没有备份:
ipmitool sel elist > /tmp/sel_full_$(date +%F_%H%M%S).txt
SEL_BAK=$(ls -t /tmp/sel_full_*.txt | head -n 1)
grep -iE 'Fan|Temp|Thermal|Inlet' "$SEL_BAK" | tail -n 80
七、场景:内存 / CPU / 系统事件
说明
- Memory / ECC / Processor / IERR / CATERR 需按槽位定位。
- 频繁可纠正 ECC:安排换内存;不可纠正或 CPU 严重错误:维护窗口处理。
命令:传感器摘要
ipmitool sdr elist | grep -iE 'DIMM|Mem|CPU|Proc' | head -n 80
命令:SEL 筛选(经文件,终端 ≤80 行)
ipmitool sel elist > /tmp/sel_full_$(date +%F_%H%M%S).txt
SEL_BAK=$(ls -t /tmp/sel_full_*.txt | head -n 1)
grep -iE 'Memory|DIMM|ECC|Processor|CPU|IERR|CATERR|Fault' "$SEL_BAK" | tail -n 80
命令:FRU 摘要
ipmitool fru print > /tmp/fru_$(date +%F_%H%M%S).txt
FRU_BAK=$(ls -t /tmp/fru_*.txt | head -n 1)
head -n 80 "$FRU_BAK"
八、场景:硬盘 / 存储背板(带外可见部分)
说明
- 细节多在 RAID 工具;IPMI 仅作带外线索。
Drive Fault/Predictive Failure:按阵列换盘,不要只清 SEL。
命令:磁盘相关 SDR / SEL
ipmitool sdr elist | grep -iE 'Drive|Disk|HDD|Bay|Slot' | head -n 80
ipmitool sel elist > /tmp/sel_full_$(date +%F_%H%M%S).txt
SEL_BAK=$(ls -t /tmp/sel_full_*.txt | head -n 1)
grep -iE 'Drive|Disk|HDD|SSD|Slot|Predictive|Hot Swap' "$SEL_BAK" | tail -n 80
九、场景:SEL 被无意义事件刷满
说明
常见于联想:Front Video | Absent 周期性刷屏 → SEL 满 → 黄灯。
处理:确认非真实故障 → 备份并清 SEL → 在 XCC 对该传感器降级/关闭告警。
命令:统计与抽样(不刷全量到终端)
ipmitool sel elist > /tmp/sel_full_$(date +%F_%H%M%S).txt
SEL_BAK=$(ls -t /tmp/sel_full_*.txt | head -n 1)
wc -l "$SEL_BAK"
grep -c 'Front Video' "$SEL_BAK"
grep -iE 'Front Video|Log almost full|Log full' "$SEL_BAK" | tail -n 80
命令:清除 SEL
ipmitool sel clear
ipmitool sel info
十、场景:BMC / 带外网络与用户
说明
- 联想 XCC 常有复杂密码策略;
Invalid data field in request多为密码不合规。 mc reset cold只重启 BMC,不恢复默认密码。- 下列命令输出通常远小于 100 行。
命令:查看 LAN 与用户
ipmitool lan print 1
ipmitool user list 1
命令:修改已有用户密码(示例:用户 ID=2)
说明:末尾 20 为 20 字节密码模式;密码需符合 BMC 策略。
ipmitool user set password 2 'Lenovo@2024' 20
命令:新增管理员用户(示例:ID=4,用户 igo)
说明:先 user list 1 选空 ID;Igo@p123 仅 8 位,复杂策略下可能失败,必要时加长。
ipmitool user set name 4 igo
ipmitool user set password 4 'Igo@p123' 20
ipmitool user enable 4
ipmitool channel setaccess 1 4 link=on ipmi=on callin=on privilege=4
ipmitool user list 1
十一、场景:远程开关机 / 电源状态(慎用)
说明
生产环境操作前确认目标主机;power off / cycle 会中断业务。输出很短。
命令:查看电源状态
ipmitool chassis status
ipmitool power status
命令:改变电源状态(确认后再去掉注释执行)
# ipmitool power on
# ipmitool power soft
# ipmitool power off
# ipmitool power cycle
# ipmitool power reset
十二、常见问题速查表
| 现象 | 优先做法 | 处理方向 |
|---|---|---|
| 机箱黄灯,业务正常 | sel info + 异常 SDR(head)+ SEL 备份后 clear |
无现况故障则清历史 |
| SEL Log full | 全量重定向备份 → sel clear |
清日志;查刷屏传感器 |
| PSU 告警 | sdr type 'Power Supply' | head |
查线缆/PDU/换电源 |
| 温度/风扇告警 | sdr type 分项 + head |
散热与环境 |
| 设密失败 Invalid data field | — | 加长并满足复杂度,或加 20 |
| 带外网页打不开 | lan print 1 / mc reset cold |
查管理网;必要时 Setup 恢复 BMC |
十三、建议操作纪律
- 先看 SDR 现况,再看 SEL 历史,避免只清日志掩盖故障。
- 清 SEL 前备份到
/tmp,终端只用tail/grep | head|tail看摘要。 mc reset cold≠ 恢复出厂。- 密码丢失且本机改密失败:进 Setup 对 BMC 恢复出厂(见《服务器默认管理IP及账号密码汇总》)。
- 远程
power类命令与生产变更同等管控。
附录:最小应急命令集
说明:每块单独复制;任意一块打到终端的内容都控制在约 80 行内。
A. 现况是否健康
ipmitool mc info
ipmitool chassis status
ipmitool sdr elist | grep -iE 'fail|crit|ncrit|warn| nc | cr | nr ' | head -n 80
ipmitool sel info
ipmitool sel elist | tail -n 80
B. 电源 / 风扇 / 温度
ipmitool sdr type 'Power Supply' | head -n 80
ipmitool sdr type Fan | head -n 80
ipmitool sdr type Temperature | head -n 80
C. 备份并清除 SEL(无现况 Critical 时)
ipmitool sel elist > /tmp/sel_backup_$(date +%F_%H%M%S).txt
SEL_BAK=$(ls -t /tmp/sel_backup_*.txt | head -n 1)
wc -l "$SEL_BAK"
tail -n 80 "$SEL_BAK"
ipmitool sel clear
ipmitool sel info
ipmitool mc reset cold
实操以现场机型与厂商文档为准;OEM 传感器名称可能略有差异。