?

基于擴容閾值的磁盤陣列故障恢復分析

2024-02-03 08:52李蕭言
信息記錄材料 2024年1期
關鍵詞:磁盤陣列對角磁盤

李蕭言,安 陽

(山西工程技術學院 山西 陽泉 045000)

0 引言

目前,數字經濟和網絡社會的蓬勃發展為存儲系統在存儲容量、數據安全等方面帶來了新的發展機遇和挑戰。磁盤陣列(redundant arrays of independent disks,RAID)將多個獨立磁盤在邏輯上組成具有冗余能力的單一磁盤,提高了數據的集成度和處理量[1],其中RAID6 具有雙冗余校驗,與糾刪碼技術[2]結合使存儲系統具有更高的可靠性。

在現實應用中,磁盤陣列根據容量要求提前部署,然而基于歷史數據的預測無法應對當前發展迅速的互聯網應用需求。 因此,當面對資源耗盡的風險時通常采用擴容技術[3]來滿足容量和帶寬增長的需要。 劉靖宇等[4]提出一種高效的擴容方案Cross?Scale,該方案定義了擴容閾值,根據閾值與磁盤陣列剩余空間的關系分別提出不同的擴容方法,有效提高了擴容效率。 但是,在磁盤陣列擴容的過程中,由于讀寫操作增加,更容易出現磁盤故障,因此擴容方法需要具備一定的容錯能力,以應對隨時出現的磁盤故障。

針對以上問題,為了保證磁盤陣列中數據的完整性和安全性,本文探討了在擴容過程中的磁盤故障情況及恢復[5-6]方法。

1 閾值條件下的磁盤陣列擴容方法

增加了閾值條件的擴容方案Cross?Scale 基于N?Code[7]編碼而設計,該編碼是一種優化的縱式RAID6 陣列碼,每個條帶即為一個編碼陣列,形成了(p+1)×(p-1)的數據布局,其中p為大于2 的質數。 若用Ci,j表示位于第i行,第j列的塊,那么該編碼的校驗鏈構造規則如下。

水平校驗鏈的構造規則如公式(1)所示:

對角校驗鏈的構造規則如公式(2)所示。

p=7 時N?Code 編碼陣列的校驗鏈分布方式如圖1 所示,相同字母標記的塊屬于同一校驗鏈。 可見N?Code 的數據塊分散在所有邏輯磁盤中,校驗塊分為水平和對角兩種類型,其中水平校驗塊分散存儲在中間的p-1 個磁盤中,對角校驗塊分布在兩側磁盤。

圖1 N?Code 編碼陣列的校驗鏈分布

由于N?Code 具有兩條校驗鏈,可容兩塊磁盤同時失效,所以為了不影響陣列的安全性,擴容過程中也應及時更新校驗鏈。 Cross?Scale 擴容過程由遷移窗口Wm引導,遷移窗口的大小由擴容前后的編碼陣列大小決定,只有處于遷移窗口中的區域才進行數據的重組。 該方案中提出了擴容閾值(capacity threshold,CT),根據CT與磁盤陣列最小剩余空間Tmin、單個磁盤的分塊數D的關系選擇不同的數據重組方案。 當0≤Tmin<CT和CT≤Tmin≤D時,分別在遷移窗口內通過拼接寫有數據的數據行和空白數據行組成新編碼陣列,然后再進行數據遷移和校驗鏈的更新。

根據上述Cross?Scale 的實現思想可知,在整個磁盤陣列中,編碼陣列可分為處于遷移窗口Wm的前、中、后三種情況,如圖2 所示,其中m為原磁盤陣列中的磁盤數量,n為增加的擴容磁盤數量。 根據遷移窗口的移動方向,Wm左側為擴容之后的區域,右側為未擴容的區域,Wm中的區域正在進行數據的移動和校驗鏈的更新。

圖2 遷移窗口引導的擴容過程

2 擴容過程中的磁盤故障處理

若在一般使用過程中出現磁盤故障時,可以利用校驗塊和幸存的數據塊來恢復數據。 假設在圖1 中的磁盤2損壞,存儲其中的C0,2、C1,2、C2,2、C3,2、C4,2、C5,2中的數據丟失,C0,2中存儲的數據可根據水平校驗鏈重新計算得到,即C0,2=C0,1⊕C0,3⊕C0,4⊕C0,5⊕C0,6⊕C0,7;若磁盤2 和4 同時損壞,則需要同時使用水平和對角校驗鏈來恢復數據,即先用對角校驗鏈恢復C4,2,即C4,2=C2,0⊕C3,1⊕C5,3⊕C0,5⊕C1,6⊕C2,7,再用水平校驗鏈恢復C4,4,即C4,4=C4,0⊕C4,1⊕C4,2⊕C4,3⊕C4,5⊕C4,6,以此類推。

