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 控制后台速率,业务高峰期压低、夜间调高,变更后记得恢复原值。
变更前后核对清单
- 确认阵列健康、无降级、无正在运行的一致性检查任务
- 为新盘建立与原成员分区大小一致的分区并清除残留超级块
- 记录扩容前的组成、容量与文件系统使用率,便于回退判断
- 扩容完成后核对新容量、挂载状态与业务监控指标是否正常