VMware 下模拟软 RAID 的创建及故障恢复

news2024/11/18 22:49:31

image-20231009153253756

Author:rab


目录

    • 前言
    • 一、创建 RAID
      • 1.1 环境
      • 1.2 什么是 RAID?
      • 1.3 软 RAID 和硬 RAID
      • 1.4 如何创建软 RAID?
    • 二、故障模拟与数据恢复
      • 2.1 故障模拟
      • 2.2 故障恢复
    • 思考?


前言

一块物理硬盘要投入生产使用,一般会经历一下这些步骤:

  1. 磁盘做 RAID;
  2. RAID 磁盘分区;
  3. 格式化文件系统;
  4. 创建挂载点并挂载使用。

那是不是必须要做 RAID 呢?我们说 RAID 是可选的,它只是一种技术实现,且有不同的 RAID 级别(0/1/5/6/10)。是否要做 RAID 得根据你的实际应用场景来决定,否则的话单盘也是可以作为存储投入生产使用的,只是相对于 DRAI 盘来说,其安全/读写性能不是很高。比如在 Linux 中就支持多种存储配置,包括单磁盘、RAID、LVM(Logical Volume Manager)等。

那如果需要用到 RAID 的话,我们又该怎么做呢?做了 RAID 后是否真的就提升数据存储的安全性了呢?接下来我们详细地看看。

一、创建 RAID

1.1 环境

虚拟环境虚拟主机磁盘备注
VMware® Workstation 16 ProCentOS 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 吗?此时毫无意义了)。

      image-20231009222508253

  • RAID 1:

    • 别名:镜像

    • 数据分布:数据在两个硬盘上完全相同,每个硬盘都是另一个的镜像。

    • 冗余性:具有高冗余性,一个驱动器失效不会导致数据丢失。

    • 性能:读性能较高,写性能相对较低。

    • 容量:总容量等于一个硬盘的容量,因为数据完全复制到了另一个硬盘上。

    • 用途:用于需要高度冗余和数据可用性的应用,但不关心存储容量利用率。

    • 硬盘数:至少需要 2 块硬盘(因为另一块要作为其备份盘,且磁盘数需为偶数,如:2、4、6、…)。

      image-20231009222438705

  • RAID 5:

    • 数据分布:数据和奇偶校验信息交错存储在多个硬盘上(数据分布式存储在多个盘上,但要留 1 个盘来存储奇偶校验信息,所以说数据和校验信息是交错存储的)。

    • 冗余性:允许一个驱动器失效时,可以通过计算奇偶校验信息来重建数据(但要注意失效的这块盘不能是奇偶校验盘,而且不能允许 2 块盘同时失效,因为 RAID 5 的奇偶校验信息仅能提供一块硬盘的容错能力)。

    • 性能:提供良好的读性能,适中的写性能。

    • 容量:总容量等于(驱动器数量-1)乘以每个驱动器的容量(减 1 的原因是因为奇偶校验盘并不存储应用数据)。

    • 用途:适用于需要一定程度冗余和合理性能的应用。

    • 硬盘数:至少需要 3 块硬盘(因为要留 1 块来存储奇偶校验数据,因此这块盘除了存储奇偶校验数据外不存其他应用数据)。

      image-20231009222342258

    注意:要搞清楚奇偶校验大体机制,就是每次写入数据到 RAID 盘都会进行一次奇偶校验计算(生成的奇偶校验块通常被标记为 P 和 Q 或者有时称为 P1 和 P2),并将每次的校验数据存储在一个校验盘中。

  • RAID 6:

    • 数据分布:数据和两个奇偶校验信息交错存储在多个硬盘上(数据分布式存储在多个盘上,但要留 2 个盘来存储奇偶校验信息)。

    • 冗余性:允许两个驱动器失效时,仍能恢复数据(根据一块校验盘只能容错一块数据盘的原则,那两块校验盘自然就能允许两块数据盘同时失效)。

    • 性能:与 RAID 5 相似,但写性能较差(相对 5 来说较差,因为在写入数据时,需要进行两次奇偶校验计算,这会增加写操作的计算负担)。

    • 容量:总容量等于(驱动器数量-2)乘以每个驱动器的容量。

    • 用途:适用于需要更高级别冗余和数据可靠性的应用。

    • 硬盘数:至少需要 3 块硬盘(因为要留 2 块来存储奇偶校验数据,因此这 2 块盘除了存储奇偶校验数据外不存其他应用数据)。

      image-20231009222043205

    注意:要搞清楚奇偶校验大体机制,就是每次写入数据到 RAID 盘都会进行两次奇偶校验计算(即每次计算都会产生两个奇偶校验数据),并将每次的两个校验数据存储在两个校验盘中。

  • RAID 10(RAID 1+0):

    • 数据分布:数据被分为多个组,每个组中的数据是镜像的(说白了就是先做 RAID 1,再在 RAID 1 的基础上做 RAID 0)。

    • 冗余性:具有高冗余性,可以容忍多个驱动器的故障,允许 1 块或多块磁盘失效(虽然 RAID 10可以容忍多个硬盘失效,但前提是这些失效不影响同一数据镜像组内的多个硬盘。例如,如果RAID 10有4块硬盘,分为两个数据镜像组(每个组有2块硬盘),那么可以容忍同时失效的两块硬盘,一块在每个数据镜像组中。这是因为在一个数据镜像组中的两块硬盘都存储相同的数据。)。

    • 性能:提供很好的读写性能,尤其适合高性能应用。

    • 容量:总容量等于驱动器数量的一半。

    • 用途:适用于需要高性能和高冗余性的应用。

    • 硬盘数:至少需要 4 块硬盘

      image-20231009221904638

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 块测试硬盘

