День добрый комрады. Спустя некоторое время, как я устроился системным администратором, я стал сталкиваться с такой бедой задачей:

Специфичный юзкейс, решаемый в данной статье


Подходит сотрудник с просьбой восстановить файл который вчера/сегодня/только-что удалили, а сейчас он кровь-из-носу понадобился. При этом дату создания файла он не помнит, а дату последнего изменения и знать не знает, ибо с файлом в разное время могли работать множество разных сотрудников. И восстановить нужно, разумеется, последнюю версию.
Либо файл вчера/сегодня/только-что случайно и фатально отредактировали/перезаписали. И восстановить нужно, соответственно, предпоследнюю версию.

Итак, исходные данные:
  • Имя файла и его адрес: известны хотя бы примерно
  • Дата создания искомой версии файла: не известна
  • Бэкап ежедневный, инкрементальный или равный ему по ресурсоёмкости. Полный и разностный не используются ввиду ограниченности объёмов дискового пространства в хранилище/приемнике бэкапов.

Статья вышла слишком «водяная», так что я спрятал основную воду под спойлеры.

Из-за специфики этого юзкейса восстанавливать файл на дату полного бэкапа (если он не ежедневный, а еженедельный/ежемесячный) не имеет смысла, ибо версия будет скорее всего не актуальной. А из инкрементального — затруднительно, ибо дата создания нужной версии файла и соответствующего инкрементального бэкапа не известна.
Разностный бэкап мог бы решить проблему, но он слишком ресурсоёмкий, и далеко не все могут его себе позволить.
Попытка использования штатного средства резервного копирования/восстановления в Windows server
Этот чудесный интерфейсНо благо мой предшественник побеспокоился о настройке бэкапов на файловом сервере (Windows Server 2003)

Ничтоже сумняшеся я открываю Программа архивации > Восстановление и управление носителем и выпадаю в осадок. Каждая точка бэкапа хранится как отдельная ветвь дерева. При этом бэкап инкрементальный, а значит в каждой отдельной точке лишь новые и изменённые файлы!

И полезли мы с сотрудником перебирать каждую точку начиная со вчерашней и назад. В первый раз нам потребовалось пол дня. В следующий раз почти день. после 3-го раза, я понял что так продолжаться больше не может.


Практически все существующие системы предлагают несколько вариантов бэкапа из списка:
  1. Полный — создание точек бэкапа с полной копией всех файлов источника
  2. Инкриментальный — создание точек бэкапа с копией всех файлов, которые появились/изменились за время прошедшее с создания предыдущей точки
  3. Разностный — создание точек бэкапа с копией всех файлов которые появились/изменились за время прошедшее с создания предыдущей точки полного бэкапа
  4. Зеркальный — создание и последующая перезапись единственной точки полного бэкапа. Файлы удалённые из в источника, во время бэкапа удаляются из приемника
Другие продукты
И начались мои длительные поиски средства, позволяющего взглянуть на папку в том виде, в каком она была несколько дней назад.

И то ли я смотрел не туда, то ли гугл не понимал чего я хочу. Но я раз за разом натыкался на средства позволяющие лишь восстановить бекап из полной копии и рекурсивно дополнить инкрементальными. Отказаться же от инкрементальных точек в пользу только полных или разностных я не мог из-за ограниченности объёмов приемника бэкапов. И не сказать, что все эти альтернативные средства были для меня бесполезны. Наоборот, я рад тем своим поискам, за такой чудесный продукт как Cobian Backup, которым я пользуюсь до сих пор. Но мой юзкейс они не покрывали.
LightBackup
Позже я нашёл Light Backup — миниатюрная программка, которая делает в точности то, что я и искал — позволяет взглянуть на папку на время создания как полного, так и инкриментального бэкапа.
Правда к этому времени я уже решил свою проблему при помощи BTsync на не-windows сервере, а эта программа работает только под windows.
Но просто пройти мимо я не мог и использую её для некоторых специфичных задач.


Bittorent Sync

