RockyLinux-软件实现RAID5

一、背景

        RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)是一种将多个物理硬盘驱动器组合成单一逻辑单元的技术,目的是提高存储性能、可靠性和/或数据冗余度。虽然早期的名字中包含“独立”(Independent),后来通常解释为“相互依存”(Interdependent),反映了磁盘之间的相互依赖关系。

       RAID技术可以分为多个级别,每个级别有不同的特性和用途。以下是常见的几种RAID级别

  1. RAID 0 (Striping):

    • 特点:数据被分割并行存储在多个磁盘上。
    • 优点:提高了数据访问速度。
    • 缺点:没有数据冗余,任意一块磁盘故障会导致所有数据丢失。
  2. RAID 1 (Mirroring):

    • 特点:数据在两个或更多的磁盘上完全复制。
    • 优点:提供了数据冗余,提高了数据可靠性。
    • 缺点:存储效率较低,因为每一份数据都需要两倍的空间。
  3. RAID 5 (Striping with Distributed Parity):

    • 特点:数据分布在多个磁盘上,并且每个条带组包含一个奇偶校验块。
    • 优点:提供了数据冗余,并且在单个磁盘故障时仍能保证数据完整。
    • 缺点:在重建过程中性能会下降,而且只能容忍一个磁盘故障。
  4. RAID 6 (Striping with Dual Parity):

    • 特点:类似于RAID 5,但有两个奇偶校验块,可以容忍两个磁盘同时故障。
    • 优点:提供了更高的数据冗余度。
    • 缺点:存储效率比RAID 5更低。
  5. RAID 10 (Striping with Mirroring):

    • 特点:结合了RAID 0和RAID 1的优点,先镜像再条带化。
    • 优点:同时拥有RAID 0的速度和RAID 1的数据保护。
    • 缺点:成本较高,因为需要四块磁盘才能形成一个有效的RAID 10阵列。
  6. RAID 0+1 (Striping with Mirroring):

    • 特点:先条带化再镜像,与RAID 10类似。
    • 优点:同样结合了速度和数据保护。
    • 缺点:同样成本较高。

二、实现方式

1、硬件实现

        硬件RAID通常是通过专门的RAID控制器来实现的。这种控制器内置了处理RAID算法的专用硬件,可以直接处理磁盘数据的条带化(striping)、镜像(mirroring)或奇偶校验(parity checking)等功能,减轻主机CPU的负担。

优点
  1. 性能高:由于RAID处理任务由专用硬件承担,不会占用主机CPU资源,因此通常具有较高的I/O性能。
  2. 独立性:硬件RAID控制器通常是独立于主机系统的,更换操作系统或硬件时不需要重新配置RAID。
  3. 热插拔:支持热插拔功能,可以在不关闭系统的情况下更换磁盘。
  4. 高级特性:一些高端RAID控制器支持更高级的功能,如缓存加速、电池备份保护等。
缺点
  1. 成本高:相对于软件RAID而言,硬件RAID需要额外购买RAID控制器,增加了成本。
  2. 互操作性差:不同品牌或型号的RAID控制器之间可能存在兼容性问题。
  3. 局限性:某些低端RAID控制器可能在处理复杂任务时表现不佳,如RAID 5或RAID 6。

2、软件实现

         软件RAID是通过操作系统内核中的驱动程序或用户空间工具来实现的。所有的RAID处理任务都是由主机CPU来完成的。Linux下的mdadm就是一个常用的软件RAID工具。

优点
  1. 灵活性高:可以根据需要灵活配置RAID级别和参数。
  2. 成本低:无需额外硬件,只需要支持操作系统即可。
  3. 便携性强:配置文件保存在磁盘上,可以跨平台迁移。
  4. 开放性好:由于是基于标准协议,所以互操作性较好。
缺点
  1. 性能受限:由于RAID处理任务由主机CPU承担,因此可能会影响整体性能。
  2. 依赖操作系统:如果操作系统崩溃,可能会导致RAID配置不可用。
  3. 热插拔限制:虽然现代操作系统支持热插拔,但在某些情况下可能不如硬件RAID方便。

3、对比总结

        选择硬件RAID还是软件RAID,取决于具体的应用场景和需求。对于需要高性能、高可靠性的关键业务,硬件RAID可能是更好的选择。而对于成本敏感或需要高度定制化的环境,软件RAID则更为合适。在实际部署时,还需要考虑现有的硬件和软件环境,以及维护和管理的成本。

        从我实际工作来看,几乎没人会用软件实现RAID,影响性能不说,安全性也不得到保证。操作系统崩溃这些原因,也可能导致RAID数据找不回来或者访问不了了。 软件实现纯属学习用途。

        毕竟软件层面也只是记录了一下把硬件层面等东西进行抽象记录,最后模拟硬件RAID冗余原理实现数据冗余备份。 那如果操作系统哪天崩了,数据都找不回,亏大发。

        但是硬件层面的RAID阵列卡,坏的概率相对较低。毕竟没人整体去操作和碰这个硬件阵列卡。硬件阵列卡和操作系统解耦了,操作系统崩了和我本身阵列卡没关系。相互之间几乎不会收到影响。

 三、RockyLinux安装与软件RAID实验

