jzhf0 2014-11-10
如何使用OracleLinux中的硬件故障管理
inOracleLinux
作者:RobertChase
了解、安装、启用和使用IPMI和MCE—OracleLinux中的两个硬件故障管理工具。
2013年9月发布
--------------------------------------------------------------------------------
在本文中,我们将重点讨论OracleLinux中的两个硬件故障管理特性以及这两个特性所使用的对应工具:
想对本文发表评论吗?请将链接发布在Facebook的OTNGarage页面上。有类似文章要分享?请将其发布在Facebook或Twitter上,我们来进行讨论。
智能平台管理接口(IPMI)和ipmitool工具
机器检查异常(MCE)以及mcelog、mce-inject和mce-test工具
以下各节将提供技术概述,介绍一些常见用例,并就如何在OracleLinux中安装和配置这些工具提供指导。还通过几个例子展示了如何使用这些工具捕获和报告重要的硬件信息供日常操作使用。
注:这些工具包括许多调优参数和选项,但是这些内容不在本文的讨论范围内。更多信息,请参见“另请参见”部分。
关于硬件故障管理
现代数据中心管理灵活且不断发展。它的任务是推动业务目标并保证任务关键型负载可用,包括各种硬件和软件解决方案,这些方案可能过于复杂,难以有效管理。为了控制风险和满足苛刻的服务级别承诺,各种硬件和软件特性应运而生,从而可以帮助系统管理员监视系统运行状况、及早发现问题。
这些特性被称作故障管理,由多种解决方案和标准构成,旨在提供能够监视、管理、识别和解决那些困扰系统管理员的问题的工具。与数据中心最佳实践(如冗余和高可用性)相结合时,硬件故障管理特性提供强大的工具,可以提升效率、提高认识、降低风险并支持数据中心系统所担负的苛刻目标。
使用IPMI和ipmitool
IPMI是一个规范,最早于1998年由Intel、Dell、HP和NEC共同制定。其主要目的是提供一个访问系统信息的通用命令接口。它原本是设计成与管理软件无关的;但后来却常与系统特性结合使用。
IPMI独立于操作系统运行,这意味着您可以“带外”方式或是在操作系统启动之前访问系统。这在操作系统或系统出现故障的情况下非常有用,因为您可以使用它提供的工具在传统系统管理功能不可用时收集关键信息。
IPMI中有一些预定义的命令和接口可用于读取温度、电压、风扇速度、电源和网络设置。而且IPMI规范被设计成可扩展的。因此,厂商可以自定义和创建其他的命令和传感器。例如,OracleIntegratedLightsOutManager(OracleILOM)符合IPMI1.5版和2.0版。HP的IntegratedLights-Out(iLO)和Dell的DRAC(DellRemoteAccessController)就是集成了IPMI或符合IPMI的方案。每个解决方案都提供了一组带外支持特性。这正是本规范的设计意图:提供通用的、跨平台的支持,同时让厂商能够定制自己的个性化解决方案的方法。
在OracleLinux中,使用ipmitool实用程序管理和配置支持IPMI规范的设备。从2.4版开始,IPMI支持已成为Linux内核的一部分。ipmitool实用程序提供管理现场可更换部件(FRU)、LAN配置、传感器读取和远程机箱电源控制的功能。下一节将讨论使用ipmitool中特性的安装和使用场景。
安装
第一步是在系统中安装ipmitool。支持IPMI规范的系统中含有IPMI特性。这些系统都含有一个基板管理控制器(BMC),它是IPMI架构的智能核心。使用OpenIPMI和ipmitool,您可以与BMC直接连接并与IPMI规范实现的特性交互。
为了访问服务器的IPMI特性,本地工作站或管理计算机需要位于能访问具有BMC的系统的网络,且必须安装了OpenIPMI和ipmitool工具。要安装这些工具,请转至服务器控制台并键入以下命令:
yuminstallipmitool.x86_64OpenIPMI.x86_64
然后,使用以下命令配置ipmitool以便在系统上使用并启动服务。启动服务后,它会加载IPMI内核并创建一个/dev/ipmi0设备。
chkconfigipmion
serviceipmistart
还可以在其他含有BMC的IPMI系统上安装ipmitool和OpenIPMI软件包,这两个软件包提供配置IPMI设置的选项,我们在以下示例中将看到。
安装、配置并运行这些工具后,我们就可以与控制和监视系统的特性进行交互。我们来看看下面这些利用ipmitool和OracleLinux的IPMI用例。
远程系统访问
IPMI的一个特性是能够通过网络直接与系统相连。这个动作独立于目标系统上安装的任何操作系统,提供了一个非常有用的管理选项。它为您提供了与服务器IPMI接口的直接连接,让您可以远程执行IPMI命令。实际上,您可以使用该选项编写脚本,从而能够在一台管理计算机上控制无数台服务器。
要启用此特性,必须先完成几个步骤,比如设置口令以及为BMC所在服务器的IPMI接口添加IP地址。需要注意的是,许多服务器都有一个单独的远程管理以太网端口。查看您的硬件文档,了解有关具体服务器远程管理的更多信息。
通过网络访问IPMI的第一步是要为BMC所在的系统配置有效的IP地址。以下示例演示了如何使用ipmitool完成这一配置。(注:该示例使用OracleSunFireX4170M2服务器。)要使用ipmitool配置IP地址,请在服务器控制台使用以下命令:
ipmitoollanset1ipaddr192.168.1.120
ipmitoollanset1netmask255.255.255.0
ipmitoollanset1defgwipaddr192.168.1.1
设置完IPMI接口的IP地址之后,需要一个方法进行身份验证。在以下示例中,我们将口令改成root用户,从而允许使用PASSW0rd口令登录。
注意:我们不推荐使用该方法,此处仅用来举例。我们强烈推荐使用安全口令。
首先,我们需要列出用户以获得ID号,然后将使用该ID号更改口令。
[root@test1~]#ipmitooluserlist1
IDNameCallinLinkAuthIPMIMsgChannelPrivLimit
1falsefalsetrueNOACCESS
2rootfalsefalsetrueADMINISTRATOR
[root@test1~]#ipmitoolusersetpassword2PASSW0rd
一旦完成这些配置步骤后,您就可以通过向服务器远程发送chassisstatusIPMI请求来测试配置结果。系统将提示您输入所连接帐户的口令。如果一切配置正确无误,机箱状态将显示在本地命令行上。在您的管理系统命令行上,键入清单1所示的命令:
[root@mgmt-vm~]#ipmitool-Ilan-H192.168.1.120-Uroot-achassisstatus
Password:
SystemPower:on
PowerOverload:false
PowerInterlock:inactive
MainPowerFault:true
PowerControlFault:false
PowerRestorePolicy:always-on
LastPowerEvent:
ChassisIntrusion:inactive
Front-PanelLockout:inactive
DriveFault:false
Cooling/FanFault:false
清单1
ipmitool的命令语法使用选项-I表示LAN接口,使用选项-H识别远程系统的主机地址(192.168.1.120),使用选项-U表示用户名(本例中使用root),使用选项-a提示远程用户口令。后面跟着的是您希望查看状态的命令:chassisstatus。
还可以使用ipmitool远程完成其他任务。上一节中所有的例子都可以使用ipmitool的-I、-H、-U和-a选项远程执行。将多台服务器添加到一个shell脚本中,我们还可以从一个管理系统或工作站快速关闭布满设备的整个机架或信息中心的电源。
以下是远程关闭服务器电源的示例:
[root@rchase-oracle-linux-vm~]#ipmitool-Ilan-H192.168.1.120-Uroot-achassispowercycle
Password:
ChassisPowerControl:Cycle
我们还可以实时查看服务器硬件的具体数据。例如,使用ipmitoolsdr命令可以查看服务器组件的电压和温度。在清单2的示例中,我们查看SunFireX4170M2服务器的输出。每个硬件厂商提供的数据格式可能略有不同,但字段都是类似的。这个例子中的部分输出已被截断。
[root@test1~]#ipmitoolsdr
sys.id|0x02|ok
sys.intsw|0x00|ok
sys.psfail|0x01|ok
sys.tempfail|0x01|ok
sys.fanfail|0x01|ok
mb.t_amb|28degreesC|ok
mb.v_bat|2.78Volts|ok
mb.v_+3v3stby|3.25Volts|ok
mb.v_+3v3|3.29Volts|ok
mb.v_+5v|4.99Volts|ok
mb.v_+12v|12.22Volts|ok
mb.v_-12v|-12.20Volts|ok
mb.v_+2v5core|2.56Volts|ok
mb.v_+1v8core|1.82Volts|ok
mb.v_+1v2core|1.22Volts|ok
fp.t_amb|21degreesC|ok
pdb.t_amb|21degreesC|ok
io.t_amb|19degreesC|ok
清单2
诸如系统温度之类的信息提供了数据中心内部环境条件以及服务器冷却功能的信息。该输出中的数据可以帮助您在问题扩大之前加以识别。例如,关于电压的信息对于检测即将发生的电源故障非常有用,或者可以在服务器脱离直流电源运行时用来监视功率电平。风扇转速可能可能会预示风扇即将发生故障,或者高温读数说明服务器内部有一个潜在热点。我们来看看IPMI提供关键系统状态数据的几个例子。
系统状态特性
ipmitoolchassisstatus命令捕获服务器的一般信息及当前状态。在清单3的例子中,我们可以看到系统已启动,电源策略设置为always-off。我们还看到一个电源发生故障或是电线脱落,因为MainPowerFault为true。测试系统还有另外一个电源,但未连线。
[root@test1~]#ipmitoolchassisstatus
SystemPower:on
PowerOverload:false
PowerInterlock:inactive
MainPowerFault:true
PowerControlFault:false
PowerRestorePolicy:always-off
LastPowerEvent:
ChassisIntrusion:inactive
Front-PanelLockout:inactive
DriveFault:false
Cooling/FanFault:false
清单3
ipmitool还让您可以读取系统的配置数据以及将配置数据写入系统。例如,如果我们想更改清单3中测试服务器的电源策略,可以使用ipmitool来完成。
以下命令显示了如何更改测试服务器上的电源策略配置。记住,清单3中的PowerRestorePolicy设置为always-off。以下命令要将该策略更改为always-on。如果服务器的电源中断,修改后的政策将导致电源恢复时系统重新启动。
[root@test1~]#ipmitoolchassispolicyalways-on
如清单4所示,我们可以再次查看机箱状态,确认配置已更改为always-on的电源恢复策略。
[root@test1~]#ipmitoolchassisstatus
SystemPower:on
PowerOverload:false
PowerInterlock:inactive
MainPowerFault:true
PowerControlFault:false
PowerRestorePolicy:always-on
LastPowerEvent:
ChassisIntrusion:inactive
Front-PanelLockout:inactive
DriveFault:false
Cooling/FanFault:false
清单4
我们还可以查看系统事件日志(SEL)中的服务器硬件日志,如清单5所示。这对于跟踪硬件事件非常有用,可以用来与标准系统日志中的信息对比。
[root@test1~]#ipmitoolsellist
3501|09/29/2007|01:48:21|SystemFirmwareProgress|Systembootinitiated|Asserted
3601|09/29/2007|02:05:57|SystemFirmwareProgress|Motherboardinitialization|Asserted
3701|09/29/2007|02:05:58|SystemFirmwareProgress|Videoinitialization|Asserted
3801|09/29/2007|02:06:08|SystemFirmwareProgress|USBresourceconfiguration|Asserted
3901|09/29/2007|02:06:23|SystemFirmwareProgress|OptionROMinitialization|Asserted
...
清单5
清单6显示了服务器的SEL,有一些重要问题。它显示内存、风扇和CPU有预测性故障。预测性故障是IPMI传感器就潜在硬件问题的通知。
ca6|02/28/2013|06:13:31|Memory#0x39|PredictiveFailureAsserted
ada6|02/28/2013|06:13:32|Memory#0x38|PredictiveFailureAsserted
aea6|02/28/2013|06:13:32|Fan#0x3d|PredictiveFailureAsserted
afa6|02/28/2013|06:13:33|Memory#0x2e|PredictiveFailureAsserted
b0a6|02/28/2013|06:13:34|Fan#0x3b|PredictiveFailureAsserted
b1a6|02/28/2013|06:13:36|Memory#0x30|PredictiveFailureAsserted
b2a6|02/28/2013|06:13:37|Fan#0x3e|PredictiveFailureAsserted
b3a6|02/28/2013|06:13:38|Memory#0x2f|PredictiveFailureAsserted
b4a6|02/28/2013|06:13:39|Memory#0x37|PredictiveFailureAsserted
b5a6|02/28/2013|06:13:40|Processor#0x36|PredictiveFailureAsserted
b6a6|02/28/2013|06:13:40|Fan#0x40|PredictiveFailureAsserted
b7a6|02/28/2013|06:13:43|Memory#0x38|PredictiveFailureAsserted
b8a6|02/28/2013|06:13:43|Fan#0x3d|PredictiveFailureAsserted
b9a6|02/28/2013|06:13:44|Memory#0x2e|PredictiveFailureAsserted
baa6|02/28/2013|06:13:44|Fan#0x3c|PredictiveFailureAsserted
bba6|02/28/2013|06:13:45|Processor#0x2d|PredictiveFailureAsserted
清单6
ipmitool还显示了系统上SEL的大小。在清单7中,我们看到系统事件日志已达到99%。在某些硬件上,这将导致一个错误提示灯亮起,提醒关注服务器。
[root@test1~]#ipmitoolsel
SELInformation
Version:2.0(v1.5,v2compliant)
Entries:909
FreeSpace:72bytes
PercentUsed:99%
LastAddTime:02/26/201300:59:11
LastDelTime:02/26/201300:59:11
Overflow:true
SupportedCmds:'Reserve''GetAllocInfo'
#ofAllocUnits:913
AllocUnitSize:18
#FreeUnits:4
LargestFreeBlk:4
MaxRecordSize:0
清单7
有些服务器的SEL满了以后就无法写入,而其他一些服务器会删除最老的条目。使用ipmitool,您可以用以下命令清空服务器的系统事件日志:
[root@test1~]#ipmitoolselclear
ClearingSEL.Pleaseallowafewsecondstoerase.
然后,可以再次执行ipmitoolsel命令确认日志日志已清空,如清单8所示:
[root@test1~]#ipmitoolsel
SELInformation
Version:2.0(v1.5,v2compliant)
Entries:0
FreeSpace:16434bytes
PercentUsed:0%
LastAddTime:02/26/201301:07:17
LastDelTime:02/26/201301:09:01
Overflow:false
SupportedCmds:'Reserve''GetAllocInfo'
#ofAllocUnits:913
AllocUnitSize:18
#FreeUnits:913
LargestFreeBlk:913
MaxRecordSize:3
清单8
现在使用了0%。此时,根据硬件的不同,如果服务器前端有错误提示灯,它可能会关闭。
硬件审计特性
使用ipmitool,还可以用fru选项获取系统部件号。FRU代表现场可更换部件,是用来描述服务器中发生硬件故障时需要替换的组件、部件号和序列号的术语。此特性对于收集数据中心中需要获得保修服务的硬件系统的信息非常有用。清单9显示了ipmitoolfru命令的输出示例。部分输出已被截断。
[[email protected]]#ipmitoolfru
FRUDeviceDescription:BuiltinFRUDevice(ID0)
BoardMfgDate:SunDec3118:00:001995
BoardProduct:ASSY,SERVPROCESSOR,G1/2
BoardSerial:1762TH1-0617000504
BoardPartNumber:501-6979-03
BoardExtra:50
BoardExtra:G1/2_GRASP
ProductManufacturer:SUNMICROSYSTEMS
ProductName:ILOM
FRUDeviceDescription:sp.net0.fru(ID2)ProductManufacturer:MOTOROLA
ProductName:FASTETHERNETCONTROLLER
ProductPartNumber:MPC8248FCC
ProductSerial:00:14:4F:26:E4:C4
ProductExtra:01
ProductExtra:00:14:4F:26:E4:C4
FRUDeviceDescription:mb.fru(ID4)
ChassisType:RackMountChassis
ChassisPartNumber:541-0250-04
ChassisSerial:0226-0615LHF0DED
BoardMfgDate:SunDec3118:00:001995
BoardProduct:ASSY,MOTHERBOARD,A64
BoardSerial:1762TH1-0618001211
BoardPartNumber:501-7644-01
BoardExtra:01
BoardExtra:A64_MB
ProductManufacturer:SUNMICROSYSTEMS
ProductName:SUNFIREX4170SERVER
ProductPartNumber:602-3222-01
ProductSerial:0624AN1527
清单9
ipmitool特性支持为现场服务人员激活定位器LED。要使用该选项,您必须确定服务器配备何种LED。您可以使用清单10中所示的命令实现此目的:
[root@test1~]#ipmitoolsdrlistgeneric
sys.psfail.led|Generic@20:18.3|ok
sys.tempfail.led|Generic@20:18.4|ok
sys.fanfail.led|Generic@20:18.5|ok
sys.power.led|Generic@20:00.0|ok
sys.locate.led|Generic@20:00.0|ok
sys.alert.led|Generic@20:00.0|ok
bp.power.led|Generic@20:2D.0|ok
bp.locate.led|Generic@20:2D.1|ok
bp.alert.led|Generic@20:2D.2|ok
fp.power.led|Generic@20:18.0|ok
fp.locate.led|Generic@20:18.1|ok
fp.alert.led|Generic@20:18.2|ok
io.hdd0.led|Generic@20:1A.0|ok
io.hdd1.led|Generic@20:1A.1|ok
io.hdd2.led|Generic@20:1A.2|ok
io.hdd3.led|Generic@20:1A.3|ok
p0.led|Generic@20:2D.6|ok
p0.d0.led|Generic@20:1C.0|ok
p0.d1.led|Generic@20:1C.1|ok
p0.d2.led|Generic@20:1C.2|ok
p0.d3.led|Generic@20:1C.3|ok
p1.led|Generic@20:2D.7|ok
p1.d0.led|Generic@20:1C.4|ok
p1.d1.led|Generic@20:1C.5|ok
p1.d2.led|Generic@20:1C.6|ok
p1.d3.led|Generic@20:1C.7|ok
ft0.fm0.led|Generic@20:18.7|ok
ft0.fm1.led|Generic@20:19.1|ok
ft0.fm2.led|Generic@20:19.2|ok
ft1.fm0.led|Generic@20:19.3|ok
ft1.fm1.led|Generic@20:19.4|ok
ft1.fm2.led|Generic@20:19.5|ok
清单10
从清单10的输出可以看到该硬件有一个LED选项sys.locate.led。使用以下命令可以打开定位器LED:
[root@test1~]#ipmitoolsunoemsbledsetsys.locate.ledfast
fp.locate.led|FAST
bp.locate.led|FAST
命令发出后,服务器前端的LED灯将立即打开。可以使用以下命令禁用LED灯。再次执行命令后,指示灯将关闭。
[root@test1~]#ipmitoolsunoemsbledsetsys.locate.ledoff
fp.locate.led|OFF
bp.locate.led|OFF
注意:以下信息适用于开发系统和测试系统,不适用于任何生产系统。
我们还可以使用ipmitool在系统上注入假的硬件事件进行测试。以下命令将生成一个假的服务器硬件温度警告,并将该警告存储到系统事件日志中。请记住,这将显示为一个实际的硬件问题,测试完成后应清除。
[root@test1~]#ipmitoolevent1
SendingSAMPLEevent:Temperature-UpperCritical-GoingHigh
0|Pre-InitTime-stamp|Temperature#0x30|UpperCriticalgoinghigh
命令发出后,我们就可以在ipmitoolsellist输出中看到该错误已存储到服务器的系统事件日志中。
35aa|04/12/2013|22:11:44|Temperature#0x30|UpperCriticalgoinghigh
我们可以生成多种类型的人造硬件故障。ipmievent命令将输出使用信息,如清单11所示。
usage:event<num>
Sendgenerictestevents
1:Temperature-UpperCritical-GoingHigh
2:VoltageThreshold-LowerCritical-GoingLow
3:Memory-CorrectableECC
usage:eventfile<filename>
Readandgenerateeventsfromfile
Usethe'selsave'commandtogeneratefromSEL
usage:event<sensorid><state>[event_dir]
sensorid:SensorIDstringtouseforeventdata
state:Sensorstate,use'list'toseepossiblestatesforsensor
event_dir:assert,deassert[default=assert]
清单11
有关ipmitool的更多信息,请参见本文的“另请参见”部分。
使用mcelog、mce-inject和mce-test检测机器检查错误
可纠正和不可纠正的硬件错误统称为机器检查异常(MCE)。CPU自身能够纠正错误,并通知底层操作系统与CPU或缓存有关的问题。CPU本身还能从某些错误中恢复。OracleLinux可将mcelog用作机器检查的日志子系统。首先,必须使用以下命令在服务器上安装软件包。
yuminstallmcelog.x86_64
servicemcelogdstart
chkconfigmcelogdon
mcelog软件包有两种不同的工作方式,这取决于您所使用的OracleLinux版本。在OracleLinux6.0及更高版本中,这由后台程序控制。在OracleLinux早期版本中,/etc/cron.hourly/mcelog.cron中的cron作业每小时检查MCE并将其保存到/var/log/mcelog中。由后台程序控制mcelog的方法更好一些,因为这样可以更快速地检测到硬件错误并立即记录下来,而不必等待cron作业运行。使用mcelog能检测到总线错误、内存错误和CPU缓存错误之类的错误,如果即将发生硬件故障,可以提前通知。
mcelog能捕获两类错误:已纠正的和未纠正的。已纠正的错误是由CPU处理的事件,可用来识别可能预测更大问题的趋势。
未纠正的错误是关键异常,如果CPU无法恢复,往往会导致系统上的内核错误。这会导致应用程序重置和中断。对于未纠正的错误,mcelog捕获错误的能力取决于错误导致热重启还是硬重启。如果是热重启,信息会被mcelog捕获,恢复后可看到。硬重启会导致数据丢失,而且mcelog可能捕获不到该事件。
清单12中的示例显示的mcelog错误消息显示了CPU1上一个已纠正的错误:
Hardwareevent.Thisisnotasoftwareerror.
MCE0
CPU1BANK2
ADDR1234
TIME1364535025FriMar2901:30:252013MCGstatus:
MCistatus:
Correctederror
Errorenabled
MCi_ADDRregistervalid
MCA:NoError
STATUS9400000000000000MCGSTATUS0
MCGCAPc07APICID1SOCKETID0
CPUIDVendorIntelFamily6Model58
清单12
注意:以下信息适用于开发系统和测试系统,不适用于任何生产系统。
为了进行测试和故障排除,可以使用mce-test包生成假的硬件MCE事件并执行系统测试。本文的“另请参见”部分包含了git信息库和该软件包的项目页面的链接。
mce-test软件包含丰富的默认测试,能模拟真实硬件故障,甚至会导致内核错误。需要执行几个配置步骤才能对系统进行此类测试。
首先,需要安装几个支持软件包才能在测试系统上配置mce-test。使用以下命令:
yuminstallgcc.x86_64gcc-c++.x86_64flex.x86_64dialog.x86_64ras-utils.x86_64git.x86_64
完成后,需要进行一些配置来加载mce-test在执行测试过程中会用到的内核模块。接下来介绍这些步骤。第一个命令加载mce-inject模块,第二个命令将该模块设置为在系统启动时自动加载。
modprobemce-inject
echo"mce-inject">>/etc/modules.conf
要确保模块已加载,请使用以下命令。您将看到以下输出。
[root@test]#modprobe-l|grepmce-inject
kernel/arch/x86/kernel/cpu/mcheck/mce-inject.ko
加载了内核模块之后,应测试mce-inject以确保其正常工作。首先,创建一个文本文件,包含以下用于测试mce-inject的内容。
CPU0BANK1
STATUSCORRECTED
ADDR0xabcd
#
CPU1BANK2
STATUSCORRECTED
ADDR0x1234
创建了这个文本文件之后,您就可以通过向mce-inject提供文本文件路径来进行测试。
mce-inject<filename>
您应看到清单13中/var/log/mcelog所示的输出。
Hardwareevent.Thisisnotasoftwareerror.
MCE0
CPU0BANK1
ADDRabcd
TIME1371752847ThuJun2014:27:272013MCGstatus:
MCistatus:
Correctederror
Errorenabled
MCi_ADDRregistervalid
MCA:NoError
STATUS9400000000000000MCGSTATUS0
MCGCAPc07APICID0SOCKETID0
CPUIDVendorIntelFamily6Model58
Hardwareevent.Thisisnotasoftwareerror.
MCE0
CPU1BANK2
ADDR1234
TIME1371752847ThuJun2014:27:272013MCGstatus:
MCistatus:
Correctederror
Errorenabled
MCi_ADDRregistervalid
MCA:NoError
STATUS9400000000000000MCGSTATUS0
MCGCAPc07APICID1SOCKETID0
CPUIDVendorIntelFamily6Model58
清单13
可以通过文本文件提供输入的方式直接使用mce-inject可执行程序,但对于在系统上进行测试,功能更强的方法是使用mce-test程序。
您将需要通过git下载mce-test套件,如下例所示。
[root@test~]#gitclonehttps://github.com/andikleen/mce-test.git
InitializedemptyGitrepositoryin/root/mce-test/.git/
remote:Countingobjects:1768,done.
remote:Compressingobjects:100%(748/748),done.
remote:Total1768(delta940),reused1757(delta929)Receivingobjects:100%(1768/1768),333.46KiB,done.
Resolvingdeltas:100%(940/940),done.
克隆git信息库之后,您就可以转到mce-test目录执行mcemenu,这会转至mce-test工具主菜单(如图1所示)。
mce-test实用程序的MainMenu
图1—mce-test实用程序的MainMenu
我们要做的第一件事是编译测试套件,所以选择Compile选项编译该测试套件要用到的所有可执行文件。然后可以从Execute菜单中执行测试。测试运行后,可以使用Results菜单查看测试结果。mce-test/doc目录下的文档包含了有关测试以及如何根据需要充分利用该套件的所有信息。
配置好软件包并了解哪些软件包提供您需要的结果后,您就可以生成一些有趣的mcelog异常,如清单14所示,其中有一些有趣的十六进制值。
Hardwareevent.Thisisnotasoftwareerror.
MCE0
CPU0BANK2TSC4c060c5ce0
RIP10:deadbabe
ADDR1234
TIME1364534147FriMar2901:15:472013MCGstatus:RIPVEIPVMCIPMCistatus:
Erroroverflow
Uncorrectederror
Errorenabled
MCi_ADDRregistervalid
MCA:NoError
STATUSf400000000000000MCGSTATUS7
MCGCAPc07APICID0SOCKETID0
CPUIDVendorIntelFamily6Model58
清单14
需要记住的是,测试除了将消息发送给系统控制台并且有可能发送给服务器的硬件系统事件日志外,还会影响/var/log/mcelog和/var/log/messages。只能在开发系统上进行此类测试。有些syslog消息很有用,会表明MCE是假的。但其他消息让那些不知道测试的人看上去觉得很真实,他们可能认为有严重的硬件故障。以下是更明显的syslog条目示例。
Mar2901:15:48testkernel:mce:[HardwareError]:Fakekernelpanic:FatalMachinecheck
总结
本文简要介绍了ipmitool、mcelog、mce-inject和mce-test的基本特性。如本文前面所述,这些工具还有许多可供利用的特性和配置选项。本文旨在提供一个基本介绍和一些常见用例。在接下来的部分,您会发现更多资源以便更好地了解这些工具。本文提到的工具都能在OracleLinux中使用,或者通过所提供的链接和参考轻松安装到OracleLinux上。
另请参见
ipmitool资源:
http://ipmitool.sourceforge.net/
http://www.intel.com/content/www/us/en/servers/ipmi/ipmi-home.html
http://docs.oracle.com/cd/E19469-01/820-6413-13/IPMI_Overview.html
mce-test资源:
https://github.com/andikleen/mce-test
https://github.com/andikleen/mce-test.git
关于作者
RobertChase是OracleLinux产品管理团队的一员。他从1996年开始涉足Linux和开源软件。他曾从事小型嵌入式设备和大型超级计算机级硬件的研究工作。