我在 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
这一切都很好,但我想自动化一种方法来每隔一段时间进行检查,以确保我的池没有错误。
我手头有 cacti 和 zabbix。我想我也可以写一个程序来 grep 输出,如果它找不到短语“没有已知数据错误”,就给我发一封电子邮件。
但是,是否已经存在可以执行此操作的软件包,或者有关如何从该数组中获取一些性能指标的规范?
答案1
假设 zabbix 和 gnu 工具...将以下内容添加到 zabbix 代理守护进程配置文件中:
UserParameter=zpool.status,zpool status | grep -q "没有已知数据错误" && echo 1 || echo 0
现在,在 zabbix 中添加一个带有键“zpool.status”的项目,针对它创建一个触发器(使用像“.last(0)=0”这样的函数),然后就完成了 - 只要 zpool 状态输出中缺少该字符串,触发器就会触发。
这还假设“zpool”将位于 zabbix 用户的路径中,并且该用户将被允许运行 zpool。如果不是,请指定完整路径并使用 sudo。另一个问题可能是默认 shell 不支持使用的语法,在这种情况下,您可以重写用户参数,或强制它使用 bash。
答案2
zpool status -x 是通过脚本检查池状态的首选方法。除非出现问题,否则其输出为“所有池都健康”,这使其更易于用作测试。否则,当您获得多个池时,您的检查脚本和 grep 将变得更加复杂。因此,您可以设置一个 cron 作业来运行脚本并确保其状态为“所有池都健康”,否则发送输出的警报电子邮件。
您甚至可以设置一个 nagios 插件来为您完成此操作。我假设 zabbix 应该可以以相同的方式扩展。
另外,请确保定期运行 zpool scrub....我也会在 cron 作业中设置它。它将检测并纠正它在池中不经常访问的文件系统区域中发现的任何问题,并且可以在问题导致任何数据损坏之前捕获并纠正问题。
要获取性能指标,您可以使用 zpool iostat[更新间隔秒数] 我不确定如何将其与仙人掌联系起来,但我确信这是可能的。
答案3
如果可能的话,也做一个iostat -xCzn并 grep 查找磁盘或控制器上的任何硬件或传输错误。