一、RAID技术概述
RAID(Redundant Array of Independent Disks)即独立磁盘冗余阵列,是一种通过多磁盘组合实现数据冗余、性能提升或二者兼顾的存储虚拟化技术。其核心原理包括:
- 条带化(Striping):数据分块并行写入多磁盘(如RAID 0)
- 镜像(Mirroring):数据完全复制到多磁盘(如RAID 1)
- 奇偶校验(Parity):通过校验数据实现故障恢复(如RAID 5/6)
二、常见RAID级别详解
1. RAID 0
RAID 0使用数据条带化(striping)的方式将数据分散存储在多个磁盘上,而不进行冗余备份。数据被分成固定大小的块,并依次存储在每个磁盘上。例如,如果有两个磁盘(磁盘A和磁盘B),一块数据的第一个部分存储在磁盘A上,第二个部分存储在磁盘B上,以此类推。这种条带化的方式可以同时从多个磁盘读取或写入数据,从而提高系统的性能。简单来说:
- 原理:数据分块后并行存储于≥2块磁盘
- 优点:读写性能最高,100%磁盘利用率
- 缺点:无冗余,单盘故障导致数据全毁
- 场景:临时缓存、非关键数据存储
2. RAID 1
RAID 1使用数据镜像(mirroring)的方式将数据完全复制到两个或多个磁盘上。当写入数据时,数据同时写入所有磁盘。这样,每个磁盘都具有相同的数据副本,从而实现数据的冗余备份。如果其中一个磁盘发生故障,系统可以继续从剩余的磁盘中读取数据,确保数据的可用性和完整性。
- 原理:数据完全镜像到≥2块磁盘
- 优点:高可靠性,读取性能提升
- 缺点:磁盘利用率仅50%
- 场景:数据库、交易系统等关键数据
3. RAID 5
RAID 5使用数据条带化(striping)的方式将数据分散存储在多个磁盘上,并通过分布式奇偶校验实现数据的冗余备份。数据和奇偶校验信息被组织成数据块,其中奇偶校验信息被分布式存储在不同的磁盘上。当写入数据时,奇偶校验信息也会被更新。如果其中一个磁盘发生故障,系统可以通过重新计算奇偶校验信息来恢复丢失的数据。这种方式可以同时提供性能增强和数据冗余。
- 原理:数据条带化存储,分布式奇偶校验(校验信息轮转存储)
- 优点:兼顾性能与安全,利用率
(n-1)/n(n代表磁盘数量)
- 缺点:单盘故障后重建时间长
- 场景:金融、数据库等随机读写场景
4. RAID 6
与RAID 5相似,RAID 6也使用数据条带化(striping)的方式将数据分散存储在多个磁盘上,并通过分布式奇偶校验和双重奇偶校验实现数据的冗余备份。数据和奇偶校验信息被组织成数据块,其中奇偶校验信息被分布式存储在不同的磁盘上,并通过双重奇偶校验提供更高的数据冗余性。当写入数据时,奇偶校验信息也会被更新。如果其中两个磁盘发生故障,系统可以通过重新计算奇偶校验信息来恢复丢失的数据。这种方式可以同时提供性能增强和更高级别的数据冗余。
- 原理:双奇偶校验,可容忍同时两块磁盘故障
- 优点:安全性高于RAID 5
- 缺点:利用率
(n-2)/n
,写入性能较低 - 场景:高可靠性要求的存储系统
5. RAID 10(1+0)
RAID 10结合条带化(striping)和镜像(mirroring)实现数据的冗余备份。具体来说就是:先将磁盘两两分组,每组设置为RAID 1;再将每组RAID 1一起设置为RAID 0。这样,RAID 10在提供性能增强的同时,也提供了数据的冗余保护。
- 原理:先镜像再条带化(需≥4块磁盘)
- 优点:兼具RAID 1可靠性和RAID 0高性能
- 缺点:磁盘利用率仅50%
- 场景:金融、大数据分析等高性能高可靠场景
▶ RAID级别对比表
级别 | 最小磁盘数 | 容错能力 | 利用率 | 读性能 | 写性能 |
---|---|---|---|---|---|
RAID 0 | 2 | 无 | 100% | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
RAID 1 | 2 | 单盘 | 50% | ⭐⭐⭐⭐ | ⭐⭐ |
RAID 5 | 3 | 单盘 | (n-1)/n | ⭐⭐⭐⭐ | ⭐⭐⭐ |
RAID 6 | 4 | 双盘 | (n-2)/n | ⭐⭐⭐ | ⭐⭐ |
RAID 10 | 4 | 镜像组单盘 | 50% | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
三、mdadm工具详解
mdadm
是Linux下管理软件RAID的核心工具,支持阵列创建、监控、修复等操作。
命令格式
mdadm [模式] <RAID设备> [选项] <成员设备>
- 模式:指定操作模式(如创建、管理、监控等)。
- RAID设备:虚拟 RAID 设备名(如
/dev/md0
)。 - 成员设备:物理磁盘分区(如
/dev/sdb1
)。
常用模式与参数
1. 创建模式 (--create
/-C
)
创建新的 RAID 阵列:
mdadm -C /dev/md0 -l 5 -n 3 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
-
-l
/--level
:RAID 级别(如0
、1
、5
、10
)。 -
-n
/--raid-devices
:活动磁盘数量。 -
-x
/--spare-devices
:热备盘数量。 -
-a
/--auto
:自动创建设备文件(yes
/no
)。 -
-c
/--chunk
:条带大小(单位 KB,默认 64KB)。
2. 管理模式 (--manage
)
动态调整运行中的 RAID:
mdadm /dev/md0 --add /dev/sdf # 添加磁盘
mdadm /dev/md0 --fail /dev/sdb # 标记故障
mdadm /dev/md0 --remove /dev/sdb # 移除磁盘
-
--add
:添加新成员盘(可作热备盘)。 -
--fail
:模拟磁盘故障。 -
--remove
:移除故障盘。
3. 监控模式 (--monitor
/-F
)
后台监控阵列状态(如邮件告警):
mdadm --monitor --daemonise --mail=admin@example.com /dev/md0
-
--daemonise
:后台运行。 -
--mail
:故障时发送邮件。
4. 组装模式 (--assemble
/-A
)
重新激活已存在的 RAID:
mdadm -A /dev/md0 /dev/sdb /dev/sdc # 手动指定磁盘
mdadm -As --scan # 自动扫描配置文件
-
--scan
:读取/etc/mdadm.conf
配置。
5. 查看模式 (--detail
/-D
)
显示 RAID 详细信息:
mdadm -D /dev/md0 # 详细状态
cat /proc/mdstat # 实时概览
-
-Q
/--query
:简要摘要。
6. 停止模式 (--stop
/-S
)
停用 RAID 设备:
mdadm -S /dev/md0
四、CentOS 7.9实战:创建与管理RAID 10
1. 环境准备
准备4块可用磁盘或分区,安装mdadm软件。
组成RAID的可以是磁盘,也可以是分区,以下使用分区来代替磁盘。
- 4个分区组成RAID 10(注意每个分区一样大最佳,sda5-sda8)
- 1个分区作为热备份磁盘(与RAID的分区一样大,sda9)
- 将此RAID 10设备挂载到 /mnt/raid 目录下
# 1.安装mdadm
yum install mdadm -y
# 2.查看可用磁盘(确认≥3块)
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 1G 0 part [SWAP]
├─sda3 8:3 0 17G 0 part /
├─sda4 8:4 0 1K 0 part
├─sda5 8:5 0 250M 0 part
├─sda6 8:6 0 250M 0 part
├─sda7 8:7 0 250M 0 part
├─sda8 8:8 0 250M 0 part
└─sda9 8:9 0 250M 0 part
sr0 11:0 1 9.6G 0 rom
# 3.创建挂载点
mkdir /mnt/raid
2. 创建RAID 10阵列
mdadm -C /dev/md0 -n4 -x1 -l10 -a yes /dev/sda{5..9}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
mdadm -D /dev/md0 # 可查看RAID设备详细数据
-C 创建模式 ;-n 活动磁盘数量 ;-x 热备份磁盘数量 ;-l RAID级别 ;-a 是否自动创建设备文件; -D 查看模式
3. 格式化与挂载
mkfs.xfs /dev/md0 # 格式化为xfs文件系统
mount /dev/md0 /mnt/raid # 挂载
此时RAID 10就可以正常使用了。
df -Th /mnt/raid # 查看磁盘空间
Filesystem Type Size Used Avail Use% Mounted on
/dev/md0 xfs 490M 26M 465M 6% /mnt/raid
为什么我分配了5块250M的磁盘,但是 /dev/md0 只有490M大小?
答:这是由RAID 10的特性所决定的,这5块磁盘中除去1个热备磁盘作为备用,剩下4块磁盘,但其中一半的容量用来存放镜像数据,所以总体只有约500M大小的磁盘容量。
4. 模拟故障与恢复
mdadm /dev/md0 --fail /dev/sda8 # 标记sdb为故障盘
mdadm /dev/md0 --remove /dev/sda8 # 移除故障盘
mdadm /dev/md0 --add /dev/sda8 # 添加新盘并等待重建
watch cat /proc/mdstat # 监控重建进度
/dev/sda8其实并未损坏,只是被标记为损坏,因此可以模拟新盘使用。现实中需要进行硬盘更换的操作。
5. 配置开机自动挂载
RAID也有配置文件,即/etc/mdadm.conf,但默认不会自动生成,需要我们手动创建
# 1. 保存阵列配置
mdadm -D --scan >> /etc/mdadm.conf
# 2. 编辑fstab
echo "/dev/md0 /mnt/raid xfs defaults 0 0" >> /etc/fstab
# 3. 测试挂载
mount -a
6. 安全关闭RAID
当确认不再使用RAID时,需要安全关闭RAID。尤其是使用磁盘分区的情况,如果只将/dev/md0卸载,但忘记关闭RAID,那么未来在重新划分/dev/sda时可能出现错误。
# 卸载并取消开机自动挂载
umount /mnt/raid
vim /etc/fstab
#/dev/md0 /mnt/raid xfs defaults 0 0 # 将这一行删除或注释掉
mdadm -S /dev/md0 # 关闭RAID
mdadm --zero-superblock /dev/sda{5..9} # 清除磁盘超级块(彻底销毁)