storage
更新时间: 2025/12/31
在Gitcode上查看源码

Storage 存储管理服务

版本信息

项目内容
组件版本1.100.41
首发版本openUBMC 1.0.0
文档作者openUBMC
最后更新2026-05-29

1. 组件概述

1.1 组件简介

Storage(存储管理服务)是 openUBMC 系统中的存储组件管理模块,负责管理 RAID 控制器、物理硬盘、逻辑盘、磁盘阵列和超级电容(BBU)等存储资源。支持通过 I2C(博通 RAID 卡)和 MCTP(1880/PMC RAID 卡)两种通信方式实现带外管理,同时支持通过 BMA(Board Management Agent)获取带内信息。

1.2 解决什么问题

Storage 组件为用户提供了完整的 RAID 卡管理能力,包括 RAID 控制器状态监控与配置、物理盘健康检测与操作、逻辑盘的创建/删除/属性设置、磁盘阵列管理、BBU 状态监控等功能。通过 Storage 组件,用户可以在不依赖主机操作系统的情况下完成存储资源的全生命周期管理。

1.3 核心功能

  • 控制器管理:支持 RAID 控制器信息获取、工作模式设置、回拷/JBOD/一致性校验等高级特性配置
  • 硬盘管理:支持物理盘信息获取、健康检测、热备设置、定位灯控制、固件状态管理等
  • 逻辑盘管理:支持逻辑盘创建(新建阵列/已有阵列/CacheCade)、删除、属性设置(读写策略/IO策略/访问策略等)
  • 阵列管理:支持磁盘阵列信息查询,包括容量、RAID类型、关联逻辑盘和物理盘
  • BBU 管理:支持超级电容状态监控、健康检测、温度监测
  • PHY 误码诊断:支持 SAS PHY 层误码采集、分析和告警
  • 配置导入导出:支持存储配置的备份和恢复
  • IPMI 命令:支持 55 个 OEM IPMI 命令,覆盖控制器/逻辑盘/物理盘/阵列的查询与设置

1.4 关键术语表

术语解释
SMLStorage Management Library,RAID 卡管理库,通过 I2C 或 MCTP 与 RAID 卡通信
BMABoard Management Agent,主机侧代理,将主机端信息通过带内通道推送给 BMC
PDPhysical Drive,RAID 控制器下属的轻量物理盘对象,通过 SML 操作物理盘
Drive统一物理盘模型,RAID 盘与 NVMe 盘共用,承载完整的物理盘属性和操作
Volume逻辑盘对象,代表 RAID 控制器创建的逻辑磁盘
DiskArray磁盘阵列对象,代表 RAID 控制器下的磁盘组
CacheCadeSSD 缓存加速技术,使用 SSD 作为机械硬盘的读写缓存
JBODJust a Bunch Of Disks,磁盘直通模式,不经过 RAID 控制器
BBUBattery Backup Unit,超级电容/电池备份单元,用于断电时保护缓存数据
一致性校验定期校验逻辑盘数据一致性的功能,支持自动修复
回拷Copyback,当热备盘替换故障盘后,自动将数据从热备盘拷贝到新换上的盘

1.5 外部交互边界图

说明

北向接口(Redfish/WEB/SNMP/CLI)由 rackmount 仓通过 D-Bus 资源协作接口调用 Storage 组件
IPMI 接口由 ipmi_core 组件路由,Storage 向 ipmi_core 注册处理函数,ipmi_core 调用对应注册函数执行命令
BMA 带内数据由 host_agent 组件直接推送给 Storage 组件
Storage 通过 hwproxy 仓管理 I2C 通道,通过 libmgmt_protocol 仓(含 SML 库)与 RAID 卡通信

2. API 使用说明与示例

2.1 存储配置

bash
busctl --user introspect bmc.kepler.storage /bmc/kepler/Systems/1/Storage/StorageConfig bmc.kepler.Systems.Storage.StorageConfig
NAME                                   TYPE      SIGNATURE RESULT/VALUE          FLAGS
.DiskPartitionUsagePercentageThreshold property  u         100                   emits-change writable
.StorageConfigReady                    property  y         0x01                  emits-change
.VolumesStateAbnormal                  property  y         0                     emits-change

功能说明

管理存储组件全局配置状态,用于标识所有控制器的就绪状态和逻辑盘状态。

属性内容
接口名bmc.kepler.Systems.Storage.StorageConfig
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明

属性参数说明
参数名方向类型描述取值范围
StorageConfigReady输出uint8标志所有控制器的状态,用于配置导入导出场景0x01=就绪
VolumesStateAbnormal输出uint8是否存在状态异常的逻辑盘0=否,1=是
DiskPartitionUsagePercentageThreshold输入/输出uint32磁盘分区占用率告警阈值百分比,默认100

返回值与异常

返回值含义触发条件处理建议
0成功正常执行完成
非 0失败权限不足或状态异常检查组件状态

应用场景

  • 配置导入导出时检查控制器就绪状态
  • 监控逻辑盘状态异常告警
  • 设置磁盘分区占用率告警阈值

调试示例

bash
# 查看存储配置状态
busctl --user get-property bmc.kepler.storage /bmc/kepler/Systems/1/Storage/StorageConfig \
    bmc.kepler.Systems.Storage.StorageConfig StorageConfigReady

2.2 PHY 误码诊断

bash
busctl --user introspect bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Diagnose bmc.kepler.Systems.Storage.Diagnose
NAME                             TYPE      SIGNATURE RESULT/VALUE FLAGS
.MaxPhyErrorLogFileRotationCount property  u         10           emits-change writable
.PhyErrorEnabled                 property  b         false        emits-change writable
.PhyErrorInterval                property  u         1800         emits-change writable
.PhyErrorMaxRecord               property  u         20           emits-change writable
.PhyErrorSelUnlimitFlag          property  b         false        emits-change writable
.PhyErrorThreshold               property  u         100          emits-change writable

功能说明

提供 SAS PHY 物理层误码诊断功能,支持配置采集间隔、记录条数、告警阈值等参数。

属性内容
接口名bmc.kepler.Systems.Storage.Diagnose
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明

