硬盘要坏了都不知道?SMART健康检测实战教程

硬盘要坏了都不知道?SMART健康检测实战教程

你有没有遇到过这种情况:服务器突然卡死,重启后报“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)名称含义危险信号
5Reallocated_Sector_Ct重映射扇区数RAW_VALUE > 0
196Reallocated_Event_Count重映射事件数RAW_VALUE > 0
197Current_Pending_Sector待映射扇区数RAW_VALUE > 0
198Offline_Uncorrectable无法纠正的扇区RAW_VALUE > 0
10Spin_Retry_Count启动重试次数RAW_VALUE > 0
190/194Temperature_Celsius温度> 50°C
9Power_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 -Hsmartctl -A,就能提前发现问题。看到5、197、198这几个数字大于0,马上备份,然后换硬盘。

别等到数据丢了再后悔。那时候,不是几百块买个新硬盘的事,是几千块做数据恢复的事——而且不一定能成。

今天就去跑一遍smartctl -A /dev/sda,看看你的硬盘还健康吗。

知识库

代码改完自动部署?Git钩子与自动化部署入门

2026-4-23 14:07:49

知识库

运维自动化实战:5个思维转变与效率提升策略

2025-11-6 12:19:06

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