Резервное копирование winrar bat
Всем привет. Прошу не кидать в меня помидорами за столь глупые вопросы, не знал просто где написать.
Создаю батник в ситеме для бэкапа данных:
Нужно чтобы система сама проверяла измененные и новые файлы и добавляла их в архив. И все вроде бы так и делается, но после добавления параметра -vn в четвертую строку скрипт уже не работает. После каждого запуска создает новые архивы и архивирует все файлы (новые и старые), так как это многотомный архив (как я понял).
Сразу скажу что я не админ, поэтому помогите плиз кто нибудь в настройке этого скрипта.
И все вроде бы так и делается, но после добавления параметра -vn в четвертую строку скрипт уже не работает. После каждого запуска создает новые архивы и архивирует все файлы (новые и старые), так как это многотомный архив (как я понял). » |
Обновление многотомного архива не поддерживается, об этом явным образом написано в документации.
Тогда Вы не можете использовать параметр «-u».
помогите плиз кто нибудь в настройке этого скрипта. » |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.
помогите плиз кто нибудь в настройке этого скрипта. » |
Спасибо за ответ. Нужно делать бэкап файлов из Папки Яндекс диска в Облако мэйл, но в архивах. Покупать сторонний софт не хочу, вот и задумался о бесплатных способах. И нужно чтобы был инкриментный бэкап.
Последний раз редактировалось Batman45678, 29-11-2017 в 15:11 .
Batman45678, флаг Вам в руки. С каких пор WinRAR стал «бесплатным», и с каких пор он научился делать инкр е ментные архивы?
Batman45678, Осознайте, что Вы хотите получить, и что творится в приведенном Вами скрипте.
По Вашему скрипту понятно, что Вы создаёте архив с именем, содержащим дату.
То есть, ключ -vn, который Вы хотели добавить, совершенно ни при чём: каждый день Вы создаёте архив заново.
Я не понимаю, что Вы подразумеваете под термином "инкрементный". По Вашему скрипту можно догадаться, что Вы хотите создавать полный архив, но для экономии времени указываете ключ -u, то есть архив освежается, неизменные файлы в архиве остаются, переархивируются только более свежие файлы.
То есть в любом случае это полный архив.
Если Вам хочется каждый день передавать полный архив, но при этом не переархивировать старые файлы, можно предложить такой вариант:
1. Создаём полный архив без даты в имени с ключом -u. Степень сжатия указываем ненулевой (у Вас -m2)
2. Для передачи, если надо сделать многотомный архив, архивируем обновлённый архивный файл в файл с датой в имени, если хочется, указываем -vn и максимальный размер тома в многотомном архиве. При этом степень сжатия выберем -m0. Немного экзотично: заархивировать архив, это приходится делать для разбиения большого архива на тома. Возможно, для этого можно найти другую утилиту, я с ходу не упомню.
Однако, если не надо передавать многотомный архив, можно полученный полный архив не архивировать повторно, а просто скопировать для передачи в файл с датой в имени.
Iska, термин "инкр и ментный" в применении к бесплатному WinRAR можно при желании признать корректным, от слова криминальный.
-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.
Backup с помощью WinRar
И так, передо мной стояла задача настроить резервное копирование данных. Я не буду рассказывать какая инфраструктура у меня. Просто покажу скрипт который я написал и расскажу как он работает. Т.к. он основан на элементарных понятиях CMD 70% IT специалистов все поймут и не будут задавать непонятные вопросы.
Полнофункциональное резервирование бывает трех видов:
- Полное, FULL (все файлы из конкретных каталогов)
- Дифференциальное, DIF (только то, что изменялось с момента последнего полного резервирования)
- Инкрементальное, INC (только то, что изменялось с момента просто последнего резервирования – полного или, что чаще, предыдущего инкрементального резервирования).
А следующий важный момент состоит в том, что у файла есть атрибут «Архивный», который устанавливается=1 после любой операции с файлом.
Написал 2 bat файла, первый для полного резервного копирования:
Для ежедневного Бэкапа я выбрал инкрементальный тип бэкапа т.к. данных много, а места мало.
Оба скрипта очень похожи но все таки немного отличаются, именами создаваемых файлов и логов, а так же атрибутами запуска архиватора. Утилита forfiles.exe входит в состав OS Windows Server 2008. Но ее можно скачать с сайта MS в составе Windows Server 2003 Resource Kit Tools дляиспользования в более старых версиях OS. Она нужна для удаления старых файлов. Я настроил ее таким образом что при полном бэкапе остаются только 2 полных. И при инкрементальном — остаются юэкапы только за 2 недели.
В скриптах применяется еще один батник clearfolder.bat — он нужен для очистки temp папок. Вот что он из себя представляет:
После создания bat файлов засовываем первый скрипт в Task Sheduler и ставим выполнение раз в неделю. Второй Bat файл так же настраиваем на запуск каждый день вечером кроме субботы и воскресенья, т.к. в эти дни файлы на сервере не меняются и не имеет смысл делать бэкап.
И так, что же может в итоге мой скрипт:
- Бэкапит полный архив RARом без сжатия, в субботу вечером. + сбрасывает атрибут «Архивный»(Раз в неделю, в субботу в 21:00)
- Бэкапит только изменившиеся данные с момента последнего ежедневного бэкапа без сжатия + снимает атрибут «Архивный» — Инкрементальный бэкап (каждый день в 21:00 кроме субботы и воскресения)
- Удаляет предыдущие бэкапы оставляя только 2 полных последних и инкрементальных за последние 14 дней
- Очищает временные папки (если нужно)
- Пишет логи в настроенную директорию
- Использует список исключений по папкам и файлам.
- В Windows Server 2008 через шедуллер отправляю уведомление о завершении Таска, по времени можно контролировать правильно ли он выполнился.
- Архивирует файлы сохраняя разрешения NTFS
Вроде не так много и не так сложно. А как приятно))) скрипты рабочие. Архив 700 гигов делался 12 часов. Сделался бы и быстрей, но на внешний USB винт тяжело копировать.
Несколько лет назад узнала, что с WinRar можно работать через консоль. Сразу же было решено написать простенький bat-ник для организации резервного копирования важных файлов.
О том, как добавить пакетный файл в планировщик заданий, можете почитать тут :)
Синтаксис команд консольного WinRar:
Полный список команд и ключей можно позырить тут . Рассмотрим необходимые для архивации:
Команды:
A Добавить файлы в архив
U Обновить файлы в архиве
Ключи:
-r Обрабатывать вложенные папки
-m Установить метод сжатия (n = 0 .. 5, стандартный метод сжатия - 2)
-dh Открывать совместно используемые файлы
-ag[формат] Добавить к имени архива текущую дату и время
-x или -x Исключить из обработки файлы (можно указать только определенный формат, например, с ключом -x*.exe в архив не будут добавляться .exe файлы)
-hp[пароль] Зашифровать архив паролем
-ow Обработать информацию о правах доступа к файлам
Пример: Нужно заархивировать файл "Новый проект.jpg" в папку test на диске D:
Результат выполнения:
Итак, мой батник для ручного создания архива
rem Наводим красоту
TITLE BACKUP MASTER
COLOR 0A
CLS
@ECHO off
rem Сохраняем и задаем пути в переменные
SET current_path=%cd%
SET backup_path=%current_path%Backup\
SET backup_list=@%current_path%backup_list.txt
SET rar_path="C:\Program Files\WinRAR\rar.exe"
rem Создаем папку для бэкапов и txt для списка файлов
MKDIR Backup
IF NOT EXIST backup_list.txt (type NUL>backup_list.txt)
rem Предлагаем открыть список архивируемых файлов
:start
CHOICE /T 120 /C yne /CS /D n /M "Open backup_list? yes (y), no (n) or exit (e)"
IF %ERRORLEVEL%==1 (GOTO edit_list)
IF %ERRORLEVEL%==2 (GOTO make_backup)
IF %ERRORLEVEL%==3 (GOTO exit)
rem Редактируем список файлов
:edit_list
START %current_path%backup_list.txt
rem Делаем бэкап
:make_backup
rem Выводим список бэкапов в папке Backup
TREE %current_path%Backup /f
rem Предлагаем ввести имя файла или сгенерировать по дате
CHOICE /T 9999 /C nde /CS /D d /M "To enter file name (n). To name in format backup_file_DD.MM.YYYY (d). For exit (e)"
IF %ERRORLEVEL%==1 (SET /p archive_name="Enter name: ")
IF %ERRORLEVEL%==2 (SET archive_name=backup_file -ag_DD.MM.YYYY)
IF %ERRORLEVEL%==3 (GOTO exit)
rem Предлагем создать новый файл и обновить существующий
CHOICE /T 9999 /C une /CS /D n /M "Update existing (u) or make new (n)? For exit (e)"
IF %ERRORLEVEL%==1 (GOTO update)
IF %ERRORLEVEL%==2 (GOTO make_new)
IF %ERRORLEVEL%==3 (GOTO exit)
rem В случае обновления архива
:update
ECHO Updating.
%rar_path% u -r -m2 -dh -ow %backup_path%%archive_name% %backup_list%
GOTO continue_or_exit
rem В случае создания нового архива
:make_new
ECHO Making new.
%rar_path% a -r -m2 -dh -ow %backup_path%%archive_name% %backup_list%
rem Продолжаем создавать архивы или выходим
:continue_or_exit
CHOICE /T 9999 /C ce /CS /D c /M "Continue (c) or exit (e)?"
IF %ERRORLEVEL%==1 (GOTO start)
Facebook Если у вас не работает этот способ авторизации, сконвертируйте свой аккаунт по ссылке ВКонтакте Google RAMBLER&Co ID
Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal
Блог, инструкция системного администратора, форум, советы, помощь
простейший backup на основе winrar и планировщика задач windows
Решил в одном месте запостить свои наработки, дабы потом снова не гуглить и не рыться в закладках.
Вообще, основано на данной статье, так что копирайт соблюдён :)
Итак, цели задачи:
1. Архивировать необходимые папки по списку;
2. Имя архива должно начинаться с даты в формате YYYY.MM.DD;
3. Выполнение в автоматическом режиме и ежедневное;
4. Отправка бэкапов на сервер.
Все должно происходить без участия человека, то бишь в автоматическом режиме.
Архивацию и именование файлов будет производить WinRAR, ежедневный запуск скрипта на выполнение - встроенный планировщик задач Windows.
Архиватор WinRAR обладает мощной поддержкой командной строки. В частности, он может формировать имя файла на основе пользовательского шаблона, включая в него разную служебную информацию, например, дату. Что, собственно говоря, и требуется. Кроме того, он умеет работать со списком файлов или директорий на архивацию, что сильно облегчает редактирование командного файла.
Вся работа по созданию бэкапа строится на основе командных файлов.
- make_daily.bat - содержит команды для создания архивного файла или файлов.
- backup_task.bat - выполняет следующие действия: вызывает make_daily.bat и передает ему в качестве параметра либо папку, которую надо архивировать, либо файл-список (в котором несколько папок на архивацию).
- В свою очередь, backup_task.bat вызывается Планировщиком Windows в назначенное время
@"c:\program files\winrar\winrar.exe" a -s -r -rr10p -dh -ed -m3
-ilogC:\DailyBackupScript\dailybackup.lo g -ag+YYYYMMDD
X:\DailyBackup\backup %1
Разберем по составляющим:
- "c:\program files\winrar\winrar.exe" - путь к WinRAR-у
- a - команда на добавление файлов
- -s - режим сжатия "solid"
- -r - с поддиректориями
- -rr10p - на всякий случай добавляем информацию для восстановления (-rr), в количестве 10% (10p)
- -dh - открывать шареные файлы. Полезно, если кто-нибудь засиделся до 12 ночи, и редактирует файл, который должен уйти в бэкап
- -ed - не добавлять пустые директории
- -m3 - степень сжатия 3
- -ilogC:\DailyBackupScript\dailybackup.lo g - вести лог (-ilog) и записывать его в "C:\DailyBackupScript\dailybackup.lo g"
- -ag+YYYYMMDD X:\DailyBackup\backup - формировать имя файла, прибавляя в начало текущий год, месяц и число. Имя файла будет иметь примерно такой вид: 20060927backup.rar
- X:\DailyBackup\backup - папка, куда писать бэкапы и имя бэкапа (к которому в начало дописываются год, месяц, число)
Для работы также необходимо создать файл backup.lst (обычный текстовый файл). Он должен содержать список директорий, которые включаются в бэкап. Каждая директория должна располагаться на отдельной строчке, например, так:
Хочу заметить, что если имя директории или файла содержит пробелы, то путь можно не брать в кавычки. Так же не стоит ставить завершающий слэш - winrar его не поймет.
Теперь необходимо добавить файл backup_task.bat в планировщик Windows, указать периодичность и время выполнения. Собственно, всё :)
Тема всегда актуальная и способов ее решения так же много, как и требований к такой системе, у каждого они свои. Есть много достойных сторонних продуктов, как платных так и бесплатных, но некоторые пытаются сделать что-то свое штатными или почти штатными средствами. Я отношусь к таким энтузиастам. Попробовав различные готовые решения, решил попытаться использовать то, что есть под руками.
Под руками оказался внешний винт на 500 Гб, протокол FTP и WinRAR. Также имеется небольшой офис с 6-ю ПК под управлением WinXP, данные с которых неплохо бы периодически сливать во внешнее хранилище.
Так как создание бекапов – моя личная инициатива и никто такую задачу передо мной не ставил, то требования я придумывал тоже сам исходя из здравого смысла и понимания того, что отдельный файловый сервер с RAID-винтами руководство не профинансирует.
Система должна:
Реализация
На свою машину я поставил и настроил бесплатный FTP-сервер FileZilla Server.
Для периодичности задачи под виндой проще всего использовать Планировщик, который будет запускать на каждой клиентской машине батник, реализующий основные функции.
1. Формирование новых бекапов и их заливка
- backup.bat – реализует сам бекап на клиентской машине
- in_rar.txt – что включать в бекап
- except_rar.txt – что не включать в бекап
- ftp_param.txt – параметры FTP-соединения
- backup.log – создается сам при ошибках
rem определим, где будут лежать все конфиги бекапа:
set place=F:\Install\backups_main
rem очистим папку хранения бекапов от прошлой копии, если она вдруг осталась:
IF EXIST %place%\BackUpTemp\*.rar del %place%\BackUpTemp\*.rar
rem настройки архиватора:
set a_opt=a -r -agDD-MM-YY -dh -esh -INUL -m0 -ri10:10 -Y -cfg- -ep2
rem что архивируем:
set a_files=@%place%\in_rar.txt
rem что пропускаем:
set a_not=-x@%place%\except_rar.txt
rem Ключ -X@ - не обрабатывать файлы, указанные в файле-списке.
rem куда архивируем+имя архива:
set a_out=%place%\BackUpTemp\backup_
rem где лежит лог архивации:
set a_log=%place%\backup.log
rem запуск архиватора (Ключ -IBCK - запустить WinRAR как фоновый процесс в системном лотке)
"C:\Program Files\WinRAR\WinRAR.exe" -ibck %a_opt% %a_not% %a_out% %a_files% >%a_log%
rem зальем полученный архив на FTP:
ftp -s:ftp_param.txt -i >%a_log%
rem удалим архивный файл-оригинал
del %place%\BackUpTemp\*.rar \y
exit
Приведу то же, но без комментариев, чтобы можно было оценить компактность и наглядность решения:
@echo off
set place=F:\Install\backups_main
IF EXIST %place%\BackUpTemp\*.rar del %place%\BackUpTemp\*.rar
set a_opt=a -r -agDD-MM-YY -dh -esh -INUL -m0 -ri10:10 -Y -cfg- -ep2
set a_files=@%place%\in_rar.txt
set a_not=-x@%place%\except_rar.txt
set a_out=%place%\BackUpTemp\backup_
set a_log=%place%\backup.log
"C:\Program Files\WinRAR\WinRAR.exe" -ibck %a_opt% %a_not% %a_out% %a_files% >%a_log%
ftp -s:ftp_param.txt -i >%a_log%
del %place%\BackUpTemp\*.rar \y
exit
Остальные конфиги из папки backups_main при необходимости корректируются индивидуально для каждой клиентской машины.
Пример листинга файла «except_rar.txt» (что не включать в бекап):
*~*.*
*.~*
*.tmp
*.bak
*копия*.doc
"E:\Work\Архив"
Пример листинга файла «ftp_param.txt» (настройка FTP, 192.168.0.23 – адрес FTP-сервера в локальной сети):
open 192.168.0.23
login
password
lcd F:\Install\backups_main\BackUpTemp
mput *.*
quit
Пример листинга файла «in_rar.txt» (что бекапим):
E:\Work
Загрузка клиентской системы регулируется ключами RARа “-m”(сжатие, я ставлю «0» для снижения загрузки ПК) и “-ri” (приоритет процесса и пауза после каждого файла – эти значения я подбирал экспериментально).
Загрузка сети регулируется средствами FTP-сервера, он позволяет задавать количество разрешенных потоков для каждого клиента.
2. Удаление старых бекапов
На внешнем винте создана папка для всех бекапов: «FTPFolders»
Для каждого пользователя заведена отдельная подпапка, куда валятся именные бекапы. В каждой из них есть еще одна вложенная для старых копий.
Например, есть пользователь-папка FTPFolders\anastasia (сюда идет заливка по FTP), в которой лежит подпапка anastasia_old (сюда перемещаются старые бекапы, которые потом удаляются).
Раз в месяц тем же планировщиком уже на моей машине (FTP-сервере) тихо стартует такой батник:
IF EXIST J:\FTPFolders\anastasia\*.rar del J:\FTPFolders\anastasia\anastasia_old \*.rar
Echo т.е. если архивы есть в папке, куда заливаются бекапы по FTP, то удалить все в папке для старых бекапов.
IF EXIST J:\FTPFolders\anastasia\*.rar move J:\FTPFolders\anastasia\*.rar J:\FTPFolders\anastasia\anastasia_old
Echo . а затем переместить все из папки для заливки в папку для старых версий, где оно будет храниться месяц до следующего запуска этого батника.
(Данные строки в батнике повторяются 6 раз для всех пользователей и их папок.
Так как бекап делается раз в неделю, то глубина хранения – 4 бекапа.)
Проверка на наличие чего-либо в папке, куда заливаются бекапы по FTP, нужна для того, чтобы избежать удаления старых бекапов, если новые по какой-то причине не создавались (например, человек болел, был в отъезде, длительные выходные и т.д. и комп не включали).
Tips&Tricks
- Если любые пути к файлам, которые описываются в батниках, содержат пробелы, то такие пути неплохо брать в кавычки для избежания возможных проблем.
- Задания для Планировщика лучше формировать под админской учеткой, точно не будет проблем с доступом к файлам, кроме того в таком случае весь процесс бекапа будет полностью невидим для пользователя (даже в трее), штатно работающем под неадмином, только в процессах появится WinRAR.
- Необходимо отключить чертов виндовый файервол, если это еще не сделано. Может молча резать ftp-коннекты. Ну и настроить сторонние файерволы соответсвующим образом – это ясно.
Недостатки данного решения, несущественные для меня, но имеющие место:
- Открытая передача логина/пароля по FTP.
Можно было повозиться и придумать что-нибудь более секьюрное с ssh или SFTP, но я посчитал это избыточным и усложнящим, достаточно того, что FTP-хранилище не расшарено по сети и имеет парольный доступ для каждого пользователя. Слово «сниффер» в этом коллективе знаю только я, да и сервер не "боевой", а локальный. - Отсутствие инкрементальных бекапов.
Такую задачу я не ставил, хотя это возможно с помощью отслеживания атрибута «архивный» для каждого файла и манипуляций с ним, возможности у WinRAR-а для этого есть. - Платность WinRAR.
Да, я в курсе, что есть бесплатный вариант 7ZIP. Но он, насколько я знаю, не позволит сделать все то, что я соорудил с помощью WinRAR, да и стоимость этого архиватора не так уж и велика. А можно без проблем и кряк найти, если религия позволяет. - Нецентрализованное логирование ошибок.
Логи хранятся на локальных машинах и изменение их содержания в случае ошибок никак не сигнализируется. Тут даже не вижу способов решения, но и особой необходимости тоже, не ставил цели уведомления по мылу или еще как.
Ошибки в процессе заливки на FTP-сервер я могу видеть и на своей машине в логах сервера. - Необходимость постоянного включения компа, на котором FTP-сервер.
Лично для меня это не проблема, он и так все рабочее время включен. Если заболею или уеду (это бывает редко) – прошу просто утром включать мой комп.
Выводы
1) Система работает уже полгода, сбоев не было. Простота настройки достигнута за счет использования нескольких внешних файлов-конфигов. Этого можно было бы избежать и все описать в батнике, но такой подход мне кажется нагляднее.
2) Некоторое время спустя после реализации и запуска наткнулся на продвинутую но условно-бесплатную надстройку над WinRAR-ом, которая делает из него полнофункциональную и самодостаточную бекап-систему с планировщиком, работой по FTP, записью на диски, отправкой по e-mail, удалением старых архивов, поддержкой русского языка и т.д.: Acritum One-click BackUp for WinRAR. Быть может, кому-то будет интересно. Опять таки, если ваша религия не против - можно найти "таблетку".
3) Я не претендую на оригинальность/уникальность решения, на Компьютерре неплохая статья есть, которую я частично использовал. Хотел лишь в очередной раз (спасибо, Кэп) обратить ваше внимание на то, что не всегда есть необходимость устанавливать нечто специализированное, порой штатных/почти штатных средств вполне достаточно. Простота - залог надежности.
Читайте также: