Rclone mount - Монтирование сетевых хранилищ SFTP, WebDAV, S3 как локальной директории в Linux
Приветствую!

В этой статье рассмотрим процесс монтирования удалённых сетевых хранилищ SFTP, WebDAV и S3 как обычной директории в файловой системе Linux.

Делать мы этом будем с помощью крутой утилиты rclone👩‍🚀👩‍🚀.

Коротко про SSH, WebDAV, S3 и rclone

SFTP (SSH File Transfer Protocol) - это сетевой протокол, предназначенный для безопасной передачи файлов по сети. SFTP работает поверх протокола SSH (Secure Shell).

WebDAV (Web-based Distributed Authoring and Versioning) - это набор расширений протокола HTTP, который позволяет управлять файлами, хранящимися на удаленных веб-серверах. По сути, он превращает веб-сервер в подобие сетевого диска.

S3 (Amazon Simple Storage Service) - это облачное объектное хранилище, предоставляемое AWS, а также многими другими провайдерами (S3-совместимые хранилища, например, MinIO).

rclone - мощная Open source утилита командной строки для синхронизации файлов и каталогов с/на множество различных облачных хранилищ, включая SFTP, WebDAV, S3, Google Drive, Dropbox и многие другие. Также rclone может монтировать облачные хранилища как локальные файловые системы (через подсистему FUSE), о чём собственно и пойдёт речь в этой статье😉.

Почему не SFTP/SSHFS и DAVFS?

Да, SFTP можно подключать напрямую или даже воспользоваться FUSE вариантом - SSHFS. Аналогичная ситуация и для WebDAV: существует DAVFS. Но особенность монтирования с rclone заключается в его унификации и дополнительных возможностях.

Например, и sshfs и rclone mount используют SFTP в качестве бэкенда. Разница в том, что rclone не просто проксирует запрос, а также способен:

Параметры можно гибко изменять под различные условия работы.

Как читать эту статью?

Разделы статьи для каждого типа монтирования - самодостаточны. Можете выбрать любой и выполнив установку rclone + все шаги нужного раздела, вы получите рабочую конфигурацию.

А теперь перейдем к практике👨‍💻.

Установка rclone

Утилита rclone доступна в стандартных репозиториях. Открываем терминал и выполняем:

BASH
sudo apt update && sudo apt install fuse rclone
Нажмите, чтобы развернуть и увидеть больше

Изначально rclone предназначен для прямого обмена файлами между разными хранилищами: move|copy|sync. Но в этой статье речь пойдет лишь о команде mount, которая позволяет монтировать разные типы хранилищ, как обычной директории.

Монтирование SFTP как директории

Первым делом необходимо добавить в конфиг rclone реквизиты доступа к удалённому хранилищу SFTP (можно указывать несколько инстансов):

BASH
mkdir -vp ~/.config/rclone

vim ~/.config/rclone/rclone.conf
Нажмите, чтобы развернуть и увидеть больше

Наполняем:

INI
[sftp-storage-1]
type = sftp
host = sftp.r4ven.me
user = ivan
port = 22
#pass = ObfuscatedSecretPassword
key_file = /home/ivan/.ssh/id_ed25519
md5sum_command = md5sum
sha1sum_command = sha1sum
Нажмите, чтобы развернуть и увидеть больше

Описание параметров:

Ручное монтирование SFTP

Сперва создадим локальную директорию, куда будем монтировать удалённую:

BASH
mkdir -vp ~/Storage/sftp
Нажмите, чтобы развернуть и увидеть больше

Теперь для ручного монтирования удалённой директории в локальную выполните такую команду:

BASH
rclone mount --daemon sftp-storage-1:/home/ivan/data ~/Storage/sftp
Нажмите, чтобы развернуть и увидеть больше

Где:

Проверяем монтирование:

BASH
findmnt --real

df -h ~/Storage/sftp

ls -l ~/Storage/sftp
Нажмите, чтобы развернуть и увидеть больше

Для отмонтирования директории выполните команду fusermount с флагом -u (unmount):

BASH
fusermount -u ~/Storage/sftp
Нажмите, чтобы развернуть и увидеть больше

Вроде бы ничего особенного, но вся суть подобного монтирования в дополнительных параметрах, их может быть много. Например:

