持久磁盘名称 /dev/sd'x',几乎每次重新启动都会更改

持久磁盘名称 /dev/sd'x',几乎每次重新启动都会更改

我几天来一直在处理一个问题,这个问题开始拉扯我的头发。希望这里有人有一些想法来解决我的问题:-)。

我有一个带有 24 个 3.5" 驱动器的大型存储服务器。这些驱动器分布在 3 个以 IT 模式运行的 LSI 9211-8i 控制器上。这些驱动器是大型软件 raid-6 阵列 (mdraid) 的一部分,工作正常
作为操作系统驱动器,我有 2 个 1TB SSD 直接连接到主板 SATA 端口@软件 raid-1 (mdraid),除了驱动器持久名称之外,它工作正常。

由于某种原因,几乎每次重新启动都会更改直接连接到主板的 SSD 驱动器的驱动器名称。有时它们被命名为“sda + sdb”,而下次重新启动时可能会被命名为“sdy + sdz”,有时甚至是字母表中间的随机字母。由于热插拔驱动器托架标签,这非常烦人。连接到 LSI 控制器的 24 个驱动器不会发生这种情况 - 它们始终处于正确的顺序。

我希望操作系统 SSD 始终被标识为“sda + sdb”或“sdy + sdz”。我真的不介意哪个名称,只要它是静态的并且不会随着重新启动而改变。

我已经尝试在“/etc/udev/rules.d/01-disk-bay.rules”中设置自定义 udev 规则。这些规则不起作用,或者操作系统只是忽略它们,因为似乎没有任何变化。我可能做错了什么。

该文件的内容是

########## Map SATA 0 to /dev/sdy ##############


KERNEL=="sd?", SUBSYSTEM=="block", DEVPATH=="*1f.2/ata1/host*", NAME="sdy", RUN+="/usr/bin/logger My disk ATTR{partition}=$ATTR{partition}, DEVPATH=$devpath, ID_PATH=$ENV{ID_PATH}, ID_SERIAL=$ENV{ID_SERIAL}", GOTO="END_20_PERSISTENT_DISK"

KERNEL=="sd?*", ATTR{partition}=="1", SUBSYSTEM=="block", DEVPATH=="*1f.2/ata1/host*", NAME="sdy%n", RUN+="/usr/bin/logger My partition parent=%p number=%n, ATTR{partition}=$ATTR{partition}"

########## Map SATA 1 to /dev/sdz ##############


KERNEL=="sd?", SUBSYSTEM=="block", DEVPATH=="*1f.2/ata2/host*", NAME="sdz", RUN+="/usr/bin/logger My disk ATTR{partition}=$ATTR{partition}, DEVPATH=$devpath, ID_PATH=$ENV{ID_PATH}, ID_SERIAL=$ENV{ID_SERIAL}", GOTO="END_20_PERSISTENT_DISK"

KERNEL=="sd?*", ATTR{partition}=="1", SUBSYSTEM=="block", DEVPATH=="*1f.2/ata2/host*", NAME="sdz%n", RUN+="/usr/bin/logger My partition parent=%p number=%n, ATTR{partition}=$ATTR{partition}"

LABEL="END_20_PERSISTENT_DISK"

SSD 的标识信息如下: 第一个 SSD(当前显示为“sda”)

# udevadm info --name /dev/sda
P: /devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
N: sda
S: disk/by-id/ata-Crucial_CT1024MX200SSD1_1619128D4E19
S: disk/by-id/wwn-0x500a0751128d4e19
S: disk/by-path/pci-0000:00:1f.2-ata-1
E: DEVLINKS=/dev/disk/by-path/pci-0000:00:1f.2-ata-1 /dev/disk/by-id/wwn-0x500a0751128d4e19 /dev/disk/by-id/ata-Crucial_CT1024MX200SSD1_1619128D4E19
E: DEVNAME=/dev/sda
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda

和第二个 SSD(当前显示为“sdb”)。

# udevadm info --name /dev/sdb
P: /devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb
N: sdb
S: disk/by-id/ata-Crucial_CT1024MX200SSD1_1619128B9EC5
S: disk/by-id/wwn-0x500a0751128b9ec5
S: disk/by-path/pci-0000:00:1f.2-ata-2
E: DEVLINKS=/dev/disk/by-id/wwn-0x500a0751128b9ec5 /dev/disk/by-id/ata-Crucial_CT1024MX200SSD1_1619128B9EC5 /dev/disk/by-path/pci-0000:00:1f.2-ata-2
E: DEVNAME=/dev/sdb
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb

这里有人有经验如何处理这样的事情吗? :-)

答案1

/dev/sdX很长一段时间以来都不是驱动器的稳定标识符(实际上可能从来都不是)。它们按照发现的顺序进行分配,并并行探测不同的控制器。不仅如此,如果一个驱动器从公共汽车上下来并返回,它通常会收到一封新的信件。或者有时当您更换故障驱动器时(这两种情况都会发生,因为某些东西仍然引用旧驱动器,例如 md-raid 中的“故障”条目)。

那里稳定的标识符;使用它们来代替。你的udevadm info输出告诉你它们是什么:

S: disk/by-id/ata-Crucial_CT1024MX200SSD1_1619128D4E19
S: disk/by-id/wwn-0x500a0751128d4e19

这两个唯一标识驾驶本身,即使您将其移动到不同的端口。

S: disk/by-path/pci-0000:00:1f.2-ata-1

这标识了港口驱动器插入的位置。如果更换驱动器,新驱动器也将具有此标识符。

因此,例如,如果您想检查该端口中任何驱动器的 SMART 状态,您可以smartctl -x /dev/disk/by-path/pci-0000:00:1f.2-ata-1使用不是 /dev/sda。如果您想检查该特定驱动器,即使有人已将其移动到另一个端口,您也可以使用smartctl -x /dev/disk/by-id/wwn-0x500a0751128d4e19.

(如果需要,您可以使用 udev 规则设置其他短名称。您可以SYMLINK+=在规则中执行此操作;例如,请参阅/lib/udev/rules.d/60-persistent-storage.rules例如。但如果它只是在配置文件中,则通常不需要短名称) 。

相关内容