編集:
この質問はもともと転送のssh接続の方向を逆にする問題に焦点を当てていましたが、私が遭遇した問題の原因はそれではないことに気づき、それを単純化しました。
buntu documentation of zfs
はファイル経由の送受信についてのみ説明していますが、このアプローチは大きなデータセットでは実行不可能です。 Oracleのドキュメントで推奨 パイプでssh
を使用、つまり
# zfs send tank/dana@snap1 | ssh sys2 zfs recv newtank/dana
ただし、作成したテストデータセット(単一の10Mファイルを含む)でこの手順を試みると、Ubuntu Xenialのzfs
(ZFS-on-Linux)の実装の問題に遭遇します(受信側で):
$ Sudo -i
# zfs send tank/dana@snap1 | ssh sys2 zfs recv newtank/dana
Permission denied the ZFS utilities must be run as root.
warning: cannot send 'tank/dana@snap1': Broken pipe
ssh
に-t
フラグを渡すことでこの問題を修正しようとしました。つまり、
# zfs send tank/dana@snap1 | ssh -t sys2 "Sudo zfs recv newtank/dana"
失敗する
Pseudo-terminal will not be allocated because stdin is not a terminal.
sys2
の資格情報を要求する前に、次のメッセージが受信されます。
Sudo: no tty present and no askpass program specified
warning: cannot send 'tank/dana@snap1': Broken pipe
を使用して、他の方向を使用してテスト転送を実行しようとしています
# ssh -t sys2 "Sudo zfs send newtank/dana2@snap1" | zfs recv tank/dana2
sys2
の資格情報を要求した後、単にハングします。 (各スナップショットには10Mファイルしか含まれていないことを思い出してください。したがって、実際には何もしようとしていないと思いますが、ハングする理由はわかりません。)
Sudo zfs send tank/dana@snap1 | ssh sys2Root zfs recv newtank/dana
sys2rootは〜/ .ssh/configのエントリです。つまり、次のとおりです。
Host sys2Root
HostName 192.168.0.x
User root