Нередко возникают ситуации, когда нужно перенести данные из одного облачного хранилища S3 в другое. Например, при необходимости собрать все данные в одном месте или смене провайдера. Мы расскажем, как выполнить копирование, используя известный инструмент по работе с данными облачных хранилищ — Rclone.
Rclone — это удобная утилита командной строки для синхронизации и управления данными в облачных хранилищах, которая работает через интерфейс S3 API и обладает широким набором функций.
Далее подробно разберем, как установить и настроить Rclone, а затем перенести данные между двумя S3-совместимыми хранилищами. Вы узнаете, как выполнить миграцию быстро, безопасно и с минимальными трудозатратами.
Минимальные требования
Для работы утилиты потребуется физическая или виртуальная машина с операционной системой, для которой доступна сборка rclone. В настоящее время поддерживается большинство известных ОС: Windows, Linux, macOS, FreeBSD, OpenBSD и другие. Полный перечень можно посмотреть в репозитории проекта на GitHub.
Установка Rclone
Рассмотрим процесс установки утилиты для разных ОС.
Linux/macOS
Установить утилиту на ОС семейства Linux и macOS можно, используя официальный скрипт, скачав и выполнив его командой:
curl https://rclone.org/install.sh | sudo bashНа современных версия Debian и Ubuntu достаточно использовать пакетный менеджер:
apt install rclone  В случае RHEL-based систем, таких как CentOS, AlmaLinux, или Rocky Linux установка также может быть произведена через пакетные менеджеры. При этом нужно убедиться в том, что репозиторий EPEL подключен:
yum install epel-release
yum install rclone
dnf install epel-release
dnf install rcloneWindows
В случае Windows скачайте архив для установки на сайте разработчика. А затем распакуйте его в каталог на своем устройстве.
Далее необходимо добавить каталог с файлами Rclone в переменную окружения:
- Скопируйте путь до каталога с Rclone. 
- Откройте Свойства системы (System Properties), нажав сочетание клавиш Win + R и выполнив команду: 
sysdm.cpl
- В открывшемся окне перейдите на вкладку Дополнительно и нажмите Переменные среды (Environment Variables) в нижней части: 

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

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

Подготовка к работе
Перед запуском копирования нам нужно ввести авторизационные данные хранилища-источника и хранилища-приёмника. В терминологии rclone S3-хранилище при регистрации называется “remote”.
В дальнейшем rclone хранит в своей конфигурации ключи доступа, поэтому стоит убедиться в безопасности их размещения на используемой машине. Добавляйте ключи под пользователем, к которому имеете доступ только вы.
Зарегистрировать remote можно стандартными средствами утилиты (через интерактивное меню) или создав текстовый файл конфигурации вручную. Рассмотрим оба способа.
Настройка через интерактивное меню
Чтобы запустить процедуру, необходимо ввести в консоль команду:
rclone config
Выбираем n и создаём новый remote, то есть регистрируем данные S3 в конфигурации rclone.
Далее указываем имя хранилища. Имя может быть любым, удобным для вас. Например, назовем S3-источник “source”, а S3-приёмник, на который мы будем копировать, — “destination”. 
 

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

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

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

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

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

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

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

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

Настройка приёмника завершена. Таким же образом повторим настройку для хранилища приёмника, получив 2 зарегистрированных remote в конфигурации.
Настройки через конфигурационный файл
Необходимые настройки можно внести и напрямую — через указание данных в конфигурационном файле rclone.conf:
Используем для этого любой удобный вам текстовый редактор. В случае Windows заводим новый текстовый файл txt-формата, на 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Запуск процедуры копирования
Для проверки корректности подключения по указанным вами данным можно воспользоваться командой rclone ls с указанием имени remote:
rclone ls source:
rclone ls destination:При успешном подключении отобразится список с бакетами в хранилище. Если бакетов нет, вернется пустая строка. Если авторизация не прошла — консоль выведет ошибку подключения и нужно перепроверить корректность введенных данных.
Запуск процесса копирования выполняется через команду следующего вида:
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-хранилища — источника и приёмника с указанием бакетов. Между ними и производится копирование данных.
 
При необходимости ограничить скорость передачи данных можно добавить опцию --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. 
Обратите внимание. 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-хранилищем.
 
    