1、安装RockyLinux

        Centos7已经已停止维护了,改用RockyLinux。

        官网: https://rockylinux.org      

         下载最小版本的ISO镜像文件。

2、安装mdadm软件

yum install mdadm -y

 

3、虚拟机添加5块硬盘

 

4、mdadm创建RAID5

mdadm --create /dev/md0 --auto=yes --level=5 --chunk=256K --raid-devices=4 --spare-devices=1 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
  1. --create: 创建一个新的RAID阵列。
  2. /dev/md0: 指定新创建的RAID阵列的设备名称。
  3. --auto=yes: 自动启动RAID阵列,不需要手动确认。
  4. --level=5: 指定创建的RAID类型为RAID 5。RAID 5提供数据分布和奇偶校验信息分散在所有磁盘上,可以容忍单个磁盘的故障。
  5. --chunk=256K: 指定条带(stripe)的大小为256KB。较大的条带可以改善顺序读取性能,较小的条带可以改善随机读取性能。
  6. --raid-devices=4: 指定参与RAID阵列的有效磁盘数量为4。在RAID 5中,有效磁盘数量减去1等于可以容忍的故障磁盘数量。
  7. --spare-devices=1: 指定使用1块磁盘作为备用磁盘(hot spare)。当某个磁盘故障时,备用磁盘会自动加入阵列并进行数据重建。
  8. /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf: 指定用于创建RAID阵列的磁盘列表。在这个例子中,共有5块磁盘,其中4块用于构成RAID 5阵列,1块作为备用磁盘。

 

5、查看md0的构建情况

madm --detail /dev/md0

 

上图可以看到构建百分比,百分比进度到100%这个md0设备才能正常使用。等到100%,如图所示:   可以看到B、C、D、E  4个盘处于活跃状态, F盘处于备用状态

 6、为md0创建文件系统且初始化

mkfs.xfs -f -d su=256k,sw=3 -r extsize=768k /dev/md0

7、mount挂载使用md0

mount /dev/md0 /data/

 8、模拟B盘故障,F盘作为备用盘会自动顶上去

mdadm --fail /dev/md0 /dev/sdb

 查看md0状态:

我们发现此时F盘作为备用盘顶上来, B盘已经损坏, 数据在重新构建中。构建完毕如下:

此时再查看数据,数据正常读取和写入:

  四、总结

        通过软件实现RAID仅仅只是一个学习过程,可以模拟磁盘损坏,备用磁盘会顶上去以及各种过程。但是,生产环境基本上没人会用软件层面实现RAID,一般都会购买磁盘阵列RAID硬件卡来实现RAID,才能保证性能和安全性、可靠性。

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

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

相关文章

【资料分析】常见的坑

in 比较或计数类问题 差别大的基期比较,可以直接用现期进行比较 注意单位可能不同! 注意顺序是从小到大还是从大到小 以及老问题,名字本身就叫XX增量,XX增加值,而非还要另外去算的东东 给出的图表可能是不完整的 2…

通过SQL语句判断奇偶数的几种方法

文章目录 1. 准备数据2. 使用 % 判断奇偶数3. 使用 MOD 判断奇偶数4. 使用按位与运算符 & 1. 准备数据 假设我们有一张测试表test_numbers -- 创建测试表 CREATE TABLE test_numbers (number_value INT );-- 插入测试数据 INSERT INTO test_numbers (number_value) VALUE…

Qt:饿汉单例(附带单例使用和内存管理)

前言 本文主要写饿汉单例以及单例的释放&#xff0c;网上很多教程只有单例的创建&#xff0c;但是并没有告诉我们单例的内存管理&#xff0c;这就很头疼。 正文 饿汉式单例 // SingletonClass.h #ifndef SINGLETONCLASS_H #define SINGLETONCLASS_H #include <QObject&g…

PCIe进阶之TL:First/Last DW Byte Enables Rules Traffic Class Field

1 First/Last DW Byte Enables Rules & Attributes Field 1.1 First/Last DW Byte Enables Rules Byte Enable 包含在 Memory、I/O 和 Configuration Request 中。本文定义了相应的规则。Byte Enable 位于 header 的 byte 7 。对于 TH 字段值为 1 的 Memory Read Request…

【stm32笔记】使用rtt-studio与stm32CubeMx联合创建项目

使用rtt-studio与stm32CubeMx联合创建项目 创建rt-thread项目 设置项目信息 在项目资源管理器中“右击“&#xff0c;创建RRT studio 项目 双击“RT-Thread 项目“。 选择MCU&#xff0c;设置UART&#xff0c;以及调试方式。添加项目名称&#xff0c;点击“完成“按钮。 …

长春自闭症寄宿学校:开启创造力与艺术之旅

长春自闭症寄宿学校的启示&#xff1a;在广州星贝育园&#xff0c;自闭症儿童开启创造力与艺术之旅 当我们谈及自闭症儿童的教育与成长时&#xff0c;总有一股力量在推动着我们不断探索与创新。虽然题目中提及了“长春自闭症寄宿学校”&#xff0c;但本文将聚焦于广州的星贝育…

