И так, передо мной стояла задача настроить резервное копирование данных. Я не буду рассказывать какая инфраструктура у меня. Просто покажу скрипт который я написал и расскажу как он работает. Т.к. он основан на элементарных понятиях 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 винт тяжело копировать.
Надеюсь комуто да пригодится мой труд.
Работает на ура. Для себя только логи чуток подправил и все.
Отличное решение!
Саш, проверил? А что в логах подправил? может мне тоже полезно будет??)))
Я сделал текст с разделителями и дополнил немного. Это сделал чтоб тянуть в будущем затягивать в NAGIUS для мониторинга.
спасибо, попробую. Хорошее простое решение
Бэкапы с помощью RAR — это отличное и простое, как две копейки, решение! В свое время у меня был простейший скрипт для бэкапа ряда папок, который я засунул в планировщик. Ваш скрипт существенно сложнее моего, но мне хватало и работало, как часы.
Да можно и в 2 строчки cmd убрать весь код резервного копирования, лишь бы устраивали результаты его работы, мой скрипт просто делает немного больше потому что он применяется многими людьми, и требовался больший функционал. Но даже в таком виде он очень простой
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
с файлами все нормально, но не бекапит папки
Видимо Вы что то не так сделали, у Всех бэкапит вместе с папками.
странно… а может из-за того что архиватор пишет, что незарегистрированная версия?
все нашел в чем проблема!
в строчку set rar_argum=-m0 -dh -ac -ow надо добавить -r -Обрабатывать вложенные папки ❗ спасибо, отличный скрипт)
forfiles.exe /p %back_path% /s /m *.rar /d -14 /c «cmd /c del /q /f @file» >> %log_path%%now%_%log_filename%
вот эта строчка выдаёт ошибку «ОШИБКА: Не найдены файлы, отвечающие условиям поиска.»
Хотя файлы .rar там точно есть.
Эта строчка ищет файлы rar старше 14 дней. Возможно в этой папке у Вас нет таких файлов
Здравствуйте! Подскажите, как можно экранировать пробелы в имени пути папки в файле @filelist? Интересуют имена типа «C:UsersUserDownloadsFolder with space characters». Спасибо.
Добрый день. Стандартным способом как в CMD вписать весь путь в двойные кавычки думаю должно помочь
Увы — нет. Пробовал двойные, одинарные — не помогает.
C:UsersUser>»C:Program FilesWinRARrar.exe» a \192.168.0.1backupstest-1day(yesterday)Data_full -ag_DD_MMM_YYYY_NN @C:listbackup.txt -m0 -dh -ac -ow -r 1>>C:logsbackup20140806_130953_full_rar_log.log
Cannot read contents of C:UsersUser’C:UsersUserDownloadsР РчР?РёС?С’С
? Р?РёР°Р+РчС’Р° 2002′
Синтаксическая ошибка в имени файла, имени папки или метке тома.
1) мне кажется вы сами еще ошибку допустили: Такого пути не может существовать:
C:UsersUser’C:UsersUserDownloadsР РчР?РёС?С’С
? Р?РёР°Р+РчС’Р° 2002′
2) Думаю winrar просто не понимает кодировку файла
нужно попробовать сохранить в др кодировке.
Я понимаю, C:listbackup.txt содержит C:UsersdfwmlbDownloadsРегистр диабета 2002
Файл перекодирован в OEM-866 в соответствии с гайдом http://www.cyberforum.ru/cmd-bat/thread738351.html (ранее он мне помогал).
Скрипт отрабатывает нормально, но по сути ничего не происходит, т.к. судя по сообщению в логе он не находит папку для архивирования:
Creating archive \192.168.0.223asubackupstest-1day(yesterday)Data_full_06_Aug_2014_01.rar
WARNING: No files
почему в выводе ошибке путь пишется как «C:UsersUser’C:UsersUserDownloads» т.е. 2 раза встречается C:UsersUser. может в этом дело?
— Разгрузит мастера, специалиста или компанию;
— Позволит гибко управлять расписанием и загрузкой;
— Разошлет оповещения о новых услугах или акциях;
— Позволит принять оплату на карту/кошелек/счет;
— Позволит записываться на групповые и персональные посещения;
— Поможет получить от клиента отзывы о визите к вам;
— Включает в себя сервис чаевых.
Для новых пользователей первый месяц бесплатно. Зарегистрироваться в сервисе
Нет, я не знаю почему. Я уже выше писал, что указываю все нормально.
Проблема решена, кодировка файла должна быть Windows-1251.
Вам спасибо за наводящие вопросы 🙂
при добавлении одинарных кавычек: ‘C:UsersdfwmlbDownloadsРегистр диабета 2002′
скрипт падает в ошибку:
Cannot read contents of C:Usersdfwmlb’C:UsersdfwmlbDownloads???Ёбва ¤Ё Ў?
в 2002’
Синтаксическая ошибка в имени файла, имени папки или метке тома.
Хотя, вы правы, дело в кодировке. Латинские папки с пробелами обрабатываются нормально. Тогда вопрос, в какой кодировке указывать?
Даже написал в поддержку Rar. Быть может они про синтаксис этого файла пояснят. По идее, должны быть какие-то экранирующие символы.
Специально зарегался чтобы написать комментарий, у вас в коде закралась ошибка. А именно :
в Full WinRAR Archive , когда вы обозначаете exclude_list , вы ставите его как отдельный оператор, но это по факту аргумент. И Писать его надо в конец аргументов. В вашем случае
rem Расположение файла-списка того что архивируем
set include_list=@d:scriptlistbackup.txt
rem Аргументы архивирования и расположение файла-списка исключений
set rar_argum=-m0 -dh -ac -ao -ow -x@d:scriptlistnoback.txt
В конечной строке архивирования убираем exclude list
rem Архивируем
%rar_path% a %back_path%%arh_fname% %include_list% %rar_argum% >> %log_path%%now%_%log_filename%
Надеюсь кому-то будет полезно)
Резервное копирование для сервера делал по этой инструкции: http://leakyhead.ru/rezervnoe-kopirovanie-s-pomoshhyu-winrar-s-primerami/
Всё получилось. У вас слишком сложно начинающему админу)
Большое Спасибо! +10 к карме)
Интересное решение, спасибо