ZFS backup - ZFS send/receive по сети

Mar 09, 2014 21:44

Наконец-то я допилил до устраивающего меня состояния скрипт для пересылки файловых систем zfs с одной машины на другую. Работает в локальной сети - но в принципе должно и по интернет работать, нет возможности испытать. Скрипт лежит здесь.
UPD от 24 июля 2016. Заменён более не поддерживаемый шифр arcfour256 на aes128-ctr. Спасибо камраду
IG_33, см комменты /UPD
UPD от 11 июля 2016. Исправлено как здесь /UPD
Исходный скрипт (и 95+% работы) от камрада Oleg Pyzhov. Он для локальной работы, я описывал его подробно здесь.

Скрипт посылает снимок файловой системы zfs (ака zfs снапшот) внутри NAS или с одного NAS на другой по ssh (безопасно и не слишком быстро) или по netcat (в полтора раза быстрее, чем по ssh в моём случае и небезопасно, то есть годится только для доверенной сети). Это сложно на словах, проще на примерах

./zfssendrecv Pool/Test BackupPool/TT - локальный режим, снимок файловой системы Pool/Test будет послан в файловую систему BackupPool/TT на том же NAS

./zfssendrecv Pool/Test Pool/Test 192.168.1.33 - ssh режим, снимок файловой системы Pool/Test будет послан по ssh, с шифрованием, в файловую систему Pool/Test на NAS с IP 192.168.1.33

./zfssendrecv Pool/Test Pool/Test 192.168.1.33 nc - netcat режим, снимок файловой системы Pool/Test будет послан по netcat, в открытом виде, но зато максимально быстро, в файловую систему Pool/Test на NAS с IP 192.168.1.33



Естественно, всё это запросто делается и руками. Но скрипт во-первых осуществляет некоторую защиту от дурака (проверяет наличие приёмного и целевого пулов, пингует целевой NAS и пр.) А самое главное - сам делает снимки, разбирается когда можно слать инкрементальный (крошечный) поток данных, а когда - полный, переименовывает при необходимости файловую систему на целевом NAS и пр. И написан для того, чтобы вызывать его автоматически, например по cron.

Чтобы эта машинерия работала, помимо наличия zfs на обеих машинах необходимо обеспечить доступ с главного NAS на второй (бекап) по ssh с ключом. Способов несколько, я это делал так. Кроме того, если на бекапном NAS скрипт автоматически удаляет все созданные им снапшоты(с префиксом backup), кроме двух самых свежих, то на главном NAS он их не трогает (да, я думал удалять - но пришёл  к выводу, что могут пригодится). Удалять их можно отдельным скриптом.

Так как последний раз программировал я десятки лет назад, мог напортачить (буду благодарен тыканью носом в комментах) и точно использовал не оптимальные способы (благо в UNIX есть много путей сделать одно и то же). Но всё работает, с одним мелким багом: при работе через netcat не всегда выводится на экран скорость передачи по результатам процесса. Я, в общем, догадываюсь, что решить проблему можно через sleep 5, чтобы zfs успела сбросить буфер на диск. Но некрасиво как-то, думаю приделать принудительный сброс буфера.

nas, ssh, nas4free, zfs

Previous post Next post
Up