Linux: RAID(磁盘冗余阵列)配置全指南
Linux:RAID(磁盘冗余阵列)配置
一、RAID 核心概念
RAID(Redundant Array of Independent Disks,磁盘冗余阵列)通过将多个物理磁盘组合为一个逻辑存储设备,实现提升读写性能、增强数据安全性或平衡两者的目的。不同RAID级别采用不同的技术实现,适用于不同场景。
二、常见RAID级别及特性
RAID级别 | 最少磁盘数 | 核心原理 | 性能 | 安全性 |
---|---|---|---|---|
RAID 0 | 2块 | 数据分割为N份,并行写入各磁盘(无冗余) | 读写速度大幅提升 | 无冗余,单盘故障数据全丢 |
RAID 1 | 2块 | 数据完全镜像,每块磁盘存储相同内容 | 读速提升,写速略降 | 单盘故障不丢数据 |
RAID 5 | 3块 | 数据分割存储+分布式校验(每块盘均含校验信息) | 读写性能较好 | 允许单盘故障(可重建) |
RAID 10 | 4块(2的倍数) | 先做RAID 1镜像,再将镜像组组成RAID 0(1+0) | 读写性能优异 | 允许每组镜像中一块盘故障 |
RAID 50 | 6块(3的倍数) | 先做多个RAID 5,再将这些RAID 5组成RAID 0(5+0) | 读写性能优异 | 每个RAID 5允许单盘故障 |
三、RAID 实现方式
- 硬件RAID:通过独立RAID控制器实现,性能好、稳定性高,支持热插拔,适合企业级场景。
- 软件RAID:通过操作系统工具(如Linux的
mdadm
)实现,无需额外硬件,成本低,适合个人或小型场景。本文重点介绍mdadm
工具配置。
四、软件RAID 配置实战(基于mdadm
)
- 在实际环境中,若物理磁盘数量有限,可通过磁盘分区模拟独立硬盘来配置 RAID。以下以 RAID 0 和 RAID 5 为例,详细演示基于分区的配置步骤。
1. 安装mdadm
工具
yum -y install mdadm # CentOS/RHEL系统
2.新增物理磁盘
添加 1 块足够大的物理磁盘(如/dev/sdb
,容量≥50GB),用于创建多个分区模拟独立硬盘。
3. 创建RAID 0(追求性能)
(1)创建分区(模拟独立硬盘)
创建/dev/sdb1 /de/sdb2 分区 大小设置为1G
[root@zhangyiwei ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
错误: /dev/sdb: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
(parted) mklabel
新的磁盘标签类型? gpt
(parted) unit
Unit? [compact]? Mib
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 30720MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: Number Start End Size File system Name 标志(parted) quit
信息: You may need to update /etc/fstab.[root@zhangyiwei ~]# fdisk /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。命令(输入 m 获取帮助):n
分区号 (1-128,默认 1):
第一个扇区 (34-41943006,默认 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943006,默认 41943006):+1G
已创建分区 1命令(输入 m 获取帮助):N
分区号 (2-128,默认 2):
第一个扇区 (34-41943006,默认 2099200):
Last sector, +sectors or +size{K,M,G,T,P} (2099200-41943006,默认 41943006):+1G
已创建分区 2命令(输入 m 获取帮助):W
The partition table has been altered!Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@zhangyiwei ~]# partprobe /dev/sdb
[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 4G 0 part [SWAP]
└─sda3 8:3 0 50G 0 part /
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 1G 0 part
sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
使用2个分区(/dev/sdb1
、/dev/sdb2
)组成RAID 0:
[root@zhangyiwei ~]# mdadm -Cv /dev/md0 -l 0 -n 2 /dev/sdb1 /dev/sdb2
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.-Cv # 创建并命名-/dev/md0# 作为设备必须在/dev目录下-l 0 # RAID级别(0)-n 2 # 成员磁盘数量(2块)/dev/sdb1 /dev/sdb1 # 参与的磁盘或分区
- 输出提示array /dev/“md0 started.已创建”即成功。
(2)查看RAID信息
mdadm -Ds # 显示所有RAID设备详细信息
mdadm -D /dev/md0 # 查看指定RAID(md0)的状态
lsblk # 列出系统中所有块设备
- 关键信息:
RAID Level: raid0
、Active Devices: 2
(激活的设备数)。
(3)格式化并挂载
# 格式化为xfs文件系统(也可使用ext4)
[root@zhangyiwei ~]# mkfs.xfs /dev/md0
meta-data=/dev/md0 isize=512 agcount=8, agsize=65408 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=523264, imaxpct=25= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0# 创建挂载点并挂载
[root@zhangyiwei ~]# mkdir /md0
[root@zhangyiwei ~]# mount /dev/md0 /md0 #临时挂载# 获取RAID设备的UUID
[root@zhangyiwei ~]# blkid /dev/md0
/dev/md0: UUID="8759b45d-89ed-458e-b860-efb267ddd110" TYPE="xfs" # 写入fstab
[root@zhangyiwei ~]# vim /etc/fstab #永久挂载UUID=8759b45d-89ed-458e-b860-efb267ddd110 /md0 xfs defaults 0 0
(5)删除RAID 0(清理环境)
# 卸载挂载点
umount /md0# 停止RAID设备
mdadm -S /dev/md0# 清除磁盘上的RAID信息(避免下次误识别)
mdadm --zero-superblock /dev/sdb
mdadm --zero-superblock /dev/sdc# 删除挂载点和fstab配置
rm -rf /raid0
sed -i '/\/raid0/d' /etc/fstab # 删除fstab中对应行
. 创建RAID 1(追求安全)
(1)创建RAID 1设备(/dev/md1
)
新建sdb3、sdb4分区
[root@zhangyiwei ~]# fdisk /dev/sdb**********
[root@zhangyiwei ~]# partprobe /dev/sdb
使用2个分区(/dev/sdb3
、/dev/sdb4
、)组成RAID 1
[root@zhangyiwei ~]# mdadm -Cv /dev/md1 -l 1 -n 2 /dev/sdb3 /dev/sdb4 # 设置RAID级别为1
mdadm: Note: this array has metadata at the start andmay not be suitable as a boot device. If you plan tostore '/boot' on this device please ensure thatyour boot-loader understands md/v1.x metadata, or use--metadata=0.90
mdadm: size set to 1046528K
Continue creating array?
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
************
├─sdb3 8:19 0 1G 0 part
│ └─md1 9:1 0 1022M 0 raid1
└─sdb4 8:20 0 1G 0 part └─md1 9:1 0 1022M 0 raid1
sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
#挂载同RAID 0步骤
4. 创建RAID 5(平衡性能与安全)
(1)创建RAID 5设备(/dev/md5
)
创建分区:
[root@zhangyiwei ~]# fdisk /dev/sdb****************************
[root@zhangyiwei ~]# partprobe /dev/sdb
[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT********************
├─sdb5 8:21 0 1G 0 part
├─sdb6 8:22 0 1G 0 part
├─sdb7 8:23 0 1G 0 part
└─sdb8 8:24 0 1G 0 part
sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
使用3个分区(/dev/sdb5
、/dev/sdb6
、/dev/sdb7
)组成RAID 5,额外1块/dev/sdeb8
作为热备盘(自动替换故障盘):
[root@zhangyiwei ~]# mdadm -Cv /dev/md5 -l 5 -n 3 /dev/sdb5 /dev/sdb6 /dev/sdb7 --spare-devices=1 /dev/sdb8
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 1046528K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.-l 5 \ # RAID级别(5)-n 3 \ # 成员磁盘数量(3块)/dev/sdb /dev/sdc /dev/sdd \--spare-devices=1 /dev/sde # 热备盘数量及设备
(2)查看RAID 5状态
[root@zhangyiwei ~]# mdadm -D /dev/md5
[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT***********************
├─sdb5 8:21 0 1G 0 part
│ └─md5 9:5 0 2G 0 raid5
├─sdb6 8:22 0 1G 0 part
│ └─md5 9:5 0 2G 0 raid5
├─sdb7 8:23 0 1G 0 part
│ └─md5 9:5 0 2G 0 raid5
└─sdb8 8:24 0 1G 0 part └─md5 9:5 0 2G 0 raid5
sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
- 关键信息:
RAID Level: raid5
、Active Devices: 3
、Spare Devices: 1
(热备盘就绪)。
(3)模拟磁盘故障与重建
-
标记磁盘为故障:
[root@zhangyiwei ~]# mdadm -f /dev/md5 /dev/sdb5 # 将/dev/sdb5标记为故障盘 mdadm: set /dev/sdb5 faulty in /dev/md5
-
查看自动重建过程:
[root@zhangyiwei ~]# mdadm -D /dev/md5*******************Number Major Minor RaidDevice State3 8 24 0 spare rebuilding /dev/sdb81 8 22 1 active sync /dev/sdb64 8 23 2 active sync /dev/sdb70 8 21 - faulty /dev/sdb5
- 此时
/dev/sde
(热备盘)会自动替换/dev/sdb
,并显示“Rebuild Status: xx%
”(重建进度)。
- 此时
-
移除故障盘或分区:
# 从RAID中移除故障盘 [root@zhangyiwei ~]# mdadm -r /dev/md5 /dev/sdb5 mdadm: hot removed /dev/sdb5 from /dev/md5
4.添加硬盘或分区
-
sdb5可作为md5的热备盘加入:
[root@zhangyiwei ~]# mdadm /dev/md5 --add /dev/sdb5
-
执行后
sdb5
状态会变为spare
,当md5
中任一盘故障时自动替换。
#挂载同RAID 0步骤
二、创建 RAID 10(1+0)
1. 核心原理
RAID 10 = RAID 1(镜像)+ RAID 0(条带化),先将磁盘两两镜像(RAID 1),再将镜像组条带化(RAID 0),兼顾安全性和性能。
2. 分步配置
创建分区:
[root@zhangyiwei ~]# fdisk /dev/sdb****************************
[root@zhangyiwei ~]# partprobe /dev/sdb
[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT********************
├─sdb9 8:25 0 1G 0 part
├─sdb10 8:26 0 1G 0 part
├─sdb11 8:27 0 1G 0 part
└─sdb12 8:28 0 1G 0 part
sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
(1)创建 2 组 RAID 1
-
第一组(/dev/md101):使用sdb9和sdb10
[root@zhangyiwei ~]# mdadm -Cv /dev/md101 -l 1 -n 2 /dev/sdb9 /dev/sdb10 mdadm: Note: this array has metadata at the start andmay not be suitable as a boot device. If you plan tostore '/boot' on this device please ensure thatyour boot-loader understands md/v1.x metadata, or use--metadata=0.90 mdadm: size set to 1046528K Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md101 started.
-
第二组(/dev/md102):使用sdb11和sd12
[root@zhangyiwei ~]# mdadm -Cv /dev/md102 -l 1 -n 2 /dev/sdb11 /dev/sdb12 mdadm: Note: this array has metadata at the start andmay not be suitable as a boot device. If you plan tostore '/boot' on this device please ensure thatyour boot-loader understands md/v1.x metadata, or use--metadata=0.90 mdadm: size set to 1046528K Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md2 started.
(2)将两组 RAID 1 组成 RAID 0(即 RAID 10)
[root@zhangyiwei ~]# mdadm -Cv /dev/md10 -l 0 -n 2 /dev/md101 /dev/md102
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.
[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT********************
├─sdb9 8:25 0 1G 0 part
│ └─md101 9:101 0 1022M 0 raid1
│ └─md10 9:10 0 2G 0 raid0
├─sdb10 8:26 0 1G 0 part
│ └─md101 9:101 0 1022M 0 raid1
│ └─md10 9:10 0 2G 0 raid0
├─sdb11 8:27 0 1G 0 part
│ └─md102 9:2 0 1022M 0 raid1
│ └─md10 9:10 0 2G 0 raid0
└─sdb12 8:28 0 1G 0 part └─md102 9:2 0 1022M 0 raid1 └─md10 9:10 0 2G 0 raid0
sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
3. 验证 RAID 10
mdadm -D /dev/md10
- 关键信息:
RAID Level: raid0
,成员为/dev/md101
和/dev/md102
(两组 RAID 1)。
#格式化与挂载同RAID 0步骤
三、创建 RAID 50(5+0)
1. 核心原理
RAID 50 = RAID 5(分布式校验)+ RAID 0(条带化),先将磁盘分成多组 RAID 5(每组至少 3 个磁盘),再将各组条带化,兼顾大容量、安全性和性能。
2. 分步配置
(1)创建 2 组 RAID 5
#需要重新使用被分配的硬盘或分区可以停止他们的顶层阵列(如 md0、md1 等,根据实际情况替换)
[root@zhangyiwei ~]# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
[root@zhangyiwei ~]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5
[root@zhangyiwei ~]# mdadm --stop /dev/md10
mdadm: stopped /dev/md10
[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT****************
sdb 8:16 0 30G 0 disk
├─sdb1 8:17 0 1G 0 part
├─sdb2 8:18 0 1G 0 part
├─sdb3 8:19 0 1G 0 part
├─sdb4 8:20 0 1G 0 part
├─sdb5 8:21 0 1G 0 part
├─sdb6 8:22 0 1G 0 part
-
第一组(/dev/md501):使用sdb1、sdb2、sdb3(无热备盘)
[root@zhangyiwei ~]# mdadm -Cv /dev/md501 -l 5 -n 3 /dev/sdb1 /dev/sdb2 /dev/sdb3 mdadm: layout defaults to left-symmetric mdadm: layout defaults to left-symmetric mdadm: chunk size defaults to 512K mdadm: /dev/sdb1 appears to be part of a raid array:level=raid0 devices=2 ctime=Mon Aug 18 20:33:14 2025 mdadm: /dev/sdb2 appears to be part of a raid array:level=raid0 devices=2 ctime=Mon Aug 18 20:33:14 2025 mdadm: /dev/sdb3 appears to be part of a raid array:level=raid1 devices=2 ctime=Mon Aug 18 20:43:16 2025 mdadm: size set to 1046528K Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md501 started.
-
第二组(/dev/md502):使用sdb4、sdb5、sdb6(无热备盘)
[root@zhangyiwei ~]# mdadm -Cv /dev/md502 -l 5 -n 3 /dev/sdb4 /dev/sdb5 /dev/sdb6 mdadm: layout defaults to left-symmetric mdadm: layout defaults to left-symmetric mdadm: chunk size defaults to 512K mdadm: /dev/sdb4 appears to be part of a raid array: level=raid1 devices=2 ctime=Mon Aug 18 20:43:16 2025 mdadm: /dev/sdb5 appears to be part of a raid array:level=raid5 devices=3 ctime=Mon Aug 18 20:49:51 2025 mdadm: /dev/sdb6 appears to be part of a raid array:level=raid5 devices=3 ctime=Mon Aug 18 20:49:51 2025 mdadm: size set to 1046528K Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md502 started.
(2)将两组 RAID 5 组成 RAID 0(即 RAID 50)
[root@zhangyiwei ~]# mdadm --assemble /dev/md502 /dev/sdb4 /dev/sdb5 /dev/sdb6
mdadm: /dev/sdb4 is busy - skipping
mdadm: /dev/sdb5 is busy - skipping
mdadm: /dev/sdb6 is busy - skipping
[root@zhangyiwei ~]# mdadm -Cv /dev/md50 -l 0 -n 2 /dev/md501 /dev/md502
mdadm: chunk size defaults to 512K
mdadm: /dev/md502 appears to be part of a raid array:level=raid0 devices=2 ctime=Mon Aug 18 21:02:02 2025
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md50 started.
[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT******************
sdb 8:16 0 30G 0 disk
├─sdb1 8:17 0 1G 0 part
│ └─md501 9:501 0 2G 0 raid5
│ └─md50 9:50 0 4G 0 raid0
├─sdb2 8:18 0 1G 0 part
│ └─md501 9:501 0 2G 0 raid5
│ └─md50 9:50 0 4G 0 raid0
├─sdb3 8:19 0 1G 0 part
│ └─md501 9:501 0 2G 0 raid5
│ └─md50 9:50 0 4G 0 raid0
├─sdb4 8:20 0 1G 0 part
│ └─md502 9:502 0 2G 0 raid5
│ └─md50 9:50 0 4G 0 raid0
├─sdb5 8:21 0 1G 0 part
│ └─md502 9:502 0 2G 0 raid5
│ └─md50 9:50 0 4G 0 raid0
├─sdb6 8:22 0 1G 0 part
│ └─md502 9:502 0 2G 0 raid5
│ └─md50 9:50 0 4G 0 raid0
3. 验证 RAID 50
[root@zhangyiwei ~]# mdadm -D /dev/md50
- 关键信息:
RAID Level: raid0
,成员为/dev/md5
和/dev/md6
(两组 RAID 5)。
4. 格式化与挂载
mkfs.xfs /dev/md50
mkdir /raid50
mount /dev/md50 /raid50
df -Th /raid50
五、RAID 运维常用命令
命令用途 | 命令示例 |
---|---|
创建RAID | mdadm -Cv /dev/mdX -l 级别 -n 数量 磁盘列表 |
查看RAID详情 | mdadm -D /dev/mdX |
停止RAID | mdadm -S /dev/mdX |
标记故障盘 | mdadm -f /dev/mdX 故障磁盘 |
移除故障盘 | mdadm -r /dev/mdX 故障磁盘 |
添加新盘(替换故障盘) | mdadm -a /dev/mdX 新磁盘 |
清除磁盘RAID信息 | mdadm --zero-superblock 磁盘 |