У каждого обладателя почты Яндекса есть как минимум 10 гигов Яндекс Диска, а то и больше. У меня лично 15, а у супруги и того больше, 30. По нынешним меркам казалось бы объемы мизерные, но когда речь идет о документах, личных фото и т.д., то этих объемов более чем достаточно для хранения чего-то важного.
В моем случае это база данных и файлы сайта. Пока сайт работал на хостинге, мне хватало резервных копий, которые делались хостером. По хорошему конечно и тут стоило бы заморочиться резервным копированием, чем чёрт не шутит. А тут вообще переехал на VPS. Тут вся ответственность ложится на меня, хостер дает возможность хранить три резервных копии. Да и незачем постоянно бэкапить весь VPS. Достаточно это сделать после внесений изменений в систему, например после настройки веб-сервера. А вот файлы сайта и базу данных есть смысл бэкапить отдельно. Именно это я и сохраняю на Яндекс Диск.
Тут вы наверняка скажете, тоже мне проблема. Подключил по WebDav и копируй что хочешь. На первый взгляд да, все просто. Только проблема в низкой скорости и максимальном объеме файла, который ограничен 250 мегабайтами. При использовании консольного клиента от Яндекс я столкнулся с проблемой, которая вытекает из синхронизации. Если что-то удалить из Яндекс Диска, то программа быстро это грохнет это там, откуда скопировала. Сей факт меня не устраивал. При каком-либо сбое мы можем утратить как оригинал, так и резервную копию.
В поисках альтернативы я наткнулся на утилиту для работы с Яндекс Диском ydcmd. Эта утилита не устраивает меня полностью, но она удобнее чем утилита от Яндекса. В частности меня не устраивает отсутствие аналога —delete у rsync. Этот параметр говорит rsync чтобы он не удалял в резервной копии файлы, которые были удалены в исходной. Таким образом если мы вдруг удалили по ошибке нужный файл, то сможем взять его из резервной копии.
Установка ydcmd
Данная утилита предназначена для работы системах Linux/FreeBSD. В моем случае это Ubuntu Server, где работает сайт моего клиента.
У меня Ubuntu 20.04 и я привожу команды именно для эжтой версии дистрибутива. Инструкции для более ранних релизов смотрите тут.
echo 'deb http://download.opensuse.org/repositories/home:/antonbatenev:/ydcmd/xUbuntu_20.04/ /' | sudo tee /etc/apt/sources.list.d/home:antonbatenev:ydcmd.list
curl -fsSL https://download.opensuse.org/repositories/home:antonbatenev:ydcmd/xUbuntu_20.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/home_antonbatenev_ydcmd.gpg > /dev/null
sudo apt update
sudo apt install ydcmd
Если все прошло успешно, получаем токен выполнив команду:
ydcmd token
Получаем ссылку, копируем её, открываем в браузере. В браузере получаем код состоящий из цифр и копируем этот код. Возвращаемся в терминал и запускаем команду:
ydcmd token 2099988
Где 2099988 — это код, который мы скопировали в браузере. Запускаем и получаем токен. Сохраняем этот токен.
Для работы с одним Яндекс Диском
nano ~/.ydcmd.cfg
Вставляем в файл следующие строки:
[ydcmd]
token = 1234567890
verbose = yes
Вместо 1234567890 вставляем свой токен и сохраняем. Затем устанавливаем права на этот файл, но это не обязательно.
chmod 0600 ~/.ydcmd.cfg
Для работы с несколькими дисками
Для работы с несколькими Яндекс Дисками нужно создать для каждого свой конфиг. Для удобства создадим папку, где соберем наши конфиги.
mkdir .ydcmd.cfg.d
Затем в этой директории создаем конфиг. Файлы создаем по инструкции выше. Для имени файла используем логин аккаунта.
Копирование файлов на диск
Для копирования файлов на диск необъходимо выполнить соответствующую команду:
ydcmd put <папка> <disk:/папка>
Данная команда не совсем подходит для создания и пополнения бэкапа, поскольку она каждый раз будет копировать файлы вне зависимости существуют они на Яндекс Диске или нет.
Чтобы экономить ресурсы и не копировать по сто раз одно и то же, мы добавим аргумент —rsync. Также для ускорения работы можно поиграться с аргументом —threads=<N> где <N> — это число процессов. Если необходимо синхронизировать директорию с большим количеством мелких файлов, то этот аргумент сильно ускорит процесс синхронизации.
Вот так выглядит команда для бэкапа файлов сайта:
ydcmd put —rsync —threads=10 ~/site <disk:/site>
Если вдруг решите эту команду запихать в cron,то для ydcmd нужно указать полный путь, то есть /usr/local/bin/ydcmd. Иначе команда просто не запустится.
Подробная информация о доступных командах на этой странице.