IPMI LAN接口常见问题定位方法和工具使用指导
一、IPMI 工具概述
IPMI(Intelligent Platform Management Interface)是用于服务器管理的标准接口。本文介绍IPMITOOL工具使用及其在故障定位中的常用方法。
二、ipmitool 工具详解
1.1 安装
# RHEL/CentOS
yum install ipmitool -y
# Ubuntu/Debian
apt-get install ipmitool -y
# 检查是否安装成功
which ipmitool2.2 常用命令
# 查看 BMC 版本信息
ipmitool mc info
# 查看 BMC 设备 ID
ipmitool bmc info
# 列出所有传感器
ipmitool sensor list
# 列出所有事件
ipmitool sel list
# 注:命令支持列表可以查看IPMI接口说明,此处不展开介绍。2.3 ipmitool常用参数
# 此处参考 ipmitool version 1.8.18
-h 显示此帮助列表
-V 查看ipmitool版本
-vvv 查看命令执行过程中请求和响应的详细信息
-I lan/lanplus,默认lan
-p port 端口号,默认623
-C 指定加密套件,其中可用套件为1、2、3、17
-L 指定会话权限
-4 Use only IPv4
-6 Use only IPv6
-b 指定目标channel,例如8对应BT
-t 指定IPMB地址,一般为0x20或0x8c
-N 指定超时时间lan[默认2] / lanplus[默认1],单位:秒
-R 指定重试次数举例说明: 假设-R指定重试次数为3, -N指定超时时间为2,那么总共会发3次请求,第一次发送请求的超时时间为2s,第二次是3秒,第三次是4秒。并且这两个参数只在带外生效,带内和带外的重试机制不一样,带内只会重试两次。
三、ipmitool在故障定位中的常用方法
3.1 ipmitool命令处理流程
正常情况下,通过ipmitool工具发送ipmi命令,会通过rmcpd(提供带外ipmi命令支持)或ipmi_core(提供带内ipmi命令支持)将请求转发到其他模块的app,其他模块的app接口函数执行完,返回响应,响应包含相应的完成码。
3.2 命令处理流程图
3.3 完成码说明
| 完成码 | 说明 |
|---|---|
| 0x00 | 命令执行成功 |
| 0xC0 | 节点忙。命令不能完成,所需资源短暂不可用 |
| 0xC1 | 非法命令,通常指不能识别或者不支持的命令 |
| 0xC2 | 对某个特定LUN来说是非法命令 |
| 0xC3 | 执行命令超时 |
| 0xC4 | 空间不够。由于存储空间不够导致命令不能执行 |
| 0xC5 | 存储操作被取消或者存储操作非法 |
| 0xC6 | 请求数据不完整,被截断 |
| 0xC7 | 请求数据长度非法 |
| 0xC8 | 请求数据长度超上限 |
| 0xC9 | 请求中某些参数越界 |
| 0xCA | 不能返回请求所需长度的数据 |
| 0xCB | 所涉及的传感器、数据、记录不存在 |
| 0xCC | 请求数据字段非法 |
| 0xCD | 对特定传感器或者记录所发送的命令非法 |
| 0xCE | 无法提供响应 |
| 0xCF | 不能执行重复命令。不能返回已经返回过的响应数据。事件接收器不使用此完成码 |
| 0xD0 | SDR传感器正处在更新状态,不能提供响应数据 |
| 0xD1 | Firmware中的设备正处在更新状态,不能提供响应数据 |
| 0xD2 | BMC正在初始化或者初始化代理正在处理初始化任务,不能提供响应数据 |
| 0xD3 | 目的地不可达。例如缓冲区满的时候,请求不能发送到目的地址 |
| 0xD4 | 命令不能执行,权限不够 |
| 0xD5 | 命令不能执行,当前状态不支持该命令或者参数 |
| 0xD6 | 参数非法。命令子函数已经禁用或非法 |
| 0xFF | 未明错误 |
| 0x01~7E | 自定义完成码 |
| 其他 | 保留 |
ipmitool的报错简单地分为四类
- 打不开会话(请求发送失败)
- 请求发送给 rmcpd 或 ipmi_core,命令校验失败,直接返回完成码
- 其他app执行失败,返回相应完成码
- 命令执行成功但ipmitool报错
3.3.1 打不开会话
排查步骤:
检查BMC的IP是否能ping通。
现在net_stream.log里会记录ipmi命令是否到达bmc,会话发不通先确认日志里是否有记录ipmi命令,排除网络因素。
检查用户名、密码是否正确。
- 用户名或者密码看上去没问题,但是存在全角和半角字符混合的情况。
- 用户名或者密码中存在windows命令行的特殊字符,如&等,这种情况需要用双引号。
lan检查rmcp服务是否打开,lanplus检查rmcpplus服务是否打开。
未指定-p参数时,默认端口号是 623,检查rmcp或者rmcpplus服务端口是否为默认端口号 623,或者是否与-p指定的端口号一致。
信息都正确,但是认证失败。执行ipmitool的时候加-vvv,发现认证失败。有可能是用户被锁定导致
RAKP 2 message indicates an error : invalid role
Error: Unable to establish IPMI v2 / RMCP+ session3.3.2 请求发送给 rmcpd 或 ipmi_core,命令校验失败,直接返回完成码
请求发送给 rmcpd 或 ipmi_core 后,会做一系列校验,然后再转发给其他模块app。校验失败的可能完成码如下:
0xD6(COMP_CODE_SUBFUNC_INVALID)或0xC1(COMP_CODE_INVALID_CMD) 命令不支持。确认命令无误的话,找到相应功能的看护人确认是否命令删减或修改。
0xC7(COMP_CODE_LEN_INVALID) 命令长度不对。注册IPMI命令时会定义数据区的最大长度和最小长度。
0xD5(COMP_CODE_STATUS_INVALID) 系统锁定。
0xD4(COMP_CODE_PRIVILEGE_LIMITED) 权限不够。可能是用户权限或会话权限不够,也可能是命令受限(如黑名单)导致的。
注:其他模块app也可能失败返回以上完成码。
3.3.3 其他模块app执行失败,返回相应完成码
通常来说,其他模块app在异常场景会有相应的错误记录。所以定位问题时,建议查看debug级别的运行日志或者操作日志,是否有相应的报错记录。
操作日志:
- ipmcget -d op
debug级别的运行日志:
shellmdbctl attach xxx<对应组件名> dloglevel debug dlogtype local升级telnet包,在bmc环境查看对应的运行日志和操作日志。
3.3.4 命令执行成功但IPMITOOL报错
ipmitool 为开源工具。如因版本更新导致报错,建议优先升级至最新稳定版本进行验证。若问题在最新版本中仍存在,可能源于 ipmitool 引入的新特性与当前 IPMI 协议栈的兼容性适配尚未完成。请自行定位问题或到 bmc_core SIG进行技术讨论。
此时可以自行定位或联系 rmcpd 或 ipmi_core 看护人咨询交流。
四、 FAQ
4.1 打开会话请求失败
4.1.1 问题现象
输入命令: ipmitool -h bmc_ip -I lanplus -p 623 -U user_name -P user_psw -C 17 your_command
# 响应信息如下
Error in open session response message : insufficient resource for session
Error: Unable to establish IPMI v2 / RMCP+ session4.1.2 问题分析
使用-vvv命令,可以看到以下信息: 命令返回完成码0x00,说明命令成功,但是在OPEN SESSION RESPONE下面有RMCP+ status有错误信息。
打开运行日志app.log,有如下日志信息:
om ERROR: rmcpplus_protocol.c(482): rc = -3这是常见问题,原因是带外命令最大支持 5 ~ 15 个会话并发处理,一旦超过,则拦截后续命令请求。
用户应该控制自己的请求不要超过最大会话数,避免遇到此问题。
过往有案例,某开发者在代码中一个循环里面一直发送带外ipmi命令,造成并发数超过15个,部分命令无法处理的情况。
无论用户还是开发者,应正确控制并发请求数,等待前面的命令完成后再发送新命令。
4.2 超时问题
4.2.1 问题现象
命令超时可能会出现如下情况的报错(有Unabled to send RAW command的报错,但没有完成码,也就是没有收到响应)。
Unable to send RAW command ([括号里面是发送的命令信息])4.2.2 问题分析
- ipmi命令的请求和响应都可能超时。可通过trace来初步判断。
- 建议执行命令时,加上-R 1的参数,这样设置重试次数为1,方便查看trace信息。
- 再通过参数-N设置超时时间,可以粗略确认下命令执行的大概时间。
- 如果发送命令后,BMC长时间没有收到请求,如果命令无误,请检查网络是否正常。
- 如果收到请求后,BMC长时间没有发送响应。这种情况下,首先确认当前cpu占用率是否过高。
- 如果cpu占用率正常,和对应功能的看护人确认,是否接口函数执行时间比较长。如果无需优化,可修改-N -R参数,确保时间够用。
4.2.3 超时问题排查流程图
排查要点说明
| 阶段 | 检查项 | 排查方法 |
|---|---|---|
| 参数设置 | 重试次数 | 执行时加 -R 1 参数,避免重试干扰trace分析 |
| 超时时间 | 通过 -N 参数设置,可测试命令实际执行时长 | |
| 请求超时 | 命令正确性 | 检查命令格式、参数是否正确 |
| 网络连通性 | ping BMC IP,检查网络延迟和丢包 | |
| 防火墙 | 检查端口 623 是否被拦截 | |
| 响应超时 | CPU占用率 | 使用 top 命令查看 BMC CPU 使用率 |
| 接口执行时间 | 查看日志,确认是否函数执行时间过长 | |
| 并发会话 | 检查是否超过最大并发数(5-15个) |