目前已有的RAID(Redundant Array of Independent Disks,独立冗余磁盘阵列)技术有很多种,但是RAID0、RAID1、RAID5是最常见的几种方案。

1 RAID0

RAID0技术把多块(至少两块)物理硬盘设备通过软件或硬件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中。这样,在最理想的情况下,硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障将导致整个系统的数据都受到破坏。虽然,RAID0技术能够有效的提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力。如下图,数据被分别写入到不同的硬盘设备中,即disk1和disk2硬盘设备会被分别保存数据资料,最终实现提升读取、写入速度的效果。


2 RAID1

尽管RAID0技术提升了硬盘设备的读写速度,但是它将数据一次写入各个物理硬盘中,也就是说,它的数据是分开存放的,其中任何一块硬盘发生故障都会损坏整个系统的数据。因此,如果生产环境对硬盘设备的读写速度没有要求,而是希望增加数据的安全性时,就需要用到RAID1技术了。

RAID1技术示意图如下图,它是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。

RAID1技术虽然十分注重数据的安全性,但是因为是在多块硬盘设备中写入了相同的数据,因此硬盘设备的利用率下降了一半。从理论上说,如下图所示空间的真实可用率只有50%,由三块硬盘设备组成的RAID1磁盘阵列的可用率只有33%左右,以此类推。由于需要把数据同时写入两块以上的硬盘设备,这无疑也在一定程度上增大了系统计算功能的负载。


3 RAID5

RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID5磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块磁盘设备中,而是存储到除自身以外的其他每一块设备上,这样的好处是其中任何一个设备损坏后不至于出现致命缺陷。下图“parity”部分存放的就是数据的奇偶校验信息,换句话说,就是RAID5技术实际上没有备份磁盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID5这样的技术特性“妥协”的兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。


注:

奇偶校验的底层运算基础就是异或运算,但是在通俗的人类理解,应该是奇偶校验更好理解

100000110 

100000010

这两个数据在人类看来,就是在倒数第三位一个是0一个是1的区别。假设现在存储这一数据的硬盘坏了,数据就会变成:

100000X10

100000X10

那么,怎么通过奇偶校验还原这个数据呢?

人类的思维就是通过这个数据加起来一共有多少个1或者多少个0,然后补回去就是了,但是这样的话,校验的数据就分别变成3跟2(数据中1的个数),但这样是无法通过二进制不增加数据长度的办法实现的。所以奇偶校验就提供了一个更好的方法,3是奇数,所以校验数据是1,2是偶数,校验数据就是0,通过这样,在原数据只丢一位数据的前提下,完全可以运算得出原数据。

4 RAID10

鉴于RAID5技术是因为磁盘设备的成本问题对读写速度和数据的安全性能而有了一定的妥协,但是在企业里更在乎的还是数据本身的价值而非硬盘的价格,因此在生产环境中推荐使用RAID10技术。

RAID10即RAID0+RAID1的一个组合体。如下图所示,RAID10技术需要至少4块硬盘来组建,其中先分别两两制作成RAID1磁盘阵列,以保证数据的安全性;然后再对两个RAID1次哦按阵列实施RAID0技术,进一步提高硬盘设备的读写速度。这样从理论上讲,只要坏的不是同一组中的所有磁盘,那么最多可以损坏50%的硬盘设备而不丢失数据。由于RAID10技术继承了RAID0的高速写速度和RAID1的数据安全性,在不考虑成本的情况下RAID10的性能都超过了RAID5,因此当前成为广泛使用的一种存储技术。

附:读写速度数据对比

威铁马硬盘盒 + 2块7200转 HGST 4T 硬盘,win10系统+usb进行读写测试

1)single模式(不做raid):

2)raid0

3)raid1

参考原文:https://blog.csdn.net/Mr_Yang__/article/details/85228465

