VK Cloud logo

Резервное копирование данных в объектное хранилище с помощью rclone

С помощью сервиса VK Object Storage можно организовать резервное копирование данных, выбрав подходящий инструмент под конкретную задачу. Для работы из командной строки подходит rclone — утилита, поддерживающая S3-совместимые хранилища, шифрование на лету и гибкие политики хранения.

Для примера далее используются следующие данные:

  • Имя бакета: backup-bucket
  • Регион: ru-msk
  • Эндпоинт VK Object Storage: https://hb.ru-msk.vkcloud-storage.ru

Подготовительные шаги

  1. Создайте аккаунт для сервиса VK Object Storage, если это еще не сделано:

    1. Перейдите в личный кабинет VK Cloud.

    2. Выберите проект.

    3. Перейдите в раздел Object StorageАккаунты.

    4. Нажмите кнопку Добавить аккаунт или Добавить.

    5. Задайте имя аккаунта.

    6. Нажмите кнопку Создать.

    7. В открывшемся окне скопируйте и сохраните идентификатор ключа доступа (Access Key ID) и секретный ключ (Secret Key).

  2. Убедитесь, что AWS CLI установлен и настроен для работы с созданным аккаунтом VK Object Storage. Это понадобится, если планируете управлять жизненным циклом объектов через CLI.

  3. Создайте бакет с именем backup-bucket.

  4. Установите утилиту rclone, следуя официальной документации.

1. Настройте rclone для работы с VK Object Storage

  1. Запустите интерактивную настройку rclone:

    rclone config
  2. Выберите опцию n (new remote) для создания нового подключения и задайте параметры:

    • Укажите имя подключения, например vkcloud.
    • Выберите тип хранилища s3 (Storage).
    • В качестве провайдера выберите Other (любой S3-совместимый провайдер).
    • Задайте параметры подключения.

    Итоговая конфигурация в файле ~/.config/rclone/rclone.conf должна выглядеть так:

    [vkcloud]type = s3provider = Otherenv_auth = falseaccess_key_id = <ACCESS_KEY>secret_access_key = <SECRET_KEY>region = ru-mskendpoint = https://hb.ru-msk.vkcloud-storage.ru

    Здесь:

    • <ACCESS_KEY> — значение Access Key ID, полученное при создании аккаунта VK Object Storage.
    • <SECRET_KEY> — значение Secret Key, полученное при создании аккаунта VK Object Storage.
    • ru-msk — код региона аккаунта. Для региона Казахстан используйте kz-ast.
    • https://hb.ru-msk.vkcloud-storage.ru — эндпоинт сервиса VK Object Storage региона Москва. Для региона Казахстан используйте https://hb.kz-ast.vkcloud-storage.ru.
  3. Проверьте подключение, выполнив команду:

    rclone lsd vkcloud:

    В выводе должен появиться созданный бакет backup-bucket.

(Опционально) 2. Настройте фильтры для оптимизации трафика

При резервном копировании можно исключить временные и ненужные файлы, чтобы сократить объем передаваемых данных и время выполнения операции. Для этого создайте файл-фильтр filter.txt и укажите в нем файлы, которые нужно исключить:

# filter.txt- *.tmp- node_modules/**+ *

Имя этого файла нужно будет указать с флагом --filter-from при вызове команды синхронизации локального и удаленного хранилища.

Знак + перед именем файла означает, что файл должен быть включен в резервное копирование, знак - — проигнорирован. В примере файла выше фильтры будут работать следующим образом:

  • исключить все файлы, заканчивающиеся на .tmp (на любом уровне вложенности);
  • исключить папку node_modules и все ее содержимое рекурсивно;
  • включить все остальное, что не совпало с предыдущими правилами.

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

(Опционально) 3. Настройте шифрование данных на лету

Утилита rclone поддерживает шифрование данных перед отправкой в хранилище с помощью подключения типа crypt. Это позволяет хранить данные в зашифрованном виде, даже если бакет не имеет серверного шифрования.

