zoukankan      html  css  js  c++  java
  • RAID 0 ~ RAID 7

    一、RAID解析
    1.RAID 0
    (1)将几块磁盘并行组合,横向写数据
    (2)并发IO,写数据最快
    缺点:不提供数据冗余,如果其中一块磁盘废掉,则数据全毁
    详细:条带深度大时,一次IO只能从一块磁盘上读取,无性能提升。要在某种程度上提升性能,需要减小条带深度。

    2.RAID 1
    (1)一块磁盘写,另一块作为备份,也在相同的位置写。
    (2)当一块磁盘废掉或者磁盘某区域坏掉,则读取另外一个磁盘。
    (3)写性能等于最低那块硬盘的写性能。
    优点:
    (1)提供初步数据保护
    (2)虽然额外多了一个操作,但是写速度也很快
    缺点:
    速度太慢,一个写另一个也必须写
    与RAID 0的不同:
    RAID 0没有数据保护措施,RAID 1数据有两份

    3.RAID 2
    (1)每两块数据盘就有一块校验盘(海明校验码)
    (2)当数据损坏时通过校验码可恢复损坏磁盘上的数字,每次只能传输2路数据,因数据盘就两块。
    (3)并存并取
    缺点:
    (1)数据存储时数据位被强行打散在两块磁盘上,每次读取数据都要两块磁盘联动
    (2)利用海明码开销太大
    详细:
    4块数据盘,3块校验盘。假设RAID 2条带大小为4b(1b*4块),控制器接收到IO的数据之后第一块磁盘写入1 5 9 13等位,第二块磁盘写入2 6 10 14等位,第三第四块磁盘相同,此时全盘读写,数据物理不连续,逻辑连续,导致对非事务性IO效率低下。适合连续,大块IO的情况
    与RAID 0的不同:
    不能并发,每次IO都占据了所有磁盘;每次都保证所有磁盘运行

    4.RAID 3
    (1)只留一块校验盘,将数据每一位之间做异或XOR运算,任何一个扇区损坏通过剩余未和校验位一同进行异或运算,得到丢失位,8位一起校验则得到损坏的一个字节。
    (2)条带深度小,将IO分成小块每个块4KB,让每个磁盘都有机会存储这些小块,这样多磁盘并行读写,性能高。
    (3)XOR只能判断数据是否有误,不能修正数据
    缺点:
    校验盘会成为热点盘;每次IO都需要牵动所有磁盘,和RAID 一样,不适合并发IO
    详细:
    每一个条带设计为OS系统块的大小,深度随磁盘数量而定,最小为1个扇区;每个条带一般为OS系统块长度,写数据时按数据块分散到各个磁盘。
    优化方案RAID 30采用8个数据盘,2个校验盘可以支持2个IO并发。
    与RAID 2的不同:
    RAID 2对扇区进行分散,RAID 3保留了扇区的物理连续,以一个或多个扇区为单位来分散数据。

    5.RAID 4
    (1)为了实现并发IO,需要保证有空闲的磁盘未被IO占用,以便其他的IO进行访问。
    (2)如果IO块小于RAID 3的条带深度(横向写),则数据纵向写,只放在一个磁盘上。
    缺点:
    校验盘无法并发,每次都读写,会成为热点盘,损坏几率大;写速度很慢

    6.RAID 5
    (1)是RAID 0和RAID 1的折中方案。
    (2)将校验盘打散到各个盘之中,并发IO可以同时访问校验盘,克服了校验盘不能并发成为热点盘的缺点。
    缺点:写惩罚高,根本原因在于每次扇区都要产生其校验区写入校验盘;每一次写都要先读出老数据,然后读校验数据,然后写新数据和校验数据;只能坏一块磁盘
    详细:
    校验segment循环分布在相邻条带上。为保证并发IO,将条带做的较大,以保证每次IO数据不会占满整个条带,造成其他IO等待。要保证高并发率,否则会转成读改写,写惩罚高。

    7.RAID 6
    (1)为了解决两块数据盘损坏无法恢复的情况
    (2)布尔运算两个方程式,x XOR y = 1,Ax XOR Bx = 0,求解
    缺点:比RAID 5多两个操作,多读一个校验数据,计算后还要写一次

    二、整条写、重构写和读改写
    1.整条写
    每个条带上的segment都更新,不需要额外的读写操作,写性能最好

    2.重构写
    当需要写入的磁盘数目超过阵列磁盘的一半时采取该方式
    (1)从不需要修改的segment中读取原来的数据,再和本条带中所有需要修改的segment上的新数据一起计算XOR校验值
    (2)将新的segment数据和没有更新过的segment数据以及新的XOR校验值一起写入
    例如:
    数据盘为8块,某个时刻一个IO只更新了一个条带的6个segment,剩余两个没有更新。在重构写模式下,会将没有更新的两个segment数据读出,和需要更行的前6个segment计算出校验数据,然后数据和校验信息一起写入磁盘
    与整条写的比较:
    多出读segment数据操作和写校验数据操作

    3.读改写
    当需要写入的磁盘数目不超过一半时采取
    (1)从需要修改的segment中读取旧数据,再从条带上读取旧的奇偶校验值(读)
    (2)根据旧数据、旧校验值和需要修改的segment上的新数据计算这个条带上的新校验值(改)
    (3)写入新的数据和校验值(写)
    转至该博客:https://blog.csdn.net/IceArmour/article/details/8158116

  • 相关阅读:
    Leecode no.22 括号生成
    修改mysql数据库的时区
    Django 路由层之反向解析
    学习 Django 的几个教程网址
    leetcode周赛 242
    AcWing第二次热身赛
    AcWing夏季每日一题--最长公共子序列
    AcWIng夏季每日一题--序列最大收益
    leetcode周赛 241
    第十二届蓝桥杯C++ B组
  • 原文地址:https://www.cnblogs.com/CheeseIce/p/10621552.html
Copyright © 2011-2022 走看看