属性参数说明
参数名方向类型描述取值范围
PhyErrorEnabled输入/输出boolPHY 误码诊断使能true/false
PhyErrorInterval输入/输出uint32数据采集时间间隔秒,默认1800
PhyErrorMaxRecord输入/输出uint32单个 OS 启动周期内最大记录条数默认20
PhyErrorThreshold输入/输出uint32单位时间增长过快的判断门限值dwordcount/s,默认100
MaxPhyErrorLogFileRotationCount输入/输出uint32循环记录的最大文件数默认10
PhyErrorSelUnlimitFlag输入/输出bool是否允许产生多个 SEL 告警事件默认false

返回值与异常

返回值含义触发条件处理建议
0成功正常执行完成
非 0失败参数非法检查参数取值范围

应用场景

  • SAS PHY 误码采集与分析
  • PHY 层链路质量监控
  • 物理层故障预警

调试示例

bash
# 启用 PHY 误码诊断
busctl --user set-property bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Diagnose \
    bmc.kepler.Systems.Storage.Diagnose PhyErrorEnabled b true

2.3 控制器管理

bash
busctl --user introspect bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Controllers/0 bmc.kepler.Systems.Storage.Controller
NAME                                  TYPE      SIGNATURE RESULT/VALUE    FLAGS
.ClearForeignConfig                   method    a{ss}     -               -
.ImportForeignConfig                  method    a{ss}     -               -
.RestoreDefaultSettings               method    a{ss}     -               -
.SetBootDevices                       method    a{ss}ss   -               -
.SetCopybackState                     method    a{ss}y    -               -
.SetJBODState                         method    a{ss}y    -               -
.SetSmarterCopyBackState              method    a{ss}y    -               -
.SetWorkMode                          method    a{ss}yy   -               -
.DumpLog                              method    a{ss}     u               -
...

功能说明

管理 RAID 控制器的属性和操作,包括工作模式设置、回拷/JBOD 配置、外部配置管理、日志收集等。

属性内容
接口名bmc.kepler.Systems.Storage.Controller
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明

方法参数说明
方法名入参出参描述
SetWorkModea{ss}yy-设置控制器工作模式。y:模式(RAID/HBA/JBOD/Mixed), y:是否重启生效
SetCopybackStatea{ss}y-设置回拷功能使能。y:0=禁用,1=使能
SetSmarterCopyBackStatea{ss}y-设置 SMART 错误回拷使能。y:0=禁用,1=使能
SetJBODStatea{ss}y-设置 JBOD 直通使能。y:0=禁用,1=使能
SetBootDevicesa{ss}ss-设置启动盘。s:设备类型, s:设备ID列表
RestoreDefaultSettingsa{ss}-恢复控制器出厂设置
ClearForeignConfiga{ss}-清除外部配置
ImportForeignConfiga{ss}-导入外部配置
DumpLoga{ss}u收集 RAID 控制器日志。u:任务ID
属性参数说明
参数名方向类型描述取值范围
Id输出uint8控制器 ID软件生成,默认0xFF
Type输出string控制器型号名称与 TypeId 一一对应
TypeId输出uint32控制器型号 IDSAS3108/3508/3408/3908 等
Name输出string控制器名称CSR 配置或带外获取
OOBSupport输出uint8是否支持带外管理0=不支持, 1=支持
FirmwareVersion输出string固件版本依赖 OOB
WorkMode输出string当前工作模式RAID/HBA/JBOD/Mixed
SupportedMode输出string支持的工作模式
MemorySizeMiB输出uint32内存容量MiB
SerialNumber输出string序列号
DeviceInterface输出string设备接口速率/协议
SASAddr输出stringSAS 地址
TemperatureCelsius输出int32芯片温度°C
MaxStripSizeBytes输出uint32最大条带值Bytes
MinStripSizeBytes输出uint32最小条带值Bytes
NVDataVersion输出stringNVData 版本
PCIeLinkWidth输出uint8PCIe 带宽
ReadCachePercent输入/输出uint8读缓存比例百分比0~100
CopyBackState输出bool回拷使能状态
SmarterCopyBackState输出boolSMART 回拷使能状态
JBODState输出boolJBOD 使能状态
HotSpareActivationMode输出string热备激活模式Failure/Predictive/Unknown
NoBatteryWriteCacheEnabled输出bool无电池写缓存使能
BootDevices输出string启动设备列表
DDREccCount输出uint16DDR ECC 错误计数
SupportedRAIDTypes输出string支持的 RAID 级别
HardwareRevision输出string硬件版本
MaintainPDFailHistrory输出bool物理盘故障记忆使能
CryptoEraseSupported输出bool是否支持加密擦除
EpdSupported输出bool是否支持加密
JbodSupported输出bool是否支持 JBOD
CachePinnedState输出boolCache Pinned 开关
ConfiguredDriveWriteCachePolicy输出stringRAID 组成员盘写缓存策略Enabled/Disabled/Default
UnconfiguredDriveWriteCachePolicy输出string非 RAID 组成员盘写缓存策略Enabled/Disabled/Default
HBADriveWriteCachePolicy输出stringHBA 模式写缓存策略Enabled/Disabled/Default

返回值与异常

返回值含义触发条件处理建议
0成功正常执行完成
非 0失败控制器不支持带外或参数非法检查 OOBSupport 和参数

应用场景

  • 查询 RAID 控制器基本信息(型号/固件/温度等)
  • 设置控制器工作模式(RAID/HBA/JBOD/Mixed)
  • 配置回拷、JBOD、热备激活模式等高级特性
  • 导入/清除外部配置
  • 收集 RAID 控制器日志

限制条件

  • 依赖 OOBSupport=1 的属性在控制器不支持带外管理时无效
  • 工作模式切换可能需要重启生效
  • 恢复出厂设置操作不可逆

调试示例

bash
# 查询控制器信息
busctl --user introspect bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Controllers/0 \
    bmc.kepler.Systems.Storage.Controller

# 设置控制器工作模式为 RAID
busctl --user call bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Controllers/0 \
    bmc.kepler.Systems.Storage.Controller SetWorkMode 'a{ss}yy' \
    3 Interface Busctl UserName Administrator 0 1

# 恢复出厂设置
busctl --user call bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Controllers/0 \
    bmc.kepler.Systems.Storage.Controller RestoreDefaultSettings 'a{ss}' \
    3 Interface Busctl UserName Administrator

2.4 一致性校验

bash
busctl --user introspect bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Controllers/0 bmc.kepler.Systems.Storage.Controller.ConsistencyCheck
NAME             TYPE      SIGNATURE RESULT/VALUE FLAGS
.Disable         method    a{ss}     -            -
.Enable          method    a{ss}qyyu -            -
.SetParameters   method    a{ss}qyy  -            -

功能说明

管理 RAID 控制器一致性校验功能,支持启停校验、设置周期/速率/自动修复等参数。

属性内容
接口名bmc.kepler.Systems.Storage.Controller.ConsistencyCheck
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明

方法参数说明
方法名入参出参描述
Enablea{ss}qyyu-使能一致性校验。q:周期(小时), y:速率, y:自动修复, u:推迟启动时间
Disablea{ss}-禁用一致性校验
SetParametersa{ss}qyy-设置校验参数。q:周期(小时), y:速率, y:自动修复
属性参数说明
参数名方向类型描述取值范围
State输出string校验功能状态Enabled/Disabled
PeriodOfHours输出uint16校验周期1~1440 小时
Rate输出string校验速率Low/Medium/High
AutoRepairEnabled输出bool自动修复使能true/false
RunningStatus输出string运行状态
TotalVolumeCounts输出uint32需校验的逻辑盘总数
CompletedVolumeCounts输出uint32已完成校验的逻辑盘数
DelayToStart输出uint32推迟启动时间0~24 小时

2.5 逻辑盘管理

bash
busctl --user introspect bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Controllers/0 bmc.kepler.Systems.Storage.Controller.VolumeManage
NAME                            TYPE      SIGNATURE            RESULT/VALUE FLAGS
.CreateCachecadeVolume          method    a{ss}ayysyquyqy      u            -
.CreateVolumeInExisingtArray    method    a{ss}qyyysuyyyyyyyyy u            -
.CreateVolumeInNewArray         method    a{ss}ayyysuyyyyyyyyy u            -
.DeleteVolume                   method    a{ss}q               u            -

功能说明

提供逻辑盘的创建和删除功能。支持在新阵列上创建、在已有阵列上创建以及创建 CacheCade 加速逻辑盘。

属性内容
接口名bmc.kepler.Systems.Storage.Controller.VolumeManage
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明

方法参数说明
方法名入参出参描述
CreateVolumeInNewArraya{ss}ayyysuyyyyyyyyyu在新阵列上创建逻辑盘。返回任务ID
CreateVolumeInExisingtArraya{ss}qyyysuyyyyyyyyyu在已有阵列上创建逻辑盘。返回任务ID
CreateCachecadeVolumea{ss}ayysyquyqyu创建 CacheCade 加速逻辑盘。返回任务ID
DeleteVolumea{ss}qu删除逻辑盘。q:逻辑盘ID,返回任务ID
属性参数说明
参数名方向类型描述取值范围
CreateVolumeSupported输出bool是否支持创建逻辑盘
SupportedReadPolicyList输出string支持的读策略列表
DefaultReadPolicy输出string默认读策略
ReadPolicyWritable输出bool是否可修改读策略
SupportedWritePolicyList输出string支持的写策略列表
DefaultWritePolicy输出string默认写策略
WritePolicyWritable输出bool是否可修改写策略
SupportedIOPolicyList输出string支持的 IO 策略列表

返回值与异常

返回值含义触发条件处理建议
0成功正常执行完成
非 0失败RAID 级别不支持、容量超限、成员盘不足检查控制器能力和参数

应用场景

  • 创建不同 RAID 级别的逻辑盘
  • 创建 CacheCade SSD 缓存加速逻辑盘
  • 删除不再使用的逻辑盘

限制条件

  • 创建逻辑盘需要足够的可用物理盘
  • 删除逻辑盘会导致数据丢失,操作不可逆
  • CacheCade 逻辑盘需要控制器支持且存在 SSD 盘

调试示例

bash
# 在新阵列上创建 RAID1 逻辑盘
busctl --user call bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Controllers/0 \
    bmc.kepler.Systems.Storage.Controller.VolumeManage CreateVolumeInNewArray \
    'a{ss}ayyysuyyyyyyyyy' \
    3 Interface Busctl UserName Administrator \
    2 1 2 \
    1 0 0 \
    0 0 0 0 0 0 0 0 0

2.6 逻辑盘属性

bash
busctl --user introspect bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Controllers/0/Volumes/0 bmc.kepler.Systems.Storage.Volume
NAME                     TYPE      SIGNATURE RESULT/VALUE FLAGS
.CancelForegroundInit    method    a{ss}     u            -
.SetAccelerator          method    a{ss}y    -            -
.SetAccessPolicy         method    a{ss}y    -            -
.SetBGIEnable            method    a{ss}y    -            -
.SetBootable             method    a{ss}y    -            -
.SetCachecadeEnable      method    a{ss}y    -            -
.SetDiskCachePolicy      method    a{ss}y    -            -
.SetIOPolicy             method    a{ss}y    -            -
.SetName                 method    a{ss}s    -            -
.SetReadPolicy           method    a{ss}y    -            -
.SetWritePolicy          method    a{ss}y    -            -
.StartForegroundInit     method    a{ss}y    u            -

功能说明

管理单个逻辑盘的属性,支持设置读写策略、IO策略、访问策略、启动盘、前台初始化等。

属性内容
接口名bmc.kepler.Systems.Storage.Volume
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明

