mdadm:增加 RAID0 阵列的怪异性

Ken*_* S. 5 linux raid mdadm rackspace-cloud

我使用 Rackspace 的 CloudBlockStorage 作为设备在 3 个 Rackspace CloudServer 上使用 mdadm 创建了 3 个 RAID0 阵列。每个阵列都有自己的一组 CBS 卷。RS-CBS 的驱动器上限为 1TB,我需要更大的存储空间。其中一台服务器用于数据存储,第二台是该服务器的实时镜像,第三台是夜间快照。我使用以下命令在每台服务器上创建了数组:

mdadm --create /dev/md0 --level=0 --raid-devices=3 /dev/xvdb1 /dev/xvdd1 /dev/xvde1
Run Code Online (Sandbox Code Playgroud)

当需要扩展阵列时,由于这是我第一次扩展阵列,我从最不重要的服务器开始:快照服务器。我添加了一个新卷,并稍微摆弄了一下,想出了这个命令:

mdadm --grow /dev/md0 --raid-devices=4 --add /dev/xvdf1
Run Code Online (Sandbox Code Playgroud)

根据 mdadm 手册页,它说您无法扩展 RAID0,因此 mdadm 将其转换为 RAID4,进行扩展,然后再转换回来。(它永远不会转换回来,但这是另一个问题)。数组会重塑,但大小永远不会改变。我的假设是新驱动器刚刚成为阵列的奇偶校验驱动器。所以为了获得我需要的空间,我添加了另一个卷:

mdadm --grow /dev/md0 --raid-devices=5 --add /dev/xvdg1
Run Code Online (Sandbox Code Playgroud)

这重塑了我并为我提供了我希望的额外 500GB,所以我做到了resize2fs /dev/md0并且很高兴;2TB 空间。

所以这就是奇怪的地方。我切换到在镜像服务器上增长阵列。从前面的步骤知道我需要添加两个卷来获得我需要的额外空间,我使用这个命令:

mdadm --grow /dev/md0 --raid-devices=5 --add /dev/xvdf1 /dev/xvdg1
Run Code Online (Sandbox Code Playgroud)

它可以重塑并且看起来很好,但是当我执行resize2fs /dev/md0接下来的 a 时,df -hal我发现它确实增长了并且报告了 2.5TB 的空间,而不是我期望的 2.0TB。就好像它没有创建奇偶校验驱动器,我认为它从第一次运行开始就创建了并使用了阵列的所有可用空间。

看起来不同的一件事是mdadm -D /dev/md0镜像服务器上的重塑后​​的输出。我在 RAID 设备上看到了这一点:

    Number   Major   Minor   RaidDevice State
   0     202       17        0      active sync   /dev/xvdb1
   1     202       49        1      active sync   /dev/xvdd1
   2     202       65        2      active sync   /dev/xvde1
   5     202       97        3      active sync   /dev/xvdg1
   4     202       81        4      active sync   /dev/xvdf1
   5       0        0        5      removed
Run Code Online (Sandbox Code Playgroud)

的输出cat /proc/mdstat表明它确实转换为 RAID4:

    Personalities : [raid0] [raid6] [raid5] [raid4]
md0 : active raid4 xvdg1[5] xvdf1[4] xvdd1[1] xvdb1[0] xvde1[2]
      2621432320 blocks super 1.2 level 4, 512k chunk, algorithm 5 [6/5] [UUUUU_]

unused devices: <none>
Run Code Online (Sandbox Code Playgroud)

所以我的担忧是......我是否错误地增长了第一个阵列(快照服务器),它应该得到 2.5TB,但我的错误只给了它 2.0TB?或者我是否错误地增加了第二个阵列(镜像服务器)并且没有我认为我会得到的奇偶校验驱动器?我能做些什么,或者我应该做些什么来持续增长这些阵列?

小智 3

我也遇到了他的问题,经过一些测试可以增加软件 RAID 0 阵列。

我找到了一个选项,如果您认为将其包含在增长命令中是有意义的,该选项是--backup-file. 如果你想像在硬件中那样实际增长 RAID 0 阵列,你需要将数据复制到其他地方来销毁并重新创建阵列,如果不是,我希望看到数学增长没有额外空间的 RAID 0 阵列(真的)。

我发现的另一件事是我无法仅将一个驱动器添加到 RAID 0 阵列,只有添加两个驱动器才有效,还没有尝试过更多。

因此,增长 RAID 0 阵列的命令是(针对您的情况):

mdadm --grow /dev/md0 --raid-devices=5 \
  --backup-file=/drive/With/Enough/Space/growth.bak --add /dev/xvdf1 /dev/xvdg1
Run Code Online (Sandbox Code Playgroud)