linux smartd命令

简介:smartd是smartmontools工具包中的守护进程,用于持续监控支持SMART技术的硬盘。它可以在后台运行,定期检查硬盘健康状况,并在发现问题时发送警报或执行预定义操作。
smartd的主要功能
  • 持续监控:24/7监控硬盘SMART状态
  • 自动检测:检测SMART属性的变化
  • 定期自检:自动安排和执行自检
  • 温度监控:监控硬盘温度变化
  • 错误日志分析:分析SMART错误日志
  • 邮件通知:通过邮件发送警报
  • 脚本执行:检测到问题时执行自定义脚本
  • 日志记录:记录监控事件到系统日志
  • 多设备支持:同时监控多个硬盘
  • 远程监控:支持远程主机监控

语法格式

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 跟踪属性值变化

使用示例

示例1:启动和停止smartd服务
# 启动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
示例2:调试模式运行
# 在前台运行并输出调试信息
sudo smartd -d

# 指定配置文件并调试运行
sudo smartd -d -c /etc/smartd.conf

# 检查配置文件语法
sudo smartd -c /etc/smartd.conf -q onecheck
示例3:常用配置文件示例
基本监控配置:
# /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  # 备份硬盘
示例4:自检计划配置详解

自检计划使用-s选项,格式为:-s (T/MM/DD/d/HH|L/MM/DD/d/HH)

  • T: 测试类型 (S=短测试, L=长测试, C=运输测试)
  • MM: 月份 (01-12, ..=每月)
  • DD: 日期 (01-31, ..=每天)
  • d: 星期几 (1-7, 1=星期一, ..=每天)
  • HH: 小时 (00-23, ..=每小时)
# 每天凌晨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)
示例5:自定义警报脚本
创建警报脚本:
#!/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              # 只发送一次通知
最佳实践
  • 为所有硬盘启用smartd监控
  • 配置合适的自检计划
  • 设置邮件通知
  • 定期检查smartd日志
  • 为关键服务器配置自定义警报脚本
  • 测试邮件通知是否正常工作
  • 监控温度变化趋势
  • 定期审查配置文件
注意事项
  • 避免在业务高峰期运行自检
  • 邮件服务器需要正确配置
  • NVMe硬盘需要特殊配置
  • RAID阵列中的硬盘可能需要特别处理
  • USB硬盘可能不支持所有功能
  • 自检计划不要太频繁
  • 确保有足够的磁盘空间存放日志
  • 定期更新smartmontools
警报处理流程
  1. 收到警报:立即查看详细的SMART信息
  2. 确认问题:使用smartctl -a确认具体问题
  3. 数据备份:立即备份重要数据
  4. 运行诊断:运行长时间自检确认问题
  5. 评估风险:根据SMART属性决定下一步操作
  6. 更换硬盘:如果出现坏扇区或其他严重问题,考虑更换
  7. 记录事件:记录问题和处理过程
紧急响应脚本示例:
#!/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
常见问题解答
Q: 如何测试smartd配置?
# 测试配置文件语法
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
Q: smartd日志在哪里?
# 系统日志中的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
Q: 如何监控NVMe硬盘?

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
Q: smartd不发送邮件怎么办?
  1. 检查邮件服务器配置:ssmtp -v admin@example.com
  2. 测试邮件功能:sudo smartd -m admin@example.com -M test
  3. 检查系统日志:journalctl -u smartd
  4. 确保邮件地址正确
  5. 检查防火墙设置
相关工具和集成
工具 功能 与smartd集成
smartctl 手动检查SMART状态 smartd使用相同的底层库
gsmartcontrol 图形化SMART监控 可以查看smartd监控的设备
monit 系统监控工具 可以监控smartd进程状态
nagios 企业级监控 通过插件集成smartd警报
zabbix 分布式监控 可以收集smartd监控数据
prometheus 云原生监控 通过exporter收集SMART数据