И так, передо мной стояла задача настроить резервное копирование
данных. Я не буду рассказывать какая инфраструктура у меня. Просто
покажу скрипт который я написал и расскажу как он работает. Т.к. он
основан на элементарных понятиях CMD 70% IT специалистов все поймут и не
будут задавать непонятные вопросы.
Задача
Настроить Бэкап 700 Gb пользовательских данных, находящихся на файловом сервере
Windows Server 2008 R2 на внешний USB винчестер объемом 2Tb.
Бэкап должен быть как ежедневным так и Полным. Бэкапы должны храниться 2 недели.
Немного теории:
Полнофункциональное резервирование бывает трех видов:
- Полное, FULL (все файлы из конкретных каталогов)
- Дифференциальное, DIF (только то, что изменялось с момента последнего полного резервирования)
- Инкрементальное, INC (только то, что изменялось с
момента просто последнего резервирования – полного или, что чаще,
предыдущего инкрементального резервирования).
А следующий важный момент состоит в том, что у файла есть атрибут
«Архивный», который устанавливается=1 после любой операции с файлом.
Написал 2 bat файла, первый для полного резервного копирования:
Full WinRAR Archive |
|
rem Задаем формат даты и времени для лога
set now=%TIME:~0,-3%
set now=%now::=%
set now=%now: =0%
set now=%DATE:~-4%%DATE:~3,2%%DATE:~0,2%_%now%
rem объявляем переменные для удобства
rem путь до архиватора
set rar_path="C:\Program Files\WinRAR\rar.exe"
rem где хранить архив
set back_path=F:\backups\
rem формат имени архива
set arh_fname=Data_full -ag_DD_MMM_YYYY_NN
rem Расположение файла-списка того что архивируем
set include_list=@d:\script\listbackup.txt
rem Расположение файла-списка исключений
rem set exclude_list=-x@d:\script\listnoback.txt
rem Аргументы архивирования
set rar_argum=-m0 -dh -ac -ow
rem Расположение лога архиватора
set log_path=D:\script\logs\
rem Имя файла лога
set log_filename=full_rar_log.log
rem очищаем временное хранилище файлов
D:\script\clearfolder.bat
rem Удаляем предыдущий бэкап через предыдущий, так чтобы хранилось только 2 полных
forfiles.exe /p %back_path% /s /m *.rar /d -13 /c "cmd /c del /q /f @file" >> %log_path%%now%_%log_filename%
rem Архивируем
%rar_path% a %back_path%%arh_fname% %include_list% %exclude_list% %rar_argum% >> %log_path%%now%_%log_filename%
|
Для ежедневного Бэкапа я выбрал инкрементальный тип бэкапа т.к. данных много, а места мало.
INC WinRAR Archive |
|
rem Задаем формат даты и времени для лога
set now=%TIME:~0,-3%
set now=%now::=%
set now=%now: =0%
set now=%DATE:~-4%%DATE:~3,2%%DATE:~0,2%_%now%
rem объявляем переменные для удобства
rem путь до архиватора
set rar_path="C:\Program Files\WinRAR\rar.exe"
rem где хранить архив
set back_path=F:\backups\
rem формат имени архива
set arh_fname=Data_inc -ag_DD_MMM_YYYY_NN
rem Расположение файла-списка того что архивируем
set include_list=@d:\script\listbackup.txt
rem Расположение файла-списка исключений
set exclude_list=-x@d:\script\listnoback.txt
rem Аргументы архивирования
set rar_argum=-m0 -dh -ac -ao -ow
rem Расположение лога архиватора
set log_path=D:\script\logs\
rem Имя файла лога
set log_filename=inc_rar_log.log
rem Затираем бэкапы старше 14 дней
forfiles.exe /p %back_path% /s /m *.rar /d -14 /c "cmd /c del /q /f @file" >> %log_path%%now%_%log_filename%
rem Архивируем
%rar_path% a %back_path%%arh_fname% %include_list% %exclude_list% %rar_argum% >> %log_path%%now%_%log_filename%
|
Оба скрипта очень похожи но все таки немного отличаются, именами
создаваемых файлов и логов, а так же атрибутами запуска архиватора.
Утилита forfiles.exe входит в состав OS Windows Server 2008. Но ее можно скачать с сайта MS в составе Windows Server 2003 Resource Kit Tools дляиспользования
в более старых версиях OS. Она нужна для удаления старых файлов. Я
настроил ее таким образом что при полном бэкапе остаются только 2
полных. И при инкрементальном — остаются юэкапы только за 2 недели.
В скриптах применяется еще один батник clearfolder.bat - он нужен для очистки temp папок. Вот что он из себя представляет:
clearfolder.bat |
|
@echo off
set DIRTOCLEAR=V:\MRFolders\Exch.ALLREGIONS\
rem Удаление всех файлов кроме заблокированных
del /s /q /f %DIRTOCLEAR% >nul
rem Удаление всех папок, кроме непустых
dir /s /b /AD %DIRTOCLEAR% > tempdir.txt
for /f "tokens=*" %%I in (tempdir.txt) do (
rmdir /s /q "%%I" >nul
)
del tempdir.txt >nul
rem Разблокировка файлов
dir /s /b %DIRTOCLEAR% > temp.txt
for /f "tokens=*" %%I in (temp.txt) do (
openfiles /disconnect /A * /OP "%%I" >nul
)
del temp.txt >nul
rem Повторяем попытку все удалить
rem Удаление всех файлов
del /s /q /f %DIRTOCLEAR% >nul
rem Удаление всех папок
dir /s /b /AD %DIRTOCLEAR% > tempdir.txt
for /f "tokens=*" %%I in (tempdir.txt) do (
rmdir /s /q "%%I" >nul
)
del tempdir.txt
|
После создания bat файлов засовываем первый скрипт в Task Sheduler и
ставим выполнение раз в неделю. Второй Bat файл так же настраиваем на
запуск каждый день вечером кроме субботы и воскресенья, т.к. в эти дни
файлы на сервере не меняются и не имеет смысл делать бэкап.
И так, что же может в итоге мой скрипт:
- Бэкапит полный архив RARом без сжатия, в субботу вечером. + сбрасывает атрибут «Архивный»(Раз в неделю, в субботу в 21:00)
- Бэкапит только изменившиеся данные с момента последнего ежедневного
бэкапа без сжатия + снимает атрибут «Архивный» — Инкрементальный бэкап
(каждый день в 21:00 кроме субботы и воскресения)
- Удаляет предыдущие бэкапы оставляя только 2 полных последних и инкрементальных за последние 14 дней
- Очищает временные папки (если нужно)
- Пишет логи в настроенную директорию
- Использует список исключений по папкам и файлам.
- В Windows Server 2008 через шедуллер отправляю уведомление о завершении Таска, по времени можно контролировать правильно ли он выполнился.
- Архивирует файлы сохраняя разрешения NTFS
Вроде не так много и не так сложно. А как приятно))) скрипты рабочие.
Архив 700 гигов делался 12 часов. Сделался бы и быстрей, но на внешний
USB винт тяжело копировать.
Надеюсь комуто да пригодится мой труд. Вот мое решение проблемы вместе с файликами: http://www.siteto.ru/FilesShare/BackUp_winrar.rar
Источник: http://sysrtfm.ru/soft/backup-s-pomoschju-winrar/ |