一種數(shù)據(jù)恢復的方法及設備的制造方法
【技術領域】
[0001]本發(fā)明涉及數(shù)據(jù)處理領域,尤其涉及一種數(shù)據(jù)恢復的方法及設備。
【背景技術】
[0002]隨著網(wǎng)絡技術的發(fā)展,需要處理的數(shù)據(jù)高速增長,為海量數(shù)據(jù)提供具備高可靠性及高擴展性的存儲對現(xiàn)代企業(yè)來說是一個巨大的挑戰(zhàn)。為保證數(shù)據(jù)的可靠性和可用性,通常采用存儲多個數(shù)據(jù)副本的方法,當某個副本由于硬盤、服務器、網(wǎng)絡或軟件出現(xiàn)故障導致副本不可使用時,由其它副本提供服務。這樣就帶來一個問題,存儲空間利用率極低。以3個副本的數(shù)據(jù)為例,存儲空間利用率只有30%左右。
[0003]目前主要是一種擦除碼(ErasureCode,EC)技術解決存儲空間利用率低的問題,該技術將數(shù)據(jù)集合等分為η個數(shù)據(jù)塊,每個數(shù)據(jù)塊存儲該數(shù)據(jù)集合的一部分數(shù)據(jù),然后通過純異或運算,以及代數(shù)域運算計算出該數(shù)據(jù)集合的m個冗余的編碼塊,再將這η個數(shù)據(jù)塊和m個編碼塊分別保存在不同的地方。當上述η個數(shù)據(jù)塊和m個編碼塊中存在的數(shù)據(jù)損壞的壞塊時,使用未損壞的數(shù)據(jù)塊或編碼塊進行相關的運算恢復壞塊,其中,η和m為大于O的整數(shù)。
[0004]但上述技術中,當壞塊的數(shù)量大于上述m時,就無法恢復壞塊,從而導致數(shù)據(jù)存儲的可靠性低。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實施例提供了一種恢復數(shù)據(jù)的方法及設備,可以提高數(shù)據(jù)存儲的可靠性。
[0006]本發(fā)明第一方面提供一種恢復數(shù)據(jù)的方法,當前處理的數(shù)據(jù)集合劃分為η個數(shù)據(jù)塊,并計算得出所述數(shù)據(jù)集合的m個冗余的編碼塊,所述η和m為大于O的整數(shù),所述方法還可以包括:
[0007]當所述η個數(shù)據(jù)塊中存在壞塊時,分析所述η個數(shù)據(jù)塊中每個壞塊的損壞數(shù)據(jù)在所述每個壞塊中所處的位置;
[0008]根據(jù)所述分析出的位置,將所述η個數(shù)據(jù)塊和所述m個編碼塊中的每個塊按照相同的劃分規(guī)則劃分成h個小塊,在所述η個數(shù)據(jù)塊和所述m個編碼塊包含的所有小塊中,將在每個數(shù)據(jù)塊和編碼塊中所處位置相同的小塊作為一個子集合,每個子集合包含的存在損壞數(shù)據(jù)的壞小塊的數(shù)量小于或等于所述m,所述h為大于I的整數(shù);
[0009]針對一個存在壞小塊的子集合,分別使用所屬于該存在壞小塊的子集合中的未損壞的小塊的數(shù)據(jù)恢復所述子集合中壞小塊中被損壞的數(shù)據(jù)。
[0010]結(jié)合第一方面,在第一種可能的實現(xiàn)方式中,分別使用所屬于該存在壞小塊的子集合中的未損壞的小塊的數(shù)據(jù)恢復所述子集合中壞小塊中被損壞的數(shù)據(jù),包括:
[0011]獲取存在壞小塊的子集合中,所屬于所述m個編碼塊中小塊的數(shù)據(jù),以及所屬于所述η個數(shù)據(jù)塊中未損壞的小塊的數(shù)據(jù);
[0012]使用所述獲取的所述m個編碼塊中小塊的數(shù)據(jù)和所述η個數(shù)據(jù)塊中未損壞的小塊的數(shù)據(jù)恢復所述子集合中的壞小塊中被損壞的數(shù)據(jù)。
[0013]結(jié)合第一方面,在第二種可能的實現(xiàn)方式中,所述針對一個存在壞小塊的子集合,分別使用所屬于該存在壞小塊的子集合中的未損壞的小塊的數(shù)據(jù)恢復所述子集合中壞小塊中被損壞的數(shù)據(jù),包括:
[0014]分析存在壞小塊的子集合中壞小塊的數(shù)量;
[0015]獲取存在壞小塊的子集合中,所屬于所述m個編碼塊中的并且和壞小塊的數(shù)量相同的小塊的數(shù)據(jù),以及所屬于所述η個數(shù)據(jù)塊中的未損壞的小塊的數(shù)據(jù);
[0016]使用所述獲取的所述m個編碼塊中小塊的數(shù)據(jù)和所述η個數(shù)據(jù)塊中未損壞的小塊的數(shù)據(jù)恢復所述子集合中的壞小塊中被損壞的數(shù)據(jù)。
[0017]結(jié)合第一方面或第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述根據(jù)所述分析出的位置,將所述η個數(shù)據(jù)塊和所述m個編碼塊中的每個塊按照相同的劃分規(guī)則劃分成h個小塊包括:
[0018]根據(jù)所述分析出的位置,將所述η個數(shù)據(jù)塊和所述m個編碼塊中的每個塊按照相同的劃分規(guī)則以預先設置的大小劃分成h個小塊,所述預先設置的大小為所述η個數(shù)據(jù)塊存儲數(shù)據(jù)的最小單位和所述m個編碼塊存儲數(shù)據(jù)的最小單位的公倍數(shù)的大小。
[0019]結(jié)合第一方面或第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述根據(jù)所述分析出的位置,將所述η個數(shù)據(jù)塊和所述m個編碼塊中的每個塊按照相同的劃分規(guī)則劃分成h個小塊包括:
[0020]根據(jù)所述分析出的位置,將所述η個數(shù)據(jù)塊和所述m個編碼塊中的每個塊按照相同的劃分規(guī)則以預先設置的大小劃分成h個小塊,所述預先設置的大小以一個扇區(qū)為單位且包括至少一個扇區(qū)的大小。
[0021]本發(fā)明第二方面提供一種恢復數(shù)據(jù)的設備,當前處理的數(shù)據(jù)集合劃分為η個數(shù)據(jù)塊,并計算得出所述數(shù)據(jù)集合的m個冗余的編碼塊,所述η和m為大于O的整數(shù),所述設備包括:第一分析單元、劃分單元和恢復單元,其中:
[0022]所述第一分析單元,用于當所述η個數(shù)據(jù)塊中存在壞塊時,分析所述η個數(shù)據(jù)塊中每個壞塊的損壞數(shù)據(jù)在所述每個壞塊中所處的位置;
[0023]所述劃分單元,用于根據(jù)所述分析單元分析出的位置,將所述η個數(shù)據(jù)塊和所述m個編碼塊中的每個塊按照相同的劃分規(guī)則劃分成h個小塊,在所述η個數(shù)據(jù)塊和所述m個編碼塊包含的所有小塊中,將在每個數(shù)據(jù)塊和編碼塊中所處位置相同的小塊作為一個子集合,每個子集合包含的存在損壞數(shù)據(jù)的壞小塊的數(shù)量小于或等于所述m,所述h為大于I的整數(shù);
[0024]所述恢復單元,用于針對一個存在壞小塊的子集合,分別使用所屬于該存在壞小塊的子集合中的未損壞的小塊的數(shù)據(jù)恢復所述子集合中壞小塊中被損壞的數(shù)據(jù)。
[0025]結(jié)合第二方面,在第一種可能的實現(xiàn)方式中,所述恢復單元包括:
[0026]第一獲取單元,用于獲取存在壞小塊的子集合中,所屬于所述m個編碼塊中小塊的數(shù)據(jù),以及所屬于所述η個數(shù)據(jù)塊中未損壞的小塊的數(shù)據(jù);
[0027]第一恢復子單元,用于使用所述獲取的所述m個編碼塊中小塊的數(shù)據(jù)和所述η個數(shù)據(jù)塊中未損壞的小塊的數(shù)據(jù)恢復所述子集合中的壞小塊中被損壞的數(shù)據(jù)。
[0028]結(jié)合第二方面,在第二種可能的實現(xiàn)方式中,所述恢復單元包括:
[0029]第二分析單元,用于分析存在壞小塊的子集合中壞小塊的數(shù)量;
[0030]第二獲取單元,用于獲取存在壞小塊的子集合中,所屬于所述m個編碼塊中的并且和壞小塊的數(shù)量相同的小塊的數(shù)據(jù),以及所屬于所述η個數(shù)據(jù)塊中的未損壞的小塊的數(shù)據(jù);
[0031]第二恢復子單元,用于使用所述獲取的所述m個編碼塊中小塊的數(shù)據(jù)和所述η個數(shù)據(jù)塊中未損壞的小塊的數(shù)據(jù)恢復所述子集合中的壞小塊中被損壞的數(shù)據(jù)。
[0032]結(jié)合第二方面或第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述劃分單元還用于根據(jù)所述分析出的位置,將所述η個數(shù)據(jù)塊和所述m個編碼塊中的每個塊按照相同的劃分規(guī)則以預先設置的大小劃分成h個小塊,所述預先設置的大小為所述η個數(shù)據(jù)塊存儲數(shù)據(jù)的最小單位和所述m個編碼塊存儲數(shù)據(jù)的最小單位的公倍數(shù)的大小。
[0033]結(jié)合第二方面或第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述劃分單元還用于根據(jù)所述分析出的位置,將所述η個數(shù)據(jù)塊和所述m個編碼塊中的每個塊按照相同的劃分規(guī)則以預先設置的大小劃分成h個小塊,所述預先設置的大小以一個扇區(qū)為單位且包括至少一個扇區(qū)的大小。
[0034]本發(fā)明第三方面提供一種恢復數(shù)據(jù)的設備,當前處理的數(shù)據(jù)集合劃分為η個數(shù)據(jù)塊,并計算得出所述數(shù)據(jù)集合的m個冗余的編碼塊,所述η和m為大于O的整數(shù),其特征在于,所述設備包括處理器,通信接口,存儲器和總線:
[0035]其中處理器、通信接口、存儲器通過總線完成相互間的通信;
[0036]所述通信接口,用于從存儲所述η個數(shù)據(jù)塊的數(shù)據(jù)和所述m個編碼塊的數(shù)據(jù)的存儲設備接收所述η個數(shù)據(jù)塊的數(shù)據(jù)和所述m個編碼塊的數(shù)據(jù);
[0037]所述存儲器中存儲一組程序代碼,且所述處理器用于調(diào)用所述存儲器中存儲的程序代碼,用于執(zhí)行以下操作:
[0038]當所述η個數(shù)據(jù)塊中存在壞塊時,分析所述η個數(shù)據(jù)塊中每個壞塊的損壞數(shù)據(jù)在所述每個壞塊中所處的位置;
[0039]根據(jù)所述分析出的位置,將所述η個數(shù)據(jù)塊和所述m個編碼塊中的每個塊按照相同的劃分規(guī)則劃分成h個小塊,在所述η個數(shù)據(jù)塊和所述m個編碼塊包含的所有小塊中,將在每個數(shù)據(jù)塊和編碼塊中所處位置相同的小塊作為一個子集合,每個子集合包含的存在損壞數(shù)據(jù)的壞小塊的數(shù)量小于或等于所述m,所述h為大于I的整數(shù);
[0040]針對一個存在壞小塊的子集合,分別使用所屬于該存在壞小塊的子集合中的未損壞的小塊的數(shù)據(jù)恢復所述子集合中壞小塊中被損壞的數(shù)據(jù)。
[0041]結(jié)合第三方面,在第一種可能的實現(xiàn)方式中,所述處理器執(zhí)行的分別使用所屬于該存在壞小塊的子集合中的未損壞的小塊的數(shù)據(jù)恢復所述子集合中壞小塊中被損壞的數(shù)據(jù)的操作包括:
[0042]獲取存在壞小塊的子集合中,所屬于所述m個編碼塊中小塊的數(shù)據(jù),以及所屬于所述η個數(shù)據(jù)塊中未損壞的小塊的數(shù)據(jù);
[0043]使用所述獲取的所述m個編碼塊中小塊的數(shù)據(jù)和所述η個數(shù)據(jù)塊中未損壞的小塊的數(shù)據(jù)恢復所述子集合中的壞小塊中被損壞的數(shù)據(jù)。
[0044]結(jié)合第三方面,在第二種可能的實現(xiàn)方式中,所述處理器執(zhí)行的分別使用所屬于該存在壞小塊的子集合中的未損壞的小塊的數(shù)據(jù)恢復所述子集合中壞小塊中被損壞的數(shù)據(jù)的操作包括:
[0045]分析存在壞小塊的子集合中壞小塊的數(shù)量;
[0046]獲取存在壞小塊的子集合中,所屬于所述m個編碼塊中的并且和壞小塊的數(shù)量相同的小塊的數(shù)據(jù),以及所屬于所述η個數(shù)據(jù)塊中的未損壞的小塊的數(shù)據(jù);
[0047]使用所述獲取的所述m個編碼塊中小塊的數(shù)據(jù)和所述η個數(shù)據(jù)塊中未損壞的小塊的數(shù)據(jù)恢復所述子集合中的壞小塊中被損壞的數(shù)據(jù)。
[0048]結(jié)合第三方面或第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第三種