RockyLinux-软件实现RAID5

news2024/9/24 13:24:48

一、背景

        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.coloradmin.cn/o/2138527.html

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

相关文章

【C++】stack 和 queue 以及 容器适配器

文章目录 一、stack1.1 stack的使用1.2 stack的模拟实现 二、queue2.1 queue的使用2.2 queue的模拟实现 三、优先级队列1.优先级队列的介绍2. priority_queue的使用的使用3.模拟实现优先级队列 四、 容器适配器1.STL标准库中stack和queue的底层结构2.deque(双端对列…

Unity3D 发布后去除Development Build显示

问题描述: Build后在视野右下角看到“Development Build”白色小字 解决方法: build时不勾选Development Build项 PS: 游戏开发unity杂项知识系列:build时Development Build的作用_unity development build-CSDN博客

结构体的内存对齐

对⻬规则: 1.结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处 2.其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。 对⻬数编译器默认的⼀个对⻬数与该成员变量⼤⼩的较⼩值。 但一些编译器下并没有默认对其数 3.结…

ElK 8 收集 Nginx 日志

1. 说明 elk 版本:8.15.0 2. 启个 nginx 有 nginx 可以直接使用。我这里是在之前环境下 docker-compose.yml 中启动了个 nginx: nginx:restart: alwaysimage: nginx:1.26.1ports:- "80:80"- "443:443"volumes:#- ./nginx/html:/…

探索Python轻量级数据库:TinyDB的奇妙之旅

文章目录 探索Python轻量级数据库:TinyDB的奇妙之旅背景:为何选择TinyDB?什么是TinyDB?如何安装TinyDB?简单库函数使用方法场景应用常见Bug及解决方案总结 探索Python轻量级数据库:TinyDB的奇妙之旅 背景&…

H5 three.js 实现六年级观察物体

o(&#xffe3;▽&#xffe3;)ブ 我又带着新的demo来啦~ 预览 功能点 立方体的阴影 立方体的添加 位置记录 最大限制 三视图展示 立方体的移除 答题模式 随机出题 题库出题 源码 注释算是比较全了&#xff0c;可能部分会有点绕&#xff0c;还能够再优化一下~ <!DOCTYPE …

51单片机+proteus+(DS1302+DS18B20)

目录 1.温度传感器检测&#xff08;DS18B20&#xff09; 1.1基本概念 1.1.1 DS18B20的简介 1.1.2 DS18B20的框图 ​编辑 1.1.3 DS18B20的指令 1.1.4 总线时序协议 1.2代码 1.2.1DS18B20的初始化代码 1.2.2DS18B20的读代码 1.2.3DS18B20的写时序 ​编辑 1.2.4DS18B20…

[C语言]第九节 函数一基础知识到高级技巧的全景探索

目录 9.1 函数的概念 9.2 库函数 9.2.1 标准库与库函数 示例&#xff1a;常见库函数 9.2.2 标准库与头文件的关系 参考资料和学习工具 如何使用库函数 ​编辑 9.3 ⾃定义函数 9.3.1 函数的语法形式 9.3.2函数的举例 9.4 实参与形参 9.4.1 什么是实参&#xff1f; 9…

嵌入式单片机中数码管基本实现方法

1. 点亮数码管 本节课利用已经学习的LED知识去控制一个8位数码管。 本节的原理比较简单。不需要多少时间讲。 更多时间是跟大家一起编码调试,从中学习一些编码思路和学习方法。 1.1. 什么是数码管 数码管是什么?下图就是一个数码管 从硬件上个看,其实就是8个LED组合…

Python实用的27个实例,涵盖从基础到进阶的所有领域!

Python 是一种广泛使用的高级编程语言&#xff0c;以其简洁的语法和丰富的库支持而受到开发者们的喜爱。以下列出了 27 个实用的 Python 实例&#xff0c;涵盖从基础到进阶的不同领域&#xff0c;帮助你提升编程技能。 1. 打印 "Hello, World!" print("Hello,…

企业微信如何利用群聊机器人定时推送消息

背景&#xff1a;公司其他部门有在群聊中新建机器人并定时推送消息的需求&#xff0c;webhook已准备好 1、准备一台服务器或者虚拟机&#xff0c;编写脚本 [rootlocalhost opt]# vim crontab.sh curl https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key4d38964b-04f2-44…

【Arduino】国产arduino驱动

买的国产 arduino&#xff0c;如果 windows识别不到。或者用 Arduino自带的Driver程序仍不能驱动。又不想用驱动精灵&#xff0c;可以直接安装驱动程序 99%大概率是CH340芯片&#xff0c;驱动下载连接如下。 你可以从 WCH 官方网站 下载并安装 CH340 驱动程序 安装即可用&am…

进阶岛 renwu5: 茴香豆:企业级知识问答工具实践闯关任务

进阶岛 renwu5: 茴香豆&#xff1a;企业级知识问答工具实践闯关任务 renwu: https://kkgithub.com/InternLM/Tutorial/blob/camp3/docs/L2/Huixiangdou/task.md 在 InternStudio 中利用 Internlm2-7b 搭建标准版茴香豆知识助手&#xff0c;并使用 Gradio 界面完成 2 轮问答&a…

什么是java的spi?

Java SPI&#xff08;Service Provider Interface&#xff09;是一种提供服务发现机制的设计模式&#xff0c;允许在运行时动态地发现、加载和替换服务的实现。SPI机制的核心思想是&#xff1a;通过接口定义服务&#xff0c;并且使用外部的实现类来提供该服务的具体功能。 目录…

这些学校就业不错且好考,努努力就能上岸的江浙沪学校!

这些学校就业不错且好考&#xff0c;努努力就能上岸&#xff0c;搭配历年数据&#xff0c;供大家参考~ 目录 ① 南京信息工程大学 ② 南京工业大学 ③ 浙江工业大学 ④ 中国计量大学 ⑤ 上海电力大学 ① 南京信息工程大学 复试线招生人数 双一流高校&#xff0c;金牛湖…

3.4.2 __ipipe_init_early之fixup_percpu_data()

点击查看系列文章 》 Interrupt Pipeline系列文章大纲-CSDN博客 3.4.2 __ipipe_init_early之fixup_percpu_data() 这个函数只有在CPU是SMP对称多core的情况下&#xff0c;才会真正运作&#xff0c;否则就是个空函数。 #ifdef CONFIG_SMPstatic inline void fixup_percpu_data…

约瑟夫环和一元多项式修正版

这里先附上上一篇博文的链接大家可以对比着看&#xff0c;错误已经改正https://blog.csdn.net/2302_78946488/article/details/141751514?spm1001.2014.3001.5501 约瑟夫环 以下是详细代码 //约瑟夫环 #include<stdio.h> #include<stdlib.h> //建立链表结点 str…

哈夫曼编码——CSP-J1真题讲解

假设有一组字符{a,b,c,d,e,f}&#xff0c;对应的频率分别为5%、9%、12%、13%、16%、45%。请问以下哪个选项是字符a,b,c,d,e,f分别对应的一组哈夫曼编码?( ) A. 1111&#xff0c;1110&#xff0c;101&#xff0c;100&#xff0c;110&#xff0c;0 B. 1010&#xff0c;1001&…

视频工具EasyDarwin生成RTMP给WVP拉流列表

效果 运行 登录 http://127.0.0.1:10086/ admin/admin 创建RTMP服务

离线数仓ODS层准备

离线数仓ODS层设计-Operational Data Store ODS层设计要点ODS层-日志表-json表SERDEhive导入json表&#xff08;hive表和json表 字段不一致 解决方案&#xff09; 复杂数据类型日志表-建表语句 ODS层设计要点 &#xff08;1&#xff09;ODS层的表结构设计依托于从业务系统同步…