
Куда складывать резервные копии наших файлов? Ясное дело, в облако!
Сейчас существует множество различных сервисов, предоставляющих бесплатные и платные хранилища:
- Яндекс Диск
- Google Drive
- Dropbox
- Seafile
- Облако Mail.ru
- и прочие
Некоторые сервисы имеют собственные приложения, которые нужно установить, настроить, выбрать папку синхронизации. Но не всегда есть такие приложения для Linux, особенно для серверных вариантов. Смонтировал облачный диск в директорию, к примеру, /backup и пользуйся, загружай, удаляй. И это вполне можно сделать, если сервис предоставляет возможность подключения к облачному диску по протоколу WebDAV.
WebDAV (Web Distributed Authoring and Versioning) является расширением протокола HTTP/1.1. Позволяет обращаться к файлам на удаленном сервере и выполнять с ними операции чтения, записи, копирования, удаления и т.д.
Сегодня подключим облачное хранилище Mega в качестве директории /backup с помощью davfs2 в Ubuntu 22.04. Удобная штука, особенно если требуется автоматизировать резервное копирование документов в облако.
У облачного хранилища Mega есть ряд плюсов. На старте дают 20 ГБ места, которое можно увеличить на год различными достижениями. К примеру, просто установив десктопное приложение и мобильный клиент, получаем на год ещё 10 ГБ. Приглашая друзей, можно добавить ещё места.
Регистрируемся в Mega. Для входа имеем:
- e-mail в качестве логина
- пароль
Ещё один жирный плюс — поддержка из коробки консольной утилиты MEGA CMD. Это инструмент командной строки, который работает с вашим аккаунтом и данными MEGA. Он позволяет вам получать доступ к сервисам MEGA с помощью команд.
Примечательно, что для обычной загрузки файла пакет davfs2 не требуется, достаточной одной утилиты MEGA CMD. Загрузка файла в облако будет выглядеть как-то так:
#!/bin/bash
# Задаем формат даты
TIME=`date +%Y-%b`
FILES=/tmp/www.$TIME.tar.gz
MYSQL=/tmp/mysql.$TIME.sql.gz
# Создаем архив файлов
tar -czf $FILES -P /var/www/mysite
# Создаем архив базы MySQL
mysqldump -u username --password=mypassword dbname --ignore-table=mysql.event | gzip > $MYSQL
# Загружаем данные
mega-login email@example.com password
mega-put $FILES $MYSQL backups/mysite
mega-logout
# Удаляем файлы
rm $FILES
rm $MYSQL
Скрипт взял здесь:
https://lidar.asia/technologie/bekapim-dannye-servera-na-mega/
Однако, если нужно забэкапить целую директорию с помощью rsync, то пользоваться таким скриптом не получится. На помощь придут davfs2 и WebDAV. С помощью MEGA CMD мы поднимем WebDAV сервис на нашем сервере и смонтируем папку из Mega локально с помощью davfs2.
Установка и настройка davfs2
Устанавливаем пакет davfs2:
apt install davfs2
Сразу после установки пакет попробует настроиться. Настройку можно изменить позже, запустив команду "dpkg-reconfigure davfs2".
В данном случае нам нужно определиться, под каким именно пользователем мы будем монтировать облачный диск. Если пользователь непривилегированный, то нужно включить соответствующую опцию. У меня простой случай, я всё монтирование буду осуществлять от пользователя root, поэтому отвечаю No.
Для монтирования диска требуется отключить использование метода LOCK. Для этого выставим опцию use_locks в 0 в конфигурационном файле /etc/davfs2/davfs2.conf. Поскольку WebDAV сервер будет работать локально и подключаться к нему мы тоже будем локально на том же сервере, то аутентификация не потребуется. Устанавливаем ask_auth в 0.

Установка MEGA CMD

Находим команду для установки MEGA CMD под нашу ОС. У меня Ubuntu Server 22.04.

cd /tmp
wget https://mega.nz/linux/repo/xUbuntu_22.04/amd64/megacmd-xUbuntu_22.04_amd64.deb
apt install "$PWD/megacmd-xUbuntu_22.04_amd64.deb"
Устанавливаем пакет.

Проверяем что пакет установлен:
mega-help

Запуск сервера WebDAV
Пакет MEGA CMD установлен, с помощью него подключимся к Mega. В облаке в корне создаю папку Backup, в которую потом буду лить бэкапы.
Подключаемся к облаку:
mega-login email@example.com password
Подключаем директорию Backup в облаке по WebDAV:
mega-webdav /Backup

Директория подключилась и доступна локально по адресу:
http://127.0.0.1:4443/ecljyKBB/Backup
У вас будет другой путь, он уникален для каждой директории. Путь также можно посмотреть в web-интерфейсе Mega.
Для отключения:
mega-logout
До перезагрузки настройки WebDAV сохраняются. Отключить можно командой:
mega-webdav -d /Backup
Настройка учётных данных
Пароль и логин для подключения по WebDAV нам не нужен, но для совместимости укажем анонимные данные для подключения. Сохранять будем в файле /etc/davfs2/secrets. Этот файл является системным, доступ на чтение к нему имеет только пользователь root.
Если у вас какой-то другой пользователь, то учётные данные следует сохранить в $HOME/.davfs2/secrets, его нужно создавать вручную. Ввиду наличия секретной информации в этом файле, обязательно следует запретить другим пользователям системы производить его чтение, например, командой:
chmod 600 $HOME/.davfs2/secrets
Данные сохраняем в формате:
$PathToMountPoint $USER $PASSWORD
В нашем случае:
http://127.0.0.1:4443/ecljyKBB/Backup user password
Где user и password я от балды указал, без атрибутов не хочет работать.
Настройка опций монтирования
Придумываем куда будем монтировать облачную папку и создаём соответствующую директорию, например, /backup.
Редактируем /etc/fstab, добавляем строку:
http://127.0.0.1:4443/ecljyKBB/Backup /backup davfs user,rw,noauto 0 0
В данном случае я использую опцию noauto, чтобы папка не монтировалась при загрузке. Монтировать я её буду скриптом. Если вам требуется автоматическое подключение, то используйте _netdev, поскольку для монтирования облачной папки требуется сетевое подключение.
Монтируем
Вроде всё настроили проверим.
mega-login email@example.com password
mega-webdav /Backup
Монтируем директорию:
mount /backup
Ошибок нет. Перейдём в неё и создадим файл:
cd /backup
touch 123.txt

Проверяем облако.

Файл появился в облачной папке.
Выходим из папки и демонтируем:
cd ..
umount /backup
mega-logout

Всё работает, минимальная конфигурация для работы с облачным диском из Mega в Ubuntu 22.04 подготовлена.
Дополнительно
Яндекс Диск:
https://webdav.yandex.ru:443 /media/Yandex davfs user,rw,noauto 0 0
Облако Mail.ru:
mount.davfs -o username=example@yandex.ru https://webdav.cloud.mail.ru/Backup/cloud /backup
4shared:
https://webdav.4shared.com/ /media/4shared davfs user,rw,noauto 0 0
IDriveSync:
https://dav.idrivesync.com/ /media/IDriveSync davfs user,rw,noauto 0 0
OwnCloud:
http://owncloud.example.com/owncloud/files/webdav.php davfs user,rw,noauto 0 0
httpы://example.com/files/webdav.php /media/ownСloud davfs user,rw,noauto 0 0
OwnCube:
https://owncube.com/files/webdav.php /media/OwnCube davfs user,rw,noauto 0 0
Ссылки
https://github.com/meganz/MEGAcmd/blob/master/contrib/docs/WEBDAV.md
Примечание
davfs2 формирует кэш, который может разрастаться.
/var/cache/davfs2/
Я его вручную скриптом чищу после демонтирования шары. Сам он не чистится.