RAID0、RAID1及RAID5的区别详解的更多相关文章

  1. 基于Java的打包jar、war、ear包的作用与区别详解

      本篇文章,小编为大家介绍,基于Java的打包jar.war.ear包的作用与区别详解.需要的朋友参考下   以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.cla ...

  2. Android中Intent传值与Bundle传值的区别详解

    Android中Intent传值与Bundle传值的区别详解 举个例子我现在要从A界面跳转到B界面或者C界面   这样的话 我就需要写2个Intent如果你还要涉及的传值的话 你的Intent就要写两 ...

  3. php 去除html标记--strip_tags与htmlspecialchars的区别详解

    php 去除html标记--strip_tags与htmlspecialchars的区别详解 作者: 字体:[增加 减小] 类型:转载 时间:2013-06-26   本篇文章是对php中去除html ...

  4. HTTP POST GET 本质区别详解

    HTTP POST GET 本质区别详解 一 原理区别 一般在浏览器中输入网址访问资源都是通过GET方式:在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交 Ht ...

  5. javascript中=、==、===区别详解

    javascript中=.==.===区别详解今天在项目开发过中发现在一个小问题.在判断n==""结果当n=0时 n==""结果也返回了true.虽然是个小问题 ...

  6. [转]ESCAPE()、ENCODEURI()、ENCODEURICOMPONENT()区别详解

    escape().encodeURI().encodeURIComponent()区别详解 JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encode ...

  7. phpcms加载系统类与加载应用类之区别详解

    <?php 1. 加载系统类方法load_sys_class($classname, $path = ''", $initialize = 1)系统类文件所在的文件路径:/phpcms ...

  8. Bind和Eval的区别详解

    原文:Bind和Eval的区别详解 1.简单描述Eval和Bind的区别 绑定表达式 <%# Eval("字段名") %> <%# Bind("字段名& ...

  9. 转-HTTP POST GET SOAP本质区别详解

    原文链接:HTTP POST GET SOAP本质区别详解 一 原理区别 一般在浏览器中输入网址访问资源都是通过GET方式:在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认 ...

随机推荐

  1. Qt 的日期 时间

    QDateTime 的构造函数,有参数是QDate的.这样就可以把日期转化成 QDateTime. QDateTime.toTime_t() 可以转化成 Unix 时间.

  2. 通过注册表查询 .Net Framework 的版本

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full 注意:即使卸载 .Net Framework 这些注册表依然 ...

  3. 【三剑客】awk命令2

    1. 程序结构: Begin 和 End模块 awk的程序的结构:Begin块,Body块,End块. BEGIN块:BEGIN {awk-commands} BEGIN块在被程序启动时启动,且只执行 ...

  4. 【Linux常见命令】cp命令

    cp - copy files and directories 拷贝文件或目标文件夹,默认不能直接拷贝目录,通过-r参数设置递归复制目录 copy 语法: cp [OPTION]... [-T] SO ...

  5. 第 38 章 OCR - Optical Character Recognition

    38.1. Tesseract 查找Tesseract安装包 $ apt-cache search Tesseract ocrodjvu - tool to perform OCR on DjVu d ...

  6. P1460 健康的荷斯坦奶牛 Healthy Holsteins (简单的dfs)

    题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少. 给出牛所需的最低的维他命 ...

  7. python(读取 excel 操作 xlrd 模块)

    一.安装 xlrd 模块 到 python 官网下载 http://pypi.python.org/pypi/xlrd 模块安装,前提是已经安装了 python 环境. 或者在 cmd 窗口  pip ...

  8. 多源最短路径算法:Floyd算法

    前言 由于本人太菜,这里不讨论Floyd的正确性. 简介 多源最短路径,解决的是求从图中任意两点之间的最短路径的问题. 分析 代码短小精悍,主要代码只有四行,直接放上: for(int k=1;k&l ...

  9. libevent(九)evhttp

    用libevent构建一个http server非常方便,可参考libevent(六)http server. 主要涉及的一个结构体是evhttp: struct evhttp { /* Next v ...

  10. crontab自动启动小任务例子(每一分钟将当前日期打入一个文件)

      crontab -l #查看当前定时任务列表 显示没有,那么我们来安装一下(必须在root用户下) – yum install vixie-cron  – yum install crontabs ...