什么是RAID

硬盘是个很脆弱的东西,它经常会坏掉。所以,为了保证服务器可靠耐用,硬盘必须时时刻刻保持可用。所以有了RAID这个东西。它的目的是将好几个硬盘合并在一起,就算硬盘坏了一个,剩下还有好几个硬盘是正常的,这样服务器才不会挂掉。

当然,保证服务高可用只是RAID其中的一个功能。它还能提升储存容量、加快存取速度等能力。

RAID分为0~6级,另外还有RAID 1+0,简称RAID 10。下面分别介绍这几种RAID实现原理。

下图就是一个RAID实物图:

下图是RAID示意图:

它跟插线板是相似的概念。区别在于,插线板是为了扩展电源插孔,RAID是为了扩展硬盘插槽。

RAID-0

RAID 0没有数据冗余、没有奇偶校验。因此,如果一个硬盘坏掉了,整个RAID阵列的数据都没法正常使用了。它存在的意义在于加快读写速度,提升硬盘容量。通常在数据可靠性要求不高的情况下才会使用RAID 0。比如游戏、科学计算。

因为每个硬盘都可以独立读写,如果硬盘有n块,那么读写速度提升是n倍。

下图是RAID 0的数据分布方式:

RAID-1

RAID 1模式下,如果有n块硬盘,那么会把数据保存n份一模一样的。这样即使一份数据坏掉了,剩下的备份可以正常工作。性能方面,随机存取速度相当于所有硬盘的总和,写入性能和原来单个硬盘的性能一样。

RAID-1E

这种模式跟RAID 1的区别在于,当硬盘数量大于2时,RAID 1E对于同一份数据最多保存两份一模一样的。这样可以充分的利用硬盘空间。下图说明了这种储存方式。

RAID-1+0

这种模式全称是RAID-1加上RAID-0。它实现的原理如下图所示:

用几句话来描述吧。它相当于先把这些硬盘成对成对的用RAID-1方式组合起来,然后再把这些组合结果用RAID-0方式组合起来。这种模式下它支持高可用,又能有很好的读写性能。这种方式,由于需要存两份一模一样的数据,因此容量会损失一半。

这种方式是目前最常用的。

RAID-2

这种模式现在已经不太常用了。它把每个数据位都打散,然后均匀的放到各个硬盘上。使用了Hamming代码来做纠错,将Hamming代码放到专门的几个硬盘里面。下图可以看到这种模式的数据分布:

RAID-3

这种模式现在也已经不太常用了。它把每个数据字节都打散,然后均匀的分散到各个硬盘。然后将奇偶校验的数据放到专门的硬盘里。关于奇偶校验的数据在后面会提到。这种模式下,由于每个数据都分散到各个硬盘的不同地方,因此每次操作都需要所有硬盘来参与。所以,对于随机存取的场景下,这种模式的性能是很差的。对于特别长的顺序读写是非常合适的,比如视频监控数据。

RAID-4

这种模式把每个数据块打散,然后均匀的分散到各个硬盘。另外还设置了专门的硬盘用来储存奇偶校验的数据。这种模式下,随机读取的性能非常好。但是随机写入的性能却不行。因为需要将所有奇偶校验的数据全部写到专门的硬盘里面。

RAID-5

这种模式把每个数据块打散,然后均匀分布到各个硬盘。与RAID-4不同的是,它将奇偶校验的数据均匀的分散到不同的硬盘。这样如果有一个硬盘坏掉了,丢失的数据可以从奇偶校验里面计算出来。

通常RAID-5的容量会损失1/3,用来储存奇偶校验信息。

这种模式兼顾了成本、性能,也是比较常用的一种模式。

RAID-6

这种模式与其他模式的区别在于,它支持两块硬盘同时损坏,并且仍然能够正常工作。它有这般神奇的能力,是因为它保存了两种奇偶校验。一种是普通的XOR方式,跟RAID-5一样。另外一种比较复杂,需要消耗比较多的CPU。这种奇偶校验方式在后面再讲。

参考资料

https://en.wikipedia.org/wiki/RAID

https://en.wikipedia.org/wiki/Standard_RAID_levels

