Smartmontools 硬盘健康监控教程
Smartmontools 是 Linux 下最常用的硬盘健康监控工具套件,它通过读取硬盘内置的 SMART(Self-Monitoring, Analysis and Reporting Technology)数据来评估硬盘的健康状态。该套件包含 smartctl(命令行查询工具)和 smartd(后台监控守护进程)两个核心组件。通过定期监控 SMART 数据,你可以在硬盘彻底故障前提前发现问题并采取措施。本文适用于物理服务器管理场景,搬瓦工 VPS 使用虚拟磁盘,SMART 数据由宿主机管理。
一、安装 Smartmontools
1.1 在 Ubuntu/Debian 上安装
apt update
apt install smartmontools -y
1.2 在 CentOS/RHEL 上安装
yum install smartmontools -y
1.3 启动 smartd 服务
systemctl enable smartd
systemctl start smartd
systemctl status smartd
二、使用 smartctl 查看硬盘信息
2.1 查看硬盘基本信息
# 查看硬盘型号、固件版本、序列号等
smartctl -i /dev/sda
2.2 查看 SMART 健康状态
# 快速健康检查
smartctl -H /dev/sda
# 输出示例:
# SMART overall-health self-assessment test result: PASSED
如果输出为 PASSED 表示硬盘整体健康,如果为 FAILED 则表示硬盘即将故障,应立即备份数据。
2.3 查看所有 SMART 属性
# 查看完整 SMART 信息
smartctl -a /dev/sda
# 只查看 SMART 属性
smartctl -A /dev/sda
三、关键 SMART 属性解读
SMART 属性众多,以下是需要重点关注的几个指标:
- Reallocated_Sector_Ct(ID 5):重新分配的扇区数。数值增长说明磁盘出现坏道,且坏道已被备用扇区替代。该值持续增长预示磁盘寿命接近终点。
- Spin_Retry_Count(ID 10):电机启动重试次数。数值增大可能预示机械故障。
- Current_Pending_Sector(ID 197):当前等待重新分配的扇区数。这些扇区读取困难,可能即将成为坏道。
- Offline_Uncorrectable(ID 198):离线无法修正的扇区数。表示存在无法通过重新分配修复的坏道。
- UDMA_CRC_Error_Count(ID 199):数据传输 CRC 错误数。数值大通常说明数据线或接口有问题。
- Temperature_Celsius(ID 194):硬盘温度。长期高温会加速硬盘老化。
- Power_On_Hours(ID 9):通电时间(小时)。了解硬盘的使用年限。
3.1 快速检查关键指标
# 只显示关键属性
smartctl -A /dev/sda | grep -E "Reallocated|Current_Pending|Offline_Uncorrectable|Temperature|Power_On"
四、执行 SMART 自检
4.1 短时自检
# 启动短时自检(约 2 分钟)
smartctl -t short /dev/sda
# 查看自检结果
smartctl -l selftest /dev/sda
4.2 长时自检
# 启动长时自检(可能需要几个小时)
smartctl -t long /dev/sda
# 查看预计完成时间
smartctl -c /dev/sda
4.3 离线自检
# 启动离线自检
smartctl -t offline /dev/sda
五、配置 smartd 自动监控
smartd 是 Smartmontools 的守护进程,可以在后台自动监控所有硬盘并在发现问题时发送告警。
5.1 编辑 smartd 配置文件
# 编辑配置文件
nano /etc/smartd.conf
配置示例:
# 监控所有磁盘,每天执行短时自检,每周日执行长时自检
# 发现属性变化或自检失败时发送邮件告警
/dev/sda -a -o on -S on -s (S/../.././02|L/../../7/03) -m admin@example.com -M exec /usr/share/smartmontools/smartd-runner
# 参数说明:
# -a 监控所有 SMART 属性
# -o on 开启离线自动收集
# -S on 开启属性自动保存
# -s (...) 自检调度
# S/../.././02 每天凌晨 2 点执行短时自检
# L/../../7/03 每周日凌晨 3 点执行长时自检
# -m 告警邮件接收地址
# -M exec 指定告警执行脚本
5.2 监控所有磁盘
# 自动扫描并监控所有磁盘
DEVICESCAN -a -o on -S on -s (S/../.././02|L/../../7/03) -m admin@example.com
5.3 重启 smartd 服务
systemctl restart smartd
systemctl status smartd
六、监控 SSD 硬盘
SSD 的 SMART 属性与 HDD 不同,需要关注以下指标:
- Wear_Leveling_Count:磨损均衡计数,反映 SSD 的磨损程度。
- Media_Wearout_Indicator:介质磨损指示器,从 100 降到 0 表示寿命耗尽。
- Total_LBAs_Written:总写入量,用于计算 SSD 的 TBW(Total Bytes Written)。
- Reallocated_Sector_Ct:对 SSD 同样适用,表示坏块数量。
6.1 查看 NVMe SSD 信息
# NVMe SSD 需要指定设备类型
smartctl -a /dev/nvme0 -d nvme
# 查看 NVMe 健康日志
smartctl -l error /dev/nvme0 -d nvme
七、批量监控脚本
#!/bin/bash
# 批量检查所有硬盘 SMART 状态
echo "===== 硬盘健康状态报告 ====="
echo "检查时间: $(date)"
echo ""
for disk in /dev/sd[a-z]; do
if [ -b "$disk" ]; then
echo "--- $disk ---"
# 获取健康状态
health=$(smartctl -H $disk | grep "SMART overall" | awk -F: '{print $2}')
echo "健康状态: $health"
# 获取温度
temp=$(smartctl -A $disk | grep Temperature_Celsius | awk '{print $10}')
echo "温度: ${temp}°C"
# 获取通电时间
hours=$(smartctl -A $disk | grep Power_On_Hours | awk '{print $10}')
echo "通电时间: ${hours} 小时"
# 获取重分配扇区数
reallocated=$(smartctl -A $disk | grep Reallocated_Sector | awk '{print $10}')
echo "重分配扇区: $reallocated"
# 获取待重分配扇区数
pending=$(smartctl -A $disk | grep Current_Pending | awk '{print $10}')
echo "待重分配扇区: $pending"
echo ""
fi
done
八、常见问题
8.1 VPS 上无法读取 SMART 数据
搬瓦工等 VPS 使用虚拟磁盘,不支持直接读取 SMART 数据。这是正常现象,SMART 监控主要用于物理服务器。VPS 的磁盘健康由宿主机负责管理。
8.2 RAID 控制器下的磁盘
# 通过 RAID 控制器访问单块磁盘
# MegaRAID 控制器
smartctl -a -d megaraid,0 /dev/sda
# 3ware 控制器
smartctl -a -d 3ware,0 /dev/twa0
# HP Smart Array
smartctl -a -d cciss,0 /dev/cciss/c0d0
8.3 smartd 告警邮件配置
# 安装邮件发送工具
apt install mailutils -y
# 测试邮件发送
echo "Test" | mail -s "SMART Alert Test" admin@example.com
总结
Smartmontools 是服务器运维中不可或缺的硬盘监控工具。通过定期检查 SMART 属性和配置自动告警,你可以在硬盘故障发生前采取预防措施,避免数据丢失。如果不幸遇到磁盘故障,可以参考 ddrescue 磁盘抢救教程 和 TestDisk 数据恢复教程 进行数据挽回。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的优惠,通过 bwh81.net 进入官网购买。