Бекап Windows-ПК средствами WinRAR и FTP

    Привет, хабровчане.

    В последнее время на Хабре было несколько статей, иллюстрирующих различные способы бекапов данных. (Например, раз, два.)

    Тема всегда актуальная и способов ее решения так же много, как и требований к такой системе, у каждого они свои. Есть много достойных сторонних продуктов, как платных так и бесплатных, но некоторые пытаются сделать что-то свое штатными или почти штатными средствами. Я отношусь к таким энтузиастам. Попробовав различные готовые решения, решил попытаться использовать то, что есть под руками.

    Под руками оказался внешний винт на 500 Гб, протокол FTP и WinRAR. Также имеется небольшой офис с 6-ю ПК под управлением WinXP, данные с которых неплохо бы периодически сливать во внешнее хранилище.


    Так как создание бекапов – моя личная инициатива и никто такую задачу передо мной не ставил, то требования я придумывал тоже сам исходя из здравого смысла и понимания того, что отдельный файловый сервер с RAID-винтами руководство не профинансирует.

    Система должна:


    • Еженедельно бекапить определенные папки с каждой машины на мою, куда прикручен внешний винт.
    • Уметь копировать открытые файлы.
    • Уметь пропускать ненужные файлы или папки как по маске, так и явно заданные.
    • Не выводить на экран клиентской машины никаких сообщений или окон (пользователи ПК у меня в компании не продвинутые, в возрасте, лишнее крики «А-а-а, что это у меня вылезло?» ни к чему).
    • Иметь гибкую возможность настройки загрузки клиентской системы (дольше работаем, но медленнее <-> быстро, но ПК практически не отвечает). Связано требование с тем, что компы довольно старые и все разные.
    • Иметь гибкую возможность настройки загрузки сети.
    • Писать лог при наличии ошибок при создании бекапа.
    • Дописывать к именам создаваемых бекапов текущую дату.
    • Так как винт не бесконечный – через определенный период времени убивать старые бекапы.
    • Быть по возможности простой, наглядной и легкой в настройке.

    Реализация


    На свою машину я поставил и настроил бесплатный FTP-сервер FileZilla Server.

    Для периодичности задачи под виндой проще всего использовать Планировщик, который будет запускать на каждой клиентской машине батник, реализующий основные функции.

    1. Формирование новых бекапов и их заливка

    На каждой клиентской машине создана папка «backups_main», содержащая подпапку BackUpTemp для временного хранения бекапа перед заливкой по FTP и файлы-конфиги:
    1. backup.bat – реализует сам бекап на клиентской машине
    2. in_rar.txt – что включать в бекап
    3. except_rar.txt – что не включать в бекап
    4. ftp_param.txt – параметры FTP-соединения
    5. backup.log – создается сам при ошибках

    По заданному в Планировщике расписанию (для каждой машины – свой день недели) запускается backup.bat, который выглядит так:
    @echo off
    rem Задача: заархивировать все файлы лежащие по пути, указанному в файле in_rar.txt, положить в подпапку BackUpTemp , за исключением файлов и или папок, маски или названия которых указаны в файле except_rar.txt. Приоритет процесса низкий, архивация фоновая, ошибки на экран не выводить, а писать в лог backup.log. Залить результат на FTP с параметрами, указанными в файле ftp_param.txt, временный архив удалить.

    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 - Команда A - добавить в архив
    rem - Ключ -R - обрабатывать вложенные папки
    rem - Ключ -AG[формат] - добавить к имени архива текущие дату и время
    rem - Ключ -DH - открывать совместно используемые файлы
    rem - Ключ -E[+]<атрибут> - задать исключение и включение файлов в обработку по маске атрибутов ( Не упаковывать файлы с атрибутами "системный" и "скрытый": WinRAR a -esh файлы)
    rem - Ключ -INUL - не выводить сообщения об ошибках
    rem - Ключ -M - выбрать метод сжатия (-m0: Без сжатия, -m5: Наилучший метод сжатия (самое лучшее, но самое медленное сжатие)
    rem - Ключ -RI[:] - установить приоритет процесса и время простоя.
    rem - Ключ -Y - подразумевать ответ "Да" на все запросы
    rem - Ключ -CFG- - игнорировать профиль по умолчанию и переменную окружения
    rem - Ключ -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


    1. Если любые пути к файлам, которые описываются в батниках, содержат пробелы, то такие пути неплохо брать в кавычки для избежания возможных проблем.
    2. Задания для Планировщика лучше формировать под админской учеткой, точно не будет проблем с доступом к файлам, кроме того в таком случае весь процесс бекапа будет полностью невидим для пользователя (даже в трее), штатно работающем под неадмином, только в процессах появится WinRAR.
    3. Необходимо отключить чертов виндовый файервол, если это еще не сделано. Может молча резать ftp-коннекты. Ну и настроить сторонние файерволы соответсвующим образом – это ясно.

    Недостатки данного решения, несущественные для меня, но имеющие место:


    1. Открытая передача логина/пароля по FTP.
      Можно было повозиться и придумать что-нибудь более секьюрное с ssh или SFTP, но я посчитал это избыточным и усложнящим, достаточно того, что FTP-хранилище не расшарено по сети и имеет парольный доступ для каждого пользователя. Слово «сниффер» в этом коллективе знаю только я, да и сервер не "боевой", а локальный.
    2. Отсутствие инкрементальных бекапов.
      Такую задачу я не ставил, хотя это возможно с помощью отслеживания атрибута «архивный» для каждого файла и манипуляций с ним, возможности у WinRAR-а для этого есть.
    3. Платность WinRAR.
      Да, я в курсе, что есть бесплатный вариант 7ZIP. Но он, насколько я знаю, не позволит сделать все то, что я соорудил с помощью WinRAR, да и стоимость этого архиватора не так уж и велика. А можно без проблем и кряк найти, если религия позволяет.
    4. Нецентрализованное логирование ошибок.
      Логи хранятся на локальных машинах и изменение их содержания в случае ошибок никак не сигнализируется. Тут даже не вижу способов решения, но и особой необходимости тоже, не ставил цели уведомления по мылу или еще как.
      Ошибки в процессе заливки на FTP-сервер я могу видеть и на своей машине в логах сервера.
    5. Необходимость постоянного включения компа, на котором FTP-сервер.
      Лично для меня это не проблема, он и так все рабочее время включен. Если заболею или уеду (это бывает редко) – прошу просто утром включать мой комп.


    Выводы


    1) Система работает уже полгода, сбоев не было. Простота настройки достигнута за счет использования нескольких внешних файлов-конфигов. Этого можно было бы избежать и все описать в батнике, но такой подход мне кажется нагляднее.

    2) Некоторое время спустя после реализации и запуска наткнулся на продвинутую но условно-бесплатную надстройку над WinRAR-ом, которая делает из него полнофункциональную и самодостаточную бекап-систему с планировщиком, работой по FTP, записью на диски, отправкой по e-mail, удалением старых архивов, поддержкой русского языка и т.д.: Acritum One-click BackUp for WinRAR. Быть может, кому-то будет интересно. Опять таки, если ваша религия не против - можно найти "таблетку".

    3) Я не претендую на оригинальность/уникальность решения, на Компьютерре неплохая статья есть, которую я частично использовал. Хотел лишь в очередной раз (спасибо, Кэп) обратить ваше внимание на то, что не всегда есть необходимость устанавливать нечто специализированное, порой штатных/почти штатных средств вполне достаточно. Простота - залог надежности.

    Метки:
    Поделиться публикацией
    Похожие публикации
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 21
    • НЛО прилетело и опубликовало эту надпись здесь
      • +1
        Я специально написал, что не претендую на открытие Америки. Ключи к рару можно прочесть в справке, остальное тоже допридумать.
        Но вы готовы запустить подобное описанному хотя бы за 20 минут, никуда не заглядывая? Цель статьи — сэкономить время тем, кто захочет поиграться в эту сторону.
        А установить винду, никуда не заглядывая, может любой школьник, сделав десятка полтора ленивых кликов «Да».
        • НЛО прилетело и опубликовало эту надпись здесь
          • 0
            Не вижу смысла спорить, вы имеете право на мнение. Замечу только, что умные люди не брезгуют использовать чужой опыт, применяя его под свои нужды, а воодушевленные, вроде вас, каждую шишку сами предпочитают набить и времени потратить в разы больше. Кстати, справку по языкам программирования тоже не отменяли. Если нужно будет операционку поставить — сами напишете? Воля ваша.
            • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        осталось поправить шрифты в статье :) А кстате почему используете WinRar.exe, а не его консольную версию rar.exe?
        А мы в роли архиватора используем 7zip, ибо бесплатен :)
        • 0
          WinRar позволяет увидеть при необходимости процесс и процент его завершенности. А все описанные ключи и для него актуальны.
        • +2
          Статья не ценная, а полезная. Полезна прежде всего тем, что автор что-то делает сам и предоставляет возможности для настройки, а не берет готовый дистрибутив. Человек старается сделать что-то самостоятельно и полезное.

          Я сам раньше, когда это было необходимо, делал что-то похожее для себя. Очень удобно было.
          Rar вообще очень интересная и удобная вещь для подобных задач.

          Статья построена правильно, читать интересно.
          Спасибо.
        • 0
          > Открытая передача логина/пароля по FTP.
          Не стоит забывать и про открытое хранение пары логин-пароль в ftp_param.txt, а ведь можно было просто дать write-only доступ записи анонима.

          > rem зальем полученный архив на FTP
          А если архив не будет создан из-за какой-либо ошибки? Надо бы проверять errorlevel.
          • 0
            >Не стоит забывать и про открытое хранение пары логин-пароль в ftp_param.txt

            Верно, но я уже писал — в локальной сети просто некому ломать учетки, снифить пароли и т.д. Да сверхсекретная инфа не передается, обычная рабочая текучка.

            >А если архив не будет создан из-за какой-либо ошибки? Надо бы проверять errorlevel.
            Если не будет создан — просто ничего не зальется, батник закроется. По-хорошему, конечно, обработка ошибок нужна, но я не увидел насущной необходимости в моей ситуации.
          • 0
            В бэкапе винды архиватором есть одно весомое «НО» — реестр. Бэкапить реестр экспортом в reg или hiv — сомнительный вариант. Поэтому для горячего бэкапа реестра остаются встроенный виндовый недобэкап (через теневое копирование тома) или платные стредства типа акрониса (съём заблокированных файлов через драйвер snapman). Такие дела :(
            • 0
              >Бэкапить реестр экспортом в reg или hiv — сомнительный вариант.
              Отчего же? Бывают проблемы при восстановлении?

              А Акронис таки да, в своем классе вне конкуренции, мне кажется.
              • НЛО прилетело и опубликовало эту надпись здесь
                • 0
                  Предлагаю вам написать статью, описывающую такой же функционал, но средствами ntbackup. А возможно и более широкий. Думаю, интересно будет не только мне.
                  • НЛО прилетело и опубликовало эту надпись здесь
                    • 0
                      НОРМАЛЬНЫЕ организации — это какие? Непременно под AD? На иксах? На тонких клиентах? Организации есть разные. И организация сети может быть разная. И не всегда есть возможность (или целесообразность) что-то переделать, нужно исходить из того, что есть.
                      Держать включенным весь зоопарк по ночам только ради того, чтобы одна машина за всю ночь что-то там слила мне смысла нет (бекап с заливкой занимает не больше часа, как правило). Не выключать только одну конкретную каждый раз — это составлять расписание для юзеров, когда кто машину не выключает при уходе или каждый раз последним уходить и контролировать — тоже глупо.
                      Так что спорить-то можно о сферической организации, в которой сеть проектировали при строительстве здания со всеми требованиями СКС, с продуманной архитектурой, расширяемостью да еще и под вашим руководством. Но в реальной жизни бывают и другие ситуации.
                      • НЛО прилетело и опубликовало эту надпись здесь
                        • 0
                          Неужели не очевидно, что можно и микроскопом гвозди забивать, но это нерационально и дороговато? Для крупной конторы (парк в сотни-тысячи машин), которая, скажем, торгует на бирже в реальном времени, и для небольшой организации до десятка машин требования к системе резервирования будут совершенно разные. И тратить килобаксы на перепроектирование сети, новый жирный сервак с кондиционером, бронедверью и джакузи, циски на каждый кабинет и оптоволокно в коридорах не всегда целесообразно. Это если уж мы говорим о реальной жизни. Я намеренно утрирую, потому что вижу, что меня не понимают.
                          Любые деньги нужно тратить с умом. И именно так делают в НОРМАЛЬНЫХ организациях. Если я прихожу к боссу и говорю — мне нужно столько-то денег, он ожидает услышать — они окупятся за вот столько или позволят не потерять в случае чего вот столько. Ну нет у нас такой критичной информации, урон от потери недельной инфы которой на одной машине был бы сопоставим со стоимостью реконструкции.
                          • НЛО прилетело и опубликовало эту надпись здесь
                    • НЛО прилетело и опубликовало эту надпись здесь

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.