方法参数说明
方法名入参出参描述
SetNamea{ss}s-设置逻辑盘名称
SetReadPolicya{ss}y-设置读策略。y:策略值
SetWritePolicya{ss}y-设置写策略。y:策略值
SetIOPolicya{ss}y-设置 IO 策略。y:策略值
SetAccessPolicya{ss}y-设置访问策略。y:策略值
SetDiskCachePolicya{ss}y-设置物理盘缓存策略。y:策略值
SetBGIEnablea{ss}y-设置 BGI 使能。y:0=禁用,1=使能
SetBootablea{ss}y-设置启动盘。y:0=非启动,1=启动
SetCachecadeEnablea{ss}y-设置 CacheCade 使能。y:0=禁用,1=使能
SetAcceleratora{ss}y-设置加速方法。y:加速类型
StartForegroundInita{ss}yu开始前台初始化。返回任务ID
CancelForegroundInita{ss}u取消前台初始化。返回任务ID
属性参数说明
参数名方向类型描述取值范围
Id输出uint16逻辑盘 ID每个 RAID 卡下唯一
VolumeName输出string逻辑盘名称
State输出string状态Optimal/Degraded/Offline/Failed 等
RAIDType输出stringRAID 级别RAID0/1/5/6/10/50/60 等
CapacityBytes输出uint64容量Bytes
OptimumIOSizeBytes输出uint32条带大小Bytes
DefaultReadPolicy输出string默认读策略NoReadAhead/ReadAhead
CurrentReadPolicy输出string当前读策略
DefaultWritePolicy输出string默认写策略WriteThrough/WriteBackWithBBU/WriteBack
CurrentWritePolicy输出string当前写策略
DefaultCachePolicy输出string默认 IO 策略CachedIO/DirectIO
CurrentCachePolicy输出string当前 IO 策略
AccessPolicy输出string访问策略ReadWrite/ReadOnly/Blocked
DriveCachePolicy输出string物理盘缓存策略Unchanged/Enabled/Disabled
InitializationMode输出string初始化方式UnInit/QuickInit/FullInit 等
BootEnable输出uint8是否启动盘0/1
BootPriority输出string启动优先级
BGIEnable输出uint8BGI 使能状态0/1
RebuildState输出uint8重构状态0=无,1=进行中
RebuildProgress输出uint8重构进度0~100%
CurrentForegroundInitState输出uint8前台初始化状态0/1
ForegroundInitProgress输出uint8前台初始化进度0~100%
SSDCachecadeVolume输出bool是否 CacheCade 逻辑盘
SSDCachingEnable输出boolCacheCade 使能状态
AssociatedVolumes输出string关联的普通逻辑盘CacheCade 逻辑盘专用
AssociatedCacheCadeVolume输出string关联的 CacheCade 逻辑盘
SpanCount输出uint8Span 数量
NumDrivePerSpan输出uint8每 Span 盘数
RefControllerId输出uint8所属控制器 ID
RefDriveList输出string成员盘列表
RefDiskArrayList输出string关联阵列列表
HotSpareDriveList输出string热备盘列表
CacheLineSizeKiB输出uint32缓存行大小KiB
AccelerationMethod输出string加速方法
MaxResizableSizeBytes输出uint64最大可扩展容量Bytes
OSDriveName输出stringOS 盘符

2.7 物理盘管理

bash
busctl --user introspect bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Drives/Disk0 bmc.kepler.Systems.Storage.Drive
NAME                       TYPE      SIGNATURE RESULT/VALUE FLAGS
.CryptoErase               method    a{ss}     -            -
.SetBootPriority           method    a{ss}y    -            -
.SetFirmwareStatus         method    a{ss}y    -            -
.SetHotspareType           method    a{ss}yq   -            -
.SetLocationIndicatorState method    a{ss}y    -            -
.SetPatrolState            method    a{ss}y    -            -

功能说明

管理单个物理硬盘的属性和操作,支持热备设置、定位灯控制、固件状态管理、加密擦除等。

属性内容
接口名bmc.kepler.Systems.Storage.Drive
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明

方法参数说明
方法名入参出参描述
SetLocationIndicatorStatea{ss}y-设置定位灯状态。y:0=关,1=开
SetFirmwareStatusa{ss}y-设置固件状态。y:状态值
SetHotspareTypea{ss}yq-设置热备类型。y:类型, q:关联逻辑盘ID(专属热备时)
SetBootPrioritya{ss}y-设置启动优先级。y:优先级值
SetPatrolStatea{ss}y-设置巡检状态。y:状态值
CryptoErasea{ss}-加密擦除硬盘
属性参数说明
参数名方向类型描述取值范围
Id输出uint8硬盘 IDCSR 配置
NodeId输出string资源唯一 ID
SlotNumber输出uint8槽位号默认255
Name输出string硬盘名称Disk0 等
Presence输出uint8在位状态0=不在位, 1=在位
CapacityMiB输出uint32容量MiB
Model输出string型号
Manufacturer输出string厂商
SerialNumber输出string序列号
Revision输出string固件版本
Protocol输出uint8协议类型0=Unknown,1=SCSI,2=SAS,3=SATA,4=FC,6=PCIe
MediaType输出uint8介质类型0=HDD,1=SSD,2=SSM,255=Unknown
FirmwareStatus输出uint8固件状态20+ 枚举值
TemperatureCelsius输出int32温度°C
CapableSpeedGbs输出uint8支持速率Gb/s
NegotiatedSpeedGbs输出uint8协商速率Gb/s
PowerOnHours输出uint32通电时长小时
PredictedMediaLifeLeftPercent输出uint8预估剩余寿命0~100%, 255=无效
RotationSpeedRPM输出uint32转速RPM(HDD)
BlockSizeBytes输出uint32块大小Bytes
HotspareType输出uint8热备类型0=None,1=Global,2=Dedicated
RebuildState输出uint8重构状态0=无,1=进行中
RebuildProgress输出uint8重构进度0~100%
PatrolState输出uint8巡检状态0=无/完成,1=巡检中
PredictedFailCount输出uint32预故障计数
MediaErrorCount输出uint32介质错误计数
OtherErrorCount输出uint32其他错误计数
LocationIndicatorState输出uint8定位灯状态0=关,1=开
BootPriority输出uint8启动优先级
SASAddress1输出stringSAS 地址 1
SASAddress2输出stringSAS 地址 2
RefControllerId输出uint8关联控制器 ID
RefVolumeList输出string关联逻辑盘列表
RefDiskArrayId输出string关联阵列 ID

返回值与异常

返回值含义触发条件处理建议
0成功正常执行完成
非 0失败硬盘不在位或操作不支持检查硬盘状态

应用场景

  • 查询物理盘详细信息(健康/温度/容量/速率等)
  • 设置硬盘热备类型(全局/专属/取消)
  • 点亮/关闭硬盘定位灯
  • 设置硬盘固件状态(Online/Offline/JBOD 等)
  • 加密擦除硬盘数据

限制条件

  • 加密擦除需要控制器支持(CryptoEraseSupported=true)
  • 热备操作需要硬盘处于可设置状态
  • 固件状态设置受限于控制器能力

调试示例

bash
# 查询物理盘信息
busctl --user introspect bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Drives/Disk0 \
    bmc.kepler.Systems.Storage.Drive

