ipmitool — IPMI 平台管理工具详细指南
1. 概述
1.1 什么是 IPMI
IPMI(Intelligent Platform Management Interface,智能平台管理接口)是一种开放标准的硬件管理接口规范,允许系统管理员独立于 CPU、BIOS 和操作系统之外对服务器进行监控、日志记录、恢复和资产管理。其核心部件是BMC(Baseboard Management Controller,基板管理控制器),负责自主传感器监控和事件日志记录。
1.2 什么是 ipmitool
ipmitool 是一个命令行实用程序,用于管理和配置支持 IPMI 的设备。它提供了简单易用的命令行界面来与 BMC 交互,可以:
- 读取传感器数据存储库(SDR)并打印传感器值
- 显示系统事件日志(SEL)
- 打印现场可更换单元(FRU)库存信息
- 读取和设置 LAN 配置参数
- 执行远程机箱电源控制
- 配置 Serial-over-LAN(SOL)
- 执行原始 IPMI 命令(风扇控速等)
1.3 版本信息
| 项目 | 信息 |
|---|---|
| **当前版本** | 1.8.16(2015-11-22) |
| **本地 RPM 版本** | 1.8.13-8.el7_1(CentOS/RHEL 7) |
| **许可证** | BSD License(Sun Microsystems, Inc.) |
| **原作者** | Duncan Laurie(Sun Microsystems) |
| **主页** | http://ipmitool.sourceforge.net |
1.4 支持的平台接口
- Linux OpenIPMI — 通过
/dev/ipmi0本地系统接口(默认) - IPMI v1.5 LAN — 基于 RMCP 的远程管理(UDP 623)
- IPMI v2.0 LAN+ (RMCP+) — 加密的远程管理(推荐)
- Intel IMB — Intel IMB 接口
- FreeIPMI — FreeIPMI 库支持(可选编译)
2. 目录结构
ipmitool/
├── IPMItool/
│ └── ipmitool-1.8.16/ # ipmitool 1.8.16 完整源码
│ ├── README # 项目概述、接口说明、使用指南
│ ├── COPYING # BSD 许可证
│ ├── AUTHORS # 作者列表
│ ├── ChangeLog # 版本变更日志
│ ├── configure # 配置脚本
│ ├── configure.ac # Autoconf 配置源文件
│ ├── Makefile.am / Makefile.in # 构建系统文件
│ ├── ipmitool.spec # RPM 打包规格文件
│ ├── lib/ # ★ 核心源码(C 语言)
│ │ ├── ipmi_main.c # 程序入口点、命令行参数解析
│ │ ├── ipmi_chassis.c # 机箱电源控制 (on/off/cycle/reset/status)
│ │ ├── ipmi_sdr.c # 传感器数据存储库 (sdr)
│ │ ├── ipmi_sel.c # 系统事件日志 (sel)
│ │ ├── ipmi_fru.c # 现场可更换单元库存 (fru)
│ │ ├── ipmi_lanp.c # LAN 通道配置 (lan print/set)
│ │ ├── ipmi_sol.c # IPMI v2.0 Serial-over-LAN
│ │ ├── ipmi_isol.c # Intel IPMI v1.5 Serial-over-LAN
│ │ ├── ipmi_tsol.c # Tyan IPMI v1.5 Serial-over-LAN
│ │ ├── ipmi_sensor.c # 详细传感器信息
│ │ ├── ipmi_mc.c # BMC 管理和全局控制
│ │ ├── ipmi_channel.c # 通道信息与配置
│ │ ├── ipmi_user.c # BMC 用户管理
│ │ ├── ipmi_event.c # 事件发送
│ │ ├── ipmi_pef.c # 平台事件过滤
│ │ ├── ipmi_raw.c # 原始 IPMI 命令
│ │ ├── ipmi_dcmi.c # 数据中心管理接口
│ │ ├── ipmi_picmg.c # PICMG/ATCA 扩展
│ │ ├── ipmi_ekanalyzer.c # FRU E-Keying 分析器
│ │ ├── ipmi_firewall.c # 固件防火墙
│ │ ├── ipmi_hpmfwupg.c # PICMG HPM.1 固件升级
│ │ ├── ipmi_fwum.c # Kontron OEM 固件更新管理器
│ │ ├── ipmi_ime.c # Intel ME 固件升级
│ │ ├── ipmi_gendev.c # 通用设备读写
│ │ ├── ipmi_delloem.c # Dell OEM 扩展
│ │ ├── ipmi_kontronoem.c # Kontron OEM 扩展
│ │ ├── ipmi_sunoem.c # Sun OEM 扩展
│ │ ├── ipmi_oem.c # OEM 命令调度
│ │ ├── ipmi_session.c # 会话管理
│ │ ├── ipmi_strings.c # 字符串处理
│ │ ├── ipmi_entity.c # 实体 ID 映射
│ │ ├── ipmi_vita.c # VITA 46.11 扩展
│ │ ├── helper.c # 通用辅助函数
│ │ └── dimm_spd.c # 远程 I2C SPD 读取 (spd)
│ ├── include/ipmitool/ # 头文件(函数声明与数据结构)
│ ├── src/ # 接口插件(open/lan/lanplus/imb)
│ ├── doc/ # 文档
│ │ ├── ipmitool.1 # ★ Man page(完整命令参考)
│ │ └── ipmievd.8 # ipmievd 守护进程 man page
│ ├── contrib/ # 辅助脚本
│ │ ├── README # RRDtool 图表生成说明
│ │ ├── bmclanconf # BMC LAN 配置向导脚本
│ │ ├── bmc-snmp-proxy # BMC SNMP 代理
│ │ ├── collect_data.sh # 传感器数据采集脚本
│ │ ├── create_rrds.sh # RRDtool 数据库创建
│ │ ├── create_webpage.sh # 传感器图表网页生成
│ │ ├── create_webpage_compact.sh # 紧凑版图表网页
│ │ ├── log_bmc.sh # BMC 日志脚本
│ │ ├── exchange-bmc-os-info.* # BMC-OS 信息交换(systemd)
│ │ ├── ipmi.init.basic # 基础 IPMI 初始化脚本
│ │ ├── ipmi.init.redhat # RHEL IPMI 初始化脚本
│ │ ├── ipmievd.init.debian # Debian ipmievd 启动脚本
│ │ ├── ipmievd.init.redhat # RHEL ipmievd 启动脚本
│ │ ├── ipmievd.init.suse # SUSE ipmievd 启动脚本
│ │ └── oem_ibm_sel_map # IBM OEM SEL 事件映射
│ └── control/ # 打包控制文件
│ ├── ipmitool.spec.in # RPM spec 模板
│ ├── pkginfo.in / prototype.in / rpmmacros.in
│ └── rpmrc
├── 7.2 ipmitool/ # ★ CentOS/RHEL 7 预编译 RPM 包
│ ├── ipmitool-1.8.13-8.el7_1.x86_64.rpm
│ └── OpenIPMI-modalias-2.0.19-11.el7.x86_64.rpm
├── IPMItool命令大全.txt # ★ IPMI 风扇控速命令速查表
├── RV Script Generator.txt # ★ FIO + IPMI 风扇控速脚本生成器(Python GUI)
├── ipmitool.docx # ipmitool 使用说明文档
├── 安装ipmitool.docx # ipmitool 安装指南文档
├── HP 控速 脚本问题.docx # HP 服务器风扇控速脚本问题
├── 风扇测速.docx # 风扇测速方法说明
├── trident问题汇总.pdf # Trident 设备相关问题汇总
└── 新增資料夾/ # 参考截图
├── IMG_3449.JPG ~ IMG_3861.JPG
└── WYBR1844.jpg
3. 下载路径
3.1 官方源码下载
IPMITool 官方发布地址为 SourceForge:
# 下载最新版本 (替换版本号)
wget https://sourceforge.net/projects/ipmitool/files/ipmitool/1.8.18/ipmitool-1.8.18.tar.gz
# 历史版本示例
wget https://sourceforge.net/projects/ipmitool/files/ipmitool/1.8.16/ipmitool-1.8.16.tar.gz
wget https://sourceforge.net/projects/ipmitool/files/ipmitool/1.8.13/ipmitool-1.8.13.tar.gz
3.2 Git 仓库
# 官方 Git (SourceForge)
git clone https://git.code.sf.net/p/ipmitool/source ipmitool-source
# GitHub 镜像
git clone https://github.com/ipmitool/ipmitool.git
3.3 YUM / DNF 安装 (RHEL/CentOS/Fedora)
# EPEL 仓库中的 ipmitool
yum install ipmitool -y # CentOS/RHEL 7
dnf install ipmitool -y # CentOS/RHEL 8+ / Fedora
3.4 APT 安装 (Debian/Ubuntu)
apt-get install ipmitool -y
3.5 本地 RPM 包📁 本地下载
提示:点击按钮将打开网络文件夹,点击即可下载
本目录提供 CentOS/RHEL 7 的预编译 RPM 包,可直接使用:
| 文件 | 适用系统 | 版本 |
|---|---|---|
ipmitool-1.8.13-8.el7_1.x86_64.rpm | RHEL/CentOS 7.x (EL7) | 1.8.13 |
OpenIPMI-modalias-2.0.19-11.el7.x86_64.rpm | RHEL/CentOS 7.x (EL7) | 2.0.19 (依赖) |
3.6 本地源码包
| 文件 | 版本 | 格式 |
|---|---|---|
ipmitool-1.8.16.tar.gz | 1.8.16 | gzip |
注意: 本目录包含 ipmitool-1.8.16 完整源码(
IPMItool/ipmitool-1.8.16/)。
4. 安装说明
4.1 RPM 安装(CentOS/RHEL 7)
步骤 1 — 安装依赖包:
cd /path/to/ipmitool/7.2\ ipmitool/
# 先安装 OpenIPMI 内核模块别名(依赖)
rpm -ivh OpenIPMI-modalias-2.0.19-11.el7.x86_64.rpm
# 再安装 ipmitool
rpm -ivh ipmitool-1.8.13-8.el7_1.x86_64.rpm
或使用 yum 自动解决依赖:
yum localinstall ipmitool-1.8.13-8.el7_1.x86_64.rpm
4.2 源码编译安装
步骤 1 — 安装编译依赖:
# CentOS/RHEL
yum install gcc make autoconf automake libtool \
openssl-devel readline-devel ncurses-devel
# Debian/Ubuntu
apt-get install build-essential autoconf automake libtool \
libssl-dev libreadline-dev libncurses5-dev
步骤 2 — 配置与编译:
cd IPMItool/ipmitool-1.8.16
# 配置(使用默认选项)
./configure
# 配置(启用所有功能)
./configure --enable-intf-lan --enable-intf-lanplus \
--enable-intf-open --enable-intf-imb \
--enable-intf-usb --enable-intf-serial
# 编译
make -j$(nproc)
# 安装(需要 root 权限)
make install
configure 常用选项:
| 选项 | 说明 |
|---|---|
| `--prefix=/usr` | 安装路径前缀 |
| `--enable-intf-lan` | 启用 IPMI v1.5 LAN 接口 |
| `--enable-intf-lanplus` | 启用 IPMI v2.0 RMCP+ 接口(需要 OpenSSL) |
| `--enable-intf-open` | 启用 Linux OpenIPMI 接口(默认) |
| `--enable-intf-imb` | 启用 Intel IMB 接口 |
| `--enable-intf-usb` | 启用 USB 接口 |
| `--enable-intf-serial` | 启用串口接口 |
| `--enable-ipmishell` | 启用交互式 IPMI shell |
| `--enable-ipmievd` | 启用 ipmievd 守护进程 |
4.3 内核模块配置
ipmitool 本地访问需要加载 OpenIPMI 内核驱动:
# 加载 IPMI 内核模块
modprobe ipmi_msghandler # IPMI 消息处理器
modprobe ipmi_devintf # IPMI 字符设备接口
modprobe ipmi_si # 通用 IPMI 系统接口驱动
# 检查模块是否加载成功
lsmod | grep ipmi
# 设置开机自动加载
echo "ipmi_msghandler" >> /etc/modules-load.d/ipmi.conf
echo "ipmi_devintf" >> /etc/modules-load.d/ipmi.conf
echo "ipmi_si" >> /etc/modules-load.d/ipmi.conf
设备节点检查:
ls -la /dev/ipmi0
# crw------- 1 root root 253, 0 ... /dev/ipmi0
# 如果设备不存在,查看内核消息
dmesg | grep -i ipmi
配置设备权限(允许非 root 用户使用):
# 创建 udev 规则
echo 'KERNEL=="ipmi0", MODE="0660", GROUP="ipmi"' > /etc/udev/rules.d/99-ipmi.rules
udevadm trigger
4.4 验证安装
# 查看版本
ipmitool -V
# 查看 BMC 信息(本地)
ipmitool mc info
# 查看帮助
ipmitool -h
输出示例:
Device Information
Device ID : 32
Device Revision : 1
Firmware Revision : 1.25
IPMI Version : 2.0
Manufacturer ID : 47488
Manufacturer Name : Unknown
Product ID : 1231 (0x04cf)
Device Available : yes
Provides Device SDRs : yes
5. 命令行选项
5.1 通用选项
ipmitool [<options>] <command> [<sub-commands and sub-options>]
| 选项 | 参数 | 说明 |
|---|---|---|
| `-h` | — | 显示帮助信息 |
| `-V` | — | 显示版本信息 |
| `-v` | — | 详细输出(可重复使用,最多5次) |
| `-c` | — | CSV(逗号分隔)格式输出 |
| `-I` | ` | 选择 IPMI 接口(见第6章) |
| `-H` | `` | 远程 BMC IP 地址或主机名 |
| `-p` | ` | 远程 RMCP UDP 端口(默认 623) |
| `-U` | ` | 远程会话用户名(默认 NULL) |
| `-P` | ` | 远程会话密码(不推荐命令行指定) |
| `-f` | ` | 从文件读取密码 |
| `-a` | — | 交互式提示输入密码 |
| `-E` | — | 从环境变量 `IPMI_PASSWORD` 读取密码 |
| `-L` | ` | 会话权限级别:CALLBACK / USER / OPERATOR / ADMINISTRATOR(默认 ADMINISTRATOR) |
| `-A` | ` | IPMI v1.5 认证类型:NONE / PASSWORD / MD2 / MD5 / OEM |
| `-C` | ` | IPMI v2.0 加密套件(默认 3) |
| `-k` | ` | IPMI v2.0 Kg 密钥(ASCII) |
| `-y` | ` | IPMI v2.0 Kg 密钥(十六进制) |
| `-K` | — | 从环境变量 `IPMI_KGKEY` 读取 Kg 密钥 |
| `-Y` | — | 交互式提示输入 Kg 密钥 |
5.2 高级选项
| 选项 | 参数 | 说明 |
|---|---|---|
| `-d` | ` | 指定 /dev/ipmiN 设备号(默认 0),用于多节点系统 |
| `-l` | ` | 设置目标 LUN(逻辑单元号) |
| `-m` | ` | 设置本地 IPMB 地址(默认 0x20) |
| `-t` | ` | 桥接请求到目标地址 |
| `-b` | ` | 设置桥接目标通道 |
| `-B` | ` | 设置桥接传输通道(双桥接) |
| `-T` | `` | 设置桥接传输地址(双桥接) |
| `-S` | ` | 使用本地 SDR 缓存文件(显著提升性能) |
| `-O` | ` | SEL OEM 事件描述文件 |
| `-o` | ` | 选择 OEM 类型(`-o list` 查看可用类型) |
| `-N` | ` | LAN/LAN+ 消息重传间隔秒数(默认 lan=2, lanplus=1) |
| `-R` | ` | LAN/LAN+ 重试次数(默认 4) |
| `-e` | ` | SOL 会话转义字符(默认 `~`) |
5.3 密码安全建议
优先级(从高到低):
1. -a 交互式输入(不会被进程列表暴露)
2. -f 从受保护的文件读取
3. -E 从环境变量读取(推荐脚本使用)
4. -P 命令行指定(不安全,进程列表中可见)
6. 接口类型
6.1 open — 本地系统接口(默认)
通过 Linux 内核驱动 /dev/ipmi0 直接访问本地 BMC。这是默认接口,不需要网络配置。
ipmitool mc info
# 等价于
ipmitool -I open mc info
适用场景: 本地服务器管理,无需网络配置,速度最快。
6.2 lan — IPMI v1.5 LAN 接口
通过 UDP 623 端口远程访问 BMC,使用 RMCP 协议。认证信息以明文传输。
ipmitool -I lan -H 192.168.1.100 -U admin -P admin mc info
适用场景: 旧版 BMC 或不支持 IPMI v2.0 的设备。
安全警告: 密码明文传输,仅在可信网络中使用。
6.3 lanplus — IPMI v2.0 RMCP+ LAN 接口(推荐)
通过加密的 RMCP+ 协议远程访问 BMC,支持认证、完整性和加密。
ipmitool -I lanplus -H 192.168.1.100 -U admin -P password mc info
# 指定加密套件(3 = RAKP-HMAC-SHA1 + AES-CBC-128)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P password -C 3 mc info
适用场景: 远程服务器管理,推荐用于所有支持 IPMI v2.0 的设备。
6.4 接口对比
| 特性 | open | lan | lanplus |
|---|---|---|---|
| 访问方式 | 本地 `/dev/ipmi0` | 远程 UDP 623 | 远程 UDP 623 |
| IPMI 版本 | — | v1.5 | v2.0 |
| 加密 | 不适用 | 无(明文) | AES-CBC-128 |
| 认证 | 驱动级别 | 明文密码 | RAKP-HMAC-SHA1 |
| 速度 | 最快 | 较快 | 较快 |
| 安全性 | 需 root 权限 | 低 | 高 |
| 推荐场景 | 本地管理 | 隔离管理网络 | 通用远程管理 |
7. 命令详解
7.1 mc / bmc — BMC 管理与状态
# 查看 BMC 信息
ipmitool mc info
# BMC 自检
ipmitool mc selftest
# 查看 BMC 全局使能状态
ipmitool mc getsysinfo
# 重启 BMC(冷复位)
ipmitool mc reset cold
# 热复位 BMC
ipmitool mc reset warm
# 查看 BMC 看门狗
ipmitool mc watchdog
# 关闭 BMC 看门狗
ipmitool mc watchdog off
输出示例:
Device Information
Device ID : 32
Device Revision : 1
Firmware Revision : 1.25
IPMI Version : 2.0
Manufacturer ID : 47488
Manufacturer Name : Unknown
Product ID : 1231 (0x04cf)
Device Available : yes
Provides Device SDRs : yes
Additional Device Support :
Sensor Device
SDR Repository Device
SEL Device
FRU Inventory Device
Chassis Device
7.2 chassis — 机箱电源管理
电源控制
# 查看机箱状态
ipmitool chassis status
# 开机
ipmitool chassis power on
# 关机
ipmitool chassis power off
# 重启(先关后开)
ipmitool chassis power cycle
# 硬复位
ipmitool chassis power reset
# 软关机(通过操作系统)
ipmitool chassis power soft
# 诊断中断
ipmitool chassis power diag
机箱功能
# 查看电源状态
ipmitool chassis status
# 查看开机策略(断电恢复行为)
ipmitool chassis policy list
# 设置断电后自动开机
ipmitool chassis policy always-on
# 设置断电后恢复之前状态
ipmitool chassis policy previous
# 设置断电后保持关机
ipmitool chassis policy always-off
# 查看上次重启原因
ipmitool chassis restart_cause
# 查看累计开机时间
ipmitool chassis poh
# 设置启动设备
ipmitool chassis bootdev pxe # PXE 网络启动
ipmitool chassis bootdev disk # 硬盘启动
ipmitool chassis bootdev cdrom # 光驱启动
ipmitool chassis bootdev bios # BIOS 设置
# 设置启动设备(带持久选项)
ipmitool chassis bootdev pxe options=persistent
# UID 指示灯(定位灯)
ipmitool chassis identify # 闪烁 15 秒(默认)
ipmitool chassis identify 60 # 闪烁 60 秒
ipmitool chassis identify 0 # 关闭
ipmitool chassis identify force # 常亮
7.3 sdr — 传感器数据存储库
# 列出所有传感器(简表)
ipmitool sdr list
# 列出所有传感器(详细信息)
ipmitool sdr elist
# 查看特定类型传感器
ipmitool sdr type list # 查看可用类型
ipmitool sdr type Temperature # 温度传感器
ipmitool sdr type "Fan" # 风扇传感器
ipmitool sdr type "Power Supply" # 电源传感器
# 查看传感器信息
ipmitool sdr info
# 导出 SDR 缓存(用于远程系统加速)
ipmitool sdr dump sdr.cache
# 使用 SDR 缓存
ipmitool -S sdr.cache sdr list
# 查看实体信息
ipmitool sdr entity all
ipmitool sdr entity 7 # 7 = 处理器实体
常用过滤:
# 查看风扇转速
ipmitool sdr | grep RPM
# 查看风扇 Duty
ipmitool sdr | grep Duty
# 查看温度
ipmitool sdr | grep degrees
# 查看电压
ipmitool sdr | grep Volts
# 查看电源
ipmitool sdr | grep PSU
7.4 sensor — 详细传感器读数
# 列出所有传感器详细数据
ipmitool sensor list
# 获取特定传感器
ipmitool sensor get "CPU0_Temp"
ipmitool sensor get "FAN1"
# 设置传感器阈值(需要知道传感器名称)
ipmitool sensor thresh "CPU0_Temp" upper 80.0
ipmitool sensor thresh "CPU0_Temp" lower 10.0
7.5 sel — 系统事件日志
# 查看 SEL 信息
ipmitool sel info
# 列出所有 SEL 事件
ipmitool sel list
# 列出所有 SEL 事件(扩展格式)
ipmitool sel elist
# 查看最近 10 条事件
ipmitool sel list last 10
# 按时间顺序排列
ipmitool sel list first 20
# 清除 SEL
ipmitool sel clear
# 查看 SEL 时间
ipmitool sel time get
# 设置 SEL 时间(与系统同步)
ipmitool sel time set "$(date +'%m/%d/%Y %H:%M:%S')"
# 保存 SEL 到文件
ipmitool sel save sel_backup.txt
7.6 fru — 现场可更换单元库存
# 查看所有 FRU 信息
ipmitool fru print
# 查看特定 FRU 设备
ipmitool fru print 0 # 主板 FRU
# 列出 FRU 清单
ipmitool fru list
# 读取 FRU 原始数据
ipmitool fru read 0 fru_data.bin
# 写入 FRU 数据
ipmitool fru write 0 fru_data.bin
7.7 lan — LAN 通道配置
# 查看当前 LAN 信息(通道1通常是第一个LAN通道)
ipmitool lan print 1
# 查看 LAN 统计信息
ipmitool lan stats get 1
# 设置静态 IP
ipmitool lan set 1 ipsrc static
ipmitool lan set 1 ipaddr 192.168.1.100
ipmitool lan set 1 netmask 255.255.255.0
ipmitool lan set 1 defgw ipaddr 192.168.1.1
# 设置 DHCP
ipmitool lan set 1 ipsrc dhcp
# 设置 BIOS 指定
ipmitool lan set 1 ipsrc bios
# 设置 VLAN
ipmitool lan set 1 vlan id 100
ipmitool lan set 1 vlan on
# 设置认证类型
ipmitool lan set 1 auth USER MD5,PASSWORD
# 查看加密套件
ipmitool lan set 1 cipher_privs
# 设置 SNMP 社区字符串
ipmitool lan set 1 snmp COMMUNITY
7.8 user — BMC 用户管理
# 列出用户
ipmitool user list 1 # 通道 1
# 查看用户详细信息
ipmitool user list 1 2 # 通道 1,用户 ID 2
# 设置用户名
ipmitool user set name 2 newuser
# 设置密码
ipmitool user set password 2 newpassword
# 启用/禁用用户
ipmitool user enable 2
ipmitool user disable 2
# 设置用户权限
ipmitool user priv 2 ADMINISTRATOR 1 # 用户2,通道1,管理员权限
# 测试用户(验证凭据)
ipmitool user test 2 16 password
权限级别:
| 级别 | 值 | 说明 |
|---|---|---|
| CALLBACK | 1 | 最低权限 |
| USER | 2 | 基本只读 |
| OPERATOR | 3 | 可执行控制操作 |
| ADMINISTRATOR | 4 | 完全控制 |
| OEM | 5 | 厂商自定义 |
7.9 channel — 通道管理
# 查看通道信息
ipmitool channel info 1
# 查看认证能力
ipmitool channel authcap 1 4 # 通道1,管理员级别
# 查看用户访问权限
ipmitool channel getaccess 1 2 # 通道1,用户2
# 设置用户访问权限
ipmitool channel setaccess 1 2 callin=on ipmi=on link=on privilege=4
# 查看加密套件
ipmitool channel getciphers ipmi 1
ipmitool channel getciphers sol 1
7.10 sol — Serial-over-LAN(IPMI v2.0)
# 查看 SOL 信息
ipmitool sol info 1
# 设置 SOL 参数
ipmitool sol set enabled true 1
ipmitool sol set baud-rate 115.2 1
# 激活 SOL 会话(进入串口控制台)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P password sol activate
# 停用 SOL
ipmitool sol deactivate
7.11 raw — 原始 IPMI 命令
# 基本格式
ipmitool raw <netfn> <cmd> [data...]
# 示例:获取设备 ID(netfn=6, cmd=1)
ipmitool raw 6 1
# 示例:chassis status(netfn=0, cmd=1)
ipmitool raw 0 1
# 风扇控制(详见第8章)
ipmitool raw 0x30 0xf6 0x01 100 100 0x03
# 带超时和重试的 raw 命令
ipmitool raw -N 5 -R 3 0x30 0xf6 0x01 100 100 0x03
7.12 event — 事件发送
# 查看可用事件类型
ipmitool event help
# 发送测试事件
ipmitool event 1 # 温度传感器 — Upper Critical — Going High
ipmitool event 2 # 电压传感器 — Lower Critical — Going Low
ipmitool event 3 # 内存 — Correctable ECC
# 发送到远程 BMC
ipmitool -I lanplus -H 192.168.1.100 -U admin -P pass event 3
7.13 pef — 平台事件过滤
# 查看 PEF 信息
ipmitool pef info
# 列出 PEF 策略
ipmitool pef list
# 设置 PEF 控制
ipmitool pef control
7.14 dcmi — 数据中心管理接口
# 查看 DCMI 功能
ipmitool dcmi discover
# 读取功耗
ipmitool dcmi power reading
# 设置功耗上限
ipmitool dcmi power set_limit action=Activate limit=500
# 查看温度读数
ipmitool dcmi temperature reading
# 获取资产标签
ipmitool dcmi get asset_tag
7.15 shell — 交互式 IPMI Shell
# 启动交互式 shell
ipmitool shell
# 或指定接口
ipmitool -I open shell
# shell 内部命令示例
ipmitool> chassis status
System Power : off
Power Overload : false
ipmitool> sensor list
CPU0_Temp | 45.000 | degrees C | ok
ipmitool> sel list
1 | 05/27/2026 | 10:00:00 | System Event | OS Boot | Asserted
ipmitool> exit
7.16 exec — 脚本化命令执行
# 创建命令脚本
cat > ipmi_setup.scr << 'EOF'
lan set 1 ipsrc static
lan set 1 ipaddr 10.1.1.10
lan set 1 netmask 255.255.255.0
lan set 1 defgw ipaddr 10.1.1.254
EOF
# 执行脚本
ipmitool -I open exec ipmi_setup.scr
7.17 set — 运行时变量设置
在 shell 和 exec 模式中使用:
set hostname sf-v20z-1 # 设置主机名
set username admin # 设置用户名
set password password # 设置密码
set privlvl ADMINISTRATOR # 设置权限级别
set authtype MD5 # 设置认证类型
set localaddr 0x20 # 设置本地 IPMB 地址
set targetaddr 0x7a # 设置目标地址
set port 623 # 设置 RMCP 端口
set csv enabled # 启用 CSV 输出
set verbose on # 启用详细输出
7.18 OEM 扩展命令
Dell OEM:
ipmitool delloem help
ipmitool delloem mac # 查看 MAC 地址
ipmitool delloem lan # LAN 配置
ipmitool delloem powermonitor # 功耗监控
Kontron OEM:
ipmitool kontronoem info # 查看 OEM 信息
Sun OEM:
ipmitool sunoem help
7.19 其他专用命令
# SPD 信息读取(I2C)
ipmitool spd 0xa0
# FRU E-Keying 分析器
ipmitool ekanalyzer ...
# 固件防火墙
ipmitool firewall info
# HPM 固件升级(PICMG HPM.1)
ipmitool hpm check
ipmitool hpm upgrade firmware.hpm
# Intel ME 固件
ipmitool ime help
# Intel IPMI v1.5 SOL
ipmitool isol ...
# Tyan IPMI v1.5 SOL
ipmitool tsol ...
8. 风扇控制
8.1 读取风扇状态
# 查看所有风扇当前转速
ipmitool sdr | grep RPM
# 查看各风扇 Duty Cycle
ipmitool sdr | grep Duty
# 详细传感器信息
ipmitool sensor list | grep -i fan
8.2 f6 版本 — Seaking / Machamp / Steelix
代码格式:0x30 0xf6 [fan_num] [low_speed] [high_speed] [hysteresis]
# 参数说明
# [fan_num] : 0x01-0x08(风扇编号,需要确认具体设备对应关系)
# [low_speed] : 最低转速(十进制百分比,如 40 表示 40% Duty)
# [high_speed] : 最高转速(十进制百分比)
# [hysteresis] : 延迟时间(默认 0x03 = 3 秒)
# 手动控速 — 固定转速
ipmitool raw 0x30 0xf6 0x01 100 100 0x03 # 风扇1 固定在 100% Duty
ipmitool raw 0x30 0xf6 0x02 50 50 0x03 # 风扇2 固定在 50% Duty
# 手动控速 — 变速范围(20% → 100% 之间自动调节)
ipmitool raw 0x30 0xf6 0x01 0x14 0x64 0x03
# 0x14 = 20, 0x64 = 100
# 恢复自动控速(设置范围为 20-100)
ipmitool raw 0x30 0xf6 0x01 20 100 0x03
适用平台列表(来自 RV Script Generator):
| 平台 | 命令前缀 | 风扇数 | 恢复方式 |
|---|---|---|---|
| Seaking/Machamp | `0x30 0xf6` | 6 (0x01-0x06) | 设置范围 20-100 |
| Steelix | `0x3e 0xf6` | 5 | 设置范围 30-100 |
| Old IPT | `0x30 0xf6` (plain) | 5 | 设置范围 30-100 |
8.3 b7 版本 — Pokemon
代码格式:0x30 0xb7 0x4/0x5 0xff [speed]
# 参数说明
# 0x4 : 设置最小风速
# 0x5 : 设置最大风速
# 0xff : 控制所有风扇
# [speed] : 转速百分比(十进制)
# 将所有风扇固定在 100% Duty
ipmitool raw 0x30 0xb7 0x4 0xff 100 # 设置最低风速 = 100
ipmitool raw 0x30 0xb7 0x5 0xff 100 # 设置最高风速 = 100
# 恢复自动控速 — 需要重启 BMC
ipmitool raw 0x30 0xb7 0x4 0xff 20 # 设置最低 = 20
ipmitool raw 0x30 0xb7 0x5 0xff 100 # 设置最高 = 100
/etc/init.d/ipmistack restart # 重启 BMC 使设置生效
8.4 富士康版本 — Marshadow
代码格式:0x38 0x41 0 [speed] [fan_num]/0xff
# 参数说明
# [fan_num] : 0x01-0x06(单个风扇)或 0xff(所有风扇)
# [speed] : 转速百分比(十进制)
# 所有风扇设置为 80% Duty
ipmitool raw 0x38 0x41 0 80 0xff
# 单个风扇(风扇1)设置为 60%
ipmitool raw 0x38 0x41 0 60 0x01
# 恢复自动控速
ipmitool raw 0x38 0x41 4 0 0xff
8.5 腾讯版本 — Kingler
代码格式:0x2e 0x11 0xa9 0x19 0x00
# 步骤 1 — 切换到手动控速模式
ipmitool raw 0x2e 0x11 0xa9 0x19 0x00 6 1
# 步骤 2 — 设置风扇转速(例如 30% Duty)
ipmitool raw 0x2e 0x11 0xa9 0x19 0x00 7 30
# 恢复自动控速 — 重启 BMC
ipmitool raw 6 2 # 先发送重启命令
ipmitool mc reset cold # 冷复位 BMC
8.6 其他平台
Current IPT(0x3e 0x1f):
# 手动控速(10个风扇,$j 为风扇编号 0-9)
ipmitool raw 0x3e 0x1f $j $fan $fan 0 0xff 0xff
# 恢复自动
ipmitool raw 0x3e 0x1f $j 21 100 0 0xff 0xff
Yunhai / U90G5(0x3e 0x31 + 0x38):
# 先切换模式
ipmitool raw 0x3e 0x2f 0x01
# 设置转速
ipmitool raw 0x3e 0x31 0x00 $fan
ipmitool raw 0x3e 0x38 0x02 0x00 $fan
# 恢复
ipmitool raw 0x3e 0x38 0x01 0x01
Kunlun / 2U42(0x3e 0x03):
# 手动控速(8个风扇,$j 为风扇编号)
ipmitool raw 0x3e 0x03 $j $fan
# 恢复(50% 作为默认值)
ipmitool raw 0x3e 0x03 $j 50
8.7 远程风扇控制
在上述所有 raw 命令前添加远程连接参数:
# f6 版本远程控速示例
ipmitool -I lan -H 192.168.2.1 -U jdroot -P 'JCss%%6!8' \
raw 0x30 0xf6 0x01 100 100 0x03
# b7 版本远程控速示例
ipmitool -I lanplus -H 192.168.2.1 -U admin -P admin \
raw 0x30 0xb7 0x4 0xff 100
ipmitool -I lanplus -H 192.168.2.1 -U admin -P admin \
raw 0x30 0xb7 0x5 0xff 100
8.8 平台速查表
| 平台 | 命令前缀 | 风扇数 | 恢复方式 |
|---|---|---|---|
| **Seaking/Machamp** (f6) | `0x30 0xf6` | 6 | 设置范围 20-100 |
| **Pokemon** (b7) | `0x30 0xb7` | 全部 | BMC 重启 |
| **Marshadow** (Foxconn) | `0x38 0x41` | 6/全部 | `0x38 0x41 4 0 0xff` |
| **Kingler** (Tencent) | `0x2e 0x11` | 全部 | `raw 6 2` + `mc reset cold` |
| **Current IPT** | `0x3e 0x1f` | 10 | 设置 21-100 范围 |
| **Steelix** | `0x3e 0xf6` | 5 | 设置范围 30-100 |
| **Yunhai/U90G5** | `0x3e 0x31+0x38` | 全部 | `0x3e 0x38 0x01 0x01` |
| **Kunlun/2U42** | `0x3e 0x03` | 8 | 设置 50% 默认值 |
| **Old IPT** | `0x30 0xf6` (plain) | 5 | 设置范围 30-100 |
8.9 FSCTool 替代方案
某些系统可以使用 FSCTool 替代 ipmitool 进行风扇控制:
# 手动控速
./FSCTool duty
# 恢复自动控速
./FSCTool -R
9. ipmievd — 事件守护进程
ipmievd 是 ipmitool 附带的守护进程,用于监听 BMC 发送到 SEL 的事件并将消息记录到 syslog。
9.1 启动
# 基本启动(后台运行,监听 OpenIPMI 设备)
ipmievd
# 前台运行(调试用)
ipmievd -n
# 详细输出
ipmievd -v
# 指定接口
ipmievd -I open
9.2 测试事件发送
# 发送测试事件到远程 BMC
ipmitool -I lan -H <bmc_ip> -U admin -P pass event 1 # 温度告警
ipmitool -I lan -H <bmc_ip> -U admin -P pass event 2 # 电压告警
ipmitool -I lan -H <bmc_ip> -U admin -P pass event 3 # ECC 错误
# 查看 ipmievd 接收的日志
tail /var/log/messages
9.3 syslog 集成
ipmievd 使用 LOG_LOCAL4 设施将事件写入 syslog:
ipmievd: Temperature Sensor 30 - Upper Critical - going high
ipmievd: Voltage Sensor 60 - Lower Critical - going low
ipmievd: Memory Sensor 01 - Correctable ECC
10. 使用示例
10.1 电源控制
# 查看电源状态
ipmitool chassis status
# 远程开机
ipmitool -I lanplus -H 192.168.1.100 -U admin -P pass chassis power on
# 强制重启
ipmitool -I lanplus -H 192.168.1.100 -U admin -P pass chassis power cycle
10.2 传感器监控
# 一键检查所有传感器状态
ipmitool sdr elist | grep -v "ok$"
# 查看 CPU 温度
ipmitool sdr type Temperature
# 导出传感器数据为 CSV
ipmitool -c sdr list > sensors.csv
# 持续监控(每5秒)
watch -n 5 'ipmitool sdr | grep -E "degrees|RPM"'
10.3 SEL 日志
# 查看最近事件并格式化
ipmitool sel elist | tail -20
# 检查是否有严重错误
ipmitool sel list | grep -iE "critical|error|fail"
# 清理旧日志
ipmitool sel clear
# 定时备份 SEL
ipmitool sel save sel_$(date +%Y%m%d_%H%M%S).log
10.4 FRU 信息
# 查看完整硬件库存
ipmitool fru print
# 查看特定信息
ipmitool fru print | grep -E "Product|Serial|Part"
10.5 LAN 配置
# 配置静态 IP
ipmitool lan set 1 ipsrc static
ipmitool lan set 1 ipaddr 192.168.0.100
ipmitool lan set 1 netmask 255.255.255.0
ipmitool lan set 1 defgw ipaddr 192.168.0.1
# 验证配置
ipmitool lan print 1
# 配置 DHCP
ipmitool lan set 1 ipsrc dhcp
10.6 用户管理
# 添加管理员用户
ipmitool user set name 3 monitor
ipmitool user set password 3 MyP@ss123
ipmitool user priv 3 ADMINISTRATOR 1
ipmitool user enable 3
# 查看所有用户
ipmitool user list 1
# 删除用户(禁用)
ipmitool user disable 2
10.7 风扇控制完整流程
# 1. 查看当前风扇状态
ipmitool sdr | grep -E "RPM|Duty"
# 2. 手动控速到 100%(以 Seaking/f6 为例)
for i in 1 2 3 4 5 6; do
ipmitool raw 0x30 0xf6 0x0$i 100 100 0x03
done
# 3. 确认转速已变化
sleep 5
ipmitool sdr | grep RPM
# 4. 恢复自动控速
for i in 1 2 3 4 5 6; do
ipmitool raw 0x30 0xf6 0x0$i 20 100 0x03
done
10.8 远程管理
# 设置环境变量(避免命令行暴露密码)
export IPMI_PASSWORD="my_password"
# 远程批量操作
for host in 192.168.1.101 192.168.1.102 192.168.1.103; do
echo "=== Checking $host ==="
ipmitool -I lanplus -H $host -U admin -E chassis status
ipmitool -I lanplus -H $host -U admin -E sdr | grep degrees
done
10.9 脚本化
# 创建自动化脚本
cat > bmc_monitor.sh << 'SCRIPT'
#!/bin/bash
IPMI_CMD="ipmitool -I lanplus -H 192.168.1.100 -U admin -a"
echo "=== BMC Monitor Report ==="
echo "Time: $(date)"
echo ""
echo "--- Power Status ---"
$IPMI_CMD chassis status | grep "System Power"
echo ""
echo "--- Sensors ---"
$IPMI_CMD sdr | grep -E "degrees|RPM|Volts"
echo ""
echo "--- Recent Events ---"
$IPMI_CMD sel elist | tail -5
SCRIPT
chmod +x bmc_monitor.sh
./bmc_monitor.sh
10.10 交互模式
# 进入交互式 shell
ipmitool -I open shell
# 在 shell 中执行命令
ipmitool> chassis status
ipmitool> sensor list | head -20
ipmitool> sel elist last 5
ipmitool> fru print
ipmitool> user list 1
ipmitool> exit
11. 高级用法
11.1 桥接命令
单级桥接 — 通过 BMC 访问 IPMB 上的设备:
# 格式
ipmitool -m <local_addr> -t <target_addr> <command>
# 示例:通过本地 BMC (0x94) 访问 IPMB 上的设备 (0x9a)
ipmitool -m 0x94 -t 0x9a mc selftest
ipmitool -m 0x94 -t 0x9a raw 6 4
双级桥接 — 通过中间 BMC 访问更远的设备:
ipmitool -H <ip> -U <user> -P <pass> \
-B 0 -T 0x8a -m 0x94 -t 0x7a -b 7 \
mc selftest
参数说明:
| 参数 | 含义 | 示例值 |
|---|---|---|
| `-B` | 传输通道(第一级桥接) | 0 |
| `-T` | 传输目标地址(中间 BMC) | 0x8a |
| `-m` | 源地址(本地 BMC IPMB 地址) | 0x94 |
| `-t` | 远程目标地址 | 0x7a |
| `-b` | 远程通道(目标 BMC 的 IPMB-L) | 7 |
11.2 SDR 缓存
远程系统使用本地 SDR 缓存可大幅提升性能:
# 首次从远程 BMC 导出 SDR 缓存
ipmitool -I lanplus -H 192.168.1.100 -U admin -P pass sdr dump sdr_cache.bin
# 后续使用缓存(不再从 BMC 读取 SDR 结构)
ipmitool -I lanplus -H 192.168.1.100 -U admin -P pass -S sdr_cache.bin sdr list
ipmitool -I lanplus -H 192.168.1.100 -U admin -P pass -S sdr_cache.bin sensor list
11.3 CSV 输出
# CSV 格式便于脚本解析
ipmitool -c sdr list
ipmitool -c sensor list
ipmitool -c sel list
ipmitool -c fru print
11.4 OEM 类型支持
# 查看可用的 OEM 类型
ipmitool -o list
# 常见 OEM 类型
ipmitool -o intelplus ... # Intel 增强型
ipmitool -o supermicro ... # Supermicro
11.5 多 BMC 环境
# N 号设备(多节点/多 BMC 系统)
ipmitool -d 0 mc info # BMC 0
ipmitool -d 1 mc info # BMC 1
12. 故障排查
12.1 设备节点问题
# 症状:无法打开 /dev/ipmi0
# 检查内核模块
lsmod | grep ipmi
# 加载缺失模块
modprobe ipmi_msghandler ipmi_devintf ipmi_si
# 检查设备
ls -la /dev/ipmi*
dmesg | grep -i ipmi
# 手动创建设备(如果模块已加载但无设备节点)
mknod /dev/ipmi0 c 253 0
12.2 LAN 连接问题
# 检查端口连通性
nc -zu 192.168.1.100 623
# 增加重试和超时
ipmitool -I lanplus -H 192.168.1.100 -U admin -P pass -N 5 -R 10 mc info
# 检查网卡是否共享管理网络
# 某些 BMC 使用共享 NIC,需要检查 VLAN、Bonding 等设置
12.3 认证问题
# 确认用户名和密码
ipmitool user list 1
# 密码为空时显式指定
ipmitool -I lanplus -H 192.168.1.100 -U "" -P "" mc info
# IPMI v1.5 认证类型尝试
ipmitool -I lan -H 192.168.1.100 -U admin -P pass -A NONE mc info
ipmitool -I lan -H 192.168.1.100 -U admin -P pass -A PASSWORD mc info
ipmitool -I lan -H 192.168.1.100 -U admin -P pass -A MD5 mc info
12.4 安全建议
- 优先使用 lanplus(IPMI v2.0)而非 lan(IPMI v1.5)
- 不要在命令行中暴露密码,使用
-a、-f或-E选项 - 专用管理网络,将 IPMI 接口隔离到独立的物理或 VLAN 网络
- 强密码策略,IPMI v1.5 最大 16 字符,v2.0 最大 20 字符
- 禁用不需要的用户,
ipmitool user disable - 定期审计 SEL,检查异常登录和操作
13. 相关文档
| 文档 | 路径 | 说明 |
|---|---|---|
| ipmitool Man Page | `IPMItool/ipmitool-1.8.16/doc/ipmitool.1` | 完整命令参考 |
| ipmitool README | `IPMItool/ipmitool-1.8.16/README` | 架构、接口说明 |
| ipmitool 使用说明 | `ipmitool.docx` | ipmitool 详细使用文档 |
| 安装 ipmitool | `安装ipmitool.docx` | 安装步骤指南 |
外部资源:
| 资源 | URL |
|---|---|
| ipmitool 主页 | http://ipmitool.sourceforge.net |
| ipmitool Man Page | http://ipmitool.sourceforge.net/manpage.html |
| IPMI 规范 | http://www.intel.com/design/servers/ipmi/spec.htm |
| OpenIPMI 项目 | http://openipmi.sourceforge.net |
| ipmitool GitHub | https://github.com/ipmitool/ipmitool |
| ipmitool (LCA 2004) | http://ipmitool.sourceforge.net/lca2004_ipmitool.pdf |
14. 版本历史
| 版本 | 日期 | 变更 |
|---|---|---|
| 1.8.16 | 2015-11-22 | 安全修复(Coverity扫描),用户管理和通道函数重构,多 OEM 扩展改进 |
| 1.8.15 | — | — |
| 1.8.14 | — | — |
| 1.8.13 | 2015-03-24 | EL7 RPM 发布版本(本地包) |
维护者: Charles Qin 适用范围: CentOS 7 / RHEL 7 / Debian / Ubuntu 支持的 BMC 平台: Seaking / Machamp / Pokemon / Marshadow / Kingler / Steelix / IPT / Yunhai / U90G5 / Kunlun / 2U42 参考: 本文档整合了 ipmitool-1.8.16 源码、man page、IPMItool命令大全.txt、RV Script Generator 以及多个项目参考文档