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