前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入理解ipmitool:揭秘BMC与IPMI的智能服务器管理(带外管理)

深入理解ipmitool:揭秘BMC与IPMI的智能服务器管理(带外管理)

原创
作者头像
RokasYang
修改2024-01-03 16:35:02
7.9K1
修改2024-01-03 16:35:02
举报
文章被收录于专栏:RokasYangRokasYang

一、前言

1.BMC和IPMI

BMC全称为Baseboard Management Controller,基板管理控制器,是用于监控和管理服务器的专用控器,普通PC没有,服务器产品必配,相比于普通PC,服务器在稳定性、可靠性、安全性、性能、可管理性等方面都要求更高更严酷,这时候就需要BMC来管控服务器。

BMC的主要功能包括:

  • 设备信息管理:记录服务器型号、制造商、日期、各部件生产和技术信息、机箱信息、主板信息等、BMC信息(服务器主机名、IP、BMC固件版本等信息);
  • 服务器状态监控管理:对服务器各个部件(CPU、内存、硬盘、风扇、机框等)的温度、电压等健康状态进行检测;
  • 服务器的远程控制管理:服务器的开关机、重启、维护、固件更新、系统安装等;
  • 维护管理:日志管理、用户管理、BIOS管理、告警管理等。

IPMI全称是Intelligent Platform Management Interface,智能平台管理接口。它是由Intel、DELL、HP及NEC于1998年共同提出,同时,由IPMI论坛创建了IPMI标准依赖。各大厂商的IPMI接口叫法不一样:

厂商

IPMI的不同叫法

戴尔

iDRAC

浪潮

IPMI

惠普

iLO

H3C

HDM

超微

HPMI

联想

XCC

华为

iBMC

IBM

IMM

2.BMC和IPMI的关系

IPMI包含了一个以BMC为主的控制器和其他分布在不同系统模块(被称为“卫星”控制器)的管理控制器,卫星控制器包含了相同的架构透过IPMB(Intelligent Platform Management Bus/Bridge) - 一个I²C(Inter-Integrated Circuit)加强实现的系统接口链接到基板管理控制器(BMC),基板管理控制器(BMC) 也能与远程管理控制协议(RMCP) , 一个在此规格内的特殊有线协议一同被管理,实现带外管理。

一个实地替换单元FRU拥有可替换设备的详细清单(如:供应者ID、制造商),一个感应器资料记录(SDR) 则记录了板上个别感应器提供的属性资料,例如:板上可能包含了感应温度、风扇速、电流的感应器。

如上图,通过IPMI接口发送信号给BMC芯片,达到控制和管理BMC芯片的目的。

3.BMC芯片图

讲了这么多BMC的概念,那么它实际长啥样呢?以笔者正在使用的超微X12-SPL-F主板为例:

在主板的最左上方有一块黑色芯片,这就是BMC芯片,可以看到上面刻着ASPEED厂商名字,型号为AST2600,它是ASPEED的第7代服务器管理处理器。

4.BMC Web管理后台

以超微为例,BMC后台管理视图长这样:

可以在这里远程管理服务器的启停,查看CPU温度、主板温度、风扇转速等:

5.IPMI管理工具

介绍完BMC和IPMI后,接下来介绍如何使用IPMI工具进行远程(带外)管理。IPMI的管理工具有很多,比如IPMITool、IPMICFG、OpenIPMI、FreeIPMI,本文将讲述目前最为主流的IPMITOOL。

二、安装IPMITool

1.各大Linux发行版上安装

发行版

安装命令

Arch Linux

pacman -Sy ipmitool

CentOS/RHEL

yum install ipmitool

Debian/Ubuntu

apt install ipmitool

Gentoo

emerge --ask ipmitool

2.Windows安装

Windows版本点此下载,解压到环境变量路径后在cmd窗口下使用。

MD5 checksums:

代码语言:bash
复制
61e7f8f84df38b62fd167f408673b35f  ipmitool.zip

