PR-2358

В предыдущих публикациях мы уже не раз рассказывали о полезных утилитах для работы с нашим облачным хранилищем. Сегодня мы поговорим ещё об одном интересном, простом в обращении и — не побоимся этого слова — уникальном инструменте. Знакомьтесь: rclone. Разработчики описывают его краткой и ёмкой фразой «rsync для облачных хранилищ».

Основная функция rclone — это синхронизация данных в хранилище и на локальной машине. Утилита несомненна окажется полезной для широкого круга пользователей облачного хранилища. Её можно использовать и для резервного копирования, и в работе со статическими сайтами…

Есть у rclone и опции, которых нет ни у одного другого инструмента аналогичного плана. Подробнее обо всём этом мы расскажем ниже.


Установка и первичная настройка



Несомненным плюсом и несомненным преимуществом rclone перед другими продуктами аналогичного плана является поддержка множества операционных систем: Linux, Windows, MacOS, Solaris, FreeBSD, OpenBSD, NetBSD и Plan 9.
Ссылки для скачивания пакетов для всех названных ОС можно найти на странице загрузки.

Мы будем описывать особенности работы c rclone на материале ОС Linux. Для установки нам потребуется скачать необходимый пакет, а далее выполнить:

$ unzip rclone-current-linux-amd64.zip
$ cd rclone-current-linux-arm
$ sudo cp rclone /usr/sbin/
$ sudo chown root:root /usr/sbin/rclone
$ sudo chmod 755 /usr/sbin/rclone
$ sudo mkdir -p /usr/local/share/man/man1
$ sudo cp rclone.1 /usr/local/share/man/man1/
$ sudo mandb


По завершении установки настроим rclone для работы с облачным хранилищем Selectel:

$ rclone config


На консоли появится такой диалог:

No remotes found - make a new one
n) New remote
q) Quit config
n/q> 

Выбираем n и нажимаем Enter. Далее нам нужно будет указать имя подключения к удалённому хранилищу:
name >


Указываем любое имя (например, Selectel) и переходим к следующему пункту:

1 / Amazon Cloud Drive
   \ "amazon cloud drive"
 2 / Amazon S3 (also Dreamhost, Ceph)
   \ "s3"
 3 / Backblaze B2
   \ "b2"
 4 / Dropbox
   \ "dropbox"
 5 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
 6 / Google Drive
   \ "drive"
 7 / Hubic
   \ "hubic"
 8 / Local Disk
   \ "local"
 9 / Microsoft OneDrive
   \ "onedrive"
10 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
11 / Yandex Disk
   \ "yandex"



Выбираем цифру 10 (swift) и нажимаем Enter. После этого программа запросит имя пользователя и пароль:

Authentication URL for server.
Choose a number from below, or type in your own value
 1 / Rackspace US
   \ "https://auth.api.rackspacecloud.com/v1.0"
 2 / Rackspace UK
   \ "https://lon.auth.api.rackspacecloud.com/v1.0"
 3 / Rackspace v2
   \ "https://identity.api.rackspacecloud.com/v2.0"
 4 / Memset Memstore UK
   \ "https://auth.storage.memset.com/v1.0"
 5 / Memset Memstore UK v2
   \ "https://auth.storage.memset.com/v2.0"
 6 / OVH
   \ "https://auth.cloud.ovh.net/v2.0"


Нашего хранилища в списке нет, поэтому укажем адрес вручную:

auth > https://auth.selcdn.ru/v1.0


Два следующих пункта (tenant и region) являются факультативными, и их можно пропустить. В последнем вопросе диалога нам будет предложено ещё раз проверить все настройки:

Remote config
--------------------
[selectel]
user = your_username
key = your_password
auth = https://auth.selcdn.ru/v1.0
tenant = 
region = 
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> 


Если всё правильно, выбираем вариант y и нажимаем Enter.

Примеры команд



Синтаксис команд для работы с хранилищем прост:

# Просмотр списка контейнеров в хранилище
$ rclone lsd selectel:

