Монтирование облачного диска по WebDav

Авторы репозитория EntWare для роутеров на платформе Broadcom достигли определенного успеха в портировании файловой системы davfs2, при помощи которой становится возможным монтирование на роутер облачных хранилищ данных по протоколу WebDav. Данный протокол используется в таких сервисах как DropBox, Яндекс.Диск, Google Drive. Получить в свое распоряжение несколько лишних гигабайт свободного дискового пространства на роутере, встроенная память которого ограничена считанными мегабайтами – задача интересная.

А используя данные наработки, нетрудно пересобрать davfs2 также и для запуска на роутерах со стандартной прошивкой OpenWrt.

Изменения

Для того, чтобы собрать в OpenWrt Buildroot представленный в репозитории EntWare пакет davfs2, требуется внести в его файлы несколько незначительных изменений. В частности это касается используемых путей в основном Makefile, а также требуется добавление нового патча, исключающего зависимость от sys/xattr.h, который отсутствует в OpenWrt.

Скачать модифицированный пакет davfs2 для сборки в OpenWrt можно в нашем хранилище fs.erinome.net.

Сборка

Для сборки необходимо распаковать скачанный пакет в каталог ./trunk/package/davfs2 в стандартном Buildroot’е OpenWrt, после чего выполнить make menuconfig и выбрать пакет davfs2, расположенный в разделе Network -> Filesystems. Стоит обратить внимание, что выбор данного пакета автоматически отметит также пакеты libneon, libfuse, libopenssl для решения зависимостей.

Сборка производится в обычном автоматическом режиме.

Настройка

Для настройки пакета davfs2 используются следующие конфигурационные файлы:

/etc/davfs2/davfs2.conf
/etc/davfs2/secrets
Первый содержит основные настройки davfs2, во втором содержится аутентификационная информация для возможности автоматически смонтировать сетевое хранилище.

Перед монтированием хранилища необходимо изменить следующие настройки в davfs2.conf:

dav_user        nobody            # system wide config file only
dav_group       nogroup            # system wide config file only
Данные настройки определяют имя пользователя и группу, от имени которых будет работать davfs2.
cache_dir       /srv/davfs2/cache # system wide cache
Данная настройка задает абсолютный путь к каталогу кэша, который будет использоваться при работе davfs2. Использование кэша является обязательным, его нельзя отключить. Важно! Путь должен указывать либо на каталог на подключенном к роутеру USB-носителе, либо на каталог в разделе /tmp. Это связано с особенностью логики работы davfs2. Указанный путь должен существовать.

Строки в файле /etc/davfs2/secrets имеют два возможных варианта структуры:

/path/to/mount/point your_login your_password
# либо
https://webdav.server.com/ your_login your_password
Если при монтировании файловой системы вы укажете точку монтирования или адрес сервера, совпадающий с имеющимся в /etc/davfs2/secrets, то автоматически будут использоваться указанные там имя пользователя и пароль.

Монтирование

Для монтирования облачного хранилища используется утилита mount.davfs:

# mount.davfs https://webdav.server.com /path/to/mount/point
Например, монтирование сетевого диска Яндекса может выглядеть так:
# mount.davfs https://webdav.yandex.ru /mnt
Please enter the username to authenticate with server
https://webdav.yandex.ru or hit enter for none.
  Username: login
Please enter the password to authenticate user login with server
https://webdav.yandex.ru or hit enter for none.
  Password:
mount.davfs: the server certificate is not trusted
  issuer:      ld, yandex, ru
  subject:     ITO, Yandex, Moscow, Russia, RU
  identity:    webdav.yandex.ru
  fingerprint: 32:75:bd:91:e3:70:28:41:6d:e1:37:a1:0b:6b:26:77:93:7b:11:da
You only should accept this certificate, if you can
verify the fingerprint! The server might be faked
or there might be a man-in-the-middle-attack.
Accept certificate for this session? [y,N] y
# 
К сожалению, по умолчанию сертификаты не принимаются и требуют ручной установки. При желании вы можете самостоятельно разобраться, как научить davfs2 без ругани принимать предлагаемый сертификат. :)

После выполнения данной команды в точке /mnt будет примонтировано облачное хранилище Яндекс.Диск. Проверить это и посмотреть доступный объем свободного пространства можно командой df -h:

Filesystem                Size      Used Available Use% Mounted on
rootfs                    2.4M      1.0M      1.4M  42% /
/dev/root                 4.3M      4.3M         0 100% /rom
tmpfs                    30.2M    812.0K     29.4M   3% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/mtdblock4            2.4M      1.0M      1.4M  42% /overlay
overlayfs:/overlay        2.4M      1.0M      1.4M  42% /
/dev/sda1               133.1M     19.9M    106.5M  16% /optware
/dev/sda2                 7.3G      4.2G      2.7G  61% /srv
https://webdav.yandex.ru
                        260.0G     55.5M    259.9G   0% /mnt
Определение квоты доступного дискового пространства выполняется экспериментальным запросом USERINFO и, в случае сетевого диска Яндекса, работает корректно. (Да, здесь именно 260 ГБ.)

Для автоматизации процесса монтирования без ручного ввода логина и пароля необходимо заполнить файл /etc/davfs2/secrets, а для борьбы с ручным подтверждением сертификата можно использовать стандартную утилиту yes. Тогда монтирование диска может выглядеть следующим образом:

# yes | mount.davfs https://webdav.yandex.ru /mnt

Особенности работы с кэшем

При взгляде со стороны смонтированная облачная файловая система ничем не отличается от локальных разделов. Но на самом деле все операции с файлами проводятся над кэшем.

Например, при запросе на редактирование файла из облачного хранилища, сначала он скачивается в cache_dir, а лишь затем происходит его открытие из данного каталога. При завершении редактирования, файл сначала сохраняется в кэше и лишь затем оказывается загружен обратно в облачное хранилище. Другой пример: при копировании с подключенного к роутеру USB-диска файла в облачное хранилище, данный файл сначала копируется в каталог кэша (который часто находится на том же USB-диске!), и лишь затем загружается на удаленный сервер.

К сожалению, с этим ничего нельзя поделать – такова логика работы davfs2.

Если планируется передавать лишь небольшие файлы, то для кэша разумно использовать раздел /tmp, который представляет собой RAM-диск. В этом случае есть смысл ограничить размер кэша переменной cache_size в davfs2.conf, но следует иметь в виду, что данная переменная определяет лишь суммарный объем кэша, а при попытке записи или чтения одного крупного файла она будет игнорироваться.

В случае передачи крупных файлов остается либо размещать кэш на смонтированном на роутере USB-носителе и мириться с его постоянной перезаписью, либо для работы именно с большими файлами можно использовать отдельные WebDav-клиенты типа cadaver.

This entry was posted in Сеть и интернет and tagged , , . Bookmark the permalink.

2 Responses to Монтирование облачного диска по WebDav

  1. Сергей says:

    А для Backfire как это сделать?

    • root says:

      Боюсь, что без настройки Openwrt Buildroot – никак.
      Компиляция прошивки для Backfire ничем не отличается от сборки под trunk. Кроме того, собирать всю прошивку и перешивать роутер не потребуется – необходимо будет лишь собрать пакет davfs2, а все его зависимости можно доустановить из стандартного репозитория Backfire.

Leave a Reply to root Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>