Linux RAID
定义:独立磁盘冗余阵列(Redundant Array of Independent Disks),将多块磁盘组合为逻辑阵列,提升性能或提供数据冗余。实现方式软 RAID:通过mdadm工具 + 操作系统实现,无硬件成本,占用少量 CPU 资源(文档重点);硬 RAID:依赖专用 RAID 卡,性能强但成本高;混合 RAID:介于软 / 硬之间,平衡性能与成本。
·
一、RAID 核心基础
1.1 RAID 定义与实现
- 定义:独立磁盘冗余阵列(Redundant Array of Independent Disks),将多块磁盘组合为逻辑阵列,提升性能或提供数据冗余。
- 实现方式:
- 软 RAID:通过
mdadm工具 + 操作系统实现,无硬件成本,占用少量 CPU 资源(文档重点); - 硬 RAID:依赖专用 RAID 卡,性能强但成本高;
- 混合 RAID:介于软 / 硬之间,平衡性能与成本。
- 软 RAID:通过
1.2 常用 RAID 级别对比(关键选型依据)
| RAID 级别 | 最小磁盘数 | 核心特性 | 容错能力 | 磁盘空间开销 | 读写性能 | 适用场景 |
|---|---|---|---|---|---|---|
| RAID0 | 2 | 条带化(无冗余) | 无(单盘故障丢数据) | 0% | 读写均最高 | 视频编辑、非关键数据存储 |
| RAID1 | 2 | 镜像(数据完全复制) | 单盘故障 | 50%(仅用一半容量) | 读高、写略低 | 关键数据、数据库服务器 |
| RAID5 | 3 | 条带化 + 分布式奇偶校验 | 单盘故障 | 1/N(N 为磁盘数) | 读高、写中等 | 文件服务器、小型企业环境 |
| RAID10 | 4 | RAID1 镜像 + RAID0 条带化 | 多盘故障(不同镜像组) | 50% | 读写均高 | 数据库、虚拟化、关键业务 |
1.3 核心术语解释
- 条带化:数据分割为固定大小块,分散存储在多块磁盘,并行读写提升性能;
- 镜像:数据完全复制到另一块磁盘,实现冗余备份;
- 奇偶校验:通过算法计算校验信息,用于 RAID5/6 的数据恢复;
- 热备盘:闲置磁盘,故障时自动顶替故障盘并同步数据。
二、mdadm 核心语法(操作基础)
mdadm 是 Linux 软 RAID 管理的核心工具,所有操作均通过其命令实现,以下是文档中高频使用的语法格式:
2.1 常用选项与语法格式
| 操作目标 | 语法格式 | 关键选项说明 |
|---|---|---|
| 创建 RAID 阵列 | mdadm --create /dev/mdX --level 级别 --raid-devices 磁盘数 磁盘列表 |
--create:创建阵列;--level:指定 RAID 级别;--raid-devices:参与阵列的磁盘数 |
| 查看 RAID 详情 | mdadm --detail /dev/mdX |
查看阵列状态、磁盘成员、同步进度等 |
| 查看 RAID 概要 | cat /proc/mdstat |
快速查看所有阵列的运行状态 |
| 添加热备盘 | mdadm /dev/mdX --add 磁盘 |
新增闲置磁盘作为热备(故障时自动激活) |
| 标记磁盘故障 | mdadm /dev/mdX --fail 磁盘 |
手动模拟磁盘故障(测试容错能力) |
| 移除故障磁盘 | mdadm /dev/mdX --remove 磁盘 |
从阵列中删除故障磁盘 |
| 停止 RAID 阵列 | mdadm --stop /dev/mdX |
销毁阵列(需先卸载) |
| 清除磁盘 RAID 信息 | mdadm --zero-superblock 磁盘 |
清除磁盘的超级块(用于重新创建阵列) |
| 扩容 RAID 阵列 | mdadm -G /dev/mdX --raid-devices 新磁盘数 |
-G(grow):扩展阵列成员数(仅 RAID5 支持) |
2.2 关键说明
- RAID 设备命名:默认从
/dev/md0开始(md=multiple devices); - 超级块(superblock):存储 RAID 阵列配置信息,
--zero-superblock会清除该信息; - 同步 / 重构:创建阵列或替换故障盘后,数据会自动同步,期间性能略有下降。
三、实操模块 1:RAID0 管理(无冗余,高性能)
RAID0 核心是 “条带化”,无冗余但性能最强,文档中用 /dev/sdb 和 /dev/sdc 两块磁盘演示。
3.1 步骤 1:创建 RAID0 阵列
# 创建 RAID0 设备 /dev/md0,2 块磁盘(/dev/sdb、/dev/sdc)
[root@centos7 ~]# mdadm --create /dev/md0 --level 0 --raid-devices 2 /dev/sd{b,c}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
- 语法解析:
--create /dev/md0:指定创建的 RAID 设备名;--level 0:明确 RAID 级别为 0;--raid-devices 2:参与阵列的磁盘数为 2;/dev/sd{b,c}:简写,等价于/dev/sdb /dev/sdc;
- 输出说明:默认使用 1.2 版本元数据,阵列创建成功并启动。
3.2 步骤 2:查看 RAID0 状态
方式 1:快速查看(/proc/mdstat)
[root@centos7 ~]# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4]
md0 : active raid0 sdc[1] sdb[0]
41908224 blocks super 1.2 512k chunks # 阵列总容量~40G,条带大小512K
unused devices: <none>
- 关键信息:
active raid0:阵列状态正常,级别为 RAID0;sdc[1] sdb[0]:磁盘成员及编号;512k chunks:条带大小(默认 512K,可通过--chunk自定义)。
方式 2:详细查看(mdadm --detail)
[root@centos7 ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2 # 元数据版本
Creation Time : Fri Aug 2 17:03:58 2024 # 创建时间
Raid Level : raid0 # RAID 级别
Array Size : 41908224 (39.97 GiB) # 阵列总容量(2块20G磁盘,无开销→40G)
Raid Devices : 2 # 成员磁盘数
Active Devices : 2 # 活跃磁盘数
Failed Devices : 0 # 故障磁盘数
Spare Devices : 0 # 热备盘数
Chunk Size : 512K # 条带大小
Name : centos7.linux.fun:0 # 阵列名称(主机名+编号)
UUID : afe03287:7cfb8b2e:82844a2e:8f721e04 # 唯一标识(用于持久化)
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb # 磁盘1:活跃同步
1 8 32 1 active sync /dev/sdc # 磁盘2:活跃同步
3.3 步骤 3:格式化与挂载
# 1. 格式化 RAID0 为 xfs 文件系统(CentOS7 默认)
[root@centos7 ~]# mkfs.xfs /dev/md0
# 2. 创建挂载点目录
[root@centos7 ~]# mkdir /data/raid0
# 3. 临时挂载(重启失效)
[root@centos7 ~]# mount /dev/md0 /data/raid0
# 4. 验证挂载结果(查看容量和使用情况)
[root@centos7 ~]# df -h /data/raid0
Filesystem Size Used Avail Use% Mounted on
/dev/md0 40G 319M 40G 1% /data/raid0
# 5. 测试:复制文件到 RAID0
[root@centos7 ~]# cp /etc/ho* /data/raid0 # 复制/etc目录下以ho开头的文件
[root@centos7 ~]# ls /data/raid0/
host.conf hostname hosts # 验证文件存在
- 解析:RAID0 容量 = 磁盘总容量(20G+20G=40G),无空间开销,适合存储临时高并发数据。
3.4 步骤 4:删除 RAID0 阵列
# 1. 先卸载挂载点(必须先卸载,否则无法停止阵列)
[root@centos7 ~]# umount /dev/md0
# 2. 停止 RAID0 阵列(销毁阵列)
[root@centos7 ~]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
# 3. 清除磁盘上的 RAID 超级块(避免影响后续使用)
[root@centos7 ~]# mdadm --zero-superblock /dev/sd{b,c}
3.5 RAID0 特殊说明(文档补充)
- 无法添加新成员盘:RAID0 条带化结构固定,不能扩容;
- 无法强制故障盘:RAID0 无冗余,单盘故障即阵列失效,
mdadm --fail会提示错误。
四、实操模块 2:RAID1 管理(镜像冗余,高可靠)
RAID1 核心是 “镜像”,数据完全复制到另一块磁盘,文档用 /dev/sdb、/dev/sdc 演示基础操作,/dev/sdd 作为热备盘。
4.1 步骤 1:创建 RAID1 阵列
# 创建 RAID1 设备 /dev/md1,2 块磁盘(/dev/sdb、/dev/sdc)
[root@centos7 ~]# mdadm --create /dev/md1 --level 1 --raid-devices 2 /dev/sd{b,c}
mdadm: Note: this array has metadata at the start and may not be suitable as a boot device.
Continue creating array? yes # 提示元数据位置,按yes确认
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
- 提示说明:RAID1 元数据存储在磁盘开头,不适合作为 boot 设备(若需引导,需用
--metadata=0.90参数)。
4.2 步骤 2:查看 RAID1 同步状态
[root@centos7 ~]# mdadm --detail /dev/md1
/dev/md1:
Raid Level : raid1
Array Size : 20954112 (19.98 GiB) # 容量=单盘容量(20G),50%空间开销
State : clean, resyncing # clean=正常,resyncing=数据同步中
Resync Status : 33% complete # 同步进度(需等待100%完成)
Active Devices : 2
Failed Devices : 0
Spare Devices : 0
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
- 关键:同步期间阵列可正常使用,但写入性能会下降,建议等待同步完成后再部署业务。
4.3 步骤 3:格式化、挂载与测试
# 1. 同步完成后格式化(xfs 文件系统)
[root@centos7 ~]# mkfs.xfs /dev/md1
# 2. 创建挂载点并挂载
[root@centos7 ~]# mkdir /data/raid1
[root@centos7 ~]# mount /dev/md1 /data/raid1
# 3. 验证容量(仅20G,因镜像开销)
[root@centos7 ~]# df -h /data/raid1
Filesystem Size Used Avail Use% Mounted on
/dev/md1 20G 175M 20G 1% /data/raid1
# 4. 复制文件测试
[root@centos7 ~]# cp /etc/ho* /data/raid1
[root@centos7 ~]# ls /data/raid1/
host.conf hostname hosts
4.4 步骤 4:添加热备盘(关键容错配置)
# 给 /dev/md1 添加热备盘 /dev/sdd
[root@centos7 ~]# mdadm /dev/md1 --add /dev/sdd
mdadm: added /dev/sdd
# 验证热备盘状态
[root@centos7 ~]# mdadm --detail /dev/md1 | tail -5
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 - spare /dev/sdd # 状态为spare(备用)
4.5 步骤 5:模拟磁盘故障与恢复
# 1. 手动标记 /dev/sdc 为故障盘
[root@centos7 ~]# mdadm /dev/md1 --fail /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md1
# 2. 查看状态:热备盘自动激活并同步
[root@centos7 ~]# mdadm --detail /dev/md1 | tail -5
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
2 8 48 1 spare rebuilding /dev/sdd # 正在重构(同步数据)
1 8 32 - faulty /dev/sdc # 故障状态
# 3. 验证数据完整性(故障期间数据正常访问)
[root@centos7 ~]# cat /data/raid1/hostname
centos7.linux.fun # 数据未丢失
# 4. 移除故障盘(更换新磁盘后执行)
[root@centos7 ~]# mdadm /dev/md1 --remove /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md1
# 5. 验证最终状态(/dev/sdd 变为活跃盘)
[root@centos7 ~]# mdadm --detail /dev/md1 | tail -5
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
2 8 48 1 active sync /dev/sdd
4.6 步骤 6:删除 RAID1 阵列
# 1. 卸载挂载点
[root@centos7 ~]# umount /dev/md1
# 2. 停止阵列
[root@centos7 ~]# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
# 3. 清除所有相关磁盘的超级块
[root@centos7 ~]# mdadm --zero-superblock /dev/sd{b..d} # 简写:b到d的所有磁盘
4.7 RAID1 特殊说明
- 容量不随磁盘数量增加:即使添加多块磁盘,RAID1 仅用单盘容量(镜像特性);
- 热备盘自动顶替:故障时无需手动干预,提升系统可用性。
五、实操模块 3:RAID5 管理(性能 + 冗余兼顾)
RAID5 是 “条带化 + 分布式奇偶校验”,兼顾性能与冗余,用 /dev/sdb-/dev/sde 4 块磁盘演示,支持扩容。
5.1 步骤 1:创建 RAID5 阵列
# 创建 RAID5 设备 /dev/md5,4 块磁盘(/dev/sdb-/dev/sde)
[root@centos7 ~]# mdadm --create /dev/md5 --level 5 --raid-devices 4 /dev/sd{b..e}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
- 容量计算:总容量 =(磁盘数 - 1)× 单盘容量 = 3×20G=60G(1 块磁盘用于存储奇偶校验)。
5.2 步骤 2:查看 RAID5 重构状态
[root@centos7 ~]# mdadm --detail /dev/md5
/dev/md5:
Raid Level : raid5
Array Size : 62862336 (59.95 GiB) # 约60G,符合预期
State : clean, degraded, recovering # 重构中
Active Devices : 3
Working Devices : 4
Spare Devices : 1
Rebuild Status : 17% complete # 重构进度
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
4 8 64 3 spare rebuilding /dev/sde
5.3 步骤 3:格式化、挂载与测试
# 1. 等待重构完成后格式化
[root@centos7 ~]# mkfs.xfs /dev/md5
# 2. 创建挂载点并挂载
[root@centos7 ~]# mkdir /data/raid5
[root@centos7 ~]# mount /dev/md5 /data/raid5
# 3. 验证容量
[root@centos7 ~]# df -h /data/raid5
Filesystem Size Used Avail Use% Mounted on
/dev/md5 60G 461M 60G 1% /data/raid5
# 4. 复制文件测试
[root@centos7 ~]# cp /etc/ho* /data/raid5
[root@centos7 ~]# ls /data/raid5/
host.conf hostname hosts
5.4 步骤 4:添加热备盘
# 给 /dev/md5 添加热备盘 /dev/sdf
[root@centos7 ~]# mdadm /dev/md5 --add /dev/sdf
mdadm: added /dev/sdf
# 验证热备盘状态
[root@centos7 ~]# mdadm --detail /dev/md5 | tail -5
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
4 8 64 3 active sync /dev/sde
5 8 80 - spare /dev/sdf # 热备盘
5.5 步骤 5:模拟故障与自动恢复
# 1. 标记 /dev/sdb 为故障盘
[root@centos7 ~]# mdadm /dev/md5 --fail /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5
# 2. 查看状态:热备盘 /dev/sdf 自动重构
[root@centos7 ~]# mdadm --detail /dev/md5 | tail -5
Number Major Minor RaidDevice State
5 8 80 0 spare rebuilding /dev/sdf
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
4 8 64 3 active sync /dev/sde
0 8 16 - faulty /dev/sdb
# 3. 验证数据完整性
[root@centos7 ~]# cat /data/raid5/hostname
centos7.linux.fun # 数据正常
# 4. 移除故障盘
[root@centos7 ~]# mdadm /dev/md5 --remove /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md5
5.6 步骤 6:RAID5 扩容(文档重点特性)
RAID5 支持扩容(仅增不减),需阵列处于正常状态(非降级 / 重构中):
# 1. 添加新磁盘 /dev/sdb(更换的新盘)和 /dev/sdg 到阵列
[root@centos7 ~]# mdadm /dev/md5 --add /dev/sdb /dev/sdg
mdadm: added /dev/sdb
mdadm: added /dev/sdg
# 2. 扩展阵列成员数为 5 块(原 4 块,新增 1 块)
[root@centos7 ~]# mdadm -G /dev/md5 --raid-devices 5
# -G:grow(扩展),--raid-devices 5:新的成员数
# 3. 等待阵列重组完成(查看进度)
[root@centos7 ~]# mdadm --detail /dev/md5
Reshape Status : 16% complete # 重组进度
# 4. 重组完成后,验证阵列容量(新增 20G,总容量 80G)
[root@centos7 ~]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md5 9:5 0 80G 0 raid5 /data/raid5
# 5. 扩展文件系统(使扩容后的容量可用)
[root@centos7 ~]# xfs_growfs /data/raid5 # xfs 文件系统扩容命令
meta-data=/dev/md5 isize=512 agcount=16, agsize=3928896 blks
...
data = bsize=4096 blocks=62862336, imaxpct=25
= sunit=128 swidth=512 blks
...
# 6. 验证文件系统容量
[root@centos7 ~]# df -h /data/raid5
Filesystem Size Used Avail Use% Mounted on
/dev/md5 80G 604M 80G 1% /data/raid5 # 容量已扩展到80G
5.7 步骤 7:删除 RAID5 阵列
# 1. 卸载挂载点
[root@centos7 ~]# umount /dev/md5
# 2. 停止阵列
[root@centos7 ~]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5
# 3. 清除所有磁盘的超级块
[root@centos7 ~]# mdadm --zero-superblock /dev/sd{b..g} # b到g的所有磁盘
六、命令速查表
| 操作场景 | 核心命令 |
|---|---|
| 创建 RAID 阵列 | mdadm --create /dev/mdX --level 级别 --raid-devices 数 磁盘 |
| 查看 RAID 详情 | mdadm --detail /dev/mdX |
| 快速查看 RAID 状态 | cat /proc/mdstat |
| 添加热备盘 | mdadm /dev/mdX --add 磁盘 |
| 模拟磁盘故障 | mdadm /dev/mdX --fail 磁盘 |
| 移除故障磁盘 | mdadm /dev/mdX --remove 磁盘 |
| RAID5 扩容 | mdadm -G /dev/mdX --raid-devices 新数 |
| 扩展 xfs 文件系统 | xfs_growfs 挂载点 |
| 删除 RAID 阵列 | umount /dev/mdX && mdadm --stop /dev/mdX && mdadm --zero-superblock 磁盘 |
更多推荐



所有评论(0)