本發(fā)明涉及云計(jì)算,具體涉及一種磁盤條帶的巡檢方法、裝置、計(jì)算機(jī)設(shè)備及存儲介質(zhì)。
背景技術(shù):
1、在云計(jì)算數(shù)據(jù)中心中,為了存儲數(shù)據(jù)安全,產(chǎn)生了各種保障用戶數(shù)據(jù)的技術(shù),例如基于冗余校驗(yàn)的raid(redundant?array?of?independent?disks,獨(dú)立冗余磁盤陣列)技術(shù)、糾刪碼技術(shù)以及多副本技術(shù)等。其中,基于冗余校驗(yàn)的raid技術(shù)中,將多塊磁盤組合成一個raid陣列,每個磁盤均按照相同大小的塊進(jìn)行切塊,不同盤上的塊組成一個條帶,根據(jù)raid組建的算法,一個條帶的冗余塊可以有零個、一個、二個,通過冗余數(shù)據(jù)來提供故障恢復(fù)保證數(shù)據(jù)安全。如果出現(xiàn)磁盤故障,raid算法使用冗余數(shù)據(jù)對其進(jìn)行恢復(fù)。通過條帶數(shù)據(jù)塊可以計(jì)算出校驗(yàn)塊,同時也可以通過校驗(yàn)塊及其他數(shù)據(jù)塊計(jì)算出某個數(shù)據(jù)塊。這樣才可以保證在某個磁盤故障時,進(jìn)行數(shù)據(jù)恢復(fù)。
2、系統(tǒng)存在各種不可預(yù)知的錯誤,例如內(nèi)存反轉(zhuǎn)、磁盤靜默、鏈路傳輸錯誤、軟件bug等。而數(shù)據(jù)在讀寫操作過程中,需要經(jīng)過復(fù)雜的傳輸及數(shù)據(jù)存取流程。整個流程要經(jīng)過很多部件、歷經(jīng)多種不同的傳輸通道和復(fù)雜的軟件處理邏輯。在其中任何一個環(huán)節(jié)出現(xiàn)錯誤,數(shù)據(jù)便會遭到破壞,可能導(dǎo)致數(shù)據(jù)錯誤。如果在存儲路徑中導(dǎo)致raid條帶的某些數(shù)據(jù)塊或者校驗(yàn)塊數(shù)據(jù)錯誤,從而導(dǎo)致raid的條帶可能處于不一致的狀態(tài),即此時通過條帶數(shù)據(jù)塊的數(shù)據(jù)計(jì)算的校驗(yàn)塊數(shù)據(jù),與磁盤上校驗(yàn)塊的數(shù)據(jù)不相同。此時如果發(fā)生磁盤故障,使用冗余數(shù)據(jù)對磁盤塊進(jìn)行恢復(fù),可能會進(jìn)一步擴(kuò)大錯誤的數(shù)據(jù)塊。因此如何檢查條帶一致性,找出出錯的條帶以及數(shù)據(jù),以便修復(fù)條帶出錯數(shù)據(jù),是本領(lǐng)域人員需要亟待解決的問題。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本發(fā)明提供了一種磁盤條帶的巡檢方法、裝置、計(jì)算機(jī)設(shè)備及存儲介質(zhì),以解決目前檢查方案在raid條帶不一致時無法準(zhǔn)確判定是哪些分塊出現(xiàn)錯誤,從而無法進(jìn)行自動重構(gòu)修復(fù),疊加了重構(gòu)等其他故障使數(shù)據(jù)錯誤擴(kuò)大的問題。
2、第一方面,本發(fā)明提供了一種磁盤條帶的巡檢方法,所述方法包括:
3、巡檢磁盤上的第一條帶,讀取所述第一條帶上的多個分塊,其中所述第一條帶是磁盤上多個條帶之一,所述多個分塊的種類包括數(shù)據(jù)分塊和校驗(yàn)分塊,所述數(shù)據(jù)分塊和所述校驗(yàn)分塊均有各自對應(yīng)的分塊檢查區(qū),每個所述分塊檢查區(qū)中存儲有檢查區(qū)數(shù)據(jù);
4、根據(jù)讀取到的至少一個數(shù)據(jù)分塊上的數(shù)據(jù)信息計(jì)算對應(yīng)的校驗(yàn)分塊信息;
5、判斷所述校驗(yàn)分塊信息與磁盤上保存的校驗(yàn)分塊中的信息是否一致;
6、如果不一致,則計(jì)算所述第一條帶上每個分塊對應(yīng)的檢查區(qū)數(shù)據(jù),并比較每個分塊對應(yīng)的所述檢查區(qū)數(shù)據(jù)與各自所述分塊檢查區(qū)中存儲的檢查區(qū)數(shù)據(jù)是否相同;
7、如果存在不同,則確定當(dāng)前不同的檢查區(qū)數(shù)據(jù)所對應(yīng)的數(shù)據(jù)分塊或校驗(yàn)分塊發(fā)生錯誤,并對所述第一條帶上發(fā)生錯誤的數(shù)據(jù)分塊進(jìn)行修復(fù)重構(gòu)。
8、結(jié)合第一方面,在一種可能的實(shí)施方式中,所述確定當(dāng)前不同的檢查區(qū)數(shù)據(jù)所對應(yīng)的數(shù)據(jù)分塊或校驗(yàn)分塊發(fā)生錯誤,并對所述第一條帶上發(fā)生錯誤的數(shù)據(jù)分塊進(jìn)行修復(fù)重構(gòu),包括:
9、統(tǒng)計(jì)發(fā)生錯誤的數(shù)據(jù)分塊或校驗(yàn)分塊的數(shù)量;
10、如果所述數(shù)量在冗余范圍之內(nèi),則啟動條帶重構(gòu)流程,恢復(fù)所述第一條帶上發(fā)生錯誤的數(shù)據(jù)分塊,使回復(fù)后的第一條帶上各個分塊的信息與檢查區(qū)數(shù)據(jù)相同;
11、如果所述數(shù)量在所述冗余范圍之外,則上報(bào)錯誤信息,以及通過重構(gòu)發(fā)生錯誤的數(shù)據(jù)分塊對應(yīng)的校驗(yàn)數(shù)據(jù),使得重構(gòu)后第一條帶上的各個分塊的信息暫時與檢查區(qū)數(shù)據(jù)相同。
12、結(jié)合第一方面,在另一種可能的實(shí)施方式中,所述判斷所述校驗(yàn)分塊信息與磁盤上保存的校驗(yàn)分塊中的信息是否一致,還包括:
13、如果相一致,則確定所述第一條帶的各個分塊上數(shù)據(jù)正確,繼續(xù)巡檢所述磁盤上的第二條帶,確定所述第二條帶上的數(shù)據(jù)分塊或校驗(yàn)分塊是否發(fā)生錯誤;所述第二條帶的巡檢過程與對所述第一條帶的巡檢過程相同。
14、結(jié)合第一方面,在又一種可能的實(shí)施方式中,在所述巡檢磁盤上的第一條帶之前還包括:
15、組建raid磁盤,將所述raid磁盤按固定大小劃分磁盤分塊,并對每個磁盤分塊編號;
16、將相同編號的磁盤分塊組建成raid條帶,所述raid條帶之一是所述第一條帶;
17、將每個所述磁盤分塊劃分為n個扇區(qū),分塊檢查區(qū)對應(yīng)一個扇區(qū),n≥2且為正整數(shù);
18、根據(jù)所述n個扇區(qū)的數(shù)據(jù)確定條帶對應(yīng)的分塊檢查區(qū);
19、根據(jù)所述至少一個數(shù)據(jù)分塊和所述對應(yīng)的檢查區(qū)數(shù)據(jù),計(jì)算所述分塊檢查區(qū)中的檢查區(qū)數(shù)據(jù)和校驗(yàn)分塊的檢查區(qū)數(shù)據(jù)。
20、結(jié)合第一方面,在又一種可能的實(shí)施方式中,所述根據(jù)所述至少一個數(shù)據(jù)分塊和所述對應(yīng)的檢查區(qū)數(shù)據(jù),計(jì)算所述分塊檢查區(qū)中的檢查區(qū)數(shù)據(jù)和校驗(yàn)分塊的檢查區(qū)數(shù)據(jù),包括:
21、根據(jù)所述至少一個數(shù)據(jù)分塊和所述對應(yīng)的檢查區(qū)數(shù)據(jù),通過第一關(guān)系式計(jì)算所述分塊檢查區(qū)中的檢查區(qū)數(shù)據(jù);
22、所述第一關(guān)系式為:p?=?d0d1d2......?d(n-1);
23、其中,p表示校驗(yàn)分塊,d0、d1、d2、......?d(n-1)表示一個條帶上的n個數(shù)據(jù)塊,為異或運(yùn)算;
24、根據(jù)所述至少一個數(shù)據(jù)分塊和所述對應(yīng)的檢查區(qū)數(shù)據(jù),通過第二關(guān)系式計(jì)算校驗(yàn)分塊p的檢查區(qū)數(shù)據(jù);
25、所述第二關(guān)系式為:mp=m0m1......?m(n-1);
26、其中,mp表示校驗(yàn)分塊p的檢查區(qū)數(shù)據(jù),m0、m1......?、m(n-1)表示n個數(shù)據(jù)分塊對應(yīng)的檢查區(qū)數(shù)據(jù)。
27、結(jié)合第一方面,在又一種可能的實(shí)施方式中,所述方法還包括:
28、當(dāng)所述第一條帶上的目標(biāo)數(shù)據(jù)分塊被寫入新的數(shù)據(jù)時,更新所述目標(biāo)數(shù)據(jù)分塊所在的校驗(yàn)分塊;以及,更新所述目標(biāo)數(shù)據(jù)分塊對應(yīng)的目標(biāo)數(shù)據(jù)分塊的分塊檢查區(qū),和所述校驗(yàn)分塊的分塊檢查區(qū);所述目標(biāo)數(shù)據(jù)是所述第一條帶上的至少一個數(shù)據(jù)分塊中的任一個。
29、結(jié)合第一方面,在又一種可能的實(shí)施方式中,更新目標(biāo)數(shù)據(jù)分塊所在的校驗(yàn)分塊,包括:
30、讀取所述目標(biāo)數(shù)據(jù)分塊中的原始數(shù)據(jù)dold;
31、將要寫入的所述新的數(shù)據(jù)dnew與所述原始數(shù)據(jù)dold做異或運(yùn)算得到中間校驗(yàn)值pdelta;
32、讀取所述目標(biāo)數(shù)據(jù)分塊對應(yīng)的分塊檢查區(qū)中存儲的原始校驗(yàn)數(shù)據(jù)pold;
33、將所述原始校驗(yàn)數(shù)據(jù)pold與所述中間校驗(yàn)值pdelta做異或運(yùn)算得到新的校驗(yàn)值pnew;
34、將所述新的數(shù)據(jù)dnew寫入所述第一條帶上的目標(biāo)數(shù)據(jù)分塊,以及將所述新的校驗(yàn)值pnew寫入所述目標(biāo)數(shù)據(jù)分塊所在的校驗(yàn)分塊。
35、結(jié)合第一方面,在又一種可能的實(shí)施方式中,所述更新所述目標(biāo)數(shù)據(jù)分塊對應(yīng)的目標(biāo)數(shù)據(jù)分塊的分塊檢查區(qū),和所述校驗(yàn)分塊的分塊檢查區(qū),包括:
36、根據(jù)被寫入新的數(shù)據(jù)計(jì)算所述目標(biāo)數(shù)據(jù)分塊的分塊檢查區(qū)的檢查數(shù)據(jù);
37、將所述分塊檢查區(qū)的檢查數(shù)據(jù)與新的數(shù)據(jù)寫入前計(jì)算的分塊檢查區(qū)的檢查數(shù)據(jù)做異或運(yùn)算,得到中間檢查數(shù)據(jù);
38、從磁盤的分塊檢查區(qū)讀出原始檢查數(shù)據(jù),并所述原始檢查數(shù)據(jù)和所述中間檢查數(shù)據(jù),計(jì)算新的檢查數(shù)據(jù);
39、將所述新的檢查數(shù)據(jù)寫入所述校驗(yàn)分塊的分塊檢查區(qū)。
40、結(jié)合第一方面,在又一種可能的實(shí)施方式中,在將所述分塊檢查區(qū)的檢查數(shù)據(jù)與新的數(shù)據(jù)寫入前計(jì)算的分塊檢查區(qū)的檢查數(shù)據(jù)做異或運(yùn)算,得到中間檢查數(shù)據(jù)之前,還包括:
41、當(dāng)n=4時,讀取4個扇區(qū)上的原始數(shù)據(jù),所述4個扇區(qū)上的原始數(shù)據(jù)分別為a0old、a1old、a2old和a3old;
42、根據(jù)所述4個扇區(qū)上的原始數(shù)據(jù),通過計(jì)算得到所述分塊檢查區(qū)的檢查數(shù)據(jù);
43、所述計(jì)算的公式為:m0olddata=a0olda1olda2olda3old;
44、其中,m0olddata為所述分塊檢查區(qū)的檢查數(shù)據(jù),為異或運(yùn)算。
45、結(jié)合第一方面,在又一種可能的實(shí)施方式中,所述方法還包括:
46、根據(jù)所述原始校驗(yàn)數(shù)據(jù)pold按扇區(qū)計(jì)算得到對應(yīng)的檢查區(qū)數(shù)據(jù);
47、根據(jù)新校驗(yàn)分塊按扇區(qū)計(jì)算得到檢查數(shù)據(jù);
48、將所述原始校驗(yàn)數(shù)據(jù)pold對應(yīng)的所述檢查區(qū)數(shù)據(jù)和所述新校驗(yàn)分塊計(jì)算得到所述檢查數(shù)據(jù)做異或運(yùn)算,得到新的校驗(yàn)塊檢查數(shù)據(jù)。
49、結(jié)合第一方面,在又一種可能的實(shí)施方式中,所述更新校驗(yàn)分塊的分塊檢查區(qū),具體包括:將所述新的校驗(yàn)塊檢查數(shù)據(jù)寫入所述校驗(yàn)分塊的分塊檢查區(qū)。
50、第二方面,本發(fā)明還提供了一種磁盤條帶的巡檢裝置,所述裝置包括:
51、巡檢模塊,用于巡檢磁盤上的第一條帶,讀取所述第一條帶上的多個分塊,其中所述第一條帶是磁盤上多個條帶之一,所述多個分塊的種類包括數(shù)據(jù)分塊和校驗(yàn)分塊,所述數(shù)據(jù)分塊和所述校驗(yàn)分塊均有各自對應(yīng)的分塊檢查區(qū),每個所述分塊檢查區(qū)中存儲有檢查區(qū)數(shù)據(jù);
52、計(jì)算模塊,用于根據(jù)讀取到的至少一個數(shù)據(jù)分塊上的數(shù)據(jù)信息計(jì)算對應(yīng)的校驗(yàn)分塊信息;
53、判斷模塊,用于判斷所述校驗(yàn)分塊信息與磁盤上保存的校驗(yàn)分塊中的信息是否一致;
54、比較模塊,用于在所述判斷模塊判斷校驗(yàn)分塊信息不一致時,通過計(jì)算模塊計(jì)算所述第一條帶上每個分塊對應(yīng)的檢查區(qū)數(shù)據(jù),并比較每個分塊對應(yīng)的所述檢查區(qū)數(shù)據(jù)與各自所述分塊檢查區(qū)中存儲的檢查區(qū)數(shù)據(jù)是否相同;
55、確定模塊,用于在比較模塊比較存在不同情況下,確定當(dāng)前不同的檢查區(qū)數(shù)據(jù)所對應(yīng)的數(shù)據(jù)分塊或校驗(yàn)分塊發(fā)生錯誤,并對所述第一條帶上發(fā)生錯誤的數(shù)據(jù)分塊進(jìn)行修復(fù)重構(gòu)。
56、第三方面,本發(fā)明還提供了一種計(jì)算機(jī)設(shè)備,包括存儲器和處理器,所述存儲器和所述處理器相連接,所述存儲器中存儲有計(jì)算機(jī)指令,所述處理器通過執(zhí)行所述計(jì)算機(jī)指令,從而執(zhí)行前述第一方面或第一方面任一實(shí)施方式所述的磁盤條帶的巡檢方法。
57、第四方面,本發(fā)明提供一種計(jì)算機(jī)可讀存儲介質(zhì),所述計(jì)算機(jī)可讀存儲介質(zhì)上存儲有計(jì)算機(jī)指令,所述計(jì)算機(jī)指令用于使計(jì)算機(jī)執(zhí)行前述第一方面或第一方面任一實(shí)施方式所述的磁盤條帶的巡檢方法。
58、此外,本發(fā)明還提供一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)指令,當(dāng)其在計(jì)算機(jī)上運(yùn)行時,使得計(jì)算機(jī)執(zhí)行前述第一方面或第一方面任一實(shí)施方式所述的磁盤條帶的巡檢方法。
59、本發(fā)明提供的一種磁盤條帶的巡檢方法、裝置,先將每個磁盤劃分固定的條帶檢查區(qū),用于保存所在磁盤上被劃分為raid條帶的組成分塊的檢查數(shù)據(jù)。每個條帶的每一個分塊使用一個扇區(qū)大小的磁盤塊作為分塊檢查區(qū),將條帶內(nèi)的某個分塊按照扇區(qū)編號從前到后進(jìn)行異或計(jì)算得到該檢查區(qū)數(shù)據(jù)。當(dāng)io更新條帶數(shù)據(jù)時,對應(yīng)更新相應(yīng)的檢查區(qū)數(shù)據(jù)。在對磁盤上任一條帶巡檢過程中,通過讀取該條帶上至少一個數(shù)據(jù)分塊上的數(shù)據(jù)信息,判斷其對應(yīng)的校驗(yàn)分塊信息與磁盤上保存的校驗(yàn)分塊中的信息是否一致,當(dāng)存在不一致時,比較每個分塊對應(yīng)的檢查區(qū)數(shù)據(jù)與各自分塊檢查區(qū)中存儲的檢查區(qū)數(shù)據(jù)是否相同,從而確定出當(dāng)前條帶上發(fā)生錯誤的數(shù)據(jù)分塊或校驗(yàn)分塊,實(shí)現(xiàn)了對發(fā)生錯誤分塊的識別,并對該分塊進(jìn)行自動重構(gòu)修復(fù),避免其他故障使數(shù)據(jù)錯誤擴(kuò)大。