BASH
rclone mount --daemon sftp-storage-1:/home/ivan/data ~/Storage/sftp \
    --dir-cache-time 48h \
    --vfs-cache-mode full \
    --vfs-cache-max-size 10G \
    --vfs-cache-max-age 24h \
    --vfs-write-back 5s \
    --vfs-read-chunk-size 128M \
    --vfs-read-chunk-size-limit 1G \
    --buffer-size 128M \
    --transfers 8 \
    --checkers 8 \
    --umask 002 \
    --log-level INFO \
    --retries 10 \
    --low-level-retries 10 \
    --sftp-set-modtime=false \
    --sftp-disable-hashcheck
Нажмите, чтобы развернуть и увидеть больше

Описание параметров rclone смотрите под спойлером.

Для проверки скорости записи можно воспользоваться утилитой dd:

BASH
dd if=/dev/urandom of=./Storage/sftp/bigfile.bin bs=100M count=10
Нажмите, чтобы развернуть и увидеть больше

Ниже на скриншоте пример записи при обычном монтировании и с дополнительными параметрами:

Автоматическое монтирование SFTP

Для автоматического запуска процесса монтирования воспользуемся системой инициализации Systemd.

Создаём файл юнита командой:

BASH
mkdir -vp ~/.config/systemd/user

vim  ~/.config/systemd/user/sftp-storage-1.service
Нажмите, чтобы развернуть и увидеть больше

Наполняем:

INI
[Unit]
Description=Rclone SFTP mount
After=network-online.target
Wants=network-online.target

[Service]
Type=simple

ExecStartPre=/usr/bin/sleep 5

ExecStart=/usr/bin/rclone mount \
    sftp-storage-1:/home/ivan/data /home/ivan/Storage/sftp \
    --dir-cache-time 48h \
    --vfs-cache-mode full \
    --vfs-cache-max-size 10G \
    --vfs-cache-max-age 24h \
    --vfs-write-back 5s \
    --vfs-read-chunk-size 128M \
    --vfs-read-chunk-size-limit 1G \
    --buffer-size 128M \
    --transfers 8 \
    --checkers 8 \
    --umask 002 \
    --log-level INFO \
    --retries 10 \
    --low-level-retries 10 \
    --sftp-set-modtime=false \
    --sftp-disable-hashcheck

ExecStop=/usr/bin/fusermount -u -z /home/ivan/Storage/sftp
ExecStopPost=/usr/bin/sleep 2
TimeoutStopSec=20

Restart=always
RestartSec=60

KillMode=mixed

[Install]
WantedBy=default.target
Нажмите, чтобы развернуть и увидеть больше

Под спойлером описание параметров юнита.

Перечитываем конфигурацию Systemd:

BASH
systemctl --user daemon-reload
Нажмите, чтобы развернуть и увидеть больше

Теперь активируем запуск/автозапуск юнита:

BASH
systemctl --user enable --now sftp-storage-1.service

systemctl --user status sftp-storage-1.service
Нажмите, чтобы развернуть и увидеть больше

Если всё ОК:

Проверяем точку монтирования:

BASH
findmnt --real

df -h ~/Storage/sftp

ls -l ~/Storage/sftp
Нажмите, чтобы развернуть и увидеть больше

Смотреть журнал сервиса так:

BASH
journalctl --user -u sftp-storage-1.service
Нажмите, чтобы развернуть и увидеть больше

Теперь сервис будет стартовать при входе пользователя в систему.

Монтирование WebDAV как директории

Тут также нужно добавить в конфиг rclone реквизиты доступа к удалённому хранилищу WebDAV (можно указывать несколько инстансов):

BASH
mkdir -vp ~/.config/rclone

vim ~/.config/rclone/rclone.conf
Нажмите, чтобы развернуть и увидеть больше

Наполняем:

BASH
[webdav-storage-1]
type = webdav
url = https://webdav.r4ven.me/
vendor = auto
user = ivan@r4ven.me
pass = ObfuscatedSecretPassword
Нажмите, чтобы развернуть и увидеть больше

Описание параметров:

Вывод команды указать в качестве pass в конфиге.

Ручное монтирование WebDAV

Сперва создадим локальную директорию, куда будем монтировать удалённую:

BASH
mkdir -vp ~/Storage/webdav
Нажмите, чтобы развернуть и увидеть больше

Теперь для ручного монтирования удалённой директории в локальную выполните такую команду:

BASH
rclone mount --daemon webdav-storage-1:/data ~/Storage/webdav
Нажмите, чтобы развернуть и увидеть больше

Где:

Проверяем монтирование:

BASH
findmnt --real

df -h ~/Storage/webdav

ls -l ~/Storage/webdav
Нажмите, чтобы развернуть и увидеть больше

