配置smartmontools监控硬盘状态
需求
前几天偶然发现服务器的ZPOOL已经DEGRADED了,再一查:
smartctl -a /dev/sda
不看不知道,一看吓一跳,已经有17个错误记录了。最后一条错误记录已经是十个月前,还好撑到现在,赶紧做了备份。
不过也可以理解,毕竟这块硬盘的通电时间已经长达5年3个月了,寿命也差不多了。
为了防范这种风险,还是得把硬盘状态监控起来。
smartmontools配置
基本配置可以参考使用 smartmontools 查看硬盘的健康状态。
先在/etc/default/smartmontools
里启用服务:
start_smartd=yes
smartd_opts="--interval=7200" # 指定间隔时间
然后在/etc/smartd.conf
里配置一条测试记录:
/dev/sda -m [email protected] -M test
- -m: 接收告警信息的邮箱
- -M: 消息类型,test表示测试,在重启服务时会发一封测试邮件
然后重启smartd:
systemctl restart smartd
正常应该可以收到一封测试邮件。但是难免会有不正常的情况,见后文说明。
常规的配置类似这样:
/dev/sda -a -d sat -o on -S on -s (S/../.././02|L/../../6/03) -m [email protected]
- -a: 所有smart信息
- -d sat: 磁盘类型为SATA
- -o on: 启用smart
- -S on: 启用属性自动保存
- -s: 检测周期,格式为:测试类型/月/日/星期/时,可以有多个,用“|”隔开,其中类型S为短测试,L为长测试,用“.”表示所有值,几个点表示几位,其中只有星期是一位的,其它都是两位,可以用“[1-5]”表示范围。
其中-a等参数就是smartctl命令的参数。
邮件不能正常发送的问题处理
smartmontools的告警发送在默认情况下是执行这个命令/usr/share/smartmontools/smartd-runner
,而这个命令的内容其实很简单,就是通过run-parts
命令去执行这个路径下的所有命令:/etc/smartmontools/run.d/
,这其中默认的只有一个命令:10mail
,内容是调用系统默认的邮件工具发送邮件,如果没有安装就发不了,建议安装mailx或mailutils。
试了一下,安装了这两个东西,也还是发不了,不知道是不是因为它们需要本机有SMTP服务器,那个装起来就麻烦了,所以我参考旧文《通过命令行发送邮件的两种方法》安装了一个s-nail来发。
不过因为10mail里是调用mail命令的,所以还需要做一个符号链接:
sudo ln -s /usr/bin/s-nail /usr/bin/mail
当然,最重要的还是在root用户下配置一个/root/.mailrc
,在其中填好有效的外部SMTP服务器配置:
set from="username <[email protected]>"
set smtp-use-starttls
set mta=smtp://smtp.yourserver.com:587
set smtp-auth=login
set smtp-auth-user="sender"
set smtp-auth-password="password"
这样smartmontools就可以正常发出邮件了。
现在知道了这个原理,如果你想用其它方式发送告警,比如Telegram机器人推送,也可以仿照10mail写一个脚本来实现。
还有另一个方法就是-M exec <执行命令>
,这个就是直接用自己的命令替换掉默认的操作。
推送到[go4pro.org]