Миграция данных в объектное хранилище S3
Миграция данных между S3-совместимыми хранилищами часто требуется, если нужно сменить хостинг-провайдера, сохранить данные в одной базе или оптимизировать затраты.
В статье разберёмся, как перенести данные: от установки и настройки до непосредственного копирования. Этот подход позволяет мигрировать быстро, с минимальными трудозатратами и с соблюдением требований безопасности.
Обратите внимание: в инструкции будем использовать утилиту Rclone. Она не переносит политики, установленные на исходники — только данные и базовые метаданные объектов.
Как установить Rclone на разных ОС
Утилита работает с большинством известных ОС: Windows, Linux, macOS, FreeBSD, OpenBSD и другими.
Windows
Скачайте архив на сайте разработчика и распакуйте его в каталог на своём устройстве. Затем добавьте каталог с файлами Rclone в переменную окружения:
Скопируйте путь до каталога с Rclone.
С помощью сочетания клавиш Win + R вызовите окно Запуск команд и выполните команду
sysdm.cpl.

Откроется окно Свойства системы (System Properties). Перейдите на вкладку Дополнительно и кликните Переменные среды (Environment Variables).

Найдите параметр PATH и нажмите Изменить (Edit).

Добавьте путь каталога с распакованным Rclone в список и сохраните изменения.

Linux/macOS
Для установки в Linux/macOS введите в терминале следующую команду:
curl https://rclone.org/install.sh | sudo bashВ большинстве дистрибутивов Linux Rclone уже присутствует в репозиториях по умолчанию. Для установки программы воспользуйтесь командой пакетного менеджера, соответствующей вашей системе.
Для Debian-based дистрибутивов Linux:
apt install rclone Для актуальных версий RHEL-based:
dnf install rcloneДля предыдущих версий RHEL-based:
yum install rcloneДля RHEL-based систем может потребоваться сначала включить репозиторий [EPEL] с помощью следующей команды:
yum install epel-release
dnf install rcloneРегистрация хранилища в Rclone
Для работы с утилитой требуется указать данные доступа к исходному и целевому хранилищам. В rclone зарегистрированное S3-хранилище имеет имя “remote”. Rclone сохраняет ключи доступа в своём файле конфигурации, поэтому важно быть уверенным в безопасности их хранения на конкретной машине. Лучше добавлять ключи от имени пользователя, доступ к которому есть только у вас.
Чтобы зарегистрировать remote, можно использовать интерактивное меню rclone или создать текстовый файл конфигурации вручную. Рассмотрим оба способа.
Настройка через интерактивное меню
Для запуска введите в консоль команду:
rclone config
Выберите n и создайте новый remote, чтобы зарегистрировать данные S3 в конфигурации rclone.
Укажите имя хранилища. Оно может быть любым: например, назовём S3-источник “source”, а S3-приёмник, на который мы будем копировать, — “destination”.

Выберите тип хранилища, указывая S3, то есть пункт 5 из списка:

Укажите провайдера хранилища. Здесь достаточно просто выбрать пункт 24 (Другой):

Укажите, что реквизиты доступа будут переданы при настройке. Для этого выберите 1 и кликнете Enter:

Введите реквизиты S3: Ключ доступа (Access Key ID) и Секретный ключ (Secret Key). Ключи можно узнать со стороны провайдера S3. У FirstDEDIC аутентификационные данные можно найти в разделе «Доступы» для выбранного хранилища:

Затем нужно выбрать регион. Значение можно оставить по умолчанию, нажав Enter:

В качестве Endpoint укажите URL подключения к хранилищу, к которому будем подключаться:

Остальные настройки оставьте по умолчанию — для этого нажмите Enter. Продвинутую конфигурацию также нужно оставить по умолчанию: выберите n и кликните Enter.

На последнем этапе вы увидите информацию о конфигурации. Убедитесь в правильности настроек, введите y и нажмите Enter:

