Перейти к содержимому

Резервное копирование данных в S3-хранилище на Windows Server

Зачастую требуется где-то разместить резервные копии данных и желательно, чтобы Хранилище было доступным по сети, имело ограниченный безопасный доступ и желательно имело структуру кластера, т.е. должно быть отказоустойчивым. S3 - хранилище имеет неоспоримые плюсы перед хранением бэкапом по ftp, и главный плюс отказоустойчивая структура S3-хранилища.

Инструкция по установке

  1. Установка и настройка на сервере-источнике утилиты rclone.

  2. Создание и настройка скрипта переноса файлов резервного копирования в облачное хранилище S3 с логированием выполненных заданий.

  3. Настройка запуска скрипта в Планировщике заданий Windows

Установка и настрока утилиты rclone

Установка для Windows

Предварительно скомпилированный двоичный файл.

Чтобы установить rclone в операционной системе Windows, скачиваем бесплатную утилиту rclone для Windows и распаковываем ее.

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

  • Откройте этот файл в проводнике и извлеките rclone.exe.

Rclone — это портативный исполняемый файл, поэтому вы можете разместить его в любом удобном месте.

Откройте окно CMD (или powershell) и запустите двоичный файл.

Обратите внимание, что rclone не запускает GUI (графический интерфейс) по умолчанию, он работает в окне командной строки CMD.

  • Запустите rclone.exe config для настройки. Подробнее см. в документации по конфигурации rclone .

При желании можно настроить автоматическое выполнение .

Если вы планируете использовать функцию монтирования rclone , вам также потребуется установить стороннюю утилиту WinFsp .

Менеджер пакетов Windows (Winget)

Winget поставляется с предустановленными последними версиями Windows. Если нет, обновите пакет App Installer из магазина Microsoft.

Чтобы установить rclone

winget install Rclone.Rclone

Чтобы удалить rclone

winget uninstall Rclone.Rclone --force

Конфигурация rclone для Windows

Например мы распокавали утилиту в директорию rclone запустим PowerShell или CMD

Конфигурируем rclone в PowerShell

В командной строке запустим конфигурацию:

C:\rclone\rclone.exe config

Далее производим настройку как в мануле:

Скрипт переноса бэкапа в S3-хранилище

Рассмострим пример, в котором бэкапы создаются для баз 1С в PostgreSQL методом описанным в данной инструкции:

Исходные данные

В данном примере рабочее дерево каталогов будет таким:

  • ДиректорияBAC
    • ДиректорияBackup
      • backup.files // файлы бэкапов для переноса
    • ДиректорияLogback
      • files_data.log //файлы логов
  • run_backup.cmd //скрипт бэкапа
  • rclone-to-net.cmd // создадим файл скрипта для переноса бэкапов

Разбор скрипта

Создаем батник или cmd файл в любимом Вашем текстовом редакторе или блокноте, я писал Notepad++, красиво, удобно с подсветкой.

  1. Установим переменные окружения:
  • сформируем имя файла отчета с присвоением даты создания;
  • укажем куда укладывать лог-файлы;
  • укажем где находится утилита rclone;
  • Укажем директорию источника файлов для переноса;
  • Укажем место назначения, сконофигурированное ранее в rclone config название нашего хранилища, в нашем случае это s3-adman
  1. Запустим утилиту rclone на копирование с логированием из источника в место назначения.
  2. Проверим, успешно ли выполнен перенос:
  • В случае ошибки - сделаем запись в лог и выйдем из скрипта
  • В случае успеха - сделаем запись в лог и удалим в каталоге источнике все файлы старше 2 дней (можно настроить на свое усмотрение)
  1. Закончим скрипт.
Окно терминала
CLS
ECHO OFF
CHCP 1251
SET DATETIME=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%
SET LOGFILE=rclone_backup_%DATETIME%.log
SET LOGPATH="Logback\%LOGFILE%"
SET BINPATH="c:\rclone"
SET SOURCEPATH="c:\BAC\Backup"
SET DESTINATION=s3-adman
CALL %BINPATH%\rclone -vP copy --log-file=%LOGPATH% --no-traverse %SOURCEPATH% %DESTINATION%:new-backup
IF NOT %ERRORLEVEL%==0 GOTO Error
GOTO Successfull
:Error
ECHO ECHO %DATETIME% Ошибка! Резервные копии не перенесены, подробней в rclone_backup.log >> backup_rclone.log
GOTO End
:Successfull
ECHO %DATETIME% Резервные копии успешно перенесены >> backup_rclone.log
GOTO Cleaning
:Cleaning
forfiles /p %SOURCEPATH% /S /D -2 /C "cmd /c del /f /a /q @file"
IF NOT %ERRORLEVEL%==0 GOTO End
ECHO %DATETIME% Очистка от старых бэкапов проведена успешно! >> backup.log
:End

Автоматизация запуска скрипта по времени

Ставим задачу в планировщик задач.

Запускаем планировщик:

Пуск – Панель Управления – Администрирование – Планировщик заданий.

Создаем задачу -> Задаем ей имя в планировщике

New job in windows

и устанавливаем триггеры (расписание начала задачи). Например ставим еженедельно задачу в рабочие дни ночью на пару часов позже задачи на бэкап.

New job in windows

Далее указываем Действие: Создать -> программу сценарий: (находим нашу программу) rclone-to-net.cmd жмем Ок.

New job in windows

Всё, наш Скрипт создан и установлен в планировщик Windows.

Осталось проверить его работоспособность:

Проверка работоспособности скрипта

Прямо в планировщике задач выбираем нашу задачу и вызвав правой кнопкой мыши контекстное меню, выбираем “Запустить” – далее смотрим результат. Радуемся жизни или анализируем причины записи ошибок в лог.

New job in windows

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

Проверка логирования

Так же можем проверить лог успешного выполнения задачи и смоделировать ошибку чтобы проверить то, что и ошибка успешно логируется. Для этого достаточно в скрипте указать неправильное название места назначения, в нашем примере изменить s3-adman на что-то другое.

Проверка удаления старых файлов

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

Окно терминала
:Cleaning
forfiles /p %SOURCEPATH% /S /D -2 /C "cmd /c del /f /a /q @file"

Запустить скрипт и после его успешной отработки, проверить удаление данных файлов.