磁盘阵列(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
没有专用的控制芯片和 I/O 芯片,完全由操作系统和 CPU 来实现所的 RAID 的功能。现代操作系统基本上都提供软 RAID 支持,通过在磁盘设备驱动程序上添加一个软件层,提供一个物理驱动器与逻辑驱动器之间的抽象层。目前,操作系统支持的最常见的 RAID 等级有 RAID0
、 RAID1
、 RAID10
、 RAID01
和 RAID5
等。比如, 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 控制处理与 I/O 处理芯片,甚至还有阵列缓冲,对 CPU 的占用率和整体性能是三类实现中最优的,但实现成本也最高的。硬 RAID 通常都支持热交换技术,在系统运行下更换故障磁盘。
硬 RAID 包含 RAID 卡和主板上集成的 RAID 芯片, 服务器平台多采用 RAID 卡。 RAID 卡由 RAID 核心处理芯片( RAID 卡上的 CPU )、端口、缓存和电池 4 部分组成。其中,端口是指 RAID 卡支持的磁盘接口类型,如 IDE/ATA
、SCSI
、SATA
、SAS
、FC
等接口。
软 RAID 性能欠佳,而且不能保护系统分区,因此很难应用于桌面系统。而硬 RAID 成本非常昂贵,不同 RAID 相互独立,不具互操作性。因此,人们采取软件与硬件结合的方式来实现 RAID ,从而获得在性能和成本上的一个折中,即较高的性价比。
这种 RAID 虽然采用了处理控制芯片,但是为了节省成本,芯片往往比较廉价且处理能力较弱, RAID 的任务处理大部分还是通过固件驱动程序由 CPU 来完成。
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
-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 磁盘阵列将热备盘增加到 md5 中,使用 md5 中可以使用的磁盘数量为 4 块
[root@yxb ~]# mdadm -G /dev/md5 -n 4 -c 32
阵列只有在正常状态下,才能扩容,降级及重构时不允许扩容。对于 raid5 来说,只能增加成员盘,不能减少。而对于 raid1 来说,可以增加成员盘,也可以减少。
停止 MD5 阵列
[root@yxb ~]# mdadm -As #-A 激活磁盘阵列 s 扫描配置文件得到阵列信息
mdadm: /dev/md5 has been started with 4 drives.
激活 MD5 阵列
[root@yxb ~]# mdadm -As #-A 激活磁盘阵列 s 扫描配置文件得到阵列信息 mdadm: /dev/md5 has been started with 4 drives.复制代码
[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 标识
作者:yao