3.ESXi安装

如果ESXi作为物理机上的宿主机系统,在上面安装ipmitool后在使用ipmitool时无需键入用户名和密码即可系统内直接调用,其它宿主机同理,非宿主机的情况下,则需要键入用户名密码来连接。

点此下载安装包

MD5 checksums:

代码语言:bash
复制
444af4ce1dc68418583dba2926093980 ipmitool-esxi-vib-1.8.11-2.zip
44cb77cc8bd7f969b8e74eb33aec8d71 ipmitool-1.8.11-2-offline_bundle.zip #解压后的内容
173db5b9f205d9c10d9458ff76d8954b  ipmitool-1.8.11-2.x86_64.vib # 解压后的内容

将安装包wget下来,或者scp到ESXi后进行下面的安装步骤。

1)设置软件安装等级

代码语言:bash
复制
esxcli software acceptance set --level=CommunitySupported

2)安装VIB文件

将安装包解压缩到/tmp目录后:

代码语言:bash
复制
esxcli software vib install -v /tmp/ipmitool-1.8.11-2.x86_64.vib #注意这里vib文件要接绝对路径

如果安装失败,加上--no-sig-check选项。

代码语言:bash
复制
esxcli software vib install -v /tmp/ipmitool-1.8.11-2.x86_64.vib --no-sig-check

3)获取安装包信息

代码语言:bash
复制
esxcli software vib get -n ipmitool

4)创建软链接

二进制文件默认安装在/opt/ipmitool/路径,把它软链接到PATH路径下:

代码语言:bash
复制
ln -sf /opt/ipmitool/ipmitool /sbin/ipmitool

-h参数查看帮助:

代码语言:bash
复制
ipmitool -h

5)卸载

如需卸载,执行以下命令:

代码语言:bash
复制
esxcli software vib remove -n ipmitool

三、IPMI用法指南

0.写在前面

以下命令都是在非IPMI所在物理机器上运行,因此需要携带-H、-U、-P参数来指定远程地址和用户名密码;

如果在IPMI物理机的宿主机系统本身运行,这些参数可以省略,比如宿主机是ESXi,后面直接跟命令参数即可:

代码语言:bash
复制
ipmitool sensor

截图中的密码作为临时使用,在你看到这篇文章后已经被删除,因此没有打码用户名密码部分。

作为远程调用过程中,你不想直接在命令行上体现密码,把-P删掉即可,后面不接密码内容,将会在交互中shell中输入密码:

同时,也并不是所有主板都支持BMC管理,是否有BMC芯片,请自行查询主板厂商和型号支持情况,一般在服务器主板常用。ipmitool理解为一个客户端工具就行,不要误解为ipmitool装上后就能控制任意服务器,BMC才是大前提。

比如不支持BMC的主板,使用IPMITool的报错:

1.读取传感器监测值(sensor list)

ipmitool发送信号给BMC芯片,读取主板上的硬件传感器当前值:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sensor list

2.获取指定ID的监测值(sensor get)

1)读取CPU温度

sensor get后面接过滤的id名,比如,只读取CPU温度,可以是:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sensor get "CPU Temp"

2)读取风扇转速

同理,读取风扇转速,接风扇的ID即可,譬如读取风扇1的转速:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sensor get "FAN1"

3)读取内存温度

其中ABCD插槽为一个传感器,可以是:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sensor get "DIMMABCD Temp"

EFGH插槽为一个传感器,可以是:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sensor get "DIMMEFGH Temp"

3.查看底盘状态(chassis status)

使用chassis status来查看底盘状态,其中包括了底盘电源信息,底盘工作状态等:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> chassis status

4.启停服务器(chassis power on/off)

使用此命令,实现真正意义上的远程开关机,开机(硬开机):

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> power on

远程关机(硬关机,直接切断电源):

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> power off

同时还有power soft (软关机,即如同轻按一下开机扭)、power reset (硬重启)、power status (获取当前电源状态)。

