RAID磁盘阵列技术

RAID磁盘阵列技术

1、RAID概述

RAID(Redundant Array of Independent Disk),从字面意思讲的是基于独立磁盘的具有冗余的磁盘阵列,其核心思想是将多块独立磁盘按不同方式组成一个逻辑磁盘,以此来提高其存储容量、提高性能或者提供数据备份的功能。按其组合的方式不同而分成不同级别的RAID。

RAID分为软件RAID和硬件RAID两类,在比较流行的操作系统中已经集成了软RAID功能,如常用的Windows、Linux系统都有软件RAID功能,在功能上,软件RAID与硬件RAID一样,但是由于软件RAID没有独立的硬件控制设备,所以其性能不如硬件RAID,但是其实现比硬件RAID简单,不需要额外的硬件支持。硬件RAID通常需要有RAID卡,而RAID卡自带有独立的控制部件和内存,所以不会占用系统资源。目前大部分主板都已经集成了RAID卡。

2、什么是RAID?

  • RAID(Redundatnt Array of lndependent Disks),全称为:独立磁盘冗余阵列

RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘 更高的存储性能 和提供 数据备份技术

  • 常见的RAID级别别有以下几种:

    RAID 0 、 RAID 1、 RAID 5、RAID 10

RAID 0、1、5、10方案技术对比

RAID级别 硬盘数量 硬盘利用率 是否有校验 保护能力 写性能
RAID0 N N 单个硬盘的N倍
RAID1 N(偶数) N/2 允许一个设备故障 需写两对存储设备,互为主备
RAID5 N≥3 (N-1)N 允许一个设备故障 需写计算校验
RAID10 N≥4(偶数) N/2 允许两个基组各坏一个 N/2块盘同时写入

注意:其中N代表硬盘总数

3、RAID级别详解

3.1 RAID 0(不含校验与冗余的条带存储)

RAID 0技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入各个物理硬盘中。这样一来,在最理想的状态下,硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障,将导致整个系统的数据都受到破坏。通俗来说,RAID 0技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力

3.2 RAID 1(不含检验的镜像存储)

RAID 1技术 是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。但在读取数据的时候,操作系统可以分别从两块硬盘中读取信息,因此理论读取速度的峰值可以是硬盘数量的倍数。另外,平时只要保证有一块硬盘稳定运行,数据就不会出现损坏的情况,可靠性较高。

3.3 RAID 5(数据块级别的分布式检验条带存储)

RAID 5 最少需要3块磁盘组成,使用的是硬盘切割(Disk Striping)技术。两块磁盘为数据的存储,一块磁盘为校验数据,数据存储的盘的数据读写和RAID 1(分布式存储)是一样的,但是有校验机制,所以写的速度相对RAID 0较差一点,读取的速度很高。任何一个磁盘数据丢失或损坏,都不会导致整个数据丢失,因为有校验机制的盘会通过其它没有损坏的盘计算出损坏的盘内容数据。

3.4 RAID 10(镜像与条带存储)

RAID 10技术是RAID 1+RAID 0技术的一个“组合体”,RAID 10需要至少4块硬盘来组建,其中先分别两两制作成RAID 1磁盘阵列,以保证数据的安全性;然后再对两个RAID 1磁盘阵列实施RAID 0技术,进一步提高硬盘设备的读写速度。RAID 10技术继承了RAID 0的高读写速度和RAID 1的数据安全性。

4、RAID实战

准备

安装CentOS 8操作系统主机,并添加4块20 GB硬盘。

命令

mdadm命令用于创建、调整、监控和管理RAID设备,语法格式为“mdadm 参数 硬盘名称”。

mdadm命令的常用参数和作用

-D 显示RAID设备的详细信息
-A 加入一个以前定义的RAID
-B 创建一个没有超级块的RAID设备
-F 选项监控模式
-G 更改RAID设备的大小或形态
-I 添加设备到RAID中,或从RAID中删除设备
-z 组建RAID1、RAID4、RAID5、RAID6后从每个RAID成员获取的空间容量
-s 扫描配置文件或/proc/mdstat以搜寻丢失的信息
-C 把RAID信息写入每个成员超级块中
-v 显示RAID创建过程中的详细信息
-B 不把RAID信息写入每个成员的超级块中
-l 指定RAID的级别
-n 指定RAID中活动设备的数目
-f 把RAID成员列为有问题,以便移除该成员
-r 把RAID成员移出RAID设备
-a 向RAID设备中添加一个成员
--re-add 把最近移除的RAID成员重新添加到RAID设备中
-E 查看RAID成员详细信息
-c 创建一个RAID设备时默认为512kb
-R 开始部分组装RAID
-S 停用RAID设备,释放所有资源
-x 指定初始RAID设备的备用成员的数量
--zero-superblock 如果RAID设备包含一个有效的超级块,该块使用零覆盖

4.1 RAID 0部署

实验环境

RAID级别 磁盘 热备盘
raid0 sdb,sdc
# 安装mdadm
[root@localhost ~]# yum -y install mdadm

# 创建raid0
[root@localhost ~]# mdadm -C -v /dev/md0 -l 0 -n 2 /dev/sd[b,c]
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

# 查看阵列信息
[root@localhost ~]# mdadm -Ds
ARRAY /dev/md0 metadata=1.2 name=localhost.localdomain:0 UUID=85c13218:1975466f:a1d59df8:b4833594
[root@localhost ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Tue Aug 16 11:21:04 2022
        Raid Level : raid0
        Array Size : 41908224 (39.97 GiB 42.91 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Tue Aug 16 11:21:04 2022
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

            Layout : -unknown-
        Chunk Size : 512K

Consistency Policy : none

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 85c13218:1975466f:a1d59df8:b4833594
            Events : 0

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

# 将RAID信息保存到配置文件
[root@localhost ~]# mdadm -Dsv > /etc/mdadm.conf

# 格式化
[root@localhost ~]# mkfs.xfs /dev/md0 
log stripe unit (524288 bytes) is too large (maximum is 256KiB)
log stripe unit adjusted to 32KiB
meta-data=/dev/md0               isize=512    agcount=16, agsize=654720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=10475520, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=5120, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

# 创建挂载点
[root@localhost ~]# mkdir /raid0
[root@localhost ~]# ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  raid0  root  run  sbin  srv  sys  tmp  usr  var

# 进行挂载
[root@localhost ~]# mount /dev/md0 /raid0/
[root@localhost ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             876M     0  876M   0% /dev
tmpfs                895M     0  895M   0% /dev/shm
tmpfs                895M  8.7M  887M   1% /run
tmpfs                895M     0  895M   0% /sys/fs/cgroup
/dev/mapper/cs-root   17G  1.9G   16G  11% /
/dev/sda1           1014M  195M  820M  20% /boot
tmpfs                179M     0  179M   0% /run/user/0
/dev/md0              40G  319M   40G   1% /raid0

# 查找md0UUID
[root@localhost ~]# blkid /dev/md0 
/dev/md0: UUID="52e21055-43a3-442e-b649-110de8d92071" BLOCK_SIZE="512" TYPE="xfs"

# 将挂载写入到/etc/fstab中,实现永久挂载, 开机自动挂载
[root@localhost ~]# vim /etc/fstab
......
UUID="52e21055-43a3-442e-b649-110de8d92071" /raid0 xfs defaults 0 0
......

# 解除挂载
[root@localhost ~]# umount /raid0/
[root@localhost ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             876M     0  876M   0% /dev
tmpfs                895M     0  895M   0% /dev/shm
tmpfs                895M  8.7M  887M   1% /run
tmpfs                895M     0  895M   0% /sys/fs/cgroup
/dev/mapper/cs-root   17G  1.9G   16G  11% /
/dev/sda1           1014M  195M  820M  20% /boot
tmpfs                179M     0  179M   0% /run/user/0

# 加载fstab配置文件, 同时检测语法是否有错误
[root@localhost ~]# mount -a
[root@localhost ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             876M     0  876M   0% /dev
tmpfs                895M     0  895M   0% /dev/shm
tmpfs                895M  8.7M  887M   1% /run
tmpfs                895M     0  895M   0% /sys/fs/cgroup
/dev/mapper/cs-root   17G  1.9G   16G  11% /
/dev/sda1           1014M  195M  820M  20% /boot
tmpfs                179M     0  179M   0% /run/user/0
/dev/md0              40G  319M   40G   1% /raid0

4.2 RAID1 部署

实验环境

RAID级别 磁盘 热备盘
raid1 sdb,sdc sdd

1)创建RAID1

2)添加1个热备盘

3)模拟磁盘故障,自动顶替故障盘

4)从raid1中移除故障盘

# 创建raid1
[root@localhost ~]# mdadm -C -v /dev/md1 -l 1 -n 2 -x 1 /dev/sd[b,c,d]
// -C 创建 -v 详细信息 -l阵列级别 -n 阵列成员数量 -x阵列备用盘数量
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
mdadm: size set to 20954112K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

# 将RAID信息保存到配置文件
[root@localhost ~]# mdadm -Dsv > /etc/mdadm.conf

# 查看RAID阵列信息
[root@localhost ~]# mdadm -D /dev/md1 
/dev/md1:
           Version : 1.2
     Creation Time : Tue Aug 16 10:41:44 2022
        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 : Tue Aug 16 10:43:29 2022
             State : clean 
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

Consistency Policy : resync

              Name : localhost.localdomain:1  (local to host localhost.localdomain)
              UUID : c371a1b7:49be4a4f:9d0c47c1:ca740e5d
            Events : 17

    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

# 格式化
[root@localhost ~]# mkfs.xfs /dev/md1 
meta-data=/dev/md1               isize=512    agcount=4, agsize=1309632 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=5238528, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

# 创建挂载点
[root@localhost ~]# mkdir /raid1

# 进行挂载
[root@localhost ~]# mount /dev/md1 /raid1/

# 准备测试文件
[root@localhost ~]# cp /etc/passwd /raid1/

# 模拟损坏
[root@localhost ~]# mdadm /dev/md1 -f /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md1
# 查看阵列状态信息
[root@localhost ~]# mdadm -D /dev/md1 
/dev/md1:
           Version : 1.2
     Creation Time : Tue Aug 16 10:41:44 2022
        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 : Tue Aug 16 10:51:21 2022
             State : clean, degraded, recovering 
    Active Devices : 1
   Working Devices : 2
    Failed Devices : 1
     Spare Devices : 1

Consistency Policy : resync

    Rebuild Status : 11% complete

              Name : localhost.localdomain:1  (local to host localhost.localdomain)
              UUID : c371a1b7:49be4a4f:9d0c47c1:ca740e5d
            Events : 20

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       2       8       48        1      spare rebuilding   /dev/sdd

       1       8       32        -      faulty   /dev/sdc

# 更新配置文件
[root@localhost ~]# mdadm -Dsv > /etc/mdadm.conf 

# 查看数据是否丢失
[root@localhost ~]# ls /raid1/
passwd
[root@localhost ~]# cat -n /raid1/passwd 
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
......

# 移除损坏设备
[root@localhost ~]# mdadm -r /dev/md1 /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md1

# 添加一块新热备盘
[root@localhost ~]# mdadm -a /dev/md1 /dev/sde
mdadm: added /dev/sde

# 查看阵列状态信息
[root@localhost ~]# mdadm -D /dev/md1 
/dev/md1:
           Version : 1.2
     Creation Time : Tue Aug 16 11:03:51 2022
        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 : Tue Aug 16 11:07:31 2022
             State : clean 
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

Consistency Policy : resync

              Name : localhost.localdomain:1  (local to host localhost.localdomain)
              UUID : fccb9296:7e443ff9:0b0b3537:d7b43b6e
            Events : 54

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

       3       8       64        -      spare   /dev/sde

4.3 RAID 5部署

实验环境

RAID级别 磁盘 热备盘
raid5 sdb,sdc,sdd sde

1)创建RAID5,添加1个热备盘,指定chunk大小为32K
-X或--spare- devicds= 指定阵列中备用盘的数量
-C或--chunk=设定阵列的块chunk块大小,单位为KB
2)停止阵列,重新激活阵列
3)使用热备盘,扩展阵列容量,从3个磁盘扩展到4个

# 创建raid5
[root@localhost ~]# mdadm -C -v /dev/md5 -l 5 -n 3 -x 1 -c 32 /dev/sd[b,c,d,e]
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.

# 查看阵列状态信息
[root@localhost ~]# mdadm -D /dev/md5 
/dev/md5:
           Version : 1.2
     Creation Time : Tue Aug 16 14:06:04 2022
        Raid Level : raid5
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Tue Aug 16 14:06:10 2022
             State : clean, degraded, recovering 
    Active Devices : 2
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 2

            Layout : left-symmetric
        Chunk Size : 32K

Consistency Policy : resync

    Rebuild Status : 9% complete		#同步状态,同步完,此行消失。

              Name : localhost.localdomain:5  (local to host localhost.localdomain)
              UUID : 6b7d5927:032f6b93:7e0638b1:5e9dec9f
            Events : 2

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

       3       8       64        -      spare   /dev/sde

# 将RAID信息保存到配置文件
[root@localhost ~]# mdadm -Dsv > /etc/mdadm.conf

# 确认数据同步
[root@localhost ~]# mdadm -D /dev/md5 
/dev/md5:
           Version : 1.2
     Creation Time : Tue Aug 16 14:06:04 2022
        Raid Level : raid5
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Tue Aug 16 14:07:49 2022
             State : clean 
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 32K

Consistency Policy : resync

              Name : localhost.localdomain:5  (local to host localhost.localdomain)
              UUID : 6b7d5927:032f6b93:7e0638b1:5e9dec9f
            Events : 18

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

       3       8       64        -      spare   /dev/sde

# 扩展RAID5磁盘阵列
[root@localhost ~]# mdadm -G /dev/md5 -n 4 -c 32

# 确认数据同步
[root@localhost ~]# mdadm -D /dev/md5 
/dev/md5:
           Version : 1.2
     Creation Time : Tue Aug 16 14:06:04 2022
        Raid Level : raid5
        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 : Tue Aug 16 14:10:20 2022
             State : clean, reshaping 
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 32K

Consistency Policy : resync

    Reshape Status : 26% complete
     Delta Devices : 1, (3->4)

              Name : localhost.localdomain:5  (local to host localhost.localdomain)
              UUID : 6b7d5927:032f6b93:7e0638b1:5e9dec9f
            Events : 50

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

# 停止MD5阵列
[root@localhost ~]# mdadm -Dsv > /etc/mdadm.conf		#停止前,一定要先保存配置文件
[root@localhost ~]# mdadm -D /dev/md5 	#停止前,请确认数据已经同步完(同步不完成,有时会无法激活)
......
Consistency Policy : resync		#数据已经同步完
......
[root@localhost ~]# mdadm -S /dev/md5 	#-S 停止阵列
mdadm: stopped /dev/md5

# 激活MD5阵列
[root@localhost ~]# mdadm -As 	#-A 激活磁盘阵列 s扫描配置文件得到阵列信息
mdadm: /dev/md5 has been started with 4 drives.

备注

1)停止前,一定要先保存配置文件
2)阵列只有在正常状态下才能扩容,降级及重构时不允许扩容。对于raid5来说,只能增加成员盘,不能减少;而对于raid1来说,可以增加成员盘,也可以减少。
3)要等所有数据同步后,新增加的磁盘空间才会在md5空间中有数据变化

4.4 RAID 10 部署

实验环境

RAID级别 磁盘 热备盘
raid10 分区:sdb1,sdb2,sdb3,sdb4

备注:

1)--zero-superblock:清除设备上的MD超级块

2)如更换的RAID卡与原卡规格型号相同,则不会有什么问题;若两卡规格型号不同,需重新安装新卡驱动程序。若驱动程序差别不大,RAID盘组合顺序正常,硬盘原数据可正确读写;若驱动程序结构差别大,则可能发生读写错误。

# 创建raid10
[root@localhost ~]# mdadm -C -v /dev/md10 -l 10 -n 4 /dev/sd[b,c,d,e]
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: partition table exists on /dev/sdb
mdadm: partition table exists on /dev/sdb but will be lost or
       meaningless after creating array
mdadm: size set to 20954112K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.

# 查看阵列状态信息
[root@localhost ~]# mdadm -D /dev/md10 
/dev/md10:
           Version : 1.2
     Creation Time : Tue Aug 16 14:57:53 2022
        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 : Tue Aug 16 14:57:53 2022
             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 : 4% complete	#同步状态,同步完,此行消失。

              Name : localhost.localdomain:10  (local to host localhost.localdomain)
              UUID : 6c6b4207:a0b0cc25:6df948a3:4997c88c
            Events : 0

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

# 将RAID信息保存到配置文件
[root@localhost ~]# mdadm -Dsv > /etc/mdadm.conf

# 确认数据同步
[root@localhost ~]# mdadm -D /dev/md10 
/dev/md10:
           Version : 1.2
     Creation Time : Tue Aug 16 14:57:53 2022
        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 : Tue Aug 16 15:01:21 2022
             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:10  (local to host localhost.localdomain)
              UUID : 6c6b4207:a0b0cc25:6df948a3:4997c88c
            Events : 17

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

# 查看阵列信息
[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid10] 
md10 : active raid10 sde[3] sdd[2] sdc[1] sdb[0]
      41908224 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      
unused devices: <none>

# 格式化阵列
[root@localhost ~]# mkfs.ext4 /dev/md10 
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 10477056 4k blocks and 2621440 inodes
Filesystem UUID: 16833119-5f99-4104-a324-1c4fd0aeaf6b
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done   


# 挂载阵列
[root@localhost ~]# mkdir /raid10		#创建挂载点
[root@localhost ~]# mount /dev/md10 /raid10/
[root@localhost ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             876M     0  876M   0% /dev
tmpfs                895M     0  895M   0% /dev/shm
tmpfs                895M  8.7M  887M   1% /run
tmpfs                895M     0  895M   0% /sys/fs/cgroup
/dev/mapper/cs-root   17G  1.9G   16G  11% /
/dev/sda1           1014M  195M  820M  20% /boot
tmpfs                179M     0  179M   0% /run/user/0
/dev/md10             40G   49M   38G   1% /raid10

# 编辑/etc/fstab永久挂载阵列
[root@localhost ~]# vim /etc/fstab
....
UUID="16833119-5f99-4104-a324-1c4fd0aeaf6b" /raid10 ext4 defaults 0 0
.....
[root@localhost ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             876M     0  876M   0% /dev
tmpfs                895M     0  895M   0% /dev/shm
tmpfs                895M  8.7M  887M   1% /run
tmpfs                895M     0  895M   0% /sys/fs/cgroup
/dev/mapper/cs-root   17G  1.9G   16G  11% /
/dev/sda1           1014M  195M  820M  20% /boot
tmpfs                179M     0  179M   0% /run/user/0
/dev/md10             40G   49M   38G   1% /raid10

# 模拟磁盘损坏及修复
//模拟/dev/sdc损坏
[root@localhost ~]# mdadm /dev/md10 -f /dev/sdc 
mdadm: set /dev/sdc faulty in /dev/md10

[root@localhost ~]# mdadm -D /dev/md10 
/dev/md10:
           Version : 1.2
     Creation Time : Tue Aug 16 14:57:53 2022
        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 : Tue Aug 16 15:14:52 2022
             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:10  (local to host localhost.localdomain)
              UUID : 6c6b4207:a0b0cc25:6df948a3:4997c88c
            Events : 19

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

       1       8       32        -      faulty   /dev/sdc

#查看raid状态,缺了一个U,说明4个盘有一个down了
[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid10] 
md10 : active raid10 sde[3] sdd[2] sdc[1](F) sdb[0]
      41908224 blocks super 1.2 512K chunks 2 near-copies [4/3] [U_UU]
      
unused devices: <none>

#移除/dev/sdc
[root@localhost ~]# mdadm /dev/md10  -r /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md10

#通过lsblk以及mdadm -D /dev/md0命令可以查看一下情况
[root@localhost ~]# mdadm /dev/md10  -r /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md10
[root@localhost ~]# lsblk 
NAME        MAJ:MIN RM SIZE RO TYPE   MOUNTPOINT
sda           8:0    0  20G  0 disk   
├─sda1        8:1    0   1G  0 part   /boot
└─sda2        8:2    0  19G  0 part   
  ├─cs-root 253:0    0  17G  0 lvm    /
  └─cs-swap 253:1    0   2G  0 lvm    [SWAP]
sdb           8:16   0  20G  0 disk   
└─md10        9:10   0  40G  0 raid10 /raid10
sdc           8:32   0  20G  0 disk   #已经离开阵列
sdd           8:48   0  20G  0 disk   
└─md10        9:10   0  40G  0 raid10 /raid10
sde           8:64   0  20G  0 disk   
└─md10        9:10   0  40G  0 raid10 /raid10
sr0          11:0    1   9G  0 rom    

#现在假设/dev/sdc已经修复,重新加回到阵列里
[root@localhost ~]# mdadm /dev/md10 -a /dev/sdc
mdadm: added /dev/sdc

# 四个U,表示4块盘都正常了
[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid10] 
md10 : active raid10 sdc[4] sde[3] sdd[2] sdb[0]
      41908224 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      
unused devices: <none>

# 更新配置文件
[root@localhost ~]# mdadm -Dvs /dev/md10 > /etc/mdadm.conf 

注意

mdadm运行时会自动检查/etc/mdadm.conf 文件并尝试自动装配,因此第一次配置raid后可以将信息导入到/etc/mdadm.conf中,如果不生成mdadm.conf文件,mdadm会尝试自己加载raid,最后可能会出现把raid生成到/dev/md*里

posted @ 2022-08-16 16:01  赵九思  阅读(1275)  评论(0编辑  收藏  举报