UncleFather » 09 мар 2020 19:43, Пн
Полезные скрипты и команды для создания резервных копий виртуальных машин
-
Скрипт для создания бэкапа Хост платформы и виртуальной машины. Скрипт взят из статьи Автоматизируем процесс создания бекапов серверных систем Windows Server 2008 R2, 2012 R2, с помощью скрипта для PowerShell и немного подредактирован для возможности создания резервных копий на локальных дисках и для того, чтобы в состав бэкапа включалась виртуальная машина.
Код: Выделить всё
###########################################################################
# Описание: Автоматизация создания бекапа системы (Windows Backup Server) #
# Автор: Jakonda #
# Дата создания: 21.07.17 #
###########################################################################
#
# Переменные для работы бекапа GPO
#
# Каталог расположения архиватора 7-Zip
$7z = "C:\Program Files\7-Zip\7z.exe"
# Зададим алиас для запуска 7-Zip
set-alias SZ $7z
# Текущая дата
$CurrentDate = get-date -format dd.MM.yyyy
# Имя домен-контроллера
$DC_Name = "SRV-DC1"
# Имя виртуальной машины которую нужно бэкапить
$VirtMachine = "WinServer2008R2_1"
# Путь к сетевой папке, в который хранить бекапы
#$Path_Net_Drive = "\\192.168.1.3\All_Backups\DC\WSB\" + $DC_Name
$PathArch = "E:"
# Удалять бекапы старше ... дней (Указывать период в днях)
$StoreBackup_Period = 7
#
#
# Функция для создания структуры каталогов
Function CheckPath ($Path) {
$Path_Exists = Test-Path -Path $Path
If ($Path_Exists -eq $False) {New-Item $Path -type directory}
}
#
# Функция удаления старых бекапов
Function RemoveOldBackup ($Path, $Extention, $CountDays) {
$LastWrite = Get-Date.Add-Days(-$CountDays)
$FoundFiles = Get-Childitem $Path -Include $Extension -Recurse | Where{$_.LastWriteTime -le "$LastWrite"}
Foreach ($File in $FoundFiles){
Remove-Item $File.FullName | Out-Null
}
}
# Блок процедуры создания бекапа системы
#
# Подключаем оснастку Windows Server Backup
Add-PSSnapin Windows.Serverbackup -ErrorAction SilentlyContinue
# Создаем задание бекапа
$policy = New-WBPolicy
# Определяем в переменную путь бекапа
$target = New-WBBackupTarget -VolumePath $PathArch
# Добавляем в задание бекапить Bare Mental Recovery (Восстановление исходного состояния системы)
Add-WBBareMetalRecovery -Policy $policy
# Добавляем в задание бекапить System State (Состояние системы)
Add-WBSystemState -policy $policy
# Добавляем в задание бекапить критические области на жестком диске
Add-WBVolume -Policy $policy -Volume (Get-WBVolume -CriticalVolumes)
# Добавляем в задание виртуальную машину
Get-WBVirtualMachine | ? VMName -eq $VirtMachine | Add-WBVirtualMachine -Policy $policy
# Добавляем в задание параметр VSS (Теневой копии)
Set-WBVssBackupOptions -policy $policy -VssCopyBackup
# Добавляем в задание путь бекапа
Add-WBBackupTarget -Policy $policy -Target $target
#
# Создаем каталог для бекапов
CheckPath $PathArch | Out-Null
#
# Запускаем создание бекапа
Start-WBBackup -Policy $policy
#
# Проверяем результат выполнения бекапа
# Если бекап завершился успешно
if ((Get-WBSummary).LastBackupResultHR -eq 0) {
# Переименовываем папку с созданным бекапом в формат текущей даты
Rename-Item $target\WindowsImageBackup "$CurrentDate" | Out-Null
# Если архиватор 7-Zip присутствует, то архивируем бекап
If (Test-Path -Path $7z) {
SZ a "$target\$CurrentDate.7z" -m0=LZMA2:d=96m:fb=128 -mx=9 -mmt=2 "$target\$CurrentDate" | Out-Null
}
else {
exit
}
# Подчищаем за собой, удаляем исходную папку бекапа
Remove-Item $target\$CurrentDate -recurse -force | Out-Null
# Удаляем старые архивы бекапа в папке
RemoveOldBackup $target "*.7z" $StoreBackup_Period
}
-
Скрипт для создания моментальных снимков виртуальных машин и хранения их в течение заданного времени.
Запуск этого скрипта нужно добавить в планировщик задач, задав требуемую периодичность запуска.
Код: Выделить всё
$VM01 = "WinServer2008R2_1"
$StoreDays = -60
Get-VMSnapshot -VMName $VM01| Where-Object {$_.CreationTime -lt (Get-Date).AddDays($StoreDays) } | Remove-VMSnapshot
Get-VM $VM01 | Checkpoint-VM -SnapshotName "Daily Snapshot $((Get-Date).toshortdatestring())"
-
Скрипт для очистки теневых копий и резервных копий системы:
Код: Выделить всё
diskshadow /s DeleteShadows.scr
wbadmin delete catalog -quiet
wbadmin delete backup -keepVersions:0 -quiet
Предварительно в папке с этим скриптом необходимо создать файл DeleteShadows.scr со следующим содержанием:
-
Команда для немедленного прекращения выполнения всех задач архивации системы:
Все эти скрипты можно скачать в одном архиве:
[b][size=150]Полезные скрипты и команды для создания резервных копий виртуальных машин[/size][/b]
[list] [*] Скрипт для создания бэкапа Хост платформы и виртуальной машины. Скрипт взят из статьи [url=https://jakondo.ru/avtomatiziruem-protsess-sozdaniya-bekapov-servernyh-sistem-windows-server-2008-r2-2012-r2-s-pomoshhyu-skripta-dlya-powershell/]Автоматизируем процесс создания бекапов серверных систем Windows Server 2008 R2, 2012 R2, с помощью скрипта для PowerShell[/url] и немного подредактирован для возможности создания резервных копий на локальных дисках и для того, чтобы в состав бэкапа включалась виртуальная машина.
[spoiler title=Автоматизация создания бекапа][code]###########################################################################
# Описание: Автоматизация создания бекапа системы (Windows Backup Server) #
# Автор: Jakonda #
# Дата создания: 21.07.17 #
###########################################################################
#
# Переменные для работы бекапа GPO
#
# Каталог расположения архиватора 7-Zip
$7z = "C:\Program Files\7-Zip\7z.exe"
# Зададим алиас для запуска 7-Zip
set-alias SZ $7z
# Текущая дата
$CurrentDate = get-date -format dd.MM.yyyy
# Имя домен-контроллера
$DC_Name = "SRV-DC1"
# Имя виртуальной машины которую нужно бэкапить
$VirtMachine = "WinServer2008R2_1"
# Путь к сетевой папке, в который хранить бекапы
#$Path_Net_Drive = "\\192.168.1.3\All_Backups\DC\WSB\" + $DC_Name
$PathArch = "E:"
# Удалять бекапы старше ... дней (Указывать период в днях)
$StoreBackup_Period = 7
#
#
# Функция для создания структуры каталогов
Function CheckPath ($Path) {
$Path_Exists = Test-Path -Path $Path
If ($Path_Exists -eq $False) {New-Item $Path -type directory}
}
#
# Функция удаления старых бекапов
Function RemoveOldBackup ($Path, $Extention, $CountDays) {
$LastWrite = Get-Date.Add-Days(-$CountDays)
$FoundFiles = Get-Childitem $Path -Include $Extension -Recurse | Where{$_.LastWriteTime -le "$LastWrite"}
Foreach ($File in $FoundFiles){
Remove-Item $File.FullName | Out-Null
}
}
# Блок процедуры создания бекапа системы
#
# Подключаем оснастку Windows Server Backup
Add-PSSnapin Windows.Serverbackup -ErrorAction SilentlyContinue
# Создаем задание бекапа
$policy = New-WBPolicy
# Определяем в переменную путь бекапа
$target = New-WBBackupTarget -VolumePath $PathArch
# Добавляем в задание бекапить Bare Mental Recovery (Восстановление исходного состояния системы)
Add-WBBareMetalRecovery -Policy $policy
# Добавляем в задание бекапить System State (Состояние системы)
Add-WBSystemState -policy $policy
# Добавляем в задание бекапить критические области на жестком диске
Add-WBVolume -Policy $policy -Volume (Get-WBVolume -CriticalVolumes)
# Добавляем в задание виртуальную машину
Get-WBVirtualMachine | ? VMName -eq $VirtMachine | Add-WBVirtualMachine -Policy $policy
# Добавляем в задание параметр VSS (Теневой копии)
Set-WBVssBackupOptions -policy $policy -VssCopyBackup
# Добавляем в задание путь бекапа
Add-WBBackupTarget -Policy $policy -Target $target
#
# Создаем каталог для бекапов
CheckPath $PathArch | Out-Null
#
# Запускаем создание бекапа
Start-WBBackup -Policy $policy
#
# Проверяем результат выполнения бекапа
# Если бекап завершился успешно
if ((Get-WBSummary).LastBackupResultHR -eq 0) {
# Переименовываем папку с созданным бекапом в формат текущей даты
Rename-Item $target\WindowsImageBackup "$CurrentDate" | Out-Null
# Если архиватор 7-Zip присутствует, то архивируем бекап
If (Test-Path -Path $7z) {
SZ a "$target\$CurrentDate.7z" -m0=LZMA2:d=96m:fb=128 -mx=9 -mmt=2 "$target\$CurrentDate" | Out-Null
}
else {
exit
}
# Подчищаем за собой, удаляем исходную папку бекапа
Remove-Item $target\$CurrentDate -recurse -force | Out-Null
# Удаляем старые архивы бекапа в папке
RemoveOldBackup $target "*.7z" $StoreBackup_Period
}
[/code][/spoiler]
[*] Скрипт для создания моментальных снимков виртуальных машин и хранения их в течение заданного времени.
Запуск этого скрипта нужно добавить в планировщик задач, задав требуемую периодичность запуска.
[code]$VM01 = "WinServer2008R2_1"
$StoreDays = -60
Get-VMSnapshot -VMName $VM01| Where-Object {$_.CreationTime -lt (Get-Date).AddDays($StoreDays) } | Remove-VMSnapshot
Get-VM $VM01 | Checkpoint-VM -SnapshotName "Daily Snapshot $((Get-Date).toshortdatestring())"[/code]
[*] Скрипт для очистки теневых копий и резервных копий системы:
[code]diskshadow /s DeleteShadows.scr
wbadmin delete catalog -quiet
wbadmin delete backup -keepVersions:0 -quiet[/code]
Предварительно в папке с этим скриптом необходимо создать файл [b][i]DeleteShadows.scr[/i][/b] со следующим содержанием:
[code]delete shadows ALL[/code]
[*] Команда для немедленного прекращения выполнения всех задач архивации системы:
[code]WBADMIN stop job[/code][/list]
Все эти скрипты можно скачать в одном архиве:[attachment=0]BackUping Virtual Machines.rar[/attachment]