整条写(Full-Stripee Write):整条写须要修改奇偶校验群组中全部的条带单元,所以新的奇偶校验值能够根据全部新的条带数据计算获得,不须要额外的读、写操做。所以,整条写是最有效的写类型。整条写的例子,如 RAID 二、RAID 3。它们每次IO老是几乎能保证占用全部盘,所以每一个条带上的每一个Segment都被写更新,因此控制器能够直接利用这些更新的数据计算出校验数据以后,在数据被写入数据盘的同时,将计算好的校验信息写入校验盘。ide
重构写(Reconstruct Write):若是要写入的磁盘数目超过阵列磁盘数目的一半,可采起重构写方式。在重构写中,从这个条带中不须要修改的 Segment 中读取原来的数据,再和本条带中全部须要修改的 Segment 上的新数据计算奇偶校验值,并将新的 Segment 数据和没有更改过的 Segment 数据以及新的奇偶校验值一并写入。显然,重构写要牵涉更多的I/O操做,所以效率比整条写低。重构写的例子,好比在RAID 4中,若是数据盘为8块,某时刻一个IO只更新了一个条带的6个Segment,剩余两个没有更新。在重构写模式下,会将没有被更新的两个Segment的数据读出,和须要更新的前6个Segment的数据计算出校验数据,而后将这8个 Segment 连同校验数据一并写入磁盘。能够看出,这个操做只是多出了读两个Segment 中数据的操做和写两个 segment 的操做,可是写的时候几乎不产生延迟开销,由于是宏观同时写入。ip
读改写(Read-Modify Write):若是要写入的磁盘数目不足阵列磁盘数目的一半,可采起读改写方式。读改写过程是:先从须要修改的 Segment 上读取旧的数据,再从条带上读取旧的奇偶校验值;根据旧数据、旧校验值和须要修改的 Segment上的新数据计算出这个条带上的新的校验值;最后写入新的数据和新的奇偶校验值。这个过程当中包含读取、修改和写入的一个循环周期,所以称为读改写。读改写计算新校验值的公式为:新数据的校验数据=(老数据EOR新数据)EOR老校验数据。若是待更新的Segment已经超过了条带中总Segment数量的一半,则此时不适合用读改写,由于读改写须要读出这些 Segment 中的数据和校验数据。而若是采用重构写,只须要读取剩余不许备更新数据的 Segment 中的数据便可,然后者数量比前者要少。因此超过一半用重构写,不到一半用读改写。整条更新就用整条写。it
写效率排列为整条写>重构写>读改写。 class