你知道RAID的初始化過程嗎

2021-09-03 04:08:35 字數 2202 閱讀 6131

raid

系統是用來對儲存資料進行資料保護的有效手段。在

raid

建立過程中往往會存在乙個時間極長的系統初始化過程,為什麼

raid

初始化過程中會存在這樣的乙個操作呢?這個操作對

ssd會導致什麼方面的影響呢?儲存老吳從技術研發的角度和大家一起對

raid

初始化過程進行分析、研究。

傳統raid

的基本組織結構如下圖所示:

所有加入

raid group

的盤會按照

lba位址切分成一系列的切片,這些切片被稱之為

stripe unit

,不同盤中相同

lba位址所對應的

stripe unit

會組織成乙個條帶(

stripe

)。在乙個條帶中對所有資料進行編碼,例如

raid6

生成兩個編碼資料塊p和

q,可以允許兩個資料盤同時損壞。

所以,在

raid

系統中,所有條帶中的資料都需要滿足編譯碼演算法規則,即條帶中的所有資料可以按照一定規則生成編碼資料,並且該編碼資料和條帶中儲存的編碼資料相同。這種情況被稱之為該條帶中的資料是一致的。當乙個磁碟發生故障時,可以通過儲存在條帶中的編碼資料恢復丟失的資料塊。

如果乙個條帶中的資料不一致,即條帶中的資料計算得到的編碼結果和儲存的編碼資料不相同,那麼一旦乙個磁碟發生故障,那麼通過儲存在條帶中的編碼資料將無法正確恢復丟失的資料塊。所以,乙個資料不一致的條帶將會在故障發生時導致資料正確性問題。

在建立乙個

raid

系統時,

raid group

中的磁碟可能是新盤,也可能是一塊已經被使用過的資料盤,這些盤上的資料不會全是零。在這種情況下,採用這些盤構建的資料條帶一定不能滿足資料一致性的需求。即每個條帶中的資料按照一定規則計算得到的編碼資料和條帶中的編碼資料是不相符的。這種資料不一致的條帶將會對

raid

資料正確性問題引入極大的風險。

正因為這個原因,在建立乙個

raid

的時候需要考慮將系統中所有的條帶進行初始化,以此來保證條帶中資料的一致性。條帶初始化通常可以採用兩種方式來解決:

1, 通過全盤寫零的方式初始化

raid

系統中的所有的條帶。資料全零的條帶,其校驗資料也為零。因此,全零資料可以保證條帶的一致性。

2, 將所有條帶進行校驗計算,更新條帶中的校驗資料,以此達到條帶資料的一致性。

當乙個raid

系統被初始化完成後,所有條帶中的資料將會變得一致,如下圖所示:

系統初始化過程是乙個非常漫長的過程,其主要原因是需要對系統中所有條帶進行初始化。還需要考慮和前端使用者

io之間的效能平衡,所以,

raid

系統初始化往往是乙個後台執行的乙個過程,會持續較長時間,並且對前端應用的效能造成影響。

對於ssd而言,

raid

系統初始化過程還會引入其他問題。在系統初始化過程中,無論是採用寫零還是校驗資料更新的方式,都需要向

ssd盤寫入資料,這個過程會導致無謂的資料寫放大。使用者資料還沒有被寫入的時候,通過初始化的方式就已經在

ssd內部建立了資料對映表。對

ssd而言降低了使用壽命和效能。因此,乙個針對

ssd的

raid

系統需要考慮對系統初始化過程的優化,傳統

raid

是不會考慮到

ssd這個特殊特性的。所以,傳統

raid

不能直接在

ssd上進行部署,會對

ssd本身的壽命和效能造成影響。

raid

系統採用資料條帶化的方式對資料進行保護,但是在條帶化資料保護的過程同樣引入了一系列問題,系統初始化就是乙個典型的條帶一致性問題。乙個優秀的

raid

資料保護系統在設計的過程中都會解決掉這個問題,例如

emc的

data domain raid

就不存在系統初始化過程,當然其需要和檔案系統進行配合,並且在

raid

條帶資料分布上做了很多的優化。

raid 3108 的初始化

3108 raid卡驅動路徑在drivers scsi megaraid。其入口函式在megaraid sas base.c中megasas init。從megasas init中可以看到首先註冊了乙個字元裝置,用於從user space控制raid卡 register character devi...

類初始化和例項初始化過程

類初始化過程 乙個類要建立例項需要先載入並初始化該類 main方法所在的類需要先載入和初始化 乙個子類要初始化需要先初始化父類 乙個類初始化就是執行 方法 由靜態類變數賦值 和靜態 塊組成 靜態類變數賦值 和靜態 塊從上往下執行 方法只執行一次 例項初始化過程 例項初始化就是執行 方法 方法可能過載...

記憶體初始化過程

1,物理記憶體資訊的獲取 0x15中斷,功能號 e820h,e801h,e88h 見檔案 linux arch i386 boot setup.s 執行完上面的 後,記憶體資訊被分為多條資訊放在e820map位置處,每個資訊條目長20位元組,包含乙個記憶體區間的資訊,條目數放在e820nr處。即實際...