Изменить:
Этот вопрос первоначально был посвящен вопросу об обратном направлении ssh-соединения при передаче, но я понял, что это не то, что вызывает проблемы, с которыми я сталкиваюсь, поэтому Я упростил это.
Хотя документация Ubuntu zfs обсуждает только отправку-получение через файл, этот подход невозможен с большими наборами данных. Документация Oracle рекомендует использовать ssh в трубе, т. Е.
# zfs send tank/dana@snap1 | ssh sys2 zfs recv newtank/dana
Однако, пытаясь выполнить эту процедуру с помощью набора тестовых данных, который я создал, содержащий один файл 10M, я столкнулся с проблемой Реализация Ubuntu Xenial из zfs (ZFS-on-Linux), требующая прав root (на принимающей стороне):
$ 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 М-файл, поэтому я считаю, что он на самом деле ничего не пытается сделать, но я не уверен, почему он висит.)