Backup system, v1.4

Итак, очередная система бекапа конфига от VVS, тобишь меня %)

Зачем было изобретать новый велосипед (или чем данный скрипт отличается от аналогичных):

  • процессы создания файлов бекапов и отсылки их на сервер отделены;
  • возможность независимой отсылки бекапов на разные хранилища;
  • логирование в файл и на почту;
  • расширенная диагностика ошибок;
  • свой скрипт записи на фтп, который позволяет отслеживать ошибки записи.

Интересно – тогда читаем под катом

Про идеи, заложенные в данный скрипт – можно почитать тут:

Скриптуем: бэкапы, начало

FTP – отправляем

Установка

Сперва скачиваем и распаковываем сам скрипт: backuping-system-v1.4

Файл .rsc закидываем на роутер и импортируем его в терминале командой:

/import file=backuping-system-v1.4.rsc

В результате должны появиться следующие скрипты

и задания в шедулере:

Скрипты func_xxxx – это просто для удобства выделенные отдельно функции, которые вызываются основными скриптами.

Скрипт logo – просто бонус %) – при открытия терминала он выводит текущую информацию о роутере.

Далее настраиваем под себя конфиг (скрипт backups_config):

storage

Указывает, куда сохранять бекапы на роутере. Так как у Микротик пошла мода делать на домашних роутерах флеш оооочень маленькой, то для них обязательно нужно установить внешний накопитель-флешку, отформатировать (лучше в ext3) и уже на нее делать бекапы. По умолчанию флешка монтируется как disk1:

“storage”=”disk1”;

Дополнительные бонусы от использования внешней флешки – меньше изнашиваете внутреннюю флеш-память (но я не скажу, как сильно это уменьшает ее ресурс) и в случае физического отказа роутера или сетевого FTP-накопителя у вас под рукой будет флешка с тремя последними бекапами.

Но если у вас достаточно внутренней флеш памяти и вы не желаете использовать внешнюю флешку – то вместо “disk1” поставьте “”.

backups_password

Пароль на бекапы. Я принудительно указываю пароль при создании бекапов. Связано это с тем, что в противоположном случае будет использован пароль текущего пользователя (вернее пользователя, от чего имени выполняется задание). И если у вас много роутеров с разными паролями или же вы периодически меняете пароли – может оказаться удобней для бекапов иметь свой пароль (чтобы потом мучительно долго не искать-вспоминать).

По умолчанию в скрипте “12345”, но это только для примера. Единственное – осторожно со спецсимволами ( аналогично описанному тут ).
“backups_password”=”12345”;

backup_suffix

Все автоматически сгенерированные бэкапы имеют одинаковый суффикс – для того, чтобы отличать их от вручную сделанных бэкапов. Лучше оставить как есть:

“backup_suffix”=”auto”;

store2email

Сейчас не используется. Изначально предполагалось бэкапы отсылать по почте. Но не понадобилось.

“store2email”=false;

store2ftp

Если true – бэкапы отсылаются на внешний FTP сервер. Если поставить false – бэкапы будут делаться, но сохраняться только локально.

“store2ftp”=true;

generate_rsc

true – если во время бэкапа хотим генерировать и сохранять rsc файлы. Удобно, если нужно подсмотреть конфиг либо же перенести его на другой роутер

“generate_rsc”=true;

generate_bkp

true – если во время бэкапа хотим создавать полный (“бинарный”) бэкап. такие бэкапы можно безболезненно разворачивать только на железке, на которой бэкап создан (ну или в крайнем случае на полностью аналогичной железке).

“generate_bkp”=true;

Параметры FTP-сервера

“ftp_host”= ip адрес сервера
“ftp_port”= порт. По умолчанию 21
“ftp_path”= папка на фтп сервере, куда сохранять бэкап. Папка должна существовать и у нее должны быть права на чтение-запись для пользователя ftp_user
“ftp_user”= учетка для записи
“ftp_password” = пароль. Опять-таки внимательно читаем про спецсимволы тут .

