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 中的步骤:
输入
m查看帮助输入
d删除已有分区输入
n新建分区,选择主分区(p),输入容量(一般填全部)输入
t修改分区类型,输入fd(Linux raid autodetect)输入
w保存退出
# 清理分区表
sgdisk --zap-all /dev/sdX
# 清理 RAID superblock(常见)
mdadm --zero-superblock /dev/sdX对四块盘都重复以上步骤。
分区表更新后,执行:
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/md05️⃣ 更新配置文件
建议在 /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监控状态关键数据仍要异地/异构备份