Правила udev исключают устройство

Можно ли использовать правила udev для исключения одного устройства из правила?

например, если у меня подключено 5 жестких дисков, и я хочу создать собственные имена для всех жестких дисков, кроме одного? Является ли это возможным?

Кроме того, имена ядра дисков после sdz именуются двумя символами. sdaa, sdab, sdqr и т. д. У меня проблема с этим, поскольку я не хочу включать раздел в sda1, sdb2 и т. д. Могу ли я использовать символы подстановки для всех символов, но не для всех чисел?

пример:

KERNEL=="sd??",  NAME="test/Disk%n",  ATTRS{ID_SERIAL_SHORT}!="xxxx"

1 ответ

Решение

например, если у меня подключено 5 жестких дисков, и я хочу создать собственные имена для всех жестких дисков, кроме одного? Является ли это возможным?

  • Ты можешь использовать GOTO чтобы пропустить правила:

    ENV{ID_SERIAL_SHORT}=="xxxx|yyyy|zzzz", GOTO="custom_names_end"
    ENV{ID_MODEL}=="blahblah", GOTO="custom_names_end"
    
    KERNEL=="sd*", ENV{DEVTYPE}=="disk", SYMLINK+="test/Disk%n"
    
    LABEL="custom_names_end"
    
  • Обратите внимание, что ID_SERIAL_SHORT не является атрибутом; это переменная окружения udev, поэтому вам нужно использовать ENV{} или же ENVS{} чтобы соответствовать этому. Атрибуты читаются из sysfs напрямую.

  • Также обратите внимание, что последние версии udev запрещают переименовывать устройства; Вы можете добавлять только пользовательские символические ссылки.

Кроме того, имена ядра дисков после sdz именуются двумя символами. sdaa,sdab, sdqr и т. д. У меня проблема с этим, поскольку я не хочу включать раздел в sda1, sdb2 и т. д. Могу ли я использовать символы подстановки для всех символов, но не для всех чисел?

  • Вы используете неправильный подход. Если вы хотите сопоставить диски, но не разделы, то сделайте именно это:

    KERNEL == "sd *", ENV {DEVTYPE} == "диск",…

    DEVTYPE значения можно увидеть в udevadm info /dev/sda а также udevadm info /dev/sda1,

Другие вопросы по тегам