mdadm:越来越多的RAID0arrays奇怪

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

mdadm --create /dev/md0 --level=0 --raid-devices=3 /dev/xvdb1 /dev/xvdd1 /dev/xvde1 

到了增长arrays的时候,由于这是我第一次增长arrays,所以我开始使用最不关键的服务器:快照服务器。 我添加了一个新的卷,并有一个小小的摆弄,提出了这个命令:

 mdadm --grow /dev/md0 --raid-devices=4 --add /dev/xvdf1 

根据mdadm手册页,它说你无法增长一个RAID0,所以mdadm把它转换成RAID4,增长,然后转换回来。 (它永远不会变回,但这是另一个问题)。 该arrays重塑,但大小永远不会改变。 我的假设是,新的驱动器刚刚成为arrays的奇偶校验驱动器。 所以为了得到我需要的空间,我增加了一个空间:

 mdadm --grow /dev/md0 --raid-devices=5 --add /dev/xvdg1 

这个重塑并给了我额外的500GB,我希望所以我做resize2fs /dev/md0 ,我很好去; 2TB的空间。

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

 mdadm --grow /dev/md0 --raid-devices=5 --add /dev/xvdf1 /dev/xvdg1 

它重塑和东西看起来不错,但是当我做resize2fs /dev/md0后面跟着一个df -hal我发现它确实增长了,并报告了2.5TB的空间,而不是我期待的2.0TB。 就好像它没有创build奇偶校验驱动器,我假设它从第一次运行,并使用arrays的所有可用空间。

有一点看起来不一样,就是在镜像服务器上进行mdadm -D /dev/md0之后, 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 

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> 

所以我的担心是…我增长的第一个数组(快照服务器)不正确,它应该得到2.5TB,但我的错误只给了它2.0TB? 还是我增加了第二个arrays(镜像服务器)不正确,并没有奇偶校验驱动器,我想我会得到? 我能做些什么,或者我应该做些什么来持续增长这些数组?

我也遇到了他的问题,经过一些testing后,可以生成一个软件RAID 0arrays。

我发现了一个选项,如果你想到在增长命令中包含这个选项,选项是--backup-file 。 如果你考虑如何真实地增长一个RAID 0arrays,就像你在硬件上做的那样,你需要将数据复制到其他地方来销毁和重新创buildarrays,如果没有的话,我想看看math的增长没有多余空间的RAID 0arrays(真的)。

我发现的另一件事是我不能只添加一个驱动器的RAID 0arrays,只有当我添加两个驱动器,还没有尝试更多的呢。

因此,生成一个RAID 0arrays的命令是(对于你的情况):

 mdadm --grow /dev/md0 --raid-devices=5 \ --backup-file=/drive/With/Enough/Space/growth.bak --add /dev/xvdf1 /dev/xvdg1