![如何物理识别 RAID 阵列中的单个驱动器?](https://linux22.com/image/1033346/%E5%A6%82%E4%BD%95%E7%89%A9%E7%90%86%E8%AF%86%E5%88%AB%20RAID%20%E9%98%B5%E5%88%97%E4%B8%AD%E7%9A%84%E5%8D%95%E4%B8%AA%E9%A9%B1%E5%8A%A8%E5%99%A8%EF%BC%9F.png)
我有一个外部驱动器托架,里面有 4 个 eSATA 磁盘。我的系统有一个 4 端口 eSATA 卡,以及一对内部硬件 RAID1 驱动器。外部驱动器位于软件 RAID1 对中,如/dev/md0
和/dev/md1
。两者都已配置为 LVM 物理卷以创建我的storagevg
LVM 卷组。最近,一个驱动器离线(我怀疑是电缆问题),但似乎没有很好的方法来物理识别我需要检查哪个驱动器,特别是因为启动之间的初始化顺序不一样。我如何找到需要注意的磁盘?
答案1
磁盘实用程序(位于系统->管理)将为您提供所有磁盘的序列号。
这是我所看到的(查看右上角的序列号)。您会注意到此驱动器位于 mdadm RAID 阵列内。磁盘实用程序可以穿透该阵列进行原始磁盘访问。
我的电脑中有 6 个相同型号的磁盘,因此我画了一个小图来显示它们在盒子中的位置和序列号,以便在紧急情况下可以在序列上快速找到它们。
反之亦然,如果一个磁盘坏了,我只需要找到哪些磁盘出现,然后我就可以消除它们,直到我知道哪个序列号丢失了。
编辑:我正在尝试改进我的 bash-fu,因此我编写了这个命令行版本,只为您提供机器中当前的磁盘序列号列表。fdisk
可能会丢弃一些错误,但这不会污染列表:
for disk in `sudo fdisk -l | grep -Eo '(/dev/[sh]d[a-z]):' | sed -E 's/://'`;
do
sudo hdparm -i $disk | grep -Eo 'SerialNo=.*' | sed -E 's/SerialNo=//';
done
(如果需要的话,你可以把它分成一行——为了便于阅读,我把它分解了)
编辑2: ls /dev/disk/by-id/
稍微容易一些 ;)
答案2
如果您无法将驱动器序列号或端口指示与磁盘的空间位置相匹配,您可以运行cat /dev/sdz >/dev/null
(sdz
故障驱动器在哪里)并通过其 LED 找到驱动器(如果您不在嘈杂的服务器机房中,则可以通过耳朵找到驱动器)。如果驱动器甚至无法启动,这应该足以判断它是哪一个。下次请务必在磁盘上贴上可见的标签。
答案3
给出的信息udisks
(在命令行或GNOME 磁盘实用程序) 包括磁盘序列号。在我拥有的磁盘上,序列号打印在上侧和正面(包含连接器的磁盘的另一侧),既有数字也有条形码。不幸的是,大多数 PC 机箱都无法读取这些序列号,除非拔出磁盘……
您还可以在 中找到序列号/dev/disk/by-id/
。
由于您的磁盘处于离线状态,我假设内核目前“看不到”它?在这种情况下,您可能必须通过排除法:您想要序列号未列出的磁盘...
答案4
安全接口
$ lsscsi -l [0:0:0:0] 磁盘 ATA TOSHIBA THNS128G AGLA /dev/sda 状态 = 运行队列深度 = 1 scsi_level = 6 类型 = 0 设备阻塞 = 0 超时 = 30 [1:0:0:0] cd/dvd HL-DT-ST DVDRAM GT30N LT09 /dev/sr0 状态 = 运行队列深度 = 1 scsi_level = 6 类型 = 5 设备阻塞 = 0 超时 = 30
如果磁盘未处于运行状态,则是一个很好的迹象。因此 /proc/mdstat 将告诉您哪个成员发生故障。假设您没有一个好的驱动器笼,您将不得不通过序列号进行深入研究,sg_inq 应该会有所帮助。
如果您确实有一个良好的驱动器笼,您应该能够启用磁盘信标来帮助识别故障成员。