一文了解RAID技术基本概念

RAID是数据存储技术,旨在提高磁盘的IO吞吐以及提供更为可靠的数据安全。在实际工作中经常听到RAID相关名称,那么RAID技术的基本概念是什么、不同RAID级别有什么特性,本文将简单介绍,以了解。


1、RAID技术基本概念
1.1 RAID基本概念介绍

RAID(Redundant Array of Independent Disks,独立冗余磁盘阵列)是一种数据存储技术,旨在通过组合多个物理硬盘驱动器来提供更高的数据传输速率、更大的存储容量以及数据冗余和容错功能。RAID的发展历史可以追溯到1987年,当时加州大学伯克利分校的计算机科学家D. A. Patterson教授等首次在研究论文中提出了RAID的概念。随后,这一概念在学术界和产业界引起了广泛关注。

RAID的设计初衷是提供高端的存储功能和冗余的数据安全,在整个系统中,RAID被看作是由两个或更多磁盘组成的存储空间,通过并发地在多个磁盘上读写数据来提高存储系统的I/O性能。RAID中主要有三种关键技术:镜像(Mirroring)、数据条带化(Data Stripping)和数据校验(Data parity):

  • 镜像(Mirroring):镜像是一种冗余技术,为磁盘提供保护功能,防止磁盘发生故障而造成数据丢失。对于RAID而言,采用镜像技术将会同时在阵列中产生两个完全相同的数据副本,并分布在两个不同的磁盘驱动器组上。当一个数据副本失效不可用时,外部系统仍可正常访问另一副本,不会对应用系统运行和性能产生影响。镜像技术提供了非常高的数据安全性,但其代价也是非常昂贵的,至少需要双倍的存储空间。
  • 数据条带化(Data Stripping):RAID由多块磁盘组成,数据条带技术将数据以块的方式分布存储在多个磁盘中,从而可以对数据进行并发处理。这样写入和读取数据就可以在多个磁盘上同时进行,并发产生非常高的聚合I/O,有效提高了整体I/O性能,而且具有良好的线性扩展性。数据条带化虽然可以提升IO性能,但是不能保证数据可靠性和可用性。
  • 数据校验(Data parity):数据校验也是一种冗余技术,它用校验数据来提供数据的安全,可以检测数据错误,并在能力允许的前提下进行数据重构。相对镜像,数据校验大幅缩减了冗余开销,用较小的代价换取了极佳的数据完整性和可靠性。采用数据校验时,RAID要在写入数据同时进行校验计算,并将得到的校验数据存储在RAID成员磁盘中。校验技术相对于镜像技术的优势在于节省大量开销,但由于每次数据读写都要进行大量的校验运算,对计算机的运算速度要求很高,必须使用硬件RAID控制器。在数据重建恢复方面,检验技术比镜像技术复杂得多且慢得多。

RAID技术通过不同的级别和配置方式来实现不同的性能提升和数据保护。不同的RAID级别在数据可靠性、读写性能、成本等方面有着不同的权衡。因此,在选择RAID技术时,需要根据实际应用需求、成本预算以及系统的容错能力等因素进行综合考虑。

1.2 RAID不同技术级别

RAID主要利用数据条带、镜像和数据校验技术来获取高性能、可靠性、容错能力和扩展性,根据运用或组合运用这三种技术的策略和架构,可以把RAID分为不同的等级,以满足不同数据应用的需求。目前业界公认的标准是RAID0~RAID6,在实际应用领域中使用最多的RAID等级是RAID0、RAID1、RAID5、RAID6和RAID10。

在这里插入图片描述

1.2.1 RAID 0(条带化)

RAID0是一种简单的、无数据校验的数据条带化技术,RAID0将磁盘条带化后组成大容量的存储空间,并将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并读访问。RAI0可以充分利用总线带宽,提升并发IO吞吐,并且不需要数据校验,因此在所有RAID等级中性能是最高的。

在这里插入图片描述

  • 特性:通过将数据分散到多个硬盘上并行存取,提供最高的存储性能。
  • 优点:读写性能高,成本低。
  • 缺点:无容错能力,一旦硬盘损坏,数据全部丢失。
1.2.2 RAID 1(镜像)

RAID1利用镜像技术,将数据完全一致地分别写到工作磁盘和镜像磁盘,因此它的磁盘空间利用率为50%。RAID1对写入性能会有影响,但是读没有影响。RAID1提供了最佳的数据保护,一旦工作磁盘发生故障,系统自动从镜像磁盘读取数据,不会影响可用性。

