Linux中RAID5 的搭建、管理与维护详解

在生产环境中,RAID(独立磁盘冗余阵列)被广泛用于提升存储的性能与可靠性。本文将通过一个完整的案例,详细讲解如何在 Linux 上配置、管理、扩容、模拟故障以及删除 RAID5 阵列,内容涵盖命令、输出解释与常见场景。


什么是 RAID5

RAID5 是一种带奇偶校验信息的条带化(striping)存储方案。它至少需要 3 块硬盘,能够在 1 块硬盘故障的情况下继续工作。RAID5 的优点是容量利用率高(N 块盘中可用 N-1 块盘容量)、读性能较好、能容错 1 块盘。


环境准备与前提

在正式创建 RAID5 之前,先确保以下环境:

  • Linux 系统(带 mdadm 工具)

  • 至少 3 块(推荐 4 块)空闲硬盘

  • 有 root 权限

  • 如果之前这些磁盘上已经有 LVM 卷组,需要先清理干净


一、清理已有 LVM 卷组(如有)

如果之前这些磁盘用于 LVM,需要先卸载并删除:

umount /dev/vgmubak/lvmubase
umount /dev/vgmubak/lvmuother
lvchange -an /dev/vgmubak
vgchange -an /dev/vgmubak
lvremove /dev/vgmubak/lvmuother
lvremove /dev/vgmubak/lvmubase
vgremove /dev/vgmubak

二、硬盘分区

RAID 的推荐做法是给每块盘创建 RAID 分区类型(fd 类型)。

以四块盘为例:/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde。

对每一块盘都要执行以下 fdisk 步骤:

fdisk /dev/sdb fdisk /dev/sdc fdisk /dev/sdd fdisk /dev/sde

在 fdisk 中的步骤:

  1. 输入 m 查看帮助

  2. 输入 d 删除已有分区

  3. 输入 n 新建分区,选择主分区(p),输入容量(一般填全部)

  4. 输入 t 修改分区类型,输入 fd(Linux raid autodetect)

  5. 输入 w 保存退出

对四块盘都重复以上步骤。

分区表更新后,执行:

partprobe

让内核重新读取分区表。

三、创建 RAID5 设备

基本创建命令

创建一个 RAID5 卷(4 块盘):

mdadm --create /dev/md0 --level=5 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

进阶示例(含热备盘)

例如,3 块活动盘 + 1 块热备盘:

mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd[b-d]1

参数解释

  • -C / --create :创建阵列

  • -a yes / --auto :自动创建设备

  • -l / --level :指定 RAID 级别

  • -n / --raid-devices :活动盘数量

  • -x :热备盘数量

四、常用管理命令

  • 查看详细信息:

    mdadm --detail /dev/md0 
  • 查看状态:

    cat /proc/mdstat 
  • 标记硬盘故障:

    mdadm /dev/md0 -f /dev/sdb1 
  • 移除硬盘:

    mdadm /dev/md0 -r /dev/sdb1 
  • 添加新硬盘:

    mdadm /dev/md0 -a /dev/sdb1
  • 停止阵列:

    mdadm --stop /dev/md0
  • 删除 superblock(清理 RAID 签名):

    mdadm --zero-superblock /dev/sdX 

五、格式化与挂载 RAID5

成功创建阵列后,格式化文件系统:

mkfs.ext4 /dev/md0 

创建挂载目录并挂载:

mkdir /data mount /dev/md0 /data 

开机自动挂载:

echo 'UUID=xxx /data ext4 defaults 0 0' >> /etc/fstab 

六、模拟 RAID5 硬盘损坏

为了测试容错能力,可以“手动”模拟一块盘故障:

mdadm /dev/md0 -f /dev/sdb1 

查看状态:

cat /proc/mdstat mdadm --detail /dev/md0 

现象:

  • /dev/sdb1 后出现 (F) 标记,表示已被标记为故障

  • 阵列状态行中如 [_U] 表示有一块盘失效但还能正常工作

移除故障盘:

mdadm /dev/md0 -r /dev/sdb1 

添加替换的新盘:

mdadm /dev/md0 -a /dev/sdb1 

观察重建进度:

cat /proc/mdstat 

七、RAID5 阵列扩容

当需要增加容量时,可以添加硬盘到阵列:

1️⃣ 新硬盘分区

对新硬盘执行前面相同的 fdisk 流程,创建 fd 类型分区。

2️⃣ 加入阵列

添加到 RAID 中:

mdadm /dev/md0 -a /dev/sdf1 

查看状态:

mdadm -D /dev/md0 

默认情况下,新盘会被当作 热备盘

3️⃣ 转为活动盘并重构

将热备盘转成活动盘(-n 指定新总活动盘数,触发重建):

mdadm -G /dev/md0 -n 3 

4️⃣ 扩容文件系统

重建完成后,阵列容量增大,但文件系统尚未扩展:

resize2fs /dev/md0

5️⃣ 更新配置文件

建议在 /etc/mdadm.conf 中记录新配置,例如:

DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sdf1
ARRAY /dev/md0 level=raid5 num-devices=4 UUID=<uuid> 

八、删除 RAID 阵列

卸载挂载点

umount /dev/md0 

停止阵列

mdadm --stop /dev/md0

移除设备

mdadm --remove /dev/md0 

清除 superblock

对所有涉及的分区清理 RAID 签名:

mdadm --zero-superblock /dev/sd[bcdef] 

九、RAID5 双盘故障情况下的修复尝试

RAID5 只能容忍 1 块盘坏,若坏 2 块就非常危险。以下命令仅用于尝试在紧急情况下“强行组装”尽可能读取数据:

mdadm --stop /dev/md0 mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1 missing /dev/sde1 

这里:

  • /dev/sda1/dev/sdb1 是剩余可用的盘

  • missing 占位用于声明有一块丢失

  • /dev/sde1 是你想替换的新硬盘

这种方式能否成功取决于坏块数量和阵列的具体状况。

十、mdadm 其他常用选项小抄

  • -D / --detail :查看阵列详细信息

  • -f :标记硬盘为故障

  • -a :添加新硬盘

  • -r :移除硬盘

  • -s / --scan :扫描系统信息

  • -S :停止阵列

  • --zero-superblock :抹掉 RAID 签名

  • --assemble --scan :自动扫描并重组可用 RAID

总结

RAID5 在生产环境中非常常见,但一定要注意:

  • 严格检查硬盘分区类型

  • 按规范添加/移除磁盘

  • 定期查看 /proc/mdstat 监控状态

  • 关键数据仍要异地/异构备份