CSR配置字典之Drive类
更新时间:2025/7/22
在Gitcode上查看源码📋 文档信息
项目 | 内容 |
---|---|
文档标题 | Drive类配置字典 |
版本 | v1.0 |
创建日期 | 2025-01-27 |
最后更新 | 2025-01-27 |
维护状态 | ✅ 活跃维护 |
📋 变更历史记录
文档变更记录
版本 | 发布日期 | 变更类型 | 变更内容 | 影响范围 | 维护人员 |
---|---|---|---|---|---|
v1.0 | 2025-01-27 | 初始版本 | 创建Drive类配置字典 | 全新文档 | 系统管理员 |
🎯 类概览
Drive 类
属性 | 值 |
---|---|
类名称 | Drive |
功能描述 | 硬盘管理对象,提供硬盘的状态监控、LED控制、温度管理和健康检测功能 |
所属SIG组 | storage |
所属组件 | 硬盘管理 |
责任人 | 存储管理组 |
最后更新 | 2025-01-27 |
状态 | 🟢 正常运行 |
📊 属性定义详表
必选属性
属性名 | 类型 | 默认值 | 取值范围 | 动态关联 | 描述 | 使用场景 | 举例 | 来源 | 分类 |
---|---|---|---|---|---|---|---|---|---|
Id | U32 | - | U32 | - | 硬盘ID,是硬盘对象的主键,不能重复 计算方式:HddBackplaneStartSlot + RelativeSlot | 用于加载硬盘对象 | 0 | CSR配置 | 软件 |
Name | String | - | String | - | 硬盘名称,格式为Disk+Id | 硬盘对象名称 | "Disk0" | CSR配置 | 软件 |
PhysicalLocation | String | "HDD Plane" | String | - | 硬盘的物理位置 | 用于拼接硬盘丝印,丝印格式:HDDPlaneDisk8 | "HDD Plane" | CSR配置 | 软件 |
NodeId | String | - | String | - | 资源的唯一ID 格式:PhysicalLocation+Name(注意字符间不要空格) | Redfish接口的硬盘对象URL索引 | "HDDPlaneDisk0" | CSR配置 | 软件 |
Presence | U8 | 255 | 0,1,255 | Scanner_Drive0PresentAccessor | 硬盘在位状态 0:不在位 1:在位 255:无效值 | 判断硬盘在位状态 | `"<=/Scanner_Drive0PresentAccessor.Status;<=/Scanner_Drive0PresentAccessor.Value | > expr($1 != 0 ? 255 : $2)"` | 硬件提供 |
LocateLed | U8 | - | 0,1,2 | Scanner_Drive0LocateAccessor | 硬盘定位灯状态 0:关闭 1:闪烁 2:常亮 | 标识硬盘定位灯状态 | "<=/Scanner_Drive0LocateAccessor.Value" | 硬件提供 | 硬件 |
FaultLed | U8 | - | 0,1,2 | Scanner_Drive0FalutAccessor | 硬盘故障灯状态 0:关闭 1:常亮 2:闪烁 | 标识硬盘故障灯状态 | "<=/Scanner_Drive0FalutAccessor.Value" | 硬件提供 | 硬件 |
ActivationLed | U8 | - | 0,1 | Scanner_Drive0ActivationAccessor | 硬盘活动状态灯 0:关闭 1:开启 | 判断硬盘活动状态 | "<=/Scanner_Drive0ActivationAccessor.Value" | 硬件提供 | 硬件 |
SetLocateLed | U8 | - | 0,1 | Accessor_Drive0LocateAccessor | 设置硬盘定位灯 0:关定位灯 1:开定位灯(闪烁) | 用于点硬盘定位灯 | "#/Accessor_Drive0LocateAccessor.Value" | BMC内部设置 | 硬件 |
SetFaultLed | U8 | - | 0,1 | Accessor_Drive0FaultAccessor | 设置硬盘故障灯 0:关故障灯 1:点故障灯(常亮) | 用于点硬盘故障灯 | "#/Accessor_Drive0FaultAccessor.Value" | BMC内部设置 | 硬件 |
Health | U8 | 0 | 0,1,2,3 | Component_Drive0 | 硬盘健康状态 0:OK 1:Minor 2:Major 3:Critical | 硬盘是否有关联告警触发 | "<=/Component_Drive0.Health" | BMC内部设置 | 软件 |
PassThrough | U8 | - | 0,1 | - | 硬盘是否是直通接入方式 0:非直通 1:直通 | Raid卡管理的硬盘点灯流程用于区分直通盘 | 0 | 硬件配置 | 硬件 |
HddBackplaneStartSlot | U32 | 0 | U32 | HddBackplane_1 | 硬盘背板起始槽位号 硬盘ID = HddBackplaneStartSlot + RelativeSlot | 单块硬盘背板的起始槽位号,按需修改 | "<=/HddBackplane_1.StartSlot" | CSR配置 | 硬件 |
RelativeSlot | U32 | - | U32 | - | 槽位相对硬盘背板起始槽位的偏移量 一般配置和ID相等 | 硬盘槽位相对于起始槽位的偏移量,按需修改 | 0 | CSR配置 | 硬件 |
可选属性
属性名 | 类型 | 默认值 | 取值范围 | 动态关联 | 描述 | 使用场景 | 举例 | 来源 | 分类 |
---|---|---|---|---|---|---|---|---|---|
TemperatureCelsius | S16 | 255 | S16 | - | 硬盘温度(摄氏度) 255是默认值-无效值 | 硬盘温度监控 | 34 | BMC内部设置 | 硬件 |
Missing | U8 | 0 | 0,1,2 | - | 硬盘的missing状态 | 判断硬盘是否丢失 | 0 | BMC内部设置 | 软件 |
RebuildState | U8 | 0 | 0,1 | - | 指定硬盘数据重建状态 | 显示硬盘重构状态 | 0 | BMC内部设置 | 软件 |
FirmwareStatus | U8 | 255 | 枚举值 | - | 硬盘固件状态,来自于BMA或者Raid 255为无效值 | 显示硬盘固件状态 | 255 | BMC内部设置 | 硬件 |
PredictiveFailure | U8 | 0 | 0,1 | - | 硬盘设备预故障检测,来自Raid 0:正常 1:故障 | 触发硬盘预故障告警 | 0 | BMC内部设置 | 软件 |
InAFailedArray | U8 | 0 | 0,1 | - | 硬盘是否归属于一个故障阵列,来自Raid 0:否 1:是 | 触发硬盘阵列失效告警 | 0 | BMC内部设置 | 软件 |
FirmwareStatusError | Boolean | FALSE | true/false | - | 关联硬盘FaultLed | 用于触发硬盘异常告警 | FALSE | BMC内部设置 | 软件 |
SerialNumber | String | "" | String | - | 硬盘SN编码,来源BMA、Raid、VPD | 硬盘SN信息 | "" | BMC内部设置 | 硬件 |
DeviceName | String | - | String | - | PCIe设备名 | 无使用 | "" | 无使用 | 软件 |
PredictedMediaLifeLeftPercent | U8 | 255 | 0-255 | - | 硬盘静态磨损率 | 显示硬盘静态磨损率 | 255 | BMC内部设置 | 软件 |
Type | String | - | String | - | 硬盘丝印类型,PcieAddressInfo对象使用 | NVME盘匹配res id | "NVME" | 硬件配置 | 硬件 |
SocketId | U8 | - | U8 | - | 硬盘的CPU归属,PcieAddressInfo对象使用 | NVME盘匹配res id | 0 | 硬件配置 | 硬件 |
SlotId | U8 | - | U8 | - | 硬盘的槽位号,PcieAddressInfo对象使用 | NVME盘匹配res id | 0 | 硬件配置 | 硬件 |
PortId | U8 | - | U8 | - | 硬盘的端口号,PcieAddressInfo对象使用 | 显示端口信息 | 0 | 硬件配置 | 硬件 |
RootBDF | String | - | String | - | 硬盘BDF信息,PcieAddressInfo对象使用 | 显示BDF信息 | "00:1A:00.0" | 硬件配置 | 硬件 |
CapacityError | Boolean | FALSE | true/false | - | 硬盘容量异常,未使用 | 上报硬盘容量异常告警 | FALSE | 硬件配置 | 硬件 |
Failure | Boolean | FALSE | true/false | - | 硬盘状态异常,来自Raid | 上报硬盘故障告警 | FALSE | BMC内部设置 | 软件 |
EstimatedRemainingLifespanInsufficient | U8 | 0 | 0,1 | - | 硬盘预估剩余寿命不足 | 上报硬盘预估剩余寿命不足告警 | 0 | BMC内部设置 | 软件 |
SLCSpareBlockPercentage | U8 | 255 | 0-255 | - | 硬盘非用户区剩余冗余块百分比 | 显示硬盘非用户区剩余冗余块百分比 | 255 | BMC内部设置 | 软件 |
TLCSpareBlockPercentage | U8 | 255 | 0-255 | - | 硬盘用户区剩余冗余块百分比 | 显示硬盘用户区剩余冗余块百分比 | 255 | BMC内部设置 | 软件 |
EstimatedRemainingLifespan | U32 | 4294967295 | 0-4294967295 | - | 硬盘预估剩余寿命 | 显示硬盘预估剩余寿命 | 4294967295 | BMC内部设置 | 软件 |
IODeteriorationHealthCode | U8 | 0 | 0,1 | - | 硬盘I/O性能健康码 | 上报硬盘慢盘事件 | 0 | BMC内部设置 | 软件 |
🔗 动态关联机制
语法规范
使用复杂的动态关联语法:
yaml
# 基础硬盘信息
Id: 0 # HddBackplaneStartSlot + RelativeSlot
Name: "Disk0" # Disk + Id
PhysicalLocation: "HDD Plane"
NodeId: "HDDPlaneDisk0" # PhysicalLocation + Name
# 硬盘在位和LED状态
Presence: "<=/Scanner_Drive0PresentAccessor.Status;<=/Scanner_Drive0PresentAccessor.Value |> expr($1 != 0 ? 255 : $2)"
LocateLed: "<=/Scanner_Drive0LocateAccessor.Value"
FaultLed: "<=/Scanner_Drive0FalutAccessor.Value"
ActivationLed: "<=/Scanner_Drive0ActivationAccessor.Value"
# LED控制
SetLocateLed: "#/Accessor_Drive0LocateAccessor.Value"
SetFaultLed: "#/Accessor_Drive0FaultAccessor.Value"
# 健康状态
Health: "<=/Component_Drive0.Health"
# 背板关联
HddBackplaneStartSlot: "<=/HddBackplane_1.StartSlot"
RelativeSlot: 0
# 温度监控
TemperatureCelsius: 34
关联说明
- Scanner关联: Presence、LocateLed、FaultLed、ActivationLed通过Scanner对象获取硬件状态
- Accessor关联: SetLocateLed、SetFaultLed通过Accessor对象控制LED
- Component关联: Health通过Component对象获取健康状态
- 背板关联: HddBackplaneStartSlot关联到HddBackplane对象获取起始槽位
- ID计算: Id = HddBackplaneStartSlot + RelativeSlot
📂 分类标准
硬件属性
- 定义:与硬盘硬件特性和物理状态直接相关的参数
- 特点:在位检测、LED状态、温度监控、PCIe信息等
- 示例:
Presence
,LocateLed
,FaultLed
,ActivationLed
,SetLocateLed
,SetFaultLed
,PassThrough
,HddBackplaneStartSlot
,RelativeSlot
,TemperatureCelsius
,FirmwareStatus
,SerialNumber
,Type
,SocketId
,SlotId
,PortId
,RootBDF
,CapacityError
软件属性
- 定义:由软件管理和维护的硬盘参数
- 特点:对象标识、健康状态、重建状态、告警管理等
- 示例:
Id
,Name
,PhysicalLocation
,NodeId
,Health
,Missing
,RebuildState
,PredictiveFailure
,InAFailedArray
,FirmwareStatusError
,DeviceName
,PredictedMediaLifeLeftPercent
,Failure
,EstimatedRemainingLifespanInsufficient
,SLCSpareBlockPercentage
,TLCSpareBlockPercentage
,EstimatedRemainingLifespan
,IODeteriorationHealthCode
📝 配置示例
基础硬盘配置
json
{
"Drive_0": {
"Id": 0,
"Name": "Disk0",
"PhysicalLocation": "HDD Plane",
"NodeId": "HDDPlaneDisk0",
"Presence": "<=/Scanner_Drive0PresentAccessor.Status;<=/Scanner_Drive0PresentAccessor.Value |> expr($1 != 0 ? 255 : $2)",
"LocateLed": "<=/Scanner_Drive0LocateAccessor.Value",
"FaultLed": "<=/Scanner_Drive0FalutAccessor.Value",
"ActivationLed": "<=/Scanner_Drive0ActivationAccessor.Value",
"SetLocateLed": "#/Accessor_Drive0LocateAccessor.Value",
"SetFaultLed": "#/Accessor_Drive0FaultAccessor.Value",
"Health": "<=/Component_Drive0.Health",
"PassThrough": 0,
"HddBackplaneStartSlot": "<=/HddBackplane_1.StartSlot",
"RelativeSlot": 0
}
}
完整硬盘配置(含可选属性)
json
{
"Drive_1": {
"Id": 1,
"Name": "Disk1",
"PhysicalLocation": "HDD Plane",
"NodeId": "HDDPlaneDisk1",
"Presence": "<=/Scanner_Drive1PresentAccessor.Status;<=/Scanner_Drive1PresentAccessor.Value |> expr($1 != 0 ? 255 : $2)",
"LocateLed": "<=/Scanner_Drive1LocateAccessor.Value",
"FaultLed": "<=/Scanner_Drive1FalutAccessor.Value",
"ActivationLed": "<=/Scanner_Drive1ActivationAccessor.Value",
"SetLocateLed": "#/Accessor_Drive1LocateAccessor.Value",
"SetFaultLed": "#/Accessor_Drive1FaultAccessor.Value",
"TemperatureCelsius": 34,
"Missing": 0,
"Health": "<=/Component_Drive1.Health",
"RebuildState": 0,
"FirmwareStatus": 255,
"PredictiveFailure": 0,
"InAFailedArray": 0,
"FirmwareStatusError": false,
"SerialNumber": "",
"DeviceName": "",
"PredictedMediaLifeLeftPercent": 255,
"PassThrough": 0,
"HddBackplaneStartSlot": "<=/HddBackplane_1.StartSlot",
"RelativeSlot": 1,
"Failure": false,
"EstimatedRemainingLifespanInsufficient": 0,
"SLCSpareBlockPercentage": 255,
"TLCSpareBlockPercentage": 255,
"EstimatedRemainingLifespan": 4294967295,
"IODeteriorationHealthCode": 0
}
}
NVME硬盘配置
json
{
"Drive_NVME": {
"Id": 8,
"Name": "NVMeDisk8",
"PhysicalLocation": "NVME Plane",
"NodeId": "NVMEPlaneDisk8",
"Presence": "<=/Scanner_Drive8PresentAccessor.Status;<=/Scanner_Drive8PresentAccessor.Value |> expr($1 != 0 ? 255 : $2)",
"LocateLed": "<=/Scanner_Drive8LocateAccessor.Value",
"FaultLed": "<=/Scanner_Drive8FalutAccessor.Value",
"ActivationLed": "<=/Scanner_Drive8ActivationAccessor.Value",
"SetLocateLed": "#/Accessor_Drive8LocateAccessor.Value",
"SetFaultLed": "#/Accessor_Drive8FaultAccessor.Value",
"Health": "<=/Component_Drive8.Health",
"PassThrough": 1,
"HddBackplaneStartSlot": "<=/HddBackplane_2.StartSlot",
"RelativeSlot": 0,
"Type": "NVME",
"SocketId": 0,
"SlotId": 8,
"PortId": 0,
"RootBDF": "00:1A:00.0",
"TemperatureCelsius": 45,
"SerialNumber": "NVME123456789",
"PredictedMediaLifeLeftPercent": 95,
"SLCSpareBlockPercentage": 98,
"TLCSpareBlockPercentage": 92,
"EstimatedRemainingLifespan": 87600
}
}
🔧 使用指南
配置步骤
- 基础信息配置:设置Id、Name、PhysicalLocation、NodeId等基本信息
- 硬件关联配置:配置Scanner、Accessor、Component对象关联
- 背板关联配置:设置HddBackplaneStartSlot、RelativeSlot关联背板
- LED控制配置:配置LED状态读取和控制接口
- 健康监控配置:设置Health、Temperature等监控参数
- 扩展信息配置:根据硬盘类型配置PCIe信息等扩展属性
ID计算规则
- 计算公式:Id = HddBackplaneStartSlot + RelativeSlot
- 示例:背板起始槽位为0,相对槽位为3,则硬盘ID为3
- 唯一性:确保每个硬盘的ID在系统中唯一
命名规范
- Name格式:Disk + Id,如Disk0、Disk1
- NVME格式:NVMeDisk + Id,如NVMeDisk8
- NodeId格式:PhysicalLocation + Name,如HDDPlaneDisk0
LED控制说明
- LocateLed: 0-关闭,1-闪烁,2-常亮
- FaultLed: 0-关闭,1-常亮,2-闪烁
- ActivationLed: 0-关闭,1-开启
- SetLocateLed: 0-关定位灯,1-开定位灯(闪烁)
- SetFaultLed: 0-关故障灯,1-点故障灯(常亮)
健康状态说明
- OK(0):硬盘正常运行
- Minor(1):轻微告警,需要关注
- Major(2):严重告警,需要处理
- Critical(3):严重故障,需要立即处理
注意事项
- ID唯一性:确保每个硬盘的Id在系统中唯一
- Scanner关联:确保Scanner对象存在且正确配置
- Accessor关联:确保Accessor对象存在且可控制LED
- 背板关联:确保HddBackplane对象存在且StartSlot正确
故障排除
在位检测异常:
- 检查Scanner_Drive*PresentAccessor对象是否存在
- 验证硬件连接是否正常
- 确认Presence表达式计算是否正确
LED控制异常:
- 检查Accessor_Drive*LocateAccessor对象是否存在
- 验证LED硬件是否正常工作
- 确认SetLocateLed、SetFaultLed配置是否正确
健康状态异常:
- 检查Component_Drive*对象是否存在
- 验证Health关联是否正确
- 确认告警规则是否正确配置
性能优化
- 状态轮询:合理设置状态检测频率,平衡实时性和系统负载
- LED控制:优化LED控制逻辑,避免频繁切换
- 温度监控:合理设置温度检测阈值和频率