# Создание нового контейнера 
$ rclone mkdir selectel:[имя контейнера]

# Просмотр списка файлов в контейнере
$ rclone ls selectel:[имя контейнера]

# Копирование файлов с локальной машины в хранилище
rclone copy /home/local/directory

# Синхронизация файлов на локальной машине и в хранилище
$ rclone sync /home/local/directory selectel:[имя контейнера]
# Синхронизация файлов в хранилище с файлами на локальной машине
$ rclone selectel:[имя контейнера] sync /home/local/directory


При выполнении операций копирования и синхронизации rclone проверяет все файлы по дате и времени изменения или md5-сумме. Из директории-источника в директорию назначения передаются те файлы, которые были изменены.
Подробное описывать все команды мы в этой статье не будем: обо всё можно прочитать в официальной документации. Также краткую справку можно получить с помощью команды:

$ rclone --help


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

Рассмотрим следующий практический пример: у нас есть папка с фотографиями на Google Docs, и её содержимое нужно перенести в наше облачное хранилище. С помощью rclone это делается очень просто. Создаём новое подключение; в списке доступных облачных хранилище выбираем Google Drive. После этого нам будет предложено указать два параметра: client_id и client_secret. В ответ на соответствующие вопросы не ничего не вводим и просто нажимаем Enter.

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

Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine or Y didn't work
y) Yes
n) No
y/n>


Выбираем ответ «нет» (n). Rclone сгенерирует ссылку для получения кода:

If your browser doesn't open automatically go to the following link: https://accounts.google.com/o/oauth2/auth?client_id=202264815644.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=ac901aefe97aff8ce65fe593060d0b0c
Log in and authorize rclone for access


Откроем эту ссылку в браузере и дадим rclone разрешение на доступ к файлам.

После этого API Google Drive вернёт код, который нужно будет вставить в ответ на вопрос:

Enter verification code>

Вот и всё. Подключение к Google Drive настроено, и можно приступать к копированию:

$ rclone copy [имя подключения]:[имя директории] [selectel]:[имя контейнера]


С задачей копирования файлов rclone справляется достаточно быстро: мы скопировали папку с фотографиями объёмом 1,8 ГБ за 1 минуту 55 секунд.

В ходе экспериментов мы также выяснили, что rclone без проблем копирует и текстовые документы GoogleDocs, преобразуя их в формат docx.

Загрузка объектов большого размера



Проверим скорость работы rclone ещё на одном тесте: попытаемся загрузить в хранилище объект большого размера — более 20 ГБ. Файлы до 20 ГБ загружаются в хранилище при помощи стандартных команд. Процедура загрузки файлов большего размера проходит по-другому: файл делится на сегменты, которые загружаются в отдельный контейнер.

Rclone по умолчанию делит такие файлы на сегменты размером по 5ГБ каждый. В случае необходимости размер сегмента можно изменить с помощью опции -swift-chunk-size. Мы попробовали загрузить в хранилище файл размером 25 ГБ. Rclone справился с этой задачей за 11 минут 14 секунд. Результат, как видим, вполне неплохой.

Заключение



Rclone — вполне интересный и перспективный инструмент, который вполне можно рекомендовать к использованию. Если вам кажется, что мы о чём-то забыли рассказать, сообщите нам об этом, и мы обязательно расширим наш обзор.

А если вы уже знакомы с rclone — делитесь опытом в комментариях.
Если вы по тем или иным причинам не можете оставлять комментарии здесь — добро пожаловать в наш блог .
Поделиться с друзьями
-->

