代码仓
中
storage
更新时间: 2025/12/31
在AtomGit上查看源码

Storage 存储管理服务 ​

版本信息 ​

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

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 层误码采集、分析和告警
  • 硬盘子健康管理:支持亚健康诊断(IO 劣化、剩余寿命、冗余块)、NVMe/SAS/SATA SMART 信息采集,以及 NVMe-MI 标准命令通道
  • 磁盘分区管理:支持通过 BMA 带内通道上报 OS 磁盘分区容量与利用率
  • 配置导入导出:支持存储配置的备份和恢复
  • 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 使用说明与示例 ​

说明:本章接口定义以 mdb_interface 仓库(json/intf/mdb/bmc/kepler/Systems/Storage/、json/intf/mdb/bmc/kepler/Chassis/Storage/)为唯一事实来源。 属性表中「读写」列含义:RO=只读、RW=读写、WO=只写、NA=不涉及;「取值范围」列无限制时填 NA。

2.1 存储配置 ​

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

功能说明 ​

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

属性内容
接口名bmc.kepler.Systems.Storage.StorageConfig
对象路径/bmc/kepler/Systems/:SystemId/Storage
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明 ​

属性参数说明 ​
参数名类型读写取值范围描述
StorageConfigReadyU8RO0:未就绪,1:就绪用于控制器配置导入导出场景,标志所有控制器的状态
VolumesStateAbnormalU8RO0:否,1:是是否存在状态异常的逻辑盘
DiskPartitionUsagePercentageThresholdU8RW0~100磁盘分区占用率告警阈值,单位百分比,默认 100

返回值与异常 ​

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

应用场景 ​

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

调试示例 ​

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

# 设置磁盘分区占用率告警阈值为 80%
busctl --user set-property bmc.kepler.storage /bmc/kepler/Systems/1/Storage \
    bmc.kepler.Systems.Storage.StorageConfig DiskPartitionUsagePercentageThreshold y 80

2.2 PHY 误码诊断 ​

bash
busctl --user introspect bmc.kepler.storage /bmc/kepler/Systems/1/Storage bmc.kepler.Systems.Storage.Diagnose
NAME                             TYPE      SIGNATURE RESULT/VALUE FLAGS
.MaxPhyErrorLogFileRotationCount property  y         10           emits-change writable
.PhyErrorEnabled                 property  b         false        emits-change writable
.PhyErrorInterval                property  u         1800         emits-change writable
.PhyErrorMaxRecord               property  y         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
对象路径/bmc/kepler/Systems/:SystemId/Storage
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明 ​

属性参数说明 ​
参数名类型读写取值范围描述
PhyErrorEnabledBooleanRWtrue/falsePHY 误码诊断使能
PhyErrorIntervalU32RW单位秒,默认 1800PHY 误码数据采集的时间间隔
PhyErrorMaxRecordU8RW默认 20PHY 误码在一个 OS 启动周期内记录的最大条数(有增长的记录)
PhyErrorThresholdU32RW单位 dwordcount/s,默认 100PHY 误码单位时间增长过快的判断门限值
MaxPhyErrorLogFileRotationCountU8RW默认 10PHY 误码循环记录的最大文件数
PhyErrorSelUnlimitFlagBooleanRW默认 falsePHY 误码是否允许产生多个 SEL 告警事件

返回值与异常 ​

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

应用场景 ​

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

调试示例 ​

bash
# 启用 PHY 误码诊断
busctl --user set-property bmc.kepler.storage /bmc/kepler/Systems/1/Storage \
    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}     -            -
.DumpLog                              method    a{ss}     u            -
.ImportForeignConfig                  method    a{ss}     -            -
.RestoreDefaultSettings               method    a{ss}     -            -
.SetBootDevices                       method    a{ss}ss   -            -
.SetBootDevicesV2                     method    a{ss}as   -            -
.SetCopybackState                     method    a{ss}y    -            -
.SetJBODState                         method    a{ss}y    -            -
.SetMaintainPDFailHistoryState        method    a{ss}y    -            -
.SetNoBatteryWriteCache               method    a{ss}y    -            -
.SetReadCachePercent                  method    a{ss}y    -            -
.SetSmarterCopyBackState              method    a{ss}y    -            -
.SetWorkMode                          method    a{ss}yy   -            -
.SetWriteCachePolicy                  method    a{ss}ss   -            -

功能说明 ​

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

属性内容
接口名bmc.kepler.Systems.Storage.Controller
对象路径/bmc/kepler/Systems/:SystemId/Storage/Controllers/:Id
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明 ​