Mail notifications

“mailto”= почтовый адрес, на который отправлять уведомления. Но для этого обязательно на Микротике настроить Tools->Email .
“mailsubject”= тема писем для уведомлений. Может быть в виде скрипта. По умолчанию у меня “[Router]: $[/system identity get name]” – то есть в теме письма отображается сразу имя роутера. Удобно.

logging

Куда логировать общие ошибки и ошибки фтп-соединения. Лог не превышает 4Кб (ограничение Микротик на работу с текстом), потому можно логировать как на внутреннюю, так и на внешнюю память (с оговоркой про ресурс флеш памяти). Для внешней просто поставьте полный путь, например:

“logfile”=”disk1/backups-log”;
“logftp”=”disk1/backups-ftp-log.txt”;

Ну и в принципе с настройкой все.

Проверяем

Для проверки открываем терминал.

Далее вручную генерим бэкап:

/system script run backups_generate

Если всё ок, должны увидеть что-то типа:

Load config
info: aug/30/2017 09:59:26 BACKUPS_GENERATE: Backup file generating is started
info: aug/30/2017 09:59:26 BACKUPS_GENERATE: Exporting Home Hap AC-2017-08-30_095926-auto.rsc
info: aug/30/2017 09:59:27 BACKUPS_GENERATE: Making backup Home Hap AC-2017-08-30_095926-auto.backup
Saving system configuration
Configuration backup saved
info: aug/30/2017 09:59:27 BACKUPS_GENERATE: Backup file generating is ended
Home Hap AC-2017-08-30_095926-auto

Если видим ошибки – внимательно читаем сообщения об ошибках в терминале, в логе роутера и вновь читаем раздел “Установка”.

Запустите команду 4-5 раз (потом увидим зачем).

Вы должны увидеть сами бэкапы:

и непустую очередь QBACKUPS2FTP:

Внимание – при перезагрузке роутера очередь очищается. Желающие могут придумать реализацию очереди не в виде global переменной, а в иде того же текстового файла на внешнем носителе. Но это уже излишне лично для меня.

Дальше проверяем отправку по фтп:

/system script run backups_send2ftp

Должны увидеть что-то похожее на:

Load config
info: aug/30/2017 10:10:49 BACKUPS_SEND2FTP: start sending disk1/Home Hap AC-2017-08-30_095820-auto.backup via ftp
info: aug/30/2017 10:10:51 BACKUPS_SEND2FTP: SUCCESS sending Home Hap AC-2017-08-30_095820-auto.backup via ftp

Если не видим – читаем сообщения об ошибках в терминале, в логе роутера и в файле backups-ftp-log.txt . Очень часто ошибка в неправильных параметрах фтп соединения.

Каждый запуск отправляем только один бэкап (.rsc или .backup) из очереди. Поэтому запускаем последовательно backups_send2ftp пока не увидим:

0

Это значит, что очередь пуста и отправлять нечего. В моем случае пришлось запускать 10 раз (ибо 5 rsc и 5 backups файлов).

Теперь проверим очистку диска (иначе бэкапы в конце концов займут всё место на флеш).

/system script run backups_cleanup

Должны увидеть только:

Load config

Если потом глянем на Files:

то увидим, что остались файлы только трех последних бэкапов. Число оставляемых бэкапов прописано в самом скрипте backups_cleanup ( “3” в последних двух строчках скрипта).

Адаптируем расписание

По умолчанию у меня бэкапы делаются в полночь раз в неделю, очередь на отсылку проверяется каждые 15 минут, “зачистка” проводится раз в неделю, но через сутки после бэкапа. То есть я даю одни сутки на то, чтобы попытаться отправить бэкап по фтп. Информация об успешных или неуспешных попытках отправки бэкапов логируется на почту.

Всё.

Если есть замечания, пожелания – пишите.

На данный момент скрипт успешно работает уже полгода на десятке роутеров (зоопарк роутеров включает как домашние, так и CCR-ки).