
你有没有遇到过这种情况:服务器突然卡死,重启后报“disk failure”,数据读不出来了。你找数据恢复公司,对方报价几千块,还不保证能恢复。
其实,硬盘在彻底坏掉之前,会发出很多求救信号。只是你从来没听过。
SMART就是硬盘的“健康监测系统”。它会告诉你:我快不行了,赶紧备份。
今天教你读懂这些信号。
先看一个数据
根据Backblaze(一家云存储公司)的年度硬盘报告,每年约有1.5%-2%的硬盘会损坏。也就是说,你手里100块硬盘,每年会有1-2块坏掉。
更重要的是,超过50%的故障硬盘,在损坏前30天就已经出现了SMART警告。也就是说,硬盘给了你一个月的时间做准备,你没看。
SMART是什么?
SMART的全称是Self-Monitoring, Analysis and Reporting Technology(自我监测、分析与报告技术)。从1995年开始,几乎所有的硬盘都内置了这个功能。
它就像一个“飞行记录仪”,记录硬盘的各种指标:
- 读写了多少次
- 有没有发现坏道
- 有没有把坏道替换掉
- 通电了多少小时
- 温度高不高
这些指标有个阈值。超过阈值,说明硬盘快不行了。
第一步:安装smartctl
smartctl是Linux下查看SMART信息的工具,属于smartmontools软件包。
Ubuntu/Debian:
bash
sudo apt update sudo apt install smartmontools -y
CentOS/RHEL:
bash
sudo yum install smartmontools -y
验证安装:
bash
smartctl --version
官网:https://www.smartmontools.org
第二步:查看硬盘基本信息
先看你系统里有哪些硬盘:
bash
lsblk
常见设备名:/dev/sda、/dev/sdb(SATA/SAS),/dev/nvme0n1(NVMe SSD)。
查看硬盘基本信息:
bash
smartctl -i /dev/sda
输出里看:
- Device Model:硬盘型号
- Serial Number:序列号
- Firmware Version:固件版本
- SMART support:是否开启(一般是Enabled)
如果显示SMART support disabled,用这个命令开启:
bash
smartctl -s on /dev/sda
第三步:快速健康检查
最简单的命令:
bash
smartctl -H /dev/sda
输出:
SMART overall-health self-assessment test result: PASSED→ 健康FAILED→ 快坏了,马上备份
反常识点:PASSED不代表硬盘一定不会坏。它只是说“目前没有达到预警阈值”。有些硬盘在坏掉的前一秒,SMART还是PASSED。所以不能只看这个,要看具体指标。
第四步:看懂关键指标(重点)
bash
smartctl -A /dev/sda
会输出一个表格,每一行是一个指标。这几个最重要:
| 指标(ID) | 名称 | 含义 | 危险信号 |
|---|---|---|---|
| 5 | Reallocated_Sector_Ct | 重映射扇区数 | RAW_VALUE > 0 |
| 196 | Reallocated_Event_Count | 重映射事件数 | RAW_VALUE > 0 |
| 197 | Current_Pending_Sector | 待映射扇区数 | RAW_VALUE > 0 |
| 198 | Offline_Uncorrectable | 无法纠正的扇区 | RAW_VALUE > 0 |
| 10 | Spin_Retry_Count | 启动重试次数 | RAW_VALUE > 0 |
| 190/194 | Temperature_Celsius | 温度 | > 50°C |
| 9 | Power_On_Hours | 通电时间 | > 50000小时(约5.7年) |
解释:
- 重映射扇区:硬盘发现了坏道,用备用扇区替换了。RAW_VALUE不为0,说明已经有坏道了。数值越大,坏道越多。
- 待映射扇区:读不出来的扇区,还没被替换。意味着一读就卡死。不为0就很危险。
- 无法纠正的扇区:数据已经丢了。不为0的话,你的数据可能已经损坏了。
一句话:只要5、197、198这几项的RAW_VALUE>0,就该考虑换硬盘了。
第五步:手动运行自检
SMART有内置的自检程序,可以在后台跑。
短自检(几分钟):
bash
smartctl -t short /dev/sda
长自检(几十分钟到几小时,取决于硬盘大小):
bash
smartctl -t long /dev/sda
查看自检结果:
bash
smartctl -l selftest /dev/sda
会列出最近的自检记录。如果看到Completed: read failure,说明有坏道。
注意:长自检会占用磁盘IO,建议在低峰期跑。
第六步:设置定期检测
写个脚本,每周自动检测,发现异常就发邮件。
创建脚本/root/check_disk.sh:
bash
#!/bin/bash
DISK="/dev/sda"
MAIL="your@email.com"
# 快速检查
STATUS=$(smartctl -H $DISK | grep "SMART overall-health" | awk '{print $6}')
if [ "$STATUS" == "FAILED!" ]; then
echo "硬盘 $DISK SMART状态 FAILED!请立即备份!" | mail -s "硬盘告警" $MAIL
fi
# 检查重映射扇区
REALLOC=$(smartctl -A $DISK | grep "Reallocated_Sector_Ct" | awk '{print $10}')
if [ "$REALLOC" -gt 0 ]; then
echo "硬盘 $DISK 重映射扇区数: $REALLOC" | mail -s "硬盘告警" $MAIL
fi
加执行权限:
bash
chmod +x /root/check_disk.sh
加入crontab,每周一早上9点执行:
bash
0 9 * * 1 /root/check_disk.sh
一个真实案例
有个朋友的NAS(网络存储设备)用了4年,最近发现拷文件变慢。我让他跑smartctl -A /dev/sda,看到Reallocated_Sector_Ct已经3800多了,Current_Pending_Sector有200多。
我说:“这块盘随时会挂,赶紧换。”
他不信,说“还能用”。两周后,NAS挂了,数据恢复花了3000块。
后来他说:“早知道3800那个数字是坏道,我就换了。”
NVMe SSD怎么查?
NVMe SSD的命令不一样:
bash
smartctl -i /dev/nvme0
查看健康信息:
bash
smartctl -H /dev/nvme0
查看详细指标:
bash
smartctl -A /dev/nvme0
NVMe的关键指标:
- Percentage Used:寿命用了多少百分比
- Media and Data Integrity Errors:数据完整性错误
- Critical Warning:严重警告
最后一句
硬盘不会突然暴毙。它会在死之前,一遍一遍地告诉你:我快不行了。
SMART是它的求救信号。你每个月跑一次smartctl -H和smartctl -A,就能提前发现问题。看到5、197、198这几个数字大于0,马上备份,然后换硬盘。
别等到数据丢了再后悔。那时候,不是几百块买个新硬盘的事,是几千块做数据恢复的事——而且不一定能成。
今天就去跑一遍smartctl -A /dev/sda,看看你的硬盘还健康吗。