Для отмонтирования директории выполните команду fusermount с флагом -u (unmount):

BASH
fusermount -u ~/Storage/webdav
Нажмите, чтобы развернуть и увидеть больше

Тут также можно использовать множество параметров rclone. Пример:

BASH
rclone mount --daemon webdav-storage-1:/data ~/Storage/webdav \
    --dir-cache-time 48h \
    --vfs-cache-mode full \
    --vfs-cache-max-size 10G \
    --vfs-cache-max-age 24h \
    --vfs-write-back 5s \
    --vfs-read-chunk-size 128M \
    --vfs-read-chunk-size-limit 1G \
    --buffer-size 128M \
    --transfers 8 \
    --checkers 8 \
    --umask 002 \
    --log-level INFO \
    --retries 10 \
    --low-level-retries 10
Нажмите, чтобы развернуть и увидеть больше

Описание параметров rclone смотрите под спойлером.

Для проверки скорости записи можно воспользоваться утилитой dd:

BASH
dd if=/dev/urandom of=./Storage/webdav/bigfile.bin bs=10M count=10
Нажмите, чтобы развернуть и увидеть больше

Ниже на скриншоте пример записи при обычном монтировании и с дополнительными параметрами:

Автоматическое монтирование WebDAV

Для автозапуска процесса монтирования также используем Systemd.

Создаём файл юнита командой:

BASH
mkdir -vp ~/.config/systemd/user

vim  ~/.config/systemd/user/webdav-storage-1.service
Нажмите, чтобы развернуть и увидеть больше

Наполняем:

INI
[Unit]
Description=Rclone WebDAV mount
After=network-online.target
Wants=network-online.target

[Service]
Type=simple

ExecStartPre=/usr/bin/sleep 5

ExecStart=/usr/bin/rclone mount \
    webdav-storage-1:/data /home/ivan/Storage/webdav \
    --dir-cache-time 48h \
    --vfs-cache-mode full \
    --vfs-cache-max-size 10G \
    --vfs-cache-max-age 24h \
    --vfs-write-back 5s \
    --vfs-read-chunk-size 128M \
    --vfs-read-chunk-size-limit 1G \
    --buffer-size 128M \
    --transfers 8 \
    --checkers 8 \
    --umask 002 \
    --log-level INFO \
    --retries 10 \
    --low-level-retries 10

ExecStop=/usr/bin/fusermount -u -z /home/ivan/Storage/webdav
ExecStopPost=/usr/bin/sleep 2
TimeoutStopSec=20

Restart=always
RestartSec=60

KillMode=mixed

[Install]
WantedBy=default.target
Нажмите, чтобы развернуть и увидеть больше

Под спойлером описание параметров юнита.

Перечитываем конфигурацию Systemd:

BASH
systemctl --user daemon-reload
Нажмите, чтобы развернуть и увидеть больше

Теперь активируем запуск/автозапуск юнита:

BASH
systemctl --user enable --now webdav-storage-1.service

systemctl --user status webdav-storage-1.service
Нажмите, чтобы развернуть и увидеть больше

Если всё ОК:

Проверяем точку монтирования:

BASH
findmnt --real

df -h ~/Storage/webdav

ls -l ~/Storage/webdav
Нажмите, чтобы развернуть и увидеть больше

Смотреть журнал сервиса так:

BASH
journalctl --user -u webdav-storage-1.service
Нажмите, чтобы развернуть и увидеть больше

Теперь сервис будет стартовать при входе пользователя в систему.

Монтирование S3 как директории

Вновь начинаем с конфига rclone. Открываем файл и добавляем реквизиты для инстанса S3 (можно указывать несколько инстансов):

BASH
mkdir -vp ~/.config/rclone

vim ~/.config/rclone/rclone.conf
Нажмите, чтобы развернуть и увидеть больше

Наполняем:

BASH
[s3-storage-1]
type = s3
provider = Minio
endpoint: https://s3.r4ven.me:443
access_key_id: ivan
secret_access_key: SecretAccessKey
bucket: data
Нажмите, чтобы развернуть и увидеть больше

Описание параметров:

Ручное монтирование S3

Cоздаём локальную директорию, куда будем монтировать удалённую:

BASH
mkdir -vp ~/Storage/s3
Нажмите, чтобы развернуть и увидеть больше

Команда монтирования идентична предыдущим:

BASH
rclone mount --daemon s3-storage-1:/data ~/Storage/s3
Нажмите, чтобы развернуть и увидеть больше

