Вступление
Использование виртуальных машин позволяет упростить создание архивных копий и восстановление этих самых машин. Процесс создания архивной копии виртуальной машины это, как правило, относительно простая процедура:
- Создается снапшот (чекпоинт) виртуальной машины.
- Производится копирование данных из снапшота.
- После копирования снапшот удаляется.
Стоимость систем резервного копирования, при этом, не всегда адекватна по отношению к тем системам, которые вы собираетесь защищать. Но это не означает, что бекапа делать не стоит. Как минимум вы сэкономите себе время и нервы, если вы будете иметь резервные копии.
Исследуя вопрос резервного копирования, я нашел решение 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
Теперь этот скрипт нужно добавить в планировщик заданий и у вас все готово.
Пара замечаний. Во-первых, сценарий требует повышенных привилегий для корректной работы. Во-вторых, в этом сценарии не отслеживается ни количество резервных копий, ни используемое ими пространство. В моем случае отслеживание количества копий производится на сервере, на котором хранятся эти копии.
Подпишись на рассылку актуальных новостей
и читай нас в соц. сетях