# 设置定位灯
busctl --user call bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Drives/Disk0 \
    bmc.kepler.Systems.Storage.Drive SetLocationIndicatorState 'a{ss}y' \
    3 Interface Busctl UserName Administrator 1

2.8 硬盘子接口

bmc.kepler.Systems.Storage.Drive.DriveStatus

参数名方向类型描述取值范围
Health输出string健康状态OK/Warning/Critical
Missing输出uint8丢失标志0/1
PredictiveFailure输出uint8预故障标志0/1
Failure输出bool是否故障true/false
InAFailedArray输出uint8是否在故障阵列中0/1
CapacityError输出bool容量是否异常true/false
FirmwareStatusError输出bool固件状态是否异常true/false

bmc.kepler.Systems.Storage.Drive.DriveSubHealth

参数名方向类型描述取值范围
EstimatedRemainingLifespanInsufficient输出bool剩余寿命不足
EstimatedRemainingLifespan输出uint32剩余动态预估寿命SSD 有效
SLCSpareBlockPercentage输出uint8非用户区空闲块百分比%
TLCSpareBlockPercentage输出uint8用户区空闲块百分比%
IODeteriorationHealthCode输出uint8IO 性能健康码

bmc.kepler.Systems.Storage.Drive.NVMe

参数名方向类型描述取值范围
LifeUsedPercentage输出uint8已使用寿命百分比%

bmc.kepler.Systems.Storage.Drive.NVMe.SMART

参数名方向类型描述取值范围
AvailableSpare输出uint8可用冗余空间百分比0~100%
CriticalWarning输出uint8临界告警位图bit0~bit5
UsedPercentage输出uint8使用寿命百分比0~100%
Status输出stringSMART 告警状态

2.9 硬盘组管理

bash
busctl --user introspect bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Drives bmc.kepler.Systems.Storage.Drives
NAME                              TYPE      SIGNATURE RESULT/VALUE FLAGS
.CollectIODeteriorationDiagInfo   method    a{ss}     u            -
.GetDrivesSubHealthDiagInfo       method    a{ss}y    aa{ua{ss}}   -
.SetDriveSubHealthDiagResult      method    a{ss}sq   -            -
.StartCollectLog                  method    a{ss}s    u            -
.GetNvmeDriveRawData              method    a{ss}u    s            -
.GetNvmeDriveCount                method    a{ss}     u            -

功能说明

提供硬盘组级别的管理功能,包括 IO 性能诊断、亚健康诊断、日志收集、NVMe 原始数据获取等。

属性内容
接口名bmc.kepler.Systems.Storage.Drives
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明

方法参数说明
方法名入参出参描述
CollectIODeteriorationDiagInfoa{ss}u收集硬盘 IO 劣化诊断信息。返回任务ID
GetDrivesSubHealthDiagInfoa{ss}yaa{ua{ss}}获取硬盘亚健康诊断信息。y:亚健康类型
SetDriveSubHealthDiagResulta{ss}sq-设置硬盘亚健康诊断结果。q:结果类型
StartCollectLoga{ss}su启动硬盘日志收集。s:硬盘名称,返回任务ID
GetNvmeDriveRawDataa{ss}us获取 NVMe 硬盘原始数据。u:索引
GetNvmeDriveCounta{ss}u获取 NVMe 硬盘数量
属性参数说明
参数名方向类型描述取值范围
MaxTemperatureCelsius输出int32最高硬盘温度°C
LogAutoCollectEnable输入/输出bool日志自动收集使能默认true
LogAutoCollectInterval输入/输出uint32日志自动收集周期小时,默认24

2.10 磁盘阵列

功能说明

管理 RAID 控制器下的磁盘阵列信息。

属性内容
接口名bmc.kepler.Systems.Storage.DiskArray
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明

属性参数说明
参数名方向类型描述取值范围
Id输出uint8阵列序号每个 RAID 卡下唯一
RAIDType输出stringRAID 级别
UsedSpaceMiB输出uint32已使用空间MiB
TotalFreeSpaceMiB输出uint32空闲空间MiB
FreeBlocksSpaceMiB输出string空闲块容量列表MiB
AverageDriveFreeSpaceMiB输出uint32每盘平均剩余容量MiB
DriveNumPerSpan输出uint8每 Span 盘数
RefControllerId输出uint8关联控制器 ID
RefVolumes输出string关联逻辑盘列表
RefDrives输出string关联物理盘列表
RefPDSlots输出string关联物理盘槽位
RefPDEnclosures输出string关联物理盘框位

2.11 超级电容(BBU)

功能说明

管理 RAID 控制器的超级电容(BBU)状态信息。

属性内容
接口名bmc.kepler.Systems.Storage.Battery
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明

属性参数说明
参数名方向类型描述取值范围
Name输出stringBBU 名称
State输出uint8在位信息
Health输出string健康状态
Fault输出uint8故障标志
HealthStatus输出uint8健康状态位图bit0:电压过低,bit1:需更换,bit2:校准失败,bit3:校准超时,bit4:预故障,bit5:剩余容量低
TemperatureCelsius输出int32温度°C

2.12 控制器状态子接口

bmc.kepler.Systems.Storage.Controller.ControllerStatus

参数名方向类型描述取值范围
Health输出string健康状态
FaultCode输出uint32故障码(位域)每一位代表一种故障
CommunicationLoss输出uint8通信丢失
FaultCodeByBios输出uint32BIOS 设置的故障码

bmc.kepler.Systems.Storage.Controller.BatteryStatus

参数名方向类型描述取值范围
BatteryPresence输出uint8BBU 在位状态
BatteryFault输出uint8BBU 故障
BatteryHealth输出uint8BBU 健康状态
TemperatureCelsius输出int32BBU 温度°C

bmc.kepler.Systems.Storage.Controller.Driver

参数名方向类型描述取值范围
Name输出string驱动名称依赖 BMA
Version输出string驱动版本依赖 BMA

bmc.kepler.Systems.Storage.Controller.Chip

参数名方向类型描述取值范围
Model输出string芯片型号CSR 配置
ChipManufacturer输出string芯片厂商CSR 配置

2.13 SAS PHY 误码

功能说明

记录 SAS PHY 物理层的误码统计信息。

属性内容
接口名bmc.kepler.Systems.Storage.PhyError
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明