Где:

Проверяем монтирование:

BASH
findmnt --real

df -h ~/Storage/s3

ls -l ~/Storage/s3
Нажмите, чтобы развернуть и увидеть больше

Для отмонтирования директории выполните команду fusermount с флагом -u (unmount):

BASH
fusermount -u ~/Storage/s3
Нажмите, чтобы развернуть и увидеть больше

Тут также доступно множество параметров rclone. Пример:

BASH
rclone mount --daemon s3-storage-1:/data ~/Storage/s3 \
    --dir-cache-time 48h \
    --vfs-cache-mode full \
    --vfs-cache-max-size 10G \
    --vfs-cache-max-age 24h \
    --vfs-write-back 5s \
    --vfs-read-chunk-size 128M \
    --vfs-read-chunk-size-limit 1G \
    --buffer-size 128M \
    --transfers 8 \
    --checkers 8 \
    --umask 002 \
    --log-level INFO \
    --retries 10 \
    --low-level-retries 10 \
    --poll-interval 10m \
    --s3-chunk-size 64M \
    --s3-upload-cutoff 64M
Нажмите, чтобы развернуть и увидеть больше

Описание параметров rclone смотрите под спойлером.

Для проверки скорости записи можно воспользоваться утилитой dd:

BASH
dd if=/dev/urandom of=./Storage/s3/bigfile.bin bs=10M count=10
Нажмите, чтобы развернуть и увидеть больше

Ниже на скриншоте пример записи при обычном монтировании и с дополнительными параметрами:

Автоматическое монтирование S3

Для автоматического запуска процесса монтирования вновь воспользуемся Systemd.

Создаём файл юнита:

BASH
mkdir -vp ~/.config/systemd/user

vim  ~/.config/systemd/user/s3-storage-1.service
Нажмите, чтобы развернуть и увидеть больше

Наполняем:

INI
[Unit]
Description=Rclone S3 mount
After=network-online.target
Wants=network-online.target

[Service]
Type=simple

ExecStartPre=/usr/bin/sleep 5

ExecStart=/usr/bin/rclone mount \
    s3-storage-1:/data /home/ivan/Storage/s3 \
    --dir-cache-time 48h \
    --vfs-cache-mode full \
    --vfs-cache-max-size 10G \
    --vfs-cache-max-age 24h \
    --vfs-write-back 5s \
    --vfs-read-chunk-size 128M \
    --vfs-read-chunk-size-limit 1G \
    --buffer-size 128M \
    --transfers 8 \
    --checkers 8 \
    --umask 002 \
    --log-level INFO \
    --retries 10 \
    --low-level-retries 10 \
    --poll-interval 10m \
    --s3-chunk-size 64M \
    --s3-upload-cutoff 64M

ExecStop=/usr/bin/fusermount -u -z /home/ivan/Storage/s3
ExecStopPost=/usr/bin/sleep 2
TimeoutStopSec=20

Restart=always
RestartSec=60

KillMode=mixed

[Install]
WantedBy=default.target
Нажмите, чтобы развернуть и увидеть больше

Под спойлером описание параметров юнита.

Перечитываем конфигурацию Systemd:

BASH
systemctl --user daemon-reload
Нажмите, чтобы развернуть и увидеть больше

Теперь активируем запуск/автозапуск юнита:

BASH
systemctl --user enable --now s3-storage-1.service

systemctl --user status s3-storage-1.service
Нажмите, чтобы развернуть и увидеть больше

Если всё ОК:

Проверяем точку монтирования:

BASH
findmnt --real

df -h ~/Storage/s3

ls -l ~/Storage/s3
Нажмите, чтобы развернуть и увидеть больше

Смотреть журнал сервиса так:

BASH
journalctl --user -u s3-storage-1.service
Нажмите, чтобы развернуть и увидеть больше

Теперь сервис будет стартовать при входе пользователя в систему.

Послесловие

Вот таким образом можно удобно монтировать и использовать удалённые хранилища в качестве локальной директории📁.

Для себя rclone я открыл относительно недавно и был приятно удивлён его функционалом. Буду и дальше изучать этот полезный инструмент🔧.

На этом сегодня всё. Спасибо, что читаете мой блог📝. Успехов!

Используемые материалы

Авторские права

Автор: Иван Чёрный

Ссылка: https://r4ven.me/storage/rclone-mount-montirovanie-setevyh-hranilishch-sftp-webdav-s3-kak-lokalnoy-direktorii-v-linux/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша