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