В этой статья я расскажу, как выполняется настройка синхронизация в Яндекс Диск через rlocne. У Яндекс Диска есть консольный клиент, но мне не хватает в нем возможности синхронизации сразу нескольких директорий, которые располагаются на разных дисках.
Для настройки синхронизации я буду использовать Linux Mint 21.1 Cinnamon.
Предварительная настройка
В качестве опорного руководства я буду использовать вот эту страницу официальной документации.
Сначала необходимо установить клиент rclone:
curl https://rclone.org/install.sh | sudo bash
Выполним конфигурацию нового профиля:
rclone config
Сначала нужно создать новую конфигурацию:
n/s/q> n
Укажите имя конфигурации:
name> YDisk
Теперь необходимо выбрать шаблон конфигурации. На момент подготовки публикации шаблон для Яндекс диска числился под номером 47. Но при настройке в вашем окружении проверьте актуальность номера.
Storage> 47
Yandex Client Id и Yandex Client Secret оставляем пустыми:
Option client_id.
OAuth Client Id.
Leave blank normally.
Enter a value. Press Enter to leave empty.
client_id>
Option client_secret.
OAuth Client Secret.
Leave blank normally.
Enter a value. Press Enter to leave empty.
client_secret>
Выполнять расширенную конфигурацию я не буду:
y/n> n
Теперь нужно настроить автоматическую аутентификацию:
y/n> y
После этого откроется веб браузер, в котором необходимо выполнить аутентификацию:
Необходимо предоставить rclone соответствующие разрешения:
В случае успешного завершения автоматической аутентификации вы должны увидеть примерно такое сообщение в веб браузере:
Подтверждаем сохранение конфигурации:
y/e/d> y
Пример консольного вывода в случае успешного завершения конфигурации подключения к Яндекс Диску:
Current remotes:
Name Type
==== ====
YDisk yandex
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q>
Теперь нужно выйти из режима конфигурации:
e/n/d/r/c/s/q> q
Следующим шагом я покажу, как можно настроить список директорий для синхронизации.
Есть еще утилита графического управления конфигурациями. Если удобно, то можете использовать её:
rclone rcd --rc-web-gui
Синхронизация в Яндекс Диск
После завершения процедуры настройки подключения к Яндекс Диску вы можете посмотреть доступные дисковые квоты:
rclone about YDisk:
roman@mintwks:~$ rclone about YDisk:
Total: 2.010 TiB
Used: 532.964 GiB
Free: 1.489 TiB
roman@mintwks:~$
Или посмотреть список дриректорий:
rclone lsd --max-depth 1 YDisk:
roman@mintwks:~$ rclone lsd --max-depth 1 YDisk:
0 2023-05-19 22:03:19 -1 Inst
0 2022-11-24 22:01:28 -1 Скрины
0 2022-11-25 08:51:06 -1 Фото
0 2022-11-22 13:46:59 -1 Фотокамера
Теперь нужно будет настроить скрипт, чтобы синхронизация в Яндекс Диск через rlocne выполнялась через cron. Rclone поддерживает большое количество вариантов синхронизации – от простого копирования файлов и директорий до непосредственно синхронизации содержимого директорий. Со всеми деталями и нюансами поддерживаемых команд можно ознакомится в официальном руководстве.
Мне будет достаточно простой синхронизации нескольких директорий на Яндекс Диск. Вот такой командой для каждой директории будет достаточно:
rclone sync /media/MULTIMEDIA/регистратор YDisk:/регистратор
, где “/media/MULTIMEDIA/регистратор” – путь до локальной директории. “YDisk:/регистратор” – путь до директории на Яндекс Диске.
Метод sync не только копирует в целевую директорию на Яндекс диске недостающие файлы, но и удаляет те файлы на Яндекс диске, которых нет в локальной директории. Очень обратите на этот нюанс внимание.
Для первоначальной отладки вы можете использовать флаг –progress, чтобы получить расширенную информацию о ходе синхронизации:
rclone sync /media/MULTIMEDIA/регистратор YDisk:/регистратор --progress
Самая первая синхронизация может длиться долго, т.к. rclone будет сверять каждый файл и заносить информацию о нем в свои метаданные. Последующая синхронизация при отсутствии изменений будет завершаться за пару секунд.
roman@mintwks:~$ rclone sync /media/MULTIMEDIA/регистратор YDisk:/регистратор --progress
Transferred: 0 B / 0 B, -, 0 B/s, ETA -
Checks: 280 / 280, 100%
Elapsed time: 2.4s
roman@mintwks:~$
У меня получился вот такой довольно тривиальный скрипт для синхронизации нужных мне директорий через задание cron:
nano scripts/synctoydisk.sh
#!/bin/bash
rclone sync /media/MULTIMEDIA/регистратор YDisk:/регистратор
rclone sync /media/MULTIMEDIA/Скрины YDisk:/Скрины
rclone sync /media/MULTIMEDIA/Фото YDisk:/Фото
Или его более интерактивный вариант для ручного запуска:
nano scripts/synctoydisk_interactive.sh
#!/bin/bash
rclone sync /media/MULTIMEDIA/регистратор YDisk:/регистратор --progress
rclone sync /media/MULTIMEDIA/Скрины YDisk:/Скрины --progress
rclone sync /media/MULTIMEDIA/Фото YDisk:/Фото --progress
Не забудьте выдать разрешения на запуск для скриптов:
chmod +x scripts/synctoydisk*
ls -l scripts/synctoydisk*
roman@mintwks:~$ chmod +x scripts/synctoydisk*
roman@mintwks:~$ ls -l scripts/synctoydisk*
-rwxrwxr-x 1 roman roman 556 Jun 3 22:08 scripts/synctoydisk_interactive.sh
-rwxrwxr-x 1 roman roman 322 Jun 3 22:03 scripts/synctoydisk.sh
roman@mintwks:~$
Самый заключительный этап – это настройка запуска синхронизации по расписанию. Поскольку мой компьютер не включен 24/7, то я буду использовать anacron. В Linux Mint 21 anacron уже установлен. Ядобавлю задание, которое будет запускаться раз в день:
cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
HOME=/root
LOGNAME=root
# These replace cron's entries
1 5 cron.daily run-parts --report /etc/cron.daily
7 10 cron.weekly run-parts --report /etc/cron.weekly
@monthly 15 cron.monthly run-parts --report /etc/cron.monthly
@daily 10 synctoydisk /bin/bash /home/roman/scripts/synctoydisk.sh
Поскольку задания anacron выполняются от пользователя root, то необходимо в скопировать конфигурационный файл в соответствующую директорию для окружения пользователя root:
cp /home/roman/.config/rclone/rclone.conf /root/.config/rclone
После выполнения всех этих шагов синхронизация в Яндекс Диск через rlocne должна выполнять каждый день автоматически.