Files
dotfiles/docs/research/2026-07-27-rclone-yandex-mount-large-storage.md
T
ddadmin 97193eaa4b docs(rclone): добавлена настройка Яндекс Диска для Ubuntu
- Зачем:
  - нужна удобная работа с документами на большом Яндекс Диске из Linux.
- Что:
  - собраны выводы о поведении rclone mount на больших хранилищах.
  - добавлены команды установки, настройки, проверки и автозапуска в Ubuntu 26.04.
  - описаны ограничения кэша, внешних изменений и рекурсивного обхода.
- Проверка:
  - выполнена проверка `git diff --cached --check`.
2026-07-27 22:16:33 +03:00

326 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. На копии документа проверить открытие, сохранение, появление файла в веб-
интерфейсе и повторное открытие из кэша.
Если эти проверки проходят, общий объём в несколько ТБ сам по себе не является
препятствием для постоянного подключения.