Author:rab
前言
一块物理硬盘要投入生产使用,一般会经历一下这些步骤:
- 磁盘做 RAID;
- RAID 磁盘分区;
- 格式化文件系统;
- 创建挂载点并挂载使用。
那是不是必须要做 RAID 呢?我们说 RAID 是可选的,它只是一种技术实现,且有不同的 RAID 级别(0/1/5/6/10)。是否要做 RAID 得根据你的实际应用场景来决定,否则的话单盘也是可以作为存储投入生产使用的,只是相对于 DRAI 盘来说,其安全/读写性能不是很高。比如在 Linux 中就支持多种存储配置,包括单磁盘、RAID、LVM(Logical Volume Manager)等。
那如果需要用到 RAID 的话,我们又该怎么做呢?做了 RAID 后是否真的就提升数据存储的安全性了呢?接下来我们详细地看看。
一、创建 RAID
1.1 环境
虚拟环境 | 虚拟主机 | 磁盘 | 备注 |
---|---|---|---|
VMware® Workstation 16 Pro | CentOS 7.9 | /dev/sda - 系统盘 /dev/sdb /dev/sdc /dev/sdd /dev/sde | 软 RAID 测试 |
说明:sda 作为系统盘,sdb、sdc、sdd、sde 用于创建 RAID 盘。
1.2 什么是 RAID?
RAID,即 Redundant Array of Independent Disks
,是一种将多个硬盘驱动器组合成一个单一存储单元(逻辑上的存储单元)的技术。它的目标是提高数据的可靠性、性能和/或容量。RAID可以在硬件和软件级别实现,不同级别的RAID提供不同的功能和优点。以下是一些常见的 RAID 级别和它们的详细解释:
-
RAID 0:
-
别名:条带化
-
数据分布:数据被均匀分散在多个硬盘上。
-
冗余性:没有冗余性,一个驱动器失效会导致数据丢失。
-
性能:提高读写性能,因为数据可以同时从多个驱动器读取/写入。
-
容量:总容量等于所有驱动器的容量之和。
-
用途:适合需要高性能但不需要冗余备份的应用。
-
硬盘数:至少需要 2 块(其实 1 块也行,但你觉得还有必要再做 RAID0 吗?此时毫无意义了)。
-
-
RAID 1:
-
别名:镜像
-
数据分布:数据在两个硬盘上完全相同,每个硬盘都是另一个的镜像。
-
冗余性:具有高冗余性,一个驱动器失效不会导致数据丢失。
-
性能:读性能较高,写性能相对较低。
-
容量:总容量等于一个硬盘的容量,因为数据完全复制到了另一个硬盘上。
-
用途:用于需要高度冗余和数据可用性的应用,但不关心存储容量利用率。
-
硬盘数:至少需要 2 块硬盘(因为另一块要作为其备份盘,且磁盘数需为偶数,如:2、4、6、…)。
-
-
RAID 5:
-
数据分布:数据和奇偶校验信息交错存储在多个硬盘上(数据分布式存储在多个盘上,但要留 1 个盘来存储奇偶校验信息,所以说数据和校验信息是交错存储的)。
-
冗余性:允许一个驱动器失效时,可以通过计算奇偶校验信息来重建数据(但要注意失效的这块盘不能是奇偶校验盘,而且不能允许 2 块盘同时失效,因为 RAID 5 的奇偶校验信息仅能提供一块硬盘的容错能力)。
-
性能:提供良好的读性能,适中的写性能。
-
容量:总容量等于(驱动器数量-1)乘以每个驱动器的容量(减 1 的原因是因为奇偶校验盘并不存储应用数据)。
-
用途:适用于需要一定程度冗余和合理性能的应用。
-
硬盘数:至少需要 3 块硬盘(因为要留 1 块来存储奇偶校验数据,因此这块盘除了存储奇偶校验数据外不存其他应用数据)。
注意:要搞清楚奇偶校验大体机制,就是每次写入数据到 RAID 盘都会进行一次奇偶校验计算(生成的奇偶校验块通常被标记为 P 和 Q 或者有时称为 P1 和 P2),并将每次的校验数据存储在一个校验盘中。
-
-
RAID 6:
-
数据分布:数据和两个奇偶校验信息交错存储在多个硬盘上(数据分布式存储在多个盘上,但要留 2 个盘来存储奇偶校验信息)。
-
冗余性:允许两个驱动器失效时,仍能恢复数据(根据一块校验盘只能容错一块数据盘的原则,那两块校验盘自然就能允许两块数据盘同时失效)。
-
性能:与 RAID 5 相似,但写性能较差(相对 5 来说较差,因为在写入数据时,需要进行两次奇偶校验计算,这会增加写操作的计算负担)。
-
容量:总容量等于(驱动器数量-2)乘以每个驱动器的容量。
-
用途:适用于需要更高级别冗余和数据可靠性的应用。
-
硬盘数:至少需要 3 块硬盘(因为要留 2 块来存储奇偶校验数据,因此这 2 块盘除了存储奇偶校验数据外不存其他应用数据)。
注意:要搞清楚奇偶校验大体机制,就是每次写入数据到 RAID 盘都会进行两次奇偶校验计算(即每次计算都会产生两个奇偶校验数据),并将每次的两个校验数据存储在两个校验盘中。
-
-
RAID 10(RAID 1+0):
-
数据分布:数据被分为多个组,每个组中的数据是镜像的(说白了就是先做 RAID 1,再在 RAID 1 的基础上做 RAID 0)。
-
冗余性:具有高冗余性,可以容忍多个驱动器的故障,允许 1 块或多块磁盘失效(虽然 RAID 10可以容忍多个硬盘失效,但前提是这些失效不影响同一数据镜像组内的多个硬盘。例如,如果RAID 10有4块硬盘,分为两个数据镜像组(每个组有2块硬盘),那么可以容忍同时失效的两块硬盘,一块在每个数据镜像组中。这是因为在一个数据镜像组中的两块硬盘都存储相同的数据。)。
-
性能:提供很好的读写性能,尤其适合高性能应用。
-
容量:总容量等于驱动器数量的一半。
-
用途:适用于需要高性能和高冗余性的应用。
-
硬盘数:至少需要 4 块硬盘
-
1.3 软 RAID 和硬 RAID
软RAID和硬RAID是两种不同类型的RAID实现方式,它们在硬件和软件层面的工作原理和特点有所不同。
1、软 RAID
-
工作原理:软RAID是在操作系统级别实现的,依赖于主机的 CPU 和内存来执行 RAID 操作。操作系统通过软件驱动程序来管理 RAID配置,控制数据的读取、写入和冗余计算。本次我们就是在 CentOS 7.9 操作系统上通过软件驱动程序来创建 RAID 并应用 RAID。
-
硬件要求:不需要专门的硬件 RAID 控制器,只需要支持 RAID 的操作系统和兼容硬盘。适用于普通计算机和服务器,不需要专门的RAID卡。
-
性能:由于依赖主机的 CPU 和内存资源,软 RAID 可能会占用一部分计算资源,对系统性能有一定影响,特别是在高负载情况下。性能通常比硬 RAID 较低,特别是对于 RAID 5 和 RAID 6。
-
灵活性:相对较灵活,可以根据需要更改 RAID 配置。可以在不同硬件平台上迁移,只要支持相同的软件 RAID 类型。
-
成本:通常比硬 RAID 便宜,因为不需要额外的硬件 RAID 控制器。
2、硬 RAID
-
工作原理:硬 RAID 使用专用的硬件 RAID 控制器卡来管理 RAID 配置。控制器卡处理数据的读取、写入和冗余计算,减轻了主机 CPU 的负担。
-
硬件要求:需要专门的硬件 RAID 控制器卡,这通常是一块独立的 PCIe 卡或嵌入式在服务器主板上的。控制器卡通常具有缓存、RAID 级别选择和热插拔支持等功能。
-
性能:性能通常比软 RAID 更高,因为专用控制器卡可以有效地处理 RAID 操作,减少了主机 CPU 的负担。适用于高性能要求的服务器环境。
-
灵活性:对 RAID 配置的更改通常需要更换控制器卡或重新配置硬件 RAID 设置,因此相对不太灵活。不容易在不同硬件平台上迁移。
-
成本:硬 RAID 通常更昂贵,因为它需要额外的硬件 RAID 控制器。
1.4 如何创建软 RAID?
1、添加 4 块测试硬盘
2、启动虚拟主机
3、查看是否正常显示磁盘设备
lsblk
4、安装 RAID 阵列的命令行工具
yum install -y mdadm
说明:mdadm
是用于管理 Linux 软件 RAID 阵列的命令行工具。它允许你创建、配置、监控和维护软件RAID阵列。软件RAID通过使用Linux内核中的软件驱动程序来实现磁盘冗余和性能提升,而不需要专用的RAID控制器硬件。
5、开始创建 RAID
mdadm --create --verbose /dev/md6 --level=6 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
# 参数说明:
# --create:告诉mdadm你要创建一个新的RAID阵列
# --verbose:显示创建的详细过程信息
# /dev/md0:自定义磁盘阵列名
# --level=6:指定RAID级别。在此示例中,我们使用RAID 6
# --raid-devices=4:指定参与RAID阵列的硬盘数量。在此示例中,有4块硬盘,后面跟上具体的磁盘设备。
查看创建的 RAID 信息,及输出的字段解释。
mdadm -D /dev/md6
-
/dev/md6:这是软件 RAID 阵列的设备名称,即你要查看详细信息的 RAID 阵列的设备路径。
-
Version:RAID 阵列的版本号。表示使用的 RAID 元数据格式版本。
-
Creation Time:RAID 阵列创建的时间戳,以
年-月-日 小时:分钟:秒
的格式显示。 -
Raid Level:RAID 级别,例如 RAID 0、RAID 1、RAID 5 等,本案例为 RAID 6。
-
Raid Devices:参与 RAID 阵列的硬盘数量。
-
Total Devices:总共的设备数量,包括正常工作的设备和故障设备。
-
Active Devices:当前活动的设备数量,即正常工作的设备数量。
-
Working Devices:与 Active Devices 相同,表示当前正常工作的设备数量。
-
Failed Devices:当前失败的设备数量,这些设备可能需要被替换。
-
Spare Devices:备用设备的数量,这些设备可以用来替代故障的设备(我们并没有设置预备盘)。
-
UUID:RAID 阵列的唯一标识符,可用于识别阵列。
-
Array Size:RAID 阵列的总容量(大约 10G)。
-
Used Dev Size:用于 RAID 阵列的每个设备的大小(大约 5G)。
-
Super Offset:超级块偏移量,表示超级块在RAID阵列中的存储位置。
-
State:RAID阵列的当前状态,如"clean"(正常)、“degraded”(降级)等。
-
Active State:活动状态,用于指示RAID阵列的活动情况。
-
Consistency Policy:一致性策略,表示 RAID 阵列的一致性检查策略。
-
Events:事件计数,用于跟踪RAID阵列的事件。
复合我们上面提到的容量计算公式(驱动器数量-2 乘以每个驱动器的容量),至此,软 RAID 创建完成!
6、分区(可选)
我这里为了实验就不分区了。
7、格式化文件系统
mkfs.xfs /dev/md6
8、创建挂载点并挂载使用
查看 UUID
挂载使用
mkdir -p /opt/raidmd6
echo 'UUID=9b964df3-965b-4a5e-bc67-93570e93b1af /opt/raidmd6 xfs defaults 0 0' >> /etc/fstab
使挂载生效
mount -a
验证是否挂载成功
df -Th
二、故障模拟与数据恢复
2.1 故障模拟
1、创建测试数据
touch test{1..15}.txt
2、移除磁盘,模拟磁盘损坏
这里模拟 RAID 6 阵列中的 /dev/sdd 磁盘损坏,数据不丢失的情况。其他 RAID 级别大家可以去尝试,我这里不再演示。
mdadm /dev/md6 -f /dev/sdd # 通过命令来模拟即可
# -f:这是一个选项,表示 "fail"(失败)。它告诉 mdadm 命令要执行的操作是标记一个磁盘为失败状态,通常因为该磁盘出现了故障。
# /dev/sdd:这是要标记为失败的磁盘的设备名称。在这个例子中,是 /dev/sdd。
然后查看 RAID 6 阵列状态
mdadm -D /dev/md6
3、查看挂载点的数据是还否存在
如下图,没问题。
2.2 故障恢复
所谓的故障恢复就是更换一块新的磁盘,会自动进行恢复
1、取消挂载
umount /opt/raidmd6
2、重新添加磁盘到 RAID 6 阵列
mdadm /dev/md6 -a /dev/sdd
3、查看恢复进度
mdadm -D /dev/md6
4、验证是否修复完成
mdadm -D /dev/md6
5、修复完毕后再次重新挂载
mount -a
6、验证数据完整性
也是没问题的
至此,软 RAID 的创建、故障恢复就实验完成了!希望看完该文章后,你能整体了解现实中是如何组建的软 RAID 磁盘阵列的。
思考?
RAID 5 如果 1 块盘失效了,而失效的恰好是校验盘,那再次存储数据的时候还会进行数据校验计算产生校验数据吗?或者换新盘后会不会重建校验数据?
答案:
如果在 RAID 5 中的一块硬盘失效,而恰好是存储校验信息的那块硬盘失效,数据恢复将会受到限制,因为校验信息不再可用。在这种情况下,RAID 5 可以继续正常运行,但无法自动进行数据恢复或校验。
此时 RAID 5 的状态会变为"Degraded"(降级),这表示阵列处于一种故障状态。系统管理员应该立即采取措施来替换故障的硬盘,以恢复 RAID 5 的完整性和性能。一旦新的硬盘安装并添加到 RAID 5 阵列中,RAID 控制器将重新构建丢失的校验信息,这是一个计算密集型过程,涉及对其他硬盘上的数据块进行异或(XOR)运算。一旦校验信息被重新生成,RAID 5 阵列将再次具有完整的数据冗余和故障容忍性。
需要注意的是,在替换失效硬盘并进行重建期间,RAID 5 性能可能会受到影响,因为重建操作会占用一定的系统资源和时间。因此,在发生硬盘故障后,尽早替换故障硬盘是重要的,以最小化对 RAID 性能的潜在影响。
—END