目录

  • 一、RAID的介绍
    • 1、RAID存储方式
    • 2、RAID逻辑卷
  • 二、RAID的分类
    • 1、RAID 0
    • 2、RAID 1
    • 3、RAID 2
    • 4、RAID 3
    • 5、RAID 4
    • 6、RAID 5
    • 7、RAID 6
    • 8、RAID 10
  • 三、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 等级RAID0RAID1RAID3RAID5RAID6RAID10
别名条带镜像专用奇偶校验条带分布奇偶校验条带双重奇偶校验条带镜像加条带
容错性
冗余类型
热备份选择
读性能
随机写性能一般一般
连续写性能一般
需要磁盘数n≥12n (n≥1)n≥3n≥3n≥42n(n≥2)≥4
可用容量全部50%(n-1)/n(n-1)/n(n-2)/n50%

四、部署磁盘阵列

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

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

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

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

[root@localhost ~]# lsblkNAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTsda               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 disksdc               8:32   0   20G  0 disksdd               8:48   0   20G  0 disksde               8:64   0   20G  0 disksr0              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/sdemdadm: layout defaults to n2mdadm: layout defaults to n2mdadm: chunk size defaults to 512Kmdadm: size set to 20954112Kmdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md0 started.

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

[root@localhost ~]# mkfs.ext4 /dev/md0mke2fs 1.42.9 (28-Dec-2013)文件系统标签=OS type: Linux块大小=4096 (log=2)分块大小=4096 (log=2)Stride=128 blocks, Stripe width=256 blocks2621440 inodes, 10477056 blocks523852 blocks (5.00%) reserved for the super user第一个数据块=0Maximum filesystem blocks=2157969408320 block groups32768 blocks per group, 32768 fragments per group8192 inodes per groupSuperblock backups stored on blocks:        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,        4096000, 7962624Allocating 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% /devtmpfs                    1.9G     0  1.9G    0% /dev/shmtmpfs                    1.9G   12M  1.9G    1% /runtmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup/dev/mapper/centos-root   17G  2.0G   16G   12% //dev/sda1               1014M  151M  864M   15% /boottmpfs                    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 : 512KConsistency 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  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/sdbmdadm: 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 : 512KConsistency 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/sdbmdadm: hot removed /dev/sdb from /dev/md0[root@localhost ~]# mdadm /dev/md0 -a /dev/sdbmdadm: 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 : 512KConsistency 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% /devtmpfs                    1.9G     0  1.9G    0% /dev/shmtmpfs                    1.9G   12M  1.9G    1% /runtmpfs                    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% /boottmpfs                    378M     0  378M    0% /run/user/0[root@localhost ~]# lsblkNAME            MAJ:MIN RM  SIZE RO TYPE   MOUNTPOINTsda               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/RAIDsdc               8:32   0   20G  0 disk└─md0             9:0    0   40G  0 raid10 /mnt/RAIDsdd               8:48   0   20G  0 disk└─md0             9:0    0   40G  0 raid10 /mnt/RAIDsde               8:64   0   20G  0 disk└─md0             9:0    0   40G  0 raid10 /mnt/RAIDsr0              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.. zshkill -9 1335df -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/mdstatPersonalities : [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: 

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

[root@localhost ~]# umount /RAID

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

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

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

[root@localhost ~]# mdadm -S /dev/md0mdadm: 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/sdemdadm: layout defaults to left-symmetricmdadm: layout defaults to left-symmetricmdadm: chunk size defaults to 512Kmdadm: size set to 20954112Kmdadm: Defaulting to version 1.2 metadatamdadm: 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 : 512KConsistency 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/md0mke2fs 1.42.9 (28-Dec-2013)文件系统标签=OS type: Linux块大小=4096 (log=2)分块大小=4096 (log=2)Stride=128 blocks, Stripe width=256 blocks2621440 inodes, 10477056 blocks523852 blocks (5.00%) reserved for the super user第一个数据块=0Maximum filesystem blocks=2157969408320 block groups32768 blocks per group, 32768 fragments per group8192 inodes per groupSuperblock backups stored on blocks:        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,        4096000, 7962624Allocating 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% /devtmpfs                    1.9G     0  1.9G    0% /dev/shmtmpfs                    1.9G   12M  1.9G    1% /runtmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup/dev/mapper/centos-root   17G  2.0G   16G   12% //dev/sda1               1014M  151M  864M   15% /boottmpfs                    378M     0  378M    0% /run/user/0/dev/md0                  40G   49M   38G    1% /mnt/RAID[root@localhost ~]# lsblkNAME            MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTsda               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/RAIDsdc               8:32   0   20G  0 disk└─md0             9:0    0   40G  0 raid5 /mnt/RAIDsdd               8:48   0   20G  0 disk└─md0             9:0    0   40G  0 raid5 /mnt/RAIDsde               8:64   0   20G  0 disk└─md0             9:0    0   40G  0 raid5 /mnt/RAIDsr0              11:0    1  4.4G  0 rom

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

[root@localhost ~]# mdadm /dev/md0 -f /dev/sdbmdadm: 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 : 512KConsistency 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