我使用 mdadm 在 3 台 Rackspace CloudServer 上创建了 3 个 RAID0 阵列,并使用 Rackspace 的 CloudBlockStorage 作为其设备。每个阵列都有自己的一组 CBS 卷。RS-CBS 的驱动器上限为 1TB,而我需要更大的存储空间。其中一台服务器用于数据存储,第二台是该服务器的实时镜像,第三台是夜间快照。我使用以下命令在每台服务器上创建了阵列:
mdadm --create /dev/md0 --level=0 --raid-devices=3 /dev/xvdb1 /dev/xvdd1 /dev/xvde1
当需要扩展阵列时,由于这是我第一次扩展阵列,因此我从最不重要的服务器开始:快照服务器。我添加了一个新卷,经过一番调整,我得出了这个命令:
mdadm --grow /dev/md0 --raid-devices=4 --add /dev/xvdf1
根据 mdadm 手册页,它说您无法扩大 RAID0,因此 mdadm 将其转换为 RAID4,扩大它,然后转换回来。(它永远不会转换回来,但这是另一个问题)。阵列重塑,但大小永远不会改变。我的假设是新驱动器刚刚成为阵列的奇偶校验驱动器。因此,为了获得所需的空间,我添加了另一个卷:
mdadm --grow /dev/md0 --raid-devices=5 --add /dev/xvdg1
它进行了重塑并为我提供了我所希望的额外 500GB,因此我这样做resize2fs /dev/md0
并且可以开始使用;2TB 的空间。
这就是怪事发生的地方。我切换到在镜像服务器上扩大阵列。从前面的步骤中得知,我需要添加两个卷才能获得所需的额外空间,因此我使用以下命令:
mdadm --grow /dev/md0 --raid-devices=5 --add /dev/xvdf1 /dev/xvdg1
它重新整形后一切看起来都很好,但当我执行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
输出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?或者我是否错误地增加了第二个阵列(镜像服务器),并且没有我以为会得到的奇偶校验驱动器?我能做什么,或者我应该做什么,才能持续增加这些阵列?
答案1
我也遇到了他的问题,经过一些测试后可以建立软件 RAID 0 阵列。
我发现了一个选项,如果你仔细想想,将它包含在 grow 命令中是有意义的,这个选项是,--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