![zfs diff 在加密数据集上给出错误(必须加载密钥才能发现路径名:权限被拒绝)](https://linux22.com/image/760836/zfs%20diff%20%E5%9C%A8%E5%8A%A0%E5%AF%86%E6%95%B0%E6%8D%AE%E9%9B%86%E4%B8%8A%E7%BB%99%E5%87%BA%E9%94%99%E8%AF%AF%EF%BC%88%E5%BF%85%E9%A1%BB%E5%8A%A0%E8%BD%BD%E5%AF%86%E9%92%A5%E6%89%8D%E8%83%BD%E5%8F%91%E7%8E%B0%E8%B7%AF%E5%BE%84%E5%90%8D%EF%BC%9A%E6%9D%83%E9%99%90%E8%A2%AB%E6%8B%92%E7%BB%9D%EF%BC%89.png)
我在 Debian 10 上运行以下命令:
zfs-0.8.4-2~bpo10+1
zfs-kmod-0.8.4-2~bpo10+1
我有一个 2TB(密码加密)的数据集,许多同事都在使用。我还使用 Zabbix 进行监控,并实施了某些警报以了解是否删除了太多文件。这是我每天作为 cronjob 运行一次的脚本,用于检查修改、删除或添加了多少文件:
#!/bin/bash
LIST="/tmp/snaplist.txt"
DIFF="/tmp/diff.txt"
zfs list -t snapshot | grep production_dataset | grep 'snap_31' | awk '{print $1}' | tail -2 > $LIST && echo "Snapshot list saved"
while read -r SNAP; do
snaps+=("$SNAP")
done < $LIST
zfs diff "${snaps[0]}" "${snaps[1]}" > $DIFF && echo "Diff saved successfully"
status=(M - + R)
trappers=(mod rem add ren)
for ((n=0;n<${#status[@]};n++)); do
RESULT=$(cat $DIFF | grep -E "^${status[n]}" | wc -l)
TRAPPER="zfsdiff_${trappers[n]}"
/usr/bin/zabbix_sender -c /etc/zabbix/zabbix_agentd.conf -k "$TRAPPER" -o "$RESULT"
done
rm $LIST
rm $DIFF
如果我手动运行该脚本,90% 的时间它都能正常工作。有时它会出现此错误(运行以下命令时zfs diff
:
Key must be loaded to discover path names: Permission denied
通过 cron 运行脚本时,几乎每次都会失败,除非我先手动运行了脚本。然后它运行了两天,然后又出现了上面的错误。
做 diff 也需要很长时间(15-20 分钟),我不确定这是否与上述错误有关。有什么想法吗?