5.指定IPMI接口(-I)

涉及到远程连接-H参数时不指定-I的情况下默认使用lan,其中lan对应ipmi 1.5版本,lanplus对应ipmi 2.0版本,当你的密码长度大于16位的时候,请指定2.0版本使用:

代码语言:bash
复制
ipmitool -I lanplus -H <bmc远程服务地址> -U <用户名> -P <密码> <命令参数>

通过wireshark抓包可以看到,使用-H远程连接时,不指定-I或者指定-I lan,都是使用IPMI 1.5版本:

通过RMCP协议传输,UDP端口623。

指定-I lanplus则使用IPMI 2.0版本:

6.查看BMC硬件信息(mc info)

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> mc info

7.显示BMC当前已启用选项的列表(mc getenables)

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> mc getenables

8.启用/禁用BMC选项(mc setenables)

以AST2600的BMC为例,可接的选项如下:

选项

含义

recv_msg_intr

接收消息队列中断

event_msg_intr

事件消息缓冲区完全中断

event_msg

事件消息缓冲区

system_event_log

系统事件日志

oem0

OEM 0

oem1

OEM 1

oem2

OEM 2

启用事件信息缓冲区可以是:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> mc setenables event_msg=on

那么禁用OEM 0可以是:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> mc setenables oem0=off

9.查看/删除系统日志(sel)

1)查看系统日志(sel list/elist)

sel即Sytem Event Log,系统事件日志,set list列举日志内容,按时间顺序从上到下排序:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sel list

elist可以获取更详细的扩展日志信息:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sel elist

同时也可以通过first、last,来指定最前面N条,或最近N条。比如指定最近10条和最早10条,可以是:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sel elist first 10
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sel elist last 10

2)删除所有系统日志(sel clear)

清除所有系统日志,通过sel clear来实现清理:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sel clear

10.查看/设置BMC时间(sel time)

1)显示当前BMC的时间(sel time get)

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sel time get

2)设置BMC的时间(sel time set)

设置的时间格式为:MM/DD/YYYY HH:MM:SS,即月/天/年 时:分:秒,24小时制:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sel time set "MM/DD/YYYY HH:MM:SS"

11.发送事件消息到系统消息日志(event)

可接的选项有:

选项id

含义

日志内容

1

温度过高

Temperature - Upper Critical - Going High

2

电压过低

Voltage Threshold - Lower Critical - Going Low

3

内存ECC错误

Memory - Correctable ECC

发送事件一,可以是:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> event 1

进入BMC Web管理后台,可以看到我们刚刚发送的事件:

通过sel命令也可以获取到日志:

12.打印lan channel信息(lan print)

在IPMI 1.5版本后提出了“Channel Model”的概念,通道分为基于会话和无会话,基于会话的通道在路由IPMI消息之前要先激活会话。

我们是基于局域网来远程管理的,打印lan channel信息可以是:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> lan print

13.设置lan channel的IP地址和掩码(lan set)

首先将IP类型改成静态:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> lan set 1 ipsrc static

再将lan channel 1的IP地址设置为某个IP:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> lan set 1 ipaddr <IP地址>

同理,lan set命令下的参数还有netmask、macaddr、alert、vlan id等,设置掩码、mac地址、告警、vlan等,使用lan set即可查看:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> lan set

以设置24位掩码为例,可以是:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> lan set 1 netmask 255.255.255.0

设置IPv6地址,可通过lan6 set实现:

14.BMC用户管理(user )

1)列举BMC的用户列表(user list)

显示BMC的账号信息,通过user list实现:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> user list

2)修改BMC的用户密码(user set password)

修改用户密码首先要知道用户的数字id是多少,上面的user list即可拿到用户id,之后修改密码,比如Rokas用户的id为3,修改密码则是:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> user set password <用户ID>

键入两次密码后,则修改成功,使用新密码连接成功。