而對于擴容過程中的磁盤故障處理,遷移窗口之前的編碼陣列已經完成了數據遷移和校驗鏈的更新,可以按照新的校驗鏈及公式(1)和(2)恢復數據;遷移窗口之后的區域還未遷移數據,則按照擴容前的校驗鏈恢復數據;而對于遷移窗口中的編碼陣列,情況較為復雜,需要解決的問題可歸納為:單盤故障或是雙盤故障;故障盤為數據盤或是校驗盤;故障盤中的數據是否需要遷移;需要遷移的數據是否已經寫入。 下面針對遷移窗口中的磁盤故障情況及恢復方法分別進行分析。

2.1 單盤故障恢復

(1)當0≤Tmin<CT時,由于剩余空間不足,采用了拼接寫有數據的相鄰條帶進行擴容,首先考慮磁盤陣列中出現單盤故障的情況,該故障盤的位置存在兩種情況:①故障盤的盤號處于1 ~m+n-2 之間。 在該情況下,根據N?Code 的數據布局規則可知,故障盤只存儲數據塊和水平校驗塊。 而在擴容過程中,雖然進行了數據的遷移,但是數據的移動限制在同一水平校驗鏈中,水平校驗值可保持不變,所以可以通過水平校驗鏈的降級模式來恢復數據塊;如果丟失的是水平校驗值,則根據校驗鏈中的數據重新計算校驗值即可。 若故障盤包含了在擴容過程中需要遷移的數據,則將恢復后的數據直接寫入遷移的目標位置,以此減少數據塊的讀寫次數。 ②故障盤的盤號為0 或m+n-1。 在該情況下,故障盤中同時存儲了數據塊和對角校驗塊,根據擴容過程中的數據遷移的規則可知,該故障盤中不包含需要遷移的數據。 若遷移窗口中的編碼陣列正在遷移數據,可等待遷移完成后再進行數據重構,以此來減少校驗值的重復更新。 重構時可根據水平校驗鏈恢復故障盤中的數據塊,通過對角校驗鏈更新所有對角校驗值。

若遷移窗口中的編碼陣列已經完成校驗更新而發生磁盤故障,則有兩種數據重構方式:可利用全部對角校驗鏈進行數據重構,也可以采用水平和對角校驗鏈結合的方式進行數據重構,其中,數據塊用水平校驗鏈恢復,校驗塊用對角校驗鏈恢復。 如圖3 所示為由6 塊擴容至8 塊磁盤的過程,數據遷移已完成,其中P 和Q 標記的塊分別表示根據不同校驗鏈產生的校驗塊,第2、3 數據行為拼接的數據行,其中磁盤0 失效。 圖3(a)中的編碼陣列僅利用對角校驗鏈恢復數據,只需讀出由綠色標記的24 個塊;而在圖3(b)的編碼陣列中,采用水平和對角校驗鏈結合的方式恢復數據,由于一部分需要讀出的數據塊為水平校驗鏈和對角校驗鏈的公共塊,已經在恢復數據塊時讀出,所以只需讀出18 個塊,可以有效減少數據塊的讀寫操作,因此采用水平和對角校驗鏈結合的方式進行數據重構為佳。

圖3 磁盤的數據重構

(2)當CT≤Tmin≤D時,剩余空間充足,兩種數據行拼接方式均可行。 若采用相鄰條帶拼接的方式,則與0≤Tmin<CT時故障處理的過程相同。 下面對空白數據行拼接時的情況進行分析。 若磁盤陣列中出現單盤故障,該故障盤的位置同樣存在兩種情況:①故障盤的盤號處于1 ~m+n-2 之間。 在該情況下,遷移窗口為一個編碼陣列的大小,若該故障盤已經完成遷移或者無需遷移數據,則不影響遷移窗口內后續的遷移操作。 待本輪數據遷移完成后,用新的磁盤陣列編碼進行數據重構即可。 若該磁盤在遷移窗口內包含正在遷入或遷出的數據,則待數據遷移完成后,利用讀入緩存的數據,結合水平和對角校驗鏈進行恢復,減少數據塊讀取的數量,提高重構速度。 ②故障盤的盤號為0 或m+n-1。 在該情況下,故障盤中的數據塊并沒有劃分在遷移區域中,因此不影響后續的數據遷移過程。 可待窗口內遷移區域中的數據移動后,將擴容進程掛起,按照新的編碼陣列進行數據重構。

2.2 雙盤故障恢復

