CSR配置字典之Drive类
更新时间:2025/7/22
在Gitcode上查看源码

📋 文档信息

项目内容
文档标题Drive类配置字典
版本v1.0
创建日期2025-01-27
最后更新2025-01-27
维护状态✅ 活跃维护

📋 变更历史记录

文档变更记录

版本发布日期变更类型变更内容影响范围维护人员
v1.02025-01-27初始版本创建Drive类配置字典全新文档系统管理员

🎯 类概览

Drive 类

属性
类名称Drive
功能描述硬盘管理对象,提供硬盘的状态监控、LED控制、温度管理和健康检测功能
所属SIG组storage
所属组件硬盘管理
责任人存储管理组
最后更新2025-01-27
状态🟢 正常运行

📊 属性定义详表

必选属性

属性名类型默认值取值范围动态关联描述使用场景举例来源分类
IdU32-U32-硬盘ID,是硬盘对象的主键,不能重复
计算方式:HddBackplaneStartSlot + RelativeSlot
用于加载硬盘对象0CSR配置软件
NameString-String-硬盘名称,格式为Disk+Id硬盘对象名称"Disk0"CSR配置软件
PhysicalLocationString"HDD Plane"String-硬盘的物理位置用于拼接硬盘丝印,丝印格式:HDDPlaneDisk8"HDD Plane"CSR配置软件
NodeIdString-String-资源的唯一ID
格式:PhysicalLocation+Name(注意字符间不要空格)
Redfish接口的硬盘对象URL索引"HDDPlaneDisk0"CSR配置软件
PresenceU82550,1,255Scanner_Drive0PresentAccessor硬盘在位状态
0:不在位
1:在位
255:无效值
判断硬盘在位状态`"<=/Scanner_Drive0PresentAccessor.Status;<=/Scanner_Drive0PresentAccessor.Value> expr($1 != 0 ? 255 : $2)"`硬件提供
LocateLedU8-0,1,2Scanner_Drive0LocateAccessor硬盘定位灯状态
0:关闭
1:闪烁
2:常亮
标识硬盘定位灯状态"<=/Scanner_Drive0LocateAccessor.Value"硬件提供硬件
FaultLedU8-0,1,2Scanner_Drive0FalutAccessor硬盘故障灯状态
0:关闭
1:常亮
2:闪烁
标识硬盘故障灯状态"<=/Scanner_Drive0FalutAccessor.Value"硬件提供硬件
ActivationLedU8-0,1Scanner_Drive0ActivationAccessor硬盘活动状态灯
0:关闭
1:开启
判断硬盘活动状态"<=/Scanner_Drive0ActivationAccessor.Value"硬件提供硬件
SetLocateLedU8-0,1Accessor_Drive0LocateAccessor设置硬盘定位灯
0:关定位灯
1:开定位灯(闪烁)
用于点硬盘定位灯"#/Accessor_Drive0LocateAccessor.Value"BMC内部设置硬件
SetFaultLedU8-0,1Accessor_Drive0FaultAccessor设置硬盘故障灯
0:关故障灯
1:点故障灯(常亮)
用于点硬盘故障灯"#/Accessor_Drive0FaultAccessor.Value"BMC内部设置硬件
HealthU800,1,2,3Component_Drive0硬盘健康状态
0:OK
1:Minor
2:Major
3:Critical
硬盘是否有关联告警触发"<=/Component_Drive0.Health"BMC内部设置软件
PassThroughU8-0,1-硬盘是否是直通接入方式
0:非直通
1:直通
Raid卡管理的硬盘点灯流程用于区分直通盘0硬件配置硬件
HddBackplaneStartSlotU320U32HddBackplane_1硬盘背板起始槽位号
硬盘ID = HddBackplaneStartSlot + RelativeSlot
单块硬盘背板的起始槽位号,按需修改"<=/HddBackplane_1.StartSlot"CSR配置硬件
RelativeSlotU32-U32-槽位相对硬盘背板起始槽位的偏移量
一般配置和ID相等
硬盘槽位相对于起始槽位的偏移量,按需修改0CSR配置硬件

可选属性