NAS
QNAP NAS TS-221Время шло. В организации появился, а затем остался без дела NAS от QNAP.
И как заявляет производитель: «Работать с TS-221 исключительно просто – достаточно лишь щелкать по нужным иконкам!» Что, кстати, не так далеко от истины. Со временем я нащёлкал таким образом Bittorent Sync ещё 1-ой версии
Благо QNAP позаботились обо мне, написав подробную инструкцию по настройке. Правда я не могу сказать что без неё настройка была бы проблемой.
BTSync, как средство синхронизации файлов нежели резервного копирования, всё же может выступать и в этой роли. Правда реализуется лишь 1 из 4-х описанных выше вариантов — Зеркальный бэкап. Но с одной принципиально важной особенностью: он умеет сохранять удалённые или предшествующие версии изменённых фалов в течении заданного периода времени.

«Роль» системы резервного копирования основывается на следующих функциях/настройках:
  • Клиент BTSync должен быть установлен как на источнике так и на приемнике. Это не проблема, ввиду кросплатформенности
    * Вообще-то, источником может выступать сетевая папка, так что клиент может быть установлен на другом ПК
    ** БД (включая настройки) BTSync вроде как хранит отдельно от бинарников, в папке пользователя. Так что теоретически можно запустить 2 независимых интстанса. И сделать источником и приёмником 1 машину
  • Резервируемые папки должны синхронизироваться на приемник в режиме READ-ONLY.
    Вы ведь не хотите, что бы изменения синхронизировались и в обратную сторону?
    * Имейте ввиду, что удалённые/изменённые в приемнике файлы больше не будут синхронизироваться, если не поставить галку «Перезаписать любые изменённые файлы». С одной стороны это позволяет аккуратно убирать ненужные для синхронизации файлы, а с другой представляет опасность содержания не-целостных копий. Советую ограничить права на запись/изменение в каталоге приемника для всех кроме пользователя из-под чьего имени работает BTSync.
  • На приемнике, в параметрах синхронизируемых папок, должен быть включён режим Сохранять удалённые файлы в архиве.
    В режиме расширенной настройки, параметр sync_trash_ttl определяет количество дней (макс 30) для хранения файлов в папке архива.
  • «Расписание» работы в функционал BTSync не входит. Но решается запуском и остановкой приложения через сторонний планировщик (cron и т.п.)
    К сожалению, это не позволяет останавливать синхронизацию по логическому завершению, ибо у синхронизации нет как-такового логического завершения. Но меня устраивает режим запуска BTSync в 18:30 и его принудительного завершения в 7:00. За это время источник и приемнике всегда успевают полностью синхронизироваться.



Теперь та же самая просьба сотрудника решается на порядки проще и быстрее. Я просто захожу в приемник в котором структура файлов/папок соответствует вчерашнему (18:30+) состоянию источника. Если же файл был удалён/изменён ранее (в пределах 30 дней) — в путь архива достаточно подставить ".sync\Archive\" и файлы (а так же их версии) тут как тут.

Недостатки такого подхода


  • Нагрузка на CPU — индексация безбожно жрёт CPU при количестве файлов исчисляемом сотнями тысяч. Из-за чего у серверов случается тахикардия. Лично меня это не смущает. Файловый сервер ночью и так простаивает, а бэкап сервер только эту задачу и выполняет, так что ничему не мешает. А бэкапить таким образом ресурс с количеством файлов в несколько миллионов, я даже и пытаться не стал.
  • Отсутствие оффлайн-настройки — казалось бы, чрезвычайно юзерфрендли интерфейс должен упрощать настройку до невозможности (так оно и есть). Но сама настройка, может осуществляться только при запущенном btsync приложении (вспоминаем про CPU). Эта проблема частично обходится выключением синхронизации на стороне приемника, и другими костылями… Но я просто не занимаюсь настройкой бэкапов в рабочее время, предпочитая для работы с серверами смещать рабочий день или переносить его на выходной.


