Есть множество сценариев использования облачных сервисов: кто-то использует двухстороннюю синхронизацию с облаком чтобы иметь одинаковый набор файлов на нескольких устройствах, кто-то использует облако для хранения резервных копий.
Также иногда возникают разовые задачи: например перенос данных с одного облачного сервиса на другой. Далеко не все задачи можно решить с помощью "официальных" клиентов и тут на помощь приходят сторонние инструменты. Об одном из них - rclone - и пойдёт речь далее.
Rclone это мощный инструмент для работы с облачными сервисами, чем-то напоминающий rsync. Список поддерживаемых облачных сервисов весьма внушителен и на момент публикации он такой:
- Amazon Drive
- Amazon S3
- Backblaze B2
- Box
- Ceph
- DigitalOcean Spaces
- Dreamhost
- Dropbox
- FTP
- Google Cloud Storage
- Google Drive
- HTTP
- Hubic
- Jottacloud
- IBM COS S3
- Memset Memstore
- Mega
- Microsoft Azure Blob Storage
- Microsoft OneDrive
- Minio
- Nextcloud
- OVH
- OpenDrive
- Openstack Swift
- Oracle Cloud Storage
- ownCloud
- pCloud
- put.io
- QingStor
- Rackspace Cloud Files
- SFTP
- Wasabi
- WebDAV
- Yandex Disk
- Локальная файловая система
В качестве основного функционала разработчики отмечают:
- Проверка целостности файлов по хэшам MD5/SHA1.
- Сохранение временных меток создания/изменения файлов.
- Поддержка частичной синхронизации.
- Копирование только новых файлов.
- Синхронизация (односторонняя).
- Проверка файлов (по хэшам).
- Возможность синхронизации из одного облачного аккаунта в другой.
- Поддержка шифрования.
- Поддержка локального кэширования файлов.
- Возможность монтирования облачных сервисов через FUSE.
RClone есть в репозиториях Ubuntu начиная Ubuntu Cosmic (17.10) однако на сайте проекта доступна более новая версия и потому ставить будем её:
wget https://downloads.rclone.org/rclone-current-linux-amd64.deb apt install ./rclone-current-linux-amd64.deb
Начальная конфигурация
Для начала надо "соединить" rclone с теми облачными сервисами, с которыми вы хотите работать. Делается это в интерактивном меню, вызываемом командой:
rclone config
К сожалению rclone на данный момент не поддерживает настройку подключений на машинах без запущенного X-сервера. Поэтому если вы планируете использовать rclone на такой машине то сначала надо настроить rclone на машине с X-сервером, а потом перенести её на машину без X-сервера. Во время настройки каждому соединению с облачным сервисом присваивается определённое имя. С каждым облачным сервисом можно иметь любое количество соединений. Список доступных имён соединений можно просмотреть командой:
rclone listremotes
Далее мы будем предполагать что у пользователя настроено три соединения: "GoogleDrive", "OneDrive" и "YandexDrive" соответственно с сервисами Goolge Drive, Microsoft One Drive и Яндекс Диск. Перейдём к рассмотрению возможностей rclone и примеров задач, которые можно решить с помощью этого инструмента.
Резервное копирование в облачный сервис
Самая проста задача, которая часто встречается на серверах: залить архив с резервной копией в облачной сервис. С помощью rclone это можно сделать командой вида:
rclone copy /tmp/backup-20180921.tar.bz2 GoogleDrive:/Backups/
Данная команда копирует файл "/tmp/backup-20180921.tar.bz2" в директорию "Backups" на Google-диске. Если директория не существует - она будет создана. Вместо "GoogleDrive" можно подставить имя любого другого соединения и файл будет скопирован в соответствующее хранилище.
Следующая задача: синхронизировать изменения в определённой папке в облако (новые и изменённые файлы залить, удалённые локально - удалить). Здесь можно использовать команду вида:
rclone sync --delete-after $HOME/Work YandexDrive:/MyWork
Миграция с одного облачного сервиса на другой
Rclone действительно мощный инструмент. Если вы решите перенести все свои данные или их часть с одного облачного сервиса в другой (или с одного аккаунта на другой в том же сервисе) то нет ничего невозможного. Например полностью скопировать содержимое Google-диска в Яндекс-диск можно командой вида:
rclone sync GoogleDrive:/ YandexDrive:/
Скопировать только определённую папку:
rclone sync GoogleDrive:/Work YandexDrive:/Work
Следует отметить что при копировании данные не передаются на прямую из одного сервиса в другой, а сначала скачиваются на локальный компьютер, и потом с него передаются во второй сервис. Поэтому скорость передачи зависит от скорости вашего интернета. Также следует иметь это иметь ввиду пользователям тарифов с небезлимитным трафиком.
Анализ использования хранилища
С помощью rclone можно анализировать использование хранилища. Для этого есть сразу несколько функций. Во-первых можно вывести полный список файлов и директорий в виде дерева командой:
rclone tree OneDrive:/Images
К сожалению в дереве не отображается размер файлов и директорий. Однако и тут есть решение: rclone умеет отображать дерево директорий точно так же как в приложении ncdu. Для этого можно использовать команду:
rclone ncdu OneDrive:/Images
Монтирование
С помощью RClone можно подмонтировать удалённое хранилище (или его часть) в локальное дерево. Функционал считается экспериментальным, однако за время тестирования серьёзных проблем выявлено не было. Монтируется хранилище примерно так:
mkdir -p $HOME/OneDriveImages rclone --vfs-cache-mode full --daemon OneDrive:/Images $HOME/OneDriveImages
Отмонтировать хранилище можно командой:
fusermount -u $HOME/OneDriveImages
Работа с подмонтированным хранилищем происходит почти так же как с локальными файлами и единственное отличие в некоторой задержке при открытии/сохранении файлов, которая вызвана необходимостью скачивать/заливать файлы. Кэширование тут помогает слабо. Но в целом режим всё равно очень удобен, особенно если у вас быстрый интернет или вы никуда не торопитесь:)
Заключение
RClone это действительно мощный инструмент для работы с облачными хранилищами, полное рассмотрение функционала которого займёт не одну статью. Желающим подробнее изучить возможности стоит начать с официального сайта проекта. Из интересных возможностей не рассмотренными остались как минимум шифрование, кэширование и сверка по хэшам.
На этом пока всё. Приятной работы!
Anonymous 2018-09-21 09:28:43 (#)