Centos7.9 创建Raid5

  • raid5 可以理解为raid0和raid1的折中方案
  • 它可以为系统提供数据安全保障,
  • 它有着和raid0相似的数据读取速度,但磁盘利用率比raid1要高,只是多了一个奇偶严重(raid4,奇数验证,raid5偶数验证)

Raid5 的创建至少需要3块硬盘盘

硬盘

分区

分区格式

分区大小

sdb

sdb1

fd

20G

sdc

sdc1

fd

20G

sdd

sdd1

fd

20G

sde

sde1

fd

20G

sdf

sdf1

fd

20G

一、安装mdadm和检查硬盘

1、安装mdadm
yum -y install mdadm
2、fdisk -l 查看新盘
$ lsblk            
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdf               8:80   0   20G  0 disk 
sdd               8:48   0   20G  0 disk 
sdb               8:16   0   20G  0 disk 
sde               8:64   0   20G  0 disk 
sdc               8:32   0   20G  0 disk 
sda               8:0    0  100G  0 disk 
├─sda2            8:2    0 99.5G  0 part 
│ ├─centos-swap 253:1    0  100M  0 lvm  [SWAP]
│ └─centos-root 253:0    0 99.4G  0 lvm  /
└─sda1            8:1    0  500M  0 part /boot

二、mdadm命令详解

  • 常用参数

选项

全称

功能

-a

--auto

向RAID中添加新设备

-B


不把RAID信息写入每个成员超级块中

-s

--scan

扫描配置文件/proc/mdstat搜寻丢失的信息

-c

--config=

指定raid的配置文件目录,默认存在/etc/mdadm.conf

-C

--create

创建阵列

-D

--detail

显示RAID设备的详细信息

-S

--stop

停止使用RAID设备,并释放所有资源

-l

--level

阵列模式(0/1/4/5/10、需要创建的阵列)

-f

--fail

将指定RAID设备设置为故障模式

-n

--raid-devices=N

阵列中活动磁盘数目

-a

--auto{=yes,md,mdp,part,p}{NN}

自动创建起设备文件

-x

--spare-devices=N

表示当前阵列中预热盘有N块

即三块盘做raid1,其中地三块盘做在其中一块盘坏掉的时候自动补上


--zero-superblock

使用领覆盖RAID设备中的超块快

三、创建RAID0

1、创建raid0
(base) root@python3[10:00:32]:~
$ mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sd{b,c}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
2、查看raid0
$ mdadm -D /dev/md0                               
/dev/md0:
           Version : 1.2
     Creation Time : Fri Mar  8 11:28:58 2024
        Raid Level : raid0
        Array Size : 41908224 (39.97 GiB 42.91 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Fri Mar  8 11:28:58 2024
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : python3:0  (local to host python3)
              UUID : 14637605:804c951c:37cee3f7:509d15a9
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
3、格式化
mkfs.ext4 /dev/md0
  • 注意:在格式化时,可以指定-E选项下的stride参数指定条带是块大小的多少倍,有在一定程度上提高软RAID性能,如块默认大小为4k,而条带大小默认为64k,则stride为16,这样就避免了RAID每次存取数据时都去计算条带大小,如:
mkfs.ext4  -E stride=16 -b 4096 /dev/md0
  • 其中stride=chunk/block,为2的n次方
4、生成配置文件
mdadm -D -s /dev/md0 > /etc/md0.conf

$ cat /etc/md0.conf 
ARRAY /dev/md0 metadata=1.2 name=python3:0 UUID=b7f672e0:a4ff565b:85490849:95d00e0c
5、获取raid的UUID
$ blkid /dev/md0
/dev/md0: UUID="255b76ad-cfa7-44ae-be98-956988ccb8b1" TYPE="ext4"
6、将RAID挂载

创建挂在目录mkdir /raid0

  1. 临时挂载
mount /dev/md0 /raid0/
  1. 永久挂载

编辑/etc/fstab文件,在其中加入

UUID="255b76ad-cfa7-44ae-be98-956988ccb8b1" /raid0 ext4 defaults 0 0
  1. 查看挂载
$ df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 2.0G     0  2.0G   0% /dev
tmpfs                    2.0G     0  2.0G   0% /dev/shm
tmpfs                    2.0G  9.1M  2.0G   1% /run
tmpfs                    2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mapper/centos-root  100G  6.2G   94G   7% /
/dev/sda1                497M  179M  319M  36% /boot
tmpfs                    393M     0  393M   0% /run/user/0
/dev/md0                  40G   49M   38G   1% /raid0
7、删除raid
  1. 如果挂载了需要先卸载umount /dev/md0
  2. 停止raid设备,mdadm -S /dev/md0
  3. 如果忘记了raid中的硬盘名称,
  1. 要么重启系统,
  2. 要么运行:
  1. mdadm -A -s /dev/md0
  2. 然后使用mdadm -D /dev/md0查看具体的有那几块盘,然后再去停止raid设备mdadm -S /dev/md0
  1. 删除raid里面的所有硬盘:mdadm --misc --zero-superblock /dev/sdb
mdadm --misc --zero-superblock /dev/sdb
mdadm --misc --zero-superblock /dev/sdc

or
mdadm --misc --zero-superblock /dev/sd{b,c}
  • 这里有几块盘就按格式删除几次,注意后面硬盘名字的变化
  1. 删除配置文件:rm -f /etc/mdadm.conf
  2. 如果之前将raid相关信息写入了/etc/fstab配置文件中,还需要从中删除相关信息

四、创建RAID1

1、创建raid1
  • 创建一个三块盘的raid1,其中一块盘备用
  • 以防在其中一块盘出现问题的时候无法替换
$ mdadm -C /dev/md1 -a yes -l1 -n2 -x1 /dev/sd{b,c,d}  
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? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
  • 这里提示的是raid1不能作为boot启动分区使用
2、查看raid1
$ mdadm -D /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Fri Mar  8 15:24:40 2024
        Raid Level : raid1
        Array Size : 20954112 (19.98 GiB 21.46 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 2
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Fri Mar  8 15:25:59 2024
             State : clean, resyncing 
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

Consistency Policy : resync

     Resync Status : 75% complete

              Name : python3:1  (local to host python3)
              UUID : e8da6ffb:aa0ddeee:d3c34e82:12b7543d
            Events : 12

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

       2       8       48        -      spare   /dev/sdd
3、格式化
mkfs.ext4 /dev/md1
  • 注意:在格式化时,可以指定-E选项下的stride参数指定条带是块大小的多少倍,有在一定程度上提高软RAID性能,如块默认大小为4k,而条带大小默认为64k,则stride为16,这样就避免了RAID每次存取数据时都去计算条带大小,如:
mkfs.ext4  -E stride=16 -b 4096 /dev/md0
  • 其中stride=chunk/block,为2的n次方
4、生成配置文件
mdadm -D -s /dev/md1 > /etc/md1.conf 

$ cat /etc/md1.conf 
ARRAY /dev/md1 metadata=1.2 spares=1 name=python3:1 UUID=e8da6ffb:aa0ddeee:d3c34e82:12b7543d
5、获取raid的UUID
$ blkid /dev/md0
/dev/md1: UUID="255b76ad-cfa7-44ae-be98-956988ccb8b1" TYPE="ext4"
6、将RAID挂载

创建挂在目录mkdir /raid1

  1. 临时挂载
mount /dev/md1 /raid1/
  1. 永久挂载

编辑/etc/fstab文件,在其中加入

UUID="255b76ad-cfa7-44ae-be98-956988ccb8b1" /raid1 ext4 defaults 0 0
  1. 查看挂载
$ df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 2.0G     0  2.0G   0% /dev
tmpfs                    2.0G     0  2.0G   0% /dev/shm
tmpfs                    2.0G  9.1M  2.0G   1% /run
tmpfs                    2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mapper/centos-root  100G  6.2G   94G   7% /
/dev/sda1                497M  179M  319M  36% /boot
tmpfs                    393M     0  393M   0% /run/user/0
/dev/md1                  20G   45M   19G   1% /raid1
  • 从这里可以看出,三个20G的硬盘做了raid1,实际可用大小只是一个20G
7、删除raid
  1. 如果挂载了需要先卸载umount /dev/md1
  2. 停止raid设备,mdadm -S /dev/md1
  3. 如果忘记了raid中的硬盘名称,
  1. 要么重启系统,
  2. 要么运行:
  1. mdadm -A -s /dev/md1
  2. 然后使用mdadm -D /dev/md1查看具体的有那几块盘,然后再去停止raid设备mdadm -S /dev/md1
  1. 删除raid里面的所有硬盘:mdadm --misc --zero-superblock /dev/sdb
mdadm --misc --zero-superblock /dev/sdb
mdadm --misc --zero-superblock /dev/sdc
mdadm --misc --zero-superblock /dev/sdd

or
mdadm --misc --zero-superblock /dev/sd{b,c,d}
  • 这里有几块盘就按格式删除几次,注意后面硬盘名字的变化
  1. 删除配置文件:rm -f /etc/md1.conf
  2. 如果之前将raid相关信息写入了/etc/fstab配置文件中,还需要从中删除相关信息

五、创建RAID5

  • 用5块盘建一个raid5,其中一块盘作为热备份盘
  • 以防在其中一块盘出现问题的时候无法替换
  • 做raid5,最少使用三块盘即可
  • raid5的实际硬盘使用率为:硬盘数N-1,
1、创建raid5
$ mdadm -C /dev/md5 -a yes -l5 -n4 -x1 /dev/sd{b,c,d,e,f}   
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
2、查看raid5
$ mdadm -D /dev/md5 
/dev/md5:
           Version : 1.2
     Creation Time : Fri Mar  8 15:37:25 2024
        Raid Level : raid5
        Array Size : 62862336 (59.95 GiB 64.37 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 4
     Total Devices : 5
       Persistence : Superblock is persistent

       Update Time : Fri Mar  8 15:37:33 2024
             State : clean, degraded, recovering 
    Active Devices : 3
   Working Devices : 5
    Failed Devices : 0
     Spare Devices : 2

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 11% complete

              Name : python3:5  (local to host python3)
              UUID : 9a7a955f:5bd34657:043737e9:b05e7cd2
            Events : 2

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       2       8       48        2      active sync   /dev/sdd
       5       8       64        3      spare rebuilding   /dev/sde

       4       8       80        -      spare   /dev/sdf
3、格式化
mkfs.ext4 /dev/md5
  • 注意:在格式化时,可以指定-E选项下的stride参数指定条带是块大小的多少倍,有在一定程度上提高软RAID性能,如块默认大小为4k,而条带大小默认为64k,则stride为16,这样就避免了RAID每次存取数据时都去计算条带大小,如:
mkfs.ext4  -E stride=16 -b 4096 /dev/md0
  • 其中stride=chunk/block,为2的n次方
4、生成配置文件
$ mdadm -D -s /dev/md5 > /etc/md5.conf 

$ cat /etc/md5.conf 
ARRAY /dev/md5 metadata=1.2 spares=2 name=python3:5 UUID=e6827c05:17eec3e1:51a5dded:8ef08bea
5、获取raid的UUID
$ blkid /dev/md5
/dev/md5: UUID="192e2d39-1858-4e79-8d10-8a5531285896" TYPE="ext4"
6、将RAID5挂载

创建挂在目录mkdir /raid5

  1. 临时挂载
mount /dev/md5 /raid5/
  1. 永久挂载

编辑/etc/fstab文件,在其中加入

UUID="74d656a2-d9b1-4b92-838d-4858c75e2bc5" /raid5 ext4 defaults 0 0
  1. 查看挂载
$ df -h 
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 2.0G     0  2.0G   0% /dev
tmpfs                    2.0G     0  2.0G   0% /dev/shm
tmpfs                    2.0G  9.1M  2.0G   1% /run
tmpfs                    2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mapper/centos-root  100G  6.2G   94G   7% /
/dev/sda1                497M  179M  319M  36% /boot
tmpfs                    393M     0  393M   0% /run/user/0
/dev/md5                  59G   53M   56G   1% /raid5
7、删除raid
  1. 如果挂载了需要先卸载umount /dev/md5
  2. 停止raid设备,mdadm -S /dev/md5
  3. 如果忘记了raid中的硬盘名称,
  1. 要么重启系统,
  2. 要么运行:
  1. mdadm -A -s /dev/md5
  2. 然后使用mdadm -D /dev/md5查看具体的有那几块盘,然后再去停止raid设备mdadm -S /dev/md5
  1. 删除raid里面的所有硬盘:mdadm --misc --zero-superblock /dev/sdb
mdadm --misc --zero-superblock /dev/sdb
mdadm --misc --zero-superblock /dev/sdc
mdadm --misc --zero-superblock /dev/sdd
mdadm --misc --zero-superblock /dev/sde
mdadm --misc --zero-superblock /dev/sdf

or
mdadm --misc --zero-superblock /dev/sd{b,c,d,e,f}
  • 这里有几块盘就按格式删除几次,注意后面硬盘名字的变化
  1. 删除配置文件:rm -f /etc/mdadm.conf
  2. 如果之前将raid相关信息写入了/etc/fstab配置文件中,还需要从中删除相关信息

六、raid5的故障测试

1、指定adc盘坏掉

指定sdc这个盘坏掉

$ mdadm /dev/md5 -f  /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md5

查看raid5的状态,可以看到备份盘sdf已经顶替了sdc这个盘,成了行的raid5

$ mdadm -D /dev/md5 
/dev/md5:
.
..
...
    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       4       8       80        1      spare rebuilding   /dev/sdf
       2       8       48        2      active sync   /dev/sdd
       5       8       64        3      active sync   /dev/sde

       1       8       32        -      faulty   /dev/sdc
2、恢复sdc盘
  • 由下面可以看出,sdc盘已经由faulty变成了spare,故障变成了备用了
$ mdadm -a /dev/md5 /dev/sdc
mdadm: added /dev/sdc
(base) root@python3[15:59:03]:~
$ mdadm -D /dev/md5 
/dev/md5:
           Version : 1.2
     Creation Time : Fri Mar  8 15:47:44 2024
        Raid Level : raid5
        Array Size : 62862336 (59.95 GiB 64.37 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 4
     Total Devices : 5
       Persistence : Superblock is persistent

       Update Time : Fri Mar  8 15:59:03 2024
             State : clean 
    Active Devices : 4
   Working Devices : 5
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : python3:5  (local to host python3)
              UUID : e6827c05:17eec3e1:51a5dded:8ef08bea
            Events : 304

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       4       8       80        1      active sync   /dev/sdf
       2       8       48        2      active sync   /dev/sdd
       5       8       64        3      active sync   /dev/sde

       6       8       32        -      spare   /dev/sdc
3、坏掉sdd盘
$ mdadm -f /dev/md5 /dev/sdd
mdadm: set /dev/sdd faulty in /dev/md5

查看结果

  • sdd的状态已经变为了faulty故障了,sdc自动替换了上去
$ mdadm -D /dev/md5         
/dev/md5:
           Version : 1.2
     Creation Time : Fri Mar  8 15:47:44 2024
        Raid Level : raid5
        Array Size : 62862336 (59.95 GiB 64.37 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 4
     Total Devices : 5
       Persistence : Superblock is persistent

       Update Time : Fri Mar  8 15:59:33 2024
             State : clean, degraded, recovering 
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 1
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 1% complete

              Name : python3:5  (local to host python3)
              UUID : e6827c05:17eec3e1:51a5dded:8ef08bea
            Events : 306

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       4       8       80        1      active sync   /dev/sdf
       6       8       32        2      spare rebuilding   /dev/sdc
       5       8       64        3      active sync   /dev/sde

       2       8       48        -      faulty   /dev/sdd