属性参数说明
参数名方向类型描述取值范围
PhyId输出uint8PHY ID每个 RAID 卡下唯一
InvalidDwordCount输出uint32无效 DWORD 数
LossDwordSyncCount输出uint32丢失 DWORD 同步数
PhyResetProblemCount输出uint32PHY 重启问题数
RunningDisparityErrorCount输出uint32连续不均衡性错误数

3. IPMI 命令

数据来源storage/mds/ipmi.json(命令定义)+ storage/src/lualib/ipmi_service.lua(处理函数)

3.1 概述

Storage 组件注册了 55 个 OEM IPMI 命令,统一使用 NetFn=0x30, CMD=0x93,通过 SubCommand 区分子命令。

3.2 查询类命令

IPMI 命令SubCommand处理函数说明
GetControllerList0x3D/0x00get_controller_list获取 RAID 控制器 ID 列表
GetControllerFwVersion0x3D/0x01get_controller_fw_version获取控制器固件版本
GetControllerNvdataVersion0x3D/0x02get_controller_nvdata_version获取控制器 NVData 版本
GetControllerInfo0x3D/0x03get_controller_info获取控制器配置信息
GetLogicalDriveList0x3D/0x04get_logical_drive_list获取逻辑盘 ID 列表
GetCachecadeAssociatedLds0x3D/0x06get_cachecade_associated_lds获取 CacheCade 关联逻辑盘
GetLogicalDrivePds0x3D/0x07get_logical_drive_pds获取逻辑盘成员盘列表
GetControllerPds0x3D/0x08get_controller_pds获取控制器下物理盘列表
GetPhysicalDriveLocation0x3D/0x09get_physical_drive_location获取物理盘位置信息
GetPhysicalDriveInfo0x3D/0x0Aget_physical_drive_info获取物理盘详情
GetPhysicalDriveLedStatus0x3D/0x12get_physical_drive_led_status获取物理盘 LED 状态
GetArrayList0x3D/0x0Bget_array_list获取阵列 ID 列表
GetArrayInfo0x3D/0x0Cget_array_info获取阵列信息
GetArrayLds0x3D/0x0Dget_array_lds获取阵列关联逻辑盘
GetArrayLdsEx0x3D/0x15get_array_lds_ex获取阵列关联逻辑盘(扩展版)
GetArrayPds0x3D/0x0Eget_array_pds获取阵列关联物理盘
GetLdDedicatedSparedPds0x3D/0x0F获取逻辑盘专属热备盘
GetControllerCapability0x3D/0x13get_controller_capability获取控制器能力
GetLogicalDriveListEx0x3D/0x14get_logical_drive_list_ex获取逻辑盘列表(扩展版)
GetCachecadeAssociatedLdsEx0x3D/0x16get_cachecade_associated_lds_ex获取 CacheCade 关联逻辑盘(扩展版)
GetHddPlugCnt0x3A获取硬盘插拔计数
GetHddPwrStatus0x62get_hdd_pwr_status获取硬盘上下电状态
GetDiskSilkget_disk_silk获取硬盘丝印信息
GetRaidControllerTempget_raid_controller_temp获取控制器温度
GetDiskManufacturerget_manufacturer获取硬盘厂商信息
GetLogAutoCollectConfigget_log_auto_collect_config获取日志自动收集配置
GetSlotPowerStateget_slot_power_state获取槽位上下电状态

3.3 设置类命令

IPMI 命令SubCommand处理函数说明
CreateLogicalDriveOnNewArray0x3E/0x01create_logical_drive_on_new_array在新阵列上创建逻辑盘
CreateCachecadeLogicalDrive0x3E/0x02create_cachecade_logical_drive创建 CacheCade 逻辑盘
CreateLogicalDriveOnExistedArray0x3E/0x03create_logical_drive_on_existed_array在已有阵列上创建逻辑盘
DeleteLogicalDrive0x3E/0x04delete_logical_drive删除逻辑盘
SetLogicalDriveName0x3E/0x05set_logical_drive_name设置逻辑盘名称
SetLogicDriveRp0x3E/0x06set_logic_drive_rp设置逻辑盘读策略
SetLogicDriveWp0x3E/0x07set_logic_drive_wp设置逻辑盘写策略
SetLogicalDriveIOP0x3E/0x08set_logical_drive_iop设置逻辑盘 IO 策略
SetLogicalDriveAP0x3E/0x09set_logical_drive_ap设置逻辑盘访问策略
SetLogicalDriveDCP0x3E/0x0Aset_logical_drive_dcp设置逻辑盘缓存策略
SetLogicalDriveBGI0x3E/0x0Bset_logical_drive_bgi设置逻辑盘 BGI 使能
SetLogicalDriveCachecade0x3E/0x0Cset_logical_drive_cachecade设置逻辑盘 CacheCade
SetLogicDriveBootable0x3E/0x0Dset_logic_drive_bootable设置逻辑盘启动使能
SetControllerCopybackset_controller_copyback设置回拷使能
SetControllerSmarterCopybackset_controller_smarter_copyback设置 SMART 回拷使能
SetControllerRestoreSettingsset_controller_restore_settings恢复出厂设置
SetControllerJbodset_controller_jbod设置 JBOD 使能
SetControllerOutofbandset_controller_outofband设置带外管理使能
SetHotspareTypeset_hotspare_type设置物理盘热备类型
SetFirmwareStatusset_firmware_status设置物理盘固件状态
SetLocationIndicatorStateset_location_indicator_state设置物理盘定位灯
SetFaultIndicatorStateset_fault_indicator_state设置物理盘故障灯
SetRaidFaultStatusset_raid_fault_status设置 RAID 故障状态
SetPdLogCollectset_pd_log_collect触发硬盘日志收集
SetPCHDiskInfoset_pch_disk_info设置 PCH 硬盘信息
SetLogAutoCollectConfigset_log_auto_collect_config设置日志自动收集配置
StartDriveCollectLogstart_drive_collect_log启动硬盘日志收集
SetSlotPowerStateset_slot_power_state设置槽位上下电

4. 关键特性

4.1 博通 RAID 卡带外管理

对博通卡进行带外管理时,使用卡的驱动通过 I2C 与 RAID 卡进行通讯。BMC 的 I2C 通道由 hwproxy 模块统一管理,因此引入插件(Plugin)方式让存储模块使用 I2C 总线。

