ネットワーク経由でZFSスナップショットを送信しています。しかし、もう一方の端にzfs recvを持つほとんどの例とは異なり、私のサーバーにはzfsサポートがないので、大容量ファイルとして保存します。
問題は、zfs転送にcronジョブを使用したいが、定期的にコンピュータを休止状態にすることです。私の恐れは、バックアップ、休止状態、ssh接続タイムアウトを開始し、残念ながらzfs send POOL/vol@snap | ssh user@server "cat > /backup.zfs"
ssh( - 見苦しく、改善することができます)タイムアウト時にzfsがまだゼロを返すことです。
転送される内容(md5、sha、crcは重要ではありません)のハッシュを取得して結果ファイルと比較する方法はありますか?それともmd5に1回、md5に1回転送する必要がありますか?もう一度サーバーに?
ベストアンサー1
修正する:
Bashシェルを使用すると、同様のことができます。
zfs send [snip] | tee >(md5sum > checksum.log) | ssh [snip]
Process Substitution
セクションを参照してくださいman bash
。 (これらの簡略化を指摘したOle Tangeに感謝します。)
元の答え:
必要なことを行う方法はいくつかあります。
stdin
(a)チェックサムを計算し、(b)データを子プロセス(たとえば)に転送しながらデータを読み取るスクリプト(またはPythonまたは選択した言語でプログラム)を作成できますssh
。
または、Bashで次のことを実行できます。
zfs send [snip] | tee /proc/self/fd/4 4>(md5sum > checksum.log) | ssh [snip]
上記をテストしていないため、動作することを保証できません。システムに存在しない場合は、課のセクション、特にそのサブセクションを参照し/proc/self/fd/N
てください。tee
man tee
REDIRECTION
man bash
Redirecting Output