[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: