如何防止 UDEV 规则将设备分配给一组特定的名称

如何防止 UDEV 规则将设备分配给一组特定的名称

我有一些针对 RAID 阵列的 UDEV 规则; 10块硬盘的名称从/dev/sda到/dev/sdj。

磁盘可能随时不存在。

如何编写 UDEV 规则来防止任意 USB 等设备占用丢失的硬盘名称之一?

例如,如果我的第二个硬盘 /dev/sdb 由于某种原因被拔掉,然后有人在完全不同的端口插入 USB 设备,我需要 USB 到不是成为/dev/sdb。

我可以想出一种方法将系统上每个可用的 USB 端口映射到它自己的名称,但必须有一种更干净的方法吗?我正在考虑这样的事情,我说“如果它是 USB 设备,请为其分配一个从 k 到 z 的名称:

KERNEL=="sd?", SUBSYSTEM=="block", DEVPATH="*usb", NAME="sd[k-z]", GOTO="END_20_PERSISTENT_DISK"

KERNEL=="sd?*", ENV{DEVTYPE}=="partition", SUBSYSTEM=="block", DEVPATH=="*usb*", NAME="sd[k-z]%n"

该系统旨在完全自治,接受任何任意 USB 或硬盘设备 - 这就是我使用 DEVPATH 而不是标签和 uuid 的原因。

答案1

插入您的 USB 驱动器并使用

udevadm info -a -p /sys/block/sd* 

其中 * 是您的磁盘分配编号(sda1、sda3、sdb2 等)

然后写了一个这样的udev规则

KERNEL=="sd*", SUBSYSTEMS==" block", ATTRS{serial}=="**************", SYMLINK+="sdb%n"

当然根据 udevadm 信息编辑它

另一个好的解决方案是使用 DISK_UID 或 LABEL 进行挂载,然后 /dev/sd* 变得不重要,您将使用 LABEL 或 DISK_UUID 挂载 我更喜欢 LABEL,这是我的 fstab 的示例

LABEL=memoria     swap             swap        defaults         0   0
LABEL=root        /                ext4        defaults,acl     1   1
LABEL=utenti      /home            ext4        defaults,acl     1   2

utenti 和 root 是 lvm 卷,/dev/sd* 对于在分区上使用 LABEL 使用 e2label 命令并不重要

相关内容