URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID14
Нить номер: 2548
[ Назад ]

Исходное сообщение
"Как спрятать пустые Самба папки?"

Отправлено sambul25 , 02-Сен-12 00:31 
Если выключить или демонтировать диск, смонтированный в расшаренную Самба папку, эта пустая папка остаётся расшаренной и доступной для записи файлов. При последующем авто монтировании диска в эту папку все эти файлы удаляются. Пустые папки также сбивают с толку пользователя, вызывая вопросы "Почему у меня нет доступа"?

Как сконфигурировать Самба чтобы прятала (перестала шарить) пустую папку после демонтажа диска из неё? Почему эта базовая очевидная функция отсутствует среди опций конфига?


Содержание

Сообщения в этом обсуждении
"Как спрятать пустые Самба папки?"
Отправлено tuxic , 02-Сен-12 01:52 
> Если выключить или демонтировать диск, смонтированный в расшаренную Самба папку, эта пустая
> папка остаётся расшаренной и доступной для записи файлов. При последующем авто
> монтировании диска в эту папку все эти файлы удаляются. Пустые папки
> также сбивают с толку пользователя, вызывая вопросы "Почему у меня нет
> доступа"?
> Как сконфигурировать Самба чтобы прятала (перестала шарить) пустую папку после демонтажа
> диска из неё? Почему эта базовая очевидная функция отсутствует среди опций
> конфига?

Мне для себя- чисто поржать- чем функция очевидна???
Путь к папке пропал чтоли после того как вы диск демонтировали???
Вы папку расшарили, а самбе уже глубоко до лампочки являеться ли эта папка точкой монтирования диска или нет.
Попробуйте запросить как фичу у разработчиков.
Один вопрос к вам- а такая функция(очевидная на ваш взгялд) в windows есть?


"Как спрятать пустые Самба папки?"
Отправлено Etch , 02-Сен-12 10:02 
> Один вопрос к вам- а такая функция(очевидная на ваш взгялд) в windows
> есть?

Там это by design: поставил винчестер - появился диск (E:), убрал винчестер - диск исчез.

Топикстартеру: попробуйте поставить нужные права на папку, чтобы запись в неё запретить. Ещё можно поиграть с автомонтированием, чтобы при вставке нужного диска в системе появлялся каталог и диск монтировался в него (а при вынимании диска - папка удалялась).


"Как спрятать пустые Самба папки?"
Отправлено sambul25 , 02-Сен-12 10:18 
Так автомонтирование почему-то не работает как надо: при удалении УСБ стиков созданные для них папки удаляются, а при отключении USB Enclosure папки не удаляются, хотя dmesg даёт одно и тоже сообщение об отключении диска для обоих случаев.

К тому же при удалении папки её расшаренная Самбой двойняшка остаётся в Проводнике, и при клике пользователя на неё надолго (если не навсегда) зависает Проводник.

К разрабам я обращался, никто из них не ответил. А фича эта очевидная, и такая опция должна быть в конфиге. Вообще то Самба создавалась подглядкой за сетевым протоколом Винды и как раз для расшаривания линух дисков в винде, и оставление пустых папок никак не объяснить тем что Самба - это Линух, к Винде мол не имеет отношения.


"Как спрятать пустые Самба папки?"
Отправлено Etch , 02-Сен-12 15:39 
google://samba automount

http://uranus.chrysocome.net/linux/automount.htm - Предлагают сделать отдельную шару, внутри которой создать симлинки на точки монтирования. Если у вас каталог точки монтирования не удаляется, то можно на диске сделать отдельный каталог и указать симлинк уже на него. Правда, появляется лишния вложенность (шара->симлинк), и сама шара не исчезает при отмонтировании диска, но возможно вас это устроит.

Либо вариант - нанять программиста/самим написать патч и отправить его разработчикам.


"Как спрятать пустые Самба папки?"
Отправлено sambul25 , 02-Сен-12 17:24 
Спасибо, изучу этот подход. Ниже приведены правила udev-automount для USB дисков:

KERNEL!="sd[a-z][0-9]", GOTO="media_by_label_auto_mount_end"
PROGRAM="/usr/bin/grep -q ' %M:%m /[^ ]* /' /proc/self/mountinfo", PROGRAM!="/usr/bin/grep -q ' %M:%m / /media/' /proc/self/mountinfo", GOTO="media_$

# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"

# Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="hd-%k"

