为什么使用 udev 规则而不是 mknod 来确保持久命名/权限?

为什么使用 udev 规则而不是 mknod 来确保持久命名/权限?

我见过一些配置用于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)。

相关内容