往mdadm创建的raid5阵列中添加新硬盘以扩容
前言
之前手上只有4块hdd,虽然硬盘柜有5个盘位,但只是用4盘组了raid5。
raid5用了一阵以后,觉得还行,就想着把剩下的一个空盘位利用起来,所以又从pdd入手了好几片500GB的拆机硬盘。
硬盘到手了,照例又是查smart信息、全盘扫坏道。几块西数的是清零盘,但没有扫出坏道;几块希捷的通电时间惊人,一块3万小时,一块6万小时,但没有扫出坏道。
也就20rmb一片,既然没坏道,那就凑合着用吧。
raid5扩容
先描述下本次我想要实现的需求:有一个正在运行的四盘位raid5阵列,添加一个块同容量的硬盘,从四盘位扩展为五盘位。
有需求了就找解决方案,搜关键字mdadm
、raid5
、添加硬盘
,但没有搜到什么靠谱可用的方案,那就自己摸索吧。
已有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),那就祈求好运吧。
😄