Cкрипт инкрементного резервного копирования общей папки.
Работает на win2k8 win2k12 win2k16
В системе требуется установленный 7zip
В планировщике ставим ежедневный запуск full.bat
Если полный архив отсутствует - скрипт создаст полный б'кап
Если уже есть полный архив - будет создан инкремент с отбором по атрибуту "архивный". Если сегодняшний инкремент уже есть (например ПК днем перезагрузили), то скрипт ничего не делает.
В планировщике ставим запуск dellfull.bat например раз в месяц. Этот скрипт сотрет прежний полный бэкап, что послужит сигналом к полному очищению папки хранения бэкапов и запуску создания свежего полного архива
full.bat
Код:
Код:
rem ************ блок настроек скрипта************
rem установка параметров
rem что копируем
set source=D:\Documents
rem временная папка, используется для создания инкрементов, сама очищается
set zipertmp=E:\zipertmp
rem куда копируем
set destination=E:\docs_backup
rem указываем путь до архиватора 7-zip
set ziper="C:\Program Files\7-Zip\7z.exe"
rem ***********************************************
rem определяем дату и записываем в переменную
for /F "tokens=1-3 usebackq delims=. " %%1 in (`date /t`) do set mydate=%%1.%%2.%%3
rem ***********************************************
rem **********блок создания инкрементов ***********
rem если есть полный архив, то делаем инкремент и выходим. Если полный архив отсутствует - переходим в раздел создания полного архива
if not exist %destination%\full_**********.zip goto createfull
rem Если уже есть сегодняшний инкремент, то ничего делать не надо
if exist %destination%\incr_%mydate%.zip goto gdby
rem делаем инкремент
rd %zipertmp% /S /Q
mkdir %zipertmp%
robocopy %source% %zipertmp% /S /Z /M
%ziper% a %destination%\incr_%mydate%.zip %zipertmp%\* -mx1 -pfj38drnvhfy462390g7
rd %zipertmp% /S /Q
:gdby
exit
rem *************************************************
rem ************ блок создания полного архива ************
:createfull
rem очищаяем папку назначения
rd %destination% /S /Q
mkdir %destination%
rem Делаем полный архив 7зипом
%ziper% a %destination%\full_%mydate%.zip %source%\* -mx1 -pfj38drnvhfy462390g7
rem Снимаем атрибут "архивный" со всех файлов в целевом каталоге
cd /d %source%
attrib -A *.* /S /D
exit
rem ******************************************************
dellfull.bat
Код:
Код:
set destination=E:\docs_backup
del %destination%\full_**********.zip /q /a
Автоматический бэкап виртуальных машин Hyper-V 2012R2 и 2016R2
Резервное копирование на лету без остановки гостевых ОС. Скрипт сначала экспортирует ВМ, потом зажимает их архиватором 7zip, и на последок чистит за собой хвосты + следит за количеством одновременно хранимых архивов. Внимательно следите за переменными, чтобы они указывали в реально существующие каталоги + обязательно наличие 7zip установленного в систему с параметрами по умолчанию.
backup.bat
Код:
Код:
rem --- start script ---
rem Блок настроек скрипта
rem назначаем глубину кол-ва архивов, например хранить 2 последних
set depth=2
rem Назначим уровень сжатия [0 | 1 | 3 | 5 | 7 | 9 ], по умолчанию 7zip использует 5
set cmprslvl=3
rem выбираем из всего многообразия нужную нам гостевую машину, по имени как она значится в Hyper-V оснастке
set vmname=km-bts01
rem Указываем промежуточный каталог куда ВМ будет экспортирована перед архивированием
set temp=e:\temp
rem Указываем куда складывать бэкапы
set vault=e:\backup\hyper-v
rem ************************************************
rem Все, дальше ничего не трогаем
set /a depth=%depth%-1
rem define date time variables for building the folder name
for /F "tokens=1-3 usebackq delims=. " %%1 in (`date /t`) do set mydate=%%1.%%2.%%3
for /F "tokens=1-3 usebackq delims=: " %%1 in (`time /t`) do set mytime=%%1-%%2
set timestamp=%mydate%_%mytime%
rem В файлик складываем список содержимого %vault%, отсортированного по дате, самые новые вверху
dir %vault% /O:-D /B>%temp%\dir%vmname%.txt
rem Отберем только интересующие нас файлы по шаблону имени.
rem Потом просто пропускаем %depth% кол-во строк, остальное удалим.
for /f "usebackq skip=%depth%" %%i in (`findstr "%vmname%" %temp%\dir%vmname%.txt`) do del %vault%\%%i /q /f
rem Запускаем резервное копирование
echo y|powershell.exe Set-ExecutionPolicy Unrestricted
powershell.exe Export-VM -Name %vmname% -Path "%temp%\%vmname%_%timestamp%"
echo y|powershell.exe Set-ExecutionPolicy Restricted
:: Архивируем и складываем куда следует, проверяй правильность пути до архиватора
"c:\Program Files\7-Zip\7z.exe" a "%vault%\%vmname%_%timestamp%.zip" "%temp%\%vmname%_%timestamp%\*" -mx%cmprslvl%
:: Чистим за собой
dir %temp% /O:-D /B>%temp%\dir%vmname%.txt
for /f "usebackq skip=%depth%" %%i in (`findstr "%vmname%" %temp%\dir%vmname%.txt`) do rmdir %temp%\%%i /q /s
::rmdir "%temp%\%vmname%_%timestamp%" /q /s
rem --- end script ---