Комментарии (8)


  1. cmepthuk
    13.07.2016 16:05

    Спасибо за пост, только вот подружить rclone с Yandex.Disk не пытались?


    1. AndreiYemelianov
      13.07.2016 17:06

      C Яндекс-диском не пытался, только с Google Drive.


      1. cmepthuk
        13.07.2016 17:51

        В общем, подключил ЯД. Ставил на сервер. По идее, модно было сделать и без использования десктопа, но с ним в разы проще. Пошагово:

        1. Ставим rclone как указано в посте, но ничего не настраиваем;
        2. Качаем на десктоп (в моем случае это Win-машина) версию под windows
        3. Из архива берем rclone.exe и кидаем в корень c:\ (сугубо для удобства);
        4. Открываем cmd, выполняем:
          cd /d c:rclone.exe config
          
          No remotes found - make a new one
          n) New remote
          s) Set configuration password
          q) Quit config
          n/s/q> n
          
          name> yandex
          
          client_id>
          
          client_secret>
          
          Remote config
          Use auto config?
           * Say Y if not sure
           * Say N if you are working on a remote or headless machine
          y) Yes
          n) No
          y/n> y
          
          # Открывается окно браузера, в котором вводим логин:пароль от учетки ЯД
          
          Waiting for code...
          Got code
          --------------------
          [yandex]
          client_id =
          client_secret =
          token = {"access_token":"AQA...OuQ","token_type":"bearer","expiry":"2017-07-13T18:27:46.7501402+05:00"}
          --------------------
          y) Yes this is OK
          e) Edit this remote
          d) Delete this remote
          y/e/d> y
          
          Current remotes:
          Name                 Type
          ====                 ====
          yandex               yandex
          e) Edit existing remote
          n) New remote
          d) Delete remote
          s) Set configuration password
          q) Quit config
          e/n/d/s/q> q
          
          rclone.exe --help
          
          # Смотрим строку --config string  Config file. (default "C:\\Users\\USERNAME/.rclone.conf")
          
          type C:\Users\USERNAME\.rclone.conf
          
          [yandex]
          type = yandex
          client_id =
          client_secret =
          token = {"access_token":"AQA...OuQ","token_type":"bearer","expiry":"2017-07-13T18:27:46.750140+05:00"}
          
        5. Тот самый конфиг, что был выведен крайней командой нежно копируем в буфер, возвращаемся на сервер, на котором выполняем (я делал под рутом):
          $ rclone --help 2>&1 | grep -e '--config'
          --config string  Config file. (default "/root/.rclone.conf")
          
          # создаем конфиг по указанному пути и вставляем в него содержимое конфига с десктопа:
          $ nano /root/.rclone.conf
          
          # Проверяем
          $ rclone lsd yandex:
          
          # Создаем директорию для бэкапов, например
          $ rclone mkdir yandex:backups
          
          # И заливаем в неё (синхронизируем содержимое локального каталога с директорией в облаке):
          $ rclone sync /var/backups yandex:backups
          
        6. Проверяем содержимое в веб-морде ЯД, опционально — ставим крайнюю команду в крон


    1. maxfox
      13.07.2016 18:50

      Только что попробовал с Яндекс.Диск, работает. 500 Mb cкачалось на локальную машину за 1m43.6s, хотя от самой утилиты, я думаю, это не сильно зависит.
      Настраивается просто, но требует авторизации через браузер. Т.е. если нужно использовать rclone на удаленной машине, то придется его установить так же и на локальную.


    1. antonbatenev
      13.07.2016 19:43

      Для работы с Яндекс.Диск можно попробовать использовать «легковесный» ydcmd.


  1. cmepthuk
    13.07.2016 16:46

    # Синхронизация файлов на локальной машине и в хранилище
    $ rclone sync /home/local/directory selectel:[имя контейнера]
    # Синхронизация файлов в хранилище с файлами на локальной машине
    $ rclone selectel:[имя контейнера] sync /home/local/directory

    Небольшие, но важные поправки:


    • $ rclone sync selectel:[имя контейнера] /home/local/directory — потрет всё содержимое /home/local/directory, если директория в облаке пустая
    • Синхронизация локального каталога с облаком выполняется по команде $ rclone sync /home/local/directory selectel:[имя контейнера] — у вас ошибка в порядке аргументов


  1. Acid_Jack
    13.07.2016 22:06

    Plan 9? Are you serious?
    Looks like a project from geeks for geeks.


  1. Night_Snake
    13.07.2016 23:08

    А ownCloud как же?