В этой статье рассмотрим процесс монтирования удалённых сетевых хранилищ SFTP, WebDAV и S3 как обычной директории в файловой системе Linux.
Делать мы этом будем с помощью крутой утилиты rclone👩🚀👩🚀.
🖐️Эй!
Подписывайтесь на наш телеграм @r4ven_me📱, чтобы не пропустить новые публикации на сайте😉. А если есть вопросы или желание пообщаться по тематике — заглядывайте в Вороний чат @r4ven_me_chat🧐.
Коротко про 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 + все шаги нужного раздела, вы получите рабочую конфигурацию.
А теперь перейдем к практике👨💻.
📝 Все примеры из статьи выполнялись в среде дистрибутива Debian GNU/Linux версии 13.
Установка rclone
Утилита rclone доступна в стандартных репозиториях. Открываем терминал и выполняем:
sudo apt update && sudo apt install fuse rcloneИзначально rclone предназначен для прямого обмена файлами между разными хранилищами: move|copy|sync. Но в этой статье речь пойдет лишь о команде mount, которая позволяет монтировать разные типы хранилищ, как обычной директории.
Монтирование SFTP как директории
📝 В примере ниже мы будем монтировать удалённую директорию Linux сервера. Но данный способ актуален для любого SFTP.
Первым делом необходимо добавить в конфиг rclone реквизиты доступа к удалённому хранилищу SFTP (можно указывать несколько инстансов):
mkdir -vp ~/.config/rclone
vim ~/.config/rclone/rclone.confНаполняем:
[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-storage-1]- произвольное имя вашего удаленного хранилища;host- IP-адрес или доменное имя SFTP-сервера;user- имя пользователя для входа;port- порт SFTP (по умолчанию 22);#pass- обфусцированный пароль SSH пользователя - не рекомендую хранить его тут, лучше использовать для авторизации SSH ключ, но если сильно нужно, то обфусцируйте его командой:rclone obscure 'SecretPassword';key_file= SSH ключ, создать его можно командойssh-keygen -t ed25519 -f /home/ivan/.ssh/id_ed25519;md5sum_commandиsha1sum_command- команды для проверки целостности файлов на удаленном сервере;
💡 Совет
Доступных параметров rclone больше, узнать их можно при создании конфига в интерактивном режиме:
rclone configРучное монтирование SFTP
Сперва создадим локальную директорию, куда будем монтировать удалённую:
mkdir -vp ~/Storage/sftpТеперь для ручного монтирования удалённой директории в локальную выполните такую команду:
☝️ Если вы используете самоподписанные сертификаты, добавьте параметр --no-check-certificate.
rclone mount --daemon sftp-storage-1:/home/ivan/data ~/Storage/sftpГде:
mount- команда монтирования;--daemon- запускает процессrcloneв фоновом режиме;sftp-storage-1:/home/ivan/data- удаленный источник (SFTP-хранилищеsftp-storage-1, путь/home/ivan/data);~/Storage/sftp- локальная точка монтирования.
☝️ Важно, чтобы директория /home/ivan/data существовала на удалённом хосте. Либо просто смонтируйте корень.
📝 Флаг --daemon используется для работы rclone в фоновом режиме, что освобождает консоль и подавляет вывод системных сообщений в стандартный вывод. Для дебага в случае проблем его стоит убрать.
Проверяем монтирование:
findmnt --real
df -h ~/Storage/sftp
ls -l ~/Storage/sftp
Для отмонтирования директории выполните команду fusermount с флагом -u (unmount):
fusermount -u ~/Storage/sftpВроде бы ничего особенного, но вся суть подобного монтирования в дополнительных параметрах, их может быть много. Например:
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 смотрите под спойлером.
Спойлер
--dir-cache-time 48h- время кэширования содержимого директорий;--vfs-cache-mode full- включает полное кэширование файлов на диске для чтения и записи;--vfs-cache-max-size 10G- максимальный размер кэша на диске;--vfs-cache-max-age 24h- максимальное время хранения файлов в кэше без доступа;--vfs-write-back 5s- задержка перед записью измененных данных из кэша обратно на удаленный ресурс (5 секунд);--vfs-read-chunk-size 128M- размер блоков, которыми rclone читает данные в кэш;--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-сервере;--sftp-disable-hashcheck- отключает проверку хешей файлов для SFTP.
⚠️Предупреждение
Пожалуйста, имейте в виду, что оптимизация - вещь тонкая. Значительно изменяя какой-либо параметр, вы можете навредить другим частям вашей системы. Подходите к этому обдуманно.
Рекомендую изучить нужные параметры детальнее в оф. документации:
Для проверки скорости записи можно воспользоваться утилитой dd:
dd if=/dev/urandom of=./Storage/sftp/bigfile.bin bs=100M count=10📝 Команда выше создаст файл размером 1ГБ и выведет статистику по скорости записи.
Ниже на скриншоте пример записи при обычном монтировании и с дополнительными параметрами:

