From 97193eaa4b0e755c6dc2d69b696f2845f0d6f0fe Mon Sep 17 00:00:00 2001 From: Dmitry Dementiev Date: Mon, 27 Jul 2026 22:16:33 +0300 Subject: [PATCH] =?UTF-8?q?docs(rclone):=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B0=20=D0=AF=D0=BD=D0=B4=D0=B5=D0=BA=D1=81=20?= =?UTF-8?q?=D0=94=D0=B8=D1=81=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F=20Ubuntu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - нужна удобная работа с документами на большом Яндекс Диске из Linux. - Что: - собраны выводы о поведении rclone mount на больших хранилищах. - добавлены команды установки, настройки, проверки и автозапуска в Ubuntu 26.04. - описаны ограничения кэша, внешних изменений и рекурсивного обхода. - Проверка: - выполнена проверка `git diff --cached --check`. --- ...07-27-rclone-yandex-mount-large-storage.md | 325 ++++++++++++++++++ 1 file changed, 325 insertions(+) create mode 100644 docs/research/2026-07-27-rclone-yandex-mount-large-storage.md diff --git a/docs/research/2026-07-27-rclone-yandex-mount-large-storage.md b/docs/research/2026-07-27-rclone-yandex-mount-large-storage.md new file mode 100644 index 0000000..ba40d08 --- /dev/null +++ b/docs/research/2026-07-27-rclone-yandex-mount-large-storage.md @@ -0,0 +1,325 @@ +# rclone mount и большой Яндекс Диск + +Дата проверки: 2026-07-27. + +## Вывод + +Обычный `rclone mount` не обходит весь Диск при запуске. Он создаёт корневой +узел и перечисляет каталог только при первом обращении к нему. Поэтому время +подключения почти не зависит от общего объёма и числа файлов. Первый просмотр +конкретного каталога зависит от числа элементов именно в этом каталоге. + +Для редкого чтения и редактирования документов на многотерабайтном Диске такой +режим подходит. Главные ограничения — медленные каталоги с очень большим числом +непосредственных детей, задержка появления изменений, сделанных через браузер, +и возможное ограничение скорости со стороны Яндекс API при массовой работе с +мелкими файлами. + +## Что происходит при запуске + +В исходниках rclone 1.74.4 конструктор VFS создаёт пустой корневой каталог. +Рекурсивное чтение запускается только при включённом `--vfs-refresh`. +Обычное чтение каталога вызывает `list.DirSorted` только для запрошенного пути. + +Кэш списка каталогов хранится в памяти. `--dir-cache-time` определяет срок его +жизни в рамках работающего процесса; после перезапуска посещённые каталоги +нужно перечислить заново. Дисковый VFS-кэш содержимого файлов сохраняется +отдельно и может переживать перезапуск. + +Источники: + +- [исходник VFS rclone 1.74.4](https://github.com/rclone/rclone/blob/v1.74.4/vfs/vfs.go); +- [исходник каталога VFS rclone 1.74.4](https://github.com/rclone/rclone/blob/v1.74.4/vfs/dir.go); +- [документация rclone mount](https://rclone.org/commands/rclone_mount/). + +## Что может вызвать полный обход + +Не следует включать: + +- `--vfs-refresh` — рекурсивно наполняет кэш каталогов после запуска; +- `--vfs-used-is-size` — вычисляет занятое место алгоритмом `rclone size` и + сканирует весь удалённый ресурс; +- автоматический `du`, `find`, полнотекстовый поиск или построение миниатюр от + корня подключённого Диска. + +Обычный `df` безопасен: backend Яндекс Диска поддерживает получение квоты через +операцию `about`, поэтому подсчёт всех файлов не нужен. + +Источник: [backend Яндекс Диска в rclone](https://rclone.org/yandex/). + +## Изменения через браузер + +VFS сразу знает об изменениях, сделанных через это же подключение. Изменения, +сделанные через браузер или другое устройство, могут быть не видны до истечения +`--dir-cache-time`, если backend не поддерживает уведомления об изменениях. +Практический отзыв владельца 2 ТБ Яндекс Диска показывает именно этот эффект: +при `--dir-cache-time 12h` внешние изменения долго оставались невидимыми. + +Источник: [обсуждение 2 ТБ Яндекс Диска на форуме rclone](https://forum.rclone.org/t/how-to-automatically-synchronize-files/30752). + +## Индексация GNOME + +Текущая система рекурсивно индексирует домашний каталог, но LocalSearch по +умолчанию пропускает точки монтирования. Подключение всё же лучше держать в +`/mnt/yandex` и не добавлять его в «Параметры → Поиск → Места поиска». + +Источник: [правила индексирования GNOME LocalSearch](https://gnome.pages.gitlab.gnome.org/localsearch/indexed-data.html). + +## Отзывы пользователей + +Повторяются следующие наблюдения: + +- сценарий «файлы по требованию» считают естественным применением + `rclone mount`; это живое сетевое представление, а не полноценная офлайн- + синхронизация; +- даже хранилища с очень большим общим числом файлов могут подключаться, пока + программы не пытаются рекурсивно обходить всё дерево; +- каталоги с десятками тысяч мелких файлов остаются чувствительными к сетевой + задержке; +- по Яндекс Диску встречаются сообщения об ограничении скорости и ошибках + блокировки при массовой загрузке мелких файлов. Основная подробная подборка + относится к 2022 году, поэтому это сигнал для пробного теста, а не доказательство + текущего ограничения; +- Яндекс официально гарантирует работу своих клиентов, а сторонние клиенты не + поддерживает. + +Источники: + +- [современное обсуждение files-on-demand](https://www.reddit.com/r/rclone/comments/1tlhtxm/im_trying_to_understand_rclone_mount_and/); +- [обсуждение 1,7 млрд мелких файлов](https://www.reddit.com/r/rclone/comments/1oc77za/); +- [подборка проблем rclone и Яндекс Диска](https://forum.rclone.org/t/rclone-and-yandex-disk-2022-09-summary/33162); +- [обсуждение 60 тысяч мелких файлов](https://www.reddit.com/r/rclone/comments/jhm1zn/). + +## Настройка на текущем компьютере + +Команды ниже рассчитаны на установленную здесь Ubuntu 26.04 LTS +`x86_64` (`amd64`). `fuse3` и `/usr/bin/fusermount3` уже установлены. + +### 1. Установка rclone + +В репозитории Ubuntu 26.04 сейчас находится rclone 1.60.1, тогда как актуальный +выпуск — 1.74.4. Разработчики rclone предупреждают, что пакеты дистрибутивов +часто отстают. Для монтирования лучше поставить текущий официальный пакет: + +```bash +curl -fL \ + https://downloads.rclone.org/rclone-current-linux-amd64.deb \ + -o /tmp/rclone-current-linux-amd64.deb +sudo apt install /tmp/rclone-current-linux-amd64.deb +rclone version +``` + +Snap-пакет не подходит: из-за его ограничений команда `rclone mount` не +поддерживается. + +Источник: [официальная инструкция по установке rclone](https://rclone.org/install/). + +### 2. Подключение учётной записи + +```bash +rclone config +``` + +В диалоге: + +1. Выбрать `n` — создать новое подключение. +2. Назвать его `yandex`. +3. Выбрать тип хранилища `yandex`. +4. `client_id` и `client_secret` оставить пустыми. +5. Разрешить вход через браузер и подтвердить доступ. +6. Сохранить подключение. + +Проверить конфигурацию без рекурсивного обхода Диска: + +```bash +rclone listremotes +rclone lsd yandex: +rclone about yandex: +rclone config file +chmod 600 "$HOME/.config/rclone/rclone.conf" +``` + +Последний файл содержит OAuth-токен. Его нельзя добавлять в Git или передавать +другим людям. Для первой проверки не следует запускать `rclone ls yandex:`: +в отличие от `lsd`, эта команда рекурсивно перечисляет все файлы. + +Источник: [настройка backend Яндекс Диска](https://rclone.org/yandex/). + +### 3. Пробное монтирование + +Создать постоянную точку монтирования и каталог кэша: + +```bash +sudo install -d -o "$USER" -g "$USER" -m 0750 /mnt/yandex +mkdir -p "$HOME/.cache/rclone/yandex" +``` + +Запустить rclone в терминале: + +```bash +rclone mount yandex: /mnt/yandex \ + --config "$HOME/.config/rclone/rclone.conf" \ + --cache-dir "$HOME/.cache/rclone/yandex" \ + --vfs-cache-mode full \ + --vfs-cache-max-size 30G \ + --vfs-cache-min-free-space 100G \ + --vfs-cache-max-age 720h \ + --vfs-write-back 10s \ + --dir-cache-time 1h \ + --poll-interval 0 \ + --attr-timeout 1s \ + --buffer-size 8M \ + --transfers 4 \ + --timeout 1h \ + --log-level INFO +``` + +Эти размеры выбраны с учётом текущего свободного места в `/home`: кэш ограничен +30 ГБ, а rclone начнёт освобождать его при остатке менее 100 ГБ. Ограничение +не абсолютно: открытые и ещё не загруженные файлы нельзя удалить из кэша. +`--timeout 1h` нужен на случай загрузки файлов больше примерно 5 ГиБ. + +Подключение работает в переднем плане. Для обычной остановки нажать `Ctrl+C`. +Если точка осталась подключённой после аварии: + +```bash +fusermount3 -u /mnt/yandex +``` + +### 4. Проверка перед автозапуском + +В другом терминале: + +```bash +findmnt /mnt/yandex +ls /mnt/yandex +``` + +Затем открыть копию документа, изменить её, закрыть редактор и подождать больше +10 секунд. После этого проверить файл через веб-интерфейс Яндекс Диска. Важно +именно закрыть документ: rclone отправляет изменения после закрытия файла и +истечения `--vfs-write-back`. + +Если rclone завершится раньше отправки, изменённый файл останется в VFS-кэше и +будет отправлен при следующем запуске с теми же параметрами. Поэтому нельзя +удалять каталог кэша после сбоя. Нельзя также одновременно запускать две копии +rclone для одного подключения с общим кэшем. + +### 5. Постоянный запуск через systemd + +После успешной ручной проверки создать файл +`~/.config/systemd/user/rclone-yandex.service`: + +```bash +mkdir -p "$HOME/.config/systemd/user" +vim "$HOME/.config/systemd/user/rclone-yandex.service" +``` + +И вставить в него: + +```ini +[Unit] +Description=Яндекс Диск через rclone +Documentation=https://rclone.org/commands/rclone_mount/ +Wants=network-online.target +After=network-online.target + +[Service] +Type=notify +ExecStart=/usr/bin/rclone mount yandex: /mnt/yandex \ + --config=%h/.config/rclone/rclone.conf \ + --cache-dir=%h/.cache/rclone/yandex \ + --vfs-cache-mode=full \ + --vfs-cache-max-size=30G \ + --vfs-cache-min-free-space=100G \ + --vfs-cache-max-age=720h \ + --vfs-write-back=10s \ + --dir-cache-time=1h \ + --poll-interval=0 \ + --attr-timeout=1s \ + --buffer-size=8M \ + --transfers=4 \ + --timeout=1h \ + --log-level=INFO +Restart=on-failure +RestartSec=10s +TimeoutStopSec=5min + +[Install] +WantedBy=default.target +``` + +В службе не нужен `--daemon`: за процессом следит systemd. `%h` раскрывается +самим systemd в абсолютный путь к домашнему каталогу; `~` и `$HOME` в +`ExecStart` использовать не следует. + +Включить службу: + +```bash +systemctl --user daemon-reload +systemctl --user enable --now rclone-yandex.service +systemctl --user status rclone-yandex.service +``` + +Смотреть журнал: + +```bash +journalctl --user -u rclone-yandex.service -f +``` + +Остановить или снова запустить: + +```bash +systemctl --user stop rclone-yandex.service +systemctl --user restart rclone-yandex.service +``` + +Если изменения, сделанные через браузер, нужны раньше истечения одного часа, +сбросить только кэш каталогов этой службы: + +```bash +systemctl --user kill \ + --kill-whom=main \ + --signal=HUP \ + rclone-yandex.service +``` + +Это не сканирует весь Диск: нужные каталоги будут перечитаны при следующем +обращении. Не следует посылать сигнал всем процессам rclone разом. + +На новых выпусках Ubuntu FUSE изредка блокируется AppArmor с ошибкой +`fusermount3: mount failed: Permission denied`. Не нужно заранее отключать +защиту. Если ошибка действительно появится, сначала проверить системный журнал +и применить актуальное для Ubuntu исправление из +[раздела Mounting on Linux](https://rclone.org/commands/rclone_mount/#mounting-on-linux). + +### Что здесь называется синхронизацией + +`rclone mount` не создаёт полную локальную копию нескольких терабайт. Это живое +представление Диска: файл скачивается по требованию, а закрытый изменённый файл +отправляется обратно через 10 секунд. Именно этот режим рекомендуется здесь. + +Команда `rclone sync` решает другую задачу: приводит каталог назначения к +каталогу-источнику и удаляет из назначения лишние файлы. Для всего большого +Диска она вызовет полный рекурсивный обход, поэтому в этой схеме её не нужно +запускать. + +Источник: [документация rclone mount и VFS-кэша](https://rclone.org/commands/rclone_mount/). + +## Рекомендация для проверки + +Сначала провести короткий пробный запуск без автозапуска: + +1. Не использовать `--vfs-refresh`, `--vfs-used-is-size` и рекурсивные + индексаторы. +2. Включить `--vfs-cache-mode full`. +3. Ограничить дисковый кэш примерно 20–30 ГБ. +4. Начать с `--dir-cache-time 1h`: это компромисс между повторными запросами и + видимостью изменений из браузера. +5. Замерить время подключения, открытия корня, нескольких обычных каталогов и + одного самого большого каталога. +6. На копии документа проверить открытие, сохранение, появление файла в веб- + интерфейсе и повторное открытие из кэша. + +Если эти проверки проходят, общий объём в несколько ТБ сам по себе не является +препятствием для постоянного подключения.