通信流程:

  1. 控制器对象调用注册好的 I2C 芯片的 PluginRequest 方法,传入插件名、函数名和函数参数
  2. 找到对应插件后,调用插件的 run_cmd 函数,创建 Worker 虚拟机
  3. 在虚拟机中调用 SML 库函数
  4. SML 库需要 I2C 通信时,将命令打包后发送给 Plugin 所在的 skynet 服务
  5. 处理结束后,Worker 将结果返回给 Plugin,再由 Plugin 返回给调用方

4.2 1880 及 PMC RAID 卡管理

1880 和 PMC 的 RAID 卡采用 MCTP 方式和 RAID 卡进行通信。MCTP 组件提供相关服务,将收发信息的接口注册到 Storage 组件。

  • Storage 注册的回调接口:do_mctp_writeread
  • 回调函数注册流程:CMD.register_controller

4.3 NVMe 盘配置流程

  1. 在硬盘背板上配置 Connector_ComVPDConnect_x 对象(Bom=14140224, Id=VPD, AuxId=0)
  2. 框架加载 14140224_VPD_0.sr 文件,定义 Connector_ComVPDVirtualVPDConnect 对象
  3. Storage 组件通过 VirtualVPDConnect 从 NVMe 盘读取协议信息并更新到 Connector_ComVPD 的 AuxId
  4. 框架利用 Bom+Id+AuxId 组合加载具体协议文件(如 14140224_PROTOCOL_0.sr
  5. 在协议文件中定义 Nvme_1 对象,对应 Storage 的 c_nvme 对象

5. 目录结构

shell
├── src
   ├── lualib
   ├── add_event.lua                        # 事件上报功能
   ├── array/                               # 阵列功能
   ├── battery/                             # 电容功能
   ├── bma/                                 # BMA 带内数据处理
   ├── controller/                          # RAID 控制器功能
   ├── controller_firmware/                 # 控制器固件管理
   ├── ctrl_commu_loss_monitor.lua          # 通信丢失检测
   ├── diagnose/                            # PHY 误码诊断
   ├── drive/                               # 物理盘功能
   ├── drives/                              # 硬盘组功能
   ├── device_mgmt/                         # 设备管理(NVMe 设备树同步)
   ├── error_engine.lua                     # 错误引擎
   ├── handler/                             # 配置导入导出
   ├── ipmi_service.lua                     # IPMI 服务
   ├── link_volume_array_drive_service.lua  # 逻辑盘/阵列/物理盘关联
   ├── mctp/                                # MCTP 通信
   ├── metric_collect.lua                   # 硬盘数据采集
   ├── nvme/                                # NVMe 盘功能
   ├── object_manager/                      # 业务对象管理
   ├── os_patition/                         # OS 分区
   ├── pd/                                  # 硬盘定位
   ├── rpc_services/                        # RPC 方法
   ├── sas_phy/                             # SAS PHY
   ├── sml/                                 # SML 库相关
   ├── storage_app.lua                      # 组件入口
   ├── storage_bus.lua                      # D-Bus 封装
   ├── storage_mdb_object.lua               # MDB 对象基类
   ├── storageconfig/                       # 存储配置
   ├── storage_setting/                     # 存储设置
   ├── upgrade/                             # 升级功能
   ├── volume/                              # 逻辑盘功能
   └── ...
   ├── lualib-src/
   └── l_sml/                               # SML C 库
   └── service/
       ├── main.lua                             # 服务入口
       └── smld.lua                             # SML 守护进程
├── mds/
   └── ipmi.json                                # IPMI 命令定义(55个命令)

6. 组件扩展案例

6.1 新增 IPMI 命令

步骤一:在 mds/ipmi.json 中定义命令

json
{
    "NewCommand": {
        "priority": "Default",
        "role": "Operator",
        "privilege": ["ReadOnly"],
        "request": [
            {"data": "ManufacturerId", "baseType": "U32", "len": "3B"},
            {"data": "SubCommand", "baseType": "U8", "len": "1B", "value": "0xXX"}
        ],
        "response": [
            {"data": "CompletionCode", "baseType": "U8", "len": "1B"},
            {"data": "Data", "baseType": "String", "len": "*"}
        ]
    }
}

步骤二:在 ipmi_service.lua 中实现处理函数

lua
function c_ipmi_service.new_command(req, ctx)
    local resp_data = {}
    -- 解析请求数据
    -- 执行业务逻辑
    -- 构造响应数据
    return resp_data
end

步骤三:在 storage_app.lua 中注册命令

lua
self:register_ipmi_cmd(ipmi.NewCommand, ipmi_service.new_command)

6.2 新增配置导入导出属性

步骤一:注册导入导出处理器

在对应对象的 Lua 文件中调用 register_config_dealer

lua
local export_import_engine = require 'handler.export_import_engine'
export_import_engine.register_config_dealer('ClassName', self)

步骤二:实现 import/export 方法

lua
function c_my_object:import(ctx, obj_json)
    -- 从 JSON 恢复属性
    self.PropertyName = obj_json.PropertyName
end

function c_my_object:export(ctx)
    return {
        PropertyName = self.PropertyName
    }
end

7. 日志说明

7.1 日志路径

日志路径说明
/data/var/log/storage/Storage 组件主日志目录
/data/var/log/storage/drivelog/硬盘日志收集目录(按 Disk{slot} 组织)
/data/var/log/storage/phy/PHY 误码统计文件
/data/var/log/storage/RAID_Controller_Info.txtRAID 控制器信息 dump 文件
/dev/shm/dump_info_tmp/dump_info/LogDump/storage/一键收集日志存放路径
/dev/shm/raid_controller_lib.logSML 库通信日志

7.2 日志级别与关键字

级别说明关键字示例
notice正常业务流程controller%s start TASK_UPDATEDisk%s addctrl%s add_controller_to_sml successfully
info补充信息Controller %s add new volume listRestore drive info
warn警告
error异常/错误I2C_READ_WRITE_FAILEDget_ctrl_pd_list failedInvalid TypeId
debug调试信息controller%s start s.ctl_info %s timespd_list

7.3 关键日志说明

日志内容含义定位建议
storage-init start / storage-init end组件初始化开始/结束初始化耗时过长时检查中间日志
controller%s start TASK_UPDATE控制器开始周期性数据更新数据不更新时检查是否有此日志
controller%s register_controller_to_sml successfully控制器注册到 SML 成功注册失败时检查 OOBSupport 和 I2C 通信
Disk%s add / Disk%s del硬盘在位变化硬盘识别异常时关注
get_ctrl_pd_list failed and return %s获取物理盘列表失败检查 SML 通信和控制器状态
Failed to dump log日志收集失败检查磁盘空间和权限
SML_ERR_I2C_READ_WRITE_FAILEDI2C 读写失败检查 I2C 通道和 hwproxy 状态
SML_ERR_MCTP_READ_WRITE_FAILEDMCTP 读写失败检查 MCTP 链路和组件状态

8. 问题定界指南

8.1 总体定界思路

8.2 控制器识别问题

现象:RAID 控制器不可见或信息为空

排查步骤

  1. 检查 CSR 配置:确认 .sr 文件中 Controller_1 对象的 TypeId 和 DeviceName 配置正确
  2. 检查 I2C 通信:查看日志中是否有 SML_ERR_I2C_READ_WRITE_FAILED
    bash
    grep "I2C_READ_WRITE_FAILED" /var/log/*.log
  3. 检查 OOBSupportOOBSupport=0 表示不支持带外管理,此时控制器信息依赖 CSR 静态配置
  4. 检查控制器状态:查看 StorageConfigReady 是否为 0x01
  5. 检查 PCIe 设备:确认 RAID 卡的 PCIe 设备被正确识别
    bash
    busctl --user get-property bmc.kepler.storage \
        /bmc/kepler/Systems/1/Storage/Controllers/0 \
        bmc.kepler.Systems.Storage.Controller OOBSupport

8.3 硬盘信息异常

现象:硬盘信息不显示、信息不更新、或显示错误信息

排查步骤

  1. 检查在位状态Presence=1 表示在位
  2. 检查 PD 定位:查看日志中 drive identify / drive unidentify 信息
  3. 检查固件状态FirmwareStatus 为 0xFF(255) 表示无效
  4. 检查关联控制器RefControllerId 应指向有效的控制器
  5. NVMe 盘额外检查:确认设备树对象同步是否正常

8.4 操作执行失败

现象:创建逻辑盘、设置属性等操作返回错误

排查步骤

  1. 查看错误码:参考 error_engine.lua 中的错误码映射表
错误码Redfish 映射含义
0x2080RaidControllerLevelInvalidRAID 级别无效
0x2085PhysicalDiskIdInvalid物理盘 ID 无效
0x2086VolumeCapacityOutRange容量超出范围
0x2090OperationInProcess操作进行中
0x20D5CurrentStatusNotSupportOperation控制器状态不支持操作
0x1001CurrentStatusNotSupportOperationI2C 读写失败
0x1002CurrentStatusNotSupportOperationMCTP 读写失败
0x1104CurrentStatusNotSupportOperation控制器初始化未完成
0x1301物理盘 ID 无效
0x1444物理盘已被使用
0x1448CacheCade 需使用 SSD
0x1074RAIDControllerSetSuccessfully操作成功需重启
  1. 检查控制器状态:确认控制器已完成初始化(StorageConfigReady=1
  2. 检查参数合法性:确认 RAID 级别、物理盘 ID、容量等参数在有效范围内

8.5 数据不更新

现象:控制器/硬盘/逻辑盘信息长时间不刷新

排查步骤

  1. 检查周期任务:确认控制器的 TASK_UPDATE 周期任务是否在运行
  2. 检查 I2C/MCTP 通信:查看日志中是否有通信失败
  3. BMA 数据不更新:确认 host_agent 组件正常运行且 BMA 数据推送正常
  4. NVMe 设备树同步:确认设备树属性变化是否被监听到

9. 常见问题解答

Q1:设置 RAID 卡 JBOD 工作模式后,硬盘状态未变为 JBOD,是否正常?

:设置 RAID 卡工作模式为 JBOD 后,下挂硬盘状态是否自动切换取决于 RAID 卡的 AutoConfig 配置。可通过 OS 下 storcli /c0 show autoconfig 查询。当 AutoConfig=JBOD 时,切换 JBOD 模式会自动将 Unconfigured Good 状态的硬盘切换为 JBOD。若 AutoConfig 非 JBOD,则需手动设置硬盘固件状态。

Q2:硬盘拔插替换后信息不更新,显示旧盘信息,如何处理?

:在快速多盘拔插场景下可能出现信息不更新,排查步骤:

  1. 确认是否为单盘替换场景(单盘替换一般正常)
  2. 多盘同时拔插时,检查 pd_identify_service 的添加/删除处理时序
  3. 查看日志中 Disk%s add / Disk%s del 的时序是否正确
  4. 若确认存在时序问题,可将添加和删除操作加入队列串行处理

Q3:创建逻辑盘失败,返回错误码,如何排查?

:常见创建失败原因及对应的错误码:

  • 物理盘 ID 无效(0x2085):确认物理盘 ID 存在且未被使用
  • RAID 级别无效(0x2080):确认控制器支持该 RAID 级别
  • 容量超出范围(0x2086):确认容量在可用空间范围内
  • 物理盘已被使用(0x1444):确认物理盘未被其他阵列占用
  • 控制器状态不支持(0x20D5):等待控制器初始化完成后再操作

Q4:NVMe 盘在 BMC 上不显示信息,如何排查?

:排查步骤:

  1. 确认硬盘背板 CSR 中配置了 Connector_ComVPDConnect_x 对象
  2. 确认设备树中 NVMe 设备对象是否存在
  3. 检查 device_mgmt 模块的日志,确认设备树属性同步是否正常
  4. 确认 BMA 数据推送是否正常(host_agent 组件状态)

Q5:部分硬盘不在 RAID 卡管理下,但实际应被管理,如何处理?

:排查步骤:

  1. 检查硬盘的 RefControllerId 属性,确认关联的控制器 ID
  2. 检查 PD 定位结果,确认 identify_pd 是否正确匹配
  3. 查看日志中 drive identify 信息,确认物理盘与 Drive 的配对结果
  4. 确认硬盘固件状态是否为有效值(非 0xFF)
  5. 确认控制器 OOBSupport=1 且已成功注册到 SML