有没有一种可靠的方式来分辨 RAID 中的哪个物理驱动器与操作系统赋予它的软件设备名称相关?
我在连接到 PC 的集线器上设置了一个消费级 USB 磁盘 RAID5 阵列(还有一个备用磁盘)。这可以用作廉价的 NAS。
/proc/mdstat
每个设备都通过其设备名称进行识别(例如sdb
)sdc
。
据我所知,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
来确定在发生故障时要处理哪个物理驱动器。