如何根据驱动器在多托架机箱中的位置来命名驱动器?

dim*_*mus 6 linux zfs udev

了解多盘位设备中坏驱动器的位置非常重要,但是驱动器的默认命名(例如等/dev/sda/dev/sdb并不能提供特定驱动器物理驻留位置的线索。

我有一个用于备份的 8 盘位外部 JBOD 机柜。它托管一个 ZFS 池并连接到 Arch Linux 盒子。在 Linux 系统上是否可以根据驱动器在机箱中的物理位置使用systemd/来命名驱动器,而不是?udev/dev/sd*

我希望名称能够反映驱动器在机箱中的物理位置 /dev/encl1/dev/encl2...或类似的名称。我希望这些标签默认出现,而不是出现/dev/sd*lsblk和中zpool status

我确实知道机箱中每个驱动器的位置,并将这些信息保存在一个文件中,但最好 lsblk直接使用其他命令查看它。

我尝试创建/etc/udev/rules.d规则

SUBSYSTEM=="block" KERNEL=="sd*" ENV{ID_SERIAL_SHORT}=="ZR5CTR4V" SYMLINK+="encl1"
Run Code Online (Sandbox Code Playgroud)

我在运行后确实得到了这样的符号链接udevadm trigger,但它们并不等同/dev/sd*,而且我无法使用它们作为替代。

don*_*l24 5

写下我的评论作为答案。

\n

使用命令

\n
lshw -c disk -c storage | grep -E 'bus info|logical name\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n

将设备名称映射到 PCI 设备。设备 id\xe2\x80\x99s 将均匀递增,其中 1 号设备的 id 最低。

\n

您还可以使用udevadm来获取设备 ID devices

\n
udevadm info --name=/dev/nvme6\n
Run Code Online (Sandbox Code Playgroud)\n

现在,您可以为磁盘设备指定与其安装的物理插槽相对应的名称。编辑或创建/etc/udev/rules.d/my.rules. 您可以使用规则重命名设备。

\n
KERNEL=="nvme*", SUBSYSTEM=="nvme", ENV{PHYSDEVPATH}=="*pci0000:20/0000:20:01.3/0000:25:00.0*", NAME="bay6"\nKERNEL=="nvme*", ENV{DEVTYPE}=="partition", SUBSYSTEM=="nvme", ENV{PHYSDEVPATH}=="*pci0000:20/0000:20:01.3/0000:25:00.0*", NAME="bay6p%n"\n
Run Code Online (Sandbox Code Playgroud)\n

如果您有 SD 设备或 nvme,请将其更改SUBSYSTEMblock.

\n

可以输入别名而不是重命名设备。查看SYMLINK+="bay6"udev 文档。

\n