在这里插入图片描述

  • 特性:数据在两个或多个硬盘上完全镜像,提供数据冗余。
  • 优点:读性能提升,数据安全性高,一块硬盘故障时不会丢失数据。
  • 缺点:空间利用率低,成本较高。
1.2.3 RAID 5(分布式奇偶校验)

在RAID 5中,数据被分成多个块,并按照固定大小的条带(Stripe)分布在不同的硬盘驱动器上。每个条带包含数据块和奇偶校验块。数据块存储实际的用户数据,而奇偶校验块则用于计算奇偶校验信息。奇偶校验信息是通过对其他硬盘驱动器上相同位置的数据块进行异或(XOR)运算得到的。每个条带中的奇偶校验块包含对应数据块的奇偶校验信息。与RAID 3和RAID 4不同之处是,RAID5中数据块和对应的校验信息存保存在不同的磁盘上,当一个数据盘损坏时,系统可以根据同一条带的其他数据块和对应的校验数据来重建损坏的数据。

在这里插入图片描述

  • 特性:数据条带化并分布在所有硬盘上,奇偶校验信息也分布存储。
  • 优点:读写性能良好,同时提供数据冗余和容错能力。
  • 缺点:在写操作时需要计算校验值,可能稍慢于RAID 0。
1.2.4 RAID 6(带有两种分布存储的奇偶校验)

RAID 6中引入双重校验的概念,可以保证当磁盘阵列中同时出现两个磁盘失效时,磁盘阵列仍能够继续工作,不会发生数据丢失。RAID 6思想最常见的实现方式是采用两个独立的校验算法,假设称为P和Q,校验数据可以分别存储在两个不同的校验盘上,或者分散存储在所有成员磁盘中。当两个磁盘同时失效时,可以通过求解两元方程来重建两个磁盘上的数据。虽然RAID 6的安全等级提高了,但是它的成本要高于RAID 5许多,写性能也较差,并有设计和实施非常复杂,实际很少使用到。

在这里插入图片描述

  • 特性:与RAID 5类似,但提供两种校验方式,进一步增强容错能力。
  • 优点:数据安全性极高,能容忍两块硬盘同时故障。
  • 缺点:空间利用率较RAID 5更低,成本也更高。
1.2.5 RAID10或RAID01(镜像与条带化结合)

RAID 10在技术实现上结合了RAID 1的镜像(Mirroring)和RAID 0的条带化(Striping)两种技术,从而提供了数据的高可靠性和高性能。

  1. 首先RAID 10创建了两个独立的RAID 1阵列。在RAID 1中,数据被写入到两个硬盘上,形成镜像。这意味着每个磁盘上都存储了完全相同的数据。这种冗余设计使得如果一个硬盘发生故障,数据仍然可以从另一个硬盘上读取,从而保证了数据的高可靠性。
  2. 接着这两个独立的RAID 1阵列再组成一个RAID 0阵列。在RAID 0中,数据被分割成多个块,并分散存储在不同的硬盘上。这种条带化技术可以并行地读写多个硬盘,从而提高了数据的访问速度。

RAID 10的整体结构可以看作是先将数据镜像到两个硬盘上,然后再将这些镜像数据进行条带化存储。但是RAID 10至少需要四个硬盘来实现,因为至少需要两组镜像,因此RAID 10在硬件成本上相对较高,但其在性能和可靠性上的优势使得它适用于对性能要求较高的场景,如数据库服务器、重要业务系统等。

在这里插入图片描述

  • 特性:先对硬盘进行镜像,再对镜像结果进行条带化。
  • 优点:结合RAID 0和RAID 1的优点,提供高性能和容错能力。
  • 缺点:成本较高,需要至少四个硬盘。
1.2.6 RAID不同技术对比

RAID等级的选择主要考虑数据安全性、 I/O性能和硬件成本。在实际应用中主流RAID等级包括RAID 0、RAID 1、RAID 3、RAID 5、RAID 6和RAID 10,它们之间的技术对比情况如下。其中RAID 0性能最佳,但是没有保证数据的可用性;综合考虑安全和性能下,RAID 1是最佳选择;在安全、性能和成本综合考虑,RAID 5或RAID 6更为适合;对于一些核心业务系统,RAID 10是最佳选择。

在这里插入图片描述

1.3 RAID技术实现方式

要实现RAID技术,可以通过硬件RAID卡方式如独立RAID卡或零通道RAID卡,也可以通过操作系统软RAID方式实现。相对而言硬件RAID卡在性能和稳定性上更具优势。

