web-dev-qa-db-ja.com

ZFSスナップショットをリモートマシンに送信する

編集

この質問はもともと転送の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の資格情報を要求した後、単にハングします。 (各スナップショットには10​​Mファイルしか含まれていないことを思い出してください。したがって、実際には何もしようとしていないと思いますが、ハングする理由はわかりません。)

3
Jonathan Y.
Sudo zfs send tank/dana@snap1 | ssh sys2Root zfs recv newtank/dana

sys2rootは〜/ .ssh/configのエントリです。つまり、次のとおりです。

Host sys2Root
  HostName 192.168.0.x
  User root
1
Derrick