首页/系统/服务器硬件与 RAID 速查/mdadm 在线扩容与 reshape
RAID 级别与计算68 条

mdadm 在线扩容与 reshape

mdadm 支持给阵列加盘并 reshape 扩展容量(如 RAID 5 从 4 盘扩到 5 盘),过程在线但耗时;完成后需要扩展文件系统才能使用新增空间。

mdadm 在线扩容是什么

mdadm 是 Linux 内核 md 软 RAID 的管理工具,--grow 支持在阵列在线时改变成员数量或 RAID 级别(即 reshape),例如把 RAID 5 从 4 盘扩到 5 盘。reshape 会按新布局重写整盘的数据与校验分布,耗时随容量增长,期间 IO 性能下降。阵列容量变大之后文件系统仍停在旧边界,必须再扩展一次才能用上新空间。

基本信息

适用平台Linux 内核 md/raid,主流发行版(Debian、RHEL、SUSE)通用
关键命令mdadm /dev/md0 --add <设备>、mdadm --grow /dev/md0 --raid-devices=N
进度查看cat /proc/mdstat,或 mdadm --detail /dev/md0
前提有可用空闲盘或分区,且内核与 mdadm 版本支持目标迁移
文件系统扩展ext4 用 resize2fs,XFS 用 xfs_growfs(针对挂载点执行)

扩容流程(RAID 5 加一块盘)

扩容流程(RAID 5 加一块盘)
cat /proc/mdstat                     # 记录扩容前状态
mdadm --detail /dev/md0 | grep -i -E "raid|state"   # 确认阵列健康且无降级
mdadm /dev/md0 --add /dev/sdf1       # 把新盘加入阵列
mdadm --grow /dev/md0 --raid-devices=5   # 触发 reshape
cat /proc/mdstat                     # 观察 reshape 进度
resize2fs /dev/md0                   # ext4 扩展;XFS 用 xfs_growfs /mount

各阶段检查项

阶段检查项说明
扩容前备份与 scrub不一致数据在 reshape 后更难定位
扩容前新盘分区大小不小于现有成员分区,否则无法加入
扩容中mdstat 的 reshape 行关注进度与预计剩余时间
扩容后文件系统扩展不执行 resize2fs 或 xfs_growfs 就看不到新容量

典型使用场景

  • 容量告急:在不停业务的前提下给阵列加盘扩容
  • 盘位补齐:机箱有空槽时逐步增加成员盘,摊平采购成本
  • 级别升级:把 RAID 5 调整为 RAID 6,提高容错能力
  • 测试环境改造:用 --grow 快速验证不同成员数下的性能差异
  • 容量规划验证:通过一次真机 reshape 获取耗时数据,用于后续估算
reshape 中断电可能导致阵列停在中间状态;变更前确认 UPS 与备份,并保留一份阵列元数据备份。
reshape 期间可用 /proc/sys/dev/raid/speed_limit_max 控制后台速率,业务高峰期压低、夜间调高,变更后记得恢复原值。

变更前后核对清单

  • 确认阵列健康、无降级、无正在运行的一致性检查任务
  • 为新盘建立与原成员分区大小一致的分区并清除残留超级块
  • 记录扩容前的组成、容量与文件系统使用率,便于回退判断
  • 扩容完成后核对新容量、挂载状态与业务监控指标是否正常

易错点

  • 扩容前没做 scrub:不一致数据在 reshape 后更难定位
  • 忘记 resize2fs 或 xfs_growfs:阵列容量变大但文件系统仍用旧边界
  • 新盘分区小于原成员分区:加入失败或容量计算与预期不符

数据来源与参考

  • man 8 mdadm(--grow)
  • Linux 内核 md 文档(reshape)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