А теперь достоинства


  • Скорость — думаю скорость BitTorent протокола ни для кого не секрет. У меня нету точных данных, но могу сказать лишь, что попыткам реализовать бэкап через smb|ftp ночи никогда не хватало
  • Кросплатформенность — впихнуть можно где угодно и куда угодно. Судя по вики:
    Операционная система: Windows, Linux, OS X, Android, iOS, Windows Phone, FreeBSD и Amazon Kindle Fire
    Аппаратная платформа: x86-64, x86 и ARM
    Языки интерфейса: английский, немецкий, французский, русский, китайский, корейский, японский, испанский, нидерландский, итальянский, бразильский вариант португальского, португальский и турецкий
  • Расширяемость/конфигурируемость — благодаря mesh-подходу, приемников и источников может быть несколько. Они могут находиться за NAT. Их можно дублировать и т.д. При этом настройка практически не увеличивает свою сложность с ростом графа источников/приемников. А значит, можно в пару кликов мышкой включить в конфигурацию приёмник вне вашего офиса/ЦОДа, обезопасив себя от нападения инопланетян пожаров и т.п.
  • Простота обслуживания — бэкап на стороне приёмника — это точно такая же папка, как и на стороне источника. И ходить в неё можно любым удобным вам методом. Это реально упрощает восстановление отдельных файлов.
  • Безопасность — все соединения зашифрованы-перешифрованы. У BitTorent пунктик на эту тему.
Поделиться с друзьями
-->

