docs(rclone): добавлена настройка Яндекс Диска для Ubuntu
- Зачем: - нужна удобная работа с документами на большом Яндекс Диске из Linux. - Что: - собраны выводы о поведении rclone mount на больших хранилищах. - добавлены команды установки, настройки, проверки и автозапуска в Ubuntu 26.04. - описаны ограничения кэша, внешних изменений и рекурсивного обхода. - Проверка: - выполнена проверка `git diff --cached --check`.
This commit is contained in:
1 parent
2d4af081b8
commit
97193eaa4b
1 file changed
+325
@@ -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. На копии документа проверить открытие, сохранение, появление файла в веб-
|
||||
интерфейсе и повторное открытие из кэша.
|
||||
|
||||
Если эти проверки проходят, общий объём в несколько ТБ сам по себе не является
|
||||
препятствием для постоянного подключения.
|
||||
Reference in new issue
Block a user