Передача снимка ZFS по сети

Ответить
admin
Администратор
Сообщения: 198
Зарегистрирован: 05 янв 2011, 04:19

Передача снимка ZFS по сети

Сообщение admin »

Пришлось наконец столкнуться на практике с передачей сравнительного большого снимка ZFS по сети. В учебных материалах и официальной документации сказано, что для передачи по сети следует использовать команды send\recv в сочетании с ssh через пайп. На практике же это решение оказывается абсолютно не работоспособным для больших объемов. Лично у меня скорость передачи уперлась примерно в 8 MB/sec по гигабитной сети, что привело к тому что за 12 часов скопировалось лишь 300 гигабайт данных.
Что же делать?

Во-первых, требуется собрать на обеих машинах программу mbuffer. Отличная альтернатива ssh для передачи данных в защищенной сети.
Делаем снапшот:
# zfs snapshot tank/tones@$(date +%y%m%d%H%M)
Запускаем на приемнике ожидание потока данных
# /usr/local/bin/mbuffer -4 -s 128k -m 1G -I 9090 | zfs receive zshare/test
Запускаем передачу снимка на передатчике
# zfs send tank/tones@1105101812 | /usr/local/bin/mbuffer -4 -s 128k -m 1G -O 10.99.88.55:9090
Подробное описание ключей прочитаете в манах к mbuffer - там все понятно. Наблюдаем около сотни метров в секунду, радуемся.
Если же вы все же решили передать снимок по ssh (малый объем\незащищенная сеть), то делать надо это следующим образом.
Делаем снимок как сказано выше. На приемнике даем следующие разрешения пользователю, под которым происходит соединение
# zfs allow user create,mount,receive zshare
Запускаем передачу на источнике
# zfs send tank/tones@1105101812 | ssh -C -b 10.0.64.50 user@10.99.88.55 /usr/sbin/zfs recv zshare/tones
Ответить