![将磁盘添加到现有 RAID 失败,并显示“磁盘容量不足”](https://linux22.com/image/786741/%E5%B0%86%E7%A3%81%E7%9B%98%E6%B7%BB%E5%8A%A0%E5%88%B0%E7%8E%B0%E6%9C%89%20RAID%20%E5%A4%B1%E8%B4%A5%EF%BC%8C%E5%B9%B6%E6%98%BE%E7%A4%BA%E2%80%9C%E7%A3%81%E7%9B%98%E5%AE%B9%E9%87%8F%E4%B8%8D%E8%B6%B3%E2%80%9D.png)
我有一台非常老旧的物理服务器,它使用许多磁盘组成多个 RAID6 组。这些磁盘不在同一机箱中,而是通过此服务器上的 RAID 控制器连接的 JBOD 系统。在其中一个 RAID 组中,我的一个磁盘发生故障。更换故障磁盘后,输出如下storcli
:
$ storcli /c0 show
…
--------------------------------------------------------------------------
DG Arr Row EID:Slot DID Type State BT Size PDC PI SED DS3 FSpace
--------------------------------------------------------------------------
1 - - - - RAID6 Pdgd N 27.285 TB dflt N N none N
1 0 - - - RAID6 Dgrd N 27.285 TB dflt N N none N
1 0 0 34:0 48 DRIVE Onln N 2.728 TB dflt N N none -
1 0 1 34:1 49 DRIVE Onln N 2.728 TB dflt N N none -
1 0 2 34:2 50 DRIVE Onln N 2.728 TB dflt N N none -
1 0 3 34:3 51 DRIVE Onln N 2.728 TB dflt N N none -
1 0 4 - - DRIVE Msng - 2.728 TB - - - - -
1 0 5 34:5 53 DRIVE Onln N 2.728 TB dflt N N none -
1 0 6 34:6 55 DRIVE Onln N 2.728 TB dflt N N none -
1 0 7 34:7 54 DRIVE Onln N 2.728 TB dflt N N none -
1 0 8 34:8 56 DRIVE Onln N 2.728 TB dflt N N none -
1 0 9 34:9 57 DRIVE Onln N 2.728 TB dflt N N none -
1 0 10 34:10 58 DRIVE Onln N 2.728 TB dflt N N none -
1 0 11 34:11 59 DRIVE Onln N 2.728 TB dflt N N none -
从上面我们可以看到插槽 34:4 丢失,通过以下命令可以确认:
$ MegaCli -PdGetMissing -a0
Adapter 0 - Missing Physical drives
No. Array Row Size Expected
0 1 4 2861056 MB
当我尝试手动将此磁盘添加到其磁盘组时,出现以下错误:
$ MegaCli -PdReplaceMissing -PhysDrv [34:4] -Array1 -Row4 -a0
Adapter: 0: Failed to replace Missing PD at Array 1, Row 4.
FW error description:
The specified physical disk doesn't have enough capacity to complete the requested command.
Exit Code: 0x0d
按照这个旧megaCLI 指南,上述错误代码是由于“驱动器太小,无法进行请求的操作”。
如果我比较storcli /c0/e34/s3,4 show all
输出,替换磁盘具有相同的容量和扇区大小:
Drive /c0/e34/s3 Device attributes : <<<< working disk
==================================
WWN = 5000c50090fb1146
Firmware Revision = SN06
Raw size = 2.728 TB [0x15d50a3b0 Sectors]
Coerced size = 2.728 TB [0x15d400000 Sectors]
Non Coerced size = 2.728 TB [0x15d40a3b0 Sectors]
Device Speed = 6.0Gb/s
Link Speed = 6.0Gb/s
Logical Sector Size = 512B
Drive /c0/e34/s4 Device attributes : <<<< new disk to add
==================================
WWN = 5000c50074a7f9cf
Firmware Revision = SN04
Raw size = 2.728 TB [0x15d50a3b0 Sectors]
Coerced size = 2.728 TB [0x15d400000 Sectors]
Non Coerced size = 2.728 TB [0x15d40a3b0 Sectors]
Device Speed = 6.0Gb/s
Link Speed = 6.0Gb/s
Logical Sector Size = 512B
Physical Sector Size = 512B
当它们看起来完全相同时,知道为什么它会抱怨容量吗?
已编辑(基于@djdomi 和@U880D 的建议)
MegaCli -PDList -a0
要查看所有磁盘的固件修订版本,请过滤以下输出:
$ MegaCli -PDList -a0 | awk '/^Enclosure Device ID/ {printf "%d", $4; next} /^Slot Number:/ {printf ":%d\t", $3; next} /Device Firmware Level/ {print $4}'
34:0 SN06
34:1 TN02
34:2 TN02
34:3 SN06
34:4 SN04
34:5 TN02
34:6 TN02
34:7 TN02
34:8 TN02
34:9 TN02
34:10 TN02
34:11 SN04
固件混合。磁盘 34:11 的固件 SN04 与 34:4 相同。想知道为什么它只影响磁盘 34:4?
答案1
使固件版本匹配
理想情况下,它们应该是控制器兼容性列表中标识为经过认证兼容的版本,但您要做的第一件事是将固件更新为驱动器之间相同的版本。
获取适合驱动器/序列的文件并将其用于storcli
将固件下载到每个驱动器。
storcli64 /c0/e34/s3 download src=TN02.LOB
# ^-- your firmware file here
它可能会解决这个问题——仅从我自己的卑微经验来看,它往往能解决很多其他怪异问题。我以前曾经为一个电信数据中心维护过数量惊人的服务器(当时 SAN 还很奇特,刀片服务器也越来越流行)——我们很少发现存储处于不同的固件级别,但当“某些服务器的驱动器阵列不稳定”时,它会频繁地解决不稳定问题,以至于“没有明显的其他因素/原因导致阵列中的驱动器进入故障状态”,并且我们注意到固件并不相同全部驱动器,我们将解决固件问题并将驱动器设置回“良好”/重建阵列。
就我个人而言,我有两个驱动器使用的是较旧但“经过认证兼容”的固件,还有三个驱动器使用的是较新的版本。这两个驱动器每隔几个月就会在重负载下掉线(一个接一个),但会恢复/重建/再撑一个月。我找不到任何现有驱动器固件的文件,所以我将所有驱动器都更新到最新版本(兼容性文档中未列出),阵列在被替换之前一直很可靠。
当固件/驱动器全部相同时
如果您足够幸运地排除上述问题,但不幸的是在尝试添加磁盘时仍然出现错误代码 13,我发现了导致该问题的另一个设置。
检查强制模式:
storcli64 /c0 show coercion
如果你有其他东西:
Controller Properties :
=====================
-----------------------
Ctrl_Prop Value
-----------------------
Coercion Mode Disabled
-----------------------
您可能会发现将其设置为“已禁用”即可。此命令将处理该问题:
storcli64 /c0 set coercion=0
笔记:我不知道这是否会导致数据丢失,因为我正在处理的卷上没有我打算尝试访问的数据。
小提示
如果您认为所有内容都相同,并且想要确认控制器看到的内容,则运行以下命令(zsh
)可能会让您发现识别罪魁祸首的差异:
diff --color=always -y =(storcli64 /c0/e34/s1 show all) =(storcli64 /c0/e34/s6 show all)
# of drive working in array ----^ # of drive refusing to add ---^