Настройка приёмника завершена. Таким же образом повторим настройку для хранилища приёмника, получив два зарегистрированных remote в конфигурации.
Настройки через конфигурационный файл
Также настройки можно внести и напрямую: для этого нужно указать данные в конфигурационном файле rclone.conf. Это делается через любой удобный текстовый редактор. Для Windows нужно завести новый текстовый файл txt-формата (в дальнейшем изменив его расширение на .conf), для Linux — использовать vim или nano:
vim /root/.config/rclone/rclone.confПропишите аналогичный код с указанием типа, ключей доступа, URL-адрес хранилища и региона для S3-источника (source) и S3-приёмника (destination):
[source]
type = s3
access_key_id = КЛЮЧ_ДОСТУПА_ИСТОЧНИКА
secret_access_key = СЕКРЕТНЫЙ_КЛЮЧ_ИСТОЧНИКА
endpoint = URL_S3_ИСТОЧНИКА
region = ru-central1
[destination]
type = s3
access_key_id = КЛЮЧ_ДОСТУПА_ПРИЁМНИКА
secret_access_key = СЕКРЕТНЫЙ_КЛЮЧ_ПРИЁМНИКА
endpoint = URL_S3_ПРИЁМНИКА
region = ru-central1Копирование
Шаг 1. Проверьте корректность подключения по введенным данным. Для этого используйте команду rclone ls с указанием имени remote:
rclone ls source
rclone ls destinationКоманда отобразит список бакетов в хранилище, если конфигурация задана верно. Если бакеты отсутствуют, система вернёт пустую строку. Если же в конфигурации есть ошибки и данные некорректны, консоль выведет сообщение об ошибке подключения — в этом случае нужно перепроверить настройки.
Шаг 2. Запустите копирование. Для этого введите команду вида:
rclone copy -v -P --log-file=rclone.log --transfers=256 --retries=100 --retries-sleep 5m --low-level-retries=100 --timeout=10m source:имя_бакета_источника/ destination:имя_бакета_приёмника/Перед началом копирования обязательно проверьте объём данных в хранилище, оцените время на проведение переноса и стоимость трафика у вашего провайдера. При большом объёме данных в хранилище эти параметры могут быть критичными.
Опции, указанные в команде:
--log-file — запись лога вывода rclone в файл rclone.log;
--transfers — лимит количества файлов, передающихся одновременно;
--retries — число повторных попыток подключения;
--retries-sleep — время ожидания до следующей попытки подключения;
--low-level-retries — количество повторных попыток передачи данных на низких уровнях хранилищ;
--timeout — таймаут операции ввода-вывода. Это максимальное время, которое отводится на передачу данных. Если операция началась, но зависла, по истечении этого времени она будет прервана как невыполненная.
В конце команды пропишите заданное имя remote S3-хранилища — источника и приёмника с указанием бакетов.
Шаг 3. Укажите дополнительные опции. Например, чтобы ограничить скорость передачи данных, можно добавить опцию --bwlimit, указав максимально допустимую скорость передачи в мегабайтах:
rclone copy -v -P --log-file=rclone.log --transfers=256 --retries=100 --retries-sleep 5m --low-level-retries=100 --timeout=10m --bwlimit=100
source:имя_бакета_источника/ destination:имя_бакета_приёмника/Эта функция полезна, если исходящий трафик от провайдера тарифицируется, и важно сократить издержки при переезде. Другие опции Rclone указаны в официальной документации.
Если задача — просто скопировать данные, и не нужна настройка объёма трафика между хранилищами, рекомендуем использовать команду, которую мы привели выше, изменив имена remote и бакетов на нужные.
Перед запуском копирования советуем проверить корректность выбранных параметров, запустив получившуюся команду с опцией –dry-run.
Шаг 4. Завершение переноса и проверка результата. После завершения копирования rclone выведет статистику об объёме переданных файлов, скорости соединения и затраченном времени:
Transferred: 36.732 KiB / 36.732 KiB, 100%, 9.179 KiB/s, ETA 0s
Checks: 377 / 377, 100%
Transferred: 26 / 26, 100%
Elapsed time: 6.6sГотово: данные успешно перенесены. Теперь можно настраивать сервис для работы с новым S3-хранилищем.
Если нужно подробнее разобраться с переносом данных, ответим на вопросы в рамках бесплатной технической поддержки.