image-20231009222923697

2、启动虚拟主机

3、查看是否正常显示磁盘设备

lsblk

image-20231009223314986

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块硬盘,后面跟上具体的磁盘设备。

image-20231009225858168

查看创建的 RAID 信息,及输出的字段解释。

mdadm -D /dev/md6

image-20231009231300779

  • /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

image-20231009232602007

8、创建挂载点并挂载使用

查看 UUID

image-20231009232645646

挂载使用

mkdir -p /opt/raidmd6
echo 'UUID=9b964df3-965b-4a5e-bc67-93570e93b1af /opt/raidmd6 xfs defaults 0 0' >> /etc/fstab

image-20231009232829001

使挂载生效

mount -a

验证是否挂载成功

df -Th

image-20231009233017745

二、故障模拟与数据恢复

2.1 故障模拟

1、创建测试数据

touch test{1..15}.txt

image-20231009233523294

2、移除磁盘,模拟磁盘损坏

这里模拟 RAID 6 阵列中的 /dev/sdd 磁盘损坏,数据不丢失的情况。其他 RAID 级别大家可以去尝试,我这里不再演示。

mdadm /dev/md6 -f /dev/sdd   # 通过命令来模拟即可

# -f:这是一个选项,表示 "fail"(失败)。它告诉 mdadm 命令要执行的操作是标记一个磁盘为失败状态,通常因为该磁盘出现了故障。
# /dev/sdd:这是要标记为失败的磁盘的设备名称。在这个例子中,是 /dev/sdd。

image-20231009234248871

然后查看 RAID 6 阵列状态

mdadm -D /dev/md6

image-20231009234351123

3、查看挂载点的数据是还否存在

如下图,没问题。

image-20231009234417150

2.2 故障恢复

所谓的故障恢复就是更换一块新的磁盘,会自动进行恢复

1、取消挂载

umount /opt/raidmd6

2、重新添加磁盘到 RAID 6 阵列

mdadm /dev/md6 -a /dev/sdd

image-20231009235735598

3、查看恢复进度

mdadm -D /dev/md6

image-20231009235834665

4、验证是否修复完成

mdadm -D /dev/md6

image-20231009235909343

5、修复完毕后再次重新挂载

mount -a

6、验证数据完整性

也是没问题的

image-20231009235943671

至此,软 RAID 的创建、故障恢复就实验完成了!希望看完该文章后,你能整体了解现实中是如何组建的软 RAID 磁盘阵列的。

思考?

RAID 5 如果 1 块盘失效了,而失效的恰好是校验盘,那再次存储数据的时候还会进行数据校验计算产生校验数据吗?或者换新盘后会不会重建校验数据?

答案:

如果在 RAID 5 中的一块硬盘失效,而恰好是存储校验信息的那块硬盘失效,数据恢复将会受到限制,因为校验信息不再可用。在这种情况下,RAID 5 可以继续正常运行,但无法自动进行数据恢复或校验。

此时 RAID 5 的状态会变为"Degraded"(降级),这表示阵列处于一种故障状态。系统管理员应该立即采取措施来替换故障的硬盘,以恢复 RAID 5 的完整性和性能。一旦新的硬盘安装并添加到 RAID 5 阵列中,RAID 控制器将重新构建丢失的校验信息,这是一个计算密集型过程,涉及对其他硬盘上的数据块进行异或(XOR)运算。一旦校验信息被重新生成,RAID 5 阵列将再次具有完整的数据冗余和故障容忍性。

需要注意的是,在替换失效硬盘并进行重建期间,RAID 5 性能可能会受到影响,因为重建操作会占用一定的系统资源和时间。因此,在发生硬盘故障后,尽早替换故障硬盘是重要的,以最小化对 RAID 性能的潜在影响。

—END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1081974.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试经典 150 题 2 —(滑动窗口)— 3. 无重复字符的最长子串

3. 无重复字符的最长子串 方法 class Solution { public:int lengthOfLongestSubstring(string s) {int result 0, length s.length();int start 0, end 0;while(end < length){// 发现有重复字符时&#xff0c;可以直接把左指针移动到第一个重复字符的下一个位置for(i…

Web前端-Vue2+Vue3基础入门到实战项目-Day3(生命周期, 案例-小黑记账清单, 工程化开发入门)

Web前端-Vue2Vue3基础入门到实战项目-Day3 生命周期生命周期 & 生命周期四个阶段生命周期钩子生命周期案例created应用mounted应用 案例 - 小黑记账清单工程化开发入门工程化开发和脚手架项目运行流程index.htmlmain.js 组件化组件注册局部注册全局注册 来源 生命周期 生命…

1312. 序列统计

1312. 序列统计 - AcWing题库 L~R范围可以等同于0~R-L范围 相当于在R-L1个数中选出k个数 令 则变为 相当于在R-Lk个数中选出k个数 需要计算 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;t…

Filter(过滤器)Intercerptor(拦截器)

Filter过滤器 顾名思义&#xff0c;Filter可以对请求进行过滤&#xff0c;当浏览器发送请求时&#xff0c;首先先会被Filter进行拦截&#xff0c;Filter可以决定此次拦截是否放行&#xff0c;如果选择放行&#xff0c;放行之后还会返回Filter执行剩下的代码。 使用方法&…

YOLOv7独家改进:Multi-Dconv Head Transposed Attention注意力,效果优于MHSA| CVPR2022

💡💡💡本文独家改进:Multi-Dconv Head Transposed Attention注意力,可以高效的进行高分辨率图像处理,从而提升检测精度 MDTA | 亲测在多个数据集能够实现大幅涨点 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 �…

初识Java 13-2 异常

目录 标准Java异常 新特性&#xff1a;更好的NullPointerException报告机制 使用finally执行清理 finally有什么用 在return时使用finally 缺陷&#xff1a;异常丢失 异常的约束 构造器 本笔记参考自&#xff1a; 《On Java 中文版》 标准Java异常 Throwable类描述了任…

项目生命周期

阶段 项目经理或组织可以将每一个项目划分为若干个阶段&#xff0c;以便于有效地进行管理控制&#xff0c;并实施该项目组织的日常运作联系起来。 项目划分为四个阶段&#xff1a;概念、计划、实施、结束 生命期 项目阶段合在一起称为项目生命期&#xff0c;项目生命期确定了将…

Go流程控制与快乐路径原则

Go流程控制与快乐路径原则 文章目录 Go流程控制与快乐路径原则一、流程控制基本介绍二、if 语句2.1 if 语句介绍2.2 单分支结构的 if 语句形式2.3 Go 的 if 语句的特点2.3.1 分支代码块左大括号与if同行2.3.2 条件表达式不需要括号 三、操作符3.1 逻辑操作符3.2 操作符的优先级…

【k8s】ingress-nginx通过header路由到不同后端

K8S中ingress-nginx通过header路由到不同后端 背景 公司使用ingress-nginx作为网关的项目&#xff0c;需要在相同域名、uri&#xff0c;根据header将请求转发到不同的后端中在稳定发布的情况下&#xff0c;ingress-nginx是没有语法直接支持根据header做转发的。但是这个可以利…

ubuntu配置yolov5环境

本文硬件平台为工控机&#xff0c;系统环境为ubuntu18 配置yolov5步骤 1.下载pytorch和torchvision软件包 由于在线安装容易出现安装失败&#xff0c;所以本文使用的是本地安装。本文是基于miniconda安装的&#xff0c;miniconda安装参考之前的博客&#xff1a;ubuntu中安装m…

ssm+vue的台球厅管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的台球厅管理系统(有报告)。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring S…

差模电感和共模电感的差别

一、初步了解差模、共模的概念 超链接&#xff0c;点击鼠标打开&#xff1a;X电容和Y电容&#xff1b;差模与共模初认识 二、差模和共模电感的二者区别 共模电感和差模电感&#xff0c;是电路中常用的滤波电感、EMI器件&#xff0c;两者经常以环形电感线圈的方式存在。 首先…

理解http中cookie!C/C++实现网络的HTTP cookie

HTTP嗅探&#xff08;HTTP Sniffing&#xff09;是一种网络监控技术&#xff0c;通过截获并分析网络上传输的HTTP数据包来获取敏感信息或进行攻击。其中&#xff0c;嗅探器&#xff08;Sniffer&#xff09;是一种用于嗅探HTTP流量的工具。 在HTTP嗅探中&#xff0c;cookie是一…

Python一步到位实现图像转PDF自动化处理详解

什么是 img2pdf 库&#xff1f; img2pdf 是一个 Python 库&#xff0c;它可以让你轻松地把多张图像转换为 PDF 文件。它支持多种图像格式&#xff0c;如 JPG, PNG, GIF, BMP 等&#xff0c;并且可以自动调整图像的大小和方向&#xff0c;以适应 PDF 的页面大小和方向。它还可以…

跨域问题-笔记

这里写目录标题 一、什么是跨域&#xff1a;二、跨域问题解决思路&#xff1a;1.从浏览器入手2.从域名入手3.从jsonp入手4.从代理入手 一、什么是跨域&#xff1a; 跨域指的是不同服务器之间不能相互访问各自的资源或者数据&#xff0c;这出于一个策略——“同源策略”&#x…

【力扣】2578. 最小和分割

【力扣】2578. 最小和分割 文章目录 【力扣】2578. 最小和分割1. 题目介绍2. 思路3. 解题代码4. 疑问&#xff1f;5. Danger参考 1. 题目介绍 给你一个正整数 num &#xff0c;请你将它分割成两个非负整数 num1 和 num2 &#xff0c;满足&#xff1a; num1 和 num2 直接连起来…

Python 入门

目录 1 Python介绍1.1 特点1.2 什么时候不应该用Python1.3 Python解释器 2 IDLE开发环境使用入门2.1 IDLE 两种模式2.2 IDLE常用快捷键 3 程序基本格式4 图形化程序设计5 绘制奥运五环 声明&#xff1a;本文作为自己的学习笔记&#xff0c;欢迎大家于本人学习交流&#xff0c;转…

联邦学习综述二

联邦学习漫画 联邦学习漫画链接: https://federated.withgoogle.com/ Federated Analytics: Collaborative Data Science without Data Collection 博客链接: https://blog.research.google/2020/05/federated-analytics-collaborative-data.html 本篇博客介绍了联邦分析&a…

JTS:10 Crosses

这里写目录标题 版本点与线点与面线与面线与线 版本 org.locationtech.jts:jts-core:1.19.0 链接: github public class GeometryCrosses {private final GeometryFactory geometryFactory new GeometryFactory();private static final Logger LOGGER LoggerFactory.getLog…

掌握 Web3 的关键工具:9大宝藏APP助你玩转区块链

Web3世界充满了无限机遇&#xff0c;但要掌握它&#xff0c;您需要合适的工具&#xfffd;&#xfffd;&#xfffd;。今天&#xff0c;我将为您介绍9款Web3必备APP&#xff0c;涵盖钱包、DEX、和工具三大类别。而且&#xff0c;我要特别强烈推荐一个强大的钱包——Bitget Wall…