方法参数说明 ​
方法名入参出参描述
SetWorkModea{ss}yy-设置控制器的工作模式。Mode:0=RAID,1=HBA,2=JBOD,3=MIXED;ProfileId:取值为 0
SetCopybackStatea{ss}y-设置控制器的回拷功能。State:0=禁用,1=使能
SetSmarterCopyBackStatea{ss}y-设置 RAID 控制器在检测到物理盘 SMART 错误之后是否自动进行 Copyback。State:0=禁用,1=使能
SetJBODStatea{ss}y-设置控制器的 JBOD 功能状态。State:0=禁用,1=使能
SetBootDevicesa{ss}ss-设置控制器的启动盘设备。PriorityDriveName:主启动盘名称;SecondaryDriveName:备启动盘名称
SetBootDevicesV2a{ss}as-批量设置启动盘。BootDevices:设备名称数组,设备按数组顺序表示优先级
RestoreDefaultSettingsa{ss}-恢复控制器的默认配置
ClearForeignConfiga{ss}-一键清除外部配置
ImportForeignConfiga{ss}-一键导入外部配置
SetMaintainPDFailHistoryStatea{ss}y-设置 RAID 卡硬盘故障记忆功能的开启或关闭。State:0=关闭,1=开启
SetNoBatteryWriteCachea{ss}y-设置控制器无电池写缓存状态。NoBatteryWriteCacheEnabled:0=禁用,1=使能
SetReadCachePercenta{ss}y-设置控制器读缓存百分比。ReadCachePercent:0~100
SetWriteCachePolicya{ss}ss-设置控制器写缓存策略。Type:策略类型;WriteCachePolicy:Enabled/Disabled/Default
DumpLoga{ss}u收集 RAID 控制器信息。返回任务 ID
属性参数说明 ​
参数名类型读写取值范围描述
IdU8RO默认 0xFF控制器 Id,由软件生成
TypeStringRONA控制器类型
NameStringRONA控制器名称
TypeIdU8RONA控制器的类型 Id,与控制器型号一一对应
DeviceNameStringRONA对应的 PCIeDevice 的设备名
BOMNumberStringRONABOM 编码
PositionStringRONA对应的 PCIeDevice 的位置
OOBSupportU8RO0:不支持带外,1:支持带外是否支持带外管理,不支持时控制器信息依赖 CSR 静态配置
FirmwareVersionStringRONA控制器固件版本
WorkModeStringRORAID/HBA/JBOD/MIXED控制器的工作模式
SupportedModeString[]RONA控制器支持的工作模式列表
MemorySizeMiBU16RONA控制器内存大小,单位 MiB
DeviceInterfaceStringRONA控制器设备接口
SASAddrStringRONA控制器 SAS 地址
SerialNumberStringRONA控制器序列号
HardwareRevisionStringRONA控制器的硬件版本
NVDataVersionStringRONA控制器配置(NVData)版本
PCIeLinkWidthStringRONA控制器的 PCIe 带宽
MaxStripSizeBytesU32RONA控制器支持的最大条带,单位字节
MinStripSizeBytesU32RONA控制器支持的最小条带,单位字节
TemperatureCelsiusS16RONA控制器芯片温度,单位摄氏度,存在零下负温场景
TemperatureAbnormalU8RO0:正常,1:温度获取失败温度异常描述,温度获取失败时置 1
DDREccCountU16RONADDR ECC 计数
UncorrectableParityErrorCountU32RONA控制器内存生命周期内不可纠正奇偶校验错误的数量
ReadCachePercentU8RO0~100控制器的读缓存百分比
CopyBackStateU8RO0:禁用,1:使能指定控制器的回拷功能使能状态
SmarterCopyBackStateU8RO0:禁用,1:使能检测到物理盘 SMART 错误后是否自动进行 Copyback
JBODStateU8RO0:禁用,1:使能控制器的 JBOD 功能状态
JbodSupportedBooleanROtrue/false当前控制器是否支持以直通方式管理硬盘,由系统自动获取,禁止外部设置
NoBatteryWriteCacheEnabledU8RO0:禁用,1:使能控制器的无电池写缓存模式
CachePinnedStateU8RO0:关闭,1:开启控制器的 Cache Pinned 开关
MaintainPDFailHistroryU8RO0:关闭,1:开启是否启用控制器的物理盘故障记忆功能
HotSpareActivationModeStringROFailure/Predictive/Unknown控制器的热备激活模式
BootDevicesString[]RONA控制器的启动设备列表
SupportedBootDeviceCountU8RONARAID 卡支持的启动盘数量
SupportedRAIDTypesString[]RORAID0/RAID1/RAID5/RAID6/RAID10/RAID50/RAID60控制器支持的 RAID 级别
ConfiguredDriveWriteCachePolicyStringROEnabled/Disabled/DefaultRAID 组成员盘的写缓存策略
UnconfiguredDriveWriteCachePolicyStringROEnabled/Disabled/Default非 RAID 组成员盘的写缓存策略
HBADriveWriteCachePolicyStringROEnabled/Disabled/DefaultHBA 模式下硬盘的写缓存策略
CryptoEraseSupportedBooleanROtrue/false驱动器是否支持加密盘数据擦除
EpdSupportedBooleanROtrue/false控制器是否支持启用硬盘模式增强
RefDrivesString[]RONA控制器下挂载的所有硬盘名
SlowDriveDetectionModeU8RW0:关闭,1:开启裸盘、成员盘慢盘检测,2:开启裸盘慢盘检测,3:开启成员盘慢盘检测,0xff:不支持慢盘检测开关模式

返回值与异常 ​

返回值含义触发条件处理建议
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 0