属性名类型默认值取值范围动态关联描述使用场景举例来源分类
TemperatureCelsiusS16255S16-硬盘温度(摄氏度)
255是默认值-无效值
硬盘温度监控34BMC内部设置硬件
MissingU800,1,2-硬盘的missing状态判断硬盘是否丢失0BMC内部设置软件
RebuildStateU800,1-指定硬盘数据重建状态显示硬盘重构状态0BMC内部设置软件
FirmwareStatusU8255枚举值-硬盘固件状态,来自于BMA或者Raid
255为无效值
显示硬盘固件状态255BMC内部设置硬件
PredictiveFailureU800,1-硬盘设备预故障检测,来自Raid
0:正常
1:故障
触发硬盘预故障告警0BMC内部设置软件
InAFailedArrayU800,1-硬盘是否归属于一个故障阵列,来自Raid
0:否
1:是
触发硬盘阵列失效告警0BMC内部设置软件
FirmwareStatusErrorBooleanFALSEtrue/false-关联硬盘FaultLed用于触发硬盘异常告警FALSEBMC内部设置软件
SerialNumberString""String-硬盘SN编码,来源BMA、Raid、VPD硬盘SN信息""BMC内部设置硬件
DeviceNameString-String-PCIe设备名无使用""无使用软件
PredictedMediaLifeLeftPercentU82550-255-硬盘静态磨损率显示硬盘静态磨损率255BMC内部设置软件
TypeString-String-硬盘丝印类型,PcieAddressInfo对象使用NVME盘匹配res id"NVME"硬件配置硬件
SocketIdU8-U8-硬盘的CPU归属,PcieAddressInfo对象使用NVME盘匹配res id0硬件配置硬件
SlotIdU8-U8-硬盘的槽位号,PcieAddressInfo对象使用NVME盘匹配res id0硬件配置硬件
PortIdU8-U8-硬盘的端口号,PcieAddressInfo对象使用显示端口信息0硬件配置硬件
RootBDFString-String-硬盘BDF信息,PcieAddressInfo对象使用显示BDF信息"00:1A:00.0"硬件配置硬件
CapacityErrorBooleanFALSEtrue/false-硬盘容量异常,未使用上报硬盘容量异常告警FALSE硬件配置硬件
FailureBooleanFALSEtrue/false-硬盘状态异常,来自Raid上报硬盘故障告警FALSEBMC内部设置软件
EstimatedRemainingLifespanInsufficientU800,1-硬盘预估剩余寿命不足上报硬盘预估剩余寿命不足告警0BMC内部设置软件
SLCSpareBlockPercentageU82550-255-硬盘非用户区剩余冗余块百分比显示硬盘非用户区剩余冗余块百分比255BMC内部设置软件
TLCSpareBlockPercentageU82550-255-硬盘用户区剩余冗余块百分比显示硬盘用户区剩余冗余块百分比255BMC内部设置软件
EstimatedRemainingLifespanU3242949672950-4294967295-硬盘预估剩余寿命显示硬盘预估剩余寿命4294967295BMC内部设置软件
IODeteriorationHealthCodeU800,1-硬盘I/O性能健康码上报硬盘慢盘事件0BMC内部设置软件

🔗 动态关联机制

语法规范

使用复杂的动态关联语法:

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
  }
}

🔧 使用指南

配置步骤

  1. 基础信息配置:设置Id、Name、PhysicalLocation、NodeId等基本信息
  2. 硬件关联配置:配置Scanner、Accessor、Component对象关联
  3. 背板关联配置:设置HddBackplaneStartSlot、RelativeSlot关联背板
  4. LED控制配置:配置LED状态读取和控制接口
  5. 健康监控配置:设置Health、Temperature等监控参数
  6. 扩展信息配置:根据硬盘类型配置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正确

故障排除

  1. 在位检测异常

    • 检查Scanner_Drive*PresentAccessor对象是否存在
    • 验证硬件连接是否正常
    • 确认Presence表达式计算是否正确
  2. LED控制异常

    • 检查Accessor_Drive*LocateAccessor对象是否存在
    • 验证LED硬件是否正常工作
    • 确认SetLocateLed、SetFaultLed配置是否正确
  3. 健康状态异常

    • 检查Component_Drive*对象是否存在
    • 验证Health关联是否正确
    • 确认告警规则是否正确配置

性能优化

  • 状态轮询:合理设置状态检测频率,平衡实时性和系统负载
  • LED控制:优化LED控制逻辑,避免频繁切换
  • 温度监控:合理设置温度检测阈值和频率

📚 相关文档