Вопрос или проблема
Я пытаюсь создать правило символьной ссылки 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. Если у вас остались вопросы или нужны дополнительные разъяснения, не стесняйтесь обращаться за помощью!