Правило SYMLINK Udev не работает!

Вопрос или проблема

Я пытаюсь создать правило символьной ссылки udev:

Вот что я написал до сих пор, но это, похоже, не работает:

ACTION=="add", SUBSYSTEM=="block", ATTR{size}=="60626944", ATTRS{model}=="USB DISK 2.0    ", SYMLINK+="integralusb"

Устройство, для которого я пытаюсь создать символьную ссылку при подключении, — это USB флеш-накопитель. Вот вывод команды udevadm info –query=all /dev/sdb

 udevadm info --query=all /dev/sdb
P: /devices/pci0000:00/0000:00:10.0/usb2/2-3/2-3:1.0/host2/target2:0:0/2:0:0:0/block/sdb
N: sdb
L: 0
S: disk/by-id/usb-_USB_DISK_2.0_900074BF37B00367-0:0
S: disk/by-path/pci-0000:00:10.0-usb-0:3:1.0-scsi-0:0:0:0
E: DEVPATH=/devices/pci0000:00/0000:00:10.0/usb2/2-3/2-3:1.0/host2/target2:0:0/2:0:0:0/block/sdb
E: DEVNAME=/dev/sdb
E: DEVTYPE=disk
E: MAJOR=8
E: MINOR=16
E: SUBSYSTEM=block
E: USEC_INITIALIZED=5783303806
E: ID_VENDOR_ENC=\x20\x20\x20\x20\x20\x20\x20\x20
E: ID_VENDOR_ID=26bd
E: ID_MODEL=USB_DISK_2.0
E: ID_MODEL_ENC=USB\x20DISK\x202.0\x20\x20\x20\x20
E: ID_MODEL_ID=9917
E: ID_REVISION=PMAP
E: ID_SERIAL=_USB_DISK_2.0_900074BF37B00367-0:0
E: ID_SERIAL_SHORT=900074BF37B00367
E: ID_TYPE=disk
E: ID_INSTANCE=0:0
E: ID_BUS=usb
E: ID_USB_INTERFACES=:080650:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=usb-storage
E: ID_PATH=pci-0000:00:10.0-usb-0:3:1.0-scsi-0:0:0:0
E: ID_PATH_TAG=pci-0000_00_10_0-usb-0_3_1_0-scsi-0_0_0_0
E: ID_PART_TABLE_TYPE=dos
E: DEVLINKS=/dev/disk/by-id/usb-_USB_DISK_2.0_900074BF37B00367-0:0 /dev/disk/by-path/pci-0000:00:10.0-usb-0:3:1.0-scsi-0:0:0:0
E: TAGS=:systemd:

Я не знаю, что я сделал не так, я новичок в создании правил udev, но это выглядит нормально для меня.

ATTRS{model}=="USB DISK 2.0 "

Я думаю, что здесь слишком много пробелов. Это сопоставление строк.

Вот пример из 50-default...rules, подстановочные символы также работают:

ENV{ID_USB_INTERFACES}=="*:0701??:*"

Для меня ответом было: измените свое правило с ACTION=="add" на ACTION=="add|change".

Ответ или решение

Проблема с созданием правила symlink в udev может быть связана с несколькими факторами. Давайте проанализируем ваш код и предоставим некоторые рекомендации для его исправления.

Анализ Правила

Ваше текущее правило выглядит следующим образом:

ACTION=="add", SUBSYSTEM=="block", ATTR{size}=="60626944", ATTRS{model}=="USB DISK 2.0    ", SYMLINK+="integralusb"

1. Пробелы в строковом совпадении

Как вы правильно заметили, в строке ATTRS{model}=="USB DISK 2.0 " имеется избыточное количество пробелов в конце строки. Убедитесь, что строка соответствует реальному значению, полученному из команды udevadm info. Ваша строка может не совпадать из-за лишних пробелов.

2. Использование "add|change"

Ваше правило устанавливает действие как ACTION=="add", что срабатывает только при первом подключении устройства. Однако, если устройство уже было подключено ранее и его состояние изменилось (например, его размер изменился или оно было отмонтировано и снова подключено), то его это правило не сработает. Измените правило на:

ACTION=="add|change", SUBSYSTEM=="block", ATTR{size}=="60626944", ATTRS{model}=="USB DISK 2.0", SYMLINK+="integralusb"

Это позволит вам обрабатывать как подключение, так и изменения состояния устройства.

Дополнительные Рекомендации

3. Проверка на наличие других правил

Проверьте существующие правила udev в каталоге /etc/udev/rules.d/ и /usr/lib/udev/rules.d/. Если есть другие правила, которые также пытаются создать символьные ссылки для вашего USB-устройства, они могут конфликтовать с вашим правилом. Убедитесь, что ваше правило имеет более высокий приоритет, добавив номер перед именем файла при создании (например, 60-my-usb.rules).

4. Перезапуск udev

После внесения изменений в правила udev, вам необходимо перезапустить службу udev, чтобы изменения вступили в силу. Это можно сделать с помощью следующей команды:

sudo udevadm control --reload-rules
sudo udevadm trigger

5. Проверка логов

Если ваше правило все еще не работает, проверьте логи системы. Используйте команду:

journalctl -u systemd-udevd

Это может помочь вам найти ошибки или предупреждения, связанные с вашим правилом.

Заключение

Соблюдая вышеуказанные рекомендации, вы сможете устранить проблему создания symlink для вашего USB-устройства. Избегайте лишних пробелов, старайтесь учитывать возможные изменения в состоянии устройства и следите за конфликтами с другими правилами udev. Если у вас остались вопросы или нужны дополнительные разъяснения, не стесняйтесь обращаться за помощью!

Оцените материал
Добавить комментарий

Капча загружается...