| name | disk-health-diagnosis |
| description | 服务器磁盘健康全栈诊断与故障预测技能。面向存储运维/SRE/硬件故障预测团队, 系统性阐述并执行"在磁盘尚未发生故障时,如何通过多层检测手段提前识别风险"的完整方法论。 覆盖 L1~L6 六层检测体系,基于现状、趋势、背景三视角进行故障预测。 支持三类日志来源:①iBMC 带外日志(华为/浪潮/H3C)②OS infocollect 包 ③系统日志。 输出风险评分、P0~P3风险等级(四类归因)及分级处置建议。
|
| platforms | ["linux"] |
磁盘健康全栈诊断与故障预测技能
一、预测核心判断逻辑
本技能的诊断逻辑不仅是事后判断"现在坏没坏",而是基于趋势和多层指标,综合评估**"它是否正在走向失败,走得多快"**。在执行诊断时,需要同时回答三个问题:
- 现状:当前健康状态是否已有异常?(单点值)
- 趋势:关键指标是否在持续劣化?(diff/增长率)
- 背景:环境、寿命、负载是否放大了风险?(上下文)
二、分层检测体系
磁盘故障预测应覆盖 6 个层次,不能只看盘本体。
┌────────────────────────────────────────────────────┐
│ L6 业务与存储服务层 OSD / EVS / ECS / 块存储 │
├────────────────────────────────────────────────────┤
│ L5 文件系统与OS层 dmesg / kernel / mount │
├────────────────────────────────────────────────────┤
│ L4 控制器与链路层 RAID / HBA / SAS / CRC │
├────────────────────────────────────────────────────┤
│ L3 槽位与环境层 Slot / 温度 / 背板 / 电源 │
├────────────────────────────────────────────────────┤
│ L2 寿命与负载层 上电时间 / 启停次数 / IO压力 │
├────────────────────────────────────────────────────┤
│ L1 盘本体 SMART 层 健康状态 / 错误计数 / 缺陷趋势 │
└────────────────────────────────────────────────────┘
↑ 越往下越接近介质本身,越往上越接近业务影响
预测重点:L1 + L3 + 趋势维度,是提前发现故障最有价值的三个方向。
三、各层详细检测项与指标
L1 & L2:盘本体及负载寿命层 (SMART + 负载)
检测目的:直接判断磁盘介质是否出现物理损伤(L1)并结合设备负载及寿命消耗进行综合风险评估(L2)。
优先使用自动化脚本检测:
诊断时必须优先使用内置的自动化脚本:python3 scripts/smart_diagnosis.py <log_path>。
该脚本已封装 L1(物理坏道/寿命耗尽等)与 L2(高通电时间/启停次数等)所有的 SMART 指标规则(参考指南:references/smart_disk_health_diagnosis_guide.md),支持自动探测日志场景并提取关键指标,并输出标准化报告至 /tmp/smart_diagnosis_report_YYYYMMDD_HHMMSS_xxxx.txt。可以使用 --help 参数查看帮助说明。
脚本使用示例:
python3 scripts/smart_diagnosis.py <log_directory>
脚本执行失败的降级方案:
如果自动化脚本执行失败或因环境原因受限,诊断必须降级为自主手动分析。请严格参考 references/smart_disk_health_diagnosis_guide.md 中的场景分类、日志路径及核心指标阈值标准,自主完成检测与评估。
💡 详细的 L1 & L2 检测指标说明(包括核心物理状态、介质错误、机械健康、SSD/NVMe 专属指标及负载寿命指标),请统一参阅: references/smart_disk_health_diagnosis_guide.md 中的“附录:SMART 核心指标速查(行业标准)”章节。
L3 & L4:槽位环境与链路控制器层
检测目的:排除"背板/槽位/温度/电源"导致的非盘本体问题,区分"真盘坏"与"链路/控制器引发的假盘坏",防止误判换盘。
优先使用自动化脚本检测:
诊断时必须优先使用内置的自动化脚本:python3 scripts/env_link_diagnosis.py <log_path>。
该脚本能够自动分析 iBMC 和 Infocollect 日志中的温度、电源、风扇传感器,并提取 SMART ID 199 (CRC 错误)、RAID 控制器状态以及系统底层的链路重置记录。执行后会输出诊断报告至 /tmp/env_link_diagnosis_report_YYYYMMDD_HHMMSS_xxxx.txt。
脚本使用示例:
python3 scripts/env_link_diagnosis.py <log_directory>
手动降级方案与核心关注指标:
若脚本受限,请重点检索:
smart_199_raw_value (UDMA CRC 错误):若高则代表线缆/背板异常。
- RAID 状态:
sasraidlog / RAID_Controller_Info 中是否存在 Degraded、Offline。
- 链路重置:
dmesg / messages 中是否存在 reset link、hard resetting link。
- 散热与供电:
sensor_info.txt、psu_info.txt、ps_black_box.log 中是否存在异常记录。
判断原则:若 CRC 高、链路重置频繁而 SMART 介质指标正常,优先排查链路和接触不良,不要轻易换盘。
L5 & L6:文件系统与业务层 (OS 报错 + 业务告警)
检测目的:感知操作系统已经"观察到"的 IO 错误,是故障进入系统可见阶段的信号。同时从业务影响面评估是否需要立即止血,并反向印证盘层分析。
优先使用自动化脚本检测:
诊断时优先使用对应的自动化脚本进行分析:python3 scripts/os_io_error_diagnosis.py <log_path>。
该脚本已封装 L5(文件系统与OS层)和 L6(业务与存储服务层)所有的报错检测规则。
分析路径与日志来源:
通过分析参考文档可知,硬件带外 BMC 日志(如华为、H3C等 iBMC 日志)不包含 OS 层文件系统错误。此类故障需从 OS Infocollect 日志 中提取:
system/dmesg.txt 或 var/log/dmesg
system/var/log/messages*
详细的日志特征和严重程度说明,请参考 Infocollect 日志分析指南: OS 层及业务层常见错误指标。
四、排查诊断流程
当进行磁盘诊断分析时,请严格遵循以下流程:
五、故障预测方法论
本方法论旨在通过分析 L1 到 L6 各层级的错误特征,揭示磁盘故障在物理、链路、系统和业务层面的传播路径与相互影响,从而实现对磁盘健康状况的全面评估与精准预测。
5.1 各层级故障的相互影响与传播路径
磁盘故障通常不是孤立的,而是由底层向上传播,或由外部环境(链路/散热)向下引发。在诊断时,必须建立全局视角,交叉验证不同层级的指标:
-
L1(介质物理层) → L5/L6(系统业务层):
- 传播路径:当底层介质出现坏道(L1:如
smart_197/198 或 G-list 增长)且无法通过固件 ECC 修复时,错误会向上传递给操作系统,导致内核报错(L5:如 I/O error, dev sdX)。如果错误发生在关键数据区或系统盘,将直接导致存储服务阻塞或退出(L6:如 OSD IO 阻塞 或 文件系统只读)。
- 诊断意义:如果 L5/L6 出现读写错误,必须下钻至 L1 检查 SMART 指标。若 L1 正常,则大概率为链路或软件层问题。
-
L4(链路与控制器层) → L1(介质物理层) / L5(系统业务层):
- 传播路径:背板接触不良、SAS 线缆老化或 RAID 卡异常(L4:如
CRC 错误 或 PHY 误码)会导致指令在传输过程中丢失。这会引发磁盘频繁重试,表现为 SMART 超时计数增加(L1:Command_Timeout)。同时,链路重置会直接导致操作系统报出链路层错误(L5:reset link 或 hostbyte=DID_SOFT_ERROR)。
- 诊断意义:当发现大量的 L5 链路重置报错和 L1 的 CRC/超时错误时,不要盲目更换磁盘,应优先排查线缆和背板。
-
L3(散热与环境层) → L1/L2(介质物理层与寿命):
- 传播路径:风扇故障或机房空调异常(L3:环境温度超阈值)会加速机械硬盘电机老化或 SSD 颗粒损耗,导致 L1 的 SMART 温度指标(
smart_194)报警,并可能间接引发寿命消耗过快(L2)或机械类错误(L1:Spin_Retry_Count)。
- 诊断意义:高温是磁盘杀手。当发现某区域多块磁盘同时报出 SMART 预警时,优先检查 iBMC 的环境温度与风扇日志。
-
L2(负载与寿命层) → L1(介质物理层):
- 传播路径:长期处于高 IO 吞吐或频繁启停状态(L2:
%util > 90% 或启停次数超限),会加速磁盘的物理磨损,最终表现为坏道增加或寿命耗尽(L1:Wear_Leveling_Count 见底)。
- 诊断意义:在评估亚健康盘的风险时,必须结合 L2 的通电时间和负载。高龄高负载盘即使当前 L1 指标仅有轻微异常,其劣化风险也远高于新盘。
5.2 综合风险评级标准
结合 L1-L6 的交叉验证结果,将磁盘健康状态分为四个等级:
| 风险等级 | 判定条件 (满足其一即可) | 建议动作 |
|---|
| P0 致命故障 | 1. L1 核心指标触发(smart_198 > 0、SSD 寿命耗尽)。 2. iBMC/FDM 硬件底噪判定为 Fault。 3. L5/L6 报出严重错误(如文件系统只读、介质不在位)且 L1 同步异常。 | 立即换盘,限期 4 小时内完成业务迁移与替换,防止数据丢失。 |
| P1 高危亚健康 | 1. 坏道指标(smart_5、smart_197、G-list)近期持续增长。 2. 出现显著的链路或控制器错误(L4)且影响到 L5 系统 IO。 3. SMART Health 预警。 | 计划换盘,准备备件,建议在 7 天内安排维护窗口进行替换。 |
| P2 重点关注 | 1. 坏道指标非零但长期稳定无增长。 2. 单次/轻微的超时或 CRC 错误(L1/L4)。 3. 持续的高温环境预警(L3)。 | 提升监控频率,排查环境/链路因素,持续观察 14 天趋势。 |
| P3 背景风险 | 1. 累计通电时间 > 5年或极高强度的历史负载(L2)。 2. 所有关键错误指标均为 0。 | 例行维护,记录在案,可结合机房整体规划在下一批次批量汰换。 |
六、诊断结果输出规范
在完成日志收集与分析后,必须向用户输出结构化、信息详尽的诊断报告。报告需包含全局汇总、具体的故障坐标以及分类明确的排查结论。
6.1 报告结构要求
- 基本信息与检测场景:明确日志路径、执行时间以及识别出的日志场景(如华为 iBMC、OS infocollect 等)。
- 磁盘信息汇总清单:列出所有检测到的物理磁盘的设备名、槽位、型号、序列号及基本健康状态。
- 故障或亚健康详情(核心部分):
- 必须分类列出所有存在问题的磁盘。
- 每个问题项必须提供精确坐标:包括发生的时间点、具体的来源日志文件路径、所在行号以及完整的原始日志内容。
- 给出结合 L1-L6 层级关系的归因分析与风险评级(P0-P3)。
- 最终处理建议:针对每块问题盘,给出明确的下一步动作指导(如立即换盘、排查线缆、继续观察等)。
6.2 诊断报告输出模板示例
================================================================================
服务器磁盘健康预测与综合诊断报告
================================================================================
【基本信息】
检测执行时间 :2026-04-02 14:30:00
日志包路径 :/opt/data/logs/10.107.18.37/
检测场景 :OS Infocollect + 华为 iBMC 综合分析
服务器信息 :SN: 2102312XXXXXX | 型号: TaiShan 200 2280 | iBMC: 6.09
================================================================================
第一部分:硬件健康综述
================================================================================
【1. 磁盘清单总览】
| 设备 | 槽位 | 类型 | 型号 | 序列号 | 容量 | 通电(h) | 健康状态 |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| /dev/sda | Slot 0 | SATA | SAMSUNG MZ7LH240HAHQ | S45RNA0MC30570 | 240G | 34026 | [✅ PASSED] |
| /dev/sdb | Slot 1 | SAS | SEAGATE ST8000NM0055 | ZA123456 | 8T | 45120 | [❌ FAILED] |
| /dev/sdc | Slot 2 | NVMe | SAMSUNG MZWLL1T6HAJQ | S3EVNX0K500001 | 1.6T | 12033 | [✅ PASSED] |
| /dev/sdd | Slot 3 | SAS | TOSHIBA MG06ACA800E | YxxxxxxF | 8T | 28800 | [⚠️ PASSED]* |
* PASSED 带 ⚠️ 表示 SMART 整体健康通过,但存在亚健康指标,详见第三部分
【2. 核心组件状态】
| 组件名称 | 当前状态 | 详情说明 |
| :--- | :--- | :--- |
| RAID 控制器 | ⚠️ Degraded (降级) | 当前阵列因 /dev/sdb 故障降级,冗余已失效 |
| 文件系统 (/) | ✅ 正常 | EXT4, 最近 fsck: 2026-03-01 |
| 文件系统 (/data) | ⚠️ 已只读挂载 | EXT4, 挂载设备: /dev/sdb1 (人工 fsck 后恢复) |
| 环境温度 | ❌ 超温高危 | 机箱入口: 28°C (正常), /dev/sdb: 52°C (超限) |
| 电源/风扇 | ✅ 正常 | 风扇转速 3600 RPM, PSU 正常 |
================================================================================
第二部分:故障深度分析(已发生故障,需立即处置)
================================================================================
【P0 致命故障】 设备: /dev/sdb | SN: ZA123456 | Slot: 1 | 建议: 立即换盘
--------------------------------------------------------------------------------
▶ 故障链路与归因分析:
L3 超温 → L1 介质坏道 → L5 内核 I/O 报错 → L5 文件系统只读 → 人工干预恢复
1. [环境层 L3]:/dev/sdb 温度长期超过 45°C(当前 52°C),加速了磁介质的物理损耗。
2. [介质层 L1]:SMART ID198 出现不可修复坏道,固件 ECC 已无法自动修复。
3. [系统层 L5]:底层坏道导致 OS 内核收到块设备读取失败,触发持续的 I/O error。
4. [文件系统 L5]:EXT4 检测到连续写入错误,为保护数据一致性自动 remount 为只读。
5. [人工干预]:运维人员手动拔插该盘并执行了 fsck 尝试修复文件系统。
▶ 故障时间线 (Timeline):
[2026-04-02 08:20:11] [异常] L4 链路重置: ata1.00 hard resetting link (源: messages)
[2026-04-02 10:15:22] [故障] L1 介质坏道: ID198 Offline_Uncorrectable = 5 (源: disk_smart.txt)
[2026-04-02 10:15:25] [故障] L5 I/O报错: blk_update_request: I/O error, dev sdb (源: messages)
[2026-04-02 10:15:26] [故障] L5 文件系统: EXT4-fs error... Remounting read-only (源: messages)
[2026-04-02 10:20:00] [操作] L5 磁盘离线: Synchronizing SCSI cache (源: messages)
[2026-04-02 10:45:00] [操作] L5 磁盘上线: Attached SCSI disk (源: messages)
[2026-04-02 10:48:30] [修复] 人工执行: fsck.ext4 -y /dev/sdb1 (源: bash_history)
[2026-04-02 10:50:15] [部分] L5 恢复完成: recovery complete (源: messages)
▶ 修复状态评估:
- 文件系统 fsck:✅ 逻辑结构已恢复读写。
- 物理介质坏道:❌ 未修复,ID198=5,物理损伤永久存在且不可逆。
- 高温环境根因:❌ 未处理,温度仍为 52°C。
⚠️ 结论:fsck 仅是临时性抢救,底层物理损坏不可逆,该盘随时可能再次脱机。
================================================================================
第三部分:亚健康风险清单
================================================================================
【P1 高危亚健康】 建议 7 天内计划换盘
| 设备 | 层级 | 风险指标 | 当前值 | 阈值/趋势 | 风险说明 |
| :--- | :--- | :--- | :--- | :--- | :--- |
| /dev/sdd | L1 | elem_in_grown_defect_list | 142 | >0 (↑持续增长) | G-list 坏道池近 14 天内从 87 增长至 142 (差值 +55),劣化速率加快。 |
| /dev/sdd | L2 | Power_On_Hours | 28800h | >35000h (—) | 通电时间长,结合 G-list 持续增长,寿命与坏道风险双重叠加。 |
【P2 重点关注】 建议 14 天内持续观察,排查环境/链路因素
| 设备 | 层级 | 风险指标 | 当前值 | 阈值/趋势 | 风险说明 |
| :--- | :--- | :--- | :--- | :--- | :--- |
| /dev/sda | L4/L5 | hard resetting link 次数 | 8 次 | 0 (↑频发) | SMART介质正常,但链路重置集中于 08:15~08:25,优先排查背板/线缆。 |
| /dev/sdc | L3 | Temperature_Celsius | 47°C | ≤45°C (稳定) | NVMe 盘温度轻微超限,机箱整体散热正常,建议关注后续趋势。 |
【P3 背景风险】 记录在案,纳入例行维护关注
| 设备 | 层级 | 风险指标 | 当前值 | 阈值/趋势 | 风险说明 |
| :--- | :--- | :--- | :--- | :--- | :--- |
| /dev/sda | L2 | Power_On_Hours | 34026h | 通电时间较长 | 所有关键错误指标均为 0,建议纳入下一次批量硬件汰换计划。 |
================================================================================
第四部分:综合结论与行动建议
================================================================================
🔴 [全局警告]:当前 RAID 阵列已降级(冗余保护失效),系统处于无保护状态,
在 /dev/sdb 换盘重建完成前,任何磁盘故障都将导致数据永久丢失!
分级行动执行表:
| 级别 | 设备 | 建议行动步骤 | 截止要求 |
| :--- | :--- | :--- | :--- |
| P0 | /dev/sdb | 1. 立即停止对该盘所在文件系统的写入操作。<br>2. 核查 /data 业务数据完整性,启动紧急数据迁移。<br>3. 提交换盘工单,申请同型号备件。<br>4. 换盘完成后启动 RAID 重建,恢复冗余保护。<br>5. 排查高温根因(检查风道遮挡、槽位散热垫片)。 | [立即执行]<br>[4小时内]<br>[换盘后]<br>[24小时内] |
| P1 | /dev/sdd | 1. 采集最新 SMART 数据,密切对比 G-list 增长速率。<br>2. 准备同型备件,安排计划性换盘。<br>3. 换盘前务必做好数据备份或迁移预案。 | [24小时内]<br>[7天内] |
| P2 | /dev/sda | 1. 安排维护窗口重新拔插该磁盘以排查物理链路接触。<br>2. 若拔插后链路重置消失,更换线缆;若仍存在则更换背板。 | [下一窗口] |
| P2 | /dev/sdc | 1. 关注 NVMe 温度趋势,若 48h 内持续 >47°C 则清理风道。 | [日常巡检] |
================================================================================