使用jmeter做性能测试实践过程中需要注意什么

前言 在驾驭Apache JMeter进行性能测试之旅中&#xff0c;深刻理解其特性和限制是至关重要的。以下是提升JMeter效能的关键策略&#xff0c;旨在挖掘其潜力&#xff0c;克服局限&#xff0c;实现精准测试。 1.精确调控线程数 推荐阈值&#xff1a;将线程数控制在300以内&…

SSH公私钥后门从入门到应急响应

目录 1. SSH公私钥与SSH公私钥后门介绍 1.1 SSH公私钥介绍 1.1.1 公钥和私钥的基本概念 1.1.2 SSH公私钥认证的工作原理(很重要) 1.2 SSH公私钥后门介绍 2. 如何在已拿下控制权限的主机创建后门 2.1 使用 Xshell 生成公钥与私钥 2.2 将公钥上传到被需要被植入后门的服务…

AIGC技术下的动画新纪元:效率与创意的双重飞跃

文章目录 一、技术革新&#xff1a;从辅助到引领二、创作效率与质量的双重飞跃三、创新与艺术的深度融合四、挑战与展望《Procreate Dreams动画设计与制作完全解析》亮点内容简介作者简介目录 《猎头高情商沟通实务》亮点内容简介作者简介 在科技日新月异的今天&#xff0c;人工…

初始Python篇(1)——输入输出函数、数据类型、运算符

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; Python 以B站up主&#xff1a;Python_子木的视频 &#xff1a;花了2万多买的Python教程全套&#xff0c;现在分享给大家&#xff0c;入门到精…

C++进阶 二叉搜索树的讲解

二叉搜索树的概念 二叉搜索树又称为二叉排序树。 二叉搜索树的性质 若它的左子树不为空&#xff0c;则左子树上所有结点的值都小于等于根结点的值若它的右子树不为空&#xff0c;则右子树上所有结点的值都大于等于根结点的值它的左右子树也分别为二叉搜索树二叉搜索树中可以支持…

vscode搭建ros开发环境问题记录(更新...)

文章目录 vscode 不能自动补全 开发环境&#xff1a; vmware 15.7 ubuntu 20.04 ros noetic vscode 不能自动补全 这里将头文件已经正确包含到c_cpp_properties.json中代码中仍然不能自动补全&#xff0c; 将C_CPP插件设置中的Intelli Sense Engine 设置为TagParser,然后重新加…

MySQL:基本查询操作

插入 基本插入语法&#xff1a; insert [into] 表名 (列1, 列2 ...) values (值1, 值2 ...); create table students( id int unsigned primary key auto_increment, sn int not null unique comment 学号, name varchar(20) not null, tel varchar(20) );一次性指定所有值&…

损耗金属件检测系统源码分享

损耗金属件检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

25达能笔试测评秋招校招认知和行为偏好测评题型分析

达能认知和行为偏好测评笔试测评用的游戏化测评数字推理&#xff0c;具体有四类&#xff1a; 职业行为测试&#xff1a;从选项中选择你更偏向的那个&#xff0c;在选择的时候就可以往达能的企业文化相关方向靠。 motion challenge&#xff1a;类似华容道呢&#xff0c;要用最…

18063 圈中的游戏

### 思路 1. 创建一个循环链表表示围成一圈的 n 个人。 2. 从第一个人开始报数&#xff0c;每报到 3 的人退出圈子。 3. 重复上述过程&#xff0c;直到只剩下一个人。 4. 输出最后留下的人的编号。 ### 伪代码 1. 创建一个循环链表&#xff0c;节点表示每个人的编号。 2. 初始…

初识软件测试

目录 一、什么是测试 1. 生活中的测试场景 2. 为什么需要软件测试 3. 软件测试定义 二、测试的岗位有哪些 1. 软件测试开发工程师 2. 测试工程师 &#x1f334;高频面试题&#xff1a; 三、软件测试和开发的区别 1. 工作内容 2. 难易程度上 3. 工作环境 4. Money …

【WPF】桌面程序开发之xaml页面绑定数据模型详解

使用Visual Studio开发工具&#xff0c;我们可以编写在Windows系统上运行的桌面应用程序。其中&#xff0c;WPF&#xff08;Windows Presentation Foundation&#xff09;项目是一种常见的选择。然而&#xff0c;对于初学者来说&#xff0c;WPF项目中xaml页面的布局设计可能是一…

java项目之在线考试与学习交流网页平台源码(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的在线考试与学习交流网页平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于JAVA语言…

C++数据结构-树的概念及分类介绍(基础篇)

1.什么是树 树是数据结构中的一种&#xff0c;其属于非线性数据结构结构的一种&#xff0c;我们前文所提到的数据结构多数都是线性的&#xff0c;这也是较为简单的数据结构&#xff0c;而接下来的树与图均属于非线性数据结构&#xff0c;也是概念极多的一类。 树是由结点或顶…