Символические ссылки - это широко распространенная практика в Linux, позволяющая сделать ресурс (например, каталог) доступным в другом месте без необходимости поддерживать несколько его копий. Это реализовано во многих приложениях, например наличие дерева ресурсов и дерева с каталогами пользователей: всякий раз, когда пользователь намеревается работать с определенным ресурсом, символическая ссылка помещается в каталог, к которому у него есть доступ. При наличии достаточных разрешений он или она может работать с ресурсом (создавать в нем файлы), которые физически могут быть записаны в другое место, например на устройстве с достаточным пространством. Это нормально работает, если пользователь обращается к своему домашнему каталогу с помощью Samba.
Однако есть веские причины работать с WebDAV, и проблемы с портом - одна из них. Проблема при переносе такого приложения на WebDAV: mod_dav Apache написан таким образом, что символические ссылки не отображаются, независимо от того, установлен ли FollowSymLinks. Это поведение задумано сообществом, поэтому отчет об ошибке никогда не решались.
Однако как можно перенести желаемое поведение в WebDAV? Вместо этого я попытался использовать жесткие ссылки, но жесткие ссылки на каталог, похоже, вообще не работают. С помощью mount
может сработать, но я не могу оценить побочный эффект сотен креплений. Есть ли вариант, на который я пока не обращался? Есть ли известная «лучшая практика»? Или WebDAV просто не подходит для замены Samba?
Кажется, что mount --bind
это решение, которое я искал. Есть причины за и против использования ln -s vs mount --bind, но кажется обычной практикой монтировать устройство несколько раз в системах Linux (даже монтирование отдельных файлов в другие файлы рекомендуется в man mount
) и похоже, что стабильность системы серьезно не пострадала.
Единственный недостаток, конечно, в том, что если точки монтирования не фиксируются путем изменения /etc/fstab
, они потеряются при перезапуске сервера.
Еще одно слово для WebDAV: там был Интернет-проект (срок действия которого истек) расширить спецификацию WebDAV, чтобы разрешить «расширенные коллекции», которые также должны предлагать возможность обработки ссылок. Работа над этим вопросом велась примерно в 1998–2002 годах, потом топпик молча исчез. Вы можете найти несколько страниц в Интернете, утверждающих, что WebDav поддерживает символические ссылки посредством расширенных коллекций, но в настоящее время это не вариант. Текущая (v.1.0.3-1.3.6) mod_dav
исходный код гласит:
/* ### for now, only process regular files (e.g. skip symlinks) */
if (S_ISREG(fsctx->info1.finfo.st_mode)) {
Можно было ожидать, что Модуль Tomcat 6 WebDAV может не знать о символических ссылках (поскольку, кстати, осведомленность о таких специальных вещах файловой системы не была включена в модель Java до версии 7), но он показывает такое же поведение, таким образом, также соответствуя спецификации.
Наконец, патч символической ссылки для mod_dav-1.0.3-1.3.6 был опубликован, но вам придется применить патч к исходному коду и скомпилировать модуль самостоятельно ... Я этого не пробовал.