Комментарии (25)


  1. heathen
    27.06.2016 08:00
    +1

    А чем shadow copy не устроило плюсом к оффлайновому бэкапу?


    1. titulusdesiderio
      27.06.2016 08:13

      Первая реализация этого бэкапа была сделана на Windows Server 2003. А сейчас бы меня устроил. Но есть минус — платформо-зависимость.


      1. Jump
        27.06.2016 11:25

        А в чем проблема с теневым копированием на Windows Server 2003?


        1. titulusdesiderio
          27.06.2016 11:27

          Сам по себе механизм shadow copy не является средством резервного копирования. Просто на базе него сделано штатное средство в 2012 сервере.


          1. stygian
            27.06.2016 14:24

            Простите, но Ваш юзкейс решается теневыми копиями начиная с win 2003


          1. Jump
            27.06.2016 14:42

            Разумеется средством резервного копирования shadow copy не является. Это средство снятия снимков файловой системы.
            Вам по описанию задачи нужно не резервное копирование, а версионирование, и это отлично решается именно теневыми копиями — делаете теневые копии с нужной частотой. Хоть по три раза в день. Незаметно для пользователя, и практически без нагрузки на сервер.
            И хранятся только изменения, и доступ к версиям файлов намного более удобный — просто открываете папку на нужную дату.
            А резервное копирование в win server использует механизм теневого копирования уже 15лет.


  1. chelaxe
    27.06.2016 08:00
    +3

    Пользуюсь для этого Syncthing`ом.


    1. titulusdesiderio
      27.06.2016 08:08

      В свое время тоже на него наткнулся. Но не было поддержки на моем nas.


      1. Revertis
        27.06.2016 09:53
        +1

        Я перешёл на Syncthing после того, как несколько раз не мог избавиться от странного поведения BTSync — разные клиенты показывали разное количество файлов в папке. Несколько раз переустанавливал клиенты (Linux, Windows и Android) — ситуация не менялась. А Syncthing отлично синхронизирует мои 35гб уже почти год, и никаких проблем.


        1. ForestQ
          27.06.2016 15:03
          -1

          Тоже перешел на Syncthing после того, как btsync начал игры с урезанием бесплатной версии. Но Syncthing намного больше жрёт проц/диск при сканировании ;( Благо проект развивается и жду чуда.


          1. Revertis
            27.06.2016 16:12

            Может запилить им issue, чтобы они добавили хотя бы sleep(100) после хэширования каждого файла? :)


    1. Ca5per
      27.06.2016 10:33
      +1

      Существует еще одна opensource альтернатива — Librevault. Возможно кому-то придется по вкусу.


    1. jok40
      27.06.2016 20:52

      Поставил сейчас на свой забугорный сервер Syncthing — чтобы сравнить скорость с BTsync. Похоже он, как и BTsync, не умеет синхронизировать в несколько потоков: тащит по одному файлу в один поток и, в результате, скорость точно такая-же как у BTsync. Или может надо что-то где-то поднастроить?


  1. Bce_npocTo
    27.06.2016 10:33

    Можете сказать рассматривали ли rsync в качестве альтернативы? И если рассматривали, то почему отказались в пользу btsync


    1. titulusdesiderio
      27.06.2016 10:34

      Рассматривал. Но он не позволяет сохранять предыдущие версии файлов


      1. encyclopedist
        27.06.2016 10:58

        Есть же rdiff-backup


      1. alex_shpak
        27.06.2016 11:04
        +1

        rsync --link-dest сохраняет снапшоты на определенное время, так что если пользователь помнит время, в которое файл существовал в нужном ему виде, то его легко достать. Список "все предыдущие версии этого файла", правда, так просто не получить.


        rsync --backup-dir копирует предыдущие версии файлов перед их удалением/изменением в другую папку, но чистить её надо как-то по-другому.


  1. jok40
    27.06.2016 10:57

    Скорость — думаю скорость BitTorent протокола ни для кого не секрет.
    К сожалению, BTSync в данном случае использует всего один поток, так что особых скоростей тут ожидать не приходится. Может оно, конечно, быстрее работает, чем SMB/FTP, но тем не менее канал используется далеко не на всю катушку.


    1. Paramount
      27.06.2016 14:25

      Кстати robocopy умеет многопоточно слать данные и всё это встроено, в качестве зеркала шикарно делает свою работу, гигабитный интерфейс забивал полностью. И это при штатной работе системе видеонаблюдения в это же время. Работает когда запустишь а не когда вздумается.


  1. hamnsk
    27.06.2016 11:29

    отказались от такого решения, уж больно не стабильно, медленно и тд…
    как альтернатива syncthing


    1. titulusdesiderio
      27.06.2016 11:31

      У меня несколько лет полет нормальный. Разумеется наши взгляды сугубо субъективны.


  1. ITMatika
    27.06.2016 11:49

    Сам использую BTSync в различных задачах.
    Если нужно синхронизовать бэкапы в течение нескольких дней, то вполне годное решение.
    Но когда есть изменяемые версии файла, или синхронизация должна гарантированно отработать за несколько минут, то от BTSync пока лучше отказаться.


  1. Jump
    27.06.2016 12:52
    +2

    BTSync отличный инструмент, и я его постоянно использую для синхронизации.
    Но вот для организации бэкапов и версионирования использовать его, думаю не лучшая идея.
    Во первых он достаточно тяжелый при индексации, а если применять его по схеме — включил, выключил, это вообще дикая нагрузка на сервер. Если уж пользоваться им, то он должен работать всегда, чтобы не было бессмысленной переиндексации.

    Версионирование у него сделано не лучшим образом — при изменении файла, предыдущая версия банально копируется в архив. Копируется полностью. Сто раз изменил файл размером 100мб на один байт — получи 10гб архива.
    Особенно если учесть тот факт, что в систему встроен штатный механизм версионирования — теневые копии.
    Работает он начиная с Windows XP и server 2013 — хранятся только изменения, быстрый доступ к любой копии.
    И никакой нагрузки на сервер и проблем с битыми файлами — перед теневым копированием сбрасываются кэши записи, и происходит оно мгновенно.

    По поводу платформозависимости — на других платформах есть не менее хорошие инструменты для этих целей.

    А в данном случае это больше похоже на забивание гвоздей микроскопом, при наличии молотка под рукой.


  1. Ivan_83
    27.06.2016 13:24
    +4

    Я просто фигею от: «Безопасность — все соединения зашифрованы-перешифрованы. У BitTorent пунктик на эту тему.»
    Не приходило в голову что это защита от пользователя?
    При закрытых исходниках и работе с сетью эта штука запросто может сливать все данные хозяевам софтины, а учитывая шифрование никто кроме них не узнает этого.


  1. ForestQ
    27.06.2016 15:07

    Вообще Shadow Copy встроенный в WinServer более чем решает проблему топикстартера, причем сам юзер может нажать на файле правой кнопкой мыши, Свойства и самому скачать все версии файла.