当前位置: 首页 > ds >正文

Linux: RAID(磁盘冗余阵列)配置全指南

Linux:RAID(磁盘冗余阵列)配置

在这里插入图片描述

一、RAID 核心概念

RAID(Redundant Array of Independent Disks,磁盘冗余阵列)通过将多个物理磁盘组合为一个逻辑存储设备,实现提升读写性能增强数据安全性平衡两者的目的。不同RAID级别采用不同的技术实现,适用于不同场景。

二、常见RAID级别及特性

RAID级别最少磁盘数核心原理性能安全性
RAID 02块数据分割为N份,并行写入各磁盘(无冗余)读写速度大幅提升无冗余,单盘故障数据全丢
RAID 12块数据完全镜像,每块磁盘存储相同内容读速提升,写速略降单盘故障不丢数据
RAID 53块数据分割存储+分布式校验(每块盘均含校验信息)读写性能较好允许单盘故障(可重建)
RAID 104块(2的倍数)先做RAID 1镜像,再将镜像组组成RAID 0(1+0)读写性能优异允许每组镜像中一块盘故障
RAID 506块(3的倍数)先做多个RAID 5,再将这些RAID 5组成RAID 0(5+0)读写性能优异每个RAID 5允许单盘故障

三、RAID 实现方式

  1. 硬件RAID:通过独立RAID控制器实现,性能好、稳定性高,支持热插拔,适合企业级场景。
  2. 软件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: raid0Active 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: raid5Active Devices: 3Spare Devices: 1(热备盘就绪)。
(3)模拟磁盘故障与重建
  1. 标记磁盘为故障

    [root@zhangyiwei ~]# mdadm -f /dev/md5 /dev/sdb5  # 将/dev/sdb5标记为故障盘
    mdadm: set /dev/sdb5 faulty in /dev/md5
    
  2. 查看自动重建过程

    [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%”(重建进度)。
  3. 移除故障盘或分区

    # 从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 运维常用命令

命令用途命令示例
创建RAIDmdadm -Cv /dev/mdX -l 级别 -n 数量 磁盘列表
查看RAID详情mdadm -D /dev/mdX
停止RAIDmdadm -S /dev/mdX
标记故障盘mdadm -f /dev/mdX 故障磁盘
移除故障盘mdadm -r /dev/mdX 故障磁盘
添加新盘(替换故障盘)mdadm -a /dev/mdX 新磁盘
清除磁盘RAID信息mdadm --zero-superblock 磁盘
http://www.xdnf.cn/news/18312.html

相关文章:

  • 作业标准化:制造企业的效率基石与品质保障
  • 可编辑150页PPT | 某制造集团产业数字化转型规划方案
  • idea部署到docker
  • 【MyBatis-Plus】一、快速入门
  • kafka 发送消息有哪些模式?各自的应用场景是什么?
  • 秋招笔记-8.17
  • Java 学习笔记(基础篇5)
  • 【OpenAI】 GPT-4o-realtime-preview 多模态、实时交互模型介绍+API的使用教程!
  • 宋红康 JVM 笔记 Day05|运行时数据区内部结构、JVM中的线程说明、程序计数器
  • RAID服务器
  • PDF处理控件Aspose.PDF教程:将 PNG 合并为 PDF
  • HTTP协议-4-浏览器是怎么抉择HTTP版本的?
  • 【Java基础】反射,注解,异常,Java8新特性,object类-详细介绍
  • 01.Linux小技巧
  • 「Flink」业务搭建方法总结
  • Chromium base 库中的 Observer 模式实现:ObserverList 与 ObserverListThreadSafe 深度解析
  • 《Python学习之第三方库:开启无限可能》
  • 【K8s】harbor安装与推送镜像
  • 104、【OS】【Nuttx】【周边】文档构建渲染:安装 Sphinx 扩展(上)
  • 【笔记】位错的定义和分类
  • K8s的命名空间需要创建吗
  • HAProxy使用方法以及和LVS区别
  • InfluxDB 开发工具链:IDE 插件与调试技巧(二)
  • 【DDIA】第十章:解析Reduce端连接与分组技术
  • 基于C语言实现的HRV分析方法 —— 与Kubios和MATLAB对比
  • Django 请求生命周期
  • 2025北京世界机器人大会 ​要点总结
  • 检索增强生成(RAG) 缓存增强生成(CAG) 生成中检索(RICHES) 知识库增强语言模型(KBLAM)
  • PPT生成视频的AI大模型应用技巧
  • 第4.3节:awk正则表达式详解-特殊字符