半夜收到一条告警:SMART failure predicted on /dev/sda。你登录上去,业务还在跑,文件能读能写,磁盘空间也正常,于是犹豫了——这块盘真的坏了吗?现在换会不会小题大做?换个角度想:SMART 是硬盘用自己内置的监测电路给出的"体检报告",它是唯一能在数据真正丢失之前给你预警的机制。这份报告要么被你读懂并据此行动,要么在几个月后变成一次无法恢复的数据事故。本文讲清 SMART 各项指标怎么读、哪些数值出现就必须立刻换盘、以及在换盘前如何安全地把数据迁移走。
一、SMART 能做什么、不能做什么
SMART(Self-Monitoring, Analysis and Reporting Technology,自我监测分析与报告技术)是固化在硬盘固件里的一套监测机制。硬盘在运行中持续统计自身的各种物理参数——扇区重映射次数、寻道错误率、通电时长、温度、写入总量等,并以"属性(Attribute)"的形式暴露出来。
它能做的:提前发现介质退化(坏道增多)、机械部件异常、接口错误、温度过高、固态盘寿命耗尽。统计表明相当比例的硬盘故障在发生前,SMART 里就已经有可观测的异常。
它不能做的:SMART 无法预测突然性故障——控制板烧毁、电机卡死、固件 bug,这些可能毫无预兆。所以 SMART 正常不等于不会坏,这也是"SMART 正常就不做备份"这个想法危险的原因。SMART 是风险预警手段,不是保险。
二、环境准备与基础检测
# 安装 smartmontools yum install -y smartmontools # RHEL/CentOS/Rocky apt-get install -y smartmontools # Debian/Ubuntu # 扫描系统中的 SMART 设备 smartctl --scan # 查看设备基本信息,确认 SMART 是否可用 smartctl -i /dev/sda # 若 SMART 未开启,手动开启 smartctl -s on /dev/sda # 开启离线数据采集(后台自动测试) smartctl -o on /dev/sda # 快速健康总评(只看一句话结论) smartctl -H /dev/sda
smartctl -H 的输出最关键的一行是 SMART overall-health self-assessment test result: PASSED 或 FAILED。出现 FAILED 就意味着硬盘自己判断"我快不行了",这时候不要再有任何侥幸心理。
需要注意的是,-H 只是厂商预设阈值的综合判断,很多早期退化(比如刚开始出现几个重映射扇区)并不会让整体状态变成 FAILED。所以必须看详细的属性值。
2.1 在 RAID 卡后面的盘怎么测
这是运维最容易卡住的地方:服务器前面板插了 4 块盘,但 smartctl /dev/sda 报错说设备不支持 SMART——因为 /dev/sda 是 RAID 卡虚拟出来的逻辑盘,不是物理盘。要用 -d 指定设备类型和通道号。
# MegaRAID / LSI 卡:N 为物理盘通道号(从 0 开始) smartctl -a -d megaraid,0 /dev/sda smartctl -a -d megaraid,1 /dev/sda # SATA 盘挂在 SAS/RAID 卡后面,需要协议转换 smartctl -a -d sat+megaraid,0 /dev/sda # HP Smart Array(旧版 cciss 驱动) smartctl -a -d cciss,0 /dev/cciss/c0d0 # NVMe 盘直接用设备名 smartctl -a /dev/nvme0n1 # 循环扫描所有可能的通道号 for i in 0 1 2 3 4 5; do echo "=== slot $i ==="; smartctl -H -d megaraid,$i /dev/sda; done
三、关键 SMART 属性解读
smartctl -a 输出的属性表长这样:ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE。理解每一列是判读的前提:
- VALUE(当前值):归一化后的健康度,出厂通常从 100 开始递减,降到 THRESH 及以下即判定失败。
- WORST(最差值):历史上出现过的最差值。它比 VALUE 更能说明"这块盘经历过什么"。
- THRESH(阈值):厂商设定的失败线。
- WHEN_FAILED:出现
FAILING_NOW表示当前已失败;In_the_past表示历史曾失败过。 - RAW_VALUE(原始值):真实的物理计数,这是最有价值的一列。比如重映射扇区的实际个数。
| ID | 属性名 | 含义 | 判读标准 |
|---|---|---|---|
| 5 | Reallocated_Sector_Ct | 已重映射扇区数(坏道被备用扇区顶替) | RAW 值 > 0 就该警惕;持续增长必须换盘 |
| 197 | Current_Pending_Sector_Ct | 待映射扇区(读不稳定,等待下次写入决定去留) | RAW > 0 即高危,说明已有读不出来的扇区 |
| 198 | Offline_Uncorrectable | 离线扫描发现无法纠正的扇区 | RAW > 0 说明数据已可能损坏 |
| 199 | UDMA_CRC_Error_Count | 接口传输校验错误(线缆/接口问题) | 增长说明数据线或背板有问题,先换线再判断盘 |
| 187 | Reported_Uncorrectable_Errors | 无法用硬件 ECC 纠正的错误 | 出现即严重 |
| 188 | Command_Timeout | 命令超时次数 | 持续增长说明盘响应变慢 |
| 194 | Temperature_Celsius | 温度 | 持续超过 50℃ 需改善散热;超过 60℃ 明显加速老化 |
| 9 | Power_On_Hours | 累计通电小时数 | 机械盘超过 3 万小时应重点监控 |
| 12 | Power_Cycle_Count | 通电次数 | 配合通电时长判断老化程度 |
| 202 | Percent_Lifetime_Remaining | 固态盘剩余寿命百分比(部分厂商) | 低于 20% 应计划更换 |
| 233 | Media_Wearout_Indicator | 固态盘磨损指标 | VALUE 降到 THRESH 即寿命耗尽 |
| 241 | Total_LBAs_Written | 累计写入量(LBA 总数) | 结合盘标称 TBW 估算剩余寿命 |
不同厂商、不同型号的属性 ID 含义会有出入(尤其是固态盘),判断时以属性名称为准,不要只记 ID。
四、测试命令:short、long 与结果查看
SMART 支持两种自检,区别在于覆盖范围和耗时。
# 查看自检能力与支持的自检时长 smartctl -c /dev/sda # 短自检(通常 1~2 分钟,检查电路、机械、读性能) smartctl -t short /dev/sda # 长自检(全盘扫描,通常几十分钟到数小时,取决于容量) smartctl -t long /dev/sda # 查看自检结果 smartctl -l selftest /dev/sda # 查看错误日志(记录导致命令失败的事件) smartctl -l error /dev/sda # 完整信息一次性输出(最常用) smartctl -a /dev/sda # 只看属性表 smartctl -A /dev/sda | grep -Ei 'realloc|pending|uncorrect|crc|timeout|temperature|power_on|wearout|percent'
smartctl -l selftest 的结果里,# 1 Short offline Completed without error 是正常;如果显示 Completed: read failure 并带一个 LBA 地址,说明那个逻辑块地址读不出来——这就是明确的坏道位置。
长自检对生产系统有明显性能影响,应在业务低峰期执行。执行期间可以继续对外服务,自检会在后台进行,用 -c 查看剩余进度百分比。
五、判读标准:什么情况必须立即换盘
把上面的指标整理成可执行的判断规则:
smartctl -H返回 FAILED:立即更换,不要等。- Current_Pending_Sector_Ct 的 RAW 值 > 0:已有扇区读取不稳定,这是数据丢失的直接前兆,立即更换。
- Reallocated_Sector_Ct 的 RAW 值在一周内持续增长(比如昨天 12、今天 48):不是"几个坏道"的小问题,而是介质在持续退化,立即更换。
- Offline_Uncorrectable > 0:数据已可能损坏,立即更换并从备份校验数据。
- 长自检报 read failure:立即更换。
- 固态盘 Media_Wearout_Indicator 的 VALUE ≤ THRESH,或剩余寿命低于 10%:写入已达设计上限,计划更换。
- 温度长期高于 55℃:先解决散热(清灰、检查风扇、改善风道),温度降下来后再复测其他指标。
- UDMA_CRC_Error_Count 增长:先换数据线和背板接口,排除线缆问题后再判断盘本身;这类错误很多时候"坏的不是盘"。
一个重要的观察方法:单点数据没有意义,趋势才有意义。把每周的 smartctl -A 输出保存下来做对比,才能判断某个数值是静止的历史遗留还是正在恶化。很多盘出厂就有少量重映射扇区且此后不再增长,这种可以继续使用但需监控。
六、数据迁移:换盘前的正确操作顺序
确认要换盘后,关键是不要在高负载下做全盘拷贝——一块正在坏掉的盘,高强度读取很可能成为压垮它的最后一根稻草。正确顺序如下。
- 先确认有可用备份,并检查备份最近一次成功的时间。没有备份就不要做任何高风险操作,先做备份。
- 通知业务方并安排窗口,把该盘上的服务切走或降级。
- 用 rsync 迁走文件级数据(首选,只读必要数据,可断点续传):
# 首次迁移:归档模式 + 压缩传输 + 保留硬链接/ACL rsync -avzHAX --numeric-ids --info=progress2 /data/ /backup/data/ # 增量再同步一次,确保切换前数据一致 rsync -avzHAX --numeric-ids --delete /data/ /backup/data/ # 对坏盘用 ddrescue 做镜像级抢救(跳过坏区、可反复重试) apt-get install -y gddrescue ddrescue -f -n /dev/sda /dev/sdb /root/rescue.map # 第一轮跳过坏区 ddrescue -d -f -r3 /dev/sda /dev/sdb /root/rescue.map # 第二轮重试坏区 3 次
- 如果是阵列成员盘,直接用 mdadm 替换,让阵列自己重建(比手工拷贝更可靠):
mdadm /dev/md0 --fail /dev/sda1 mdadm /dev/md0 --remove /dev/sda1 # 关机换上新盘后 mdadm /dev/md0 --add /dev/sda1 watch -n 5 cat /proc/mdstat
- 重建前检查其余成员盘的健康状态:对每块盘跑一次
smartctl -t long,避免重建压力压垮另一块亚健康盘。 - 重建完成后校验数据:对比文件数量、关键文件的校验值(
sha256sum),确认无误再恢复业务。 - 坏盘下线后做安全销毁:含敏感数据的盘按流程消磁或物理销毁,不要直接丢弃。
七、把 SMART 做成常态化监控
别等到收到告警才第一次跑 smartctl。smartmontools 自带守护进程 smartd,可以持续监控并自动发邮件。
# 主配置文件 vim /etc/smartd.conf # 示例:监控所有设备,出错时发邮件给 root DEVICESCAN -a -m root@localhost -M exec /usr/share/smartmontools/smartd-runner # 针对单块盘的自定义告警 /dev/sda -a -o on -S on -s (S/../.././02|L/../../6/03) -m ops@example.com # 启动并设置开机自启 systemctl enable --now smartd # 先做一次发信测试,确认告警通道可用 smartctl -m root@localhost -M test /dev/sda
-s (S/../.././02|L/../../6/03) 是定时自检表达式:每天 02:00 做短自检,每周六 03:00 做长自检。表达式格式为 T/MM/DD/d/HH,配置时对照文档确认,写错会导致自检不执行。
小结与避坑建议
面对 SMART 报错,正确的心态是:硬盘自己说它不行了,那就真的不行了。SMART 的预警有相当的准确率,而一次误判的代价(换一块盘)远小于一次漏判的代价(数据丢失)。判断依据是"趋势 + 关键项",重点是 Reallocated_Sector_Ct、Current_Pending_Sector_Ct、Offline_Uncorrectable 这三个 RAW 值,以及长自检是否报 read failure。
避坑清单:
- 只看
smartctl -H的 PASSED 就放心。整体状态 PASSED 但重映射扇区持续增长的盘,比 FAILED 但数值静止的盘更危险。 - 把阈值归一化值(VALUE)当成百分比看。VALUE 是递减的,100 是最好,而且是相对刻度,不是"还能用 100%"的意思。
- 坏盘上跑长自检。长自检是高强度全盘读取,可能加速已经脆弱的盘彻底失效。疑似坏盘应先迁移数据,自检只对健康盘做例行检查。
- 把 UDMA_CRC 错误当成盘坏了。先换线、换口、清灰,很多时候问题在链路上。
- 没有告警通道。smartd 配了但邮件发不出去,等于没配。上线后务必用
-M test验证一次。 - 换盘后不校验。重建完成不等于数据正确,尤其是源盘本身有坏道时,必须做文件级校验。
- 忘了保留历史记录。每次巡检把
smartctl -A输出归档,趋势分析是唯一能提前发现缓慢退化的手段。
最后重申:SMART 只能提前告知风险,真正保护数据的是备份。一套有效的备份(异地、多份、可恢复演练过)才是硬盘故障面前唯一的保险。
本文为存储与硬盘管理系列,SMART 属性名称因厂商与介质类型而异,请以实际输出为准。
企业QQ咨询