# 恢复出厂设置
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
对象路径/bmc/kepler/Systems/:SystemId/Storage/Controllers/:Id
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明 ​

方法参数说明 ​
方法名入参出参描述
Enablea{ss}qyyu-打开控制器的一致性校验功能。Period:周期(1~1440 小时);Rate:速率;AutoRepairedEnabled:0=不修复,1=自动修复;DelayToStart:推迟启动时间(0~24 小时)
Disablea{ss}-关闭控制器的一致性校验功能
SetParametersa{ss}qyy-设置控制器的一致性校验信息。Period:周期(小时);Rate:速率;AutoRepairedEnabled:自动修复开关
属性参数说明 ​
参数名类型读写取值范围描述
StateU8RO0:禁用,1:使能RAID 控制器一致性校验功能状态
PeriodOfHoursU16RO1~1440RAID 控制器一致性校验周期,单位小时
RateStringROLow/Medium/HighRAID 控制器一致性校验速率
AutoRepairEnabledU8RO0:禁用,1:使能RAID 控制器一致性校验自修复开关
RunningStatusStringRONARAID 控制器一致性校验运行状态
TotalVolumeCountsU16RONA需要校验的逻辑盘总数
CompletedVolumeCountsU16RONA已经完成校验的逻辑盘数量
DelayToStartU32RO0~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
对象路径/bmc/kepler/Systems/:SystemId/Storage/Controllers/:Id
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明 ​

方法参数说明 ​
方法名入参出参描述
CreateVolumeInNewArraya{ss}ayyysuyyyyyyyyyu用全新阵列创建逻辑盘。入参依次为:DriveLists(成员盘 Id 数组)、RaidType、SpanDepth、Name、Capacity、CapacityUnit、StripSize、ReadPolicy、WritePolicy、IOPolicy、AccessPolicy、DiskCachePolicy、InitType、Accelerator;返回任务 ID
CreateVolumeInExisingtArraya{ss}qyyysuyyyyyyyyyu在已有阵列上创建逻辑盘。入参依次为:ArrayId、BlockIndex、RaidType、SpanDepth、Name、Capacity、CapacityUnit、StripSize、ReadPolicy、WritePolicy、IOPolicy、AccessPolicy、DiskCachePolicy、InitType、Accelerator;返回任务 ID
CreateCachecadeVolumea{ss}ayysyquyqyu创建 CacheCade 逻辑盘。入参依次为:DriveLists、RaidType、Name、WritePolicy、ArrayId、Capacity、CapacityUnit、AssociateLd、CacheLineSize;返回任务 ID
DeleteVolumea{ss}qu删除指定逻辑盘。VolumeId:逻辑盘 Id;返回任务 ID
属性参数说明 ​
参数名类型读写取值范围描述
CreateVolumeSupportedBooleanROtrue/false控制器是否支持创建逻辑盘
SupportedReadPolicyListString[]RONoReadAhead/ReadAhead支持设置的逻辑盘读策略列表
DefaultReadPolicyStringRONA默认的逻辑盘读策略
ReadPolicyWritableBooleanROtrue/false是否支持修改逻辑盘读策略
SupportedWritePolicyListString[]ROWriteThrough/WriteBackWithBBU/WriteBack支持设置的逻辑盘写策略列表
DefaultWritePolicyStringRONA默认的逻辑盘写策略
WritePolicyWritableBooleanROtrue/false是否支持修改逻辑盘写策略
SupportedIOPolicyListString[]ROCachedIO/DirectIO支持设置的逻辑盘 IO 策略列表
DefaultIOPolicyStringRONA默认的逻辑盘 IO 策略
IOPolicyWritableBooleanROtrue/false是否支持修改逻辑盘 IO 策略
SupportedAccessPolicyListString[]ROReadWrite/ReadOnly/Blocked支持设置的逻辑盘访问策略列表
DefaultAccessPolicyStringRONA默认的逻辑盘访问策略
AccessPolicyWritableBooleanROtrue/false是否支持修改逻辑盘访问策略
SupportedDriveCachePolicyListString[]ROUnchanged/Enabled/Disabled支持设置的逻辑盘硬盘缓存策略列表
DefaultDriveCachePolicyStringRONA默认的逻辑盘硬盘缓存策略
DriveCachePolicyWritableBooleanROtrue/false是否支持修改逻辑盘硬盘缓存策略

返回值与异常 ​

返回值含义触发条件处理建议
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    -            -
.SetCapacitySize         method    a{ss}uy   -            -
.SetDiskCachePolicy      method    a{ss}y    -            -
.SetIOPolicy             method    a{ss}y    -            -
.SetName                 method    a{ss}s    -            -
.SetReadPolicy           method    a{ss}y    -            -
.SetStripSize            method    a{ss}y    -            -
.SetWritePolicy          method    a{ss}y    -            -
.StartForegroundInit     method    a{ss}y    u            -

功能说明 ​

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

属性内容
接口名bmc.kepler.Systems.Storage.Volume
对象路径/bmc/kepler/Systems/:SystemId/Storage/Controllers/:ControllerId/Volumes/:Id
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明 ​

