Резервное копирование данных в объектное хранилище с помощью rclone
С помощью сервиса VK Object Storage можно организовать резервное копирование данных, выбрав подходящий инструмент под конкретную задачу. Для работы из командной строки подходит rclone — утилита, поддерживающая S3-совместимые хранилища, шифрование на лету и гибкие политики хранения.
Для примера далее используются следующие данные:
- Имя бакета:
backup-bucket - Регион:
ru-msk - Эндпоинт VK Object Storage:
https://hb.ru-msk.vkcloud-storage.ru
-
Создайте аккаунт для сервиса VK Object Storage, если это еще не сделано:
-
Перейдите в личный кабинет VK Cloud.
-
Выберите проект.
-
Перейдите в раздел Object Storage → Аккаунты.
-
Нажмите кнопку Добавить аккаунт или Добавить.
-
Задайте имя аккаунта.
-
Нажмите кнопку Создать.
-
В открывшемся окне скопируйте и сохраните идентификатор ключа доступа (Access Key ID) и секретный ключ (Secret Key).
-
-
Убедитесь, что AWS CLI установлен и настроен для работы с созданным аккаунтом VK Object Storage. Это понадобится, если планируете управлять жизненным циклом объектов через CLI.
-
Создайте бакет с именем
backup-bucket. -
Установите утилиту rclone, следуя официальной документации.
-
Запустите интерактивную настройку rclone:
rclone config -
Выберите опцию
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.
- Укажите имя подключения, например
-
Проверьте подключение, выполнив команду:
rclone lsd vkcloud:В выводе должен появиться созданный бакет
backup-bucket.
При резервном копировании можно исключить временные и ненужные файлы, чтобы сократить объем передаваемых данных и время выполнения операции. Для этого создайте файл-фильтр filter.txt и укажите в нем файлы, которые нужно исключить:
# filter.txt- *.tmp- node_modules/**+ *
Имя этого файла нужно будет указать с флагом --filter-from при вызове команды синхронизации локального и удаленного хранилища.
Знак + перед именем файла означает, что файл должен быть включен в резервное копирование, знак - — проигнорирован. В примере файла выше фильтры будут работать следующим образом:
- исключить все файлы, заканчивающиеся на
.tmp(на любом уровне вложенности); - исключить папку
node_modulesи все ее содержимое рекурсивно; - включить все остальное, что не совпало с предыдущими правилами.
Если случай сложный или файлов для фильтрации немного, можно будет указать их напрямую в команде синхронизации sync через флаги --exclude или --include.
Утилита rclone поддерживает шифрование данных перед отправкой в хранилище с помощью подключения типа crypt. Это позволяет хранить данные в зашифрованном виде, даже если бакет не имеет серверного шифрования.
Чтобы настроить шифрование при синхронизации локального и удаленного хранилища:
-
Запустите интерактивную настройку rclone:
rclone config -
Выберите опцию
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 объединяет с основным паролем для вычисления итогового криптографического ключа.
- Укажите имя подключения с шифрованием, например
Чтобы автоматически удалять устаревшие резервные копии, используйте встроенные возможности rclone:
-
Удалите файлы старше заданного количества дней:
rclone delete vkcloud:backup-bucket --min-age 30d
Здесь:
vkcloud:backup-bucket— полный путь к удаленному хранилищу, который состоит из имени удаленного хранилища, настроенного ранее черезrclone config, и названия бакета (хранилища) в сервисе VK Object Storage.--min-age— опция для фильтрации файлов по возрасту, которая позволяет копировать или обрабатывать файлы не старше заданного времени, например не старше 30 дней.
Для инкрементальных бэкапов с сохранением предыдущих версий используйте флаг --backup-dir напрямую в команде синхронизации sync.
-
Создайте тестовый файл:
mkdir -p /dataecho "test backup data" > /data/test-file.txt -
Выполните резервное копирование с шифрованием, заданными фильтрами и настроенными политиками хранения резервных копий:
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— опция включения подробного вывода: имена файлов, статус передачи, пропуски, ошибки, статистика и прогресс по потокам.
-
Проверьте, что файл появился в бакете:
rclone ls vkcloud-encrypted:В выводе должен присутствовать файл
test-file.txt. -
Убедитесь, что данные в бакете зашифрованы — выведите список объектов в бакете VK Object Storage напрямую:
rclone ls vkcloud:backup-bucketИмена файлов и их содержимое должны отличаться от оригинальных, так как
cryptшифрует и имена, и данные. -
Восстановите файл из резервной копии:
mkdir -p /restored-datarclone copy vkcloud-encrypted:test-file.txt /restored-data/ -
Проверьте содержимое восстановленного файла:
cat /restored-data/test-file.txtВывод должен содержать:
test backup data.
Бакет и загруженные в него объекты тарифицируются. Если они вам больше не нужны:
- Удалите объекты из бакета.
- Удалите бакет.