如果不想在交互shell下设置密码,直接在命令行设置,后面接密码即可:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> user set password <用户ID> <密码>

user命令下面还提供设置用户权限、账户名、密码的能力:

3)统计当前用户数量(user summary)

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> user summary

15.设置风扇转速(raw)

超微的风扇模式默认有四种:

这四种模式无法更精细化控制风扇转速,我们可以通过raw命令向bmc发送raw格式的控制命令,从而实现相对精细化的控制风扇。

以下面这个命令为例:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> raw 0x30 0x70 0x66 0x01 0x01 0x02

倒数第二个参数,0x00表示控制CPU ZONE,0x01表示控制IO ZONE;0x00代表系统区域,这个区域一般为负责CPU、GPU的风扇,对应风扇编号为FAN1,FAN2。0x00代表周边设备区域,对应风扇编号为FANA,FANB之类;倒数第一个参数0x02是转速百分比,范围在0x01 - 0x64之间,0x00表示最低转速,0x64表示最高转速。

首先需要把风扇模式调成FULL,如果不设置FULL模式,自定义的转速会被自动转速刷新覆盖,让我们的配置失效。

将风扇模式调成FULL:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> raw 0x30 0x45 0x01 0x01

倒是第一个参数表示FULL模式,模式的取值参考下表:

模式

十六进制取值

Standard Speed

0x00

Full Speed

0x01

Optimal Speed

0x02

Heavy IO

0x03

此时风扇已经全速运行:

或者也可以直接在BMC Web后台管理修改为FULL模式:

通过grafana可以看到风扇转速有了明显的变化趋势:

CPU、内存温度等也有了降低趋势:

接下来设置转速百分比,前面说过,最后一个参数表示风扇转速,范围在0x01 - 0x64之间,那么0x20表示转速百分比为32%:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> raw 0x30 0x70 0x66 0x01 0x00 0x20
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> raw 0x30 0x70 0x66 0x01 0x01 0x20

可以明显看到风扇转速已经下来,BMC web后台依然为FULL模式:

16.读取传感器仓库条目(sdr)

0)和sensor的区别

sdr用于打印传感器仓库中的所有监控项和从传感器读取到的值,sensor用于打印传感器信息。

1)读取CPU温度/风扇转速(sdr get)

通过sdr get 可以读取指定sensor id的传感器数据,比如读取CPU温度:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sdr get "CPU Temp"

同理,读取风扇转速,可以是:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sdr get "FAN1" "FAN2"

2)按照Sensor类型读取(sdr type)

sensor类型可以通过sdr type list命令来列举:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sdr type list

比如读取温度相关的传感器数据:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sdr type Temperature

读取电压相关的传感器数据:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sdr type Voltage

同理,读取风扇相关的传感器数据:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sdr type Fan

其它类型不一一列举。

3)打印sdr信息(sdr info)

输出sdr数据的详细信息:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sdr info

17.读取会话信息(session info)

打印会话的所有信息:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> session info all

将会打印当前会话的权限、用户id、channel、会话类型等。

18.从文件执行命令(exec)

类似于批处理文件或脚本,但是没有逻辑判断,只是从上到下按照顺序执行文件里面的内容。

比如commandlist文件写入三条命令:

代码语言:bash
复制
session info all   # print sessin info
sdr info           # print sdr info
sdr type fan       # print fan speed

'#'号表示注释

使用exec来批量一次性执行:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> exec commandlist

19.提升输出的详细级别(-v)

通过sel elist输出最近一条日志为例,不加-v参数的情况和-v参数的情况:

代码语言:bash
复制
ipmitool -H <bmc远程服务地址> -U <用户名> -P <密码> sel elist last 1
ipmitool -v -H <bmc远程服务地址> -U <用户名> -P <密码> sel elist last 1

可以是-v也可以是-vv、-vvv,5个v都没问题,v越多越详细,甚至可以把整个报文交互的16进制数据显示出来:

20.以逗号分割输出字段(-c)

