RAID 5 扩容与缩减实战教程
RAID 5 在服务器和 NAS
上很常见:兼顾性能、容量冗余,单盘故障还能撑住。但阵列一旦跑起来,想动它就得格外小心——扩容容易出错,缩减更是刀尖上跳舞。这篇教程把
mdadm
调整阵列的完整流程拆开讲清楚,照着做基本不会翻车。
⚠️ 风险提示与核心原则
- 数据无价,备份先行:虽然 RAID 调整大小支持在线(Live)操作,但在进行任何阵列结构变更前,务必先备份重要数据。
- 前置条件校验:绝对不能在阵列处于降级(degraded)、重建(recovering)或损坏状态下执行扩容/缩减。检查状态命令:
mdadm -D /dev/md0确保输出中的
State为clean且没有缺失的活动盘。
一、 RAID 5 扩容(增加存储盘)
扩容操作分为 逻辑阵列扩容 与 上层文件系统扩容 两个阶段,可以完全在线(无需卸载挂载点)完成。
1. 挂载/添加新硬盘
将新硬盘(如
/dev/sdf1)作为热备盘(Spare)加入阵列:
mdadm -a /dev/md0 /dev/sdf12. 扩容 RAID 阵列(重组 Reshape)
使用 -G (--grow)
参数将活动存储盘数量增加(例如从 3 块扩容至 4 块):
mdadm -G /dev/md0 -n 4注意:该命令会自动将已有的 Spare 盘拉入活动阵列并开始重新分布数据(Reshape)。可以通过以下命令实时监控重构进度:
watch -n 2 cat /proc/mdstat必须等待 Reshape 进度达到 100% 且状态恢复为
clean后,才能进行下一步!
3. 扩展上层文件系统
阵列变大后,需要将新增的空间释放给文件系统使用:
- EXT4 文件系统(支持在线扩容):
resize2fs /dev/md0- XFS 文件系统(支持在线扩容,必须指定挂载点而非设备名):
xfs_growfs /mnt/raid二、 RAID 5 缩减(减少存储盘)
阵列缩减的风险高于扩容,严格遵循”先缩文件系统,再缩 RAID 阵列”的顺序,否则极易导致数据损坏。
注意:XFS 文件系统不支持缩小。如果是 XFS,只能备份数据后重建阵列。以下步骤仅适用于 EXT4 文件系统。
1. 卸载文件系统
缩小操作必须在离线(未挂载)状态下进行:
umount /dev/md02. 检查并缩减文件系统
必须先强制检查文件系统,然后将其缩小到小于或等于目标 RAID 容量的大小(假设每块盘 15GB,从 4 盘缩减到 3 盘,目标存储容量为 15 × 2 = 30 GB):
# 1. 强制检查文件系统健康度
e2fsck -f /dev/md0
# 2. 将文件系统缩小至目标大小(建议略小于实际目标大小以留安全余量,如 29G)
resize2fs /dev/md0 29G3. 缩减 RAID 阵列成员数量
使用 -G 参数减少 RAID 成员盘数量(从 4 块缩减至
3 块):
mdadm -G /dev/md0 -n 3阵列将开始反向 Reshape,使用
cat /proc/mdstat监控进度,待其彻底完成后继续。
4. 调整文件系统填充剩余空间
将文件系统扩展至缩减后的实际阵列上限,确保不浪费空间:
resize2fs /dev/md05. 重新挂载并移除多余磁盘
挂载文件系统并移除已剔除的成员盘(已被自动转为 Spare):
# 挂载测试
mount /dev/md0 /mnt/raid
# 从阵列中彻底移除被替换出的磁盘(假设为 /dev/sdf1)
mdadm -r /dev/md0 /dev/sdf1三、 维护与配置更新
不论是扩容还是缩减,操作完成后都需要更新 RAID 配置文件,防止系统重启后恢复旧配置:
mdadm --detail --scan > /etc/mdadm.conf(部分发行版如 Debian/Ubuntu 需进一步更新
initramfs:update-initramfs -u)
四、 常用命令速查
| 操作 | 完整命令 | 简写命令 |
|---|---|---|
| 查看状态 | mdadm --detail /dev/md0 |
mdadm -D /dev/md0 |
| 添加磁盘 | mdadm --add /dev/md0 /dev/sdX |
mdadm -a /dev/md0 /dev/sdX |
| 修改阵列设备数 | mdadm --grow /dev/md0 --raid-devices=N |
mdadm -G /dev/md0 -n N |
| 移除失败/空闲盘 | mdadm --remove /dev/md0 /dev/sdX |
mdadm -r /dev/md0 /dev/sdX |
| 本文由 BOSH 的博客助手 HerMes 整理 🛠️ |