Архивация ВМ в HYPER-V на MS Windows 2012R2

Microsoft
Как ни хороша виртуалка, а делать бэкапы надо. Могут люди накосячить, может железо подохнуть, может вообще случиться все что угодно. А за потерянные данные голову начальство будет снимать с админа. Потому развернув HYPER-V на новой точилке, озадачился бэкапами. Вообще по жизни админа постоянно сталкиваешься с нежеланием начальства покупать что-либо. Ладно, хоть операционку купили и сервер, и то хорошо. А вот с бэкапами не все «прозрачно» — давать деньги начальство категорически отказалось. Поэтому всякие Veeam Backup и прочие ушли в небытие.
Ну что ж, гуглояндекс нам в помощь. Ищем. Первое что попадается — Планирование архивации от MS, почитал, подумал, в топку. Ищем дальше. MS предлагает архивацию на PS — надо доставить библиотеку и наваять скрипт (статья на хабре). Круто, ps скоро по функционалу станет как bash. Опять не понравилось. Снял ограничение на поиск — без критерия 2012. Выскочила ссылка на скрипт [SCRIPT] HyperV Backup Tool v0.7.3. Почитал, подумал. Подходит, в оболочку командную заворачивается. Отлично. Вперед на танки, обтачиваем под себя. Запускаю без параметров, что почитать что делать в командной строке, и на тебе подарок:ошибка 1
Ага, понятно, скрипт писан под 2008 и для 2012 нам надо слегка его подшаманить. Делаем: открываем в текстовом редакторе и заменяем все 2008 на 2012. Снова делаем пуск, ура работает:параметры командной строки. Ну что ж, попробуем забэкапить виртуальную машину с отправкой отчета на мыло. Для удобства раскидал это по папкам:
— скрипт кинул в c:\arch
— папка для для логов, которые уходят в мыло c:\log
— машины бэкапяться в папку d:\archive со своими подкаталогами (так делает скрипт)
Пробуем:
c:\arch\hvbackup.vbs BACKUP D:\Archive /vname:parus /log:"c:\log\parus.log" /smtp:"mail.ru,25,0,0,archer,zloy001,archer@mail.ru,admin@mail.ru" /s

Машинка не большая и минут через 27 в почту прилетает отчет:
Параметры запуска
________________________________________
	
Версия скрипта	HyperV Backup Tool v0.7.3
Дата и время запуска скрипта	07/02/2014 - 09:39:13
Операционная система	Microsoft Windows Server 2012 Datacenter
Операция	Архивация
Каталог для архива	D:\Archive
Архивируемая виртуальная машина	parus
Создание снапшота	Нет
Выводить сообщения на рабочий стол	Нет
Ведение лога	Да
Лог	c:\log\parus-2014_02_07.log
Создавать директории автоматически	Нет
Отправить лог-файл по электронной почте	Да
.........
bla-bla-bla-bla-bla-bla-bla-bla-bla-bla-bla-bla
.....................

Конечный файл: D:\Archive\parus\Virtual Hard Disks\parus.vhd	Файл успешно скопирован
 
Создание служебных файлов
Создание конфигурационного файла D:\Archive\parus\Fileslist.xml	Создан

Успешное завершение работы
________________________________________
	
Предупреждений	0
Дата и время завершения	07/02/2014 - 10:06:48

Ну что, вроде все работает. Машина заархивирована. Нет, вру — не заархивирована, снята копия — забэкаплена. И все бы хорошо и можно жить не тужить, но в душу закрадывается пара сомнений:
— бэкап хорошо, но он той же машине, что и HYPER-V
— размер бэкапа равен размеру виртуальной машины
— ненадежно как-то

Попробуем решить все и сразу. Бэкап можно сжать архиватором, в наличии консольный 7z, копию лучше перекинуть на сторадж. Архивировать надо не одну машину, а несколько, да и скучно из командной строки все делать, есть же ПЛАНИРОВЩИК. На 10.10.0.3 живет загнанный в домен NAS4Free yf пару терабайт, для архивов хватит. Используем все что есть под руками и сделаем такой скрипт и добавляем файлики. Итак: в папку c:\arch докладаем 7z.exe и 7z.dll. Там же в папке замутим наш скрипт. Используем минимум переменных и внешних функций, Микрософт он такой — не знаешь где приколется. Подумав пару минут, наворачиваем такой скрипт, без всяких мудростей и чтений данных и настроек из файлов (не люблю я это):
REM #############################################################################################################
REM # Задаем дату архивации вида YYYY_MM_DD
set backdate=%date:~6,4%_%date:~3,2%_%date:~0,2%
REM # Чистим каталог LOG
del /q /f c:\LOG\*.*
REM # Подключение сетевого драйва, для переноса архива ВМ
start /wait net use p: \\10.10.0.3\data /user:cyber\backupadm /persistent:yes QWEvbn3
REM #############################################################################################################
REM # Делаем для каждой машины следующий набор                                                                  #
REM #############################################################################################################
REM # Что 100 раз не писать имя машины, вводим переменную и правим для каждого блока архивации только ее
set VM=parus
REM # Снимаем копию с ВМ
start /wait c:\arch\hvbackup.vbs BACKUP D:\Archive /vname:%VM% /log:"c:\log\%VM%-%backdate%.log" /smtp:"mail.ru,25,0,0,archer,zloy001,archer@mail.ru,admin@mail.ru" /s
REM # Архивация копии ВМ
start /wait c:\arch\7z.exe a -y -r -mx5 "D:\Archive\%VM%-%backdate%.7z"  "D:\Archive\%VM%"
REM # Перенос копии на сетевое хранилище
start /wait xcopy /Y /R "D:\Archive\%VM%-%backdate%.7z" p:\HYP-SRV2\
REM # Удаление архива ВМ
del /f /q "D:\Archive\%VM%-%backdate%.7z"
REM # Удаление копии ВМ
rmdir /s /q "D:\Archive\%VM%"
REM #############################################################################################################
REM # Процедура закончена											#
REM #############################################################################################################
REM # Отключаем сетевой драйв
net use p: /del
REM # Уходим
REM # Уходим
EXIT

Сохраняем для удобства в тот же c:\arch под именем к примеру backup-vm.cmd. Запускаем и идем курить минут на 35-40. После этого смотрим почту и архив на NAS-е. Итог — отчет о бэкапе и сжатый бэкап, машины с диском на 25Гб, на 5.2Гб на NAS-е. Остается воткнуть задание на выполнение скрипта в планировщик, а скрипт проточить под нужное количество машин.

ЗЫ: почему данный скрипт взят за основу? Да просто он позволяет без гемора делать бэкапы на лету, не выключая машину, и за бесплатно.
ЗЫ2: Не забываем вырубить UAC, либо будем запускать скрипт от имени админа.

2 комментария