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

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.dtcms.com/a/337994.html

相关文章:

  • 损失函数与反向传播 小土堆pytorch记录
  • FPGA-Vivado2017.4-建立AXI4用于单片机与FPGA之间数据互通
  • 计算机组成原理(9) - 整数的乘除法运算
  • js计算两个经纬度之间的角度
  • Python字符串连接与合并工程实践:从基础到高性能解决方案
  • 【笔记】位错的定义和分类
  • B站 韩顺平 笔记 (Day 22)
  • 【人工智能】2025年AI代理失控危机:构建安全壁垒,守护智能未来
  • 规避(EDR)安全检测--避免二进制文件落地
  • 面向对象爬虫进阶:类封装实现高复用爬虫框架​
  • DP-v2.1-mem-clean学习(3.6.9-3.6.12)
  • Python 爬虫实战:玩转 Playwright 跨浏览器自动化(Chromium/Firefox/WebKit 全支持)
  • 嵌入式第三十二课!!线程间的同步机制与进程间的通信(IPC机制)
  • PotPlayer使用AI生成字幕和API实时翻译
  • Redis中LRU与LFU的底层实现:字节级的精巧设计
  • 树莓派安装python第三方库如keras,tensorflow
  • day35-负载均衡
  • 智能化合同处理与知识应用平台:让合同从 “管得住” 到 “用得好”
  • C15T3
  • openssl加密里面的pem格式和rsa有什么区别?
  • 财务分析师如何提升自身专业能力:突破职业瓶颈的五年进阶规划
  • nestjs配置@nestjs/config 入门教程
  • 股票常见K线
  • 群晖nas中 打开PHP连接MariaDB 功能扩展
  • JavaSE——高级篇
  • 处理手表步数和分析用户步数数据
  • 【Tech Arch】Spark为何成为大数据引擎之王
  • 电子电气架构 --- 关于整车信息安全的一些思考
  • 2025年- H98-Lc206--51.N皇后(回溯)--Java版
  • CC攻击的安全防护方案