是否可以使用 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
。