前言

之前手上只有4块hdd,虽然硬盘柜有5个盘位,但只是用4盘组了raid5。

raid5用了一阵以后,觉得还行,就想着把剩下的一个空盘位利用起来,所以又从pdd入手了好几片500GB的拆机硬盘。

硬盘到手了,照例又是查smart信息、全盘扫坏道。几块西数的是清零盘,但没有扫出坏道;几块希捷的通电时间惊人,一块3万小时,一块6万小时,但没有扫出坏道。

也就20rmb一片,既然没坏道,那就凑合着用吧。


raid5扩容

先描述下本次我想要实现的需求:有一个正在运行的四盘位raid5阵列,添加一个块同容量的硬盘,从四盘位扩展为五盘位。

有需求了就找解决方案,搜关键字mdadmraid5添加硬盘,但没有搜到什么靠谱可用的方案,那就自己摸索吧。

已有raid5阵列要添加硬盘,有两个方案:

方案一: 新建raid5

这个方案很傻瓜,但是非常的安全而且非常的效率,可行度100%。前提是你手上有很多备用硬盘,或者有一个大容量硬盘做数据中转。

如果手上硬盘数量足够多,那就保持旧四盘位raid不动,新组装一个五盘位raid5,然后直接从旧raid拷数据到新raid。整个任务所耗费的时间由两个raid的硬盘读写速度和局域网带宽决定。

如果手上硬盘不够用来组新raid,那先从旧raid把数据导出一份备份,然后停用四盘位旧raid + 加硬盘 + 创建五盘位新raid,最后把备份的数据再导入回去。

方案二:旧raid5扩容

这个方案有一定的风险性,操作前最好把数据备份一下。

旧四盘位的raid5,添加一块硬盘。假定新添加的硬盘是/dev/sdf

第一步:清除分区数据。

因为我的旧raid是清除了分区直接裸盘组raid,所以新硬盘也先清除分区信息。如果你的raid是先分区然后以分区为单位组装的raid,那新硬盘也记得同样先分区。

# 查看分区信息
wipefs /dev/sdf

# 清除分区信息
wipefs -a -f /dev/sdf

第二步:添加硬盘

新盘添加进阵列。假定阵列名为/dev/md0

mdadm --manage /dev/md0 --add /dev/sdf

添加完成后,查看一下阵列信息。

mdadm -D /dev/md0

此时可以看到阵列的硬盘数量从4变成了5。但是新加入的硬盘并没有真正的融入进去,它的角色是hot spare热备盘,也就是当四盘raid中出现一块坏盘时,这块新盘会自动替上去重建raid修复数据。

第三步:重塑(reshape)

我的目的并不是给四盘位raid5添加一块热备盘(hot spare),我是想把新盘加进存储池扩充容量。

指定raid5的硬盘数量为5

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

命令执行完成后,查看一下阵列信息

mdadm -D /dev/md0

此时就可以看到,存储池的硬盘从4块变成了5块,新的raid开始重塑(reshaping)。

整个重塑过程会非常非常非常的漫长,这个时间单位以小时甚至以天计算,请耐心等待mdadm完成任务。

第四步:调整阵列容量

在经历了漫长的重塑(reshape)以后,进度条终于到了100%,可以进行下一步操作了。

把raid容量调整为最大!

mdadm --grow /dev/md0 --size=max

查看阵列当前状态,会看到当前是resyncing(同步)。

mdadm --detail /dev/md0

然后耐心等待mdadm对阵列进行同步(resyncing),这个过程比重塑(reshape)快很多。

第五步:调整文件系统大小

raid扩容以后,文件系统无法自动识别新的容量,需要手动执行resize。

resize2fs /dev/md0

好了,到此raid5阵列扩容结束。🎉


注意事项

请注意备份数据。无论哪个方案,数据安全最重要,开始操作之前,请务必备份数据。

针对方案二,有以下几个注意点需要务必、千万留意:

  • raid在重塑(reshape)过程中,强烈建议不要对raid存储池有任何的读写操作,请耐心等它重塑完了再操作。这时候raid阵列的io性能会暴跌,毫无使用体验可言。而且这时候操作存储池,容易和raid重塑(reshape)任务冲突,导致数据丢失。
  • raid在重塑(reshape)过程中,千万不要断电。这个重塑过程短则10多个小时,长则几天几夜,请务必保证供电,中途断电可能导致整个阵列损坏、数据丢失。
  • raid在重塑(reshape)过程中,不要去重启宿主机(host)。重塑操作依赖宿主机(也就是nas系统、linux系统)跑mdadm任务,重启系统会导致任务中断,可能引起阵列损坏、数据丢失。
  • raid在重塑(reshape)过程中,阵列中的所有硬盘都长时间、高负荷运转,这种情况下,如果用旧硬盘组的raid,很容易出现硬盘扛不住挂掉一块,类似raid5坏掉一块盘以后进入重建(rebuilding)流程,硬盘长时间、高负荷运转,又坏了一块盘,最终引起雪崩效应整个阵列gg、数据全丢。所以,请提前备份数据。

总结

请选择方案一,方案二的风险太高了。

如果你像我一样头铁选择了方案二,而且已经在重塑(reshaping),那就祈求好运吧。

😄