udev 规则排除设备

udev 规则排除设备

是否可以使用 udev 规则从规则中排除单个设备?

例如,如果我插入了 5 个硬盘,并且我想为除单个硬盘之外的所有硬盘创建自定义名称?可以吗?

此外,内核在 sdz 之后命名磁盘,并使用 2 个字符进行命名。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 之后命名磁盘,并使用 2 个字符进行命名。sdaa、sdab、sdqr 等。我遇到了一个问题,因为我不想在 sda1、sdb2 等中包含分区。我可以使用通配符连接所有字符但不是所有数字吗?

  • 您使用了错误的方法。如果您想要匹配磁盘而不是分区,那么正是这样做

    内核==“sd*”,ENV{DEVTYPE}=="磁盘",…

    DEVTYPE可以在udevadm info /dev/sda和中看到udevadm info /dev/sda1

相关内容