1.3.1 外接RAID卡

RAID卡集成CPU和Cache Memory,通过集成或借用主板上的SCSI控制器来管理硬盘。根据是否集成SCSI控制器又分为独立RAID卡和零通道RAID卡。

在这里插入图片描述

外接RAID卡通过其硬件RAID控制器,接收主机发送的数据,按照预设的规则进行数据的分割、条带化,并根据所选的RAID级别,将数据分散存储到多个磁盘驱动器上。同时,对于某些RAID级别,它还会生成并存储冗余数据,如镜像数据或奇偶校验信息,以确保数据的完整性和可靠性。

1.3.2 操作系统软RAID

软RAID没有专用的控制芯片和I/O芯片,完全由操作系统和CPU来实现RAID功能。软RAID在配置管理和数据恢复都比较简单,但是RAID所有任务的处理完全由CPU来完成,如计算校验值,这种方式需要消耗大量的运算资源,相比硬件RAID卡性能上会受到影响。在Linux系统中实现软RAID操作方法如下:

1)使用fdisk检查和创建分区

#fdisk -l列出系统磁盘及分区信息
#使用fdisk为每个磁盘创建分区
fdisk /dev/sdx

2)使用mdadm命令创建RAID设备

#RAID 0
mdadm -C /dev/md0 -l raid0 -n 2 /dev/sd[b-c]1
#RAID 1
mdadm --create /dev/md1 --level=mirror --raid-devices=2 /dev/sd[d-e]1
#RAID 5
mdadm --create /dev/md2 --level=5 --raid-devices=3 /dev/sd[b-d]1
#RAID 6
mdadm --create /dev/md3 --level=6 --raid-devices=4 /dev/sd[b-e]1
#RAID 10
mdadm --create /dev/md4 --level=10 --raid-devices=4 /dev/sd[b-e]1

3)创建文件系统

[root@centos ~]# mkfs.ext4 /dev/md1
[root@centos ~]# mkdir /raid1
[root@centos ~]# mount /dev/md1 /raid1

参考资料:

  1. https://zhuanlan.zhihu.com/p/638851895
  2. https://blog.csdn.net/xijinno1/article/details/130544513
  3. https://www.techtutsonline.com/raid-configuration-in-linux/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp中uni.navigateTo传递变量

