用smartctl检测硬盘健康度的核心是主动分析Reallocated_Sector_Ct、Current_Pending_Sector和UDMA_CRC_Error_Count三项原始值变化趋势,结合短/长自检定位物理问题,并建立周期性观测机制实现早期预警。

用 smartctl 检测数据盘健康度,核心不是等它“报错”,而是主动抓取硬盘固件里已发生的物理损伤痕迹和正在恶化的趋势信号。重点不在看“是否通过”,而在读懂三类关键属性的原始值变化。
确认设备并启用SMART支持
先确保目标数据盘已正确识别且SMART功能开启:
- 运行 sudo lsblk -d -o NAME,MODEL,ROTA,TRAN,区分机械盘(ROTA=1)、SATA SSD(TRAN=sata)、NVMe SSD(TRAN=nvme);
- 对 SATA/SAS 盘执行 sudo smartctl -i /dev/sdb,检查输出中是否含 “SMART support is: Enabled”;
- 若显示 disabled,需手动启用:sudo smartctl -s on /dev/sdb;
- NVMe 盘必须加 -d nvme 参数,否则无法读取有效数据,例如:sudo smartctl -a -d nvme /dev/nvme0n1。
聚焦三项真实损伤指标
执行 sudo smartctl -A /dev/sdb 后,在 “SMART Attributes Data Structure” 表格中只盯以下三行 Raw Value(原始值),它们是硬盘自己上报的硬证据:
- Reallocated_Sector_Ct(ID 5):只要大于 0,说明已有扇区因不可修复错误被替换,坏道已实际发生;持续上升 = 坏道在扩散,应立即备份并安排更换;
- Current_Pending_Sector(ID 197):大于 0 表示存在读取不稳定的扇区,下次写入可能触发强制重映射,这是故障爆发前最关键的临界信号;
- UDMA_CRC_Error_Count(ID 199):数值缓慢增长通常反映数据线松动、供电不稳或主板 SATA 接口老化,虽非盘体本体故障,但会反复引发 I/O 中断,间接加速坏道生成。
配合自检验证风险位置
属性异常只是线索,需通过主动测试确认是否真有物理问题:
- 先跑短自检:sudo smartctl -t short /dev/sdb(约2分钟),快速筛查高风险区域;
- 若短检通过但上述三项已非零,再执行长自检:sudo smartctl -t long /dev/sdb(HDD 通常需2–4小时);
- 过程中用 sudo smartctl -c /dev/sdb 查进度;
- 完成后查结果:sudo smartctl -l selftest /dev/sdb,重点关注 “Status” 是否为 Completed without error;若有 Failed 条目,其 LBA 地址即为可定位的物理坏道位置。
建立周期性观测机制
单次检查意义有限,真正预警靠连续记录趋势:
- 可用简单脚本每6小时记录一次 Reallocated_Sector_Ct、Current_Pending_Sector 和 UDMA_CRC_Error_Count 的原始值;
- 结合通电时长(Power_On_Hours)判断盘龄:HDD 超过50000小时、SSD 超过30000小时,需提高巡检频率;
- SSD 还要关注 05 Percentage Used(磨损百分比),>90 即属高风险;NVMe SSD 则看 C3 Available Spare(备用块余量),低于10%需预警。
不复杂但容易忽略。关键在于把 smartctl 当作日常听诊器,而不是故障后才拿出来的急救包。

















