引言:硬件故障是运维最大的黑天鹅

在IDC机房摸爬滚打的运维都懂一个道理:软件故障可以回滚,硬件故障只能换件。一块硬盘的突然死亡,可能让所有备份策略形同虚设。而绝大多数硬件故障并非毫无征兆——SMART(Self-Monitoring, Analysis and Reporting Technology,自监测分析与报告技术)早就把预警写在了磁盘里,只是没人去读。本文从零开始,讲清楚如何用 smartctl 做磁盘健康巡检,并搭建一套硬件故障预警体系。

一、SMART 是什么,为什么它值得信任

SMART 是硬盘固件内置的自我监测系统,持续记录通电时长、重映射扇区数、读写错误率、温度等关键指标。当硬盘内部判定寿命将尽时,会主动上报。对运维来说,SMART 的价值在于:它能在硬盘彻底损坏之前给出可量化的预警窗口。

注意:SMART 依赖硬盘固件支持。机械硬盘(HDD)支持最完整,固态硬盘(SSD/NVMe)也有对应的 SMART 属性,但部分消费级 SSD 可能不完整。虚拟机磁盘(如云盘)通常无法读取 SMART,属于正常现象。

二、安装与基础使用

# Debian/Ubuntuapt install -y smartmontools# CentOS/RHELyum install -y smartmontools

先看系统里有几块盘,再逐个查看 SMART 状态:

lsblk -d -o NAME,SIZE,MODEL# 查看 /dev/sda 的 SMART 健康总览smartctl -H /dev/sda# 查看详细属性smartctl -a /dev/sda

输出中最重要的就是 SMART overall-health self-assessment test result: PASSED。一旦出现 FAILED,请立即备份数据并准备更换硬盘。

三、必须盯住的五个关键属性

smartctl -a 输出几十项属性,运维不需要全看懂,盯住以下五项即可:

  • Reallocated_Sector_Ct(重映射扇区数):硬盘发现坏扇区后会用备用区替换。该值持续增长 = 盘面正在劣化,是最重要的预警指标
  • Current_Pending_Sector(待重映射扇区):已发现但还没替换的坏扇区,出现即预警
  • Offline_Uncorrectable(无法纠正的错误):读都读不出来的扇区,出现基本宣告硬盘死刑
  • Raw_Read_Error_Rate(读取错误率):异常升高说明磁头或盘面有问题
  • Temperature_Celsius(温度):机械盘长期超过 50°C 会显著缩短寿命

用一条命令快速提取关键指标:

smartctl -a /dev/sda | grep -E 'Reallocated|Pending|Uncorrectable|Temperature|Power_On_Hours'

四、自检测试:让硬盘自己跑体检

除了被动读取属性,还可以主动让硬盘做自检:

# 短自检(约2分钟)smartctl -t short /dev/sda# 长自检(数小时,覆盖全盘)smartctl -t long /dev/sda# 查看自检进度和结果smartctl -l selftest /dev/sda

建议:新盘上架做一次长自检;日常巡检只做短自检;长自检安排在业务低峰期,避免 IO 争抢。

五、批量巡检脚本:从手动到自动

服务器多了以后,逐台登录执行显然不现实。写一个巡检脚本,配合 cron 每天执行:

#!/bin/bash# /usr/local/bin/disk_check.shfor disk in $(lsblk -d -o NAME -n | grep -E '^(sd|nvme|vd)'); do  result=$(smartctl -H /dev/$disk | grep -o 'PASSED\|FAILED')  realloc=$(smartctl -a /dev/$disk | awk '/Reallocated_Sector_Ct/{print $10}')  pending=$(smartctl -a /dev/$disk | awk '/Current_Pending_Sector/{print $10}')  if [ "$result" != "PASSED" ] || [ "$realloc" -gt 0 ] || [ "$pending" -gt 0 ]; then    echo "[ALERT] /dev/$disk 异常: status=$result realloc=$realloc pending=$pending" | mail -s "磁盘健康告警 $(hostname)" ops@example.com  fidone

配合 cron 每日执行,并建议接入企业微信/钉钉机器人 webhook 做实时告警。

六、硬件巡检的完整维度

磁盘只是硬件巡检的一部分,一个完整的巡检体系还应包括:

  • 内存:memtest86+ 做内存压力测试,ECC 内存用 edac-utils 查纠错记录
  • CPU:mcelog 记录 Machine Check Exception,CPU 内部错误的第一现场
  • 电源/风扇:ipmitool sensor list 查看电压、转速、温度传感器
  • RAID 卡:MegaCli / storcli 查看阵列状态和电池健康
  • 网络:网卡丢包率、光模块光功率(ethtool -m)

七、结语:把预警做在故障之前

硬件的寿命曲线是确定的,故障却不是突发的——SMART 数据里藏着硬盘的临终遗言。每天花 5 分钟看一遍关键属性,或者让脚本替你看,就能把"硬盘挂了"变成"硬盘快挂了,数据已备份,备件已就位"。这才是 IDC 运维该有的从容。