运维一定要知道的Linux RAID详解!

4,016 阅读7分钟

这是我参与 8 月更文挑战的第 7 天,活动详情查看: 8月更文挑战

RAID的基本概念

磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。简单地说, RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术。

RAID 的初衷是为大型服务器提供高端的存储功能和冗余的数据安全。在整个系统中, RAID 被看作是由两个或更多磁盘组成的存储空间,通过并发地在多个磁盘上读写数据来提高存储系统的 I/O 性能。大多数 RAID 等级具有完备的数据校验、纠正措施,从而提高系统的容错性,甚至镜像方式,大大增强系统的可靠性, Redundant 也由此而来。

RAID0 具有低成本、高读写性能、 100% 的高存储空间利用率等优点,但是它不提供数据冗余保护,一旦数据损坏,将无法恢复。

RAID1 称为镜像,它将数据完全一致地分别写到工作磁盘和镜像 磁盘,它的磁盘空间利用率为 50% 。

RAID5 应该是目前最常见的 RAID 等级 ,RAID5 兼顾存储性能、数据安全和存储成本等各方面因素,它可以理解为 RAID0 和 RAID1 的折中方案,是目前综合性能最佳的数据保护解决方案。 RAID5 基本上可以满足大部分的存储应用需求,数据中心大多采用它作为应用数据的保护方案。

RAID6 等级是在 RAID5 的基础上为了进一步增强数据保护而设计的一种 RAID 方式,它可以看作是一种扩展的 RAID5 等级。RAID6 具有快速的读取性能、更高的容错能力。但是,它的成本要高于 RAID5 许多,写性能也较差,并有设计和实施非常复杂。因此, RAID6 很少得到实际应用,主要用于对数据安全等级要求非常高的场合。它一般是替代 RAID10 方案的经济性选择。

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

软 RAID

软 RAID 没有专用的控制芯片和 I/O 芯片,完全由操作系统和 CPU 来实现所的 RAID 的功能。现代操作系统基本上都提供软 RAID 支持,通过在磁盘设备驱动程序上添加一个软件层,提供一个物理驱动器与逻辑驱动器之间的抽象层。目前,操作系统支持的最常见的 RAID 等级有 RAID0 RAID1RAID10RAID01RAID5 等。比如, Windows Server 支持 RAID0 、 RAID1 和 RAID5 三种等级, Linux 支持 RAID0 、 RAID1 、 RAID4 、 RAID5 、 RAID6 等, Mac OS X Server 、 FreeBSD 、 NetBSD 、 OpenBSD 、 Solaris 等操作系统也都支持相应的 RAID 等级。

软 RAID 的配置管理和数据恢复都比较简单,但是 RAID 所有任务的处理完全由 CPU 来完成,如计算校验值,所以执行效率比较低下,这种方式需要消耗大量的运算资源,支持 RAID 模式 较少,很难广泛应用。

软 RAID 由操作系统来实现,因此系统所在分区不能作为 RAID 的逻辑成员磁盘,软 RAID 不能保护系统盘 D 。对于部分操作系统而言, RAID 的配置信息保存在系统信息中,而不是单独以文件形式保存在磁盘上。这样当系统意外崩溃而需要重新安装时, RAID 信息就会丢失。另外,磁盘的容错技术并不等于完全支持在线更换、热插拔或热交换,能否支持错误磁盘的热交换与操作系统实现相关,有的操作系统热交换。

硬 RAID

硬 RAID 拥有自己的 RAID 控制处理与 I/O 处理芯片,甚至还有阵列缓冲,对 CPU 的占用率和整体性能是三类实现中最优的,但实现成本也最高的。硬 RAID 通常都支持热交换技术,在系统运行下更换故障磁盘。

硬 RAID 包含 RAID 卡和主板上集成的 RAID 芯片, 服务器平台多采用 RAID 卡。 RAID 卡由 RAID 核心处理芯片( RAID 卡上的 CPU )、端口、缓存和电池 4 部分组成。其中,端口是指 RAID 卡支持的磁盘接口类型,如 IDE/ATA SCSISATASASFC 等接口。

软硬混合 RAID

软 RAID 性能欠佳,而且不能保护系统分区,因此很难应用于桌面系统。而硬 RAID 成本非常昂贵,不同 RAID 相互独立,不具互操作性。因此,人们采取软件与硬件结合的方式来实现 RAID ,从而获得在性能和成本上的一个折中,即较高的性价比。

这种 RAID 虽然采用了处理控制芯片,但是为了节省成本,芯片往往比较廉价且处理能力较弱, RAID 的任务处理大部分还是通过固件驱动程序由 CPU 来完成。

Linux配置RAID

Linux 内核中有一个md(multiple devices)模块在底层管理 RAID 设备,它会在应用层给我们提供一个应用程序的工具 mdadm ,mdadm 是 linux 下用于创建和管理软件 RAID 的命令。mdadm 命令常见参数解释:

在VMware中添加硬盘

在/dev目录中查看添加的硬盘,硬盘的命名规则为sd{a-z}为编号

创建RAID0

[root@yxb ~]# mdadm -Ds
-D  打印阵列设备详细信息 s  得到阵列缺失信息
ARRAY /dev/md0 metadata=1.2 name=yxb:0 UUID=7445f1d4:ea900c41:13dbf238:1f64b93f

查看RAID设备的详细信息

[root@yxb ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Mon Jul 19 14:40:06 2021
        Raid Level : raid0
        Array Size : 10477568 (9.99 GiB 10.73 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Jul 19 14:40:06 2021
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : yxb:0  (local to host yxb)
              UUID : 7445f1d4:ea900c41:13dbf238:1f64b93f
            Events : 0

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

[root@yxb ~]# cat /proc/mdstat  #从内存中查看,重启后,信息丢失,所以要保存
Personalities : [raid0] 
md0 : active raid0 sdc[1] sdb[0]
      10477568 blocks super 1.2 512k chunks
      
unused devices: <none>

[root@yxb ~]# mdadm -Dsv > /etc/mdadm.conf  #保存配置信息

对创建的 RAID0 进行文件系统创建并挂载

开机自动挂载

[root@yxb ~]# blkid /dev/md0
/dev/md0: UUID="db925633-9e54-48ef-ad63-5c49f05faada" TYPE="xfs" 
[root@yxb ~]# echo "UUID=db925633-9e54-48ef-ad63-5c49f05faada /raid0 xfs defaults 0 0" >> /etc/fstab 

创建RAID1

-C 创建 -v 详细信息 -l 阵列级别 -n 阵列成员数量 -x 阵列备用盘数量将 RAID信息保存到配置文件

模拟硬盘故障

[root@yxb ~]# mdadm /dev/md1 -f /dev/sde mdadm: set /dev/sde faulty in /dev/md1

spare rebuilding 热备重建中,也就是 sdd 会把自己的数据同步到 sdfrebuild Status : 13% complete 同步状态 (此时 md1 中的文件依然正常使用,因为 sdd 在工作)

移除损坏的硬盘

[root@yxb ~]# mdadm -r /dev/md1 /dev/sde mdadm: hot removed /dev/sde from /dev/md1

已经没有热备盘了,添加一块新热备盘。

[root@yxb ~]# mdadm -a /dev/md1 /dev/sde
mdadm: added /dev/sde

创建RAID5

扩展 RAID5 磁盘阵列将热备盘增加到 md5 中,使用 md5 中可以使用的磁盘数量为 4 块

[root@yxb ~]# mdadm -G /dev/md5 -n 4 -c 32

阵列只有在正常状态下,才能扩容,降级及重构时不允许扩容。对于 raid5 来说,只能增加成员盘,不能减少。而对于 raid1 来说,可以增加成员盘,也可以减少。

停止 MD5 阵列

[root@yxb ~]# mdadm -Dsv > /etc/mdadm.conf #停止前,一定要先保存配置文件
[root@yxb ~]# mdadm -S /dev/md5 #-S  停止阵列
mdadm: stopped /dev/md5

 激活 MD5 阵列

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

删除 RAID

[root@yxb ~]# umount /dev/md0 /raid0 #如果你已经挂载 raid,就先卸载。

[root@yxb ~]# mdadm -Ss #停止 raid  设备
[root@yxb ~]# rm -rf /etc/mdadm.conf #删除 raid  配置文件
[root@yxb ~]# mdadm --zero-superblock /dev/sdb #清除物理磁盘中的 raid 标识
[root@yxb ~]# mdadm --zero-superblock /dev/sdc #清除物理磁盘中的 raid 标识
[root@yxb ~]# mdadm -Dsv #清除物理磁盘中的 raid 标识

参考文档:

RAID-0-1-5-10 搭建及使用 - 删除 RAID 及注意事项

Linux RAID mdadm 建立和删除

RAID技术全解图解-RAID0、RAID1、RAID5、RAID100

推荐阅读

Linux服务管理(详解)!

网络安全人员一定要知道的Metasploit渗透框架!

渗透必备-Metasploit常用模块的用法

服务器硬件指南!