效果展示: 核心代码: uniapp中uni.navigateTo传递变量 methods: {changePages(item) {setDatas("maintenanceFunName", JSON.stringify(item)).then((res) > {uni.navigateTo({url: /pages/PMS/maintenance/maintenanceTypes/maintenanceT…

python开发poc2,爆破脚本

#本课知识点和目的: ---协议模块使用,Request 爬虫技术,简易多线程技术,编码技术,Bypass 后门技术 下载ftp服务器模拟器 https://lcba.lanzouy.com/iAMePxl378h 随便创建一个账户,然后登录进去把ip改成…

从头开发一个RISC-V的操作系统(四)嵌入式开发介绍

文章目录 前提嵌入式开发交叉编译GDB调试,QEMU,MAKEFILE练习 目标:通过这一个系列课程的学习,开发出一个简易的在RISC-V指令集架构上运行的操作系统。 前提 这个系列的大部分文章和知识来自于:[完结] 循序渐进&#x…

五一假期来临,各地景区云旅游、慢直播方案设计与平台搭建

一、行业背景 经文化和旅游部数据中心测算,今年清明节假期3天全国国内旅游出游1.19亿人次,按可比口径较2019年同期增长11.5%;国内游客出游花费539.5亿元,较2019年同期增长12.7%。踏青赏花和户外徒步成为假期的热门出游主题。随着…

Matlab 修改图例顺序

对于使用 .m 文件绘制的图片,可以修改程序中图例的顺序来改变图片的图例。如果图片所对应的 .fig 文件已经存在,而且不便修改源程序,则可以通过如下方式来修改图例: step 1: 打开fig文件,然后点击绘图浏览器 step 2&…

STC89C51学习笔记(五)

STC89C51学习笔记(五) 综述:文本讲述了代码中速写模板的创建、如何将矩阵键盘的按键与数字一一对应以及如何创建一个矩阵键盘密码锁。 一、速写模板 点击“templates”,再鼠标右键选择配置,按照以下方式即可修改一些…

【WEEK6】 【DAY7】MD5 Encryption Transactions【English Version】

2024.4.7 Sunday Following the previous article 【WEEK6】 【DAY3】MySQL Functions【English Version】 Contents 5.3. MD5 Encryption5.3.1. Introduction5.3.2. Testing MD5 Encryption5.3.2.1. Plain Text Passwords5.3.2.2. Implementing Data Encryption5.3.2.3. Encry…

位域与联合体巧妙使用

在编写dbc报文的协议解析时&#xff0c;使用位域运算和联合体的组合&#xff0c;能够巧妙解决字段解析问题&#xff0c;代码看起来整洁又健壮。 #include <algorithm> #include <iostream> #include <vector>using namespace std;typedef union tagCoreCalib…

Python爬虫:为什么你爬取不到网页数据

目录 前言 一、网络请求被拒绝 二、数据是通过JavaScript加载的 三、需要进行登录 四、网站反爬虫策略 五、网站结构变更 总结 前言 作为一名开发者&#xff0c;使用Python编写爬虫程序是一项常见的任务。爬虫程序的目的是收集互联网上的数据&#xff0c;并将其保存或使…

【漏洞复现】用友畅捷通TPlus GetStoreWarehouseByStore .net反序列化漏洞

0x01 阅读须知 “如棠安全的技术文章仅供参考&#xff0c;此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供…

【Lavavel框架】——各目录作用的介绍

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

C++ 之 【类与对象】从入门到精通一条龙服务 入门篇

不要觉的自己很没用&#xff0c;其实你还可以给家人带来温暖&#xff0c;比如爸妈看到你就来火 目录&#xff1a; 一、面向过程和面向对象初步认识 二、类的引入 三、类的定义 四、类的访问限定符及封装 1.访问限定符 2.封装 五、类的作用域 六、类的实例化 七、类的…

亚马逊云配置深度学习环境

开发环境 对于MacOS来说没无法cuda&#xff0c;所以用的是mps后端计算&#xff0c;所以也无法打印GPU数量和型号。 torch.backends.mps.is_available()如果使用PopOS的话&#xff0c;可以选择自带英伟达驱动的镜像&#xff0c;这样就可以免去复杂的驱动安装流程。 EC2 (自己…

RabbitMQ的交换机与队列

一、流程 首先先介绍一个简单的一个消息推送到接收的流程&#xff0c;提供一个简单的图 黄色的圈圈就是我们的消息推送服务&#xff0c;将消息推送到 中间方框里面也就是 rabbitMq的服务器&#xff0c;然后经过服务器里面的交换机、队列等各种关系&#xff08;后面会详细讲&am…

计算机毕业设计PHP+vue+mysql外卖订餐配送系统

本系统的设计与实现共包含17个表:分别是关于我们信息表&#xff0c;菜品分类信息表&#xff0c;菜品信息信息表&#xff0c;配置文件信息表&#xff0c;订单信息信息表&#xff0c;菜品信息评论表信息 表&#xff0c;留言反馈信息表&#xff0c;美食资讯信息表&#xff0c;配送…

白色磨砂质感html5页源码

白色磨砂质感html5页源码&#xff0c;简约的基础上加上了团队成员&#xff0c;自动打字特效音乐播放器存活时间 源码下载 https://www.qqmu.com/2980.html

牛客NC93 设计LRU缓存结构【hard 链表,Map Java】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/5dfded165916435d9defb053c63f1e84 思路 双向链表map最新的数据放头结点&#xff0c;尾节点放最老的数据&#xff0c;没次移除尾巴节点本地考察链表的新增&#xff0c;删除&#xff0c;移动节点参考答案Java im…

K8s学习四(资源调度_1)

资源调度 发现对Pod操作不方便&#xff0c;不能直接操作&#xff0c;而且不能直接编辑&#xff0c;需要对原来的配置文件进行操作&#xff0c;而且需要删除之后再创建Pod&#xff0c;不方便&#xff0c;更多是通过控制器来操作。 Label和Selector 通过设置标签和选择器来确定…

python 06实验

实验目的 &#xff08;1&#xff09;掌握Python流程控制语句&#xff0c;合理使用循环进行程序设计 &#xff08;2&#xff09;掌握Python数据结构&#xff0c;能熟练运用进行程序设计 &#xff08;3&#xff09;掌握Python的文件读写&#xff0c;能编写读取数据集的程序 1…

java理论小作业(2)--类

第一题 1.题目&#xff1a; 2.解析&#xff1a; 首先&#xff0c;我们来分析Hello1类的结构和给定代码的执行流程&#xff1a; Hello1类中有两个成员变量&#xff0c;一个静态的a和一个非静态的b。静态变量a属于类本身&#xff0c;而非静态变量b属于类的每一个实例&#xff…