rockylinux8.9 做软RAID


前言


参考链接:https://blog.csdn.net/u011130086/article/details/119172119

有台服务器没有 RAID 卡,虽然数据不太重要,但是真要丢失了还是会存在一些麻烦。因此考虑用 软 RAID 的方式实现数据的冗余。


制作过程


环境介绍


首先,在虚拟机上模拟这个过程,环境如下:

OS:	CentOS Linux release 7.9.2009
Kernel:	3.10.0-1160.el7.x86_64

Raid disk:
vdb             252:16   0   10G  0 disk
vdc             252:32   0   10G  0 disk

安装mdadm


dnf install -y mdadm

RAID-1


镜像阵列。

优点:

  1. 数据可靠性高,一块盘坏了不影响数据的完整性;
  2. 读取性能较好(可并行读)

缺点:

  1. 容量利用率只有 50%
  2. 写入速度略低(需同步写入两块硬盘)

适用场景:操作系统盘、日志盘、小型数据库


配置


  1. 创建raid1
~ > mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

  1. 查看raid同步过程
~ > cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb[1] sda[0]
      10476544 blocks super 1.2 [2/2] [UU]
      [=====>...............]  resync = 28.6% (3001344/10476544) finish=0.5min speed=214381K/sec

unused devices: <none>

  1. 查看raid详细信息
~ > mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jun 20 16:05:12 2025
        Raid Level : raid1
        Array Size : 10476544 (9.99 GiB 10.73 GB)
     Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Fri Jun 20 16:06:04 2025
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 8945bbe8:0066ed77:1c7883c1:38dc411e
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync   /dev/sda
       1       8       16        1      active sync   /dev/sdb


  1. 查看磁盘信息,并挂载
#查看磁盘信息
~ > lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda           8:0    0   10G  0 disk
└─md0         9:0    0   10G  0 raid1
sdb           8:16   0   10G  0 disk
└─md0         9:0    0   10G  0 raid1
sdc           8:32   0   10G  0 disk
sr0          11:0    1  2.4G  0 rom

#格式化文件系统
~ > mkfs.xfs /dev/md0

#挂载
~ > mkdir /data
~ > mount /dev/md0 /data/

#永久挂载
~ > blkid /dev/md0
~ > vim /etc/fstab
~ > mount -a


  1. 重启进行测试
~ > reboot

#查看挂载
~ > lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda           8:0    0   10G  0 disk
└─md0         9:0    0   10G  0 raid1 /data
sdb           8:16   0   10G  0 disk
└─md0         9:0    0   10G  0 raid1 /data
sdc           8:32   0   10G  0 disk

测试


将其中一块硬盘设置为失败

#查看正常状态
~ > mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jun 20 16:05:12 2025
        Raid Level : raid1
        Array Size : 10476544 (9.99 GiB 10.73 GB)
     Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Fri Jun 20 16:11:36 2025
             State : clean	#注意看这里的状态,正常情况下是 clean 状态。
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 8945bbe8:0066ed77:1c7883c1:38dc411e
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync   /dev/sda
       1       8       16        1      active sync   /dev/sdb


#将一块硬盘设置为fail
~ > mdadm /dev/md0 --fail /dev/sda
mdadm: set /dev/sda faulty in /dev/md0

#再次查看raid信息
~ > mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jun 20 16:05:12 2025
        Raid Level : raid1
        Array Size : 10476544 (9.99 GiB 10.73 GB)
     Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Fri Jun 20 16:17:06 2025
             State : clean, degraded	#这里状态还是clean,但是又多了一个状态:degraded(被降级的)
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 1
     Spare Devices : 0

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 8945bbe8:0066ed77:1c7883c1:38dc411e
            Events : 19

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       16        1      active sync   /dev/sdb

       0       8        0        -      faulty   /dev/sda	# sda的状态为故障的


#因为是raid1,快掉一块硬盘依然可用
~ > touch /data/abc


#还可以通过命令将sda直接删除
~ > mdadm /dev/md0 --remove /dev/sda
mdadm: hot removed /dev/sda from /dev/md0

~ > mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jun 20 16:05:12 2025
        Raid Level : raid1
        Array Size : 10476544 (9.99 GiB 10.73 GB)
     Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
      Raid Devices : 2
     Total Devices : 1
       Persistence : Superblock is persistent

       Update Time : Fri Jun 20 16:19:12 2025
             State : clean, degraded
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 8945bbe8:0066ed77:1c7883c1:38dc411e
            Events : 24

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       16        1      active sync   /dev/sdb

#将sda重新加入raid1
~ > mdadm /dev/md0 --add /dev/sda
mdadm: added /dev/sda

~ > mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jun 20 16:05:12 2025
        Raid Level : raid1
        Array Size : 10476544 (9.99 GiB 10.73 GB)
     Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Fri Jun 20 16:21:50 2025
             State : clean, degraded, recovering
    Active Devices : 1
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 1

