整條寫(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