我有一些针对 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 命令并不重要