默认情况下会使用空格或者'|'作为分隔符,-c参数则通过使用逗号(CSV)进行结果分割,以最近一条日志为例:

代码语言:bash
复制
ipmitool -c -H <bmc远程服务地址> -U <用户名> -P <密码> sel elist last 1

这并不会适用于所有命令,比如以表格形式输出的sdr info,-c是没效果的:

四、总结

在本文中,我们深入探讨了 ipmitool 的重要性以及其在服务器管理中的关键作用。我们首先剖析了基板管理控制器(BMC)和 Intelligent Platform Management Interface(IPMI)的关系以及各平台如何正确安装ipmitool

同时,详细介绍了ipmitool的用法,从监控传感器数据、系统日志管理、用户管理、控制风扇转速到远程启停服务器等,使其适用于不同硬件供应商和系统架构,从而为管理员提供了广泛的管理选择,实现真正意义上的带外管理。

总的来说,ipmitool 不仅是一种功能强大的工具,还是服务器管理中不可或缺的一部分。通过本文的介绍,读者可以更全面地理解和运用 ipmitool,提高系统管理的效率和可靠性。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
    • 1.BMC和IPMI
      • 2.BMC和IPMI的关系
        • 3.BMC芯片图
          • 4.BMC Web管理后台
            • 5.IPMI管理工具
            • 二、安装IPMITool
              • 1.各大Linux发行版上安装
                • 2.Windows安装
                  • 3.ESXi安装
                    • 1)设置软件安装等级
                    • 2)安装VIB文件
                    • 3)获取安装包信息
                    • 4)创建软链接
                    • 5)卸载
                • 三、IPMI用法指南
                  • 0.写在前面
                    • 1.读取传感器监测值(sensor list)
                      • 2.获取指定ID的监测值(sensor get)
                        • 1)读取CPU温度
                        • 2)读取风扇转速
                        • 3)读取内存温度
                      • 3.查看底盘状态(chassis status)
                        • 4.启停服务器(chassis power on/off)
                          • 5.指定IPMI接口(-I)
                            • 6.查看BMC硬件信息(mc info)
                              • 7.显示BMC当前已启用选项的列表(mc getenables)
                                • 8.启用/禁用BMC选项(mc setenables)
                                  • 9.查看/删除系统日志(sel)
                                    • 1)查看系统日志(sel list/elist)
                                    • 2)删除所有系统日志(sel clear)
                                  • 10.查看/设置BMC时间(sel time)
                                    • 1)显示当前BMC的时间(sel time get)
                                    • 2)设置BMC的时间(sel time set)
                                  • 11.发送事件消息到系统消息日志(event)
                                    • 12.打印lan channel信息(lan print)
                                      • 13.设置lan channel的IP地址和掩码(lan set)
                                        • 14.BMC用户管理(user )
                                          • 1)列举BMC的用户列表(user list)
                                          • 2)修改BMC的用户密码(user set password)
                                          • 3)统计当前用户数量(user summary)
                                        • 15.设置风扇转速(raw)
                                          • 16.读取传感器仓库条目(sdr)
                                            • 0)和sensor的区别
                                            • 1)读取CPU温度/风扇转速(sdr get)
                                            • 2)按照Sensor类型读取(sdr type)
                                            • 3)打印sdr信息(sdr info)
                                          • 17.读取会话信息(session info)
                                            • 18.从文件执行命令(exec)
                                              • 19.提升输出的详细级别(-v)
                                                • 20.以逗号分割输出字段(-c)
                                                • 四、总结
                                                相关产品与服务
                                                裸金属云服务器
                                                裸金属云服务器(Cloud Bare Metal,CBM)是一种可弹性伸缩的高性能云服务器实例,拥有物理服务器性能无损、资源安全隔离等优点。使用该服务,获取物理服务器的时间将缩短至分钟级。将容量管理及运维工作交给腾讯云,您可专注于业务创新。
                                                领券
                                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档