RAID(磁盘冗余阵列)配置与实践
一、RAID 概述
RAID(Redundant Array of Independent Disks,磁盘冗余阵列)是通过将多个物理磁盘按特定规则组合,实现提升存储性能、增强数据冗余(容错)或平衡两者的技术。其核心是通过数据分割、复制或校验,优化存储系统的可靠性与效率。
二、常见 RAID 级别及特点
不同 RAID 级别通过不同的数据分布和冗余策略实现差异化功能,以下是常用级别的核心特性:
RAID 级别 |
最少磁盘数 |
核心特点 |
容量利用率 |
性能(读写) |
容错能力 |
适用场景 |
RAID 0 |
2 块 |
数据分割为 N 份,分别存储在 N 块磁盘(条带化),无冗余。 |
100%(无浪费) |
最高(并行读写) |
无(单盘故障数据全丢) |
临时缓存、非重要高带宽场景 |
RAID 1 |
2 块 |
数据完全复制到所有磁盘(镜像),冗余优先。 |
50%(N/2) |
读性能高,写性能一般 |
允许单盘故障(镜像恢复) |
系统盘、重要数据存储 |
RAID 5 |
3 块 |
数据分割存储 + 分布式校验(每块磁盘均含校验信息),平衡性能与冗余。 |
(N-1)/N |
读写性能较好 |
允许单盘故障(校验恢复) |
通用存储(文件服务器、数据库) |
RAID 10 |
4 块 |
先做 RAID 1 镜像,再将镜像组做 RAID 0 条带化(1+0),兼顾冗余与性能。 |
50%(N/2) |
读写性能优秀 |
每组镜像允许单盘故障 |
高可用 + 高性能场景(数据库) |
RAID 50 |
6 块 |
先做 RAID 5 校验组,再将校验组做 RAID 0 条带化(5+0),扩展容错与性能。 |
(N-2)/N |
读写性能优秀 |
每组允许单盘故障 |
大容量高可用场景(数据中心) |
三、使用 mdadm 工具创建 RAID
mdadm 是 Linux 下管理软件 RAID 的工具,支持动态创建、管理和监控 RAID 阵列。以下是具体步骤:
(一)环境准备
- 添加物理磁盘:新增一块 20G 磁盘(示例为 /dev/sdb),用于创建分区模拟多块磁盘。
- 创建分区:使用 fdisk 对 /dev/sdb 分区,各分区大小均为 1G(模拟独立磁盘):
# 进入分区工具
fdisk /dev/sdb
# 依次创建分区 sdb1、sdb2、sdb3、sdb4、sdb5、sdb6、sdb7、sdb8、sdb9、sdb10、sdb11、sdb12(各 1G)
# 分区类型默认“gpt”即可,完成后刷新分区表
partprobe /dev/sdb
(二)mdadm 常用命令
命令格式 |
功能说明 |
mdadm -Cv /dev/mdX -l 级别 -n 数量 磁盘列表 |
创建 RAID 阵列(-C 创建,-v 显示过程,-l 指定级别,-n 指定磁盘数) |
mdadm -D /dev/mdX |
查看 RAID 详细信息(状态、成员、容错等) |
mdadm -f /dev/mdX 磁盘 |
模拟磁盘故障(标记磁盘为 faulty) |
mdadm -r /dev/mdX 磁盘 |
从 RAID 中移除故障磁盘 |
mdadm -a /dev/mdX 磁盘 |
向 RAID 中添加新磁盘(可作为热备盘或替换故障盘) |
(三)创建各类型 RAID 实例
1. 创建 RAID 0
目标:用 sdb1 和 sdb2 创建 RAID 0(/dev/md0)。
# 创建 RAID 0 阵列(-l 0 表示级别 0,-n 2 表示 2 块磁盘)
mdadm -Cv /dev/md0 -l 0 -n 2 /dev/sdb1 /dev/sdb2
# 验证:查看 RAID 容量(应为 2G,sdb1 + sdb2 总和)
lsblk /dev/md0
# 格式化并挂载(xfs 文件系统)
mkfs.xfs /dev/md0
mkdir /raid0
mount /dev/md0 /raid0
# 永久挂载(添加到 /etc/fstab)
echo "$(blkid /dev/md0 | awk '{print $2}') /raid0 xfs defaults 0 0" >> /etc/fstab
mount -a # 生效配置
2. 创建 RAID 1
目标:用 sdb3 和 sdb4 创建 RAID 1(/dev/md1)。
# 创建 RAID 1 阵列(-l 1 表示级别 1)
mdadm -Cv /dev/md1 -l 1 -n 2 /dev/sdb3 /dev/sdb4
# 验证:容量应为 1G(单盘大小,因镜像冗余)
lsblk /dev/md1
# 格式化并挂载
mkfs.xfs /dev/md1
mkdir /raid1
mount /dev/md1 /raid1
# 永久挂载(同 RAID 0 步骤,添加到 /etc/fstab)
3. 创建 RAID 5(含热备盘)
目标:用 sdb5、sdb6、sdb7 创建 RAID 5,sdb8 作为热备盘(/dev/md5)。
# 创建 RAID 5 阵列(--spare-devices=1 指定 1 块热备盘)
mdadm -Cv /dev/md5 -l 5 -n 3 /dev/sdb5 /dev/sdb6 /dev/sdb7 --spare-devices=1 /dev/sdb8
# 验证:容量应为 2G(3 块数据盘 - 1 块校验盘 = 2G)
lsblk /dev/md5
# 查看详细信息(确认热备盘状态为 spare)
mdadm -D /dev/md5
# 格式化并挂载
mkfs.xfs /dev/md5
mkdir /raid5
mount /dev/md5 /raid5
# 永久挂载(同前)
故障模拟与恢复:
# 模拟 sdb5 故障
mdadm -f /dev/md5 /dev/sdb5
# 查看状态:sdb5 标记为 faulty,sdb8 自动作为热备盘重建(状态为 spare rebuilding)
mdadm -D /dev/md5
# 移除故障盘 sdb5
mdadm -r /dev/md5 /dev/sdb5
# 添加 sdb5 作为新热备盘
mdadm -a /dev/md5 /dev/sdb5
# 查看状态:sdb5 变为 spare 热备盘
4. 创建 RAID 10
目标:先创建 2 个 RAID 1 镜像组,再组合为 RAID 0(/dev/md10)。
# 步骤 1:创建 2 个 RAID 1 子阵列
mdadm -Cv /dev/md101 -l 1 -n 2 /dev/sdb9 /dev/sdb10 # 第一个镜像组
mdadm -Cv /dev/md102 -l 1 -n 2 /dev/sdb11 /dev/sdb12 # 第二个镜像组
# 步骤 2:将镜像组组合为 RAID 0
mdadm -Cv /dev/md10 -l 0 -n 2 /dev/md101 /dev/md102
# 验证:容量应为 2G(每个镜像组 1G,条带化后总和)
lsblk /dev/md10
# 格式化并挂载(同前)
5. 创建 RAID 50
目标:先创建 2 个 RAID 5 校验组,再组合为 RAID 0(/dev/md50)。
# 步骤 1:创建 2 个 RAID 5 子阵列(每组 3 块盘,含 1 块校验盘)
mdadm -Cv /dev/md501 -l 5 -n 3 /dev/sdb13 /dev/sdb14 /dev/sdb15 # 假设新增分区
mdadm -Cv /dev/md502 -l 5 -n 3 /dev/sdb16 /dev/sdb17 /dev/sdb18
# 步骤 2:将校验组组合为 RAID 0
mdadm -Cv /dev/md50 -l 0 -n 2 /dev/md501 /dev/md502
# 验证:容量应为 (3-1)*2 = 4G(每组 2G 有效容量,条带化后总和)
四、RAID 管理与维护
- 查看所有 RAID 状态:
cat /proc/mdstat # 显示系统中所有 RAID 阵列状态
- 停止 RAID 阵列(谨慎操作,数据可能丢失):
mdadm -S /dev/mdX
- 删除 RAID 阵列(需先卸载并停止):
umount /dev/mdX
mdadm -S /dev/mdX
mdadm --zero-superblock /dev/sdb1 /dev/sdb2 # 清除磁盘的 RAID 元数据
五、总结
RAID 技术通过不同级别平衡性能与冗余,选择时需结合业务需求:
- 追求性能无冗余:选 RAID 0;
- 重要数据高冗余:选 RAID 1 或 RAID 10;
- 通用场景平衡需求:选 RAID 5;
- 大容量高可用:选 RAID 50。
通过 mdadm 工具可灵活创建和管理软件 RAID,无需专用硬件,适合中小型场景部署。实际应用中需定期监控 RAID 状态,及时替换故障磁盘,确保数据安全。