我见过一些配置用于udev rule
确保磁盘名称和磁盘权限。但最近我发现了一个名为 的命令mknod
,它的作用就像块设备的别名,通过指定major:minor
磁盘的 ,我们可以“创建别名”,如下所示:
[root@dbnode1 disks]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdd 8:48 0 160M 0 disk
mknod /disks/QUORUML b 8 48
现在我想知道为什么使用udev rules
而不是使用mknod
,因为mknod
使用起来非常简单。我的要点是确保持久命名和权限。
答案1
为什么 ?可靠性!
当驱动程序检测到新设备时,会分配主设备号和次设备号,并且当删除设备时,这些设备号将被释放并可以在以后重用。
这样做的结果是,当检测顺序改变时,设备编号和相应的 sd 标签之间的关联也会改变。
这在具有唯一磁盘的小型系统上可能被认为是不寻常的,但是只要想想可移动介质、热插拔磁盘阵列…用并行检测来覆盖它…sdb、sdc…严格来说,顺序是不可预测的。
这就是为什么不希望使用主要和次要编号范围(或引用设备时关联的 sd 名称,例如在 /etc/fstab 文件中)的原因。安装错误的设备可能会导致大麻烦。
答案2
最大的原因是 udev 规则是“自动”的——每次连接新设备(或在启动过程中发现)时,udev 都会处理所有规则文件,因此您无需手动执行任何操作。
还mknod
创建一个新的块(或字符)设备文件,但您已经有了一个 -/dev/sdd
所以您不需要创建一个新的,您只需要一个到它的符号链接(这就是 udev 对属性所做的事情SYMLINK
)。
如果您不想要/不需要 udev 的“自动化”部分,并且可以在每次启动或连接设备时手动运行命令,我建议您仍然不应该使用,mknod
而是创建一个符号链接。
如果您想要的只是设备的一个漂亮(且稳定)的“路径”,我建议为文件系统或分区设置标签,然后您可以使用 udev 在/dev/disk/by-partlabel
和中创建的默认符号链接之一/dev/disk/by-label
。
请注意,其他与存储一起使用的系统工具也使用 udev,因此如果您使用 udev 创建符号链接,这些工具将知道它是该设备的符号链接。对于手动创建的节点来说,情况可能并非如此(但例如lsblk
足够智能,如果您运行lsblk /disks/QUORUML
它会向您显示/dev/sdd
)。