RAID磁盘阵列

一、RAID的介绍

RAID简称廉价磁盘冗余阵列 (Redundant Arrays of Inexpensive Disks) 或独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同的地方的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。因为多个硬盘增加了平均故障间隔时间MTBF),储存冗余数据也增加了容错。

​ 利用虚拟化技术把多个硬盘组合起来,成为一个或多个硬盘阵列组目的是为了提升性能或者减少冗余。

1、RAID存储方式

分块:将一个分区分成多个大小相等的、地址相邻的块,它是组成条带的元素。

条带:同一磁盘阵列中的多个磁盘驱动器上的相同“位置”(或者说相同编号)的分块。

2、RAID逻辑卷

​ 我们常常将一块硬盘分成两个C盘D盘(windows系统),这里的C盘D盘就是逻辑卷,此处反过来,将多块硬盘虚拟成一块逻辑盘。

二、RAID的分类

1、RAID 0

RAID 0 是一种简单的、无数据校验的数据条带化技术。没有容错设计的条带硬盘阵列,以条带形式将RAID组的数据均匀分布在各个硬盘中。

优点:追求最大容量(将多个物理硬盘虚拟成一个逻辑磁盘)、读写速度、实现成本低、100%的高存储空间利用率。

缺点:RAID 0没有提供冗余或错误修复能力。

适用场景: RAID0 一般适用于对性能要求严格但对数据安全性和可靠性不高的应用,如视频、音频存储、临时数据缓存空间等。

2、RAID 1

RAID 1又称磁盘镜像,数据同时一致写到主硬盘和镜像硬盘。所以磁盘利用率只有50%。只要系统中任何一对镜像盘中至少有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行,当一块硬盘失效时,系统会忽略该硬盘,转而使用剩余的镜像盘读写数据,具备很好的磁盘冗余能力。

优点:追求最大安全性。

缺点:磁盘利用率低,成本高。

适用场景:RAID1 应用于对顺序读写性能要求高以及对数据保护极为重视的应用,如对邮件系统的数据保护。

3、RAID 2

RAID 2称为纠错海明码磁盘阵列,其设计思想是利用海明码实现数据校验冗余。 RAID 2的数据宽度越大,存储空间利用率越高,但同时需要的磁盘数量也越多。

优点:数据安全性高,数据传输性能相当高,设计复杂度低于RAID 3、RAID 4、RAID 5。

缺点:数据冗余开销大,数据输出性能受阵列中最慢磁盘驱动器的限制。数据重建非常耗时。(很少应用)

4、RAID 3

带有校验的并行数据传输阵列,数据条带化分布在数据盘中,同时使用专用校验硬盘存放校验数据

注意:有效容量 RAID 3=(N-1)* 单块硬盘大小,其中N为硬盘总数量。

优点:磁盘阵列的存储空间利用率高。

缺点:RAID 3出现坏盘时性能大幅下降

适用场景:适用大容量数据的顺序访问应用,如影像处理、流媒体服务等。

5、RAID 4

RAID 4RAID 3 的原理大致相同,区别在于条带化的方式不同。 RAID 4按照 块的方式来组织数据,写操作只涉及当前数据盘和校验盘两个盘,多个 I/O 请求可以同时得到处理,提高了系统性能。 RAID 4 按块存储可以保证单块的完整性,可以避免受到其他磁盘上同条带产生的不利影响。

  RAID 4 在不同磁盘上的同级数据块同样使用 XOR 校验,结果存储在校验盘中。写入数据时, RAID 4 按这种方式把各磁盘上的同级数据的校验值写入校验 盘,读取时进行即时校验。因此,当某块磁盘的数据块损坏, RAID4 可以通过校验值以及其他磁盘上的同级数据块进行数据重建。

  优点:提供了 非常好的读性能

缺点:单一的校验盘往往成为系统性能的瓶颈。写性能比较差。(RAID 4 在实际应用中很少见,主流存储产品也很少使用 RAID 4 保护。)

6、RAID 5

​ 与RAID 3机制类似,但校验数据均匀分布在各数据硬盘上RAID成员硬盘上同时保存数据和校验信息,数据块和对应的校验信息保存在不同硬盘上。RAID 5是最常用的RAID方式之一

​ RAID5的读出效率很高,写入效率一般,块式的集体访问效率不错。因为奇偶校验码在不同的磁盘上,所以提高了可靠性。但是它对数据传输的并行性解决不好,而且控制器的设计也相当困难。

注意有效容量 RAID 5=(N-1)*单块盘大小,其中N为硬盘总数

组建RAID 5最少3块盘,允许坏一块盘

7、RAID 6

RAID 6技术是在RAID 5基础上,为了进一步加强数据保护而设计的一种RAID方式,实际上是一种扩展RAID 5等级。校验盘分为:横向校验盘和斜向校验盘

优点:快速的读取性能,更高的容错能力

缺点:很慢的写入速度,RAID控制器在设计上更加复杂,成本更高

适用场景:RAID6 很少得到实际应用,主要用于对数据安全等级要求非常高的场合。

8、RAID 10

​ 将镜像和条带进行两级组合的RAID级别,第一级是RAID 1,第二级为RAID 0

RAID 10也是一种应用广泛的RAID级别,磁盘利用率50%

优点:同时拥有RAID 0的超凡速度和RAID 1的数据高可靠性

缺点:CPU占用率高,而且磁盘的利用率比较低,这种新结构的可扩充性不好,成本高

三、RAID比较

RAID 等级 RAID0 RAID1 RAID3 RAID5 RAID6 RAID10
别名 条带 镜像 专用奇偶校验条带 分布奇偶校验条带 双重奇偶校验条带 镜像加条带
容错性
冗余类型
热备份选择
读性能
随机写性能 一般 一般
连续写性能 一般
需要磁盘数 n≥1 2n (n≥1) n≥3 n≥3 n≥4 2n(n≥2)≥4
可用容量 全部 50% (n-1)/n (n-1)/n (n-2)/n 50%

四、部署磁盘阵列

先移除全部新加的盘,再新添加4个盘

mdadm命令的常用参数以及作用

参数 作用
-a 通知mdadm是否创建设备文件,并分配一个未使用的次设备号
-n 指定设备数量
-l 指定RAID级别
-C 创建
-v 显示过程
-f 模拟设备损坏
-r 移除设备
-Q 查看摘要信息
-D 查看详细信息
-S 停止RAID磁盘阵列
-x 备份盘数量

lsblk查看新添的硬盘是否添加成功

[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
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk
sdc               8:32   0   20G  0 disk
sdd               8:48   0   20G  0 disk
sde               8:64   0   20G  0 disk
sr0              11:0    1  4.4G  0 rom

[root@localhost ~]# yum -y install mdadm
[root@localhost ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

把制作好的RAID磁盘阵列格式化为ext4格式

[root@localhost ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477056 blocks
523852 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

创建挂载点然后把硬盘设备进行挂载操作

[root@localhost ~]# mkdir /mnt/RAID
[root@localhost ~]# mount /dev/md0 /mnt/RAID
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   12M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  2.0G   16G   12% /
/dev/sda1               1014M  151M  864M   15% /boot
tmpfs                    378M     0  378M    0% /run/user/0
/dev/md0                  40G   49M   38G    1% /mnt/RAID

查看/dev/md0磁盘阵列的详细信息,并把挂载信息写入到配置文件中,使其永久生效。

[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Dec 24 14:40:25 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 : Sun Dec 24 15:19:22 2023
             State : active
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost:0  (local to host localhost)
              UUID : dfea21e4:7f4a5550:44379f9b:5b332b40
            Events : 18

    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 ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
[root@localhost ~]# reboot

[root@localhost ~]# dd < /dev/zero > file bs=256M count=4
记录了4+0 的读入
记录了4+0 的写出
1073741824字节(1.1 GB)已复制,3.80257 秒,282 MB/秒

五、损坏磁盘阵列及修复

在确认有一块物理硬盘设备出现损坏而不能继续正常使用后,应该使用mdadm命令将其移除,然后查看RAID磁盘阵列的状态,可以发现状态已经改变。

[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Dec 24 14:40:25 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 : Sun Dec 24 15:37:11 2023
             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:0  (local to host localhost)
              UUID : dfea21e4:7f4a5550:44379f9b:5b332b40
            Events : 20

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       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

       0       8       16        -      faulty   /dev/sdb

在RAID 10级别的磁盘阵列中,当RAID 1磁盘阵列中存在一个故障盘时并不影响RAID 10磁盘阵列的使用。当购买了新的硬盘设备后再使用mdadm命令来予以替换即可,在此期间我们可以在/RAID目录中正常地创建或删除文件。由于我们是在虚拟机中模拟硬盘,所以先重启系统,然后再把新的硬盘添加到RAID磁盘阵列中。

先热移除sdb

再添加sdb

[root@localhost ~]# mdadm /dev/md0 -r /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md0
[root@localhost ~]# mdadm /dev/md0 -a /dev/sdb
mdadm: added /dev/sdb
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Dec 24 14:40:25 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 : Sun Dec 24 15:44:50 2023
             State : clean, degraded, recovering
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 26% complete

              Name : localhost:0  (local to host localhost)
              UUID : dfea21e4:7f4a5550:44379f9b:5b332b40
            Events : 27

    Number   Major   Minor   RaidDevice State
       4       8       16        0      spare rebuilding   /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 ~]# echo "/dev/md0    /mnt/RAID    ext4    defaults    0    0" >> /etc/fstab
[root@localhost ~]# mount /dev/md0 /mnt/RAID

#查看是否修复成功
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   12M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  3.0G   15G   18% /
/dev/md0                  40G   49M   38G    1% /RAID
/dev/sda1               1014M  151M  864M   15% /boot
tmpfs                    378M     0  378M    0% /run/user/0
[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
  ├─centos-root 253:0    0   17G  0 lvm    /
  └─centos-swap 253:1    0    2G  0 lvm    [SWAP]
sdb               8:16   0   20G  0 disk
└─md0             9:0    0   40G  0 raid10 /mnt/RAID
sdc               8:32   0   20G  0 disk
└─md0             9:0    0   40G  0 raid10 /mnt/RAID
sdd               8:48   0   20G  0 disk
└─md0             9:0    0   40G  0 raid10 /mnt/RAID
sde               8:64   0   20G  0 disk
└─md0             9:0    0   40G  0 raid10 /mnt/RAID
sr0              11:0    1  4.4G  0 rom

取消挂载

关闭RAID阵列

[root@localhost ~]# mdadm -S /dev/md0
#必须清除成员磁盘当中阵列的超级块信息,这一步很重要!否则开机会重新做RAID


# 若显示如下信息
mdadm: Cannot get exclusive access to /dev/md0:Perhaps a running process, mounted filesystem or active volume group?

解决方案:
fuser -vm /dev/md0
                     用户     进程号 权限   命令
/dev/md0:            root     kernel mount /mnt/RAID
                     root       1335 ..c.. zsh
kill -9 1335
df -h 
/dev/md0                  40G  1.1G   37G    3% /mnt/RAID
 umount /dev/md0
 
 
[root@localhost ~]# mdadm --zero-superblock /dev/sd[b-e]
#取消开机自动挂载,干掉那一行
[root@localhost ~]# vim /etc/fstab 
删除有md0那一行(很重要,没有这个磁盘或者目录,无法正常开机)
 

扩展

LINUX下彻底关闭某个RAID磁盘阵列

1、查看RAID磁盘阵列信息,确认要关闭哪个。(比如[raid10])

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid10]
md0 : active raid10 sdb[4] sdc[1] sde[3] sdd[2]
      41908224 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]

unused devices: <none>

2、卸载md0这个阵列的挂载点:

[root@localhost ~]# umount /RAID

3、停止md0这个阵列,并释放与该阵列相关的所有资源:

[root@localhost ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0

注意:如果在停止md0的阵列前,却没有把它卸载(umount)掉,会出现如下提示:

[root@localhost ~]# mdadm -S /dev/md0
mdadm: Cannot get exclusive access to /dev/md0:Perhaps a running process, mounted filesystem or active volume group?

4、清除成员磁盘当中阵列的超级块信息,这一步很重要!

[root@localhost ~]# mdadm --zero-superblock /dev/sd[b-e]

5、删除或注释/etc/fstab上的挂载信息

vim /etc/fstab

6、删除或注释/etc/mdadm.conf对应的RAID信息:

vim /etc/mdadm.conf

7、如果做完上面所有的操作后,发现/dev/下还有md0这个设备文件存在,直接rm -f /dev/md0即可

rm -rf /dev/md0

六、磁盘阵列+备份盘

注意:还原快照先

部署RAID 5磁盘阵列时,需要用到4块硬盘。现在创建一个RAID 5磁盘阵列+备份盘。

[root@localhost ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

#参数-n 3代表创建这个RAID 5磁盘阵列所需的硬盘数,参数-l 5代表RAID的级别,而参数-x 1则代表有一块备份盘。当查看/dev/md0(即RAID 5磁盘阵列的名称)磁盘阵列的时候就能看到有一块备份盘在等待中了。
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Dec 24 16:46:45 2023
        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 : Sun Dec 24 16:48:31 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 : localhost:0  (local to host localhost)
              UUID : ef77d022:cb8db5f6:6d692ea0:a84f7525
            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

将部署好的RAID 5磁盘阵列格式化为ext4文件,然后挂载到目录上,之后就可以使用了。

[root@localhost ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477056 blocks
523852 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

[root@localhost ~]# echo "/dev/md0 /mnt/RAID ext4 defaults 0 0" >> /etc/fstab
[root@localhost ~]# mkdir /mnt/RAID
[root@localhost ~]# mount /dev/md0 /mnt/RAID
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   12M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  2.0G   16G   12% /
/dev/sda1               1014M  151M  864M   15% /boot
tmpfs                    378M     0  378M    0% /run/user/0
/dev/md0                  40G   49M   38G    1% /mnt/RAID
[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
  ├─centos-root 253:0    0   17G  0 lvm   /
  └─centos-swap 253:1    0    2G  0 lvm   [SWAP]
sdb               8:16   0   20G  0 disk
└─md0             9:0    0   40G  0 raid5 /mnt/RAID
sdc               8:32   0   20G  0 disk
└─md0             9:0    0   40G  0 raid5 /mnt/RAID
sdd               8:48   0   20G  0 disk
└─md0             9:0    0   40G  0 raid5 /mnt/RAID
sde               8:64   0   20G  0 disk
└─md0             9:0    0   40G  0 raid5 /mnt/RAID
sr0              11:0    1  4.4G  0 rom

把硬盘设备/dev/sdb移出磁盘阵列,然后迅速查看/dev/md0磁盘阵列的状态

[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Dec 24 16:46:45 2023
        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 : Sun Dec 24 18:28:52 2023
             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 : 10% complete

              Name : localhost:0  (local to host localhost)
              UUID : ef77d022:cb8db5f6:6d692ea0:a84f7525
            Events : 23

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

       0       8       16        -      faulty   /dev/sdb

热门相关:娶一送一:爹地,放开我妈咪!   孽徒快坑师   隐身侍卫   都市极品小医圣   孽徒快坑师