Consistency Policy : resync

    Rebuild Status : 7% complete

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 8945bbe8:0066ed77:1c7883c1:38dc411e
            Events : 31

    Number   Major   Minor   RaidDevice State
       2       8        0        0      spare rebuilding   /dev/sda	# 正在重建,这里可以通过 cat /proc/mdstat 查看
       1       8       16        1      active sync   /dev/sdb

设置热备盘


设置热备盘的意义在于,当raid组中有硬盘故障,热备盘可以直接替换掉组群中故障的硬盘。

#将sdc设置为热备盘
~ > mdadm /dev/md0 --add /dev/sdc

#查看状态
~ > mdadm --detail /dev/md0
/dev/md0:
          Version : 1.2
    Creation Time : Fri Jun 20 16:05:12 2025
       Raid Level : raid1
       Array Size : 10476544 (9.99 GiB 10.73 GB)
    Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
     Raid Devices : 2
    Total Devices : 3
      Persistence : Superblock is persistent

      Update Time : Fri Jun 20 16:23:53 2025
            State : clean
   Active Devices : 2
  Working Devices : 3
   Failed Devices : 0
    Spare Devices : 1

Consistency Policy : resync

             Name : localhost.localdomain:0  (local to host localhost.localdomain)
             UUID : 8945bbe8:0066ed77:1c7883c1:38dc411e
           Events : 48

   Number   Major   Minor   RaidDevice State
      2       8        0        0      active sync   /dev/sda
      1       8       16        1      active sync   /dev/sdb

      3       8       32        -      spare   /dev/sdc

模拟故障测试

#将sdb设置为故障
~ > mdadm /dev/md0 --fail /dev/sdb


#查看raid组
~ > mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jun 20 16:05:12 2025
        Raid Level : raid1
        Array Size : 10476544 (9.99 GiB 10.73 GB)
     Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
      Raid Devices : 2
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Fri Jun 20 16:26:26 2025
             State : clean, degraded, recovering
    Active Devices : 1
   Working Devices : 2
    Failed Devices : 1
     Spare Devices : 1

Consistency Policy : resync

    Rebuild Status : 47% complete

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 8945bbe8:0066ed77:1c7883c1:38dc411e
            Events : 57

    Number   Major   Minor   RaidDevice State
       2       8        0        0      active sync   /dev/sda
       3       8       32        1      spare rebuilding   /dev/sdc	#sdc作为热备盘直接替换掉故障的sdb,热备生效
       
       1       8       16        -      faulty   /dev/sdb	#设置为故障的


RAID-5


条带+奇偶效验

优点:

  1. 可容忍1块盘故障
  2. 高读取性能
  3. 容量利用率较高(N-1)

缺点:

  1. 写入性能较差(奇偶效验计算)
  2. 重建时风险大,IO压力高

适用场景:读多写少的应用,如文件服务器、备份存储


配置

~ > mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sda /dev/sdb /dev/sdc
mdadm: Defaulting to version 1.2 metadata

#查看同步过程
~ > cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid5 sdc[3] sdb[1] sda[0]
      20953088 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [=>...................]  recovery =  7.6% (800896/10476544) finish=0.8min speed=200224K/sec

unused devices: <none>

#同步完成,查看详细信息
~ > mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jun 20 16:36:10 2025
        Raid Level : raid5
        Array Size : 20953088 (19.98 GiB 21.46 GB)
     Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Fri Jun 20 16:37:03 2025
             State : clean	#状态为clean可用
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : a28c6471:0b7484eb:e909709c:2f91ca40
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync   /dev/sda
       1       8       16        1      active sync   /dev/sdb
       3       8       32        2      active sync   /dev/sdc
       
#格式化文件系统
~ > mkfs.xfs /dev/md0 -f
#挂载
~ > mount /dev/md0 /data/
~ > lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda           8:0    0   10G  0 disk
└─md0         9:0    0   20G  0 raid5 /data	#这里也可以看到是raid5
sdb           8:16   0   10G  0 disk
└─md0         9:0    0   20G  0 raid5 /data
sdc           8:32   0   10G  0 disk
└─md0         9:0    0   20G  0 raid5 /data

测试

#将sdc设置为故障
~ > mdadm /dev/md0 --fail /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md0

#查看raid信息
~ > mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jun 20 16:36:10 2025
        Raid Level : raid5
        Array Size : 20953088 (19.98 GiB 21.46 GB)
     Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Fri Jun 20 16:40:53 2025
             State : clean, degraded	#新增了一个降级的状态,但是raid依然可用,符合raid5
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 1
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : a28c6471:0b7484eb:e909709c:2f91ca40
            Events : 20

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync   /dev/sda
       1       8       16        1      active sync   /dev/sdb
       -       0        0        2      removed

       3       8       32        -      faulty   /dev/sdc