方法参数说明 ​
方法名入参出参描述
SetNamea{ss}s-设置逻辑盘的名称
SetReadPolicya{ss}y-设置逻辑盘的读策略
SetWritePolicya{ss}y-设置逻辑盘的写策略
SetIOPolicya{ss}y-设置逻辑盘的 IO 策略
SetAccessPolicya{ss}y-设置逻辑盘的访问策略
SetDiskCachePolicya{ss}y-设置逻辑盘的硬盘 Cache 策略
SetBGIEnablea{ss}y-设置逻辑盘的后台初始化。BGIEnabled:0=禁用,1=使能
SetBootablea{ss}y-设置逻辑盘是否启动盘。BootPriority:启动优先级
SetCachecadeEnablea{ss}y-设置 CacheCade 使能状态。AssociateCachecade:0=取消关联,1=关联
SetAcceleratora{ss}y-设置逻辑盘的加速方法
SetCapacitySizea{ss}uy-设置逻辑盘的容量。CapacitySize:容量值;CapacityUnit:容量单位
SetStripSizea{ss}y-设置逻辑盘的条带大小
StartForegroundInita{ss}yu开始前台初始化。InitType:初始化方式;返回任务 ID
CancelForegroundInita{ss}u取消前台初始化,返回任务 ID
属性参数说明 ​
参数名类型读写取值范围描述
IdU16RO每个 RAID 卡下唯一逻辑盘的 Id
VolumeNameStringRONA逻辑盘的名称
StateU8ROOptimal/Degraded/Offline/Failed逻辑盘的状态
RAIDTypeU8RO0/1/5/6/10/50/60逻辑盘的 RAID 级别
CapacityBytesU64RONA逻辑盘的容量,单位字节
MaxResizableSizeBytesU64RONA逻辑盘的最大可设置容量,单位字节
OptimumIOSizeBytesU32RONA逻辑盘的条带大小,单位字节
DefaultReadPolicyStringRONoReadAhead/ReadAhead逻辑盘的默认读策略
CurrentReadPolicyStringRONA逻辑盘当前读策略
DefaultWritePolicyStringROWriteThrough/WriteBackWithBBU/WriteBack逻辑盘的默认写策略
CurrentWritePolicyStringRONA逻辑盘当前写策略
DefaultCachePolicyStringROCachedIO/DirectIO逻辑盘默认的 Cache 策略
CurrentCachePolicyStringRONA逻辑盘当前 Cache 策略
AccessPolicyStringROReadWrite/ReadOnly/Blocked逻辑盘的访问策略
DriveCachePolicyU8ROUnchanged/Enabled/Disabled逻辑盘的硬盘缓存策略
InitializationModeU8ROUnInit/QuickInit/FullInit初始化模式
BootEnableU8RO0:非启动盘,1:启动盘是否为启动盘
BootPriorityU8RONA启动优先级
BGIEnableU8RO0:禁用,1:使能后台初始化使能状态
RebuildStateU8RO0:未重建或重建结束,1:重建中指定逻辑盘数据重建状态
RebuildProgressU8RO0~100指定逻辑盘数据重建进度,单位百分比
CurrentForegroundInitStateU8RO0:未在 FGI 中,1:FGI 中逻辑盘当前是否在前台初始化中
ForegroundInitProgressU8RO0~100逻辑盘当前的前台初始化进度,单位百分比
SSDCachecadeVolumeU8RO0:否,1:是是否为 CacheCade 逻辑盘
SSDCachingEnableU8RO0:否,1:是是否可使用 CacheCade 逻辑盘
AssociatedVolumesU16[]RONA所关联的普通逻辑盘的访问路径
AssociatedCacheCadeVolumeU16[]RONA所关联的 CacheCade 逻辑盘的访问路径
ConsistencyCheckU8RO0:禁用,1:使能一致性检查功能的启用状态
SpanCountU8RONA逻辑盘包含的子组(Span)数
CacheLineSizeKiBU8RONA缓存行大小,单位 KiB
AccelerationMethodStringRONA加速方法
RefControllerIdU8RONA所属控制器的 Id
RefDriveListString[]RONA关联的物理盘列表
RefDiskArrayListU16[]RONA关联的阵列列表
HotSpareDriveListString[]RONA逻辑盘关联的热备盘列表
OSDriveNameStringRONA逻辑盘对应的 OS 盘符

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    -            -
.SetFaultIndicatorState    method    a{ss}y    -            -
.SetFirmwareStatus         method    a{ss}y    -            -
.SetHotspareType           method    a{ss}yq   -            -
.SetLocationIndicatorState method    a{ss}y    -            -
.SetPatrolState            method    a{ss}y    -            -
.SetSlotPowerState         method    a{ss}s    -            -

功能说明 ​

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

属性内容
接口名bmc.kepler.Systems.Storage.Drive
对象路径/bmc/kepler/Systems/:SystemId/Storage/Drives/:Id
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明 ​

