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
保存退出
对四块盘都重复以上步骤。
分区表更新后,执行:
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
监控状态关键数据仍要异地/异构备份