❗️ Осторожно
Пожалуйста, имейте в виду, что дополнительная скорость обеспечена кэшем локальной файловой системы. На удалённом хосте файл может появиться с задержкой. Всё зависит от типа бэкенда и скорости сети.
📝 Примечание
Отдельно стоит отметить кейс, когда uid/gid вашего локального и удалённого пользователя отличаются, и запись в смонтированную директорию будет невозможна. При таком раскладе может помочь включение параметра user_allow_other в вашей системе FUSE и использование ключа --allow-other в rclone.
sudo vim /etc/fuse.conf
rclone mount --daemon --allow-other sftp-storage-1:/home/ivan/data ~/Storage/sftpАвтоматическое монтирование SFTP
Для автоматического запуска процесса монтирования воспользуемся системой инициализации Systemd.
Создаём файл юнита командой:
mkdir -vp ~/.config/systemd/user
vim ~/.config/systemd/user/sftp-storage-1.serviceНаполняем:
[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☝️ Не забудьте указать свои значения.
Под спойлером описание параметров юнита.
Спойлер
[Unit]:Description- человекочитаемое описание юнита;After=network-online.target- указывает, что этот юнит должен запускаться после того, как сеть будет полностью доступна;Wants=network-online.target- выражает “желание” запуститьnetwork-online.target, но не является строгой зависимостью (юнит запустится, даже еслиnetwork-online.targetне стартует);
[Service]:Type=simple- основной процесс юнита запускается напрямую командойExecStart;ExecStartPre=/usr/bin/sleep 5- команда, выполняемая передExecStart(задержка 5 секунд);ExecStart=/usr/bin/rclone ...- основная команда для запуска сервиса (rclone mount);ExecStop=/usr/bin/fusermount -u -z ...- команда для остановки сервиса (размонтированиеrclone);ExecStopPost=/usr/bin/sleep 2- команда, выполняемая после ExecStop (задержка 2 секунды);TimeoutStopSec=20- максимальное время (в секундах) для выполненияExecStop;Restart=always- сервис будет перезапущен, если он некорректно завершится;RestartSec=60- задержка в 60 секунд перед перезапуском;KillMode=mixed- определяет, как systemd будет убивать процессы сервиса;
[Install]:WantedBy=default.target- указывает, что этот юнит будет запущен при загрузке системы, если он включен (systemctl enable).
📝 Обратите внимание, что в параметре ExecStart юнита убран флаг --daemon, т.к. сервис и его вывод будет обслуживать Systemd. А также везде указаны абсолютные пути к директориям - это важно.
Перечитываем конфигурацию Systemd:
systemctl --user daemon-reload☝️ Если удалённое хранилище смонтировано, отмонтируйте:
fusermount -u ~/Storage/sftpТеперь активируем запуск/автозапуск юнита:
systemctl --user enable --now sftp-storage-1.service
systemctl --user status sftp-storage-1.serviceЕсли всё ОК:

Проверяем точку монтирования:
findmnt --real
df -h ~/Storage/sftp
ls -l ~/Storage/sftpСмотреть журнал сервиса так:
journalctl --user -u sftp-storage-1.serviceТеперь сервис будет стартовать при входе пользователя в систему.
💡 Совет
Если вам требуется монтировать хранилище при запуске ОС, просто создайте юнит от имени root пользователя и добавьте в параметры rclone, переопределяющие uid/gid на нужного пользователя --uid 1000 --gid 1000.
Монтирование WebDAV как директории
📝 Пример монтирования WebDAV ниже также актуален и для публичных хранилищ, таких как облако мейл или ядиск.
Тут также нужно добавить в конфиг rclone реквизиты доступа к удалённому хранилищу WebDAV (можно указывать несколько инстансов):
mkdir -vp ~/.config/rclone
vim ~/.config/rclone/rclone.confНаполняем:
[webdav-storage-1]
type = webdav
url = https://webdav.r4ven.me/
vendor = auto
user = ivan@r4ven.me
pass = ObfuscatedSecretPassword📝 Пароль указывается в обфусцированном виде. Получить такой можно командой:
rclone obscure 'SecretPassword'Описание параметров:
[webdav-storage-1]- произвольное имя удаленного ресурса;type = webdav- указывает rclone, что это конфигурация для хранилища типа WebDAV;url = https://webdav.r4ven.me/- полный URL-адрес вашего WebDAV-сервера. Это может быть корневой URL или путь к конкретной папке, которую вы хотите монтировать;vendor = auto- позволяет rclone автоматически определять тип WebDAV-сервера (например, Nextcloud, Owncloud, SharePoint). Тут можно явно указать тип, если известно;user = ivan@r4ven.me- имя пользователя, используемое для аутентификации;pass = ObfuscatedSecretPassword- обфусцированный пароль.
Вывод команды указать в качестве pass в конфиге.
💡 Совет
Доступных параметров rclone больше, узнать их можно при создании конфига в интерактивном режиме:
rclone configРучное монтирование WebDAV
Сперва создадим локальную директорию, куда будем монтировать удалённую:
mkdir -vp ~/Storage/webdavТеперь для ручного монтирования удалённой директории в локальную выполните такую команду:
☝️ Если вы используете самоподписанные сертификаты, добавьте параметр --no-check-certificate.
rclone mount --daemon webdav-storage-1:/data ~/Storage/webdavГде:
mount- команда монтирования;--daemon- запускает процессrcloneв фоновом режиме;webdav-storage-1:/data- удаленный источник (WebDAV-директория);~/Storage/webdav- локальная точка монтирования.
☝️ Важно, чтобы директория /data существовала на WebDAV сервере. Либо просто смонтируйте корень.
📝 Флаг --daemon используется для работы rclone в фоновом режиме, что освобождает консоль и подавляет вывод системных сообщений в стандартный вывод. Для дебага в случае проблем его стоит убрать.
Проверяем монтирование:
findmnt --real
df -h ~/Storage/webdav
ls -l ~/Storage/webdav
Для отмонтирования директории выполните команду fusermount с флагом -u (unmount):
fusermount -u ~/Storage/webdavТут также можно использовать множество параметров rclone. Пример:
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 смотрите под спойлером.
Спойлер
--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- размер блоков, которыми rclone читает данные в кэш;--vfs-read-chunk-size-limit 1G- максимальный размер блока для чтения больших файлов;--buffer-size 128M- размер буфера для операций чтения/записи;--transfers 8- количество параллельных операций передачи файлов;--checkers 8- количество параллельных операций проверки файлов;--umask 002- устанавливает права доступа для новых файлов/директорий;--log-level INFO- уровень детализации логов;--retries 10- количество повторных попыток для операций, которые могут завершиться ошибкой;--low-level-retries 10- количество повторных попыток для низкоуровневых операций;
⚠️Предупреждение
Вновь напоминаю: пожалуйста, имейте в виду, что оптимизация - вещь тонкая. Значительно изменяя какой-либо параметр, вы можете навредить другим частям вашей системы. Подходите к этому обдуманно.
Рекомендую изучить нужные параметры детальнее в оф. документации:
Для проверки скорости записи можно воспользоваться утилитой dd:
dd if=/dev/urandom of=./Storage/webdav/bigfile.bin bs=10M count=10📝 Команда выше создаст файл размером 100МБ и выведет статистику по скорости записи.
Ниже на скриншоте пример записи при обычном монтировании и с дополнительными параметрами:

❗️ Осторожно
Обращаю ваше внимание на то, что дополнительная скорость обеспечена кэшем локальной файловой системы. На удалённом хосте файл может появиться с задержкой. Всё зависит от типа бэкенда и скорости сети.
Автоматическое монтирование WebDAV
Для автозапуска процесса монтирования также используем Systemd.
Создаём файл юнита командой:
mkdir -vp ~/.config/systemd/user
vim ~/.config/systemd/user/webdav-storage-1.serviceНаполняем:
[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☝️ Не забудьте указать свои значения.
Под спойлером описание параметров юнита.
Спойлер
[Unit]:Description- человекочитаемое описание юнита;After=network-online.target- указывает, что этот юнит должен запускаться после того, как сеть будет полностью доступна;Wants=network-online.target- выражает “желание” запуститьnetwork-online.target, но не является строгой зависимостью (юнит запустится, даже еслиnetwork-online.targetне стартует);
[Service]:Type=simple- основной процесс юнита запускается напрямую командойExecStart;ExecStartPre=/usr/bin/sleep 5- команда, выполняемая передExecStart(задержка 5 секунд);ExecStart=/usr/bin/rclone ...- основная команда для запуска сервиса (rclone mount);ExecStop=/usr/bin/fusermount -u -z ...- команда для остановки сервиса (размонтированиеrclone);ExecStopPost=/usr/bin/sleep 2- команда, выполняемая после ExecStop (задержка 2 секунды);TimeoutStopSec=20- максимальное время (в секундах) для выполненияExecStop;Restart=always- сервис будет перезапущен, если он некорректно завершится;RestartSec=60- задержка в 60 секунд перед перезапуском;KillMode=mixed- определяет, как systemd будет убивать процессы сервиса;
[Install]:WantedBy=default.target- указывает, что этот юнит будет запущен при загрузке системы, если он включен (systemctl enable).
📝 Обратите внимание, что в параметре ExecStart юнита убран флаг --daemon, т.к. сервис и его вывод будет обслуживать Systemd. А также везде указаны абсолютные пути к директориям - это важно.
Перечитываем конфигурацию Systemd:
systemctl --user daemon-reload☝️ Если удалённое хранилище смонтировано, отмонтируйте.
fusermount -u ~/Storage/webdavТеперь активируем запуск/автозапуск юнита:
systemctl --user enable --now webdav-storage-1.service
systemctl --user status webdav-storage-1.serviceЕсли всё ОК:

Проверяем точку монтирования:
findmnt --real
df -h ~/Storage/webdav
ls -l ~/Storage/webdavСмотреть журнал сервиса так:
journalctl --user -u webdav-storage-1.serviceТеперь сервис будет стартовать при входе пользователя в систему.
💡 Совет
Если вам требуется монтировать хранилище при запуске ОС, просто создайте юнит от имени root пользователя и добавьте в параметры rclone, переопределяющие uid/gid на нужного пользователя --uid 1000 --gid 1000.
Монтирование S3 как директории
📝 Ниже будет пример монтирования S3 хранилища на основе MinIO. Но данный способ подойдет для любых S3-совместимых хранилищ.
Вновь начинаем с конфига rclone. Открываем файл и добавляем реквизиты для инстанса S3 (можно указывать несколько инстансов):
mkdir -vp ~/.config/rclone
vim ~/.config/rclone/rclone.confНаполняем:
[s3-storage-1]
type = s3
provider = Minio
endpoint: https://s3.r4ven.me:443
access_key_id: ivan
secret_access_key: SecretAccessKey
bucket: data📝 secret_access_key указывается в открытом виде.
Описание параметров:
[s3-storage-1]- произвольное имя удаленного ресурса;type = s3- указывает rclone, что это конфигурация для хранилища типа S3;provider = Minio- название провайдера S3;endpoint: https://s3.r4ven.me:443- URL-адрес вашего S3-инстанса;access_key_id: ivan- Access key для бакета;secret_access_key: SecretAccessKey- Secret key для доступа к бакету;bucket: data- соответственно, название существующего бакета.
💡 Совет
Доступных параметров и провайдеров rclone больше, узнать их можно при создании конфига в интерактивном режиме:
rclone configРучное монтирование S3
Cоздаём локальную директорию, куда будем монтировать удалённую:
mkdir -vp ~/Storage/s3Команда монтирования идентична предыдущим:
☝️ Если вы используете самоподписанные сертификаты, добавьте параметр --no-check-certificate.
rclone mount --daemon s3-storage-1:/data ~/Storage/s3Где:
mount- команда монтирования;--daemon- запускает процессrcloneв фоновом режиме;s3-storage-1:/data- удаленный источник (S3-инстанс);~/Storage/s3- локальная точка монтирования.
☝️ Важно, чтобы бакет data существовал на S3 сервере. Либо просто смонтируйте корень /.
📝 Флаг --daemon используется для работы rclone в фоновом режиме, что освобождает консоль и подавляет вывод системных сообщений в стандартный вывод. Для дебага в случае проблем его стоит убрать.
Проверяем монтирование:
findmnt --real
df -h ~/Storage/s3
ls -l ~/Storage/s3
Для отмонтирования директории выполните команду fusermount с флагом -u (unmount):
fusermount -u ~/Storage/s3Тут также доступно множество параметров rclone. Пример:
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 смотрите под спойлером.
Спойлер
--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- размер блоков, которыми rclone читает данные в кэш;--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- устанавливает интервал, с которымrcloneбудет проверять удаленное хранилище на предмет изменений. Это помогает обновлять кэш директорий (–dir-cache-time) раньше, чем он истечет, если изменения происходят на S3 извне;--s3-chunk-size 64M- определяет размер частей при многочастной загрузке (multipart upload) на S3;--s3-upload-cutoff 64M- порог, после которого rclone начинает использовать многочастную загрузку. Должен быть равен или больше--s3-chunk-size.
⚠️Предупреждение
Вновь напоминаю: пожалуйста, имейте в виду, что оптимизация - вещь тонкая. Значительно изменяя какой-либо параметр, вы можете навредить другим частям вашей системы. Подходите к этому обдуманно.
Рекомендую изучить нужные параметры детальнее в оф. документации:
Для проверки скорости записи можно воспользоваться утилитой dd:
dd if=/dev/urandom of=./Storage/s3/bigfile.bin bs=10M count=10📝 Команда выше создаст файл размером 100МБ и выведет статистику по скорости записи.
Ниже на скриншоте пример записи при обычном монтировании и с дополнительными параметрами:

❗️ Осторожно
Обращаю ваше внимание на то, что дополнительная скорость обеспечена кэшем локальной файловой системы. На удалённом хосте файл может появиться с задержкой. Всё зависит от типа бэкенда и скорости сети.
Автоматическое монтирование S3
Для автоматического запуска процесса монтирования вновь воспользуемся Systemd.
Создаём файл юнита:
mkdir -vp ~/.config/systemd/user
vim ~/.config/systemd/user/s3-storage-1.serviceНаполняем:
[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☝️ Не забудьте указать свои значения.
Под спойлером описание параметров юнита.
Спойлер
[Unit]:Description- человекочитаемое описание юнита;After=network-online.target- указывает, что этот юнит должен запускаться после того, как сеть будет полностью доступна;Wants=network-online.target- выражает “желание” запуститьnetwork-online.target, но не является строгой зависимостью (юнит запустится, даже еслиnetwork-online.targetне стартует);
[Service]:Type=simple- основной процесс юнита запускается напрямую командойExecStart;ExecStartPre=/usr/bin/sleep 5- команда, выполняемая передExecStart(задержка 5 секунд);ExecStart=/usr/bin/rclone ...- основная команда для запуска сервиса (rclone mount);ExecStop=/usr/bin/fusermount -u -z ...- команда для остановки сервиса (размонтированиеrclone);ExecStopPost=/usr/bin/sleep 2- команда, выполняемая после ExecStop (задержка 2 секунды);TimeoutStopSec=20- максимальное время (в секундах) для выполненияExecStop;Restart=always- сервис будет перезапущен, если он некорректно завершится;RestartSec=60- задержка в 60 секунд перед перезапуском;KillMode=mixed- определяет, как systemd будет убивать процессы сервиса;
[Install]:WantedBy=default.target- указывает, что этот юнит будет запущен при загрузке системы, если он включен (systemctl enable).
📝 Обратите внимание, что в параметре ExecStart юнита убран флаг --daemon, т.к. сервис и его вывод будет обслуживать Systemd. А также везде указаны абсолютные пути к директориям - это важно.
Перечитываем конфигурацию Systemd:
systemctl --user daemon-reload☝️ Если удалённое хранилище смонтировано, отмонтируйте.
fusermount -u ~/Storage/s3Теперь активируем запуск/автозапуск юнита:
systemctl --user enable --now s3-storage-1.service
systemctl --user status s3-storage-1.serviceЕсли всё ОК:

Проверяем точку монтирования:
findmnt --real
df -h ~/Storage/s3
ls -l ~/Storage/s3Смотреть журнал сервиса так:
journalctl --user -u s3-storage-1.serviceТеперь сервис будет стартовать при входе пользователя в систему.
💡 Совет
Если вам требуется монтировать хранилище при запуске ОС, просто создайте юнит от имени root пользователя и добавьте в параметры rclone, переопределяющие uid/gid на нужного пользователя --uid 1000 --gid 1000.
Послесловие
Вот таким образом можно удобно монтировать и использовать удалённые хранилища в качестве локальной директории📁.
Для себя rclone я открыл относительно недавно и был приятно удивлён его функционалом. Буду и дальше изучать этот полезный инструмент🔧.
На этом сегодня всё. Спасибо, что читаете мой блог📝. Успехов!


