0


Linux Centos 使用软件 RAID 磁盘阵列方法

前言

Raid磁盘阵列简单的说就是按照不同的需求将多块硬盘组合在一起。目前常见raid组合方式有raid0、raid1、raid5、raid10,关于这几种模式的区别就不多做介绍。

Raid实现方式也可以分为硬件raid(使用硬盘 raid 阵列卡或者硬盘柜),软件raid(在操作系统上安装软件去控制硬盘实现raid模式),软件raid与硬件raid各有各的优劣。
如果你不喜欢折腾可以选硬件raid,但你都找到这篇文章应该已经确定要做软件raid了,作为一名垃圾佬看到稍好点的raid阵列卡有点小贵,而且cpu确实有点性能过剩了应该利用起来,我这里要介绍的就是软件raid。

准备工作

关于实体服务器raid调试:我在家翻来覆去勉强凑齐了4个USB存储设备,2个MP3,1张tf卡配读卡器,1个U盘,这4个设备虽然容量不同,但依旧可以组件raid,组建raid时容量是按照最小容量而去叠加的,例如你要组件raid0,你使用2个存储设备1个8G1个16G,那容量就按照最小的8G来叠加,将你的16G容量砍到8G,然后总容量为8G+8G=16G。如果你凑不齐存储设备或者硬盘也问题不大,可以使用虚拟机创建虚拟磁盘调试。

在这里插入图片描述

安装raid软件

查看系统是否已经安装软件:

[root@vm ~]# rpm -qa|grep mdadm 
mdadm-4.1-9.el7_9.x86_64

如果未安装执行:

yum -yinstallmdadm

执行 mdadm 命令时常用的参数参考表格
参数功能-a检测设备名称-n指定设备数量-l指定RAID等级-C创建-v显示过程-f模拟设备损坏-r移除设备-a增加设备-Q查看摘要信息-D查看详细信息-S停止
先查看所有的磁盘列表:

fdisk-l

在这里插入图片描述

我就用这4个做演示,由于我这里最小的盘只有 7780MB,所以另外3个盘的容量都会在raid的搭建中容量被砍到7780MB,当然了正常情况下搭建raid肯定都是使用同型号同容量的硬盘。

这里温馨提示:在组建 RAID 前如果硬盘有重要数据记得提前备份!!

在搭建阵列时会格式化硬盘

记得备份数据!!!

记得备份数据!!!

记得备份数据!!!

RAID0搭建

首先我们执行命令:

mdadm-C /dev/md0 -ayes-l0-n2 /dev/sdd /dev/sde

这条命令的意思是

  • 使用 mdadm
  • 创建(-C)
  • raid设备“/dev/md0” (/dev/md0 -a yes)
  • 等级为raid0 (-l 0)
  • 使用硬盘数量为2 (-n 2)
  • 使用设备“/dev/sdd”与“/dev/sde”

这里的raid设备名称必须要为:“/dev/md数字”这样的格式,其他的名称无法正常创建,因为我已经试过了不行。
在这里输入y确定创建
在这里插入图片描述

现在我们已经创建好了一个raid0设备,可以输入命令:

fdisk-l

查看
在这里插入图片描述
比之前多了一个设备“/dev/md0”,这个16.1GB就是两个硬盘叠加的容量
我们也可以使用命令:

mdadm-D /dev/md0

去查看raid的详细信息

