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 关键术语表 术语 解释 SML Storage Management Library,RAID 卡管理库,通过 I2C 或 MCTP 与 RAID 卡通信 BMA Board Management Agent,主机侧代理,将主机端信息通过带内通道推送给 BMC PD Physical Drive,RAID 控制器下属的轻量物理盘对象,通过 SML 操作物理盘 Drive 统一物理盘模型,RAID 盘与 NVMe 盘共用,承载完整的物理盘属性和操作 Volume 逻辑盘对象,代表 RAID 控制器创建的逻辑磁盘 DiskArray 磁盘阵列对象,代表 RAID 控制器下的磁盘组 CacheCade SSD 缓存加速技术,使用 SSD 作为机械硬盘的读写缓存 JBOD Just a Bunch Of Disks,磁盘直通模式,不经过 RAID 控制器 BBU Battery 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 废弃状态 正常可用
参数说明 属性参数说明 参数名 类型 读写 取值范围 描述 StorageConfigReady U8 RO 0:未就绪,1:就绪 用于控制器配置导入导出场景,标志所有控制器的状态 VolumesStateAbnormal U8 RO 0:否,1:是 是否存在状态异常的逻辑盘 DiskPartitionUsagePercentageThreshold U8 RW 0~100 磁盘分区占用率告警阈值,单位百分比,默认 100
返回值与异常 返回值 含义 触发条件 处理建议 0 成功 正常执行完成 无 非 0 失败 权限不足或状态异常 检查组件状态
应用场景 配置导入导出时检查控制器就绪状态 监控逻辑盘状态异常告警 设置磁盘分区占用率告警阈值 调试示例 bash
busctl --user get-property bmc.kepler.storage /bmc/kepler/Systems/1/Storage \
bmc.kepler.Systems.Storage.StorageConfig StorageConfigReady
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 废弃状态 正常可用
参数说明 属性参数说明 参数名 类型 读写 取值范围 描述 PhyErrorEnabled Boolean RW true/false PHY 误码诊断使能 PhyErrorInterval U32 RW 单位秒,默认 1800 PHY 误码数据采集的时间间隔 PhyErrorMaxRecord U8 RW 默认 20 PHY 误码在一个 OS 启动周期内记录的最大条数(有增长的记录) PhyErrorThreshold U32 RW 单位 dwordcount/s,默认 100 PHY 误码单位时间增长过快的判断门限值 MaxPhyErrorLogFileRotationCount U8 RW 默认 10 PHY 误码循环记录的最大文件数 PhyErrorSelUnlimitFlag Boolean RW 默认 false PHY 误码是否允许产生多个 SEL 告警事件
返回值与异常 返回值 含义 触发条件 处理建议 0 成功 正常执行完成 无 非 0 失败 参数非法 检查参数取值范围
应用场景 SAS PHY 误码采集与分析 PHY 层链路质量监控 物理层故障预警 调试示例 bash
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 废弃状态 正常可用
参数说明 方法参数说明 方法名 入参 出参 描述 SetWorkMode a{ss}yy - 设置控制器的工作模式。Mode:0=RAID,1=HBA,2=JBOD,3=MIXED;ProfileId:取值为 0 SetCopybackState a{ss}y - 设置控制器的回拷功能。State:0=禁用,1=使能 SetSmarterCopyBackState a{ss}y - 设置 RAID 控制器在检测到物理盘 SMART 错误之后是否自动进行 Copyback。State:0=禁用,1=使能 SetJBODState a{ss}y - 设置控制器的 JBOD 功能状态。State:0=禁用,1=使能 SetBootDevices a{ss}ss - 设置控制器的启动盘设备。PriorityDriveName:主启动盘名称;SecondaryDriveName:备启动盘名称 SetBootDevicesV2 a{ss}as - 批量设置启动盘。BootDevices:设备名称数组,设备按数组顺序表示优先级 RestoreDefaultSettings a{ss} - 恢复控制器的默认配置 ClearForeignConfig a{ss} - 一键清除外部配置 ImportForeignConfig a{ss} - 一键导入外部配置 SetMaintainPDFailHistoryState a{ss}y - 设置 RAID 卡硬盘故障记忆功能的开启或关闭。State:0=关闭,1=开启 SetNoBatteryWriteCache a{ss}y - 设置控制器无电池写缓存状态。NoBatteryWriteCacheEnabled:0=禁用,1=使能 SetReadCachePercent a{ss}y - 设置控制器读缓存百分比。ReadCachePercent:0~100 SetWriteCachePolicy a{ss}ss - 设置控制器写缓存策略。Type:策略类型;WriteCachePolicy:Enabled/Disabled/Default DumpLog a{ss} u 收集 RAID 控制器信息。返回任务 ID
属性参数说明 参数名 类型 读写 取值范围 描述 Id U8 RO 默认 0xFF 控制器 Id,由软件生成 Type String RO NA 控制器类型 Name String RO NA 控制器名称 TypeId U8 RO NA 控制器的类型 Id,与控制器型号一一对应 DeviceName String RO NA 对应的 PCIeDevice 的设备名 BOMNumber String RO NA BOM 编码 Position String RO NA 对应的 PCIeDevice 的位置 OOBSupport U8 RO 0:不支持带外,1:支持带外 是否支持带外管理,不支持时控制器信息依赖 CSR 静态配置 FirmwareVersion String RO NA 控制器固件版本 WorkMode String RO RAID/HBA/JBOD/MIXED 控制器的工作模式 SupportedMode String[] RO NA 控制器支持的工作模式列表 MemorySizeMiB U16 RO NA 控制器内存大小,单位 MiB DeviceInterface String RO NA 控制器设备接口 SASAddr String RO NA 控制器 SAS 地址 SerialNumber String RO NA 控制器序列号 HardwareRevision String RO NA 控制器的硬件版本 NVDataVersion String RO NA 控制器配置(NVData)版本 PCIeLinkWidth String RO NA 控制器的 PCIe 带宽 MaxStripSizeBytes U32 RO NA 控制器支持的最大条带,单位字节 MinStripSizeBytes U32 RO NA 控制器支持的最小条带,单位字节 TemperatureCelsius S16 RO NA 控制器芯片温度,单位摄氏度,存在零下负温场景 TemperatureAbnormal U8 RO 0:正常,1:温度获取失败 温度异常描述,温度获取失败时置 1 DDREccCount U16 RO NA DDR ECC 计数 UncorrectableParityErrorCount U32 RO NA 控制器内存生命周期内不可纠正奇偶校验错误的数量 ReadCachePercent U8 RO 0~100 控制器的读缓存百分比 CopyBackState U8 RO 0:禁用,1:使能 指定控制器的回拷功能使能状态 SmarterCopyBackState U8 RO 0:禁用,1:使能 检测到物理盘 SMART 错误后是否自动进行 Copyback JBODState U8 RO 0:禁用,1:使能 控制器的 JBOD 功能状态 JbodSupported Boolean RO true/false 当前控制器是否支持以直通方式管理硬盘,由系统自动获取,禁止外部设置 NoBatteryWriteCacheEnabled U8 RO 0:禁用,1:使能 控制器的无电池写缓存模式 CachePinnedState U8 RO 0:关闭,1:开启 控制器的 Cache Pinned 开关 MaintainPDFailHistrory U8 RO 0:关闭,1:开启 是否启用控制器的物理盘故障记忆功能 HotSpareActivationMode String RO Failure/Predictive/Unknown 控制器的热备激活模式 BootDevices String[] RO NA 控制器的启动设备列表 SupportedBootDeviceCount U8 RO NA RAID 卡支持的启动盘数量 SupportedRAIDTypes String[] RO RAID0/RAID1/RAID5/RAID6/RAID10/RAID50/RAID60 控制器支持的 RAID 级别 ConfiguredDriveWriteCachePolicy String RO Enabled/Disabled/Default RAID 组成员盘的写缓存策略 UnconfiguredDriveWriteCachePolicy String RO Enabled/Disabled/Default 非 RAID 组成员盘的写缓存策略 HBADriveWriteCachePolicy String RO Enabled/Disabled/Default HBA 模式下硬盘的写缓存策略 CryptoEraseSupported Boolean RO true/false 驱动器是否支持加密盘数据擦除 EpdSupported Boolean RO true/false 控制器是否支持启用硬盘模式增强 RefDrives String[] RO NA 控制器下挂载的所有硬盘名 SlowDriveDetectionMode U8 RW 0:关闭,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
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 废弃状态 正常可用
参数说明 方法参数说明 方法名 入参 出参 描述 Enable a{ss}qyyu - 打开控制器的一致性校验功能。Period:周期(1~1440 小时);Rate:速率;AutoRepairedEnabled:0=不修复,1=自动修复;DelayToStart:推迟启动时间(0~24 小时) Disable a{ss} - 关闭控制器的一致性校验功能 SetParameters a{ss}qyy - 设置控制器的一致性校验信息。Period:周期(小时);Rate:速率;AutoRepairedEnabled:自动修复开关
属性参数说明 参数名 类型 读写 取值范围 描述 State U8 RO 0:禁用,1:使能 RAID 控制器一致性校验功能状态 PeriodOfHours U16 RO 1~1440 RAID 控制器一致性校验周期,单位小时 Rate String RO Low/Medium/High RAID 控制器一致性校验速率 AutoRepairEnabled U8 RO 0:禁用,1:使能 RAID 控制器一致性校验自修复开关 RunningStatus String RO NA RAID 控制器一致性校验运行状态 TotalVolumeCounts U16 RO NA 需要校验的逻辑盘总数 CompletedVolumeCounts U16 RO NA 已经完成校验的逻辑盘数量 DelayToStart U32 RO 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 对象路径 /bmc/kepler/Systems/:SystemId/Storage/Controllers/:Id 首发版本 openUBMC 1.0.0 废弃状态 正常可用
参数说明 方法参数说明 方法名 入参 出参 描述 CreateVolumeInNewArray a{ss}ayyysuyyyyyyyyy u 用全新阵列创建逻辑盘。入参依次为:DriveLists(成员盘 Id 数组)、RaidType、SpanDepth、Name、Capacity、CapacityUnit、StripSize、ReadPolicy、WritePolicy、IOPolicy、AccessPolicy、DiskCachePolicy、InitType、Accelerator;返回任务 ID CreateVolumeInExisingtArray a{ss}qyyysuyyyyyyyyy u 在已有阵列上创建逻辑盘。入参依次为:ArrayId、BlockIndex、RaidType、SpanDepth、Name、Capacity、CapacityUnit、StripSize、ReadPolicy、WritePolicy、IOPolicy、AccessPolicy、DiskCachePolicy、InitType、Accelerator;返回任务 ID CreateCachecadeVolume a{ss}ayysyquyqy u 创建 CacheCade 逻辑盘。入参依次为:DriveLists、RaidType、Name、WritePolicy、ArrayId、Capacity、CapacityUnit、AssociateLd、CacheLineSize;返回任务 ID DeleteVolume a{ss}q u 删除指定逻辑盘。VolumeId:逻辑盘 Id;返回任务 ID
属性参数说明 参数名 类型 读写 取值范围 描述 CreateVolumeSupported Boolean RO true/false 控制器是否支持创建逻辑盘 SupportedReadPolicyList String[] RO NoReadAhead/ReadAhead 支持设置的逻辑盘读策略列表 DefaultReadPolicy String RO NA 默认的逻辑盘读策略 ReadPolicyWritable Boolean RO true/false 是否支持修改逻辑盘读策略 SupportedWritePolicyList String[] RO WriteThrough/WriteBackWithBBU/WriteBack 支持设置的逻辑盘写策略列表 DefaultWritePolicy String RO NA 默认的逻辑盘写策略 WritePolicyWritable Boolean RO true/false 是否支持修改逻辑盘写策略 SupportedIOPolicyList String[] RO CachedIO/DirectIO 支持设置的逻辑盘 IO 策略列表 DefaultIOPolicy String RO NA 默认的逻辑盘 IO 策略 IOPolicyWritable Boolean RO true/false 是否支持修改逻辑盘 IO 策略 SupportedAccessPolicyList String[] RO ReadWrite/ReadOnly/Blocked 支持设置的逻辑盘访问策略列表 DefaultAccessPolicy String RO NA 默认的逻辑盘访问策略 AccessPolicyWritable Boolean RO true/false 是否支持修改逻辑盘访问策略 SupportedDriveCachePolicyList String[] RO Unchanged/Enabled/Disabled 支持设置的逻辑盘硬盘缓存策略列表 DefaultDriveCachePolicy String RO NA 默认的逻辑盘硬盘缓存策略 DriveCachePolicyWritable Boolean RO true/false 是否支持修改逻辑盘硬盘缓存策略
返回值与异常 返回值 含义 触发条件 处理建议 0 成功 正常执行完成 无 非 0 失败 RAID 级别不支持、容量超限、成员盘不足 检查控制器能力和参数
应用场景 创建不同 RAID 级别的逻辑盘 创建 CacheCade SSD 缓存加速逻辑盘 删除不再使用的逻辑盘 限制条件 创建逻辑盘需要足够的可用物理盘 删除逻辑盘会导致数据丢失,操作不可逆 CacheCade 逻辑盘需要控制器支持且存在 SSD 盘 调试示例 bash
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 废弃状态 正常可用
参数说明 方法参数说明 方法名 入参 出参 描述 SetName a{ss}s - 设置逻辑盘的名称 SetReadPolicy a{ss}y - 设置逻辑盘的读策略 SetWritePolicy a{ss}y - 设置逻辑盘的写策略 SetIOPolicy a{ss}y - 设置逻辑盘的 IO 策略 SetAccessPolicy a{ss}y - 设置逻辑盘的访问策略 SetDiskCachePolicy a{ss}y - 设置逻辑盘的硬盘 Cache 策略 SetBGIEnable a{ss}y - 设置逻辑盘的后台初始化。BGIEnabled:0=禁用,1=使能 SetBootable a{ss}y - 设置逻辑盘是否启动盘。BootPriority:启动优先级 SetCachecadeEnable a{ss}y - 设置 CacheCade 使能状态。AssociateCachecade:0=取消关联,1=关联 SetAccelerator a{ss}y - 设置逻辑盘的加速方法 SetCapacitySize a{ss}uy - 设置逻辑盘的容量。CapacitySize:容量值;CapacityUnit:容量单位 SetStripSize a{ss}y - 设置逻辑盘的条带大小 StartForegroundInit a{ss}y u 开始前台初始化。InitType:初始化方式;返回任务 ID CancelForegroundInit a{ss} u 取消前台初始化,返回任务 ID
属性参数说明 参数名 类型 读写 取值范围 描述 Id U16 RO 每个 RAID 卡下唯一 逻辑盘的 Id VolumeName String RO NA 逻辑盘的名称 State U8 RO Optimal/Degraded/Offline/Failed 逻辑盘的状态 RAIDType U8 RO 0/1/5/6/10/50/60 逻辑盘的 RAID 级别 CapacityBytes U64 RO NA 逻辑盘的容量,单位字节 MaxResizableSizeBytes U64 RO NA 逻辑盘的最大可设置容量,单位字节 OptimumIOSizeBytes U32 RO NA 逻辑盘的条带大小,单位字节 DefaultReadPolicy String RO NoReadAhead/ReadAhead 逻辑盘的默认读策略 CurrentReadPolicy String RO NA 逻辑盘当前读策略 DefaultWritePolicy String RO WriteThrough/WriteBackWithBBU/WriteBack 逻辑盘的默认写策略 CurrentWritePolicy String RO NA 逻辑盘当前写策略 DefaultCachePolicy String RO CachedIO/DirectIO 逻辑盘默认的 Cache 策略 CurrentCachePolicy String RO NA 逻辑盘当前 Cache 策略 AccessPolicy String RO ReadWrite/ReadOnly/Blocked 逻辑盘的访问策略 DriveCachePolicy U8 RO Unchanged/Enabled/Disabled 逻辑盘的硬盘缓存策略 InitializationMode U8 RO UnInit/QuickInit/FullInit 初始化模式 BootEnable U8 RO 0:非启动盘,1:启动盘 是否为启动盘 BootPriority U8 RO NA 启动优先级 BGIEnable U8 RO 0:禁用,1:使能 后台初始化使能状态 RebuildState U8 RO 0:未重建或重建结束,1:重建中 指定逻辑盘数据重建状态 RebuildProgress U8 RO 0~100 指定逻辑盘数据重建进度,单位百分比 CurrentForegroundInitState U8 RO 0:未在 FGI 中,1:FGI 中 逻辑盘当前是否在前台初始化中 ForegroundInitProgress U8 RO 0~100 逻辑盘当前的前台初始化进度,单位百分比 SSDCachecadeVolume U8 RO 0:否,1:是 是否为 CacheCade 逻辑盘 SSDCachingEnable U8 RO 0:否,1:是 是否可使用 CacheCade 逻辑盘 AssociatedVolumes U16[] RO NA 所关联的普通逻辑盘的访问路径 AssociatedCacheCadeVolume U16[] RO NA 所关联的 CacheCade 逻辑盘的访问路径 ConsistencyCheck U8 RO 0:禁用,1:使能 一致性检查功能的启用状态 SpanCount U8 RO NA 逻辑盘包含的子组(Span)数 CacheLineSizeKiB U8 RO NA 缓存行大小,单位 KiB AccelerationMethod String RO NA 加速方法 RefControllerId U8 RO NA 所属控制器的 Id RefDriveList String[] RO NA 关联的物理盘列表 RefDiskArrayList U16[] RO NA 关联的阵列列表 HotSpareDriveList String[] RO NA 逻辑盘关联的热备盘列表 OSDriveName String RO NA 逻辑盘对应的 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 废弃状态 正常可用
参数说明 方法参数说明 方法名 入参 出参 描述 SetLocationIndicatorState a{ss}y - 设置物理盘的定位灯状态。LocationIndicatorState:0=灭,1=亮 SetFaultIndicatorState a{ss}y - 设置物理盘的故障灯状态。FaultIndicatorState:0=灭,1=亮 SetFirmwareStatus a{ss}y - 设置物理盘的固件状态,取值受限于控制器能力 SetHotspareType a{ss}yq - 设置物理盘是否为热备盘。HotspareType:0=None,1=Global,2=Dedicated;VolumeId:专属热备时关联的逻辑盘 Id SetBootPriority a{ss}y - 设置物理盘的启动优先级 SetPatrolState a{ss}y - 设置物理盘的巡检状态。PatrolState:0=结束巡检,1=开始巡检,255=未知 SetSlotPowerState a{ss}s - 设置物理盘槽位的电源状态。SlotPowerState:上电/下电状态字串 CryptoErase a{ss} - 加密擦除物理盘数据,需要控制器支持 CryptoEraseSupported
属性参数说明 参数名 类型 读写 取值范围 描述 NodeId String RO NA 资源的唯一 Id Id U8 RO 默认 0 硬盘 Id,由软件生成 SlotNumber U8 RO NA 硬盘槽位号 Name String RO Disk1、NVMeDisk1 等 硬盘名称 DeviceName String RO NA 当前盘的设备名称 Presence U8 RO 0:不在位,1:在位 硬盘在位状态 CapacityMiB U32 RO NA 硬盘容量,单位 MiB Model String RO NA 硬盘型号,如 MBF2300RC Manufacturer String RO NA 硬盘厂商 ManufacturerId U32 RO NA 厂商 Id SerialNumber String RO NA 硬盘序列号 Revision String RO NA 硬盘固件版本 FirmwareStatus U8 RO 0xFF(255) 表示无效 硬盘固件状态 TemperatureCelsius S16 RO NA 硬盘温度,单位摄氏度,存在零下负温场景 Protocol U8 RO 0:Unknown,1:parallel SCSI,2:SAS,3:SATA,4:FC 硬盘接口协议类型 MediaType U8 RO 0:HDD,1:SSD,2:SSM,255:Unknown 硬盘介质类型 CapableSpeedGbs U8 RO NA 硬盘接口最大速率,单位 Gb/s NegotiatedSpeedGbs U8 RO NA 硬盘协商速率,单位 Gb/s PCIeLinkSpeed Double RO NA PCIe 单个通道的速率 PowerOnHours Double RO NA 硬盘通电时间,单位小时 RotationSpeedRPM U16 RO NA 硬盘转速,单位 RPM(HDD 有效) BlockSizeBytes U16 RO NA 硬盘块大小,单位字节 SASAddress1 String RO NA 硬盘 SAS 地址的第一部分 SASAddress2 String RO NA 硬盘 SAS 地址的第二部分 PredictedMediaLifeLeftPercent U8 RO 0~100,255 表示无效 硬盘剩余磨损率,即剩余擦写次数的百分比 PredictedFailCount U32 RO NA 硬盘预故障错误统计 MediaErrorCount U32 RO NA 硬盘媒介错误统计 OtherErrorCount U32 RO NA 硬盘其他错误统计 PatrolState U8 RO 0:没有巡检或巡检结束,1:巡检中,255:未知 硬盘巡检状态 PowerState U8 RO 0:非休眠状态,1:休眠状态,2:过渡状态 物理盘的节能休眠状态 SlotPowerState U8 RO 0:下电,1:上电,255:未知 物理盘槽位电源状态 RebuildState U8 RO 0:没有重建或重建结束,1:重建中,255:未知 硬盘重构状态 RebuildProgress U8 RO 0~100 硬盘重构进度,单位百分比 BootPriority U8 RO NA 硬盘启动盘优先级 LocationIndicatorState U8 RO 0:灭,1:亮 硬盘定位状态,根据 locate 寄存器和 fault 寄存器判断 LocateLed U8 RO NA 硬盘 locate 寄存器的值 FaultLed U8 RO NA 硬盘 fault 寄存器的值 HotspareType U8 RO 0:None,1:Global,2:Dedicated 硬盘热备状态 FormFactor U8 RO 0: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 硬盘尺寸 EnclosureId U16 RO NA 硬盘所在背板的 Id,由控制器分配 Location String RO NA 当前盘的物理位置 ContainerPhysicalContext String RO Front/Inner/Rear 当前硬盘所在背板在机箱中的相对位置(前/中/后) ResourceId U8 RO NA 当前盘的资源归属 SystemDisk U8 RO 0:非系统盘,1:系统盘,默认 255 当前盘是否为系统盘 RefControllerId U8 RO NA 关联的控制器 Id RefVolumeList U16[] RO NA 关联的逻辑盘 Id 列表 RefDiskArrayId U16 RO NA 关联的硬盘阵列 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 对象挂在同一路径上。
参数名 类型 读写 取值范围 描述 Health U8 RO OK/Warning/Critical 硬盘健康状态 Missing U16 RO 0:未丢失,1:丢失 硬盘丢失标志 PredictiveFailure U8 RO 0:无预故障,1:预故障 预故障标志 Failure Boolean RO true/false 硬盘是否故障 InAFailedArray U8 RO 0:否,1:是 是否处于一个故障的硬盘阵列 CapacityError Boolean RO true/false 硬盘容量是否异常 FirmwareStatusError Boolean RO true/false 硬盘固件状态是否异常
bmc.kepler.Systems.Storage.Drive.DriveSubHealth 硬盘亚健康子接口,用于承载 SSD/NVMe 盘的亚健康诊断数据。
参数名 类型 读写 取值范围 描述 EstimatedRemainingLifespanInsufficient U8 RO 0:充足,1:不足 硬盘预估剩余寿命不足标志 EstimatedRemainingLifespan U32 RO NA 硬盘预估剩余寿命 SLCSpareBlockPercentage U8 RO 0~100 非用户区剩余冗余块百分比 TLCSpareBlockPercentage U8 RO 0~100 用户区剩余冗余块百分比 IODeteriorationHealthCode U16 RO NA 硬盘 IO 性能健康码 FailurePredicted Boolean RW true:发生预测性故障,false:未发生预测性故障 硬盘是否发生预测性故障
bmc.kepler.Systems.Storage.Drive.NVMe NVMe 盘专用子接口,提供寿命信息与标准 NVMe-MI 命令通道。
参数名 类型 读写 取值范围 描述 LifeUsedPercentage U8 RO 0~100 驱动器寿命已使用百分比
方法参数说明 方法名 入参 出参 描述 GetSmartInfo a{ss}q ay 通过标准 NVMe-MI 协议获取 SMART/Health Information。Vendor:厂商 Id SendNvmeMICommand a{ss}yuuay yuay 按照标准 NVMe-MI 协议发送 NVMe-MI Command 格式命令。Opcode:命令操作码;Dword0/Dword1:命令双字;RequestData:请求数据。响应:Status、NVMeResponse、ResponseData GetTelemetryData a{ss}s u 通过标准 NVMe-MI 协议获取 Telemetry Host/Controller-initiated 数据,返回任务 ID GetIdentifyData a{ss}y ay 通过标准 NVMe-MI 协议获取 Identify command 信息。CNSValue:CNS 值
bmc.kepler.Systems.Storage.Drive.NVMe.SMART NVMe SMART 信息子接口。
参数名 类型 读写 取值范围 描述 AvailableSpare U8 RO 0~100 驱动器可用冗余空间的百分比 CriticalWarning U8 RO bit0~bit5 控制器状态的重要告警位图。bit0:冗余空间小于设定阈值;bit1:温度超过或低于重要阈值;bit2:介质错误导致可靠性降低;bit3:介质被置为只读模式;bit4:控制器易失性器件失效;bit5~7:保留 UsedPercentage U8 RO 0~100 用户实际使用与厂家设定器件寿命的百分比 Status U8 RO NA SMART 告警状态
bmc.kepler.Systems.Storage.Drive.AddrInfo 硬盘地址信息子接口,描述硬盘的拓扑位置。
参数名 类型 读写 取值范围 描述 Type String RO NA 硬盘的丝印类型 SocketId U8 RO NA 硬盘的 CPU 归属 SlotId U8 RO NA 硬盘的槽位号 PortId U8 RO NA 硬盘的端口号 RootBDF String RO NA 硬盘的 BDF
bmc.kepler.Systems.Storage.Drive.Diagnose 硬盘诊断数据子接口。
方法参数说明 方法名 入参 出参 描述 CollectDiagnoseData a{ss}as u 通过指定信息收集硬盘诊断数据,返回任务 ID GetDiagnoseData a{ss}as a{ss} 根据指定信息获取不同的硬盘诊断数据
bmc.kepler.Systems.Storage.Drive.SAS.SMART SAS 盘 SMART 信息子接口。
参数名 类型 读写 取值范围 描述 StripTemperatureCelsius U32 RO NA 驱动器条带温度,单位摄氏度 ElementsInGrownDefectList U32 RO NA 增长缺陷列表(G 表)中的元素个数 ElementsInPrimaryDefectList U32 RO NA 主缺陷列表(P 表)中的元素个数 ManufacturedInWeekOfYear String RO NA 生产日期:年中周 BlocksSentToInitiator U32 RO NA 发送到启动器的块数 BlocksReceivedFromInitiator U32 RO NA 从启动器收到的块数 UntilNextInterSMARTTestMinutes U32 RO NA 距下一次内部 SMART 测试的时长,单位分钟 LastPrefailEventSeqNum U32 RO NA 最后一次预测故障事件的序列号
bmc.kepler.Systems.Storage.Drive.SATA.SMART SATA 盘 SMART 信息子接口。
参数名 类型 读写 取值范围 描述 AttributeRevision U32 RO NA SMART 属性修订版本号 AttributeRevisionNumber U8 RO NA SMART 属性条目数量 AttributeItemList Array RO NA SMART 属性项列表
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 废弃状态 正常可用
参数说明 方法参数说明 方法名 入参 出参 描述 CollectIODeteriorationDiagInfo a{ss} u 设置启动收集硬盘 IO 性能诊断信息,返回任务 ID GetDrivesSubHealthDiagInfo a{ss}s aa{ua{ss}} 获取硬盘亚健康诊断信息列表。SubHealthType:亚健康类型 SetDriveSubHealthDiagResult a{ss}as - 设置硬盘 IO 性能健康码。SubHealthDiagResult:诊断结果数组 StartCollectLog a{ss}s - 手动触发收集硬盘日志。DriveName:硬盘名称 DumpLog a{ss}ss u 导出硬盘日志。DriveName:硬盘名称;OutputFilePath:导出文件路径;返回任务 ID GetNvmeDriveRawData a{ss}q s 获取 NVMe 盘的信息。index:NVMe 盘索引 GetNvmeDriveCount a{ss} q 获取 NVMe 盘的数量
属性参数说明 参数名 类型 读写 取值范围 描述 MaxTemperatureCelsius U8 RO NA 驱动器最高温度,单位摄氏度,用于风扇调速 LogAutoCollectEnable Boolean RW true/false 硬盘日志自动收集开启状态 LogAutoCollectInterval U8 RW NA 硬盘日志自动收集周期,单位小时
2.10 磁盘阵列 功能说明 管理 RAID 控制器下的磁盘阵列(RAID 组)信息。
属性 内容 接口名 bmc.kepler.Systems.Storage.DiskArray 对象路径 /bmc/kepler/Systems/:SystemId/Storage/Controllers/:ControllerId/DiskArrays/:Id 首发版本 openUBMC 1.0.0 废弃状态 正常可用
参数说明 属性参数说明 参数名 类型 读写 取值范围 描述 Id U16 RO 每个 RAID 卡下唯一 RAID 组的序号,由 RAID 卡读到 RAIDType String RO NA 驱动器阵列组成的虚拟磁盘的级别 UsedSpaceMiB U32 RO NA RAID 组的已使用空间,单位 MiB TotalFreeSpaceMiB U32 RO NA RAID 组的空闲空间,单位 MiB FreeBlocksSpaceMiB U32[] RO NA RAID 组的空闲块容量列表,单位 MiB AverageDriveFreeSpaceMiB U32 RO NA 阵列中每个驱动器的剩余容量,单位 MiB DriveNumPerSpan U8 RO NA 阵列中每个 Span 的成员盘个数 RefControllerId U8 RO NA RAID 组关联的控制器 Id RefVolumes U16[] RO NA RAID 组关联的逻辑盘 Id 列表,如 [145, 144] RefDrives String[] RO NA RAID 组关联的物理盘列表,如 [Disk0, Disk1]
2.11 超级电容(BBU) 功能说明 管理 RAID 控制器的超级电容(BBU)状态信息。
属性 内容 接口名 bmc.kepler.Systems.Storage.Battery 对象路径 /bmc/kepler/Systems/:SystemId/Storage/Controllers/:Id/Battery 首发版本 openUBMC 1.0.0 废弃状态 正常可用
参数说明 属性参数说明 参数名 类型 读写 取值范围 描述 Name String RO NA BBU 名称 State U8 RO NA BBU 在位信息 Health U8 RO NA BBU 健康状态 Fault U8 RO NA BBU 故障标志 HealthStatus U32 RO bit0~bit6 位图 BBU 健康状态位图。bit0:电压过低;bit1:需要更换 BBU;bit2:电量校准失败;bit3:电量校准超时;bit4:预故障;bit5:剩余容量低;bit6:没有用于缓存卸载的空间;其余位保留 TemperatureCelsius S16 RO NA BBU 温度,单位摄氏度
2.12 控制器状态子接口 bmc.kepler.Systems.Storage.Controller.ControllerStatus 参数名 类型 读写 取值范围 描述 Health U8 RO NA 控制器健康状态 FaultCode U16 RO 位域,每一位代表一种故障 控制器的故障码 CommunicationLoss U8 RO 0:正常,1:通信丢失 控制器通信丢失标志 FaultCodeByBios U8 RO 0:正常,非 0:故障 BIOS 上报的硬件故障错误码
bmc.kepler.Systems.Storage.Controller.BatteryStatus 参数名 类型 读写 取值范围 描述 BatteryPresence U8 RO NA 控制器下挂载的电池在位信息 BatteryFault U8 RO NA 控制器下挂载的电池故障信息 BatteryHealth U8 RO NA 控制器下挂载的电池健康信息
bmc.kepler.Systems.Storage.Controller.Driver 参数名 类型 读写 取值范围 描述 Name String RO NA 控制器驱动器名称,依赖 BMA 带内上报 Version String RO NA 控制器驱动器版本,依赖 BMA 带内上报
bmc.kepler.Systems.Storage.Controller.Chip 参数名 类型 读写 取值范围 描述 Model String RO NA RAID 卡芯片型号,来自 CSR 配置 ChipManufacturer String RO NA RAID 卡芯片厂商,来自 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 废弃状态 正常可用
参数说明 属性参数说明 参数名 类型 读写 取值范围 描述 PhyId U8 RO 每个 RAID 卡下唯一 PHY 误码 Id InvalidDwordCount U32 RO NA 无效 DWORD 数 LossDwordSyncCount U32 RO NA 丢失 DWORD 同步数 PhyResetProblemCount U32 RO NA PHY 重启问题数 RunningDisparityErrorCount U32 RO NA 连续不均衡性错误数
2.14 SAS 端口统计 功能说明 按控制器端口维度统计 SAS 链路的误码信息。
属性 内容 接口名 bmc.kepler.Systems.Storage.SASMetrics 对象路径 /bmc/kepler/Systems/:SystemId/Storage/Controllers/:ControllerId/Ports/:Id 首发版本 openUBMC 1.0.0 废弃状态 正常可用
参数说明 属性参数说明 参数名 类型 读写 取值范围 描述 ControllerId U8 RO NA 关联的控制器序号 InvalidDwordCount U32 RO NA 无效 DWORD 数 LossDwordSyncCount U32 RO NA 丢失 DWORD 同步数 PhyResetProblemCount U32 RO NA PHY 重启问题数 RunningDisparityErrorCount U32 RO NA 连续不均衡性错误数
2.15 磁盘分区 功能说明 管理通过 BMA 带内通道上报的 OS 磁盘分区信息。
属性 内容 接口名 bmc.kepler.Systems.Storage.DiskPartition 对象路径 /bmc/kepler/Systems/:SystemId/Storage/DiskPartitions/:Id 首发版本 openUBMC 1.0.0 废弃状态 正常可用
参数说明 属性参数说明 参数名 类型 读写 取值范围 描述 Name String RO NA OS 盘符 Usage U8 RO 0~100 磁盘分区利用率,单位百分比 TotalCapacityGiB Double RO NA 硬盘分区总容量,单位 GiB UsedCapacityGiB Double RO NA 硬盘分区当前使用容量,单位 GiB
2.16 复制盘 功能说明 记录硬盘替换场景下复制后的硬盘信息,用于拔盘替换后的信息比对。
属性 内容 接口名 bmc.kepler.Systems.Storage.ReplicaDrive 对象路径 /bmc/kepler/Systems/:SystemId/Storage/ReplicaDrives/:Id 首发版本 openUBMC 1.0.0 废弃状态 正常可用
参数说明 属性参数说明 参数名 类型 读写 取值范围 描述 Id U8 RO NA 复制后的硬盘编号 SerialNumber String RO NA 复制后的硬盘序列号 TemperatureCelsius U8 RO NA 复制后的硬盘温度,单位摄氏度
2.17 存储设置 功能说明 提供机箱维度的存储策略设置,当前用于配置 SSD 盘剩余磨损率告警阈值。
属性 内容 接口名 bmc.kepler.Chassis.Storage.StorageSetting 对象路径 /bmc/kepler/Chassis/:ChassisId/Storage 首发版本 openUBMC 1.0.0 废弃状态 正常可用
参数说明 属性参数说明 参数名 类型 读写 取值范围 描述 SSDMediaLifeLeftPercentThreshold U8 RW 0~100 SSD 盘剩余磨损率告警阈值,单位百分比
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/0x00 get_controller_list获取 RAID 控制器 ID 列表 GetControllerFwVersion0x3D/0x01 get_controller_fw_version获取控制器固件版本 GetControllerNvdataVersion0x3D/0x02 get_controller_nvdata_version获取控制器 NVData 版本 GetControllerInfo0x3D/0x03 get_controller_info获取控制器配置信息 GetLogicalDriveList0x3D/0x04 get_logical_drive_list获取逻辑盘 ID 列表 GetCachecadeAssociatedLds0x3D/0x06 get_cachecade_associated_lds获取 CacheCade 关联逻辑盘 GetLogicalDrivePds0x3D/0x07 get_logical_drive_pds获取逻辑盘成员盘列表 GetControllerPds0x3D/0x08 get_controller_pds获取控制器下物理盘列表 GetPhysicalDriveLocation0x3D/0x09 get_physical_drive_location获取物理盘位置信息 GetPhysicalDriveInfo0x3D/0x0A get_physical_drive_info获取物理盘详情 GetPhysicalDriveLedStatus0x3D/0x12 get_physical_drive_led_status获取物理盘 LED 状态 GetArrayList0x3D/0x0B get_array_list获取阵列 ID 列表 GetArrayInfo0x3D/0x0C get_array_info获取阵列信息 GetArrayLds0x3D/0x0D get_array_lds获取阵列关联逻辑盘 GetArrayLdsEx0x3D/0x15 get_array_lds_ex获取阵列关联逻辑盘(扩展版) GetArrayPds0x3D/0x0E get_array_pds获取阵列关联物理盘 GetLdDedicatedSparedPds0x3D/0x0F — 获取逻辑盘专属热备盘 GetControllerCapability0x3D/0x13 get_controller_capability获取控制器能力 GetLogicalDriveListEx0x3D/0x14 get_logical_drive_list_ex获取逻辑盘列表(扩展版) GetCachecadeAssociatedLdsEx0x3D/0x16 get_cachecade_associated_lds_ex获取 CacheCade 关联逻辑盘(扩展版) GetHddPlugCnt0x3A — 获取硬盘插拔计数 GetHddPwrStatus0x62 get_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/0x01 create_logical_drive_on_new_array在新阵列上创建逻辑盘 CreateCachecadeLogicalDrive0x3E/0x02 create_cachecade_logical_drive创建 CacheCade 逻辑盘 CreateLogicalDriveOnExistedArray0x3E/0x03 create_logical_drive_on_existed_array在已有阵列上创建逻辑盘 DeleteLogicalDrive0x3E/0x04 delete_logical_drive删除逻辑盘 SetLogicalDriveName0x3E/0x05 set_logical_drive_name设置逻辑盘名称 SetLogicDriveRp0x3E/0x06 set_logic_drive_rp设置逻辑盘读策略 SetLogicDriveWp0x3E/0x07 set_logic_drive_wp设置逻辑盘写策略 SetLogicalDriveIOP0x3E/0x08 set_logical_drive_iop设置逻辑盘 IO 策略 SetLogicalDriveAP0x3E/0x09 set_logical_drive_ap设置逻辑盘访问策略 SetLogicalDriveDCP0x3E/0x0A set_logical_drive_dcp设置逻辑盘缓存策略 SetLogicalDriveBGI0x3E/0x0B set_logical_drive_bgi设置逻辑盘 BGI 使能 SetLogicalDriveCachecade0x3E/0x0C set_logical_drive_cachecade设置逻辑盘 CacheCade SetLogicDriveBootable0x3E/0x0D set_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 总线。
通信流程:
控制器对象调用注册好的 I2C 芯片的 PluginRequest 方法,传入插件名、函数名和函数参数 找到对应插件后,调用插件的 run_cmd 函数,创建 Worker 虚拟机 在虚拟机中调用 SML 库函数 SML 库需要 I2C 通信时,将命令打包后发送给 Plugin 所在的 skynet 服务 处理结束后,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 盘配置流程 在硬盘背板上配置 Connector_ComVPDConnect_x 对象(Bom=14140224, Id=VPD, AuxId=0) 框架加载 14140224_VPD_0.sr 文件,定义 Connector_ComVPD 和 VirtualVPDConnect 对象 Storage 组件通过 VirtualVPDConnect 从 NVMe 盘读取协议信息并更新到 Connector_ComVPD 的 AuxId 框架利用 Bom+Id+AuxId 组合加载具体协议文件(如 14140224_PROTOCOL_0.sr) 在协议文件中定义 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 successfullyinfo 补充信息 Controller %s add new volume list、Restore drive infowarn 警告 — error 异常/错误 I2C_READ_WRITE_FAILED、get_ctrl_pd_list failed、Invalid TypeIddebug 调试信息 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 控制器不可见或信息为空
排查步骤 :
检查 CSR 配置 :确认 .sr 文件中 Controller_1 对象的 TypeId 和 DeviceName 配置正确检查 I2C 通信 :查看日志中是否有 SML_ERR_I2C_READ_WRITE_FAILEDbash grep "I2C_READ_WRITE_FAILED" /var/log/ * .log 检查 OOBSupport :OOBSupport=0 表示不支持带外管理,此时控制器信息依赖 CSR 静态配置检查控制器状态 :查看 StorageConfigReady 是否为 0x01检查 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 硬盘信息异常 现象 :硬盘信息不显示、信息不更新、或显示错误信息
排查步骤 :
检查在位状态 :Presence=1 表示在位检查 PD 定位 :查看日志中 drive identify / drive unidentify 信息检查固件状态 :FirmwareStatus 为 0xFF(255) 表示无效检查关联控制器 :RefControllerId 应指向有效的控制器NVMe 盘额外检查 :确认设备树对象同步是否正常8.4 操作执行失败 现象 :创建逻辑盘、设置属性等操作返回错误
排查步骤 :
查看错误码 :参考 error_engine.lua 中的错误码映射表错误码 Redfish 映射 含义 0x2080 RaidControllerLevelInvalidRAID 级别无效 0x2085 PhysicalDiskIdInvalid物理盘 ID 无效 0x2086 VolumeCapacityOutRange容量超出范围 0x2090 OperationInProcess操作进行中 0x20D5 CurrentStatusNotSupportOperation控制器状态不支持操作 0x1001 CurrentStatusNotSupportOperationI2C 读写失败 0x1002 CurrentStatusNotSupportOperationMCTP 读写失败 0x1104 CurrentStatusNotSupportOperation控制器初始化未完成 0x1301 — 物理盘 ID 无效 0x1444 — 物理盘已被使用 0x1448 — CacheCade 需使用 SSD 0x1074 RAIDControllerSetSuccessfully操作成功需重启
检查控制器状态 :确认控制器已完成初始化(StorageConfigReady=1)检查参数合法性 :确认 RAID 级别、物理盘 ID、容量等参数在有效范围内8.5 数据不更新 现象 :控制器/硬盘/逻辑盘信息长时间不刷新
排查步骤 :
检查周期任务 :确认控制器的 TASK_UPDATE 周期任务是否在运行检查 I2C/MCTP 通信 :查看日志中是否有通信失败BMA 数据不更新 :确认 host_agent 组件正常运行且 BMA 数据推送正常NVMe 设备树同步 :确认设备树属性变化是否被监听到9. 常见问题解答 Q1:设置 RAID 卡 JBOD 工作模式后,硬盘状态未变为 JBOD,是否正常? 答 :设置 RAID 卡工作模式为 JBOD 后,下挂硬盘状态是否自动切换取决于 RAID 卡的 AutoConfig 配置。可通过 OS 下 storcli /c0 show autoconfig 查询。当 AutoConfig=JBOD 时,切换 JBOD 模式会自动将 Unconfigured Good 状态的硬盘切换为 JBOD。若 AutoConfig 非 JBOD,则需手动设置硬盘固件状态。
Q2:硬盘拔插替换后信息不更新,显示旧盘信息,如何处理? 答 :在快速多盘拔插场景下可能出现信息不更新,排查步骤:
确认是否为单盘替换场景(单盘替换一般正常) 多盘同时拔插时,检查 pd_identify_service 的添加/删除处理时序 查看日志中 Disk%s add / Disk%s del 的时序是否正确 若确认存在时序问题,可将添加和删除操作加入队列串行处理 Q3:创建逻辑盘失败,返回错误码,如何排查? 答 :常见创建失败原因及对应的错误码:
物理盘 ID 无效(0x2085):确认物理盘 ID 存在且未被使用 RAID 级别无效(0x2080):确认控制器支持该 RAID 级别 容量超出范围(0x2086):确认容量在可用空间范围内 物理盘已被使用(0x1444):确认物理盘未被其他阵列占用 控制器状态不支持(0x20D5):等待控制器初始化完成后再操作 Q4:NVMe 盘在 BMC 上不显示信息,如何排查? 答 :排查步骤:
确认硬盘背板 CSR 中配置了 Connector_ComVPDConnect_x 对象 确认设备树中 NVMe 设备对象是否存在 检查 device_mgmt 模块的日志,确认设备树属性同步是否正常 确认 BMA 数据推送是否正常(host_agent 组件状态) Q5:部分硬盘不在 RAID 卡管理下,但实际应被管理,如何处理? 答 :排查步骤:
检查硬盘的 RefControllerId 属性,确认关联的控制器 ID 检查 PD 定位结果,确认 identify_pd 是否正确匹配 查看日志中 drive identify 信息,确认物理盘与 Drive 的配对结果 确认硬盘固件状态是否为有效值(非 0xFF) 确认控制器 OOBSupport=1 且已成功注册到 SML