有没有办法获得 zfs 快照的正确哈希值?

有没有办法获得 zfs 快照的正确哈希值?

我正在通过网络发送 ZFS 快照。但是,与大多数另一端有 zfs recv 的示例不同,我的服务器没有 zfs 支持,我只是将其保存为一个大文件。

问题是,我想使用 cron 作业进行 zfs 发送,但我会定期休眠我的计算机。我害怕的是,我将开始备份、休眠、ssh 连接超时,不幸的是,当 ssh (zfs send POOL/vol@snap | ssh user@server "cat > /backup.zfs"-这看起来很丑陋,可能可以改进)超时时,zfs 仍然返回 0。

有没有办法获得要发送的内容的哈希值(md5、sha、crc,没关系),以便我可以随后将其与结果文件进行比较,或者我必须将其发送两次,一次发送到 md5并再次发送到服务器?

答案1

更新:

您应该能够使用 Bash shell 执行类似的操作:

zfs send [snip] | tee >(md5sum > checksum.log) | ssh [snip]

请参阅Process Substitution的部分man bash。 (感谢 Ole Tange 指出了这种简化。)

原答案:

有几种方法可以让您做您想做的事。

您可以编写一个脚本(或 Python 或您选择的语言中的程序),stdin在读取数据的同时 (a) 计算校验和 (b) 将数据传送到子进程(例如, to ssh)。

或者,您也可以在 Bash 中执行以下操作:

zfs send [snip] | tee /proc/self/fd/4 4>(md5sum > checksum.log) | ssh [snip]

我没有测试过以上内容,所以我不能保证它会起作用。如果您的系统上没有/proc/self/fd/N,那么您可能需要查找(或编写)除tee.请参阅man teeREDIRECTION的部分man bash,特别是该Redirecting Output小节。

相关内容