我们经常让服务器中的 DIMM 出现故障,并在 syslog 中出现以下错误:
5 月 7 日 09:15:31 nolcgi303 内核:EDAC k8 MC0:一般总线错误:参与处理器(本地节点响应)、超时(无超时)内存事务类型(通用读取)、内存或 i/o(内存访问) , 缓存级别(通用) 5 月 7 日 09:15:31 nolcgi303 内核:MC0:CE 页 0xa0,偏移量 0x40,颗粒 8,综合症 0xb50d,第 2 行,通道 0,标签“”:k8_edac 5 月 7 日 09:15:31 nolcgi303 内核:MC0:CE - 无可用信息:k8_edac 错误溢出集 5 月 7 日 09:15:31 nolcgi303 内核:EDAC k8 MC0:扩展错误代码:ECC chipkill x4 错误
我们可以使用 HP SmartStart CD 来确定哪个 DIMM 有错误,但这需要停止生产服务器。有没有一种巧妙的方法可以在服务器启动时找出哪个 DIMM 坏了?我们所有的服务器都是运行 RHEL 5 的 HP 硬件。
MC0、第 2 行和通道 0 是重要的。尝试更换 CPU0 上的DIMMA1。
例如,我必须在具有 16 个完全填充的 DIMM 插槽和两个 CPU 的 Linux 服务器中识别出一个坏 DIMM。这些是我在控制台上看到的错误:
我服务器中的坏 DIMM 是 CPU1 上的 DIMMA0。
EDAC 代表错误检测和纠正,记录在http://www.kernel.org/doc/Documentation/edac.txt和 /usr/share/doc/kernel-doc-2.6*/Documentation/drivers/edac/edac .txt 在我的系统 (RHEL5) 上。CE 代表“可纠正错误”,如文档所示,“CE 提供了 DIMM 开始出现故障的早期迹象”。
回到上面我在服务器控制台上看到的 EDAC 错误,MC1(内存控制器 1)表示 CPU1,行 1 在 Linux EDAC 文档中称为 csrow1(芯片选择行 1),通道 0 表示内存通道 0 . 我查看了http://www.kernel.org/doc/Documentation/edac.txt上的图表,发现 csrow1 和 Channel 0 对应于 DIMM_A0(我系统上的 DIMMA0):
(作为另一个例子,如果我在 MC0、csrow4 和通道 1 上看到错误,我会更换 CPU0 上的 DIMMB2。)
当然,我的服务器上实际上有两个称为 DIMMA0 的 DIMM 插槽(每个 CPU 一个),但 MC1 错误再次对应于 CPU1,它在 dmidecode 的输出中的“Bank Locator”下列出:
(在我的工作站上,dmidecode 实际上显示了我的 DIMM 的部件号和序列号,这非常有用。)
除了查看控制台和日志中的错误外,您还可以通过检查 /sys/devices/system/edac 查看每个 MC/CPU、行/csrow 和通道的错误。在我的情况下,错误仅出现在 MC1、csrow1、通道 0 上:
我希望这个示例对任何试图根据 EDAC 错误识别坏 DIMM 的人有所帮助。有关更多信息,我强烈建议您阅读http://www.kernel.org/doc/Documentation/edac.txt上的所有 Linux EDAC 文档
除了使用 EDAC 代码之外,您还可以在机器在线时使用仅限 CLI 的 HP 实用程序来确定这一点。cli 版本比基于 web 的版本更轻量级,并且不需要您打开端口或让守护程序不断运行。
hpasmcli 将为您提供故障模块的磁带和模块编号。比分析 EDAC 快一点。
例子:
失败模块的状态将改变。