方法参数说明 ​
方法名入参出参描述
SetLocationIndicatorStatea{ss}y-设置物理盘的定位灯状态。LocationIndicatorState:0=灭,1=亮
SetFaultIndicatorStatea{ss}y-设置物理盘的故障灯状态。FaultIndicatorState:0=灭,1=亮
SetFirmwareStatusa{ss}y-设置物理盘的固件状态,取值受限于控制器能力
SetHotspareTypea{ss}yq-设置物理盘是否为热备盘。HotspareType:0=None,1=Global,2=Dedicated;VolumeId:专属热备时关联的逻辑盘 Id
SetBootPrioritya{ss}y-设置物理盘的启动优先级
SetPatrolStatea{ss}y-设置物理盘的巡检状态。PatrolState:0=结束巡检,1=开始巡检,255=未知
SetSlotPowerStatea{ss}s-设置物理盘槽位的电源状态。SlotPowerState:上电/下电状态字串
CryptoErasea{ss}-加密擦除物理盘数据,需要控制器支持 CryptoEraseSupported
属性参数说明 ​
参数名类型读写取值范围描述
NodeIdStringRONA资源的唯一 Id
IdU8RO默认 0硬盘 Id,由软件生成
SlotNumberU8RONA硬盘槽位号
NameStringRODisk1、NVMeDisk1 等硬盘名称
DeviceNameStringRONA当前盘的设备名称
PresenceU8RO0:不在位,1:在位硬盘在位状态
CapacityMiBU32RONA硬盘容量,单位 MiB
ModelStringRONA硬盘型号,如 MBF2300RC
ManufacturerStringRONA硬盘厂商
ManufacturerIdU32RONA厂商 Id
SerialNumberStringRONA硬盘序列号
RevisionStringRONA硬盘固件版本
FirmwareStatusU8RO0xFF(255) 表示无效硬盘固件状态
TemperatureCelsiusS16RONA硬盘温度,单位摄氏度,存在零下负温场景
ProtocolU8RO0:Unknown,1:parallel SCSI,2:SAS,3:SATA,4:FC硬盘接口协议类型
MediaTypeU8RO0:HDD,1:SSD,2:SSM,255:Unknown硬盘介质类型
CapableSpeedGbsU8RONA硬盘接口最大速率,单位 Gb/s
NegotiatedSpeedGbsU8RONA硬盘协商速率,单位 Gb/s
PCIeLinkSpeedDoubleRONAPCIe 单个通道的速率
PowerOnHoursDoubleRONA硬盘通电时间,单位小时
RotationSpeedRPMU16RONA硬盘转速,单位 RPM(HDD 有效)
BlockSizeBytesU16RONA硬盘块大小,单位字节
SASAddress1StringRONA硬盘 SAS 地址的第一部分
SASAddress2StringRONA硬盘 SAS 地址的第二部分
PredictedMediaLifeLeftPercentU8RO0~100,255 表示无效硬盘剩余磨损率,即剩余擦写次数的百分比
PredictedFailCountU32RONA硬盘预故障错误统计
MediaErrorCountU32RONA硬盘媒介错误统计
OtherErrorCountU32RONA硬盘其他错误统计
PatrolStateU8RO0:没有巡检或巡检结束,1:巡检中,255:未知硬盘巡检状态
PowerStateU8RO0:非休眠状态,1:休眠状态,2:过渡状态物理盘的节能休眠状态
SlotPowerStateU8RO0:下电,1:上电,255:未知物理盘槽位电源状态
RebuildStateU8RO0:没有重建或重建结束,1:重建中,255:未知硬盘重构状态
RebuildProgressU8RO0~100硬盘重构进度,单位百分比
BootPriorityU8RONA硬盘启动盘优先级
LocationIndicatorStateU8RO0:灭,1:亮硬盘定位状态,根据 locate 寄存器和 fault 寄存器判断
LocateLedU8RONA硬盘 locate 寄存器的值
FaultLedU8RONA硬盘 fault 寄存器的值
HotspareTypeU8RO0:None,1:Global,2:Dedicated硬盘热备状态
FormFactorU8RO0:Unknown,1:5.25 inch,2:3.5 inch,3:2.5 inch,4:1.8 inch,5:Less than 1.8 inch,6:mSATA,7:M.2,8:MicroSSD,9:CFast硬盘尺寸
EnclosureIdU16RONA硬盘所在背板的 Id,由控制器分配
LocationStringRONA当前盘的物理位置
ContainerPhysicalContextStringROFront/Inner/Rear当前硬盘所在背板在机箱中的相对位置(前/中/后)
ResourceIdU8RONA当前盘的资源归属
SystemDiskU8RO0:非系统盘,1:系统盘,默认 255当前盘是否为系统盘
RefControllerIdU8RONA关联的控制器 Id
RefVolumeListU16[]RONA关联的逻辑盘 Id 列表
RefDiskArrayIdU16RONA关联的硬盘阵列 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 ​

硬盘状态子接口,与 Drive 对象挂在同一路径上。

参数名类型读写取值范围描述
HealthU8ROOK/Warning/Critical硬盘健康状态
MissingU16RO0:未丢失,1:丢失硬盘丢失标志
PredictiveFailureU8RO0:无预故障,1:预故障预故障标志
FailureBooleanROtrue/false硬盘是否故障
InAFailedArrayU8RO0:否,1:是是否处于一个故障的硬盘阵列
CapacityErrorBooleanROtrue/false硬盘容量是否异常
FirmwareStatusErrorBooleanROtrue/false硬盘固件状态是否异常

