Linux Kernel 日志排错分析和处置三例

作者:Sender  来源:WaveCN.com  发布日期:2022-12-12  最后修改日期:2022-12-12

一台运行CentOS 7的物理服务器,启用了logwatch服务每天分析系统日志和发送邮件给管理员。

笔者:国际认证信息系统审计师、软考系统分析师

在检查邮件内容时发现系统在启动时,会产生如下的疑似错误信息:

1WARNING:  Kernel Errors Present
2ACPI Error: Method parse/ex ...:  2 Time(s)
3ACPI Error: No handler for  ...:  1 Time(s)
4ACPI Error: Region IPMI (ID ...:  1 Time(s)
5BERT: Boot Error Record Table sup ...:  1 Time(s)
6bnxt_en 0000:3b:00.0: bnxt_re: probe error: RoCE is not sup ...:  1 Time(s)
7bnxt_en 0000:3b:00.1: bnxt_re: probe error: RoCE is not sup ...:  1 Time(s)

服务器本身运行正常,但本着不放过的态度,于是对以上错误信息进行挖掘。

700

一、首先处理ACPI Error。

由于logwatch服务给出的是摘要信息,需要检查日志的具体内容:

[root@SERVER ~]# grep "ACPI Error" /var/log/messages
Dec  6 23:25:01 SERVER kernel: ACPI Error: No handler for Region [SYSI] (ffff90fb6c9dd798) [IPMI] (20130517/evregion-162)
Dec  6 23:25:01 SERVER kernel: ACPI Error: Region IPMI (ID=7) has no handler (20130517/exfldio-305)
Dec  6 23:25:01 SERVER kernel: ACPI Error: Method parse/execution failed [\_SB_.PMI0._GHL] (Node ffff90fb6c97e6f0), AE_NOT_EXIST (20130517/psparse-536)
Dec  6 23:25:01 SERVER kernel: ACPI Error: Method parse/execution failed [\_SB_.PMI0._PMC] (Node ffff90fb6c97e630), AE_NOT_EXIST (20130517/psparse-536)

出错日志显示是IPMI没有ACPI驱动支持。关于ACPI:高级配置和电源管理接口以及IPMI:智能平台管理接口这里不详细解释,简单说就是用于计算机的硬件管理用途。

这个IPMI缺ACPI驱动,属于内核模块问题。于是找到下面这个相关的内核BUG报告:

https://bugzilla.kernel.org/show_bug.cgi?id=46741

按里面的讨论,解决问题的办法有两种:1、简单地禁用acpi_power_meter内核模块;2、调整模块加载顺序,先加载ipmi_si,再加载acpi_power_meter。

觉得应该是后者比较科学,但需要进行测试。测试过程也不复杂,就是先卸载acpi_power_meter和ipmi_is模块,然后按先ipmi_si再acpi_power_meter的顺序加载模块,期间检查系统日志输出,如果加载acpi_power_meter模块时还是出现原来的错误提示,那么就是不支持,只能禁用。

于是开两个PUTTY窗口,一个窗口操作,另一个窗口执行

[root@SERVER log]# tail -f /var/log/messages

持续观察日志输出。下面的测试过程为了方便阅读,已经把日志输出内容整合到测试过程中了:

(1)检查确认当前环境内核模块是否有加载

[root@SERVER log]# lsmod | grep acpi
acpi_power_meter       18104  0 
[root@SERVER log]# lsmod | grep ipmi
ipmi_ssif              29595  0 
ipmi_si                59965  0 
ipmi_devintf           17459  0 
ipmi_msghandler        56728  3 ipmi_ssif,ipmi_devintf,ipmi_si

(2)卸载模块,检查卸载结果,确认已经卸载

[root@SERVER log]# modprobe -r acpi_power_meter
[root@SERVER log]# modprobe -r ipmi_si
[root@SERVER log]# lsmod | grep acpi
[root@SERVER log]# lsmod | grep ipmi
ipmi_ssif              29595  0 
ipmi_devintf           17459  0 
ipmi_msghandler        56728  2 ipmi_ssif,ipmi_devintf

(3)按设定的顺序,先加载模块ipmi_si,观察系统日志输出

[root@SERVER log]# modprobe ipmi_si
日志输出:
Dec 11 18:01:37 SERVER kernel: ipmi_si: IPMI System Interface driver
Dec 11 18:01:37 SERVER kernel: ipmi_si dmi-ipmi-si.0: probing via SMBIOS
Dec 11 18:01:37 SERVER kernel: ipmi_platform: ipmi_si: SMBIOS: io 0xca8 regsize 1 spacing 4 irq 10
Dec 11 18:01:37 SERVER kernel: ipmi_si: Adding SMBIOS-specified kcs state machine
Dec 11 18:01:37 SERVER kernel: ipmi_si: Trying SMBIOS-specified kcs state machine at i/o address 0xca8, slave address 0x20, irq 10
Dec 11 18:01:37 SERVER kernel: ipmi_si dmi-ipmi-si.0: The BMC does not support setting the recv irq bit, compensating, but the BMC needs to be fixed.
Dec 11 18:01:37 SERVER kernel: ipmi_si dmi-ipmi-si.0: Using irq 10
Dec 11 18:01:37 SERVER kernel: ipmi_si dmi-ipmi-si.0: Found new BMC (man_id: 0x0002a2, prod_id: 0x0100, dev_id: 0x20)
Dec 11 18:01:37 SERVER kernel: ipmi_si dmi-ipmi-si.0: IPMI kcs interface initialized
[root@SERVER log]# lsmod | grep ipmi
ipmi_si                59965  0 
ipmi_ssif              29595  0 
ipmi_devintf           17459  0 
ipmi_msghandler        56728  3 ipmi_ssif,ipmi_devintf,ipmi_si

从输出看,正常加载了。

(4)再加载模块acpi_power_meter

[root@SERVER log]# modprobe acpi_power_meter
日志输出:
Dec 11 18:01:57 SERVER kernel: ACPI Error: No handler for Region [SYSI] (ffff9eb7bb09e870) [IPMI] (20130517/evregion-162)
Dec 11 18:01:57 SERVER kernel: ACPI Error: Region IPMI (ID=7) has no handler (20130517/exfldio-305)
Dec 11 18:01:57 SERVER kernel: ACPI Error: Method parse/execution failed [\_SB_.PMI0._GHL] (Node ffff9eb7bb063600), AE_NOT_EXIST (20130517/psparse-536)
Dec 11 18:01:57 SERVER kernel: ACPI Error: Method parse/execution failed [\_SB_.PMI0._PMC] (Node ffff9eb7bb063540), AE_NOT_EXIST (20130517/psparse-536)
Dec 11 18:01:57 SERVER kernel: ACPI Exception: AE_NOT_EXIST, Evaluating _PMC (20130517/power_meter-753)
[root@SERVER log]# lsmod | grep acpi_power_meter
acpi_power_meter       18104  0 

很显然,模块能加载,但错误信息依旧出现,于是继续找资料。

除了停用acpi_power_meter这个内核模块并黑名单之的处理办法外,还应该在加载ipmp_si模块后,加载acpi_ipmi模块,也就是实际上是用acpi_ipmi模块取代acpi_power_meter模块。于是进行测试:

[root@SERVER ~]# modprobe -r acpi_power_meter
[root@SERVER ~]# lsmod | grep acpi
acpi_pad              116316  0
[root@SERVER ~]# modprobe acpi_ipmi
[root@SERVER ~]# lsmod | grep acpi
acpi_ipmi              13066  0
ipmi_msghandler        56728  4 ipmi_ssif,acpi_ipmi,ipmi_devintf,ipmi_si
acpi_pad              116316  0

观察系统日志没有错误输出,估计是这样处理才对。于是:

(1)添加acpi_ipmi模块加载设置,添加后具体设置应如下:

[root@SERVER /]# ll /etc/sysconfig/modules/acpi_ipmi.modules
-rwxr-xr-x. 1 root root 124 12月  7 16:30 /etc/sysconfig/modules/acpi_ipmi.modules
[root@SERVER /]# ls -Z /etc/sysconfig/modules/acpi_ipmi.modules
-rwxr-xr-x. root root system_u:object_r:etc_t:s0       /etc/sysconfig/modules/acpi_ipmi.modules
[root@SERVER /]# cat /etc/sysconfig/modules/acpi_ipmi.modules
#!/bin/sh

/sbin/modinfo -F filename acpi_ipmi > /dev/null 2>&1
if [ $? -eq 0 ]; then
    /sbin/modprobe acpi_ipmi
fi

(2)黑名单acpi_power_meter模块:

[root@SERVER ~]# ll /etc/modprobe.d/acpi_power_meter-backlist.conf
-rw-r--r--. 1 root root 28 12月 11 22:53 /etc/modprobe.d/acpi_power_meter-backlist.conf
[root@SERVER ~]# ls -Z /etc/modprobe.d/acpi_power_meter-backlist.conf
-rw-r--r--. root root system_u:object_r:modules_conf_t:s0 /etc/modprobe.d/acpi_power_meter-backlist.conf
[root@SERVER ~]# cat /etc/modprobe.d/acpi_power_meter-backlist.conf
blacklist acpi_power_meter

后来再查资料,也有说由于只是发行版内核版本没跟上硬件升级,不支持ACPI 4.0规范,但由于不会有实际功能损失,所以也可以直接忽略这一出错信息。

我觉得,是否忽略,实际取决于系统管理员有无洁癖了。

二、BERT是个什么鬼

看看详细的日志信息:

[root@SERVER ~]# grep "BERT" /var/log/messages
Dec  6 23:24:52 KDSYS kernel: ACPI: BERT 000000006fc0e000 00030 (v01 DELL   PE_SC3   00000002 DELL 00000001)
Dec  6 23:24:52 KDSYS kernel: BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter.

然后关键字BERT找到这篇说明:

https://access.redhat.com/solutions/5469081

升级到RHEL 7.9之后,系统启动时就会出现关于BERT的提示信息。BERT是APEI(ACPI Platform Error Interface,ACPI 平台错误接口)的一张表,可以使固件向操作系统报告在操作系统启动之前发生的硬件错误。

这个功能是从RHEL 7.9开始提供的,但默认禁用。更详细的信息可以参考以下核心补丁提交记录:

https://access.redhat.com/labs/rhcb/RHEL-7.9/kernel-3.10.0-1160.el7/patches/blob/0545-acpi-ACPI-APEI-Add-Boot-Error-Record-Table-BERT-supp.patch

如果系统支持BERT,驱动也启用了,就可以查看到以下的虚拟设备文件:

/sys/firmware/acpi/tables/data/BERT

既然如此,那么就启用BERT。方法就是增加内核启动参数bert_enabled,过程是: (1)修改/etc/sysconfig/grub配置文件,对GRUB_CMDLINE_LINUX参数加入bert_enabled; (2)重新生成GRUB启动配置。

修改内容和配置过程如下:

[root@SERVER ~]# grep bert_enabled /etc/sysconfig/grub
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet bert_enabled"

[root@SERVER ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1160.80.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.80.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1160.76.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.76.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.71.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1160.66.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.66.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1160.62.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.62.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-775c5564b74843a4a091c4f21ea74959
Found initrd image: /boot/initramfs-0-rescue-775c5564b74843a4a091c4f21ea74959.img
done

这个问题解决得比较简单。

三、驱动程序探测发现设备不支持RoCE的问题

也是先看看详细的信息:

[root@SERVER ~]# grep "bnxt_en" /var/log/messages
Dec  6 23:24:53 KDSYS kernel: Broadcom NetXtreme-C/E driver bnxt_en v1.10.0
Dec  6 23:24:53 KDSYS kernel: bnxt_en 0000:3b:00.0 eth0: Broadcom BCM57412 NetXtreme-E 10Gb Ethernet found at mem ab210000, node addr b0:26:28:5f:8b:d0
Dec  6 23:24:53 KDSYS kernel: bnxt_en 0000:3b:00.0: 63.008 Gb/s available PCIe bandwidth (8 GT/s x8 link)
Dec  6 23:24:53 KDSYS kernel: bnxt_en 0000:3b:00.1 eth3: Broadcom BCM57412 NetXtreme-E 10Gb Ethernet found at mem ab200000, node addr b0:26:28:5f:8b:d1
Dec  6 23:24:53 KDSYS kernel: bnxt_en 0000:3b:00.1: 63.008 Gb/s available PCIe bandwidth (8 GT/s x8 link)
Dec  6 23:25:01 KDSYS kernel: bnxt_en 0000:3b:00.0: bnxt_re: probe error: RoCE is not supported on this device
Dec  6 23:25:01 KDSYS kernel: bnxt_en 0000:3b:00.1: bnxt_re: probe error: RoCE is not supported on this device
[root@SERVER ~]# lspci | grep 3b
3b:00.0 Ethernet controller: Broadcom Inc. and subsidiaries BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller (rev 01)
3b:00.1 Ethernet controller: Broadcom Inc. and subsidiaries BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller (rev 01)

是和服务器上的万兆网卡有关的情况。

RoCE是RDMA over Converged Ethernet的缩写,而RDMA是Remote Direct Memory Access,远程直接内存访问,一种为了能在主机之间加大网络吞吐量而实现的技术。RoCE即基于以太网实现的 RDMA。

RoCE支持在标准以太网基础设施上使用RDMA技术,但是需要交换机支持无损以太网传输,以及需要服务器使用 RoCE 网卡。

RoCE 与 InfiniBand 技术有相同的软件应用层及传输控制层,仅网络层及以太网链路层存在差异。应用 RoCE 可以使得基于以太网的数据传输能够达到以下效果:

    • 提高数据传输吞吐量。     • 减少网络延时。     • 降低 CPU 负载。

OK,本文不打算在RoCE上继续讲解,这是另一个长篇大论的内容,而且实施起来有前提条件。和驱动相关的信息可以查看:

https://lwn.net/Articles/714390/

既然网络环境不支持部署RoCE,这个信息本质也只是一个探测结果,那么忽略掉就可以了。

总结

最后循例总结一下,我们修改了系统启动时的KERNEL参数,调整加载acpi_ipmi模块并禁用了acpi_power_meter模块。那么重启服务器后再检查日志,相关信息就不再出现了。

本期题图:作品由无界版图AI绘制

https://www.wujiebantu.com

本栏目相关
  •  2024-03-02 网络运维及安全基础:MAC地址安全管理之二
  •  2020-02-27 服务器热加硬盘、热转RAID模式,配合LINUX卷操作实现不重启服务器完成扩容
  •  2023-01-26 Windows服务器折腾安装MegaRAID存储管理器17.05版
  •  2022-02-24 如何安装使用 Broadcom RAID卡命令行管理工具 StorCLI(或称PercCLI)?
  •  2023-02-26 能否用Windows服务器作为路由器?(基本配置篇)
  •  2022-08-02 科幻感满分的终端模拟器eDEX-UI
  •  2022-12-03 VMware vSphere Hypervisor 6.7 手动升级过程实例
  •  2022-10-17 安装 MegaRAID 存储管理器集中监控 DAS 存储状态
  •  2022-05-20 内网DNS服务实现公网域名在内网转换解析
  • 微信订阅号二维码

    本页网址二维码:

    本栏目热门内容
  • Acrobat虚拟PDF打印机执行打印时挂起,解决办法竟然...
  • LINKSYS交换机登录WEB界面显示不正确的解决方法
  • 又一次RAID 5阵列故障记录
  • 解决VMware vSphere ESXi 5.0 Update 1 中虚机不能...
  • 修改CentOS发行信息以绕过Dell服务器BIOS更新和DSET...
  • 解决虚拟化运行的 Windows Server 2003 标准版出现...
  • Windows Server 2008 重命名域和域控制器
  • Intel Nehalem CPU Errata 导致 VMWare ESXi(vSpher...
  • 一次很精神的电脑组装过程记录(但不是自己的电脑)...
  • 解决MySQL Cluster 备份总是失败,提示文件已存在的...
  • MegaCli安装及使用杂记
  • 解决WSUS显示客户端不全的问题
  • 解决 VMWare vSphere 6 客户端无法修改用户密码
  • 解决Windows Server 2008 R2域控制器显示无法连接到...
  • 本站服务器RAID 5阵列双硬盘失效挽救记录
  • 网站数据库从MySQL 5.0升级到5.6的记录
  • 解决MariaDB使用Percona XtraBackup增量备份出错
  • Linux 下的分区调整工具GParted实战
  • DELL PowerEdge 820 报CPU3 INTERNAL ERROR 的解决...
  • 修改arpwatch使通知邮件主题显示IP地址
  • 程序员漫画:如何用8种不同的编程语言去解救公主
  • 解决很好用的多合一即时通信软件pidgin的崩溃问题
  • 解决Samba WINS服务的错误解释问题
  • 使用 GParted 进行虚拟机硬盘分区调整操作
  • 解决Squid代理HTTP时在浏览器出现Content Encoding ...
  • 用Delphi编写使用到ADO的DLL的一些问题
  • 网站简单改版
  • 索尼系列手提电脑备份失败,出现700错误的解决办法
  • Dell R900服务器 BMC firmware incompatible with C...
  • 更多...