Использование Veeam® Backup Free Edition и PowerShell для архивирования виртуальных машин Hyper-V

7 февраля 2018
Использование виртуальных машин позволяет упростить создание архивных копий и восстановление этих самых машин. Процесс создания архивной копии виртуальной машины это, как правило, относительно простая процедура.
Содержание

Вступление

Использование виртуальных машин позволяет упростить создание архивных копий и восстановление этих самых машин. Процесс создания архивной копии виртуальной машины это, как правило, относительно простая процедура:

  1. Создается снапшот (чекпоинт) виртуальной машины.
  2. Производится копирование данных из снапшота.
  3. После копирования снапшот удаляется.

Стоимость систем резервного копирования, при этом, не всегда адекватна по отношению к тем системам, которые вы собираетесь защищать. Но это не означает, что бекапа делать не стоит. Как минимум вы сэкономите себе время и нервы, если вы будете иметь резервные копии.

Исследуя вопрос резервного копирования, я нашел решение Veeam® Backup Free Edition С помощью данного продукта можно сделать резервные копии виртуальных машин Hyper-V и VMWare.

Первым аргументом в пользу этого решения было: цитата «БЕСПЛАТНОЕ. Решение может обслуживать неограниченное количество серверов и виртуальных машин на платформах ESXi и Hyper-V, не требует дополнительных расходов и не имеет ограничений по сроку действия!» и второй аргумент — поддержка PowerShell.

Итак, скачав и установив Veeam сначала добавьте сервер Hyper-V в Veeam и учетные данные для подключения к ним. Далее приступаем к созданию сценария резервного копирования.

Сценарий:

# 1.Для начала добавляем оснастку в PowerShell для работы с Veeam

Add-PSSnapin VeeamPSSnapin

# 2.Определяем нужные переменные.

# Имя витруальной машины

$vm="VM_Name"

# Время начала бекапа

$mydate=Get-date -format 'HH:mm yyyy-M-d'

# Путь к каталогу с архивными копиями (в моем случае NFS поэтому не забудьте установить клиента NFS в Windows)

$dstdir="\\10.20.30.40\backup\"+$vm

# Учетные данные для подключения к серверу

$creds=Get-VBRCredentials -Name 'DOMAIN\account'

# Просто счетчик нужен для отслеживания продолжительности задания

$count=1

# 3. Определяем нет ли активных заданий архивации

$jobname=$vm+"_*"

$vmobj=Find-VBRHvEntity -Name $vm

$job=Get-VBRBackupSession -name $jobname | Where-Object {$_.state -ne "Stopped"}

# 4.Если заданий нет, то создаем задание, а если есть активное задание, то пишем уведомление и завершаем скрипт.

if ($job -eq $null ) {

$sjob=Start-VBRZip -Folder $dstdir -Entity $vmobj -Compression 5 -RunAsync -NetworkCredentials $creds

$jobname=$sjob.Name.ToString()

}

else {

$boby="There is active backup job. Aborting."

$subj="ERROR. Failed to start backup of "+$vm+" at "+$mydate

Send-MailMessage -to "admin@example.ru" -From "backup@example.ru" -Subject $subj -SmtpServer "mailsrv" -Body $body

exit 1

}

# 5.Далее каждую минуту проверяем статус задания, и если оно не заканчивается через 4 часа завершаем скрипт с ошибкой и уведомлением

sleep 60

$job=Get-VBRBackupSession -Name $jobname

while ( $job.Info.IsCompleted -ne $true) {

sleep 60

$job=Get-VBRBackupSession -Name $jobname

$count=$count+1

if ($count -ge 240) {

$boby="Backup job is running too long. Check for problems"

$subj="ERROR. Too long backup of "+$vm+" at "+$mydate

Send-MailMessage -to "admin@example.ru" -From "backup@example.ru" -Subject $subj -SmtpServer "mailsrv" -Body $body

exit 2

}

}

# 6.По завершении задания создаем уведомление и отправляем его по почте.

$myjobobj= New-Object -TypeName PSObject -Property @{

Jobname = $job.Info.jobname

Creationtime= $job.Info.Creationtime

Endtime= $job.Info.EndTime

Result=$job.Info.Result

TotalMb= [math]::floor($job.Progress.TransferedSize/1024/1024)

} | Select-Object Jobname, Creationtime, Endtime, TotalMb, Result

$body=($myjobobj | ConvertTo-Html| Out-String)

$subj=$job.Result.ToString()+" of Veam Backup of "+$vm+" at "+$mydate

Send-MailMessage -to "admin@example.ru" -From "backup@example.ru" -Subject $subj -SmtpServer "mailsrv" -Body $body

Теперь этот скрипт нужно добавить в планировщик заданий и у вас все готово.

Пара замечаний. Во-первых, сценарий требует повышенных привилегий для корректной работы. Во-вторых, в этом сценарии не отслеживается ни количество резервных копий, ни используемое ими пространство. В моем случае отслеживание количества копий производится на сервере, на котором хранятся эти копии.

Автор статьи
Вячеслав Лесковец
Преподаватель:
УЦ АйТи Клауд по направлениям сетевые технологии, операционные системы
Затрудняетесь
с выбором курса?

Оставьте заявку на консультацию

Отправляя заявку, вы соглашаетесь с условиями обработки персональных данных

Хотите преподавать в АйТи Клауд?

Если вы имеете компетенции и хотите работать тренером курсов в АйТи Клауд - оставьте ваши данные, мы свяжемся с вами!