我在udev中做了这个配置:
KERNEL=="sdd", SYMLINK+="QUORUML", OWNER="test", GROUP="gtest", MODE="0660"
KERNEL=="sde", SYMLINK+="QUORUMR", OWNER="test", GROUP="gtest", MODE="0660"
之后,我添加了其他磁盘,新磁盘变成了旧/dev/sde
磁盘,因此上面的 udev 规则变得错误,因为名称已更改为. 如何确保正确的磁盘?有其他的身份证吗?我试过类似的东西,但由于没有分区,它不会返回任何 id。/dev/sde
/dev/sdf
sde
sdf
blkid
[root@dbnode1 rules.d]# blkid /dev/sdd
[root@dbnode1 rules.d]#
当有 iscsi 磁盘时,我会寻找类似的东西,我们可以使用 iscsi id 来做到这一点:
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="360014054187384e668f45e58d036f19a", SYMLINK+="disk4", OWNER="xxxx", GROUP="xxxx", MODE="0660"
无论如何,您应该匹配
SUBSYSTEM=="block", ENV{ID_SERIAL}=="xxx"
(品牌/型号和序列号)。或ENV{ID_SERIAL_SHORT}
(仅序列号)。或ENV{ID_WWN}
(驱动器的全局唯一标识符)。或者也许ENV{ID_PART_TABLE_UUID}
。我倾向于使用它,
ID_SERIAL_SHORT
因为它的独特性足以满足我的需求(驱动器制造商往往不会重复使用序列号,并且不同制造商的序列号有不同的样式),而且它是我打印在粘性标签上的,因此我可以轻松识别我的驱动器热插拔托架。我不使用 WWN,因为 IMO 它们看起来太相似了,很难相互区分。明确不保证设备名称在重新启动后仍然存在 - 它们通常会保持数月甚至数年不变,但依赖它是不安全的。内核开发人员多次记录并声明,不能保证下次启动时它们不会更改。为什么?因为驱动器可能会死掉(或者当内核扫描设备时只需要更长的时间来启动或响应),您可能会添加或删除驱动器,新的内核版本可能会以不同的顺序检测设备,或者任何数量的其他原因。这就是为什么多年来的建议是“不要在 . 中使用 /dev/sdX 名称
/etc/fstab
。使用 UUID 或 LABEL”。使用唯一标识符的相同建议适用于 udev 规则。您可以使用 .找到任何给定驱动器的属性
udevadm info /dev/sdX
。那里有很多有趣和有用的属性/属性,但现在我只对序列号感兴趣。例如,我的系统上有一个 8TB 希捷硬盘,目前是
/dev/sda
. 我可以通过以下方式找到它的短序列号:将它与 udev 规则一起使用如下所示:
注意
==
前两个属性,它们是比较而不是赋值(参见man 7 udev
,尤其是Operators
小节)。如果我想要带有型号等的完整序列号,我可以使用以下代码:
udev 规则是这样的:
如果我正在为一个特定设备(或设备类型)制定 udev 规则,我发现
udevadm info /dev/name
在规则文件中添加注释掉的输出版本很有用,以防我需要它以供将来参考。用于#
评论。顺便说一句,如果需要,您可以使用以下工具单独提取值(没有属性名称)
awk
或cut
: