Linux 服务:RAID 级别解析与 mdadm 工具实操指南

发布于:2025-08-19 ⋅ 阅读:(17) ⋅ 点赞:(0)

Linux 服务:RAID 级别解析与 mdadm 工具实操指南

  • RAID 0

    • 至少需要2块磁盘
    • 数据被分割成多个部分,同时写入不同磁盘
    • 优势:读写速度提升明显(理论上是单盘的N倍,N为磁盘数量)
    • 劣势:无数据冗余,任何一块磁盘损坏都会导致全部数据丢失
    • 适用场景:对性能要求高但对数据安全性要求低的场景,如视频编辑、临时文件存储
  • RAID 1

    • 至少需要2块磁盘
    • 同一份数据同时写入所有磁盘,形成镜像
    • 优势:数据安全性高,一块磁盘损坏时可从其他磁盘恢复数据,读取性能略有提升
    • 劣势:存储利用率低(只有50%),写入性能无提升
    • 适用场景:对数据安全性要求极高的场景,如数据库日志、系统盘
  • RAID 5

    • 至少需要3块磁盘
    • 数据分散存储在所有磁盘,同时计算校验信息并分散存储
    • 优势:允许单块磁盘损坏,存储利用率高((n-1)/n,n为磁盘数量)
    • 劣势:读写性能受校验计算影响,重建时性能下降明显
    • 适用场景:对性能和安全性有一定要求的通用场景,如文件服务器、Web服务器
  • RAID 10(RAID 1+0)

    • 至少需要4块磁盘,成对组成RAID 1,再将这些RAID 1组成RAID 0
    • 优势:兼具RAID 0的速度和RAID 1的安全性,允许每组镜像中各损坏一块磁盘
    • 劣势:存储利用率低(50%),成本较高
    • 适用场景:对性能和安全性都有高要求的场景,如数据库服务器
  • RAID 50(RAID 5+0)

    • 至少需要6块磁盘,先组成多个RAID 5,再将这些RAID 5组成RAID 0
    • 优势:结合了RAID 5的高存储利用率和RAID 0的高性能,允许每个RAID 5组损坏一块磁盘
    • 劣势:配置复杂,重建过程复杂
    • 适用场景:需要大容量、中高性能和一定安全性的场景,如大型文件存储系统

mdadm讲解

mdadm(Multiple Device Administrator)是 Linux 系统中用于管理软件 RAID(Redundant Array of Independent Disks) 的核心工具,通过软件方式实现磁盘阵列的创建、配置、监控和维护,无需依赖硬件 RAID 控制器。

核心功能

mdadm 主要用于管理 Linux 的md(multiple device)设备,实现以下功能:

  • 创建各种级别的 RAID 阵列(如 RAID 0/1/5/6/10 等)
  • 组装(激活)已存在的 RAID 阵列(如系统重启后)
  • 监控 RAID 状态,处理磁盘故障(标记故障盘、替换磁盘等)
  • 调整 RAID 配置(扩容、添加热备盘等)

基本概念

  1. md设备:RAID 阵列在系统中表现为一个虚拟块设备,通常命名为/dev/md0/dev/md1等,可像普通磁盘一样格式化和挂载。
  2. 成员设备:组成 RAID 阵列的物理磁盘或分区(如/dev/sda1/dev/sdb1)。
  3. 元数据(Metadata):存储在成员设备上的 RAID 配置信息(如级别、成员列表、状态等),用于系统重启后识别和组装阵列。

二、mdadm工具核心用法梳理

mdadm是 Linux 软件 RAID 管理的核心工具,以下是关键操作的总结与补充:

1. 基础准备

  • 安装:通过包管理器安装(yum install mdadmapt install mdadm)。

adm常用选项

以下是 mdadm 常用选项的详细说明,包含作用和使用方法:

选项 长选项 作用说明 使用方法示例
-l --level 指定 RAID 级别(如 0、1、5、6、10 等),仅用于创建阵列时 mdadm --create /dev/md0 -l 5 /dev/sd{b,c,d}1(创建 RAID 5)
-n --raid-devices 指定阵列中活动数据盘的数量,创建阵列时必需 mdadm --create /dev/md0 -l 1 -n 2 /dev/sda1 /dev/sdb1(2 块盘做 RAID 1)
-r --remove 从阵列中移除指定设备(需先标记为故障) mdadm /dev/md0 -r /dev/sdc1(从 md0 中移除 sdc1)
-a --add 向阵列添加新设备(可作为数据盘或热备盘) mdadm /dev/md0 -a /dev/sde1(向 md0 添加 sde1 作为热备)
-s --scan 自动扫描系统中的 RAID 设备,用于组装或查询所有阵列 mdadm --assemble -s(自动组装所有识别到的 RAID)
-D --detail 显示指定 RAID 阵列的详细信息(状态、成员、容量等) mdadm -D /dev/md0(查看 md0 的详细信息)
-f --fail 标记指定设备为故障状态(设备异常时使用) mdadm /dev/md0 -f /dev/sdc1(标记 sdc1 为故障)
-S --stop 停止指定的 RAID 阵列(卸载阵列,使其处于非活动状态) mdadm -S /dev/md0(停止 md0 阵列)
-C --create 创建新的 RAID 阵列,需配合级别、设备数量等参数 mdadm -C /dev/md0 -l 0 -n 2 /dev/sda1 /dev/sdb1(创建 RAID 0)

2. 核心操作命令

(1)创建 RAID

通用格式:mdadm -Cv /dev/mdX -l [级别] -n [数据盘数量] [磁盘列表] --spare-devices=[热备盘数量] [热备盘列表]

  • 示例(带热备盘的 RAID 5):
    mdadm -Cv /dev/md5 -l 5 -n 3 /dev/sdb6 /dev/sdb7 /dev/sdb8 --spare-devices=1 /dev/sdb9
(2)查看 RAID 状态
  • 查看指定 RAID 详情(含成员状态、重建进度等):
    mdadm -D /dev/mdX
  • 查看系统所有 RAID:
    mdadm -Ds(扫描并显示所有阵列)
  • lsblk(list block devices)是 Linux 系统中用于列出所有块设备(如硬盘、分区、RAID 阵列、Loop 设备等)的命令工具,能直观展示设备的布局、大小、挂载点等信息,是磁盘管理的常用命令。
(3)RAID 使用与挂载
  • 格式化 RAID 设备(以 xfs 为例):mkfs.xfs /dev/mdX
  • 永久挂载:需将 UUID 写入/etc/fstab(通过blkid /dev/mdX获取 UUID),格式如下:
    UUID=xxx /挂载点 xfs defaults 0 0
(4)故障处理
  • 标记故障盘:mdadm /dev/mdX -f /dev/sdX(热备盘会自动替换并重建)
  • 移除故障盘:mdadm /dev/mdX -r /dev/sdX
  • 添加新盘(修复后复用或换新盘):mdadm /dev/mdX -a /dev/sdX
(5)删除 RAID
  1. 卸载挂载点:umount /挂载点
  2. 停止阵列:mdadm -S /dev/mdX
  3. 清除磁盘元数据(避免系统误识别):mdadm --zero-superblock /dev/sdX1 /dev/sdX2 ...
  4. 删除/etc/fstab中对应的挂载条目

3. 嵌套 RAID(RAID 10/50)创建要点

  • RAID 10:先创建 2 组 RAID 1(每组 2 块盘),再将这 2 组 RAID 1 组成 RAID 0,兼顾速度与冗余。
  • RAID 50:先创建 2 组 RAID 5(每组 3 块盘),再将这 2 组 RAID 5 组成 RAID 0,平衡容量与性能。
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   50G  0 part  /
└─sda3       8:3    0    4G  0 part  [SWAP]

dmadm实操演示

创建raid 0

利用磁盘分区新建多个磁盘分区,每个大小为1GB。用这2个1GB的分区来模拟1个1GB的硬盘。

fdisk /dev/sdb
	命令(输入 m 获取帮助):n
	Partition type:
  		p   primary (0 primary, 0 extended, 4 free)
   		e   extended
	Select (default p): 
	Using default response p
	分区号 (1-4,默认 1):
	起始 扇区 (2048-41943039,默认为 2048):
	将使用默认值 2048
	Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+1G
	分区 1 已设置为 Linux 类型,大小设为 1 GiB
	命令(输入 m 获取帮助):n
	Partition type:
	   p   primary (1 primary, 0 extended, 3 free)
	   e   extended
	Select (default p): 
	Using default response p
	分区号 (2-4,默认 2):
	起始 扇区 (2099200-41943039,默认为 2099200):
	将使用默认值 2099200
	Last 扇区, +扇区 or +size{K,M,G} (2099200-41943039,默认为 41943039):+1G
	分区 2 已设置为 Linux 类型,大小设为 1 GiB

将sdb1和sdb2建立RAID等级为RAID 0的md0(设备名)

mdadm -vC /dev/md0 -l 0 -n 2 /dev/sdb{1..2}

用lsblk查看

lsblk 
NAME    MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
.......
sdb       8:16   0   20G  0 disk  
├─sdb1    8:17   0    1G  0 part  
│ └─md0   9:0    0    2G  0 raid0 
├─sdb2    8:18   0    1G  0 part  
│ └─md0   9:0    0    2G  0 raid0 
sr0      11:0    1  4.3G  0 rom   /mnt

用mdadm -D /dev/md0 查看

/dev/md0:
           Version : 1.2    #RAID 元数据版本(用于存储阵列配置信息的格式版本)。
     Creation Time : Mon Aug 18 18:22:15 2025 #阵列创建时间
        Raid Level : raid0 #阵列级别为 RAID 0
        Array Size : 2093056 (2044.00 MiB 2143.29 MB) #RAID 阵列总容量
      Raid Devices : 2 #阵列中活动数据设备的数量为 2 块。
     Total Devices : 2 #参与阵列的总设备数量为 2 块(无热备盘)
       Persistence : Superblock is persistent #元数据(超级块)是持久化的(重启后不会丢失,可自动识别)

       Update Time : Mon Aug 18 18:22:15 2025 #阵列状态最后更新时间
             State : clean  #阵列状态正常
    Active Devices : 2 #当前活跃的设备数量为 2 块
   Working Devices : 2 #可用设备数量为 2 块
    Failed Devices : 0 #故障设备数量为 0
     Spare Devices : 0 #热备盘数量为 0

        Chunk Size : 512K #条带大小为 512KB(RAID 0 中数据被分割的块大小,影响读写性能)。

Consistency Policy : none #无一致性校验策略

              Name : hrz3.example.com:0  (local to host hrz3.example.com)
              UUID : 189ebf5a:ce04791d:1dab7d05:ec8dbf0c
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       18        1      active sync   /dev/sdb2

使用raid

格式化并挂载

 mkfs.xfs /dev/md0  
 mkdir /md0
 blkid /dev/md0
 /dev/md0: UUID="c442f946-5436-4026-8dd0-906bfe34d7ff" TYPE="xfs"
 vim /etc/fstab
 -------------------------------------------------------------------
 UUID=c442f946-5436-4026-8dd0-906bfe34d7ff /md0   xfs defaults 0 0
 -------------------------------------------------------------------

删除raid0

umount /md0   #卸载挂载在/md0目录下的 RAID 阵列
mdadm -S /dev/md0 #停止/dev/md0这个 RAID 阵列。
rm -rf /raid0/ #删除 RAID 阵列的挂载点目录/raid0/
mdadm --zero-superblock /dev/sdb1 #清除/dev/sdb磁盘上的 RAID 元数据
mdadm --zero-superblock /dev/sdb2
vim /etc/fstab  #删除md0的挂载信息

