Re: Что почитать о монтировании сменных носителей?
On Mon, Oct 05, 2009 at 06:57:08PM +0400, Alexander Galanin wrote:
> On Sun, 4 Oct 2009 16:28:39 +0400
> Stanislav Maslovski <stanislav.maslovski@gmail.com> wrote:
>
> > On Sun, Oct 04, 2009 at 02:03:22PM +0400, Alexander Galanin wrote:
> > > Как результат такой перегруженности процесса монтирования, нормальных
> > > средств для работы с демоном HAL нет. "Нормальный" понимается как
> > > "простой", 'понятный" и "скриптуемый".
> >
> > Не так страшен черт, как его малюют. Довольно давно уже (примерно с
> > момента, когда иксы к hal привязали) для себя использую связку из
> > autofs, hald и пары скриптов. До этого использовал связку udev +
> > autofs.
> >
> > Насколько просто, понятно и скриптуемо это решение -- можешь
> > посмотреть сам. Прилагаю tar.gz.
>
> Занятно. Только вот непонятно, зачем нужно ожидание исчезновения
> симлинки из /media.
Это на случай race между cleanup скриптом и отработкой события add в
другом скрипте, или между событиями удаления/добавления в одном
скрипте (точнее, между двумя рейнкарнациями одного скрипта).
Предложения как сделать лучше принимаются. Текущий вариант
остался со времени "proof of concept".
> А также очень хотелось бы узнать документ, из
> которого взяты значения для fdi-файла.
aptitude install hal-doc && w3m /usr/share/doc/hal-doc/spec/hal-spec.html
> А уж совсем хорошо было бы услышать авторское описаие того, как это
> всё-таки работает.
Примерно так:
1. Скрипт hal-autofs-cleanup отрабатывает при добавлении в базу
записи /org/freedesktop/Hal/devices/computer. Это происходит при
каждом (ре)старте hald. Назначение скрипта - удалить битые
символические ссылки, если таковые остались в /media (например,
после зависания компа или падения hald).
2. При втыкании нового устройства hald опрашивает его и приступает к
созданию записи о нем в своей базе. При этом просматриваются fdi файлы
из /etc/hal/fdi/policy (детали есть в документации).
В hal-autofs-policy.fdi у меня сказано, что если воткнутое
устройство является hotplugguble storage c файловой системой vfat
или ext2 (флешки, mmc карты) или removable storage c файловой системой
iso9660 (сидиромы), то:
a) оно помечается в базе, как обрабатываемое autofs (я добавляю свой
идентификатор "autofs" к info.capabilities)
б) добавляется запись об опциях монтирования для обнаруженной
файловой системы (добавляю свой ключ "volume.autofs.mount_options")
в) скрипт hal-autofs назначается обработчиком событий add/remove для
устройств, помеченных идентификатором "autofs"
3. После обработки policy файлов hald запускает только что
зарегистрированный callout скрипт (c $HALD_ACTION=add). Скрипт создает
симлинк в /media, указывающий на динамическую точку монтирования в
/var/autofs/hal/. В качестве имени симлинка и динамической точки
монтирования берется последняя часть HAL UDI (трюк с basename).
4. При попытке обратиться к /media/`basename $UDI` просыпается
automounter (так как симлинк ведет в /var/autofs/hal/, упомянутый в
/etc/auto.master) и запускает map скрипт /etc/auto.hal, который
извлекает из базы HAL
a) блочное имя устройства
б) тип файловой системы
в) мои опции монтирования
и возвращает эту информацию automounter-у. automounter монтирует FS
в /var/autofs/hal/`basename $UDI` с нужными опциями, после чего она
доступна и через симлинк в /media/.
5. При освобождении файловой системы automounter ее
отмонтирует (по истечении таймаута, заданного в auto.master,
у меня 5 сек)
6. При выдергивании флешки hald приступает к удалению записей об
устройстве и вызывает callout скрипт c $HALD_ACTION=remove. Скрипт
удаляет соответствующий симлинк из /media.
--
Stanislav
Reply to: