專利名稱:發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)存儲(chǔ)領(lǐng)域,具體涉及一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置和方法。
背景技術(shù):
在數(shù)據(jù)存儲(chǔ)領(lǐng)域,數(shù)據(jù)存儲(chǔ)的可靠性是非常重要的。目前保證可靠性的方法有多種,例如可通過(guò)以EC(ErasUre Code,糾刪碼)算法為代表的“信息糾錯(cuò)技術(shù)”來(lái)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的可靠性。EC算法的核心是,通過(guò)對(duì)M個(gè)原始數(shù)據(jù)塊進(jìn)行計(jì)算后得到N個(gè)校驗(yàn)數(shù)據(jù)塊(0〈Ν〈Μ),當(dāng)這M+N個(gè)數(shù)據(jù)塊(定義為一個(gè)EC組)中有任意K個(gè)數(shù)據(jù)塊(0〈K ( N)丟失,都可以通過(guò)一定的算法恢復(fù)出來(lái)。無(wú)論采用哪種方法,保證數(shù)據(jù)存儲(chǔ)可靠性的關(guān)鍵在于如何能夠快速有效地發(fā)現(xiàn)損壞的數(shù)據(jù)(即檢測(cè)數(shù)據(jù)的完整性)并及時(shí)修復(fù)損壞的數(shù)據(jù)。對(duì)于EC算法,目前比較通用的方式是周期性地或在訪問(wèn)數(shù)據(jù)時(shí)對(duì)數(shù)據(jù)的完整性進(jìn)行檢測(cè),并在檢測(cè)到數(shù)據(jù)丟失時(shí)啟動(dòng)修復(fù)。具言之,在對(duì)數(shù)據(jù)的完整性進(jìn)行檢測(cè)時(shí),讀取某一 EC組中的最少條帶數(shù)據(jù),例如上述M個(gè)原始數(shù)據(jù)塊,并判斷這些條帶數(shù)據(jù)中是否存在至少一個(gè)條帶數(shù)據(jù)不可訪問(wèn)。如果判斷結(jié)果為是,則確認(rèn)對(duì)應(yīng)的條帶數(shù)據(jù)已經(jīng)發(fā)生丟失。在確認(rèn)發(fā)生了數(shù)據(jù)丟失的情況下,讀取該EC組的所有剩余條帶數(shù)據(jù),例如上述N個(gè)校驗(yàn)數(shù)據(jù)塊,并啟動(dòng)修復(fù)以通過(guò)EC算法重新生成條帶數(shù)據(jù),然后將對(duì)應(yīng)丟失的條帶數(shù)據(jù)寫(xiě)入存儲(chǔ)單元來(lái)完成修復(fù)。由于通過(guò)讀取EC 組的最少條帶數(shù)據(jù)(或者所有條帶數(shù)據(jù))來(lái)進(jìn)行數(shù)據(jù)的完整性判斷,發(fā)明人發(fā)現(xiàn),上述方法無(wú)法直接獲知發(fā)生故障的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的信息,從而無(wú)法及時(shí)、有效、經(jīng)濟(jì)地修復(fù)因數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)故障而丟失的數(shù)據(jù)。時(shí)間越長(zhǎng),數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)故障率越高,數(shù)據(jù)永久丟失的概率就越大,從而使得系統(tǒng)可靠性嚴(yán)重下降。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明要解決的技術(shù)問(wèn)題是,如何能夠快速有效地發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)。為了解決上述問(wèn)題,第一方面,本發(fā)明的實(shí)施例提供了一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置,包括故障節(jié)點(diǎn)發(fā)現(xiàn)單元,用于根據(jù)存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息查找存儲(chǔ)集群系統(tǒng)中的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),獲取故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào),并將所獲取到的編號(hào)作為故障分區(qū)的編號(hào)發(fā)送出去;受損EC組確定單元,與所述故障節(jié)點(diǎn)發(fā)現(xiàn)單元連接,用于根據(jù)從所述故障節(jié)點(diǎn)發(fā)現(xiàn)單元接收到的故障分區(qū)的編號(hào)確定故障分區(qū)對(duì)應(yīng)的受損EC組;以及損壞數(shù)據(jù)修復(fù)單元,與所述受損EC組確定單元連接,用于針對(duì)所確定的受損EC組利用EC算法生成恢復(fù)數(shù)據(jù),并將所生成的恢復(fù)數(shù)據(jù)存儲(chǔ)到指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的相應(yīng)分區(qū)上,以能夠用所述指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)替換所述故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)。對(duì)于上述發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置,在一種可能的實(shí)施方式中,所述受損EC組確定單元包括故障分區(qū)編號(hào)接收模塊,與所述故障節(jié)點(diǎn)發(fā)現(xiàn)單元連接,用于接收所述故障節(jié)點(diǎn)發(fā)現(xiàn)單元所發(fā)送的故障分區(qū)的編號(hào);最接近非故障分區(qū)查找模塊,與所述故障分區(qū)編號(hào)接收模塊連接,用于基于所接收到的故障分區(qū)的編號(hào)查找最接近非故障分區(qū),其中所述最接近非故障分區(qū)是編號(hào)與所述故障分區(qū)的編號(hào)最接近的非故障分區(qū);以及受損EC組確定模塊,與所述最接近非故障分區(qū)查找模塊以及所述損壞數(shù)據(jù)修復(fù)單元連接,用于將讀取到的最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,并判斷潛在受損EC組信息是否包括所述故障分區(qū)的編號(hào),并在判斷結(jié)果為是的情況下將該潛在受損EC組信息表示的EC組確定作為受損EC組。對(duì)于上述發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置,在一種可能的實(shí)施方式中,所述最接近非故障分區(qū)查找模塊首先查找左側(cè)最接近非故障分區(qū),其中左側(cè)最接近非故障分區(qū)是在編號(hào)減小方向上的最接近非故障分區(qū),所述受損EC組確定模塊將讀取到的左側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,并判斷潛在受損EC組信息是否包括所述故障分區(qū)的編號(hào),在判斷結(jié)果為是的情況下,所述受損EC組確定模塊將潛在受損EC組信息表示的EC組確定作為受損EC組;在判斷結(jié)果為否的情況下,所述最接近非故障分區(qū)查找模塊繼續(xù)查找右側(cè)最接近非故障分區(qū),其中右側(cè)最接近非故障分區(qū)是在編號(hào)增大方向上的最接近非故障分區(qū),以及所述受損EC組確定模塊將讀取到的右側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息、并將潛在受損EC組信息表示的EC組確定作為受損EC組。對(duì)于上述發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置,在一種可能的實(shí)施方式中,所述受損EC組確定單元還包括與所述故障分區(qū)編號(hào)接收模塊以及所述最接近非故障分區(qū)查找模塊連接的故障分區(qū)排序模塊,所述故障分區(qū)排序模塊用于對(duì)所述故障分區(qū)編號(hào)接收模塊所接收到的故障分區(qū)的編號(hào)按大小進(jìn)行排序,以生成按編號(hào)大小排列的故障分區(qū)序列,對(duì)于所述故障分區(qū)序列中的編號(hào)無(wú)間斷的n+1個(gè)故障分區(qū)pt (i) pt(i+n),其中i為整數(shù)、η為大于等于O的整數(shù),所述最接近非故障分區(qū)查找模塊將未包括在該故障分區(qū)序列中的分區(qū)pt(1-l)和分區(qū)pt(i+n+l)分別確定作為這n+1個(gè)故障分區(qū)pt (i) pt(i+n)的左側(cè)最接近非故障分區(qū)和右側(cè)最接近非故障分區(qū);所述受損EC組確定模塊將讀取到的左側(cè)最接近非故障分區(qū)Pt (1-Ι )所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為左側(cè)潛在受損EC組信息,將讀取到的右側(cè)最接近非故障分區(qū)Pt (i+η+Ι)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為右側(cè)潛在受損EC組信息,并基于左側(cè)潛在受損EC組信息是否包括故障分區(qū)pt (i)、pt (i+n)的編號(hào)以及右側(cè)潛在受損EC組信息是否包括故障分區(qū)pt(i) ,pt (i+n)的編號(hào)來(lái)確定受損EC組。對(duì)于上述發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置,在一種可能的實(shí)施方式中,所述故障節(jié)點(diǎn)發(fā)現(xiàn)單元包括節(jié)點(diǎn)狀態(tài)記錄模塊,與存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)連接,用于接收并記錄各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息;故障節(jié)點(diǎn)確定模塊,與所述節(jié)點(diǎn)狀態(tài)記錄模塊連接,用于根據(jù)所述節(jié)點(diǎn)狀態(tài)記錄模塊所記錄的狀態(tài)信息,將狀態(tài)信息表示已持續(xù)預(yù)定時(shí)間不可用的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)確定作為故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);以及分區(qū)編號(hào)獲取模塊,與所述故障節(jié)點(diǎn)確定模塊以及所述受損EC組確定單元連接,用于獲取所述故障節(jié)點(diǎn)確定模塊所確定的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào),并將所獲取到的編號(hào)作為故障分區(qū)的編號(hào)發(fā)送至所述受損EC組確定單元。
為了解決上述問(wèn)題,第二方面,本發(fā)明的實(shí)施例提供了一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法,包括故障節(jié)點(diǎn)發(fā)現(xiàn)步驟,根據(jù)存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息查找存儲(chǔ)集群系統(tǒng)中的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),并獲取故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào)作為故障分區(qū)的編號(hào);受損EC組確定步驟,根據(jù)所獲取到的故障分區(qū)的編號(hào)確定故障分區(qū)對(duì)應(yīng)的受損EC組;損壞數(shù)據(jù)修復(fù)步驟,針對(duì)所確定的受損EC組,利用EC算法生成恢復(fù)數(shù)據(jù),并將所生成的恢復(fù)數(shù)據(jù)存儲(chǔ)到指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的相應(yīng)分區(qū)上,以能夠用所述指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)替換所述故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);以及判斷所有故障分區(qū)是否均已處理,如果判斷為是,則再次進(jìn)入故障節(jié)點(diǎn)發(fā)現(xiàn)步驟以查找新的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),如果判斷為否,則再次進(jìn)入受損EC組確定步驟,以繼續(xù)處理待修復(fù)損壞數(shù)據(jù)的故障分區(qū)。對(duì)于上述發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法,在一種可能的實(shí)施方式中,所述受損EC組確定步驟包括根據(jù)所獲取到的故障分區(qū)的編號(hào)查找左側(cè)最接近非故障分區(qū),其中左側(cè)最接近非故障分區(qū)為在編號(hào)減小方向上的編號(hào)與所述故障分區(qū)的編號(hào)最接近的非故障分區(qū);將讀取到的左側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息;判斷潛在受損EC組信息是否包括故障分區(qū)的編號(hào),在判斷結(jié)果為是的情況下將潛在受損EC組信息表示的EC組確定作為受損EC組并進(jìn)入所述損壞數(shù)據(jù)修復(fù)步驟,否則進(jìn)入如下步驟;根據(jù)所獲取到的故障分區(qū)的編號(hào)查找右側(cè)最接近非故障分區(qū),其中右側(cè)最接近非故障分區(qū)為在編號(hào)增大方向上的編號(hào)與所述故障分區(qū)的編號(hào)最接近的非故障分區(qū);以及將讀取到的右側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,將潛在受損EC組信息表示的EC組確定作為受損EC組,并進(jìn)入所述損壞數(shù)據(jù)修復(fù)步驟。對(duì)于上述發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法,在一種可能的實(shí)施方式中,所述受損EC組確定步驟包括根據(jù)所獲取到的故障分區(qū)的編號(hào)查找右側(cè)最接近非故障分區(qū),其中右側(cè)最接近非故障分區(qū)為在編號(hào)增 大方向上的編號(hào)與所述故障分區(qū)的編號(hào)最接近的非故障分區(qū);將讀取到的右側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息;判斷潛在受損EC組信息是否包括故障分區(qū)的編號(hào),在判斷結(jié)果為是的情況下將潛在受損EC組信息表示的EC組確定作為受損EC組并進(jìn)入所述損壞數(shù)據(jù)修復(fù)步驟,否則進(jìn)入如下步驟;根據(jù)所獲取到的故障分區(qū)的編號(hào)查找左側(cè)最接近非故障分區(qū),其中左側(cè)最接近非故障分區(qū)為在編號(hào)減小方向上的編號(hào)與所述故障分區(qū)的編號(hào)最接近的非故障分區(qū);以及將讀取到的左側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,將潛在受損EC組信息表示的EC組確定作為受損EC組,并進(jìn)入所述損壞數(shù)據(jù)修復(fù)步驟。對(duì)于上述發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法,在一種可能的實(shí)施方式中,在所述故障節(jié)點(diǎn)發(fā)現(xiàn)步驟之后還包括按編號(hào)大小對(duì)所有的故障分區(qū)進(jìn)行排序,以生成按編號(hào)大小排列的故障分區(qū)序列,所述受損EC組確定步驟進(jìn)一步包括對(duì)于所述故障分區(qū)序列中的編號(hào)無(wú)間斷的n+1個(gè)故障分區(qū)pt (i) pt (i+n),將未包括在該故障分區(qū)序列中的分區(qū)pt (i_l)和分區(qū)pt(i+n+l)分別確定作為這n+1個(gè)故障分區(qū)pt (i) pt(i+n)的左側(cè)最接近非故障分區(qū)和右側(cè)最接近非故障分區(qū),其中i為整數(shù)、η為大于等于O的整數(shù);將讀取到的左側(cè)最接近非故障分區(qū)Pt (1-Ι)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為左側(cè)潛在受損EC組信息,并將讀取到的右側(cè)最接近非故障分區(qū)Pt (i+η+Ι)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為右側(cè)潛在受損EC組信息;以及基于左側(cè)潛在受損EC組信息是否包括故障分區(qū)pt (i)、Pt (i+n)的編號(hào)以及右側(cè)潛在受損EC組信息是否包括故障分區(qū)Pt (i)、Pt (i+n)的編號(hào)來(lái)確定受損EC組,并進(jìn)入所述損壞數(shù)據(jù)修復(fù)步驟。對(duì)于上述發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法,在一種可能的實(shí)施方式中,所述基于左側(cè)潛在受損EC組信息是否包括故障分區(qū)pt(i)、pt (i+n)的編號(hào)以及右側(cè)潛在受損EC組信息是否包括故障分區(qū)Pt (i)、pt (i+n)的編號(hào)來(lái)確定受損EC組包括在左側(cè)潛在受損EC組信息包括故障分區(qū)Pt (i)和/或pt (i+n)的編號(hào)的情況下,將左側(cè)潛在受損EC組信息表示的EC組確定作為受損EC組;以及在右側(cè)潛在受損EC組信息包括故障分區(qū)pt (i)和/或Pt (i+n)的編號(hào)的情況下,將右側(cè)潛在受損EC組信息表示的EC組確定作為受損EC組。對(duì)于上述發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法,在一種可能的實(shí)施方式中,其特征在于,所述故障節(jié)點(diǎn)發(fā)現(xiàn)步驟進(jìn)一步包括記錄存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息;根據(jù)所記錄的狀態(tài)信息,將狀態(tài)信息表示已持續(xù)預(yù)定時(shí)間不可用的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)確定作為故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);以及獲取故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào)作為故障分區(qū)的編號(hào)。通過(guò)在發(fā)現(xiàn)故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的情況下,直接基于故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的分區(qū)信息來(lái)確定待修復(fù)的條帶數(shù)據(jù)所屬的EC組,根據(jù)本發(fā)明實(shí)施例的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置和方法能夠及時(shí)、有效地發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)。根據(jù)下面參考附圖對(duì)示例性實(shí)施例的詳細(xì)說(shuō)明,本發(fā)明的其它特征及方面將變得清楚。
包含在說(shuō)明書(shū)中并且構(gòu)成說(shuō)明書(shū)的一部分的說(shuō)明書(shū)附圖與說(shuō)明書(shū)一起示出了本發(fā)明的示例性實(shí)施例、特征和方面,并且用于解釋本發(fā)明的原理。圖1示出了根據(jù)本發(fā)明實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置的結(jié)構(gòu)框圖;圖2示出了根據(jù)本發(fā)明另一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置的結(jié)構(gòu)框圖;圖3示出了根據(jù)本發(fā)明又一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置的結(jié)構(gòu)框圖;圖4示出了根據(jù)本發(fā)明再一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置的結(jié)構(gòu)框圖;圖5示出了根據(jù)本發(fā)明一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法的流程圖;圖6示出了根據(jù)本發(fā)明另一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法的流程圖;圖7示出了根據(jù)本發(fā)明又一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法的流程圖;圖8示出了根據(jù)本發(fā)明又一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法的流程圖;以及圖9示出了根據(jù)本發(fā)明再一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的設(shè)備的結(jié)構(gòu)框圖。
具體實(shí)施例方式以下將參考附圖詳細(xì)說(shuō)明本發(fā)明的各種示例性實(shí)施例、特征和方面。附圖中相同的附圖標(biāo)記表示功能相同或相似的元件。盡管在附圖中示出了實(shí)施例的各種方面,但是除非特別指出,不必按比例繪制附圖。在這里專用的詞“示例性”意為“用作例子、實(shí)施例或說(shuō)明性”。這里作為“示例性”所說(shuō)明的任何實(shí)施例,不必解釋為優(yōu)于或好于其它實(shí)施例。另外,為了更好的說(shuō)明本發(fā)明,在下文的具體實(shí)施方式
中給出了眾多的具體細(xì)節(jié)。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,沒(méi)有這些具體細(xì)節(jié),本發(fā)明同樣可以實(shí)施。在另外一些實(shí)例中,對(duì)于大家熟知的方法、手段、元件和電路未作詳細(xì)描述,以便于凸顯本發(fā)明的主旨。在描述本發(fā)明的具體實(shí)施例之前,先對(duì)所涉及的術(shù)語(yǔ)做如下定義EC組,如上所述為M個(gè)原始數(shù)據(jù)塊和針對(duì)這M個(gè)原始數(shù)據(jù)塊基于EC算法生成的N個(gè)校驗(yàn)數(shù)據(jù)塊的集合,其中0〈Ν〈Μ ;存儲(chǔ)集群系統(tǒng),包括通過(guò)網(wǎng)絡(luò)互聯(lián)的多個(gè)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);以及分區(qū)(partition),為用于存儲(chǔ)數(shù)據(jù)的虛擬容器,對(duì)應(yīng)于某個(gè)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上的一段存儲(chǔ)空間,每個(gè)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)通常包含多個(gè)分區(qū),并且每個(gè)分區(qū)具有唯一的例如整數(shù)形式的編號(hào)。根據(jù)EC算法,屬于同一 EC組的S個(gè)條帶數(shù)據(jù)各自存儲(chǔ)于S個(gè)分區(qū),并且這S個(gè)分區(qū)的編號(hào)連續(xù)。此外,出于數(shù)據(jù)安全性的考慮,這S個(gè)分區(qū)可分別存儲(chǔ)在不同的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上。將以整數(shù)形式的分區(qū)編號(hào)為例詳細(xì)介紹根據(jù)本發(fā)明的實(shí)施例如下,但本發(fā)明不限于此,并且本領(lǐng)域技術(shù)人員應(yīng)能理解,能夠進(jìn)行連續(xù)編號(hào)的任意編號(hào)形式均適用于本發(fā)明。以下pt(i)表示編號(hào)為i的分區(qū),其中i為整數(shù)。EC組(i)表示編號(hào)為i的分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)所屬的EC組、即分區(qū)pt (i)對(duì)應(yīng)的EC組。以及,EC組(Γ +S)表示S+1個(gè)條帶數(shù)據(jù)各自存儲(chǔ)于分區(qū)Pt (i) pt(i+S)內(nèi),并且這S+1個(gè)條帶數(shù)據(jù)屬于同一 EC組。圖1示出了根據(jù)本發(fā)明一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置的結(jié)構(gòu)框圖。如圖1所示,發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置100包括故障節(jié)點(diǎn)發(fā)現(xiàn)單元110、受損EC組確定單元120和損壞數(shù)據(jù)修復(fù)單元130。其中故障節(jié)點(diǎn)發(fā)現(xiàn)單元110與受損EC組確定單元120連接,用于根據(jù)存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息查找存儲(chǔ)集群系統(tǒng)中的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),獲取故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào),并將所獲取到的編號(hào)作為故障分區(qū)的編號(hào)發(fā)送給受損EC組確定單元120。受損EC組確定單元120與故障節(jié)點(diǎn)發(fā)現(xiàn)單元110以及損壞數(shù)據(jù)修復(fù)單元130連接,用于根據(jù)所接收到的故障分區(qū)的編號(hào)確定故障分區(qū)對(duì)應(yīng)的受損EC組。例如,由于用于存儲(chǔ)屬于同一 EC組的條帶數(shù)據(jù)的分區(qū)具有連續(xù)的編號(hào),并且通常情況下屬于同一 EC組的條帶數(shù)據(jù)不會(huì)同時(shí)被損壞,受損EC組確定單元120可基于如下思想來(lái)確定故障分區(qū)對(duì)應(yīng)的受損EC組,S卩對(duì)于某個(gè)故障分區(qū),可以基于編號(hào)與該故障分區(qū)的編號(hào)最接近的非故障分區(qū)(以下稱為最接近非故障分區(qū))所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息來(lái)確定該故障分區(qū)對(duì)應(yīng)的受損EC組。具言之,對(duì)于某個(gè)故障分區(qū),可通過(guò)讀取其左側(cè)最接近非故障分區(qū)和/或右側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息、判斷所讀取到的EC組信息是否包括該故障分區(qū)的編號(hào)、并將包括該故障分區(qū)的編號(hào)的EC組信息表示的EC組確定作為受 損EC組來(lái)確定該故障分區(qū)對(duì)應(yīng)的受損EC組。其中,左側(cè)最接近非故障分區(qū)是在編號(hào)減小方向上的最接近非故障分區(qū),右側(cè)最接近非故障分區(qū)是在編號(hào)增大方向上的最接近非故障分區(qū)。并且,如果從左側(cè)最接近非故障分區(qū)和右側(cè)最接近非故障分區(qū)所讀取到的EC組信息均不包括該故障分區(qū)的編號(hào),則認(rèn)為出現(xiàn)了該故障分區(qū)對(duì)應(yīng)的受損EC組的條帶數(shù)據(jù)均被損壞的極端情況,從而超出了利用EC算法修復(fù)數(shù)據(jù)的范疇。損壞數(shù)據(jù)修復(fù)單元130與受損EC組確定單元120連接,用于針對(duì)所確定的受損EC組,利用EC算法生成恢復(fù)數(shù)據(jù),并將所生成的恢復(fù)數(shù)據(jù)存儲(chǔ)到指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的相應(yīng)分區(qū)上,以能夠用所述指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)替換所述故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)。通過(guò)在故障節(jié)點(diǎn)發(fā)現(xiàn)單元110查找到存儲(chǔ)集群系統(tǒng)中的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的情況下,受損EC組確定單元120直接基于故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的分區(qū)信息來(lái)確定待修復(fù)的條帶數(shù)據(jù)所屬的EC組,根據(jù)本發(fā)明上述實(shí)施例的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置能夠及時(shí)、有效地發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù),從而提高了數(shù)據(jù)存儲(chǔ)以及系統(tǒng)的可靠性。圖2示出了根據(jù)本發(fā)明另一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置的結(jié)構(gòu)框圖。圖2中與圖1標(biāo)號(hào)相同的組件具有相同的功能。圖2所示的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置200中的受損EC組確定單元120可包括故障分區(qū)編號(hào)接收模塊121、最接近非故障分區(qū)查找模塊122以及受損EC組確定模塊123。其中,故障分區(qū)編號(hào)接收模塊121與故障節(jié)點(diǎn)發(fā)現(xiàn)單元110以及最接近非故障分區(qū)查找模塊122連接,用于接收來(lái)自故障節(jié)點(diǎn)發(fā)現(xiàn)單元110的故障分區(qū)的編號(hào),并將所接收到的故障分區(qū)的編號(hào)發(fā)送給最接 近非故障分區(qū)查找模塊122。最接近非故障分區(qū)查找模塊122與故障分區(qū)編號(hào)接收模塊121以及受損EC組確定模塊123連接,用于基于所接收到的故障分區(qū)的編號(hào)查找最接近非故障分區(qū),并將所查找到的最接近非故障分區(qū)的編號(hào)發(fā)送給受損EC組確定模塊123。受損EC組確定模塊123與最接近非故障分區(qū)查找模塊122以及損壞數(shù)據(jù)修復(fù)單元130連接,用于將讀取到的最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,判斷潛在受損EC組信息是否包括故障分區(qū)的編號(hào),并在判斷為潛在受損EC組信息包括故障分區(qū)的編號(hào)的情況下將潛在受損EC組信息表示的EC組確定作為受損EC組,以使得損壞數(shù)據(jù)修復(fù)單元130可以基于該受損EC組通過(guò)EC算法來(lái)修復(fù)故障分區(qū)的損壞數(shù)據(jù)。例如,根據(jù)本發(fā)明的一種實(shí)施方式,在Pt (i)為故障分區(qū)的情況下,最接近非故障分區(qū)查找模塊122可以通過(guò)依次判斷分區(qū)pt (1-1)、pt (1-2)…是否為非故障分區(qū)來(lái)確定左側(cè)最接近非故障分區(qū)Pt (j),其中j〈i。此外,j可進(jìn)一步限定為大于1-Max, Max表示查找限值,以避免例如在對(duì)應(yīng)于同一 EC組的最左側(cè)分區(qū)故障的情況下無(wú)意義地向左側(cè)進(jìn)行過(guò)多次的查找判斷。用戶可基于存儲(chǔ)集群系統(tǒng)的資源占用率等因素自由設(shè)置查找限值Max。例如,在資源占用率較高的情況下,查找限值Max可設(shè)置為較小,例如10以下,以避免因查找最接近非故障分區(qū)而過(guò)多增大存儲(chǔ)集群系統(tǒng)的負(fù)擔(dān)。在確定了左側(cè)最接近非故障分區(qū)之后,受損EC組確定模塊123可將讀取到的左側(cè)最接近非故障分區(qū)Pt (j)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,并判斷潛在受損EC組信息是否包括故障分區(qū)pt(i)的編號(hào)。在判斷為潛在受損EC組信息包括故障分區(qū)pt⑴的編號(hào)的情況下,受損EC組確定模塊123將潛在受損EC組信息表示的EC組確定作為受損EC組。
否則,需要由最接近非故障分區(qū)查找模塊122繼續(xù)查找右側(cè)的最接近非故障分區(qū)。具言之,最接近非故障分區(qū)查找模塊122可以通過(guò)依次判斷分區(qū)pt (i+1)、pt (i+2)…是否為非故障分區(qū)來(lái)確定右側(cè)最接近非故障分區(qū)Pt (k),其中k>i。此外,k可進(jìn)一步限定為小于i+Max,Max如上所述表示查找限值,以避免例如在對(duì)應(yīng)于同一 EC組的最右側(cè)分區(qū)故障的情況下無(wú)意義地向右側(cè)進(jìn)行過(guò)多次的查找判斷。在確定了右側(cè)最接近非故障分區(qū)之后,受損EC組確定模塊123可將讀取到的右側(cè)最接近非故障分區(qū)Pt (k)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,并將潛在受損EC組信息表示的EC組確定作為受損EC組。需要說(shuō)明的是,盡管以先查找左側(cè)最接近非故障分區(qū)為例解釋了最接近非故障分區(qū)查找模塊122和受損EC組確定模塊123的操作如上,但本領(lǐng)域技術(shù)人員應(yīng)能理解,顯然也可先查找右側(cè)最接近非故障分區(qū)。此外,由于受損EC組確定單元120通過(guò)參考最接近非故障分區(qū)來(lái)確定故障分區(qū)所對(duì)應(yīng)的EC組,根據(jù)本發(fā)明上述實(shí)施例的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置能夠準(zhǔn)確、快速地確定受損EC組,進(jìn)而能夠及時(shí)修復(fù)故障分區(qū)的損壞數(shù)據(jù)。圖3示出了根據(jù)本發(fā)明另一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置的結(jié)構(gòu)框圖。圖3中與圖2標(biāo)號(hào)相同的組件具有相同的功能。圖3所示的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置300中的受損EC組確定單元120還可包括故障分區(qū)排序模塊124。如圖3所示,故障分區(qū)排序模塊124與故障分區(qū)編號(hào)接收模塊121以及最接近非故障分區(qū)查找模塊122連接,用 于對(duì)所接收到的故障分區(qū)的編號(hào)按大小進(jìn)行排序,以使得最接近非故障分區(qū)查找模塊122可按編號(hào)大小順序遍歷所有的故障分區(qū)。例如,根據(jù)本發(fā)明的一種實(shí)施方式,故障分區(qū)排序模塊124可以將所有的故障分區(qū)按編號(hào)從小到大排序。然后,對(duì)于按編號(hào)從小到大排列的故障分區(qū)序列中的某個(gè)編號(hào)孤立的故障分區(qū)Pt (i),最接近非故障分區(qū)查找模塊122可將未包括在該故障分區(qū)序列中的分區(qū)Pt (1-Ι)和分區(qū)pt (i+1)分別確定作為故障分區(qū)pt (i)的左側(cè)最接近非故障分區(qū)和右側(cè)最接近非故障分區(qū)。在確定了左側(cè)最接近非故障分區(qū)Pt (1-Ι)和右側(cè)最接近非故障分區(qū)Pt (i+1)的基礎(chǔ)上,受損EC組確定模塊123可將讀取到的左側(cè)最接近非故障分區(qū)Pt (1-Ι)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為左側(cè)潛在受損EC組信息,并判斷左側(cè)潛在受損EC組信息是否包括故障分區(qū)Pt (i)的編號(hào)。在判斷為左側(cè)潛在受損EC組信息包括故障分區(qū)Pt⑴的編號(hào)的情況下,受損EC組確定模塊123將潛在受損EC組信息表示的EC組確定作為受損EC組。否則,受損EC組確定模塊123可以將讀取到的右側(cè)最接近非故障分區(qū)pt (i+1)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為右側(cè)潛在受損EC組信息,并將右側(cè)潛在受損EC組信息表示的EC組確定作為受損EC組。另一方面,對(duì)于按編號(hào)從小到大排列的故障分區(qū)序列中的n+1個(gè)編號(hào)連續(xù)的故障分區(qū)Pt (i) pt (i+n),最接近非故障分區(qū)查找模塊122可將未包括在該故障分區(qū)序列中的分區(qū)Pt (1-Ι)和分區(qū)pt(i+n+l)分別確定作為這n+1個(gè)故障分區(qū)pt (i) pt(i+n)的左側(cè)最接近非故障分區(qū)和右側(cè)最接近非故障分區(qū)。在確定了左側(cè)最接近非故障分區(qū)pt (1-Ι)和右側(cè)最接近非故障分區(qū)pt(i+n+l)的基礎(chǔ)上,受損EC組確定模塊123可將讀取到的左側(cè)最接近非故障分區(qū)Pt (1-Ι)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為左側(cè)潛在受損EC組信息、將讀取到的右側(cè)最接近非故障分區(qū)Pt (i+η+Ι)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為右側(cè)潛在受損EC組信息,并分別確定左側(cè)潛在受損EC組信息是否包括故障分區(qū)Pt⑴、pt (i+n)的編號(hào)以及右側(cè)潛在受損EC組信息是否包括故障分區(qū)Pt (i)、pt (i+n)的編號(hào)。 在左側(cè)潛在受損EC組信息包括故障分區(qū)Pt⑴以及pt (i+n)的編號(hào)的情況下,認(rèn)為故障分區(qū)Pt (i) Pt (i+n)對(duì)應(yīng)于同一受損EC組,并且受損EC組確定模塊123將左側(cè)潛在受損EC組信息表示的EC組確定作為受損EC組。在右側(cè)潛在受損EC組信息包括故障分區(qū)Pt⑴以及pt (i+n)的編號(hào)的情況下,認(rèn)為故障分區(qū)Pt (i) Pt (i+n)對(duì)應(yīng)于同一受損EC組,并且受損EC組確定模塊123將右側(cè)潛在受損EC組信息表示的EC組確定作為受損EC組。而左側(cè)潛在受損EC組信息包括故障分區(qū)Pt (i)的編號(hào)、右側(cè)潛在受損EC組信息包括故障分區(qū)Pt (i+n)的編號(hào)的情況下,認(rèn)為故障分區(qū)Pt (i) Pt (i+n)對(duì)應(yīng)于兩個(gè)不同的受損EC組,并且受損EC組確定模塊123通過(guò)將左側(cè)潛在受損EC組信息和右側(cè)潛在受損EC組信息表示的EC組均確定作為受損EC組。需要說(shuō)明的是,盡管以故障分區(qū)排序模塊124按編號(hào)從小到大對(duì)所有故障分區(qū)進(jìn)行排序?yàn)槔忉屃俗罱咏枪收戏謪^(qū)查找模塊122和受損EC組確定模塊123的操作如上,但本領(lǐng)域技術(shù)人員應(yīng)能理解,顯然故障分區(qū)排序模塊124也可按編號(hào)從大到小對(duì)所有故障分區(qū)進(jìn)行排序。通過(guò)故障分區(qū)排序模塊124將所有的故障分區(qū)按編號(hào)大小進(jìn)行排序,根據(jù)本發(fā)明上述實(shí)施例的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置能夠有序地遍歷所有故障分區(qū),這在一定程度上能夠進(jìn)一步提高最接近非故障分區(qū)的查找速度和準(zhǔn)確度,進(jìn)而能夠進(jìn)一步提高修復(fù)損壞數(shù)據(jù)的及時(shí)性。圖4示出了根據(jù)本發(fā)明另一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置的結(jié)構(gòu)框圖。圖4中與圖1標(biāo)號(hào)相同的組件具有相同的功能。圖4所示的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置400中的故障節(jié)點(diǎn)發(fā)現(xiàn)單元110可包括節(jié)點(diǎn)狀態(tài)記錄模塊111、故障節(jié)點(diǎn)確定模塊112以及分區(qū)編號(hào)獲取模塊113。其中,節(jié)點(diǎn)狀態(tài)記錄模塊111與故障節(jié)點(diǎn)確定模塊112以及存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)連接,用于接收并記錄各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息。故障節(jié)點(diǎn)確定模塊112與節(jié)點(diǎn)狀態(tài)記錄模塊111和分區(qū)編號(hào)獲取模塊113連接,用于根據(jù)節(jié)點(diǎn)狀態(tài)記錄模塊111所記錄的狀態(tài)信息,將狀態(tài)信息表示已持續(xù)預(yù)定時(shí)間不可用的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)確定作為故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)。其中,所述預(yù)定時(shí)間可由用戶根據(jù)對(duì)數(shù)據(jù)存儲(chǔ)的安全性和/或系統(tǒng)的可靠性的實(shí)際需求靈活設(shè)置。例如,在安全性及可靠性要求高的情況下,所述預(yù)定時(shí)間應(yīng)設(shè)置得較短,優(yōu)選為若干秒、甚至若干毫秒。在安全性及可靠性要求不是很高的情況下,所述預(yù)定時(shí)間可設(shè)置得相對(duì)較長(zhǎng),例如為若干分鐘。分區(qū)編號(hào)獲取模塊113與故障節(jié)點(diǎn)確定模塊112以及受損EC組確定單元120 (可具體為受損EC組確定單元120中的故障分區(qū)編號(hào)接收模塊121)連接,用于獲取故障節(jié)點(diǎn)確定模塊112所確定的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào),并將所獲取到的編號(hào)作為故障分區(qū)的編號(hào)發(fā)送至受損EC組確定單元120 (可具體為受損EC組確定單元120中的故障分區(qū)編號(hào)接收模塊121)。通過(guò)由故障節(jié)點(diǎn)發(fā)現(xiàn)單元主動(dòng)地基于存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的狀態(tài)來(lái)定位故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),根據(jù)本發(fā)明上述實(shí)施例的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置能夠及時(shí)地發(fā)現(xiàn)故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),從而進(jìn)一步提高了數(shù)據(jù)存儲(chǔ)以及系統(tǒng)的可靠性。圖5示出了根據(jù)本發(fā)明一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法的流程圖。如圖5所示,發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法500包括步驟S510,根據(jù)存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息查找存儲(chǔ)集群系統(tǒng)中的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),并獲取故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào)作為故障分區(qū)的編號(hào);步驟S520,根據(jù)所獲取到的故障分區(qū)的編號(hào)確定故障分區(qū)所對(duì)應(yīng)的受損EC組;步驟S530,針對(duì)所確定的受損EC組,利用EC算法生成恢復(fù)數(shù)據(jù),并將所生成的恢復(fù)數(shù)據(jù)存儲(chǔ)到指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的相應(yīng)分區(qū)上,以能夠用所述指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)替換所述故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);以及步驟S540,判斷所有故障分區(qū)是否均已處理,如果判斷為是,則再次進(jìn)入步驟S510以查找新的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),如果判斷為否,則再次進(jìn)入步驟S520,以繼續(xù)處理待修復(fù)損壞數(shù)據(jù)的故障分區(qū)。在上述步驟S520中,由于用于存儲(chǔ)屬于同一 EC組的條帶數(shù)據(jù)的分區(qū)具有連續(xù)的編號(hào),并且通常情況下屬于同一 EC組的條帶數(shù)據(jù)不會(huì)同時(shí)被損壞,可基于如下思想來(lái)確定故障分區(qū)所對(duì)應(yīng)的EC組,S卩對(duì)于某個(gè)故障分區(qū),可以基于編號(hào)與該故障分區(qū)的編號(hào)最接近的非故障分區(qū)(以下稱為最接近非故障分區(qū))所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息來(lái)確定該故障分區(qū)對(duì)應(yīng)的 受損EC組。具言之,對(duì)于某個(gè)故障分區(qū),可通過(guò)讀取其左側(cè)最接近非故障分區(qū)和/或右側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶EC組信息、判斷所讀取到的EC組信息是否包括該故障分區(qū)的編號(hào)、并將包括該故障分區(qū)的編號(hào)的EC組信息表示的EC組確定作為受損EC組來(lái)確定該故障分區(qū)對(duì)應(yīng)的受損EC組。其中,左側(cè)最接近非故障分區(qū)是在編號(hào)減小方向上的最接近非故障分區(qū),右側(cè)最接近非故障分區(qū)是在編號(hào)增大方向上的最接近非故障分區(qū)。并且,如果從左側(cè)最接近非故障分區(qū)和右側(cè)最接近非故障分區(qū)所讀取到的EC組信息均不包括該故障分區(qū)的編號(hào),則認(rèn)為出現(xiàn)了該故障分區(qū)對(duì)應(yīng)的受損EC組的條帶數(shù)據(jù)均被損壞的極端情況,從而超出了利用EC算法修復(fù)數(shù)據(jù)的范疇。由于在查找到故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的情況下,直接基于故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的分區(qū)信息來(lái)確定待修復(fù)的條帶數(shù)據(jù)所屬的EC組,利用根據(jù)本發(fā)明上述實(shí)施例的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法能夠及時(shí)、有效地發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù),進(jìn)而能夠有效提高數(shù)據(jù)存儲(chǔ)及系統(tǒng)的可靠性。圖6示出了根據(jù)本發(fā)明另一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法的流程圖。圖6中與圖5標(biāo)號(hào)相同的步驟具有相同的功能。在圖6所示的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法600中,圖5所示的步驟S520可具體包括步驟S621,根據(jù)所獲取到的故障分區(qū)的編號(hào)查找左側(cè)最接近非故障分區(qū);步驟S622,將讀取到的左側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息;
步驟S623,判斷潛在受損EC組信息是否包括故障分區(qū)的編號(hào),在判斷結(jié)果為是的情況下直接進(jìn)入步驟S624,否則經(jīng)由步驟S625、S626進(jìn)入步驟S624 ;步驟S624,將潛在受損EC組信息表示的EC組確定作為受損EC組,并隨后進(jìn)入步驟 S530 ;步驟S625,根據(jù)所獲取到的故障分區(qū)的編號(hào)查找右側(cè)最接近非故障分區(qū);以及步驟S626,將讀取到的右側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,并隨后進(jìn)入步驟S624。例如,根據(jù)本發(fā)明的一種實(shí)施方式,在pt (i)為故障分區(qū)的情況下,在步驟S621中,可以通過(guò)依次判斷分區(qū)Pt (1-1)、pt (1-2)…是否為非故障分區(qū)來(lái)確定左側(cè)最接近非故障分區(qū)Pt (j),其中j〈i。此外,j可進(jìn)一步限定為大于1-Max, Max表示查找限值,以避免例如在對(duì)應(yīng)于同一 EC組的最左側(cè)分區(qū)故障的情況下無(wú)意義地向左側(cè)進(jìn)行過(guò)多次的查找判斷。用戶可基于存儲(chǔ)集群系統(tǒng)的資源占用率等因素自由設(shè)置查找限值Max。例如,在資源占用率較高的情況下,查找限值Max可設(shè)置為較小,例如10以下,以避免因查找最接近非故障分區(qū)而過(guò)多增大存儲(chǔ)集群系統(tǒng)的負(fù)擔(dān)。在確定了左側(cè)最接近非故障分區(qū)之后,可通過(guò)步驟S622將讀取到的左側(cè)最接近非故障分區(qū)Pt (j)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,并通過(guò)步驟S623判斷潛在受損 EC組信息是否包括故障分區(qū)pt(i)的編號(hào)。在步驟S623判斷為是的情況下,直接進(jìn)入步驟S624。在步驟S624中,將潛在受損EC組信息表示的EC組確定作為受損EC組。另一方面,在步驟S623判斷為否的情況下,進(jìn)入步驟S625。在步驟S625中,可以通過(guò)依次判斷分區(qū)Pt (i+1)、pt (i+2)…是否為非故障分區(qū)來(lái)確定右側(cè)最接近非故障分區(qū)Pt (k),其中k>i。此外,k可進(jìn)一步限定為小于i+Max, Max如上所述表示查找限值,以避免例如在對(duì)應(yīng)于同一 EC組的最右側(cè)分區(qū)故障的情況下無(wú)意義地向右側(cè)進(jìn)行過(guò)多次的查找判斷。在確定了右側(cè)最接近非故障分區(qū)之后,可通過(guò)步驟S626將讀取到的右側(cè)最接近非故障分區(qū)Pt (k)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,并隨后通過(guò)步驟S624將該潛在受損EC組信息表示的EC組確定作為受損EC組。需要說(shuō)明的是,盡管以先查找左側(cè)最接近非故障分區(qū)為例解釋了確定受損EC組的具體流程如上,但本領(lǐng)域技術(shù)人員應(yīng)能理解,顯然也可先查找右側(cè)最接近非故障分區(qū)。此外,由于通過(guò)參考最接近非故障分區(qū)來(lái)確定故障分區(qū)所對(duì)應(yīng)的EC組,利用根據(jù)本發(fā)明上述實(shí)施例的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法能夠準(zhǔn)確、快速地確定受損EC組,進(jìn)而能夠及時(shí)修復(fù)故障分區(qū)的損壞數(shù)據(jù)。圖7示出了根據(jù)本發(fā)明另一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法的流程圖。圖7中與圖5標(biāo)號(hào)相同的步驟具有相同的功能。在圖7所示的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法700中,可在圖5所示的步驟S520之前還包括步驟S710。在步驟S710中,按編號(hào)大小對(duì)所有的故障分區(qū)進(jìn)行排序,以生成按編號(hào)大小排列的故障分區(qū)序列。此外,在圖7所示的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法700中,圖5所示的步驟S520可具體包括步驟S721,對(duì)于故障分區(qū)序列中的編號(hào)無(wú)間斷的n+1個(gè)故障分區(qū)pt⑴ Pt (i+n),將未包括在該故障分區(qū)序列中的分區(qū)Pt (1-1)和分區(qū)pt(i+n+l)分別確定作為這n+1個(gè)故障分區(qū)pt(i) pt(i+n)的左側(cè)最接近非故障分區(qū)和右側(cè)最接近非故障分區(qū),其中η為大于等于O的整數(shù);步驟S722,將讀取到的左側(cè)最接近非故障分區(qū)pt (1-Ι)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為左側(cè)潛在受損EC組信息,并將讀取到的右側(cè)最接近非故障分區(qū)Pt (i+η+Ι)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為右側(cè)潛在受損EC組信息;以及步驟S723,基于左側(cè)潛在受損EC組信息是否包括故障分區(qū)pt (i)、pt (i+n)的編號(hào)以及右側(cè)潛在受損EC組信息是否包括故障分區(qū)pt (i)、pt (i+n)的編號(hào)來(lái)確定受損EC組,并然后進(jìn)入步驟S530。對(duì)于上述步驟S723,根據(jù)本發(fā)明的一種實(shí)施方式,在左側(cè)潛在受損EC組信息包括故障分區(qū)Pt (i)以及Pt (i+n)的編號(hào)的情況下,認(rèn)為故障分區(qū)Pt (i) Pt (i+n)對(duì)應(yīng)于同一受損EC組,并將左側(cè)潛在受損EC組信息表示的EC組確定作為受損EC組;在右側(cè)潛在受損EC組信息包括故障分區(qū)pt (i)以及pt (i+n)的編號(hào)的情況下,也認(rèn)為故障分區(qū)pt (i) Pt (i+n)對(duì)應(yīng)于同一受損EC組,并將右側(cè)潛在受損EC組信息表示的EC組確定作為受損EC組;以及,在左側(cè)潛在受損EC組信息包括故障分區(qū)pt (i)的編號(hào)、右側(cè)潛在受損EC組信息包括故障分區(qū)Pt (i+n)的編號(hào)的情況下,認(rèn)為故障分區(qū)pt (i) pt (i+n)對(duì)應(yīng)于兩個(gè)不同的受損EC組,并且可將左側(cè)潛在受損EC組信息以及右側(cè)潛在受損EC組信息表示的EC組均確定作為受損EC組。由于將所有的故障分區(qū)按編號(hào)大小進(jìn)行排序,通過(guò)根據(jù)本發(fā)明上述實(shí)施例的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法能夠有序地遍歷所有故障分區(qū),這在一定程度上能夠進(jìn)一步提高最接近非故障分區(qū)的查找速度和準(zhǔn)確度,進(jìn)而能夠進(jìn)一步提高修復(fù)損壞數(shù)據(jù)的及時(shí)性。圖8示出了根據(jù)本發(fā)明另 一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法的流程圖。圖8中與圖5標(biāo)號(hào)相同的步驟具有相同的功能。在圖8所示的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法800中,圖5所示的步驟S510可具體包括步驟S811,記錄存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息;步驟S812,根據(jù)所記錄的狀態(tài)信息,將狀態(tài)信息表示已持續(xù)預(yù)定時(shí)間不可用的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)確定作為故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);以及步驟S813,獲取故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào)作為故障分區(qū)的編號(hào)。其中,步驟S811中的狀態(tài)信息記錄可根據(jù)各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的上報(bào)而實(shí)時(shí)進(jìn)行。相應(yīng)地,在步驟S540的判斷結(jié)果為針對(duì)當(dāng)前的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所確定的所有故障分區(qū)均已處理的情況下,則將再次進(jìn)入步驟S812以根據(jù)在步驟S811中實(shí)時(shí)更新的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的狀態(tài)信息來(lái)定位新的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)。此外,步驟S812中的預(yù)定時(shí)間可由用戶根據(jù)實(shí)際對(duì)數(shù)據(jù)存儲(chǔ)的安全性、可靠性的要求高低靈活設(shè)置。例如,在安全性、可靠性要求高的情況下,該預(yù)定時(shí)間應(yīng)設(shè)置得較短,優(yōu)選為若干秒、甚至若干毫秒。然而,在安全性、可靠性要求不是很高的情況下,該預(yù)定時(shí)間可設(shè)置得相對(duì)較長(zhǎng),例如若干分鐘。通過(guò)主動(dòng)地基于存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的狀態(tài)來(lái)定位故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),根據(jù)本發(fā)明上述實(shí)施例的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法能夠及時(shí)地發(fā)現(xiàn)故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),從而進(jìn)一步提高了數(shù)據(jù)存儲(chǔ)以及系統(tǒng)的可靠性。圖9示出了根據(jù)本發(fā)明再一實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的設(shè)備的結(jié)構(gòu)框圖。所述發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的設(shè)備900可以是具備計(jì)算能力的主機(jī)服務(wù)器、個(gè)人計(jì)算機(jī)PC、或者可攜帶的便攜式計(jì)算機(jī)或終端等。本發(fā)明具體實(shí)施例并不對(duì)計(jì)算節(jié)點(diǎn)的具體實(shí)現(xiàn)做限定。所述發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的設(shè)備900包括處理器(processor)910、通信接口(Communications Interface)920、存儲(chǔ)器(memoryarray)930 和總線 940。其中,處理器910、通信接口 920、以及存儲(chǔ)器930通過(guò)總線940完成相互間的通信。通信接口 920用于與網(wǎng)元通信,其中網(wǎng)元包括例如虛擬機(jī)管理中心、共享存儲(chǔ)等。處理器910用于執(zhí)行程序。處理器910可能是一個(gè)中央處理器CPU,或者是專用集成電路ASIC (Application SpecificIntegrated Circuit),或者是被配置成實(shí)施本發(fā)明實(shí)施例的一個(gè)或多個(gè)集成電路。存儲(chǔ)器930用于存放文件。存儲(chǔ)器930可能包含高速RAM存儲(chǔ)器,也可能還包括非易失性存儲(chǔ)器(non-volatile memory),例如至少一個(gè)磁盤(pán)存儲(chǔ)器。存儲(chǔ)器930也可以是存儲(chǔ)器陣列。存儲(chǔ)器930還可能被分塊,并且所劃分的塊可按一定的規(guī)則組合成虛擬卷。在一種可能的實(shí)施方式中,上述程序可為包括計(jì)算機(jī)操作指令的程序代碼。該程序可用于根據(jù)存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息查找存儲(chǔ)集群系統(tǒng)中的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),并獲取故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào)作為故障分區(qū)的編號(hào);根據(jù)所獲取到的故障分區(qū)的編號(hào)確定故障分區(qū)所對(duì)應(yīng)的受損EC組;針對(duì)所確定的受損EC組,利用EC算法生成恢復(fù)數(shù)據(jù),并將所生成的恢復(fù)數(shù)據(jù)存儲(chǔ)到指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的相應(yīng)分區(qū)上,以能夠用所述指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)替換所述故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);以及判斷所有故障分區(qū)是否均已處理,如果判斷為是,則再次查找新的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),如果判斷為否,則再次根據(jù)所獲取到的故障分區(qū)的編號(hào)確定故障分區(qū)所對(duì)應(yīng)的受損EC組,以繼續(xù)處理待修復(fù)損壞數(shù)據(jù)的故障分區(qū)。對(duì)于上述程序,在一種可能的實(shí)施方式中,根據(jù)所獲取到的故障分區(qū)的編號(hào)確定故障分區(qū)所對(duì)應(yīng)的受損EC組包括根據(jù)所獲取到的故障分區(qū)的編號(hào)查找左側(cè)最接近非故障分區(qū),其中左側(cè)最接近非故障分區(qū)為在編號(hào)減小方向上的編號(hào)與所述故障分區(qū)的編號(hào)最接近的非故障分區(qū);將讀取到的左側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息;判斷潛在受損EC組信息是否包括故障分區(qū)的編號(hào);在判斷結(jié)果為是的情況下將潛在受損EC組信息表示的EC組確定作為受損EC組;否則,根據(jù)所獲取到的故障分區(qū)的編號(hào)查找右側(cè)最接近非故障分區(qū),將讀取到的右側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,并將潛在受損EC組信息表示的EC組確定作為受損EC組,其中右側(cè)最接近非故障分區(qū)為在編號(hào)增大方向上的編號(hào)與所述故障分區(qū)的編號(hào)最接近的非故障分區(qū)。
對(duì)于上述程序,在一種可能的實(shí)施方式中,根據(jù)所獲取到的故障分區(qū)的編號(hào)確定故障分區(qū)所對(duì)應(yīng)的受損EC組包括根據(jù)所獲取到的故障分區(qū)的編號(hào)查找右側(cè)最接近非故障分區(qū),其中右側(cè)最接近非故障分區(qū)為在編號(hào)增大方向上的編號(hào)與所述故障分區(qū)的編號(hào)最接近的非故障分區(qū);將讀取到的右側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息;判斷潛在受損EC組信息是否包括故障分區(qū)的編號(hào);在判斷結(jié)果為是的情況下將潛在受損EC組信息表示的EC組確定作為受損EC組;否則,根據(jù)所獲取到的故障分區(qū)的編號(hào)查找左側(cè)最接近非故障分區(qū),將讀取到的左側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,并將潛在受損EC組信息表示的EC組確定作為受損EC組,其中左側(cè)最接近非故障分區(qū)為在編號(hào)減小方向上的編號(hào)與所述故障分區(qū)的編號(hào)最接近的非故障分區(qū)。對(duì)于上述程序,在一種可能的實(shí)施方式中,該程序還可用于按編號(hào)大小對(duì)所有的故障分區(qū)進(jìn)行排序,以生成按編號(hào)大小排列的故障分區(qū)序列,根據(jù)所獲取到的故障分區(qū)的編號(hào)確定故障分區(qū)所對(duì)應(yīng)的受損EC組進(jìn)一步包括對(duì)于所述故障分區(qū)序列中的編號(hào)無(wú)間斷的n+1個(gè)故障分區(qū)pt (i) pt (i+n),將未包括在該故障分區(qū)序列中的分區(qū)Pt (1-ι)和分區(qū)pt(i+n+l)分別確定作為這n+1個(gè)故障分區(qū)pt(i) pt(i+n)的左側(cè)最接近非故障分區(qū)和右側(cè)最接近非故障分區(qū),其中i為整數(shù)、η為大于等于O的整數(shù);將讀取到的左側(cè) 最接近非故障分區(qū)pt (1-1)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為左側(cè)潛在受損EC組信息,并將讀取到的右側(cè)最接近非故障分區(qū)Pt (i+η+Ι)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為右側(cè)潛在受損EC組信息;以及基于左側(cè)潛在受損EC組信息是否包括故障分區(qū)pt(i)、pt (i+n)的編號(hào)以及右側(cè)潛在受損EC組信息是否包括故障分區(qū)pt (i)、pt (i+n)的編號(hào)來(lái)確定受損EC組。對(duì)于上述程序,在一種可能的實(shí)施方式中,所述基于左側(cè)潛在受損EC組信息是否包括故障分區(qū)Pt (i)、Pt (i+n)的編號(hào)以及右側(cè)潛在受損EC組信息是否包括故障分區(qū)pt (i)、pt (i+n)的編號(hào)來(lái)確定受損EC組包括在左側(cè)潛在受損EC組信息包括故障分區(qū)Pt⑴和/或pt (i+n)的編號(hào)的情況下,將左側(cè)潛在受損EC組信息表示的EC組確定作為受損EC組;以及在右側(cè)潛在受損EC組信息包括故障分區(qū)Pt⑴和/或pt (i+n)的編號(hào)的情況下,將右側(cè)潛在受損EC組信息表示的EC組確定作為受損EC組。對(duì)于上述程序,在一種可能的實(shí)施方式中,根據(jù)存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息查找存儲(chǔ)集群系統(tǒng)中的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),并獲取故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào)作為故障分區(qū)的編號(hào)包括記錄存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息;根據(jù)所記錄的狀態(tài)信息,將狀態(tài)信息表示已持續(xù)預(yù)定時(shí)間不可用的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)確定作為故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);以及獲取故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào)作為故障分區(qū)的編號(hào)。
本領(lǐng)域普通技術(shù)人員可以意識(shí)到,本文所描述的實(shí)施例中的各示例性單元及算法步驟,能夠以電子硬件、或者計(jì)算機(jī)軟件和電子硬件的結(jié)合來(lái)實(shí)現(xiàn)。這些功能究竟以硬件還是軟件形式來(lái)實(shí)現(xiàn),取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以針對(duì)特定的應(yīng)用選擇不同的方法來(lái)實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。如果以計(jì)算機(jī)軟件的形式來(lái)實(shí)現(xiàn)所述功能并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),則在一定程度上可認(rèn)為本發(fā)明的技術(shù)方案的全部或部分(例如對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分)是以計(jì)算機(jī)軟件產(chǎn)品的形式體現(xiàn)的。該計(jì)算機(jī)軟件產(chǎn)品通常存儲(chǔ)在計(jì)算機(jī)可讀取的存儲(chǔ)介質(zhì)中,包括若干指令用以使得計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī)、服務(wù)器、或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各實(shí)施例方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括U盤(pán)、移動(dòng)硬盤(pán)、只讀存儲(chǔ)器(ROM, Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM, Random Access Memory)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。以上所述,僅為本發(fā)明的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置,其特征在于,包括 故障節(jié)點(diǎn)發(fā)現(xiàn)單元,用于根據(jù)存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息查找存儲(chǔ)集群系統(tǒng)中的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),獲取故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào),并將所獲取到的編號(hào)作為故障分區(qū)的編號(hào)發(fā)送出去; 受損EC組確定單元,與所述故障節(jié)點(diǎn)發(fā)現(xiàn)單元連接,用于根據(jù)從所述故障節(jié)點(diǎn)發(fā)現(xiàn)單元接收到的故障分區(qū)的編號(hào)確定故障分區(qū)對(duì)應(yīng)的受損EC組;以及 損壞數(shù)據(jù)修復(fù)單元,與所述受損EC組確定單元連接,用于針對(duì)所確定的受損EC組利用EC算法生成恢復(fù)數(shù)據(jù),并將所生成的恢復(fù)數(shù)據(jù)存儲(chǔ)到指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的相應(yīng)分區(qū)上,以能夠用所述指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)替換所述故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)。
2.根據(jù)權(quán)利要求1所述的裝置,其特征在于,所述受損EC組確定單元包括 故障分區(qū)編號(hào)接收模塊,與所述故障節(jié)點(diǎn)發(fā)現(xiàn)單元連接,用于接收所述故障節(jié)點(diǎn)發(fā)現(xiàn)單元所發(fā)送的故障分區(qū)的編號(hào); 最接近非故障分區(qū)查找模塊,與所述故障分區(qū)編號(hào)接收模塊連接,用于基于所接收到的故障分區(qū)的編號(hào)查找最接近非故障分區(qū),其中所述最接近非故障分區(qū)是編號(hào)與所述故障分區(qū)的編號(hào)最接近的非故障分區(qū);以及 受損EC組確定模塊,與所述最接近非故障分區(qū)查找模塊以及所述損壞數(shù)據(jù)修復(fù)單元連接,用于將讀取到的最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,并判斷潛在受損EC組信息是否包括所述故障分區(qū)的編號(hào),并在判斷結(jié)果為是的情況下將該潛在受損EC組信息表示的EC組確定作為受損EC組。
3.根據(jù)權(quán)利要求2所述的裝置,其特征在于,所述最接近非故障分區(qū)查找模塊首先查找左側(cè)最接近非故障分區(qū),其中左側(cè)最接近非故障分區(qū)是在編號(hào)減小方向上的最接近非故障分區(qū), 所述受損EC組確定模塊將讀取到的左側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,并判斷潛在受損EC組信息是否包括所述故障分區(qū)的編號(hào), 在判斷結(jié)果為是的情況下,所述受損EC組確定模塊將潛在受損EC組信息表示的EC組確定作為受損EC組; 在判斷結(jié)果為否的情況下,所述最接近非故障分區(qū)查找模塊繼續(xù)查找右側(cè)最接近非故障分區(qū),其中右側(cè)最接近非故障分區(qū)是在編號(hào)增大方向上的最接近非故障分區(qū),以及所述受損EC組確定模塊將讀取到的右側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息、并將潛在受損EC組信息表示的EC組確定作為受損EC組。
4.根據(jù)權(quán)利要求2所述的裝置,其特征在于,所述受損EC組確定單元還包括與所述故障分區(qū)編號(hào)接收模塊以及所述最接近非故障分區(qū)查找模塊連接的故障分區(qū)排序模塊,所述故障分區(qū)排序模塊用于對(duì)所述故障分區(qū)編號(hào)接收模塊所接收到的故障分區(qū)的編號(hào)按大小進(jìn)行排序,以生成按編號(hào)大小排列的故障分區(qū)序列, 對(duì)于所述故障分區(qū)序列中的編號(hào)無(wú)間斷的n+1個(gè)故障分區(qū)pt (i) pt (i+n),其中i為整數(shù)、η為大于等于O的整數(shù), 所述最接近非故障分區(qū)查找模塊將未包括在該故障分區(qū)序列中的分區(qū)pt(1-l)和分區(qū)pt(i+n+l)分別確定作為這n+1個(gè)故障分區(qū)pt (i) pt(i+n)的左側(cè)最接近非故障分區(qū)和右側(cè)最接近非故障分區(qū); 所述受損EC組確定模塊將讀取到的左側(cè)最接近非故障分區(qū)pt (1-Ι)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為左側(cè)潛在受損EC組信息,將讀取到的右側(cè)最接近非故障分區(qū)Pt (i+n+1)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為右側(cè)潛在受損EC組信息,并基于左側(cè)潛在受損EC組信息是否包括故障分區(qū)Pt⑴、pt (i+n)的編號(hào)以及右側(cè)潛在受損EC組信息是否包括故障分區(qū)Pt (i)、pt (i+n)的編號(hào)來(lái)確定受損EC組。
5.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的裝置,其特征在于,所述故障節(jié)點(diǎn)發(fā)現(xiàn)單元包括 節(jié)點(diǎn)狀態(tài)記錄模塊,與存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)連接,用于接收并記錄各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息; 故障節(jié)點(diǎn)確定模塊,與所述節(jié)點(diǎn)狀態(tài)記錄模塊連接,用于根據(jù)所述節(jié)點(diǎn)狀態(tài)記錄模塊所記錄的狀態(tài)信息,將狀態(tài)信息表示已持續(xù)預(yù)定時(shí)間不可用的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)確定作為故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);以及 分區(qū)編號(hào)獲取模塊,與所述故障節(jié)點(diǎn)確定模塊以及所述受損EC組確定單元連接,用于獲取所述故障節(jié)點(diǎn)確定模塊所確定的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào),并將所獲取到的編號(hào)作為故障分區(qū)的編號(hào)發(fā)送至所述受損EC組確定單元。
6.一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的方法,其特征在于,包括 故障節(jié)點(diǎn)發(fā)現(xiàn)步驟,根據(jù)存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息查找存儲(chǔ)集群系統(tǒng)中的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),并獲取故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào)作為故障分區(qū)的編號(hào); 受損EC組確定步驟,根據(jù)所獲取到的故障分區(qū)的編號(hào)確定故障分區(qū)對(duì)應(yīng)的受損EC組; 損壞數(shù)據(jù)修復(fù)步驟,針對(duì)所確定的受損EC組,利用EC算法生成恢復(fù)數(shù)據(jù),并將所生成的恢復(fù)數(shù)據(jù)存儲(chǔ)到指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的相應(yīng)分區(qū)上,以能夠用所述指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)替換所述故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);以及 判斷所有故障分區(qū)是否均已處理,如果判斷為是,則再次進(jìn)入故障節(jié)點(diǎn)發(fā)現(xiàn)步驟以查找新的故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),如果判斷為否,則再次進(jìn)入受損EC組確定步驟,以繼續(xù)處理待修復(fù)損壞數(shù)據(jù)的故障分區(qū)。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述受損EC組確定步驟包括 根據(jù)所獲取到的故障分區(qū)的編號(hào)查找左側(cè)最接近非故障分區(qū),其中左側(cè)最接近非故障分區(qū)為在編號(hào)減小方向上的編號(hào)與所述故障分區(qū)的編號(hào)最接近的非故障分區(qū); 將讀取到的左側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息; 判斷潛在受損EC組信息是否包括故障分區(qū)的編號(hào),在判斷結(jié)果為是的情況下將潛在受損EC組信息表示的EC組確定作為受損EC組并進(jìn)入所述損壞數(shù)據(jù)修復(fù)步驟,否則進(jìn)入如下步驟; 根據(jù)所獲取到的故障分區(qū)的編號(hào)查找右側(cè)最接近非故障分區(qū),其中右側(cè)最接近非故障分區(qū)為在編號(hào)增大方向上的編號(hào)與所述故障分區(qū)的編號(hào)最接近的非故障分區(qū);以及 將讀取到的右側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,將潛在受損EC組信息表示的EC組確定作為受損EC組,并進(jìn)入所述損壞數(shù)據(jù)修復(fù)步驟。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述受損EC組確定步驟包括 根據(jù)所獲取到的故障分區(qū)的編號(hào)查找右側(cè)最接近非故障分區(qū),其中右側(cè)最接近非故障分區(qū)為在編號(hào)增大方向上的編號(hào)與所述故障分區(qū)的編號(hào)最接近的非故障分區(qū); 將讀取到的右側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息; 判斷潛在受損EC組信息是否包括故障分區(qū)的編號(hào),在判斷結(jié)果為是的情況下將潛在受損EC組信息表示的EC組確定作為受損EC組并進(jìn)入所述損壞數(shù)據(jù)修復(fù)步驟,否則進(jìn)入如下步驟; 根據(jù)所獲取到的故障分區(qū)的編號(hào)查找左側(cè)最接近非故障分區(qū),其中左側(cè)最接近非故障分區(qū)為在編號(hào)減小方向上的編號(hào)與所述故障分區(qū)的編號(hào)最接近的非故障分區(qū);以及 將讀取到的左側(cè)最接近非故障分區(qū)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為潛在受損EC組信息,將潛在受損EC組信息表示的EC組確定作為受損EC組,并進(jìn)入所述損壞數(shù)據(jù)修復(fù)步驟。
9.根據(jù)權(quán)利要求6所述的方法,其特征在于,在所述故障節(jié)點(diǎn)發(fā)現(xiàn)步驟之后還包括按編號(hào)大小對(duì)所有的故障分區(qū)進(jìn)行排序,以生成按編號(hào)大小排列的故障分區(qū)序列, 所述受損EC組確定步驟進(jìn)一步包括 對(duì)于所述故障分區(qū)序列中的編號(hào)無(wú)間斷的n+1個(gè)故障分區(qū)pt (i) pt (i+n),將未包括在該故障分區(qū)序列中的分區(qū)Pt (1-Ι)和分區(qū)pt (i+n+1)分別確定作為這n+1個(gè)故障分區(qū)pt(i) pt (i+n)的左側(cè)最接近非故障分區(qū)和右側(cè)最接近非故障分區(qū),其中i為整數(shù)、η為大于等于O的整數(shù); 將讀取到的左側(cè)最接近非故障分區(qū)Pt(1-l)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為左側(cè)潛在受損EC組信息,并將讀取到的右側(cè)最接近非故障分區(qū)pt (i+n+1)所存儲(chǔ)的條帶數(shù)據(jù)攜帶的EC組信息作為右側(cè)潛在受損EC組信息;以及 基于左側(cè)潛在受損EC組信息是否包括故障分區(qū)pt(i)、pt (i+n)的編號(hào)以及右側(cè)潛在受損EC組信息是否包括故障分區(qū)pt (i)、pt (i+n)的編號(hào)來(lái)確定受損EC組,并進(jìn)入所述損壞數(shù)據(jù)修復(fù)步驟。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,所述基于左側(cè)潛在受損EC組信息是否包括故障分區(qū)pt(i) ,pt (i+n)的編號(hào)以及右側(cè)潛在受損EC組信息是否包括故障分區(qū)pt(i)、Pt (i+n)的編號(hào)來(lái)確定受損EC組包括 在左側(cè)潛在受損EC組信息包括故障分區(qū)pt (i)和/或pt (i+n)的編號(hào)的情況下,將左側(cè)潛在受損EC組信息表示的EC組確定作為受損EC組;以及 在右側(cè)潛在受損EC組信息包括故障分區(qū)pt (i)和/或pt (i+n)的編號(hào)的情況下,將右側(cè)潛在受損EC組信息表示的EC組確定作為受損EC組。
11.根據(jù)權(quán)利要求6至10中任一項(xiàng)所述的方法,其特征在于,所述故障節(jié)點(diǎn)發(fā)現(xiàn)步驟進(jìn)一步包括 記錄存儲(chǔ)集群系統(tǒng)中的各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息;根據(jù)所記錄的狀態(tài)信息,將狀態(tài)信息表示已持續(xù)預(yù)定時(shí)間不可用的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)確定作為故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);以及 獲取故障數(shù)據(jù)存 儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào)作為故障分區(qū)的編號(hào)。
全文摘要
本發(fā)明涉及數(shù)據(jù)存儲(chǔ)領(lǐng)域,根據(jù)本發(fā)明實(shí)施例的一種發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置和方法包括根據(jù)各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上報(bào)的表示各數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)自身是否可用的狀態(tài)信息查找故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),并獲取故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)所包括的分區(qū)的編號(hào)作為故障分區(qū)的編號(hào);根據(jù)故障分區(qū)的編號(hào)確定故障分區(qū)對(duì)應(yīng)的受損EC組;針對(duì)受損EC組,利用EC算法生成恢復(fù)數(shù)據(jù),并將恢復(fù)數(shù)據(jù)存儲(chǔ)到指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的相應(yīng)分區(qū)上,以能夠用所述指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)替換所述故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)。通過(guò)在查找到故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的情況下直接基于故障數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的分區(qū)信息來(lái)確定待修復(fù)的損壞數(shù)據(jù)所屬的EC組,根據(jù)本發(fā)明實(shí)施例的發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)的裝置和方法能夠及時(shí)、有效地發(fā)現(xiàn)并修復(fù)損壞數(shù)據(jù)。
文檔編號(hào)G06F11/14GK103034567SQ20121051963
公開(kāi)日2013年4月10日 申請(qǐng)日期2012年12月6日 優(yōu)先權(quán)日2012年12月6日
發(fā)明者張烽, 陳國(guó)龍, 景叔武 申請(qǐng)人:華為技術(shù)有限公司