akorop |
|
Темы:
111
Сообщения:
1755
Участник с: 29 февраля 2012
|
Я люблю GUI, но не люблю десктоп. А ещё я не люблю линуксные гуёвые файловые менеджеры - не из идейных соображений, а просто из-за их убогости и неудобности по сравнению даже с mc. Так что живу под голым openbox, а с файлами работаю в mc. В связи с этим возникет проблема автомонтирования сменных носителей. Я эту проблему решаю при помощи правил udev, сделанных по мотивам чего-то, что гуглится по тексту "media-by-label-auto-mount.rules". Но тут возникает одна проблема: если файл правила присутствует в /etc/udev/rules.d/ до загрузки системы, то это правило работает наперегонки с системным монтированием через fstab, и результаты непредсказуемы. Я это выпрямляю при помощи безобразной затычки: в исходном состоянии на месте правила нет, оно копируется в /etc/udev/rules.d/ аж в автозапуске openbox, а перед завершением системы файл правила в /etc/udev/rules.d/ уничтожается. А как бы это сделать более цивилизованно? Если кому интересно - вот мой /etc/udev/rules.d/12-media-by-label-auto-mount.rules KERNEL!="sd[a-z][0-9]", GOTO="media_by_label_auto_mount_end" # 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}="usbhd-%k" # Global mount options ACTION=="add", ENV{mount_options}="uid=1000,umask=022,dmask=0" # Filesystem-specific mount options ACTION=="add", ENV{ID_FS_TYPE}=="vfat", ENV{mount_options}="$env{mount_options},codepage=866,iocharset=utf8" ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", ENV{mount_options}="defaults,$env{mount_options}" # 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" |
Natrio |
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
Что значит "до загрузки системы"? В initramfs, что ли? И почему нельзя наперегонки с fstab? Вроде у вас автомонтирование идёт в каталог внутри /media/ , а значит непосредственно к корневой ФС, где и fstab, и само правило UDEV для автомонтирования, – ничто не мешает монтировать в любом порядке. В общем, картина неясна, вы что-то важное забыли упомянуть, без этого я не вижу проблемы. И кстати, мне очень интересно, как вы решили проблему отмонтирования? Вы же знаете, что флешка не CD, и отмонтировать автоматически при извлечении её невозможно, и ваши инструкции на umount в UDEV лишь удаляют запись о монтировании после нештатного извлечения. Следовательно, вы всё же как-то руками отмонтируете эти флешки? |
akorop |
|
Темы:
111
Сообщения:
1755
Участник с: 29 февраля 2012
|
NatrioДо загрузки системы - в самом прямом смысле. Компьютер выключен, а на винте в /etc/udev/rules.d/ файл есть. NatrioКак-то не приходило в голову. У меня в fstab прописано монитирование разделов винта в /mnt, а в правиле udev - монтирование в /media. А перенацелить всё в одно место, чтобы результат не зависел от того, кто монтирует, - наверно, можно. Я эту мысль буду думать, спасибо. NatrioСкрипт парсит /proc/self/mounts и генерирует динамическое меню для openbox. Генерация и вызов этого меню повешена на горячую клавишу (Win+u, от Unmount). Так что в простейшем случае, когда воткнута всего одна флэшка, отмонтирование делается в три клавиши: Win+u, Enter. В общее иерархическое меню эта штука тоже вставлена, как подменю, - на случай, если рука к мышке приклеилась. Но сейчас этот скрипт выбирает из mounts то, что смонтировано в /media, а не в /mnt, так что если все монитирования валить в одно место, надо будет как-то иначе различать постоянные и временные носители. |
arcanis |
|
Темы:
31
Сообщения:
1496
Участник с: 09 сентября 2012
|
первое, что приходит на ум - убрать букву a(b,c) из sd[a-z][0-9]. Это будет работать в большинстве случаев, хотя, иногда флешки определяются при загрузке, как sda. Второе - проверять метку/uuid и только потом монтировать |
Natrio |
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
akorop, так ваша проблема видимо в том, что вы неправильно настроили автомонтирование, и потому оно захватывает разделы винчестера. Сделайте так, чтобы разделы винчестера из автомонтирования заведомо исключались. |
Mashin |
|
Темы:
1
Сообщения:
45
Участник с: 16 декабря 2009
|
Я для автомоунта пользуюсь утилиткой udisks-glue. В ней можно настраивать какие устройства автоматически монтировать, а какие нет.
www.emunix.org
|
Koluchka |
|
Темы:
2
Сообщения:
151
Участник с: 15 октября 2011
|
Я для автомонтирования пользуюсь udevil, точнее входящим в его состав devmon, монтирует от пользователя, отмонтирует при извлечении диска или если флешка - по команде, которую я повесила на горячую клавишу. Удобно. |
honaht |
|
Темы:
5
Сообщения:
266
Участник с: 04 февраля 2011
|
KoluchkaКрайне плюсую, очень удобный скрипт и тонко настраивается, при необходимости.
gentoo
|
Natrio |
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
А я вообще не люблю автомонтирование – не всегда надо монтировать всё подряд. У меня есть скрипт, отзывающийся на команды mnt (монтирует всё что вставлено), umt (отмонтирует что смонтировано) и mls (показывает что есть). Команды специально из трёх букв, чтобы быстрее набирать :) Со списком устройств в аргументах (от)монтирует только их, без аргументов – всё что можно. Монтирование идёт через pmount в /media/устройство_метка/ (например /media/sdb1_Label/ ) – чтобы избежать конфликта и сохранить порядок подключения. Работает от пользователя. Фильтрует девайсы по группе storage, в которую у меня специальное правило UDEV добавляет все блочные устройства, кроме CD/DVD и заранее заданного по ID винчестера. |
akorop |
|
Темы:
111
Сообщения:
1755
Участник с: 29 февраля 2012
|
arcanisПросто и эффективно, спасибо! А насчёт флэшек как sda, - это, возможно, от BIOS зависит. У меня, к счастью, флэшка никогда не определяется как sda, если загрузка с винчестера. Мой итог обсуждения: в правиле udev поменял "sd[a-z][0-9]" на "sd[b-z][0-9]", и забыл про фокусы с копирование и удалением. Ну и чтобы совсем закруглиться, привожу свои средства отмонтирования, заточенные на openbox. 1. Скрипт, генерирующий динамическое (под)меню openbox: [[email protected] bin]# cat umenu.py #!/usr/bin/python print("<openbox_pipe_menu>") n = 0 automount_dir = '/media/' print('<separator label="removables"/>') for s in open("/proc/self/mounts"): media = '' s = s.replace(chr(9), ' ') word = s.split(' ', 3) dev = word[0] i1 = s.find(automount_dir) if (dev != "") and (i1 >= 0): if media != dev[:len(automount_dir)]: if n != 0: print('<separator/>') # remove the number (f.e. sdb13 -> sdb), but not for sr0 media = dev if (media != '/dev/sr0'): while media[-1].isdigit(): media = media[:-1] print('<item label="eject ' + media[:-1] + '_' + media[-1] + '">') print(' <action name="Execute">') print(' <execute>') print(' d-eject ' + media) print(' </execute>') print(' </action>') print('</item>') n = n + 1 point = word[1] print('<item label="umount ' + ' ' + dev + ' -> ' + point + '">') print(' <action name="Execute">') print(' <execute>') print(' d-umount ' + dev) print(' </execute>') print(' </action>') print('</item>') if n == 0: print('<item label="none"/>') print("</openbox_pipe_menu>") <menu execute="umenu.py" id="umount_removable" label="_Unmount removable"/> <keybind key="W-u"> <action name="ShowMenu"> <menu>umount_removable</menu> </action> </keybind> |