Автомаунт флешек с помощью udev

После небольшой беседы c Juev по поводу автомонтирования родилася идея правил для udev с помщью которого реализуется автомаунт устройств /dev/sd* aka винты и флешки, ну и до кучи с опцией sync.
Монтирование с опцией sync, как мне кажется, в данном случае оправдано — несмотря на некоторое снижение скорости записи, гарантированность целостности записанного при ообычном выдергивании флешки намноооого больше чем без сей опции.

В общем порывшись в доках udev а так же великом и могучем гугле сии правила для udev были написаны. И как оказалось всё намного проще чем казалось изначально.
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mkdir -p /media/usbhd-%k" 
ACTION=="add", KERNEL=="sd[a-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o iocharset=utf8,codepage=866,rw,noauto,flush,quiet,nodev,nosuid,noexec,noatime,dmask=000,fmask=111 /dev/%k /media/usbhd-%k", OPTIONS="last_rule" 
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mount -t auto -o iocharset=utf8,codepage=866,rw,noauto,sync,dirsync,noexec,nodev,noatime /dev/%k /media/usbhd-%k", OPTIONS="last_rule" 
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/umount -l /media/usbhd-%k" 
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rmdir /media/usbhd-%k", OPTIONS="last_rule"
Просто помещаем этот текст в /etc/udev/rules.d/блаблабла.rules и радуемся (хотя возможно понадобится ребут)

Сей метод имеет один недостаток (помимо опции sync) — файловые менеджеры использующие hal для монтирования (thunar, nautilus, dolphin, pcmanfm, etc) не отображают примонтированный раздел, а предлогают его примонтировать ещё раз. Если кто знает как сие обойти то дайте знать (насколько понимаю надо монтировать через hal или как-то давать ему знать о том что смонтировано, но как сие делать я не в курсе)

UP Тут решение проблем с несознательными файломанагерами
sg 09-08-2009
Забыл дописать что в записи вида "sd[a-z][0-9]" букву a нужно заменить на ту, с какой монтируется флешка, т.е. к примеру у меня флешка монтируется как sdc, соотвнтственно запись получается вида "sd[c-z][0-9]"
muhas 09-08-2009
Спасибо за уточнение, даже не подумал об этом. но те кто прочитают комменты будут в курсе.
Сыр Российский 09-08-2009
А что с отмонтированием? автоматически при вытаскивании?
muhas 09-08-2009
@Сыр Российский, да (только ради этого sync и использовал)
TPMi 09-08-2009
а я для того, чтобы нормально работал русский язык, использую опцию utf8. возможно, имеет смысл её добавить - лишней-то не будет.
muhas 09-08-2009
@TPMi опции iocharset=utf8,codepage=866
TPMi 09-08-2009
это я вижу, но у меня написано только utf8, и всё работает - строчка короче.
muhas 09-08-2009
@TPMi cудя по ману utf8 Convert 16 bit Unicode characters on CD to UTF-8

есть подозрение что сие немного не то, но надеюсь комменты прочитает народ и сделает как им больше понадобится
JaGoTerr 09-08-2009
А если так:

ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/usr/bin/pmount %k"


Т.е. я не силён в синтаксисе udev, но суть идеи в том, чтобы заюзать pmount. При этом:
1) монтирование делается через hal
2) каталоги в /media создаются и удаляются автоматом
3) файловая система носителя также автоматом определяется
Juev 09-08-2009
По сути все файловый менеджеры, типа тхунара, писифеэма, они прекрасно умеют работать и с данным методом монтирования.
Нужно только отключить их собственный автомоунт... если раньше это очень просто осуществлялось, и в настройках программ и в настройках хала... То теперь отключить мне просто напросто не удалось... Что не делал, а все равно монтирует, зараза....
muhas 09-08-2009
@JaGoTerr примонтировал с помощью pmount как /usr/bin/pmount -c utf8 -w -s /dev/%k
вроде всё гуд, но... монтируется под рутом так что /media/%k имеет права 700 (владелец root) и их не сменить, как бы так монтировать что бы все юзвери имели доступ(и могли отмонтировать через hal с помощью файломанагеров)???? какие параметры нужны
(ну и файлик в /media/%k оставляет - посему удалять его только с помощью -rf, но это мелочи)

@Juev если через pmount то эти файламанагеры говорят что уже примонтирован и больше не монтируют =)
karapuz 09-08-2009
У меня вопрос. В gnome есть gconf-editor. При помощи этой утилиты в разделе /system/storage/default_options/vfat можно указать umask для монтируемых файловых систем, не для устройств, а именно файловых систем. Гнома под рукой нет, потому не могу посмотреть как именно это делается, то есть при помощи udev или по другому? Хочу так же сделать (указать umask) в kde4, но не пойму как.
muhas 09-08-2009
@karapuz судя по всему эти параметры передаються в pmount (pmount -u umask) — ведь если не изменяет память гном именно через pmount монтирует(хотя это было давно)
где в кедах сие прописать на знаю. ибо ни кед ни гнома не имею (и ставить желания нет)
Juev 09-08-2009
я через pmount пока еще не пробовал... как я понимаю проблема в том, что процесс запускается от имени рута, а сам pmount не может работать от имени другого пользователя...
как вариант - при монтировании использовать sudo с указанием имени нужного пользователя... но в данном варианте получается гемморой в многопользовательской системе...
eugen 09-09-2009
после добавления/изменения правил udev ребутаться
не обязательно, достаточно дать от рута команду
udevadm control --reload-rules
kirill.zabarniuk 10-07-2010
пользователям debian (ubuntu?) вместо написания подобных правил, я бы рекомендовал установить пакет usbmount (http://usbmount.alioth.debian.org/) - там все это уже написано и отлажено
muhas 10-07-2010
эх... авторы dwm/dmenu/etc написали демона автомаунта, правда последний раз его смотрел и он тогда от hal зависел, не знаю как сейчвс (смотреть в git dmenu)