RAID 5 扩容与缩减实战教程

RAID 5 在服务器和 NAS 上很常见:兼顾性能、容量冗余,单盘故障还能撑住。但阵列一旦跑起来,想动它就得格外小心——扩容容易出错,缩减更是刀尖上跳舞。这篇教程把 mdadm 调整阵列的完整流程拆开讲清楚,照着做基本不会翻车。


⚠️ 风险提示与核心原则

  1. 数据无价,备份先行:虽然 RAID 调整大小支持在线(Live)操作,但在进行任何阵列结构变更前,务必先备份重要数据。
  2. 前置条件校验:绝对不能在阵列处于降级(degraded)、重建(recovering)或损坏状态下执行扩容/缩减。检查状态命令:
mdadm -D /dev/md0

确保输出中的 State 为 clean 且没有缺失的活动盘。


一、 RAID 5 扩容(增加存储盘)

扩容操作分为 逻辑阵列扩容 与 上层文件系统扩容 两个阶段,可以完全在线(无需卸载挂载点)完成。

1. 挂载/添加新硬盘

将新硬盘(如 /dev/sdf1)作为热备盘(Spare)加入阵列:

mdadm -a /dev/md0 /dev/sdf1

2. 扩容 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/md0

2. 检查并缩减文件系统

必须先强制检查文件系统,然后将其缩小到小于或等于目标 RAID 容量的大小(假设每块盘 15GB,从 4 盘缩减到 3 盘,目标存储容量为 15 × 2 = 30 GB):

# 1. 强制检查文件系统健康度
e2fsck -f /dev/md0

# 2. 将文件系统缩小至目标大小(建议略小于实际目标大小以留安全余量,如 29G)
resize2fs /dev/md0 29G

3. 缩减 RAID 阵列成员数量

使用 -G 参数减少 RAID 成员盘数量(从 4 块缩减至 3 块):

mdadm -G /dev/md0 -n 3

阵列将开始反向 Reshape,使用 cat /proc/mdstat 监控进度,待其彻底完成后继续。

4. 调整文件系统填充剩余空间

将文件系统扩展至缩减后的实际阵列上限,确保不浪费空间:

resize2fs /dev/md0

5. 重新挂载并移除多余磁盘

挂载文件系统并移除已剔除的成员盘(已被自动转为 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 整理 🛠️