[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
           Version :1.2
     Creation Time : Thu Oct 1218:58:10 2023
        Raid Level : raid0                               # raid阵列级别为raid0
        Array Size :15691264(14.96 GiB 16.07 GB)# raid阵列总容量
      Raid Devices :2# raid阵列成员个数
     Total Devices :2# raid阵列中下属成员的总计个数(因为还有冗余硬盘或分区)
       Persistence : Superblock is persistent

       Update Time : Thu Oct 1218:58:10 2023
             State : clean                               # raid状态,(clean 表示正常,degraded 表示有问题,recovering 表示正在恢复或构建)
    Active Devices :2# 被激活的 RAID 成员个数
   Working Devices :2# 正常工作的 RAID 成员个数
    Failed Devices :0# 出问题的 RAID 成员
     Spare Devices :0# 备用 RAID 成员个数(会自动替换出现问题的成员)

        Chunk Size : 512K

Consistency Policy : none

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 8ffa4b84:1694187c:96d59d99:5ae938b2  #RAID 的 UUID 值,在系统中是唯一的
            Events :0

    Number   Major   Minor   RaidDevice State
       08480      active sync   /dev/sdd
       18641      active sync   /dev/sde

然后我们在使用前将创建的raid设备格式化为ext4系统 (你也可以格式化为其他的系统):

mkfs-t ext4 /dev/md0

然后就可以将硬盘挂载到指定的空白目录下,例如我挂载到了/test 下:

mount /dev/md0 /test

在这里插入图片描述

现在还没结束,我在创建raid设备“/dev/md0”后重启系统,发现名称变化了,这就很不利于我们设置开机自动挂载
在这里插入图片描述
在这里插入图片描述

还需要创建 mdadm 的配置文件,创建 mdadm 文件就是为了每次重启系统时自动加载RAID

# 指定 RAID 设备echo"DEVICE /dev/sdd /dev/sde">> /etc/mdadm.conf
# 将 RAID0 的 UUID 追加到该目录mdadm-Ds /dev/md0 >> /etc/mdadm.conf

在这里插入图片描述
这配置完成后每次启动系统raid设备名称就不会改变了,要记得当你删除raid设备的时候这边的配置也需要修改。

这里值得一提的是我用usb设备组建的raid阵列在开机时有概率加载不出来,所以会导致系统挂载失败,也有可能是因为部分设备为usb2.0的原因,但是我用虚拟硬盘或者实体硬盘测试开机自动加载阵列以及开机自动挂载都是没有问题的,最后就是将你的raid设备添加到开机自动挂载中,修改你的 “/etc/fstab” 文件,添加自动挂载:

#你的设备名称  #你要挂载的目录    #硬盘的格式  #默认   #默认 #默认
/dev/md0      /data               ext4        defaults    00

RAID取消搭建

在搭建raid1前可以先熟悉一下如何取消搭建raid,不需要可以直接跳过这步开始搭建raid1。
如果raid设备还挂载在某个目录下可以使用取消挂载命令:

umount /dev/md0

取消挂载后执行取消raid搭建命令:

mdadm-S /dev/md0

不要忘了清空 “/etc/mdadm.conf” 中的内容哦

RAID1搭建

使用其中两个设备 “/dev/sdd /dev/sde” 组合创建raid1“/dev/md1”

mdadm-C /dev/md1 -ayes-l1-n2 /dev/sdd /dev/sde

别忘了更新 mdadm 配置文件:

# 指定 RAID 设备echo"DEVICE /dev/sdd /dev/sde">> /etc/mdadm.conf
# 将 RAID1 的 UUID 追加到该目录mdadm-Ds /dev/md1 >> /etc/mdadm.conf

老样子,我们先格式化raid设备

mkfs-t ext4 /dev/md1

然后挂载到你指定的目录:

mount /dev/md1 /test

在这里插入图片描述

我们可以试着往这个目录下放入一些文件
在这里插入图片描述
没问题,接下来我们来模拟硬盘损坏的情况,可以使用命令行模拟:

mdadm /dev/md1 -f /dev/sdd

但我要符合真实情况,所以我直接拔掉其中一个usb设备来模拟硬盘损坏,*(反正这老设备坏了也不心疼)*
在模拟之前先记录一下raid的状态:

[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
           Version :1.2
     Creation Time : Thu Oct 1220:38:13 2023
        Raid Level : raid1
        Array Size :7592960(7.24 GiB 7.78 GB)
     Used Dev Size :7592960(7.24 GiB 7.78 GB)
      Raid Devices :2
     Total Devices :2
       Persistence : Superblock is persistent

       Update Time : Thu Oct 1220:40:03 2023
             State : active, resyncing 
    Active Devices :2
   Working Devices :2
    Failed Devices :0
     Spare Devices :0

Consistency Policy : resync   #同步状态,一个磁盘读写,一个磁盘同步

     Resync Status :3% complete

              Name : localhost.localdomain:1  (local to host localhost.localdomain)
              UUID : aa61be45:e49f79cf:02db0e38:5e14e548
            Events :15

    Number   Major   Minor   RaidDevice State
       08480      active sync   /dev/sdd
       18641      active sync   /dev/sde

现在我已经拔掉了其中的一个设备 “/dev/sde”,先看看挂载目录下的文件都还在不,
在这里插入图片描述
还好,都还在,让我们再看一下raid的状态

[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
           Version :1.2
     Creation Time : Thu Oct 1220:38:13 2023
        Raid Level : raid1
        Array Size :7592960(7.24 GiB 7.78 GB)
     Used Dev Size :7592960(7.24 GiB 7.78 GB)
      Raid Devices :2
     Total Devices :1
       Persistence : Superblock is persistent

       Update Time : Thu Oct 1220:43:22 2023
             State : active, degraded 
    Active Devices :1
   Working Devices :1
    Failed Devices :0
     Spare Devices :0

Consistency Policy : resync

              Name : localhost.localdomain:1  (local to host localhost.localdomain)
              UUID : aa61be45:e49f79cf:02db0e38:5e14e548
            Events :48

    Number   Major   Minor   RaidDevice State
       08480      active sync   /dev/sdd
       -       001      removed

执行命令后我发现和别人模拟损坏的结果好像有点不太一样

不过还是先继续往下个步骤进行,先移除不能识别的磁盘:

mdadm /dev/md1 -f /dev/sde

额。。但是我这不按照套路来,看样子是自动帮我移除了不能识别的磁盘:

[root@localhost ~]# mdadm /dev/md1 -r /dev/sde
mdadm: stat failed for /dev/sde: No such file or directory

问题不大,只要记住了就好,如果损坏的硬盘还没移除那就先执行移除。。
接下来模拟替换坏硬盘:

[root@localhost ~]# mdadm /dev/md1 -a /dev/sdc
mdadm: added /dev/sdc

完成后再查看raid状态,看样子在同步中,进度到了8%:

[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
           Version :1.2
     Creation Time : Thu Oct 1220:38:13 2023
        Raid Level : raid1
        Array Size :7592960(7.24 GiB 7.78 GB)
     Used Dev Size :7592960(7.24 GiB 7.78 GB)
      Raid Devices :2
     Total Devices :2
       Persistence : Superblock is persistent

       Update Time : Thu Oct 1221:09:56 2023
             State : clean, degraded, recovering 
    Active Devices :1
   Working Devices :2
    Failed Devices :0
     Spare Devices :1

Consistency Policy : resync

    Rebuild Status :8% complete

              Name : localhost.localdomain:1  (local to host localhost.localdomain)
              UUID : aa61be45:e49f79cf:02db0e38:5e14e548
            Events :250

    Number   Major   Minor   RaidDevice State
       08480      active sync   /dev/sdd
       28321      spare rebuilding   /dev/sdc

这个是同步完成的状态:

[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
           Version :1.2
     Creation Time : Thu Oct 1220:38:13 2023
        Raid Level : raid1
        Array Size :7592960(7.24 GiB 7.78 GB)
     Used Dev Size :7592960(7.24 GiB 7.78 GB)
      Raid Devices :2
     Total Devices :2
       Persistence : Superblock is persistent

       Update Time : Thu Oct 1221:30:33 2023
             State : clean 
    Active Devices :2
   Working Devices :2
    Failed Devices :0
     Spare Devices :0

Consistency Policy : resync

              Name : localhost.localdomain:1  (local to host localhost.localdomain)
              UUID : aa61be45:e49f79cf:02db0e38:5e14e548
            Events :342

    Number   Major   Minor   RaidDevice State
       08480      active sync   /dev/sdd
       28321      active sync   /dev/sdc

RAID5搭建

我使用“/dev/sdb”、“/dev/sdc”、“/dev/sdd”创建了一个raid5阵列“/dev/md5”

mdadm-C /dev/md5 -ayes-l5-n3 /dev/sdb /dev/sdc /dev/sdd

别忘了更新 mdadm 配置文件:

# 指定 RAID 设备echo"DEVICE /dev/sdb /dev/sdc /dev/sdd">> /etc/mdadm.conf
# 将 RAID5 的 UUID 追加到该目录mdadm-Ds /dev/md5 >> /etc/mdadm.conf

老样子,我们先格式化raid设备

mkfs-t ext4 /dev/md5

然后挂载到你指定的目录:

mount /dev/md5 /test

还是一样往里面写入数据
在这里插入图片描述

我们查看一下raid设备状态:

[root@localhost /]# mdadm -D /dev/md5
/dev/md5:
           Version :1.2
     Creation Time : Fri Oct 1313:45:22 2023
        Raid Level : raid5
        Array Size :15185920(14.48 GiB 15.55 GB)
     Used Dev Size :7592960(7.24 GiB 7.78 GB)
      Raid Devices :3
     Total Devices :3
       Persistence : Superblock is persistent

       Update Time : Fri Oct 1314:11:59 2023
             State : clean, degraded, recovering 
    Active Devices :2
   Working Devices :3
    Failed Devices :0
     Spare Devices :1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status :50% complete                    #看样子构建状态只到了50%

              Name : localhost.localdomain:5  (local to host localhost.localdomain)
              UUID : 2010290f:626a4cd1:f6da260b:9e4067cf
            Events :57

    Number   Major   Minor   RaidDevice State
       08320      active sync   /dev/sdc
       18481      active sync   /dev/sdd
       38642      spare rebuilding   /dev/sde

模拟损坏可以使用命令: bash mdadm /dev/md5 -f /dev/sde 构建一定要等它到100%,我模拟硬盘损坏,还是像前面一样,我直接拔掉一个设备,然后查看状态,这里可以看到掉了一个硬盘 (但数据好像还可以正常访问)

[root@localhost ~]# mdadm -D /dev/md5
/dev/md5:
           Version :1.2
     Creation Time : Fri Oct 1317:15:28 2023
        Raid Level : raid5
        Array Size :15177728(14.47 GiB 15.54 GB)
     Used Dev Size :7588864(7.24 GiB 7.77 GB)
      Raid Devices :3
     Total Devices :2
       Persistence : Superblock is persistent

       Update Time : Fri Oct 1319:24:18 2023
             State : active, degraded 
    Active Devices :2
   Working Devices :2
    Failed Devices :0
     Spare Devices :0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:5  (local to host localhost.localdomain)
              UUID : 0ec22c1e:96079eb9:e88563b6:7474157c
            Events :25

    Number   Major   Minor   RaidDevice State
       08320      active sync   /dev/sdc
       18481      active sync   /dev/sdd
       -       002      removed

接下来模拟添加新的硬盘,先移除异常硬盘,有可能系统已经帮你自动移除了,但还是还是照样移除一下:

[root@localhost ~]# mdadm /dev/md5 -r /dev/sde
mdadm: stat failed for /dev/sde: No such file or directory

那就直接添加新硬盘,如果添加不进去记得先取消挂载:

mdadm /dev/md5 -a /dev/sdf

再查看状态,发现已经正在开始同步了,等它同步到100%就好了:

[root@localhost ~]# mdadm -D /dev/md5
/dev/md5:
           Version :1.2
     Creation Time : Fri Oct 1317:15:28 2023
        Raid Level : raid5
        Array Size :15177728(14.47 GiB 15.54 GB)
     Used Dev Size :7588864(7.24 GiB 7.77 GB)
      Raid Devices :3
     Total Devices :3
       Persistence : Superblock is persistent

       Update Time : Fri Oct 1319:27:53 2023
             State : clean, degraded, recovering 
    Active Devices :2
   Working Devices :3
    Failed Devices :0
     Spare Devices :1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status :1% complete    # 等待同步到100%

              Name : localhost.localdomain:5  (local to host localhost.localdomain)
              UUID : 0ec22c1e:96079eb9:e88563b6:7474157c
            Events :46

    Number   Major   Minor   RaidDevice State
       08320      active sync   /dev/sdc
       18481      active sync   /dev/sdd
       38802      spare rebuilding   /dev/sdf

RAID5添加硬盘实现空间扩展

当我们觉得当前RAID5空间不够用了想增加硬盘扩容也是可以实现无损扩容的,但还是老规矩,有重要数据记得提前备份。
例如我使用“/dev/sdb”、“/dev/sdc”、“/dev/sdd”创建了一个raid5阵列“/dev/md5”,单硬盘容量为4G,目前总可用容量为8G,我要添加新的硬盘 “/dev/sde” 到阵列中,首先执行添加硬盘到阵列的命令:

[root@MiWiFi-RD03-srv ~]# mdadm /dev/md5 -a /dev/sde
mdadm: added /dev/sde

查看raid5当前状态,可以看到硬盘虽然添加进去了,但“/dev/sde”还只是用做热备份盘:

[root@MiWiFi-RD03-srv ~]# mdadm -D /dev/md5
/dev/md5:
           Version :1.2
     Creation Time : Sat Oct 1413:51:52 2023
        Raid Level : raid5
        Array Size :8378368(7.99 GiB 8.58 GB)
     Used Dev Size :4189184(4.00 GiB 4.29 GB)
      Raid Devices :3
     Total Devices :4
       Persistence : Superblock is persistent

       Update Time : Sat Oct 1413:53:44 2023
             State : clean 
    Active Devices :3
   Working Devices :4
    Failed Devices :0
     Spare Devices :1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : MiWiFi-RD03-srv:5  (local to host MiWiFi-RD03-srv)
              UUID : efa8b5f4:dfa65f62:9cc75635:e82c6124
            Events :19

    Number   Major   Minor   RaidDevice State
       08160      active sync   /dev/sdb
       18321      active sync   /dev/sdc
       38482      active sync   /dev/sdd

       4864        -      spare   /dev/sde

把硬盘“/dev/sde”加入活动盘中,最开始我们设置的活动硬盘数量为3,现在改为4(以实际情况为准):

mdadm-G /dev/md5 -n4

查看raid5当前状态,如果这段 “Reshape Status : 61% complete” 未加载到100%那就等待加载,看样子已经成功加进去了,但目前还是不能使用所有空间容量

[root@MiWiFi-RD03-srv ~]# mdadm -D /dev/md5
/dev/md5:
           Version :1.2
     Creation Time : Sat Oct 1413:57:22 2023
        Raid Level : raid5
        Array Size :12567552(11.99 GiB 12.87 GB)
     Used Dev Size :4189184(4.00 GiB 4.29 GB)
      Raid Devices :4
     Total Devices :4
       Persistence : Superblock is persistent

       Update Time : Sat Oct 1414:00:30 2023
             State : clean 
    Active Devices :4
   Working Devices :4
    Failed Devices :0
     Spare Devices :0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : MiWiFi-RD03-srv:5  (local to host MiWiFi-RD03-srv)
              UUID : 6fc48912:31f2a51e:26ec0914:093ee49a
            Events :47

    Number   Major   Minor   RaidDevice State
       08160      active sync   /dev/sdb
       18321      active sync   /dev/sdc
       38482      active sync   /dev/sdd
       48643      active sync   /dev/sde

可以看到系统还是只识别了8G,如果你方便执行格式化那以下的内容就可以跳过,
在这里插入图片描述

接下来我们对硬盘容量进行刷新,以ext4系统为例,输入命令“resize2fs -f /dev/md5”:
可以看到执行成功

[root@MiWiFi-RD03-srv ~]# resize2fs -f /dev/md5
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/md5 is mounted on /test; on-line resizing required
old_desc_blocks =1, new_desc_blocks =2
The filesystem on /dev/md5 is now 3141888 blocks long.

然后就成功扩容
在这里插入图片描述

如果是xfs系统就执行硬盘刷新命令:

xfs_growfs /dev/md5

RAID10搭建

mdadm-C /dev/md10 -ayes-l10-n4 /dev/sdb /dev/sdc /dev/sdd /dev/sde

格式化

mkfs-t ext4 /dev/md10

别忘了更新 mdadm 配置文件:

# 指定 RAID 设备echo"DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde">> /etc/mdadm.conf
# 将 RAID10 的 UUID 追加到该目录mdadm-Ds /dev/md10 >> /etc/mdadm.conf

查看状态,还在构建中,进度到57%,等待到100%

[root@MiWiFi-RD03-srv /]# mdadm -D /dev/md10
/dev/md10:
           Version :1.2
     Creation Time : Fri Oct 1321:17:29 2023
        Raid Level : raid10
        Array Size :41908224(39.97 GiB 42.91 GB)
     Used Dev Size :20954112(19.98 GiB 21.46 GB)
      Raid Devices :4
     Total Devices :4
       Persistence : Superblock is persistent

       Update Time : Fri Oct 1321:19:31 2023
             State : clean, resyncing 
    Active Devices :4
   Working Devices :4
    Failed Devices :0
     Spare Devices :0

            Layout :near=2
        Chunk Size : 512K

Consistency Policy : resync

     Resync Status :57% complete

              Name : MiWiFi-RD03-srv:10  (local to host MiWiFi-RD03-srv)
              UUID : 6eb0b741:c439ba13:f3cef0f0:71c1b4cb
            Events :11

    Number   Major   Minor   RaidDevice State
       08160      active sync set-A   /dev/sdb
       18321      active sync set-B   /dev/sdc
       28482      active sync set-A   /dev/sdd
       38643      active sync set-B   /dev/sde

挂载使用

mount /dev/md10 /test

测试方式还是和前面相同,参考前面

软件raid搭建的顾虑

在搭建软件raid之前我一直担心一个问题,例如当我在服务器1(centos7.9) 上用2块硬盘搭建了 raid1,那这个 raid1 是仅限于 服务器1 上使用吗?网上找不到确切的答案,有的说可以,有的说不行,但实践是检验真理的唯一标准,我将组建 raid0 或 raid1 的两个设备转移到了 服务器2(centos7.6) 上,也安装过同版本的mdadm,同样使用命令:

fdisk-l

发现raid设备也显示了出来,只是名称不一样,在服务器1上 raid 设备名称设定为 /dev/md0,
在这里插入图片描述
虽然在服务器2上显示的是 /dev/md127,
在这里插入图片描述
但我也是成功挂载上去了,并且里面的数据也是可以顺利的读取,
在这里插入图片描述
那就没问题了。所以这就证明了软件 raid 并不是
与系统一起绑定无法拆分,而是根据软件绑定的;同理硬件raid是与阵列卡绑定的。

友情链接:
Centos 7 磁盘阵列配置介绍(RAID)
Centos 7 磁盘阵列配置介绍(RAID)
CentOS7 部署 RAID 磁盘阵列
RAID5的配置流程及模拟硬盘损坏
RAID实现命令整理
lvm逻辑卷管理 创建 |ext4 xfs扩容
parted命令详解
Centos7 Rsync怎么实现热备份笔记

标签: linux centos 运维

本文转载自: https://blog.csdn.net/GOODter/article/details/133794748
版权归原作者 优秀的老黄 所有, 如有侵权,请联系我们删除。

“Linux Centos 使用软件 RAID 磁盘阵列方法”的评论:

还没有评论