Чтобы настроить шифрование при синхронизации локального и удаленного хранилища:

  1. Запустите интерактивную настройку rclone:

    rclone config
  2. Выберите опцию n (new remote) для создания нового подключения и задайте параметры:

    • Укажите имя подключения с шифрованием, например vkcloud-encrypted.
    • Выберите тип crypt.
    • В качестве источника подключения укажите vkcloud:backup-bucket.
    • Задайте основной и дополнительный пароли для шифрования.

    Итоговая конфигурация в файле ~/.config/rclone/rclone.conf должна выглядеть так:

    [vkcloud-encrypted]type = cryptremote = vkcloud:backup-bucketpassword = <ПАРОЛЬ>password2 = <ПАРОЛЬ_СОЛЬ>

    Здесь:

    • vkcloud:backup-bucket — полный путь к удаленному хранилищу, который состоит из имени удаленного хранилища, настроенного ранее через rclone config, и названия бакета (хранилища) в сервисе VK Object Storage.
    • <ПАРОЛЬ> — зашифрованный пароль.
    • <ПАРОЛЬ_СОЛЬ> — дополнительный зашифрованный пароль, который алгоритм утилиты rclone объединяет с основным паролем для вычисления итогового криптографического ключа.

(Опционально) 4. Настройте политики хранения резервных копий

Чтобы автоматически удалять устаревшие резервные копии, используйте встроенные возможности rclone:

  1. Удалите файлы старше заданного количества дней:

    rclone delete vkcloud:backup-bucket --min-age 30d

Здесь:

  • vkcloud:backup-bucket — полный путь к удаленному хранилищу, который состоит из имени удаленного хранилища, настроенного ранее через rclone config, и названия бакета (хранилища) в сервисе VK Object Storage.
  • --min-age — опция для фильтрации файлов по возрасту, которая позволяет копировать или обрабатывать файлы не старше заданного времени, например не старше 30 дней.

Для инкрементальных бэкапов с сохранением предыдущих версий используйте флаг --backup-dir напрямую в команде синхронизации sync.

5. Проверьте работоспособность резервного копирования

  1. Создайте тестовый файл:

    mkdir -p /dataecho "test backup data" > /data/test-file.txt
  2. Выполните резервное копирование с шифрованием, заданными фильтрами и настроенными политиками хранения резервных копий:

    rclone sync /data vkcloud-encrypted:/current \  --filter-from filter.txt \  --verbose \  --backup-dir vkcloud:backup-bucket/archive/$(date +%Y-%m-%d)

    Здесь:

    • /data — источник, откуда нужно перенести данные.
    • vkcloud-encrypted:/current — подсключение к папке /current удаленного хранилища (VK Object Storage) с шифрованием данных.
    • --filter-from filter.txt — файл-фильтр с правилами фильтрации данных при синхронизации.
    • --backup-dir — опция для переопределения поведения команды sync: при каждом запуске текущая версия файлов из папки current будет перемещена в папку archive/<ДАТА>, а новые файлы загружены в current.
    • --verbose — опция включения подробного вывода: имена файлов, статус передачи, пропуски, ошибки, статистика и прогресс по потокам.
  3. Проверьте, что файл появился в бакете:

    rclone ls vkcloud-encrypted:

    В выводе должен присутствовать файл test-file.txt.

  4. Убедитесь, что данные в бакете зашифрованы — выведите список объектов в бакете VK Object Storage напрямую:

    rclone ls vkcloud:backup-bucket

    Имена файлов и их содержимое должны отличаться от оригинальных, так как crypt шифрует и имена, и данные.

  5. Восстановите файл из резервной копии:

    mkdir -p /restored-datarclone copy vkcloud-encrypted:test-file.txt /restored-data/
  6. Проверьте содержимое восстановленного файла:

    cat /restored-data/test-file.txt

    Вывод должен содержать: test backup data.

Удалите неиспользуемые ресурсы

Бакет и загруженные в него объекты тарифицируются. Если они вам больше не нужны:

  1. Удалите объекты из бакета.
  2. Удалите бакет.