我在 Ubuntu(通过 fuse)上为家里的存储阵列设置了 ZFS,尽管它处于“测试版”状态,但它已经运行了将近一年。我使用以下命令登录并每隔一段时间检查一次数组:
zpool status
结果是:
NAME STATE READ WRITE CKSUM
media ONLINE 0 0 0
raidz1 ONLINE 0 0 0
sda ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
errors: No known data errors
这一切都很好,但我想自动化一种不时检查的方法,以确保我的池没有错误。
我有仙人掌和 zabbix 供我使用。我想我也可以编写一个 greps 输出的程序,如果它没有找到短语“No known data errors”,请给我发一封电子邮件。
但是,是否有任何已经制作的包可以做到这一点,或者关于如何从这个数组中获取一些性能指标的规范?
zpool status -x 是通过脚本检查池状态的首选方法。它的输出是“所有池都是健康的”,除非有问题使它更容易用作测试。否则,当您获得多个池时,您的检查脚本和 greps 将变得更加复杂。因此,您可以设置一个 cron 作业来运行脚本,并确保其状态为“所有池都正常”,否则会发送输出警报电子邮件。
你甚至可以设置一个 nagios 插件来为你做这件事。我假设 zabbix 应该以相同的方式进行扩展。
还要确保你定期运行 zpool scrub ......我也会在 cron 作业中设置它。这将检测并纠正它在文件系统中不经常访问的区域中发现的任何问题,并且可以在问题导致任何数据损坏之前发现并纠正问题。
要获得性能指标,您可以使用 zpool iostat [更新之间的秒数] 我不确定如何将其与 cacti 联系起来,但我相信这是可能的。
假设 zabbix 和 gnu 工具...将以下内容添加到 zabbix 代理守护程序配置文件:
用户参数=zpool.status,zpool 状态 | grep -q "没有已知数据错误" && echo 1 || 回声 0
现在,在 zabbix 中添加一个键为“zpool.status”的项目,创建一个触发器(使用类似“.last(0)=0”的函数),你就完成了——只要该字符串丢失,触发器就会触发zpool 状态输出。
这也假设“zpool”将在 zabbix 用户的路径中,并且该用户将被允许运行 zpool。如果没有,请指定完整路径并使用 sudo。另一个问题可能是不支持使用语法的默认 shell,在这种情况下,您可以重写用户参数,或强制它使用 bash。
如果可能,还对磁盘或控制器上的任何硬件或传输错误执行iostat -xCzn和 grep。