IPMI硬件管理
IPMI是一个开放的标准,是用于管理基于 Intel架构服务器的工业标准,由英特尔、HP、NEC、DELL等公司制定。用户可以利用IPMI监视服务器的物理健康特征,如温度、电压、风扇工作状态、电源状态等。 2004年Intel发表了IPMI 2.0的规格,能够向下相容IPMI 1.0、1.5,新增了Console Redirection,并可以通过以太网远程管理服务器。
IPMI主要的功能
- 硬件监控(模块状态、传感器)
- 远程控制(远程开机、关机、重启,Console)
- 日志(硬件运行日志)
- 配置BIOS、RAID
- 列出所有相关硬件等
IPMI 操作方法
今天主要来说一下IPMI具体的使用操作方法,从常规的ipmitool命令行操作到Python脚本控制,基本能涵盖到日常运维所涉及的所有操作。
ipmitool 是一种可用在 linux 系统下的命令行方式的 ipmi 平台管理工具,它支持 ipmi 2.0规范,通过它可以实现获取传感器的信息、显示系统日志内容、网络远程开关机等功能。
命令行操作实例
进入BMC sh(ipmitool交互界面)
$ ipmitool -I open shell
ipmitool> help
Commands:
raw Send a RAW IPMI request and print response
i2c Send an I2C Master Write-Read command and print response
spd Print SPD info from remote I2C device
lan Configure LAN Channels
chassis Get chassis status and set power state
power Shortcut to chassis power commands
event Send pre-defined events to MC
mc Management Controller status and global enables
……
查看开关机状态
$ ipmitool power status
Chassis Power is on
开机/关机
$ ipmitool power on
$ ipmitool power off
查看当前用户
$ ipmitool user list 2
ID Name Callin Link Auth IPMI Msg Channel Priv Limit
1 Administrator true false true ADMINISTRATOR
2 (Empty User) true false false NO ACCESS
……
增加用户
$ ipmitool user set name 2 test01
$ ipmitool user set password 2 password123
查看BMC IP地址
$ ipmitool lan print 2
……
IP Address Source : Static Address
IP Address : 192.168.1.222
Subnet Mask : 255.255.255.0
MAC Address : 38:ea:a7:a9:xx:xx
……
修改BMC IP地址
$ ipmitool lan set 2 ipsrc static
$ ipmitool lan set 2 ipaddr 192.168.1.1
$ ipmitool lan set 2 netmask 255.255.255.0
$ ipmitool lan set 2 defgw 192.168.1.254
查看日志
$ ipmitool sel list
10c | 11/07/2022 | 06:47:24 | Temperature #0x03 | Upper Critical going high | Asserted
10d | 11/07/2022 | 06:47:33 | Temperature #0x03 | Upper Critical going high | Asserted
10e | 11/07/2022 | 06:48:57 | System ACPI Power State #0xd5 | S4/S5: soft-off | Asserted
10f | 11/08/2022 | 00:46:40 | System ACPI Power State #0xd5 | S0/G0: working | Asserted
110 | 11/08/2022 | 01:52:23 | Memory #0x40 | Uncorrectable ECC | Asserted
111 | 11/08/2022 | 01:52:33 | Memory #0x40 | Uncorrectable ECC | Asserted
112 | 11/14/2022 | 06:48:58 | Temperature #0x30 | Upper Critical going high | Asserted
……
$ ipmitool sel help
SEL Commands:
info clear delete list elist get add time save readraw writeraw interpret
查看FRU信息
$ ipmitool fru list
FRU Device Description : Builtin FRU Device (ID 0)
Chassis Type : Rack Mount Chassis
Chassis Serial : *****
Board Mfg Date : Wed Oct 21 20:00:00 2009
Board Mfg : HP
Board Product : ProLiant DL380p Gen8
Board Serial : *****
Board Part Number : 653200-B21
Product Manufacturer : HP
Product Name : ProLiant DL380p Gen8
Product Part Number : 653200-B21
Product Serial : *****
FRU Device Description : BMC CONTROLLER (ID 238)
Product Manufacturer : HPE
Product Name : BMC CONTROLLER
Product Part Number : iLO 4
……
设置为光盘启动
$ ipmitool chassis bootparam set bootflag force_cdrom
bootparam set bootflag <device> [options=...]
Legal devices are:
none : No override
force_pxe : Force PXE boot
force_disk : Force boot from default Hard-drive
force_safe : Force boot from default Hard-drive, request Safe Mode
force_diag : Force boot from Diagnostic Partition
force_cdrom : Force boot from CD/DVD
force_bios : Force boot into BIOS Setup
重启BMC
$ ipmitool mc reset cold
注:以上命令中均在本机执行,如果对网络中其它主机进行操作,需要指定BMC 的IP地址、用户名和密码:
-H hostname Remote host name for LAN interface
-U username Remote session username
-P password Remote session password
Python操作实例
安装所需的软件包(第三方),拿HP iLO示例
$ pip install python-hpilo
导入软件包,获取服务器物理状态
# -*- coding: utf-8 -*-
import pprint
import hpilo
ilo = hpilo.Ilo("192.168.1.1", "admin", "password")
health_summary = ilo.get_embedded_health()['health_at_a_glance']
pprint.pprint(health_summary)
获取IML日志:
# 查看IML(Integrated Management log)日志
logs = ilo.get_server_event_log()
for log in logs:
print(log)
查看Event日志
# 查看 iLO Event log
events = ilo.get_ilo_event_log()
for event in events:
print(event)
主要方法:
方法 | 功能 |
get_embedded_health() | 获取服务器物理状态信息 |
press_pwr_btn() | 按一下电源键 |
hold_pwr_btn() | 长按电源键 |
reset_rib() | 重置ilo |
reset_server() | 重启服务器 |
cold_boot_server() | 冷重启 |
warm_boot_server() | 热重启 |
get_ilo_event_log() | 获取ilo event日志 |
get_server_event_log() | 获取IML日志 |
本文暂时没有评论,来添加一个吧(●'◡'●)