bmc.kepler.Systems.Storage.Drive.DriveSubHealth ​

硬盘亚健康子接口,用于承载 SSD/NVMe 盘的亚健康诊断数据。

参数名类型读写取值范围描述
EstimatedRemainingLifespanInsufficientU8RO0:充足,1:不足硬盘预估剩余寿命不足标志
EstimatedRemainingLifespanU32RONA硬盘预估剩余寿命
SLCSpareBlockPercentageU8RO0~100非用户区剩余冗余块百分比
TLCSpareBlockPercentageU8RO0~100用户区剩余冗余块百分比
IODeteriorationHealthCodeU16RONA硬盘 IO 性能健康码
FailurePredictedBooleanRWtrue:发生预测性故障,false:未发生预测性故障硬盘是否发生预测性故障

bmc.kepler.Systems.Storage.Drive.NVMe ​

NVMe 盘专用子接口,提供寿命信息与标准 NVMe-MI 命令通道。

参数名类型读写取值范围描述
LifeUsedPercentageU8RO0~100驱动器寿命已使用百分比
方法参数说明 ​
方法名入参出参描述
GetSmartInfoa{ss}qay通过标准 NVMe-MI 协议获取 SMART/Health Information。Vendor:厂商 Id
SendNvmeMICommanda{ss}yuuayyuay按照标准 NVMe-MI 协议发送 NVMe-MI Command 格式命令。Opcode:命令操作码;Dword0/Dword1:命令双字;RequestData:请求数据。响应:Status、NVMeResponse、ResponseData
GetTelemetryDataa{ss}su通过标准 NVMe-MI 协议获取 Telemetry Host/Controller-initiated 数据,返回任务 ID
GetIdentifyDataa{ss}yay通过标准 NVMe-MI 协议获取 Identify command 信息。CNSValue:CNS 值

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

NVMe SMART 信息子接口。

参数名类型读写取值范围描述
AvailableSpareU8RO0~100驱动器可用冗余空间的百分比
CriticalWarningU8RObit0~bit5控制器状态的重要告警位图。bit0:冗余空间小于设定阈值;bit1:温度超过或低于重要阈值;bit2:介质错误导致可靠性降低;bit3:介质被置为只读模式;bit4:控制器易失性器件失效;bit5~7:保留
UsedPercentageU8RO0~100用户实际使用与厂家设定器件寿命的百分比
StatusU8RONASMART 告警状态

bmc.kepler.Systems.Storage.Drive.AddrInfo ​

硬盘地址信息子接口,描述硬盘的拓扑位置。

参数名类型读写取值范围描述
TypeStringRONA硬盘的丝印类型
SocketIdU8RONA硬盘的 CPU 归属
SlotIdU8RONA硬盘的槽位号
PortIdU8RONA硬盘的端口号
RootBDFStringRONA硬盘的 BDF

bmc.kepler.Systems.Storage.Drive.Diagnose ​

硬盘诊断数据子接口。

方法参数说明 ​
方法名入参出参描述
CollectDiagnoseDataa{ss}asu通过指定信息收集硬盘诊断数据,返回任务 ID
GetDiagnoseDataa{ss}asa{ss}根据指定信息获取不同的硬盘诊断数据

bmc.kepler.Systems.Storage.Drive.SAS.SMART ​

SAS 盘 SMART 信息子接口。

参数名类型读写取值范围描述
StripTemperatureCelsiusU32RONA驱动器条带温度,单位摄氏度
ElementsInGrownDefectListU32RONA增长缺陷列表(G 表)中的元素个数
ElementsInPrimaryDefectListU32RONA主缺陷列表(P 表)中的元素个数
ManufacturedInWeekOfYearStringRONA生产日期:年中周
BlocksSentToInitiatorU32RONA发送到启动器的块数
BlocksReceivedFromInitiatorU32RONA从启动器收到的块数
UntilNextInterSMARTTestMinutesU32RONA距下一次内部 SMART 测试的时长,单位分钟
LastPrefailEventSeqNumU32RONA最后一次预测故障事件的序列号

bmc.kepler.Systems.Storage.Drive.SATA.SMART ​

SATA 盘 SMART 信息子接口。

参数名类型读写取值范围描述
AttributeRevisionU32RONASMART 属性修订版本号
AttributeRevisionNumberU8RONASMART 属性条目数量
AttributeItemListArrayRONASMART 属性项列表

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            -
.DumpLog                          method    a{ss}ss   u            -
.GetDrivesSubHealthDiagInfo       method    a{ss}s    aa{ua{ss}}   -
.GetNvmeDriveCount                method    a{ss}     q            -
.GetNvmeDriveRawData              method    a{ss}q    s            -
.SetDriveSubHealthDiagResult      method    a{ss}as   -            -
.StartCollectLog                  method    a{ss}s    -            -
.MaxTemperatureCelsius            property  y         40           emits-change
.LogAutoCollectEnable             property  b         true         emits-change writable
.LogAutoCollectInterval           property  y         24           emits-change writable