# Global mount options
ACTION=="add", ENV{mount_options}="noatime"
# Filesystem-specific mount options
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"

# Mount the device
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}"

# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"

# Exit
LABEL="media_by_label_auto_mount_end"


При выключении USB диска все его разделы авто демонтируются, но некоторые папки монтажа разделов не авто удаляются. Проверка типа lsof +D /media/USB1_Data показывает, что папка продолжает использоваться рядом процессов, включая Samba. Если затем вручную ввести umount /media/USB1_Data, то после этого папку можно вручную удалить rmdir , но даже и в этом случае не всегда.

Почему так происходит, и как изменить правила udev-automount, чтобы при демонтаже раздела диска отрубить kill все привязки процессов к его папке монтажа, не убив при этом сами процессы, т.к. они работают и с другими папками, в которых смонтированы диски?



"Как спрятать пустые Самба папки?"
Отправлено sambul25 , 02-Сен-12 20:08 
В принципе можно добавить нечто типа fuser -k myfоlder в edev-automount, но это похоже убьёт сами процессы вместо их хэндлов. Как просигналить всем процессам / приложениям убрать хэндлы с уже пустой папки?

"Как спрятать пустые Самба папки?"
Отправлено Etch , 02-Сен-12 22:05 
Посмотрите man smbcontrol. Там есть команда close-share, что делать с остальными процессами - хз. Там же есть команда reload-config - попробуйте на лету добавлять/убирать шары в конфиге и затем давать эту команду.

"Как спрятать пустые Самба папки?"
Отправлено sambul25 , 03-Сен-12 02:28 
Спасибо за подсказки. Но перезагрузка конфига требует рестарта Samba, a это как известно чревато зависанием и почти наверняка рестартом Проводника Винды, и после этого он ещё долго остаётся пустым, не видны даже локальные диски.

Конечно MS здорово подзапустила NetBios, поскольку они решили избавиться от него, но такая ситуация с обновлением сетевых папок в Проводнике просто позорна. Но и Самба разрабы здесь постарались добавить ложку дёгтя, хотя наоборот должны были всё сделать привычным для юзеров Винды при расшаривании в ней.

Надо что-то другое искать, рестарт Самбы не обещает поблажек от Винды. :)


"Как спрятать пустые Самба папки?"
Отправлено Etch , 03-Сен-12 02:44 
> Спасибо за подсказки. Но перезагрузка конфига требует рестарта Samba,

С чего вы это взяли? Только что попробовал 'smbcontrol all reload-config' - время старта демонов самбы не изменилось. Правда я не менял конфиг, т.к. наткнулся на:
net usershare add sharename path [comment [acl] [guest_ok=[y|n]]] - to add or change a user defined share.
net usershare delete sharename - to delete a user defined share.

man net - для подробностей.


"Как спрятать пустые Самба папки?"
Отправлено sambul25 , 03-Сен-12 07:31 
Это похоже то что надо. :) Там есть ещё Net Share Delete. Попробуем добавить в udev-automount. А у Самбы есть подобная automount прога или фича? Может лучше туда эту команду добавить, если там можно отследить смонтированные диски...

reload-config думаю, и не должен изменить время старта демонов, но без их рестарта новый конфиг наверное не отразится на шарах.


"Как спрятать пустые Самба папки?"
Отправлено sambul25 , 05-Сен-12 18:30 
Получил ответ от Самба:

"You'll need to script this yourself by issuing removing the share
entry from smb.conf and using smbcontrol to close client connections
to that share and reload the config file.

Samba doesn't have logic to hook into your specific UNIX's method
of notifying dismounts (if it even has one)."


"Как спрятать пустые Самба папки?"
Отправлено sambul25 , 06-Сен-12 17:27 
И продолжение:

"what we might be able to do is to add a scripting
interface to the "available" parameter that is checked every
time the share is about to be accessed. This would give a
flexible interface to whatever the OS provides."

Это похоже означает, что Самба админ должен знать, изменение какого параметра данной версии Линукс сигнализирует что расшаренный диск демонтирован.


"Как спрятать пустые Самба папки?"
Отправлено Etch , 07-Сен-12 02:13 
> Это похоже означает, что Самба админ должен знать, изменение какого параметра данной
> версии Линукс сигнализирует что расшаренный диск демонтирован.

Или этот скрипт может поставлять maintainer пакета в вашем дистрибутиве, т.е. всё вполне может работать из коробки, по идее. Было бы круто, если бы в самбе запилили такую фичу.