#将sdc添加到raid5中,要添加首先要删除
~ > mdadm /dev/md0 --remove /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md0

#添加sdc到raid5中
~ > mdadm /dev/md0 --add /dev/sdc
mdadm: added /dev/sdc

#查看raid信息
~ > mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jun 20 16:36:10 2025
        Raid Level : raid5
        Array Size : 20953088 (19.98 GiB 21.46 GB)
     Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Fri Jun 20 16:42:12 2025
             State : clean, degraded, recovering # recovering正在恢复状态
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 5% complete

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : a28c6471:0b7484eb:e909709c:2f91ca40
            Events : 23

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync   /dev/sda
       1       8       16        1      active sync   /dev/sdb
       3       8       32        2      spare rebuilding   /dev/sdc #这里可以通过 cat /proc/mdstat 查看进度

RAID10

镜像的条带,raid10 拆解来看,raid1 + raid0 的组合。

优点:

  1. 高性能(raid0)+ 高冗余(raid1)
  2. 可容忍每组镜像中的1块磁盘损坏

缺点:

  1. 仅50%容量利用率
  2. 至少需要4块硬盘

适用场景:数据库、虚拟化平台、高性能应用


配置

#创建raid10
~ > mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd

#查看同步过程
~ > cat /proc/mdstat
Personalities : [raid10]
md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
      20953088 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      [=========>...........]  resync = 46.0% (9651968/20953088) finish=0.9min speed=200930K/sec

unused devices: <none>

#同步完成,查看详细信息
~ > mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jun 20 16:54:11 2025
        Raid Level : raid10
        Array Size : 20953088 (19.98 GiB 21.46 GB)
     Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Fri Jun 20 16:55:56 2025
             State : clean
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : c2abec6c:ce740d34:e3f92c91:dcd0856c
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync set-A   /dev/sda
       1       8       16        1      active sync set-B   /dev/sdb
       2       8       32        2      active sync set-A   /dev/sdc
       3       8       48        3      active sync set-B   /dev/sdd

#格式化文件系统
~ > mkfs.xfs /dev/md0 -f

#挂载
~ > mount /dev/md0 /data/

测试

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync set-A   /dev/sda
       1       8       16        1      active sync set-B   /dev/sdb
       2       8       32        2      active sync set-A   /dev/sdc
       3       8       48        3      active sync set-B   /dev/sdd


上面是 raid10 的磁盘,注意: active sync set-A ,A-B为一组raid1 因此在raid10中,A-B必须有一个为活动的状态。

#将sda设置为故障
~ > mdadm /dev/md0 --fail /dev/sda
mdadm: set /dev/sda faulty in /dev/md0

#查看raid详细信息
~ > mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jun 20 16:54:11 2025
        Raid Level : raid10
        Array Size : 20953088 (19.98 GiB 21.46 GB)
     Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Fri Jun 20 17:39:30 2025
             State : clean, degraded #新增了降级的状态
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : c2abec6c:ce740d34:e3f92c91:dcd0856c
            Events : 19

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       16        1      active sync set-B   /dev/sdb
       2       8       32        2      active sync set-A   /dev/sdc
       3       8       48        3      active sync set-B   /dev/sdd

       0       8        0        -      faulty   /dev/sda # sda已经标记为故障状态

#目前raid组已经可用
~ > touch /data/abc
~ > ls /data/
abc

#再次将sdc标记为故障
~ > mdadm /dev/md0 --fail /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md0

#查看raid10
~ > mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jun 20 16:54:11 2025
        Raid Level : raid10
        Array Size : 20953088 (19.98 GiB 21.46 GB)
     Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Fri Jun 20 17:52:33 2025
             State : clean, degraded #状态依然是降级的,只要有clean,则表示raid10依然可用。
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 2
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : c2abec6c:ce740d34:e3f92c91:dcd0856c
            Events : 31

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       16        1      active sync set-B   /dev/sdb
       -       0        0        2      removed
       3       8       48        3      active sync set-B   /dev/sdd

       0       8        0        -      faulty   /dev/sda
       2       8       32        -      faulty   /dev/sdc


#测试是否可用
~ > touch /data/hukey
~ > ls /data/
abc  hukey


#再次尝试将sdb设置为故障状态
~ > mdadm /dev/md0 --fail /dev/sdb
mdadm: Cannot remove /dev/sdb from /dev/md0, array will be failed.
这里给的提示已经很明确了, 如果将 sdb 设置为故障,raid10组将会失败,数据会丢失。

热备盘的配置和RAID1中提到的一致,可自行进行测试。



--- EOF ---
posted @ 2022-09-26 19:02  hukey  阅读(889)  评论(0)    收藏  举报