创建raid 1

mdadm -Cv /dev/md1 -l 1 -n2 /dev/sdb3 /dev/sdb5
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   50G  0 part  /
└─sda3    8:3    0    4G  0 part  [SWAP]
sdb       8:16   0   20G  0 disk  
├─sdb1    8:17   0    1G  0 part  
│ └─md0   9:0    0    2G  0 raid0 /md0
├─sdb2    8:18   0    1G  0 part  
│ └─md0   9:0    0    2G  0 raid0 /md0
├─sdb3    8:19   0    1G  0 part  
│ └─md1   9:1    0 1022M  0 raid1 
├─sdb4    8:20   0    1K  0 part  
├─sdb5    8:21   0    1G  0 part  
│ └─md1   9:1    0 1022M  0 raid1 
├─sdb6    8:22   0    1G  0 part  
├─sdb7    8:23   0    1G  0 part  
├─sdb8    8:24   0    1G  0 part  
├─sdb9    8:25   0    1G  0 part  
└─sdb10   8:26   0    1G  0 part  
sr0      11:0    1  4.3G  0 rom   /mnt
 mdadm -D /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Mon Aug 18 19:20:34 2025
        Raid Level : raid1
        Array Size : 1046528 (1022.00 MiB 1071.64 MB)
     Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Aug 18 19:20:36 2025
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync #同步:确保 RAID 阵列中所有成员设备的数据(或校验信息)保持一致

              Name : hrz3.example.com:1  (local to host hrz3.example.com)
              UUID : 50f86a15:8ba6e081:0df65b54:fb3e4774
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       19        0      active sync   /dev/sdb3
       1       8       21        1      active sync   /dev/sdb5

创建raid 5

mdadm -Cv /dev/md5 -l 5 -n 3 /dev/sdb{6..8} --spare-devices=1 /dev/sdb9
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   50G  0 part  /
└─sda3    8:3    0    4G  0 part  [SWAP]
sdb       8:16   0   20G  0 disk  
├─sdb1    8:17   0    1G  0 part  
│ └─md0   9:0    0    2G  0 raid0 /md0
├─sdb2    8:18   0    1G  0 part  
│ └─md0   9:0    0    2G  0 raid0 /md0
├─sdb3    8:19   0    1G  0 part  
│ └─md1   9:1    0 1022M  0 raid1 
├─sdb4    8:20   0    1K  0 part  
├─sdb5    8:21   0    1G  0 part  
│ └─md1   9:1    0 1022M  0 raid1 
├─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 
├─sdb9    8:25   0    1G  0 part  
│ └─md5   9:5    0    2G  0 raid5 
└─sdb10   8:26   0    1G  0 part  
sr0      11:0    1  4.3G  0 rom   /mnt
mdadm -D /dev/md5
/dev/md5:
           Version : 1.2
     Creation Time : Mon Aug 18 19:33:06 2025
        Raid Level : raid5
        Array Size : 2093056 (2044.00 MiB 2143.29 MB)
     Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Mon Aug 18 19:33:08 2025
             State : clean 
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : hrz3.example.com:5  (local to host hrz3.example.com)
              UUID : dca0b9ed:acbda803:7819edf7:907c438d
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       22        0      active sync   /dev/sdb6
       1       8       23        1      active sync   /dev/sdb7
       4       8       24        2      active sync   /dev/sdb8

       3       8       25        -      spare   /dev/sdb9

模拟硬盘故障