功能说明 ​

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

属性内容
接口名bmc.kepler.Systems.Storage.Drives
对象路径/bmc/kepler/Systems/:SystemId/Storage/Drives
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明 ​

方法参数说明 ​
方法名入参出参描述
CollectIODeteriorationDiagInfoa{ss}u设置启动收集硬盘 IO 性能诊断信息,返回任务 ID
GetDrivesSubHealthDiagInfoa{ss}saa{ua{ss}}获取硬盘亚健康诊断信息列表。SubHealthType:亚健康类型
SetDriveSubHealthDiagResulta{ss}as-设置硬盘 IO 性能健康码。SubHealthDiagResult:诊断结果数组
StartCollectLoga{ss}s-手动触发收集硬盘日志。DriveName:硬盘名称
DumpLoga{ss}ssu导出硬盘日志。DriveName:硬盘名称;OutputFilePath:导出文件路径;返回任务 ID
GetNvmeDriveRawDataa{ss}qs获取 NVMe 盘的信息。index:NVMe 盘索引
GetNvmeDriveCounta{ss}q获取 NVMe 盘的数量
属性参数说明 ​
参数名类型读写取值范围描述
MaxTemperatureCelsiusU8RONA驱动器最高温度,单位摄氏度,用于风扇调速
LogAutoCollectEnableBooleanRWtrue/false硬盘日志自动收集开启状态
LogAutoCollectIntervalU8RWNA硬盘日志自动收集周期,单位小时

2.10 磁盘阵列 ​

功能说明 ​

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

属性内容
接口名bmc.kepler.Systems.Storage.DiskArray
对象路径/bmc/kepler/Systems/:SystemId/Storage/Controllers/:ControllerId/DiskArrays/:Id
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明 ​

属性参数说明 ​
参数名类型读写取值范围描述
IdU16RO每个 RAID 卡下唯一RAID 组的序号,由 RAID 卡读到
RAIDTypeStringRONA驱动器阵列组成的虚拟磁盘的级别
UsedSpaceMiBU32RONARAID 组的已使用空间,单位 MiB
TotalFreeSpaceMiBU32RONARAID 组的空闲空间,单位 MiB
FreeBlocksSpaceMiBU32[]RONARAID 组的空闲块容量列表,单位 MiB
AverageDriveFreeSpaceMiBU32RONA阵列中每个驱动器的剩余容量,单位 MiB
DriveNumPerSpanU8RONA阵列中每个 Span 的成员盘个数
RefControllerIdU8RONARAID 组关联的控制器 Id
RefVolumesU16[]RONARAID 组关联的逻辑盘 Id 列表,如 [145, 144]
RefDrivesString[]RONARAID 组关联的物理盘列表,如 [Disk0, Disk1]

2.11 超级电容(BBU) ​

功能说明 ​

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

属性内容
接口名bmc.kepler.Systems.Storage.Battery
对象路径/bmc/kepler/Systems/:SystemId/Storage/Controllers/:Id/Battery
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明 ​

属性参数说明 ​
参数名类型读写取值范围描述
NameStringRONABBU 名称
StateU8RONABBU 在位信息
HealthU8RONABBU 健康状态
FaultU8RONABBU 故障标志
HealthStatusU32RObit0~bit6 位图BBU 健康状态位图。bit0:电压过低;bit1:需要更换 BBU;bit2:电量校准失败;bit3:电量校准超时;bit4:预故障;bit5:剩余容量低;bit6:没有用于缓存卸载的空间;其余位保留
TemperatureCelsiusS16RONABBU 温度,单位摄氏度

2.12 控制器状态子接口 ​

bmc.kepler.Systems.Storage.Controller.ControllerStatus ​

参数名类型读写取值范围描述
HealthU8RONA控制器健康状态
FaultCodeU16RO位域,每一位代表一种故障控制器的故障码
CommunicationLossU8RO0:正常,1:通信丢失控制器通信丢失标志
FaultCodeByBiosU8RO0:正常,非 0:故障BIOS 上报的硬件故障错误码

bmc.kepler.Systems.Storage.Controller.BatteryStatus ​

参数名类型读写取值范围描述
BatteryPresenceU8RONA控制器下挂载的电池在位信息
BatteryFaultU8RONA控制器下挂载的电池故障信息
BatteryHealthU8RONA控制器下挂载的电池健康信息

bmc.kepler.Systems.Storage.Controller.Driver ​

参数名类型读写取值范围描述
NameStringRONA控制器驱动器名称,依赖 BMA 带内上报
VersionStringRONA控制器驱动器版本,依赖 BMA 带内上报

bmc.kepler.Systems.Storage.Controller.Chip ​

参数名类型读写取值范围描述
ModelStringRONARAID 卡芯片型号,来自 CSR 配置
ChipManufacturerStringRONARAID 卡芯片厂商,来自 CSR 配置

2.13 SAS PHY 误码 ​

功能说明 ​

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

