- Зачем: - нужна удобная работа с документами на большом Яндекс Диске из Linux. - Что: - собраны выводы о поведении rclone mount на больших хранилищах. - добавлены команды установки, настройки, проверки и автозапуска в Ubuntu 26.04. - описаны ограничения кэша, внешних изменений и рекурсивного обхода. - Проверка: - выполнена проверка `git diff --cached --check`.
326 lines
17 KiB
Markdown
326 lines
17 KiB
Markdown
# 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. На копии документа проверить открытие, сохранение, появление файла в веб-
|
||
интерфейсе и повторное открытие из кэша.
|
||
|
||
Если эти проверки проходят, общий объём в несколько ТБ сам по себе не является
|
||
препятствием для постоянного подключения.
|