smartd [选项]
smartd -c 配置文件 [选项]
| 选项 | 说明 |
|---|---|
| -c 文件 | 指定配置文件路径 |
| -d | 调试模式,在前台运行并输出详细信息 |
| -q onecheck | 检查一次后退出 |
| -p | 保存PID到文件(默认/var/run/smartd.pid) |
| -i N | 设置检查间隔(分钟,默认30) |
| -a | 监控所有SMART属性(默认) |
| -H | 只监控健康状态 |
| -l selftest | 监控自检状态 |
| -l error | 监控错误日志 |
| -m 邮箱 | 设置邮件接收地址 |
| -M 类型 | 设置邮件发送类型(test,once,daily等) |
| -s 正则 | 注册监控事件的正则表达式 |
| -W N,D | 设置温度监控阈值(N=差异,D=绝对温度) |
| -n 模式 | 设置守护进程运行模式(q,never,n,q等) |
| -h | 显示帮助信息 |
| -V | 显示版本信息 |
smartd的主要配置文件通常位于:
/etc/smartd.conf - 主配置文件/etc/default/smartmontools - 默认参数文件/etc/sysconfig/smartmontools - 系统配置(RHEL/CentOS)# smartd.conf 基本结构
# 全局配置选项
DEFAULT监测选项
# 设备配置
DEVICESCAN -a -o on -S on -n standby,q -s (S/../.././02|L/../../7/03) -W 4,45 -m admin@example.com
# 或为每个设备单独配置
/dev/sda -a -o on -S on -n standby,q -s (S/../.././02|L/../../7/03) -W 4,45 -m admin@example.com
/dev/sdb -a -o on -S on -n standby,q -m admin@example.com -M exec /usr/local/bin/smart_alert.sh
| 指令 | 说明 |
|---|---|
-a |
监控所有SMART属性 |
-o on |
启用自动离线数据收集 |
-S on |
启用属性自动保存 |
-n standby,q |
当设备处于待机模式时不检查 |
-s (正则表达式) |
安排定期自检的计划 |
-W 差异,绝对温度 |
温度监控阈值 |
-m 邮箱地址 |
邮件通知接收地址 |
-M 类型 |
邮件发送策略 |
-M exec 脚本 |
执行自定义脚本 |
-l error |
监控错误日志 |
-l selftest |
监控自检日志 |
-H |
只检查健康状态 |
-f |
报告设备故障 |
-p |
报告预失败属性变化 |
-u 值 |
报告使用率属性变化 |
-t |
跟踪属性值变化 |
# 启动smartd服务
sudo systemctl start smartd
# 停止smartd服务
sudo systemctl stop smartd
# 重启smartd服务
sudo systemctl restart smartd
# 查看服务状态
sudo systemctl status smartd
# 启用开机自启动
sudo systemctl enable smartd
# 禁用开机自启动
sudo systemctl disable smartd
# 在前台运行并输出调试信息
sudo smartd -d
# 指定配置文件并调试运行
sudo smartd -d -c /etc/smartd.conf
# 检查配置文件语法
sudo smartd -c /etc/smartd.conf -q onecheck
# /etc/smartd.conf
# 监控所有检测到的硬盘,启用所有监控
DEVICESCAN -a -o on -S on -s (S/../.././02|L/../../7/03)
# 或者为每个设备单独配置
/dev/sda -a -o on -S on -s (S/../.././02|L/../../7/03) -m admin@example.com
/dev/sdb -a -o on -S on -s (S/../.././02|L/../../7/03) -m admin@example.com
# 监控所有设备,发送邮件通知
DEVICESCAN -a -o on -S on -s (S/../.././02|L/../../7/03) -m admin@example.com -M daily
# 不同严重程度发送给不同邮箱
DEVICESCAN -a -o on -S on -s (S/../.././02|L/../../7/03) \
-m admin@example.com -M exec /usr/local/bin/smartd_warning.sh \
-M test -M once
# 温度变化超过4度或绝对温度超过45度时报警
DEVICESCAN -a -o on -S on -W 4,45 -m admin@example.com
# 不同设备设置不同温度阈值
/dev/sda -a -o on -S on -W 5,50 -m admin@example.com # 主硬盘
/dev/sdb -a -o on -S on -W 4,45 -m admin@example.com # 备份硬盘
自检计划使用-s选项,格式为:-s (T/MM/DD/d/HH|L/MM/DD/d/HH)
# 每天凌晨2点运行短测试,每周日凌晨3点运行长测试
-s (S/../.././02|L/../../7/03)
# 每月1号凌晨1点运行短测试
-s S/01/.././01
# 每周一凌晨2点运行短测试
-s S/../../1/02
# 每小时运行短测试(不推荐,太频繁)
-s S/../.././..
# 工作日凌晨2点运行短测试,周末凌晨3点运行长测试
-s (S/../../1-5/02|L/../../6-7/03)
#!/bin/bash
# /usr/local/bin/smart_alert.sh
# 接收smartd传递的参数
DEVICE=$1
MESSAGE=$2
# 日志文件
LOG_FILE="/var/log/smartd_alerts.log"
# 记录警报
echo "$(date): 设备 $DEVICE 报告: $MESSAGE" >> "$LOG_FILE"
# 发送系统通知
wall "硬盘警报: $DEVICE - $MESSAGE"
# 发送邮件(需要配置邮件系统)
echo "设备: $DEVICE" | mail -s "硬盘SMART警报: $MESSAGE" admin@example.com
# 执行额外操作(如备份重要数据)
if echo "$MESSAGE" | grep -q "FAILED\|Pre-fail"; then
echo "执行紧急备份..." >> "$LOG_FILE"
# 执行备份脚本
/usr/local/bin/emergency_backup.sh
fi
# 使用自定义脚本处理警报
DEVICESCAN -a -o on -S on -m admin@example.com -M exec /usr/local/bin/smart_alert.sh
# 不同事件使用不同脚本
/dev/sda -a -o on -S on \
-M exec /usr/local/bin/smart_warning.sh \
-M test -M once
# /etc/smartd.conf - 生产服务器配置
# 全局默认设置
DEFAULT -a -o on -S on -n standby,q
# 监控所有设备
DEVICESCAN \
-H \ # 检查健康状态
-l error \ # 监控错误日志
-l selftest \ # 监控自检日志
-f \ # 报告设备故障
-p \ # 报告预失败属性变化
-u 10 \ # 报告使用率属性变化超过10%
-t \ # 跟踪属性值变化
-W 4,50 \ # 温度变化4度或超过50度报警
-s (S/../.././02|L/../../7/03) \ # 自检计划
-m admin@example.com \ # 邮件通知
-M daily \ # 每天发送摘要
-M exec /usr/local/bin/smartd_alert.sh # 自定义脚本
# 桌面电脑配置(更安静)
DEVICESCAN \
-a -o on -S on \
-n standby,q \
-s (S/../.././02) \ # 只运行短测试
-W 5,55 \ # 宽松的温度阈值
-m user@example.com \
-M once # 只发送一次通知
smartctl -a确认具体问题#!/bin/bash
# /usr/local/bin/emergency_response.sh
DEVICE=$1
ALERT_TYPE=$2
case $ALERT_TYPE in
"FAILED")
echo "紧急:硬盘 $DEVICE 健康检查失败" | wall
echo "开始紧急备份..." | wall
# 执行紧急备份
/usr/local/bin/emergency_backup.sh
;;
"Temperature")
echo "警告:硬盘 $DEVICE 温度异常" | wall
# 发送更紧急的通知
echo "硬盘温度警报" | mail -s "紧急:硬盘温度异常" admin@example.com
;;
"Pre-fail")
echo "注意:硬盘 $DEVICE 预失败属性变化" | wall
# 记录到特殊日志
echo "$(date): $DEVICE 预失败警报" >> /var/log/critical_disk_alerts.log
;;
esac
# 测试配置文件语法
sudo smartd -c /etc/smartd.conf -q onecheck
# 发送测试邮件
sudo smartd -c /etc/smartd.conf -m admin@example.com -M test
# 调试模式查看详细信息
sudo smartd -c /etc/smartd.conf -d
# 系统日志中的smartd记录
sudo journalctl -u smartd
sudo journalctl -u smartd -f # 实时查看
# 查看特定日期的日志
sudo journalctl -u smartd --since "2024-01-01"
# 传统的syslog位置
tail -f /var/log/syslog | grep smartd
tail -f /var/log/messages | grep smartd
A: NVMe硬盘需要特殊配置,因为使用不同的SMART标准:
# NVMe硬盘配置示例
/dev/nvme0 -d nvme -a -o on -S on \
-m admin@example.com \
-W 5,70 \ # NVMe通常可以承受更高温度
-s (S/../.././02)
# 使用DEVICESCAN自动检测NVMe
DEVICESCAN -d nvme -a -o on -S on -m admin@example.com
ssmtp -v admin@example.comsudo smartd -m admin@example.com -M testjournalctl -u smartd| 工具 | 功能 | 与smartd集成 |
|---|---|---|
| smartctl | 手动检查SMART状态 | smartd使用相同的底层库 |
gsmartcontrol |
图形化SMART监控 | 可以查看smartd监控的设备 |
monit |
系统监控工具 | 可以监控smartd进程状态 |
nagios |
企业级监控 | 通过插件集成smartd警报 |
zabbix |
分布式监控 | 可以收集smartd监控数据 |
prometheus |
云原生监控 | 通过exporter收集SMART数据 |