属性内容
接口名bmc.kepler.Systems.Storage.PhyError
对象路径/bmc/kepler/Systems/:SystemId/Storage/Controllers/:Id/SASPhy/:PhyId
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明 ​

属性参数说明 ​
参数名类型读写取值范围描述
PhyIdU8RO每个 RAID 卡下唯一PHY 误码 Id
InvalidDwordCountU32RONA无效 DWORD 数
LossDwordSyncCountU32RONA丢失 DWORD 同步数
PhyResetProblemCountU32RONAPHY 重启问题数
RunningDisparityErrorCountU32RONA连续不均衡性错误数

2.14 SAS 端口统计 ​

功能说明 ​

按控制器端口维度统计 SAS 链路的误码信息。

属性内容
接口名bmc.kepler.Systems.Storage.SASMetrics
对象路径/bmc/kepler/Systems/:SystemId/Storage/Controllers/:ControllerId/Ports/:Id
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明 ​

属性参数说明 ​
参数名类型读写取值范围描述
ControllerIdU8RONA关联的控制器序号
InvalidDwordCountU32RONA无效 DWORD 数
LossDwordSyncCountU32RONA丢失 DWORD 同步数
PhyResetProblemCountU32RONAPHY 重启问题数
RunningDisparityErrorCountU32RONA连续不均衡性错误数

2.15 磁盘分区 ​

功能说明 ​

管理通过 BMA 带内通道上报的 OS 磁盘分区信息。

属性内容
接口名bmc.kepler.Systems.Storage.DiskPartition
对象路径/bmc/kepler/Systems/:SystemId/Storage/DiskPartitions/:Id
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明 ​

属性参数说明 ​
参数名类型读写取值范围描述
NameStringRONAOS 盘符
UsageU8RO0~100磁盘分区利用率,单位百分比
TotalCapacityGiBDoubleRONA硬盘分区总容量,单位 GiB
UsedCapacityGiBDoubleRONA硬盘分区当前使用容量,单位 GiB

2.16 复制盘 ​

功能说明 ​

记录硬盘替换场景下复制后的硬盘信息,用于拔盘替换后的信息比对。

属性内容
接口名bmc.kepler.Systems.Storage.ReplicaDrive
对象路径/bmc/kepler/Systems/:SystemId/Storage/ReplicaDrives/:Id
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明 ​

属性参数说明 ​
参数名类型读写取值范围描述
IdU8RONA复制后的硬盘编号
SerialNumberStringRONA复制后的硬盘序列号
TemperatureCelsiusU8RONA复制后的硬盘温度,单位摄氏度

2.17 存储设置 ​

功能说明 ​

提供机箱维度的存储策略设置,当前用于配置 SSD 盘剩余磨损率告警阈值。

属性内容
接口名bmc.kepler.Chassis.Storage.StorageSetting
对象路径/bmc/kepler/Chassis/:ChassisId/Storage
首发版本openUBMC 1.0.0
废弃状态正常可用

参数说明 ​

属性参数说明 ​
参数名类型读写取值范围描述
SSDMediaLifeLeftPercentThresholdU8RW0~100SSD 盘剩余磨损率告警阈值,单位百分比

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获取硬盘上下电状态
GetDiskSilk—get_disk_silk获取硬盘丝印信息
GetRaidControllerTemp—get_raid_controller_temp获取控制器温度
GetDiskManufacturer—get_manufacturer获取硬盘厂商信息
GetLogAutoCollectConfig—get_log_auto_collect_config获取日志自动收集配置
GetSlotPowerState—get_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设置逻辑盘启动使能
SetControllerCopyback—set_controller_copyback设置回拷使能
SetControllerSmarterCopyback—set_controller_smarter_copyback设置 SMART 回拷使能
SetControllerRestoreSettings—set_controller_restore_settings恢复出厂设置
SetControllerJbod—set_controller_jbod设置 JBOD 使能
SetControllerOutofband—set_controller_outofband设置带外管理使能
SetHotspareType—set_hotspare_type设置物理盘热备类型
SetFirmwareStatus—set_firmware_status设置物理盘固件状态
SetLocationIndicatorState—set_location_indicator_state设置物理盘定位灯
SetFaultIndicatorState—set_fault_indicator_state设置物理盘故障灯
SetRaidFaultStatus—set_raid_fault_status设置 RAID 故障状态
SetPdLogCollect—set_pd_log_collect触发硬盘日志收集
SetPCHDiskInfo—set_pch_disk_info设置 PCH 硬盘信息
SetLogAutoCollectConfig—set_log_auto_collect_config设置日志自动收集配置
StartDriveCollectLog—start_drive_collect_log启动硬盘日志收集
SetSlotPowerState—set_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_ComVPD 和 VirtualVPDConnect 对象
  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_UPDATE、Disk%s add、ctrl%s add_controller_to_sml successfully
info补充信息Controller %s add new volume list、Restore drive info
warn警告—
error异常/错误I2C_READ_WRITE_FAILED、get_ctrl_pd_list failed、Invalid TypeId
debug调试信息controller%s start s.ctl_info %s times、pd_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. 检查 OOBSupport:OOBSupport=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—物理盘已被使用
0x1448—CacheCade 需使用 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