BACKUP VMWARE ESXi 6. СКРИПТ – ghettoVCB

Автоматизируем резервное копирование виртуальных машин на ESXi 6. Лучшим бесплатным средством является скрипт ghettoVCB, чтобы им воспользоваться, надо получить доступ к хосту ESXi по SSH. Как оказалось есть очень простой способ включения и выключения доступа прямо из vShere Client: Configuration > Software > Security Profile > Properties… > Remote Tech Support (SSH) > Options… > Start или Stop. По этим скриншотам думаю будет нагляднее:

Скачиваем последнюю версию скрипта. Можно пойти «тру» путём сделать как написано на страничке скрипта в секции «Setup:», но я поступил проще — распаковал архив у себя на компьютере, вместо редактирования конфигурационного файла — отредактировал сам скрипт, скопировал его на локальное хранилище (через «Browse Datastore»).

Вот основные параметры:

VM_BACKUP_VOLUME — путь к папке бэкапов, в моём случае /vmfs/volumes/linbackup

DISK_BACKUP_FORMAT — формат диска, thin для бэкапов подходит лучше всего

VM_BACKUP_ROTATION_COUNT — количество хранимых бэкапов (для каждой виртуальной машины), у меня 5

ADAPTER_FORMAT — тип адаптера, у меня lsilogic

Остальные параметры можно и не править, но если интересно — на страничке скрипта все параметры подробно описаны, правда на английском, вот тут почти все параметры расписаны по русски.

Итак, скрипт скопирован на локальное хранилище, подключаемся по ssh, переносим скрипт куда нибудь ближе к корню, например в /ghettovcb/ghettovcb.sh, если вам не нужно бэкапить все виртуальные машины — необходимо создать файл со списком бэкапируемых виртуалок:

cd /ghettovcb
vi vmlist

жмём «a» вписываем имена виртуалок, каждое на новой строке, нажимаем «esc» и чтобы сохранить изменения “:wq” или чтоб выйти без сохранения “:q”

Переносы строк должны быть “\n”, при переносах “\r\n” скрипт будет выдавать ошибку, поэтому не стоит создавать список в блокноте, с последующим копированием на хранилище, если вы ни разу не пользовались Notepad+ или EmEditor и не знаете что такое “\n” и “\r\n” — лучше создавайте список в vi.

Пробуем запустить скрипт:

./ghettovcb.sh -f ./vmlist -l ./log.txt

или если вы создали файл конфигурации

./ghettovcb.sh -f ./vmlist -g ./ghettovcb.conf -l ./log.txt

Скрипт отрабатывает, выдавая много информации, если в конце вывода видим “###### Final status: All VMs backed up OK! ######” значит всё хорошо, иначе — читаем log.txt и разбираемся что сделали не так.

Теперь надо создать расписание для бэкапов.

cd /var/spool/cron/crontabs
chmod u+w root
vi root

жмём «a», пишем расписание, только учтите — время указывается в UTC, т.е. для Москвы это локальное время минус три часа

00 20 * * * /ghettovcb/ghettovcb.sh -f /ghettovcb/vmlist -l /vmfs/volumes/linbackup/logs/`~date +%F`.txt

или если вы создали файл конфигурации

00 20 * * * /ghettovcb/ghettovcb.sh -f /ghettovcb/vmlist -g /ghettovcb/ghettovcb.conf -l /vmfs/volumes/linbackup/logs/`date +%F`.txt
жмём «esc» и сохраняемся ":wq"

в заключении

chmod u-w root

Теперь нужно выполнить две команды, чтобы перезапустить cron

kill $(cat /var/run/crond.pid)
crond

Теперь ежедневно в 20:00 по UTC (в 23:00 по Москве) будет запускаться скрипт, логи о его выполнении будут сохранятся на хранилище в папке logs, отдельный лог на каждый день.

По логам у меня на бэкап уходит примерно 4 часа, посчитал скорость — примерно 4ГБ в минуту, т.е. примерно 70МБ в секунду, весьма не плохо. Хранилища в 2,7ТБ хватает на хранение двух копий каждой виртуалки, этого вполне достаточно, плюс остаётся свободное место, а оно нужно, т.к. сначала делается третья резервная копия и только после её создания удаляется самая старая копия.

Ну и ещё один камень в огород «windows» хранилища — пробовал делать бэкапы скриптом на него, storage просто отваливался, ну и собственно скрипт завершался с ошибкой. Понимаю, что всё дело в неверной настройки записи по NFS, но настройки были по умолчанию и разбираться в «тюнинге» не очень то и хотелось.

Эксперимент прошёл удачно, можно закупать сервер с хорошими дисками, планируется RAID 10 на 5ТБ, этого должно с запасом хватить и на будущие виртуалки.

Оставьте комментарий