适配3152raid卡不显示详细信息问题分析
更新时间: 2026/05/28
在Gitcode上查看源码

问题背景

  • 单板类型:NA;
  • 软件版本:NA;
  • 涉及功能:raid;
  • 触发条件:使用mctp协议的raid卡。
  • 业务表现:预期raid卡信息正常显示;实际使用mctp协议的3152,8204都出现无法显示详细信息,os下lspci能够查询到。

问题复现步骤

  1. 使用mctp协议的3152,8204都出现无法显示详细信息。
  2. os下lspci能够查询到详细信息。
  3. 组件storage根据测试结果,9560-8i在tag 1.80以下版本能够正常显示全部信息,1.80以上显示都存在问题。

关键日志信息

bios已经返回正常的bdf号后,继续定位日志,发现mctpd能够添加switch芯片的eid,但是3152该卡的eid还是没有正常添加。 重启OS,发现mctpd其实是有发出 TargetPhyAddr=131请求

定位过程

  1. 根据raid卡适配指导,使用"busctl --user introspect bmc.kepler.mctpd /bmc/kepler/Systems/1/Mctp/MctpBinding"命令,查看bmc.kepler.Systems.Mctp.MctpBinding.PCIe接口下的.BmcEid和.BmcPhyAddr均不为0,bmc.kepler.Systems.Mctp.MctpBinding.SMBus下的.BmcEid和.BmcPhyAddr均为0 。

  2. 通过代码跟踪storage组件mctp_service.lua日志打印提示卡在了[Storage] Get BMC Mctp info failed,但是mctp_lib.get_mctp_pcie_binding部分涉及闭源包。

    lua
    function mctp_service:prepare()
        log:notice('mctp_service:prepare')
        if not self.os_state then
            log:notice('not self.os_state')
            return
        end
        local obj = mctp_lib.get_mctp_pcie_binding(self.bus)
        if not obj then
            log:notice('[Storage] Get BMC Mctp info failed')
            return
        end
        -- 将BMC的mctp信息传递给C库的线程
        sml.mctp_infos.set_bmc_mctp_info(obj.BmcEid, obj.BmcPhyAddr)
        self.mctp_state = true
        log:notice('[Storage] mctp prepare finished. bmc_eid = %s bmc_phy = %s state = %s',
            obj.BmcEid, obj.BmcPhyAddr, self.mctp_state)
    end
  3. 查看日志在/var/log/app.log中有没有如下的打印:

  4. 在/var/log/app.log里面搜索目标raid的SR名称,发现没有加载的日志。

  5. 定位出问题:是卡在下面代码处,设备BDF出现问题,需要在sr手动写死该配置。

    lua
    if self.DevBus == 0 and self.DevDevice == 0 and self.DevFunction == 0 then
  6. bios已经返回正常的bdf号后,继续定位日志,发现mctpd能够添加switch芯片的eid,但是3152该卡的eid还是没有正常添加.

  7. 重启OS,发现mctpd其实是有发出 TargetPhyAddr=131请求 该请求实际是Storage向mctp发起的注册请求,代表软件层识别到此raid卡,但mctp并未在路由中查找到131(从图中mctp_routing_table: del日志可以看到只有13 17 138),可能的原因:

    • 此raid不支持mctp
    • IMU与该raid卡未建链或建链失败
  8. PAE协助排查后,发现是switch板固件屏蔽mctp导致

问题原因

switch板固件屏蔽mctp导致。

解决方案

更换解决问题后的switch固件或替换支持MCTP的switch。