Java写入磁盘阵列_什么是RAID?RAID有什么用?RAID原理相关推荐

  1. Java写入磁盘阵列_磁盘阵列RAID介绍及计算公式

    一.RAID介绍 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有"独立磁盘构成的具有冗余能力的阵列"之意. 磁盘阵列是由很多块 ...

  2. Java写入磁盘阵列_月光软件站 - 编程文档 - Java - 利用Linux创建磁盘阵列

    磁盘阵列配置文件为/etc/raidtab raiddev /dev/md0 //指定磁盘阵列的设备名称 raid-level linear //指定采用的是Linear模式 nr-raid-disk ...

  3. java写入数组_如何在Java中将数组写入outputStream

    我想通过Socket发送多个随机值.我认为数组是发送它们的最佳方式.但是我不知道如何将数组写入Socket outputStream? import java.io.ByteArrayOutputSt ...

  4. raid ahci模式哪个好_让硬盘速度更快还更安全的RAID到底是啥?

    何为RAID我们首先来认识一下这个概念,RAID全称为Redundant Arrays of Independent Drives,中文名称为磁盘阵列,直译为"冗余独立驱动器阵列" ...

  5. java写入单个字符_将2个字符写入单个Java char

    java写入单个字符 这是创建超低延迟的Chronicle FIX-Engine时使用的另一个好技巧. 在从字节流中读取数据时,如果可能的话,将数据存储在char而不是将其读取到String效率更高. ...

  6. java写入word文件_使用JAVA写入word文件

    我读了一个word文档,想用 Java写入另一个word文件.我希望将读取文档中的内容的样式(字体,粗体,斜体,标题等)写入,因为它是创建的新文档. 我能够复制内容而不是格式样式. import ja ...

  7. linux自学笔记——RAID级别特性以及软RAID的实现

    RAID,Redundant Arrays of Inexpensive Disks 廉价冗余磁盘阵列,又称为Redundant Arrays of Independent Disks,独立冗余磁盘阵 ...

  8. RAID 介绍(含有硬件RAID卡)

    1.RAID的概念? RAID(Redundant Array of Inexpensive Disks)是一种利用多个磁盘驱动器实现数据冗余或提高读写性能的技术.RAID技术按照不同的方式组织多个磁 ...

  9. 图文并茂raid技术详解(raid大全)

    RAID 技术相信大家都有接触过,尤其是服务器运维人员,RAID 概念很多,有时候会概念混淆.这篇文章为网络转载,写得相当不错,它对 RAID 技术的概念特征.基本原理.关键技术.各种等级和发展现状进 ...

  10. RAID技术超详细介绍(RAID大全)

    RAID 技术相信大家都有接触过,尤其是服务器运维人员,RAID 概念很多,有时候会概念混淆.这篇文章为网络转载,写得相当不错,它对 RAID 技术的概念特征.基本原理.关键技术.各种等级和发展现状进 ...

最新文章

  1. Leetcode | Maximal Rectangle
  2. 2021/11/24 微软亚州研究院游记
  3. 图像亮度、对比度调节(伽马校正)
  4. Linux下unlink函数的使用
  5. [BUUCTF-pwn]——[BJDCTF 2nd]r2t3
  6. v4l2 框架下如何设置分辨率_【微学习】低压计量电表如何设置?(下)
  7. OpenStack基础知识
  8. A加载B,B发生的变化
  9. 剑指offer之统计数组中出现次数超过一半的数字
  10. wordpress文章,页面,小工具如何使用php代码
  11. PDF文件有密码怎么解除?
  12. 机器学习实战(第1章)
  13. Methods of integrating data to uncover genotype–phenotype interactions 翻译
  14. 软件测试-黑盒测试:正交实验设计法
  15. 君望永远--纠缠在爱情的起点上 (转载)
  16. 计算机硬盘用u盘维修,电脑维修:U盘和移动硬盘及固态硬盘的区别
  17. mysql 合并两个update_如何将多条update语句合并为一条
  18. 域名解析成ip的过程
  19. 【JAVA】(vip)蓝桥杯试题 基础练习 阶乘计算 BASIC-30 JAVA
  20. 解决tomcat启动时的45秒时间限制

热门文章

  1. 【python】面向对象编程
  2. TroubleShooting Hyper-V 虚拟机因磁盘配置问题无法启动
  3. 【编译打包】nginx-1.4.7-1.el6.lite.src.rpm
  4. C++ 对象的内存布局【转】
  5. LintCode_408 二进制求和
  6. 动画库tween.js
  7. 初识THINKPHP--关于路径的问题(xampp下的htdocs为根目录)
  8. ubuntu下用户的创建、修改
  9. Varnish 安装部署
  10. QT + OSG实现触屏旋转和双指缩放