一種數(shù)據(jù)保護方法、裝置以及系統(tǒng)的制作方法
【技術領域】
[0001] 本發(fā)明涉及計算機技術,特別涉及一種數(shù)據(jù)保護方法、裝置以及系統(tǒng)。
【背景技術】
[0002] 隨著數(shù)據(jù)量的增長以及對數(shù)據(jù)安全性的要求越來越高,由于各種原因發(fā)生數(shù)據(jù)損 壞,導致數(shù)據(jù)損失的事件越來越多。所以存儲廠商也開始注重在存儲系統(tǒng)比如磁盤陣列系 統(tǒng)中采取數(shù)據(jù)保護措施,以保證數(shù)據(jù)的完整性。
[0003] 目前,在存儲系統(tǒng)中進行數(shù)據(jù)保護的方法包括:將各個數(shù)據(jù)存儲到存儲系統(tǒng)中,并 利用各個數(shù)據(jù)計算出校驗和,將計算出的校驗和也保存在存儲系統(tǒng)中。當發(fā)現(xiàn)在存儲系統(tǒng) 中的某些數(shù)據(jù)被損壞時,利用未損壞的數(shù)據(jù)和校驗和恢復出被損壞的數(shù)據(jù)。
[0004] 但是目前,一般是在需要到存儲系統(tǒng)中讀取備份的數(shù)據(jù)的時候,才檢查存儲系統(tǒng) 中的數(shù)據(jù)是否發(fā)生損壞,如果損壞,才進行數(shù)據(jù)恢復處理,因此,不能及時感知到存儲系統(tǒng) 中的數(shù)據(jù)損壞。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明提供一種數(shù)據(jù)保護方法、裝置以及系統(tǒng),能夠及時感知到存儲系統(tǒng)中的數(shù) 據(jù)損壞。
[0006] -種數(shù)據(jù)保護的方法,確定糾錯矩陣;所述糾錯矩陣的行數(shù)為M,所述第一矩陣的 列數(shù)為S;S為大于等于2的自然數(shù);Μ為大于等于(S+2)的自然數(shù);糾錯矩陣中每一位上的 數(shù)值為預設定值;還包括:
[0007] 根據(jù)S個數(shù)據(jù)塊以及糾錯矩陣,計算該S個數(shù)據(jù)塊對應的存儲矩陣;該存儲矩陣中 包括S個數(shù)據(jù)塊以及糾錯碼;
[0008] 將S個數(shù)據(jù)塊以及對應的存儲矩陣保存到存儲系統(tǒng)中;
[0009] 每當?shù)竭_檢測周期時,檢測所述存儲系統(tǒng)中的所述S個數(shù)據(jù)塊是否發(fā)生損壞,如 果是,利用該S個數(shù)據(jù)塊對應的存儲矩陣,恢復發(fā)生損壞的數(shù)據(jù)塊。
[0010] 所述S為4;所述Μ為6;
[0011] 所述糾錯矩陣戈
其中,C1至C8為預設的常數(shù);
[0012] 所述根據(jù)S個數(shù)據(jù)塊以及糾錯矩陣計算該S個數(shù)據(jù)塊對應的存儲矩陣包括:
[0013] 計算
與4個數(shù)據(jù)塊DO至D3組成的矩陣
[0014]
丨乘積,得到存儲矩P
,其中,K1和K2為計算出的數(shù)值。
[0015] 所述利用該S個數(shù)據(jù)塊對應的存儲矩陣,恢復發(fā)生損壞的數(shù)據(jù)塊包括:
[0016] 利用存儲矩罔以及所述糾錯矩P
,得到D0至D3中發(fā)生 損壞的數(shù)據(jù)塊。
[0017] 在所述恢復發(fā)生損壞的數(shù)據(jù)塊之后,進一步包括:
[0018] 將對應發(fā)生損壞的第一數(shù)據(jù)塊所恢復出的數(shù)據(jù)塊寫入到所述存儲系統(tǒng)的新的有 效區(qū)域內(nèi);
[0019] 當需要讀取第一數(shù)據(jù)塊時,從所述新的有效區(qū)域內(nèi)直接讀取所述恢復出的數(shù)據(jù)。
[0020] 所述存儲系統(tǒng)為磁盤。
[0021] -種數(shù)據(jù)保護的裝置,包括:
[0022] 糾錯矩陣保存單元,用于保存糾錯矩陣,所述糾錯矩陣的行數(shù)為M,所述第一矩陣 的列數(shù)為S;S為大于等于2的自然數(shù);Μ為大于等于(S+2)的自然數(shù);
[0023] 存儲矩陣計算單元,用于根據(jù)待保存的S個數(shù)據(jù)塊以及所述糾錯矩陣保存單元所 保存的糾錯矩陣,計算該S個數(shù)據(jù)塊對應的存儲矩陣;該存儲矩陣中包括S個數(shù)據(jù)塊以及糾 錯碼;
[0024] 存儲執(zhí)行單元,用于將待保存的S個數(shù)據(jù)塊以及所述存儲矩陣計算單元對應的存 儲矩陣保存到存儲系統(tǒng)中;
[0025] 恢復單元,用于每當?shù)竭_檢測周期時,檢測所述存儲系統(tǒng)中的所述S個數(shù)據(jù)塊是 否發(fā)生損壞,如果是,利用存儲系統(tǒng)中的S個數(shù)據(jù)塊對應的存儲矩陣,恢復發(fā)生損壞的數(shù)據(jù) 塊。
[0026] 所述糾錯矩陣保存單元包括:
[0027] 第一保存子單元,用于保存糾錯矩時
;其中,C1至C8為預設的常 數(shù);
[0028] 所述存儲矩陣計算單元包括:
[0029] 第一計算子單元,用于計寞
_4個數(shù)據(jù)塊D0至D3組成的矩陣
1勺乘積,得到存儲矩陣 ,其中,K1和K2為計算出的數(shù)值。
[0030] 所述恢復單元中包括:
[0031] 第一數(shù)據(jù)恢復子單元,用于利用存儲矩P
以及所述糾錯矩陣
得到D0至D3中發(fā)生損壞的數(shù)據(jù)塊。
[0032] 進一步包括:數(shù)據(jù)讀取單元,其中,
[0033] 所述存儲執(zhí)行單元,在所述恢復單元恢復發(fā)生損壞的數(shù)據(jù)塊之后,將對應發(fā)生損 壞的第一數(shù)據(jù)塊所恢復出的數(shù)據(jù)塊寫入到所述存儲系統(tǒng)的新的有效區(qū)域內(nèi);
[0034] 數(shù)據(jù)讀取單元,用于當需要讀取第一數(shù)據(jù)塊時,從所述新的有效區(qū)域內(nèi)直接讀取 所述恢復出的數(shù)據(jù)。
[0035] 一種數(shù)據(jù)保護系統(tǒng),包括磁盤以及上述任意一種數(shù)據(jù)保護裝置。
[0036] 本發(fā)明實施例提供的數(shù)據(jù)保護方法、裝置及系統(tǒng),能夠每當?shù)竭_檢測周期時,主動 檢測存儲系統(tǒng)中的S個數(shù)據(jù)塊是否發(fā)生損壞,如果是,利用該S個數(shù)據(jù)塊對應的存儲矩陣, 恢復發(fā)生損壞的數(shù)據(jù)塊。因此,不是現(xiàn)有技術中等到需要讀取數(shù)據(jù)時,才檢測存儲系統(tǒng)中的 數(shù)據(jù)是否發(fā)生損壞。因此,本發(fā)明實施例能夠更為及時地感知到存儲系統(tǒng)中的數(shù)據(jù)損壞?!靖綀D說明】
[0037] 圖1是本發(fā)明一個實施例中數(shù)據(jù)保護方法的流程圖。
[0038]圖2是本發(fā)明另一個實施例中數(shù)據(jù)保護方法的流程圖。
[0039]圖3是本發(fā)明一個實施例中數(shù)據(jù)保護裝置的結構示意圖。
[0040]圖4是本發(fā)明另一個實施例中數(shù)據(jù)保護裝置的結構示意圖。
【具體實施方式】
[0041]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完 整地描述。顯然,所描述的實施例僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒?發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實 施例,都屬于本發(fā)明保護的范圍。
[0042]本發(fā)明一個實施例提出了一種數(shù)據(jù)保護的方法,該實施例方法預先確定糾錯矩 陣;所述糾錯矩陣的行數(shù)為M,該糾錯矩陣的列數(shù)為S;S為大于等于2的自然數(shù);Μ為大于 等于(S+2)的自然數(shù),之后,參見圖1,該實施例方法包括:
[0043]步驟101:根據(jù)S個數(shù)據(jù)塊以及糾錯矩陣,計算該S個數(shù)據(jù)塊對應的存儲矩陣;該 存儲矩陣中包括S個數(shù)據(jù)塊以及糾錯碼;糾錯矩陣中每一位上的數(shù)值為預設定值;
[0044]步驟102 :將S個數(shù)據(jù)塊以及對應的存儲矩陣保存到存儲系統(tǒng)中;
[0045]步驟103 :每當?shù)竭_檢測周期時,檢測所述存儲系統(tǒng)中的所述S個數(shù)據(jù)塊是否發(fā)生 損壞,如果是,執(zhí)行步驟104,否則,結束當前流程。
[0046]步驟104 :利用該S個數(shù)據(jù)塊對應的存儲矩陣,恢復發(fā)生損壞的數(shù)據(jù)塊。
[0047]可見,在上述圖1所示的本發(fā)明實施例中,能夠每當?shù)竭_檢測周期時,主動檢測存 儲系統(tǒng)中的S個數(shù)據(jù)塊是否發(fā)生損壞,如果是,利用該S個數(shù)據(jù)塊對應的存儲矩陣,恢復發(fā) 生損壞的數(shù)據(jù)塊。因此,不是現(xiàn)有技術中等到需要讀取數(shù)據(jù)時,才檢測存儲系統(tǒng)中的數(shù)據(jù)是 否發(fā)生損壞。因此,本發(fā)明實施例能夠更為及時地感知到存儲系統(tǒng)中的數(shù)據(jù)損壞。
[0048]進一步地,基于上述圖1所示的方法,由于糾錯矩陣的行數(shù)為Μ,列數(shù)為S;S為大 于等于2的自然數(shù);Μ為大于等于(S+2)的自然數(shù),這樣,針對S個數(shù)據(jù)塊,在后續(xù)恢復數(shù)據(jù) 塊時,根據(jù)矩陣對應的方程次數(shù),就可以一次恢復出至少兩個數(shù)據(jù)塊,提高了恢復效率。
[0049]在本發(fā)明一個實施例中,可以針對4個數(shù)據(jù)塊為一個存儲單元,也就是說,針對4 個數(shù)據(jù)塊設計一個6*4的糾錯矩陣,并得到存儲矩陣,后續(xù)恢復時,可以同時恢復該4個數(shù) 據(jù)塊中的兩個數(shù)據(jù)庫。在此種情況下,上述圖1所示過程中的S為4;Μ為6。也就是說,糾 錯矩陣是一個行數(shù)為6,列數(shù)為4的矩陣,并且,糾錯矩陣具體可以:
其 中,C1至C8為預設的常數(shù)。基于此糾錯矩陣,步驟101中,根據(jù)S個即4個數(shù)據(jù)塊以及糾 錯矩陣計算該S個數(shù)據(jù)塊對應的存儲矩陣包括:
[0050] 計算與4個數(shù)據(jù)塊DO至D3組成的矩P
]乘積,得到存儲矩降
其中,K1和K2為計算出的數(shù)值。
[0051] 相應地,在利用上述6*4的糾錯矩陣及4個數(shù)據(jù)塊為一個處理單元的方式,將該4 個數(shù)據(jù)塊及對應的存儲矩陣保存到存儲系統(tǒng)中后,相應地,步驟104中,利用該S個數(shù)據(jù)塊 對應的存儲矩陣,恢復發(fā)生損壞的數(shù)據(jù)塊包括:
[0052] 利用存儲矩p
以及所述糾錯矩陣
得到D0至D3中發(fā)生 損壞的數(shù)據(jù)塊。具體地,由于糾錯矩陣和K1和K2為定值,則可以根據(jù)例如二元一次方程對D0至D3中損壞的例如兩個數(shù)據(jù)塊進行恢復處理。
[0053] 為了進一步保證快速恢復,在上述步驟10在恢復發(fā)生損壞的數(shù)據(jù)塊之后,進一步 包括:
[0054] 將對應發(fā)生損壞的第一數(shù)據(jù)塊所恢復出的數(shù)據(jù)塊寫入到所述存儲系統(tǒng)的新的有 效區(qū)域內(nèi);
[0055] 當需要讀取第一數(shù)據(jù)塊時,從所述新的有效區(qū)域內(nèi)直接讀取所述恢復出的數(shù)據(jù)。
[0056] 在本發(fā)明的一些實施例中,所述存儲系統(tǒng)為磁盤。
[0057] 為了更加清楚地說明本發(fā)明實施例中進行數(shù)據(jù)保護方法的過程,以存儲系統(tǒng)為磁 盤為例,結合圖2所示過程進行說明,包括:
[0058] 步驟201:設置6*4的糾錯矩陣如下:
[0059]
;其中,C1至C8為預設的常數(shù)。
[0060] 本步驟中,將糾錯矩陣設置為此種形式,是為了保證既得到與待存儲的數(shù)據(jù)塊相 同的各個數(shù)據(jù)塊,又得到相應的糾錯碼。
[0061] 并且,行數(shù)為列數(shù)加2,列數(shù)為一個恢復單元中數(shù)據(jù)塊的個數(shù)。這樣,則可以保證后 續(xù)根據(jù)多元一次方程組,一次恢復出多個數(shù)據(jù)塊。
[0062] 步驟202 :獲取當前需要存儲的4個數(shù)據(jù)塊,比如,為DO,Dl,D2和D3。
[0063] 步驟203 :利用6*4的糾錯矩陣以及當前獲取的4個數(shù)據(jù)塊組成的4*1矩陣,計算 出6*1的存儲矩陣。
[0064] 這里,計算公式為 其 中,K1和K2為計算出的數(shù)值。
[0065] 執(zhí)行到本步驟,則計算出了對應于當前獲取的4個數(shù)據(jù)塊的當前存儲矩P
可見,本實施例中,存儲矩陣中的前4個數(shù)值等于待存儲的當前4個數(shù)據(jù)塊,后2個數(shù)值等 于矩陣乘法后得到的數(shù)值。
[0066] 步驟204 :將