Резервное копирование (бэкап) данных

2 комментария
По роду занятий, мне периодически приходится сталкиваться с резервным копированием (и восстановлением) различных данных. Многие программные инструменты (например СУБД) имеют собственные механизмы создания бэкапов, но зачастую они ограничены и не достаточно гибкие.

На текущий момент для резервного копирования данных (именно данных приложений, а не виртуальных машин или контейнеров) я остановился на программе Duplicati.

Данная программа начиналась как GUI для другого ПО с схожим названием Duplicity, но позже выросла в самостоятельный проект.

На текущий момент к релизу готовиться версия 2.0, разработка версии 1.X прекращена. Итак, что умеет Duplicati:
  • Кроссплатформенность - программа написана на Mono (OpenSource вариант .Net), работает на MS Windows, GNU/Linux, OS X операционных системах.
  • Поддержка множества хранилищ данных. Бэкапить можно на FTP, WebDAV, SSH (SFTP), Amazon S3, Cloudfiles, 1&1 SmartDrive, BACKUP.ACtion, box.net, box.com, CloudSafe, DriveOnWeb, Google Drive (Gdrive), ownCloud, SkyDrive (OneDrive), TahoeLAFS и многие другие.
  • Поддержка шифрования AES-256 для резервных копий (актуально для хранения бэкапов у внешних провайдеров).
  • Встроенных планировщик, для создания резервных копий по расписанию.
  • Поддержка резервного копирования открытых файлов для ОС MS Windows (Volume Snapshot Service - теневое копирование тома) и ОС GNU/Linux благодаря технологии LVM.
  • Рассылка уведомлений о результатах резервного копирования (настраивается как глобально для приложения, так и локально для задания).
  • Восстановление на чистую систему.
  • Выполнение различных скриптов до/после резервного копирования и много другое.
К финальному выпуску версии 2.0 разработчик планирует следующие возможности:
  • Поддержку метаданных (отметок времени и наборы прав).
  • Установщик для различных операционных систем (пока ПО распространяется упакованным в zip-архив без какого-либо установщика).
  • Запуск приложения как службу/демон/сервис. В принципе сторонними средствами можно реализовать и сейчас.
Итак, приступаем к установке и настройки. В качестве примера я выбрал ОС Windows. Для начала на целевой ОС должен быть установлен .Net Framework либо Mono. Скачиваем программу. Полученный архив распакуем в Program Files. Для запуска в качестве службы воспользуемся утилитой srvany.exe из пакета Windows Server 2003 Resource Kit Tools:
  1. Утилиту srvany.exe разместим в каталоге с Duplicati (c:\Program Files\duplicati)
  2. В командной строке (cmd) с правами Администратора выпоним следующую команду
    sc create duplicatiserv  binpath= "C:\Program Files\duplicati\srvany.exe" DisplayName= "Duplicati" start= auto (пробел после каждого "=" обязателен, иначе sc будет завершаться с ошибкой и не создаст нужную службу)
  3. В редакторе реестра откроем ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\duplicati\ и создадим новый раздел Parameters
  4. В разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\duplicati\ Parameters создадим новый ключ строкового типа со значением содержащим путь к исполняемому файлу Duplicati ("c:\Program Files\duplicati\Duplicati.Service.exe")
Теперь мы можем запускать Duplicati как службу. При таком подходе, созданная служба будет работать под системной учетной записью. Можно в свойствах службы указать запуск от другого пользователя, но при этом не стоит забывать, что у данного пользователя должны быть права на чтение файлов для которых создается резервная копия,  права на создание теневых копий для резервного копирования открытых файлов (файлы СУБД, архива Аутлука и прочее), права на доступ к сети - в случае когда резервные копии хранятся на удаленных серверах.

Осталось самое простое - добавить данные для архивации и проверить как работает архивация/восстановление данных.

В качестве сервера хранения резервных копий я использую собственный WebDAV сервер (как его настроить). Шифрование в моем случае не используется, зато обязательно используются теневые копии, которые в Duplicati не будут работать без установки Microsoft Visual C++ 2010 Redistributable

Открываем браузер  по адресу 127.0.0.1:8200 (в случае с настройками по умолчанию доступно только на с локалхоста) и попадаем в интерфейс управления:

Как я говорил ранее, список целей назначения (мест для хранения резервных копий) достаточно обширный. После создания строки подключения, не забываем пользоваться кнопкой "Test connection" для проверки правильности введенных данных и возможности подключения к серверу.

Для существующих задач на резервное копирование доступно множество операций - начиная от немедленного ручного (не по расписанию) запуска резервного копирования, заканчивая восстановлением в данных.

 Для сервера также доступны опции, например пауза планировщика на указанный период времени, импорт/экспорт заданий на бэкап.

Как видно для существующего бэкапа формируется простая и понятная строка подключения:

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

К сожалению, расписание можно добавить только одно, но это обходится созданием множеством задний.

В опциях резервной копии можно указать размер блока данных хранящихся одним куском, количество хранящихся резервных копий и самое главное - опцией --snapshot-policy создание теневых копий для бэкапа заблокированных данных; также в опция можно настроить рассылку уведомлений по email, запуск скриптов и приложений перед/после бэкапа и многое другое.

Восстановление из бэкапа на другую машину практически ни чем не отличается от создания нового задания на копирование:

После успешного выполнения задания подключаемся на сервер с резервными копиями и наблюдаем их наличие:

Процесс восстановления прост и понятен:
Из меню выбираем пункт "Restore". Дальше выбираем дату, на которую необходимо восстановить данные:

Чекбоксами отмечаем необходимые данные для восстановления и нажимаем "Next"
В случае восстановления данных на оригинальное место не забываем, что бы у пользователя под которым запущен Duplicati были права на запись в необходимый каталог. При этом данные восстановятся от имени того пользователя под которым выполняется служба Duplicat, поэтому по рукой не плохо бы держать скрипт сбрасывающий права и записи до нужного уровня (или подождать версии Duplicati  в которой все будет работать, судя по последним коммитам в гитхабе - процесс активно движется в сторону финиша):

В случае же восстановления в произвольный каталог особенности также имеют силу:

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

Примечание: проект Duplicati развивается по модели с открытым исходным кодом, поэтому если у вас есть пожелания по расширению функционала - всегда можно отправить запрос или самому дописать и отправить автору. Или просто пожертвовать денег на развитие.

2 комментария :

  1. В разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\duplicati\ Parameters создадим новый ключ строкового типа со значением содержащим путь к исполняемому файлу Duplicati ("c:\Program Files\duplicati\Duplicati.Service.exe")
    Какое имя у ключа?

    ОтветитьУдалить