如何在 Linux RAID 中识别物理磁盘

如何在 Linux RAID 中识别物理磁盘

有没有一种可靠的方式来分辨 RAID 中的哪个物理驱动器与操作系统赋予它的软件设备名称相关?

我在连接到 PC 的集线器上设置了一个消费级 USB 磁盘 RAID5 阵列(还有一个备用磁盘)。这可以用作廉价的 NAS。

/proc/mdstat每个设备都通过其设备名称进行识别(例如sdbsdc

据我所知,Linux 设备名称取决于启动时读取硬件的顺序。因此,我不应该在每个驱动器上贴上带有这些设备名称的标签,因为sdc今天可能是sdb将来。

如果发生故障,我可以通过停止 RAID 来测试当前设备名称映射,然后逐个dmesg -W移除设备,直到通过排除法移除发生故障的设备。但有没有更好的方法呢?

我发现我无法单独标记 RAID 成员 - 他们都必须共享阵列的名称:https://wiki.archlinux.org/title/persistent_block_device_naming#by-label

我已经看过了,ledctl但是它不适用于消费者驱动器:https://linux.die.net/man/8/ledctl

答案1

用于lsblk -S将每个设备映射到磁盘的序列号(或 WWN(如果添加了-o +wwn))。

lsusb.py -ci或显示的 USB 集线器路径udevadm info /dev/sdd | grep ID_PATH=应具有与物理 USB 端口的固定映射,例如,在我的服务器上,“1-1.1”和“1-1.2”连接到前面板端口。外部集线器上的端口顺序可能并不总是很明显,但一旦弄清楚,它应该仍然保持不变。

LED 的替代方案: sg3_utils 中的scsi_start/scsi_stop脚本可以根据需要使 HDD 启动或停止旋转(无需真正断开连接)。如果阵列处于空闲状态,请停止所有磁盘并逐个启动它们,直到所有机箱与 HDD 序列号匹配为止。

答案2

我写了一个答案,但后来发现使用 lsblkUUID_SUB值并不是解决方案。最近的磁盘故障事件显示,它UUID_SUB似乎没有像我最初想的那样连接到磁盘分区的超级块。

因此,我放弃我原来的答案,并让其他人投票删除它。

到目前为止,唯一可行的答案是使用裸盘,其序列号可见于驱动器外壳本身,而不是外壳上,外壳可能有所不同。然后用它lsbk -S来确定在发生故障时要处理哪个物理驱动器。

相关内容