[root@hrz3 ~]# mdadm -f /dev/md5 /dev/sdb6                   
mdadm: set /dev/sdb6 faulty in /dev/md5
mdadm -D /dev/md5          
/dev/md5:
           Version : 1.2
     Creation Time : Mon Aug 18 19:33:06 2025
        Raid Level : raid5
        Array Size : 2093056 (2044.00 MiB 2143.29 MB)
     Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Mon Aug 18 19:38:22 2025
             State : clean, degraded, recovering 
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 45% complete

              Name : hrz3.example.com:5  (local to host hrz3.example.com)
              UUID : dca0b9ed:acbda803:7819edf7:907c438d
            Events : 27

    Number   Major   Minor   RaidDevice State
       3       8       25        0      spare rebuilding   /dev/sdb9 #
       1       8       23        1      active sync   /dev/sdb7
       4       8       24        2      active sync   /dev/sdb8

       0       8       22        -      faulty   /dev/sdb6

发现原来的热备盘/dev/sd9正在参与RAID 5的重建,而原来的/dev/sdb6变成了坏盘。

热移除故障盘

mdadm -r /dev/md5 /dev/sdb6 

假设故障硬盘已经修好想加回来

mdadm -a /dev/md5 /dev/sdb6
[root@hrz3 ~]# mdadm -D /dev/md5          


    Number   Major   Minor   RaidDevice State
       3       8       25        0      active sync   /dev/sdb9
       1       8       23        1      active sync   /dev/sdb7
       4       8       24        2      active sync   /dev/sdb8

       5       8       22        -      spare   /dev/sdb6

sdb6进入热备盘

创建raid 10

首先创建两个raid 1

mdadm -C /dev/md101 -l 1 -n 2 /dev/sdb{10..11}
mdadm -C /dev/md102 -l 1 -n 2 /dev/sdb{12..13} 

然后用md101和md102创建一个raid 0

mdadm -C /dev/md10 -l 0 -n 2 /dev/md101 /dev/md102
lsblk
.......
├─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  
│ └─md101    9:101  0 1022M  0 raid1 
│   └─md10   9:10   0    2G  0 raid0 
├─sdb12      8:28   0    1G  0 part  
│ └─md102    9:102  0 1022M  0 raid1 
│   └─md10   9:10   0    2G  0 raid0 
├─sdb13      8:29   0    1G  0 part  
│ └─md102    9:102  0 1022M  0 raid1 
│   └─md10   9:10   0    2G  0 raid0

用mdadm -D看md10的话只能看到md101和md102

/dev/md10:
           Version : 1.2
     Creation Time : Mon Aug 18 19:56:08 2025
        Raid Level : raid0
        Array Size : 2088960 (2040.00 MiB 2139.10 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Aug 18 19:56:08 2025
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : hrz3.example.com:10  (local to host hrz3.example.com)
              UUID : dd36c2d8:9fe65720:1f102f38:c88d5093
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       9      101        0      active sync   /dev/md101
       1       9      102        1      active sync   /dev/md102

创建raid 50

mdadm -C /dev/md501 -l 5 -n 3 /dev/sdb{14..16}
mdadm -C /dev/md502 -l 5 -n 3 /dev/sdb{17..19}
mdadm -C /dev/md50 -l 0 -n 2 /dev/md501 /dev/md502
 lsblk 
 ......
 ├─sdb14      8:30   0    1G  0 part  
│ └─md501    9:501  0    2G  0 raid5 
│   └─md50   9:50   0    4G  0 raid0 
├─sdb15      8:31   0    1G  0 part  
│ └─md501    9:501  0    2G  0 raid5 
│   └─md50   9:50   0    4G  0 raid0 
├─sdb16    259:0    0    1G  0 part  
│ └─md501    9:501  0    2G  0 raid5 
│   └─md50   9:50   0    4G  0 raid0 
├─sdb17    259:1    0    1G  0 part  
│ └─md502    9:502  0    2G  0 raid5 
│   └─md50   9:50   0    4G  0 raid0 
├─sdb18    259:2    0    1G  0 part  
│ └─md502    9:502  0    2G  0 raid5 
│   └─md50   9:50   0    4G  0 raid0 
├─sdb19    259:3    0    1G  0 part  
│ └─md502    9:502  0    2G  0 raid5 
│   └─md50   9:50   0    4G  0 raid0 

网站公告

今日签到

点亮在社区的每一天
去签到