(1)當0≤Tmin<CT時,仍然采用了拼接寫有數據的相鄰條帶進行擴容。 雖然在擴容過程中數據水平移動而保留了原水平校驗值,但是由于拆分了部分條帶,導致部分對角校驗值暫時失效,無法參與數據恢復。 所以在此條件下出現雙盤故障時,以減少遷移窗口內的數據損失為目標進行,此時故障盤可能出現的位置有以下三種情況:①故障盤的盤號分別為0 和m+n-1。 在該情況下,兩塊故障盤中包含所有的對角校驗值和部分數據塊,均不包括需要遷移的數據塊,不影響該區域的數據遷移過程。 此時雖然有兩塊故障盤,但是每條水平校驗鏈中只損壞或丟失了一個數據,因此所有的數據塊可以根據水平校驗鏈進行重構。 而對于對角校驗鏈,可以等待遷移區域內的數據塊移動后再重新計算,以此減少校驗值的更新次數。 ②故障盤的盤號均位于1~m+n-2 之間。 在該情況下,故障盤中只包含數據塊和水平校驗塊,將已讀入緩存中的數據寫入目標位置后,需結合水平校驗和對角校驗實現重構。 由于加入了擴容磁盤和遷移數據的緣故,磁盤陣列中存在一些空白塊,若故障盤在損壞前包含空白塊,可減少數據損失,通過水平校驗鏈即可重構位于同一數據行中的數據塊或校驗塊。 ③故障盤的盤號一個為0 或m+n-1,另一個位于1~m+n-2 之間。 在該情況下,盤號為0 或m+n-1 的故障盤包含對角校驗塊和數據塊,盤號位于1 ~m+n-2 之間的故障盤包含水平校驗塊和數據塊。 此時,與損壞對角校驗塊位于同一數據行中的數據塊是水平校驗鏈中唯一損壞的數據塊,因此可以通過水平校驗鏈進行重構。 若位于1~m+n-2 之間的故障盤為擴容磁盤或者包含數據遷移區域,則可以重構與空白塊位于同一行的數據塊或校驗塊。

(2)當CT≤Tmin≤D時,若采用相鄰條帶拼接的方式,則與0≤Tmin<CT時故障處理的過程相同,下面分析空白數據行拼接時的情況,此時故障盤出現的位置同樣有以下三種情況:①故障盤的盤號分別為0 和m+n-1。 在該情況下,故障盤在遷移窗口中沒有需要移動的數據,因此不影響后續的數據遷移。 待窗口中數據遷移完成后,根據擴容后的編碼陣列進行數據重構。 ②故障盤的盤號均位于1~m+n-2 之間。 在該情況下,若故障盤均已完成數據遷移,則待遷移窗口中其他數據移動后,再根據擴容后的編碼陣列重構數據。 若故障盤均處于數據遷移的過程中,且已將需要遷移的數據讀出或者故障盤正處于等待數據遷入的狀態,則不影響窗口中的遷移過程,待數據遷移后,根據擴容后的編碼陣列重構數據;若未及時將需要遷移的數據讀出,則將窗口內已經遷移的數據移回原始位置,回退到擴容前的狀態,按照擴容前的編碼陣列重構數據。 若故障盤之一處于已完成遷移的狀態,另一故障盤處于遷移進程中,且已經將需要遷移的數據讀出或故障盤正處于等待數據遷入的狀態,則不影響窗口中的遷移進程,待數據遷移完成后,根據擴容后的編碼陣列重構數據;若未將遷移數據讀出,且故障盤包含空白塊,則可以通過水平校驗鏈重構位于同一數據行中的數據塊或校驗塊。 ③故障盤的盤號一個為0 或m+n-1,另一個處于1~m+n-2 之間。 在該情況下,故障盤之一位于遷移窗口內的區域不需移動數據,另一塊故障盤正在遷移數據,或已經完成數據遷移。與對角校驗值處于同一數據行的數據可以由水平校驗鏈重構,對于其他損壞或丟失的數據,若該故障盤已經完成數據遷移,待窗口中其他數據移動后,再根據擴容后的編碼陣列重構數據。 若該故障盤正在遷移數據,且已經將該盤內需要遷移的數據讀入緩存或該盤僅在等待數據遷入,則待窗口內的數據遷移完成后,按照擴容后的編碼陣列重構數據;如未將故障盤內需要遷移的數據讀入緩存,則將窗口內已經遷移的數據移回原始位置,回退到擴容前的狀態,按照擴容前的編碼陣列進行數據重構。

3 結語

綜上所述,針對磁盤陣列擴容過程中數據讀寫增多,故障概率增大的問題,本文基于設有擴容閾值的Cross?Scale 擴容方案,分析了不同磁盤陣列條件下的故障情況,并分別針對單盤和雙盤故障,在不同的故障位置,故障盤中存儲不同數據類型,及不同擴容階段設計了數據恢復方法,保障了擴容過程中的數據安全性與完整性,且保留了原編碼的容錯能力。 本文方法是擴容技術的進一步優化,未來會在此基礎上結合新型存儲介質繼續開展研究。

猜你喜歡
磁盤陣列對角磁盤
解決Windows磁盤簽名沖突
擬對角擴張Cuntz半群的某些性質
更換磁盤陣列磁盤
修改磁盤屬性
磁盤組群組及iSCSI Target設置
創建VSAN群集
電視播出機房磁盤陣列預防性維護
非奇異塊α1對角占優矩陣新的實用簡捷判據
一例EMS磁盤陣列故障分析及改進
存儲虛擬化的三個層次
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合