You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重建mdadm RAID作为DRBD后端存储时出现容量不匹配错误的技术问询

重建mdadm RAID作为DRBD后端存储时出现容量不匹配错误的技术问询

几年前我用原生Debian Linux搭建了一套存储集群,用mdadm RAID做后端存储,搭配Debian官方提供的DRBD 0.8版本。目前集群里有两个RAID6卷,分别由2TB和14TB的磁盘组成。

之后我给两个节点都新增过磁盘、替换过故障盘,也完成了多轮Debian系统版本升级。

故障排查背景

最近主节点01出现了异常高负载和大量KO超时问题,我通过iostat -x 2命令观察磁盘状态,发现有一块磁盘的平均队列长度会时不时飙升,远高于其他磁盘的数值。为了隔离故障源,我手动将从节点02切换为活动主节点,然后逐个断开DRBD的网络连接,最终定位到问题出在原主节点01的其中一个RAID卷上。

我用smartctl -t long对磁盘做了扩展健康检测,再通过smartctl -a查看检测结果,并没有发现能预示磁盘即将故障的明显异常数值。

容量不匹配问题出现

为了排除那块可疑磁盘的影响,我把目标RAID卷重建为RAID5,暂时将可疑磁盘排除在外。之后我用默认参数创建新的DRBD元数据(drbdadm create-md resname),并强制从节点02作为同步源,结果在节点02的日志里看到了如下报错:

The peer's disk size is too small! (39066455672 < 39066476152 sectors)
The new volume is 20,480 sectors too small!

对比两个节点通过mdadm --detail输出的阵列参数:

节点阵列容量(块)单设备使用容量(块)
0119,533,834,2401,953,382,400
0219,533,824,0001,953,383,424

之后我又把阵列重新创建回原来的RAID6模式,但容量差异依然存在。对比两个节点的mdadm --detail输出,diff结果如下:

--- 01  2023-01-19 13:37:48.552858896 +0100
+++ 02  2023-01-19 13:34:58.098143189 +0100
@@ -1,17 +1,17 @@
/dev/md4:
Version : 1.2
-     Creation Time : Thu Jan 19 13:37:11 2023
+     Creation Time : Fri Nov 26 11:23:33 2021
Raid Level : raid6
-        Array Size : 19533824000 (18628.91 GiB 20002.64 GB)
-     Used Dev Size : 1953382400 (1862.89 GiB 2000.26 GB)
+        Array Size : 19533834240 (18628.92 GiB 20002.65 GB)
+     Used Dev Size : 1953383424 (1862.89 GiB 2000.26 GB)
Raid Devices : 12
Total Devices : 12
Persistence : Superblock is persistent

Intent Bitmap : Internal
-       Update Time : Thu Jan 19 13:37:24 2023
-             State : clean, resyncing
+       Update Time : Thu Jan 19 13:34:11 2023
+             State : active
Active Devices : 12
Working Devices : 12
Failed Devices : 0
@@ -22,22 +22,20 @@
Consistency Policy : bitmap

-     Resync Status : 0% complete
-
Name : 4
-              UUID : 4a730173:b97ac886:8194cbed:f30861d2
-            Events : 3
+              UUID : d6e60c19:5b08166e:a6b78c2b:a2676f7d
+            Events : 4580
Number   Major   Minor   RaidDevice State
0       8        0        0      active sync   /dev/sda
1       8       16        1      active sync   /dev/sdb
-       2       8       64        2      active sync   /dev/sde
+       2       8       48        2      active sync   /dev/sdd
3       8       32        3      active sync   /dev/sdc
-       4       8       48        4      active sync   /dev/sdd
-       5       8       80        5      active sync   /dev/sdf
-       6       8      144        6      active sync   /dev/sdj
-       7       8      240        7      active sync   /dev/sdp
-       8       8      128        8      active sync   /dev/sdi
-       9      65        0        9      active sync   /dev/sdq
-      10       8      176       10      active sync   /dev/sdl
+       4       8       80        4      active sync   /dev/sdf
+       5       8      128        5      active sync   /dev/sdi
+       6       8      112        6      active sync   /dev/sdh
+       7       8      144        7      active sync   /dev/sdj
+       8       8      160        8      active sync   /dev/sdk
+       9       8      176        9      active sync   /dev/sdl
+      10       8      192       10      active sync   /dev/sdm
11       8      208       11      active sync   /dev/sdn

当我尝试强制使用节点02的单设备容量值创建阵列时,mdadm抛出了如下错误:

mdadm: /dev/sda is smaller than given size. 1953382400K < 1953383424K + metadata

而且不止/dev/sda,多块磁盘都出现了这个提示。我很困惑,之前这个阵列明明能正常运行,现在mdadm却提示磁盘空间不足?

我的疑问

  • 为什么新重建的阵列每个磁盘少用了1024块空间?我从来没使用过mdadm -z max选项,测试发现就算加上这个参数,单设备使用容量还是停在1953382400块。
  • 有没有办法通过指定mdadm的兼容性参数,强制创建出足够容量的阵列,让它能再次作为DRBD的后端存储?

备注:内容来源于stack exchange,提问作者PoC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:12:56