Я создаю новое базовое правило
/etc/udev/rules.d/10-myrule.rules
содержащий:
KERNEL!="sdb*", GOTO="auto_mount_end"
ACTION=="add", RUN+="/usr/bin/mount /dev/sdb1 /media"
LABEL="auto_mount_end"
Я сохранил, перезагрузил и вставил SD-карту (распознается /dev/sdb1
, я вижу это с dmesg
), но ничего не происходит. Когда я делаю вручную mount /dev/sdb1 /media
, это работает.
Как я могу устранить неполадки / отладить такое udev
правило?
Примечание: я использую ArchLinux, но он должен быть одинаковым на любом дистрибутиве?
arch-linux
mount
udev
Basj
источник
источник
99-myrule.rules
...systemd
что-то нормальное поведение udev?udevadm monitor
, посмотри на это и на этоudevadm test
И проверил правила на соответствие действительностиudevadm info
.Ответы:
10-
как упомянуто jasonwryan, используйте высокую нумерацию (хорошо 90-х). Таким образом, ваше правило не будет отменено другим.Используйте минимальные ключи так, как вам действительно нужно. Например,
!=
&GOTO
/LABEL
вместо прямого использования==
Ваша цель была
sdb1
с фиксированной командой, минимизировать слепой матч, используяKERNEL=="sdb1"
Я считаю полезным создать правило отладки теней, которое я назвал shadow, потому что я всегда оставляю его там в одном и том же файле, поэтому я использую его, когда мне это нужно.
Примечание:
udev-env.txt
создается, тогда правило все равно срабатывает. Линия,==
соответствующая одному подходящему узлу. ENV, записанный в этом файле, может быть смесью между 2 или более узлами, созданными почти одновременно, этоstdout
проблема буферизации.Использование
udevadm monitor -u
,udevadm test ...
иudevadm trigger ...
проверить , какие правила обрабатываются события.Внутри сценариев вы можете сделать журнал отладки и перехватить неудачные команды, сохранив их возвращаемое значение
stdout
иstderr
сообщения.Обновить:
Ссылка: udev_237 -
man udev
(Ubuntu_18.04)источник
udevadm test...
Похоже, пара комментариев показывает только переменные окружения, которыеATTRS
вы можете использовать,udevadm info $DEVICE
чтобы найти эти другие настройки.udevadm info
возврате дерева устройств будьте осторожны, чтобы различать настройки между устройством и его родительскими устройствами (свойства кажутся унаследованными, если не переопределены). В моем случае подсистема была неправильной.udevadm test "This program is for debugging only, it does not run any program specified by a RUN key. It may show incorrect results, because some values may be different, or not available at a simulation run."
Нет ли способа просто отследить, что на самом деле происходит?udevadm monitor -u
для проверки событий / условий иudevadm trigger ...
для проверки их действий.Я думаю, что команда, которую вы ищете здесь
udevadm
. Вы будете использоватьtrigger
иtest
параметры , чтобы вызвать повторное сканирование Udev событий и проверить событие конкретного, соответственно.Я узнал об этом нелегко, когда начал изучать новое сетевое устройство в EL 7. Удачи!
источник
Создать файл правил udev
Добавить правило, которое говорит udisks для его автоматического монтирования
ATTRS{type}=="SD"
может не потребоваться, если вы используете разные типы.Перезагрузить правила
Извлечь его, затем положить обратно.
Ссылка: Archlinux Wiki: Некоторые устройства, которые должны рассматриваться как съемные, не являются
источник
У меня была такая же проблема с RASPBERRY PI 3 B +, возможно, что вышеприведенные команды могут вам помочь. Но это НЕ помогло мне. Я пытался вызвать скрипт при вставке USB-накопителя. Правила не регистрируются в системном журнале, поэтому становится очень трудно понять, какое правило сработало или какое правило не удалось.
Итак, я сделал следующее:
(1) Я сделал свой файл правил в /etc/udev/rules.d/100-myrule.rules
(2) Затем я выполнил команду
sudo /etc/init.d/udev restart
тогда я проверил, что это сработало. Часть информации, может быть полезной для вас или нет, но файловые системы доступны только для udev, пока не будет выполнена команда в (2).
источник