本申請(qǐng)涉及存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種磁盤(pán)檢測(cè)方法及裝置。
背景技術(shù):
隨著信息技術(shù)的發(fā)展,越來(lái)越多的數(shù)據(jù)被保存在磁盤(pán)中,為了提高磁盤(pán)中數(shù)據(jù)的可靠性,通常使用raid(redundantarraysofindependentdisks,獨(dú)立磁盤(pán)冗余陣列)技術(shù)對(duì)磁盤(pán)中的數(shù)據(jù)進(jìn)行冗余保護(hù)。然而,因?yàn)橥话l(fā)的震動(dòng)或機(jī)械故障導(dǎo)致磁盤(pán)盤(pán)面被劃傷,或者磁盤(pán)盤(pán)面蒙塵等因素而出現(xiàn)磁盤(pán)介質(zhì)錯(cuò)誤的情形不可避免地發(fā)生,當(dāng)磁盤(pán)組中連續(xù)多塊磁盤(pán)出現(xiàn)磁盤(pán)介質(zhì)錯(cuò)誤時(shí),raid重建的速率較低,很有可能導(dǎo)致raid對(duì)數(shù)據(jù)的冗余保護(hù)機(jī)制失效,導(dǎo)致數(shù)據(jù)丟失。因此,通過(guò)及時(shí)發(fā)現(xiàn)磁盤(pán)介質(zhì)問(wèn)題并對(duì)介質(zhì)錯(cuò)誤的磁盤(pán)進(jìn)行修復(fù),可以有效地提高數(shù)據(jù)的可靠性。
在現(xiàn)有方案中,可以采用磁盤(pán)預(yù)檢測(cè)技術(shù)對(duì)磁盤(pán)進(jìn)行檢測(cè),以發(fā)現(xiàn)故障磁盤(pán),并及時(shí)進(jìn)行相應(yīng)處理。具體地,在磁盤(pán)預(yù)檢測(cè)技術(shù)中,可以預(yù)先設(shè)定磁盤(pán)檢測(cè)策略,例如,設(shè)定計(jì)算機(jī)每隔預(yù)設(shè)時(shí)長(zhǎng)對(duì)磁盤(pán)進(jìn)行一次全盤(pán)讀或全盤(pán)寫(xiě)(以下簡(jiǎn)稱全盤(pán)讀/寫(xiě)),當(dāng)檢測(cè)到讀/寫(xiě)命令執(zhí)行失敗時(shí),觸發(fā)raid重建。
然而,在上述磁盤(pán)預(yù)檢測(cè)技術(shù)中,由于對(duì)磁盤(pán)進(jìn)行全盤(pán)讀/寫(xiě),從而導(dǎo)致磁盤(pán)檢測(cè)過(guò)程占用系統(tǒng)資源,消耗磁盤(pán)的io處理性能;并且,當(dāng)磁盤(pán)容量越大時(shí),磁盤(pán)檢測(cè)過(guò)程耗時(shí)越長(zhǎng),占用系統(tǒng)資源的耗時(shí)越長(zhǎng),越多地消耗磁盤(pán)的io處理性能;同時(shí),在極端情況下,也可能會(huì)出現(xiàn)剛剛檢測(cè)過(guò)的磁盤(pán)因突發(fā)性的震動(dòng)或機(jī)械故障導(dǎo)致盤(pán)面被劃傷,而出現(xiàn)磁盤(pán)介質(zhì)錯(cuò)誤的情形。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請(qǐng)?zhí)峁┮环N磁盤(pán)檢測(cè)方法及裝置,以實(shí)現(xiàn)盡可能及時(shí)地發(fā)現(xiàn)故障磁盤(pán),提高raid的可靠性,提高數(shù)據(jù)的可靠性;同時(shí),有效地降低磁盤(pán)檢測(cè)過(guò)程對(duì)系統(tǒng)資源和磁盤(pán)io處理性能的消耗。
具體地,本申請(qǐng)是通過(guò)如下技術(shù)方案實(shí)現(xiàn)的:
根據(jù)本申請(qǐng)實(shí)施例的第一方面,提供一種磁盤(pán)檢測(cè)方法,所述方法應(yīng)用于存儲(chǔ)設(shè)備的raid系統(tǒng),所述存儲(chǔ)設(shè)備預(yù)配置有至少一個(gè)raid陣列,所述raid陣列包括若干個(gè)磁盤(pán);所述方法包括:
當(dāng)接收到磁盤(pán)返回的用于表示讀錯(cuò)誤的執(zhí)行結(jié)果時(shí),確定所述磁盤(pán)中發(fā)生讀錯(cuò)誤的故障條塊中的第一數(shù)據(jù)是否具有raid冗余性;
若所述第一數(shù)據(jù)具有raid冗余性,則通過(guò)所述磁盤(pán)所屬raid陣列中其他磁盤(pán)上的數(shù)據(jù)計(jì)算出所述第一數(shù)據(jù);
向所述故障條塊寫(xiě)入所述第一數(shù)據(jù);
若所述第一數(shù)據(jù)寫(xiě)入成功,則基于所述故障條塊確定至少一個(gè)待檢條塊;
依次確定所述至少一個(gè)待檢條塊中的一個(gè)待檢條塊中的第二數(shù)據(jù),向所述一個(gè)待檢條塊寫(xiě)入所述第二數(shù)據(jù);
若所述第二數(shù)據(jù)寫(xiě)入失敗,則確定所述磁盤(pán)故障。
根據(jù)本申請(qǐng)實(shí)施例的第二方面,提供一種磁盤(pán)檢測(cè)裝置,所述裝置應(yīng)用于存儲(chǔ)設(shè)備的raid系統(tǒng),所述存儲(chǔ)設(shè)備預(yù)配置有至少一個(gè)raid陣列,所述raid陣列包括若干個(gè)磁盤(pán),所述裝置包括:
冗余確定單元,用于當(dāng)接收到磁盤(pán)返回的用于表示讀錯(cuò)誤的執(zhí)行結(jié)果時(shí),確定所述磁盤(pán)中發(fā)生讀錯(cuò)誤的故障條塊中的第一數(shù)據(jù)是否具有raid冗余性;
第一確定單元,用于若所述第一數(shù)據(jù)具有raid冗余性,則通過(guò)所述磁盤(pán)所屬raid陣列中其他磁盤(pán)上的數(shù)據(jù)計(jì)算出所述第一數(shù)據(jù);
第一寫(xiě)入單元,用于向所述故障條塊寫(xiě)入所述第一數(shù)據(jù);
待檢確定單元,用于若所述第一數(shù)據(jù)寫(xiě)入成功,則基于所述故障條塊確定至少一個(gè)待檢條塊;
第二確定單元,用于依次確定所述至少一個(gè)待檢條塊中的一個(gè)待檢條塊中的第二數(shù)據(jù);
第二寫(xiě)入單元,用于向所述一個(gè)待檢條塊寫(xiě)入所述第二數(shù)據(jù);
故障確定單元,用于若所述第二數(shù)據(jù)寫(xiě)入失敗,則確定所述磁盤(pán)故障。
由上述實(shí)施例可見(jiàn),raid陣列通過(guò)在實(shí)際的讀操作中,接收到磁盤(pán)返回的用于表示讀錯(cuò)誤的執(zhí)行結(jié)果時(shí),進(jìn)一步嘗試向發(fā)生讀錯(cuò)誤的故障條塊中寫(xiě)入該故障條塊中原本的數(shù)據(jù),在寫(xiě)入成功時(shí),觸發(fā)本申請(qǐng)?zhí)峁┑妮p量級(jí)磁盤(pán)檢測(cè),由于輕量級(jí)磁盤(pán)檢測(cè)是在實(shí)際的讀操作過(guò)程后觸發(fā)的,并未額外設(shè)置磁盤(pán)檢測(cè)觸發(fā)機(jī)制,可以實(shí)現(xiàn)盡可能早地發(fā)現(xiàn)磁盤(pán)故障,從而及時(shí)進(jìn)行相應(yīng)的修復(fù),提高raid的可靠性,提高數(shù)據(jù)的可靠性;同時(shí),由于在本申請(qǐng)?zhí)峁┑妮p量級(jí)磁盤(pán)檢測(cè)過(guò)程中,對(duì)指定范圍的待檢條塊進(jìn)行檢測(cè),相較于全盤(pán)檢測(cè),可以有效地降低磁盤(pán)檢測(cè)過(guò)程對(duì)系統(tǒng)資源和磁盤(pán)io處理性能的消耗。
附圖說(shuō)明
圖1為本申請(qǐng)磁盤(pán)檢測(cè)方法的一個(gè)實(shí)施例流程圖;
圖2為本申請(qǐng)磁盤(pán)檢測(cè)裝置所在存儲(chǔ)設(shè)備的一種硬件結(jié)構(gòu)圖;
圖3為本申請(qǐng)磁盤(pán)檢測(cè)裝置的一個(gè)實(shí)施例框圖。
具體實(shí)施方式
這里將詳細(xì)地對(duì)示例性實(shí)施例進(jìn)行說(shuō)明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本申請(qǐng)相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書(shū)中所詳述的、本申請(qǐng)的一些方面相一致的裝置和方法的例子。
在本申請(qǐng)使用的術(shù)語(yǔ)是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本申請(qǐng)。在本申請(qǐng)和所附權(quán)利要求書(shū)中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語(yǔ)“和/或”是指并包含一個(gè)或多個(gè)相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本申請(qǐng)可能采用術(shù)語(yǔ)第一、第二、第三等來(lái)描述各種信息,但這些信息不應(yīng)限于這些術(shù)語(yǔ)。這些術(shù)語(yǔ)僅用來(lái)將同一類型的信息彼此區(qū)分開(kāi)。例如,在不脫離本申請(qǐng)范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語(yǔ)境,如在此所使用的詞語(yǔ)“如果”可以被解釋成為“在……時(shí)”或“當(dāng)……時(shí)”或“響應(yīng)于確定”。
raid技術(shù)是將多個(gè)獨(dú)立的物理磁盤(pán)按照不同的方式組合起來(lái),形成一個(gè)虛擬磁盤(pán)。通過(guò)采用raid技術(shù),可以實(shí)現(xiàn)并行讀寫(xiě)數(shù)據(jù),提高了數(shù)據(jù)的存取速率,同時(shí),raid技術(shù)運(yùn)用了鏡像、奇偶校驗(yàn)等技術(shù)對(duì)數(shù)據(jù)進(jìn)行冗余保護(hù),極大地提高了數(shù)據(jù)的可靠性。
一個(gè)raid陣列可以包含多個(gè)成員磁盤(pán),raid陣列中的數(shù)據(jù)組織方式包括條塊和條帶。其中,條塊是raid陣列管理存儲(chǔ)空間的最小單位,在創(chuàng)建raid陣列時(shí),將其包括的成員磁盤(pán)的存儲(chǔ)空間按預(yù)設(shè)條塊大小劃分為大小相等、地址相鄰的塊,這些大小相等、地址相鄰的塊稱為條塊;條帶是raid陣列的多個(gè)成員磁盤(pán)上位置相關(guān)的條塊的集合,根據(jù)raid級(jí)別不同,raid實(shí)現(xiàn)方式不同,raid陣列中成員磁盤(pán)的數(shù)目不同,成員磁盤(pán)狀態(tài)不同以及raid算法不同,條塊中數(shù)據(jù)的raid冗余性也不同。
在raid技術(shù)中,raid陣列對(duì)讀/寫(xiě)命令的處理是按照條帶進(jìn)行處理的,當(dāng)raid陣列接收到上層軟件下發(fā)的讀/寫(xiě)命令后,基于該讀/寫(xiě)命令中攜帶的地址確定待操作的條帶,之后基于raid級(jí)別、raid算法、成員磁盤(pán)狀態(tài)等因素,把該讀/寫(xiě)命令拆分為針對(duì)該條帶中一個(gè)或多個(gè)成員磁盤(pán)的對(duì)應(yīng)條塊的讀/寫(xiě)命令,將拆分后的讀/寫(xiě)命令發(fā)給相應(yīng)的成員磁盤(pán)執(zhí)行。后續(xù),成員磁盤(pán)執(zhí)行接收到的讀/寫(xiě)命令,并將執(zhí)行結(jié)果返回至raid陣列。
在本申請(qǐng)中,raid陣列可以基于其包括的成員磁盤(pán)對(duì)讀命令的執(zhí)行結(jié)果,進(jìn)一步觸發(fā)輕量級(jí)磁盤(pán)檢測(cè),這里所說(shuō)的“輕量級(jí)磁盤(pán)檢測(cè)”是指對(duì)成員磁盤(pán)的指定條塊范圍內(nèi)進(jìn)行檢測(cè),相較于現(xiàn)有的磁盤(pán)預(yù)檢測(cè)技術(shù),可以實(shí)現(xiàn)盡可能及時(shí)地發(fā)現(xiàn)故障磁盤(pán),提高raid的可靠性,提高數(shù)據(jù)的可靠性;同時(shí),有效地降低磁盤(pán)檢測(cè)過(guò)程對(duì)系統(tǒng)資源和磁盤(pán)io處理性能的消耗。
如下,為了使本領(lǐng)域技術(shù)人員可以清楚、直觀地了解本申請(qǐng)?zhí)峁┑拇疟P(pán)檢測(cè)方法如何實(shí)現(xiàn)盡可能及時(shí)地發(fā)現(xiàn)故障磁盤(pán),提高raid的可靠性,提高數(shù)據(jù)的可靠性;同時(shí),有效地降低磁盤(pán)檢測(cè)過(guò)程對(duì)系統(tǒng)資源和磁盤(pán)io處理性能的消耗,列舉下述實(shí)施例具體描述本申請(qǐng)所提供的磁盤(pán)檢測(cè)方法。
請(qǐng)參見(jiàn)圖1,為本申請(qǐng)磁盤(pán)檢測(cè)方法的一個(gè)實(shí)施例流程圖,該方法可以應(yīng)用于存儲(chǔ)設(shè)備的raid系統(tǒng)中的raid陣列,可以包括以下步驟:
步驟101:當(dāng)接收到磁盤(pán)返回的用于表示讀錯(cuò)誤的執(zhí)行結(jié)果時(shí),確定磁盤(pán)中發(fā)生讀錯(cuò)誤的故障條塊中的第一數(shù)據(jù)是否具有raid冗余性,若是,則執(zhí)行步驟102,否則,執(zhí)行步驟106。
當(dāng)raid陣列接收到上層軟件下發(fā)的讀/寫(xiě)命令后,基于該讀/寫(xiě)命令中攜帶的地址確定待操作的條帶,之后基于raid級(jí)別、raid算法、成員磁盤(pán)狀態(tài)等因素,把該讀/寫(xiě)命令拆分為針對(duì)該條帶中一個(gè)或多個(gè)成員磁盤(pán)的對(duì)應(yīng)條塊的讀/寫(xiě)命令,將拆分后的讀/寫(xiě)命令發(fā)給相應(yīng)的成員磁盤(pán)執(zhí)行。后續(xù),成員磁盤(pán)執(zhí)行接收到的讀/寫(xiě)命令,如果某個(gè)成員磁盤(pán)中待讀/寫(xiě)條塊故障,那么,該成員磁盤(pán)可以向raid陣列返回用于表示讀/寫(xiě)錯(cuò)誤的執(zhí)行結(jié)果。
在本申請(qǐng)中,當(dāng)raid陣列接收到磁盤(pán)返回的用于表示讀錯(cuò)誤的執(zhí)行結(jié)果時(shí),并不直接將該磁盤(pán)確定為故障磁盤(pán),而是可以基于磁盤(pán)壞扇區(qū)重映射機(jī)制,嘗試對(duì)該磁盤(pán)進(jìn)行修復(fù),根據(jù)修復(fù)的結(jié)果進(jìn)一步確定該磁盤(pán)是否不可用,即磁盤(pán)是否故障。
具體地,通常情況下,磁盤(pán)出廠時(shí),磁盤(pán)生產(chǎn)廠家就在磁盤(pán)中保留一部分扇區(qū),該部分扇區(qū)對(duì)磁盤(pán)的使用者不可見(jiàn),磁盤(pán)可以將該部分扇區(qū)作為備用扇區(qū),當(dāng)磁盤(pán)發(fā)生寫(xiě)錯(cuò)誤時(shí),磁盤(pán)可以自動(dòng)將發(fā)生寫(xiě)錯(cuò)誤的壞扇區(qū)映射到備用扇區(qū),即將指向該壞扇區(qū)的地址替換成指向備用扇區(qū)的地址,后續(xù),磁盤(pán)可以重新向已映射完成的備用扇區(qū)中寫(xiě)入數(shù)據(jù),后續(xù)也將不再訪問(wèn)壞扇區(qū)?;谏鲜鏊枋龅拇疟P(pán)壞扇區(qū)重映射機(jī)制,上層軟件并不會(huì)感知到磁盤(pán)發(fā)生寫(xiě)錯(cuò)誤,從而認(rèn)為磁盤(pán)正常,后續(xù),直至磁盤(pán)的備用扇區(qū)用完時(shí),上層軟件才可以感知到磁盤(pán)發(fā)生寫(xiě)錯(cuò)誤,從而確定磁盤(pán)故障。那么,在本申請(qǐng)中,當(dāng)raid陣列接收到磁盤(pán)返回的用于表示讀錯(cuò)誤的執(zhí)行結(jié)果時(shí),可以進(jìn)一步向該磁盤(pán)中發(fā)生讀錯(cuò)誤的故障條塊中寫(xiě)入數(shù)據(jù),根據(jù)數(shù)據(jù)的寫(xiě)入結(jié)果可以盡可能準(zhǔn)確地確定該磁盤(pán)是否故障。
需要說(shuō)明的是,為了避免影響數(shù)據(jù)的可靠性,當(dāng)向故障條塊中寫(xiě)入數(shù)據(jù)時(shí),可以向故障條塊中寫(xiě)入該故障條塊中原本的數(shù)據(jù)。基于此,當(dāng)raid陣列接收到磁盤(pán)返回的用于表示讀錯(cuò)誤的執(zhí)行結(jié)果時(shí),可以進(jìn)一步確定該磁盤(pán)中發(fā)生讀錯(cuò)誤的故障條塊中的數(shù)據(jù)是否具有raid冗余性,這里所說(shuō)的“故障條塊中的數(shù)據(jù)是否具有raid冗余性”是指,故障條塊中的數(shù)據(jù)是否可由與該故障條塊位于同一條帶的其他成員磁盤(pán)中的對(duì)應(yīng)條塊中的數(shù)據(jù)計(jì)算得出。需要說(shuō)明的是,為了描述方便,本申請(qǐng)中將故障條塊中的數(shù)據(jù)稱為第一數(shù)據(jù)。
隨著raid級(jí)別不同,磁盤(pán)陣列中數(shù)據(jù)的存儲(chǔ)方式也不同,因此,可以基于不同的raid級(jí)別以及成員磁盤(pán)狀態(tài),采用不同的raid算法確定故障條塊中的數(shù)據(jù)是否具有raid冗余性,具體針對(duì)不同raid級(jí)別的raid算法,本領(lǐng)域技術(shù)人員可以參見(jiàn)現(xiàn)有技術(shù)中的相關(guān)描述,本申請(qǐng)對(duì)此不做詳述。
在本申請(qǐng)中,當(dāng)確定故障條塊中的第一數(shù)據(jù)具有raid冗余性時(shí),即可以繼續(xù)執(zhí)行后續(xù)向該故障條塊中寫(xiě)入數(shù)據(jù)的流程,即可以繼續(xù)執(zhí)行步驟102;當(dāng)確定故障條塊中的第一數(shù)據(jù)不具有冗余性時(shí),即無(wú)法確定故障條塊中的第一數(shù)據(jù),基于上述描述,則無(wú)法執(zhí)行后續(xù)向該故障條塊中寫(xiě)入數(shù)據(jù)的流程,此時(shí)可以進(jìn)一步執(zhí)行步驟106。
步驟102:通過(guò)磁盤(pán)所屬raid陣列中其他磁盤(pán)上的數(shù)據(jù)計(jì)算得出第一數(shù)據(jù)。
隨著raid級(jí)別不同,磁盤(pán)陣列中數(shù)據(jù)的存儲(chǔ)方式也不同,那么,可以根據(jù)raid級(jí)別以及成員磁盤(pán)狀態(tài),確定具體的raid算法,從而基于該raid算法,通過(guò)與故障條塊位于同一條帶的其他成員磁盤(pán)中的對(duì)應(yīng)條塊中的數(shù)據(jù)計(jì)算得出故障條塊中的第一數(shù)據(jù),具體針對(duì)不同raid級(jí)別的raid算法,本領(lǐng)域技術(shù)人員可以參見(jiàn)現(xiàn)有技術(shù)中的相關(guān)描述,本申請(qǐng)對(duì)此不做詳述。
步驟103:向故障條塊中寫(xiě)入第一數(shù)據(jù),若第一數(shù)據(jù)寫(xiě)入失敗,則執(zhí)行步驟106;若第一數(shù)據(jù)寫(xiě)入成功,則執(zhí)行步驟104。
基于上述所描述的磁盤(pán)壞扇區(qū)重映射機(jī)制,若第一數(shù)據(jù)寫(xiě)入失敗,則可以認(rèn)為該磁盤(pán)中已不存在備用扇區(qū),從而可以確定該磁盤(pán)已不可用,此時(shí),可以繼續(xù)執(zhí)行步驟106。
若第一數(shù)據(jù)寫(xiě)入成功,則可以認(rèn)為該磁盤(pán)中還有剩余的備用扇區(qū),并且,在向故障條塊寫(xiě)入第一數(shù)據(jù)的過(guò)程中,已觸發(fā)了磁盤(pán)壞扇區(qū)重映射,即該磁盤(pán)已自動(dòng)進(jìn)行了修復(fù),該磁盤(pán)仍可用。
至此,該磁盤(pán)已自修復(fù)成功,并且上層軟件未感知到磁盤(pán)進(jìn)行自修復(fù)的過(guò)程,仍可以繼續(xù)對(duì)磁盤(pán)進(jìn)行數(shù)據(jù)讀寫(xiě)操作。但此時(shí)磁盤(pán)中存在故障條塊已成為不可避免的實(shí)際情況,并且基于磁盤(pán)介質(zhì)錯(cuò)誤的特性,即因?yàn)橥话l(fā)的震動(dòng)或磁盤(pán)機(jī)械故障導(dǎo)致磁盤(pán)盤(pán)面被劃傷、灰塵等因素出現(xiàn)的磁盤(pán)介質(zhì)錯(cuò)誤,在物理上具有延續(xù)性,即故障條塊的相鄰條塊也為故障條塊的概率較大,磁盤(pán)中很可能存在不止一個(gè)故障條塊。
基于此,本申請(qǐng)?jiān)趫?zhí)行完步驟103,當(dāng)?shù)谝粩?shù)據(jù)寫(xiě)入成功后,觸發(fā)本申請(qǐng)?zhí)岢龅妮p量磁盤(pán)檢測(cè)機(jī)制,以實(shí)現(xiàn)盡可能及時(shí)地發(fā)現(xiàn)磁盤(pán)故障,從而及時(shí)進(jìn)行相應(yīng)的修復(fù),提高raid的可靠性,提高數(shù)據(jù)的可靠性。具體的,在執(zhí)行完步驟103,當(dāng)?shù)谝粩?shù)據(jù)寫(xiě)入成功后,執(zhí)行步驟104。
步驟104:基于故障條塊確定至少一個(gè)待檢條塊。
基于上述所描述的磁盤(pán)介質(zhì)錯(cuò)誤的特性,本申請(qǐng)中,可以基于發(fā)生讀錯(cuò)誤的故障條塊確定至少一個(gè)待檢條塊。
具體的,在本申請(qǐng)中,可以預(yù)先設(shè)置一個(gè)偏移量,該偏移量可以以容量大小為單位,也可以以條塊個(gè)數(shù)為單位,基于該偏移量,從故障條塊處進(jìn)行偏移,得到至少一個(gè)待檢條塊。
在一實(shí)施例中,若該偏移量以容量大小為單位,需要說(shuō)明的是,該偏移量可以為條塊大小的整數(shù)倍,例如,假設(shè)條塊大小為32kb,偏移量可以設(shè)置為64kb。據(jù)此,當(dāng)偏移量以容量大小為單位時(shí),也可以將偏移量轉(zhuǎn)換為以條塊個(gè)數(shù)為單位,例如,偏移量為64kb時(shí),可以等同于偏移量為2個(gè)條塊。
假設(shè)故障條塊為條塊3(起始條塊為條塊0),則可以基于該偏移量(2個(gè)條塊),以故障條塊為中心,分別進(jìn)行前后偏移,得到4個(gè)待檢條塊,分別為條塊1、條塊2,以及條塊4和條塊5。
需要說(shuō)明的是,若基于該預(yù)設(shè)的偏移量,以故障條塊為中心分別進(jìn)行前后偏移時(shí),若不存在足夠的可偏移條塊,可以基于實(shí)際偏移情況,確定待檢條塊。例如,假設(shè)故障條塊為條塊0,該故障條塊前并無(wú)其它條塊,則可以僅基于偏移量,從條塊0向后進(jìn)行偏移,得到2個(gè)待檢條塊,分別為條塊1、條塊2。又例如,假設(shè)故障條塊為條塊1,該故障條塊前只有一個(gè)條塊,則可以基于偏移量,從條塊1處向前偏移1個(gè)條塊,向后偏移2個(gè)條塊,得到3個(gè)待檢條塊,分別為條塊0、條塊2,以及條塊3。
上述僅僅作為舉例,其它情形本申請(qǐng)不再一一進(jìn)行描述。
步驟105:依次確定至少一個(gè)待檢條塊中的一個(gè)待檢條塊中的第二數(shù)據(jù),向該一個(gè)待檢條塊中寫(xiě)入第二數(shù)據(jù),若第二數(shù)據(jù)寫(xiě)入失敗,則執(zhí)行步驟106。
基于與上述所描述的向故障條塊中寫(xiě)入故障條塊中原本的第一數(shù)據(jù)同樣的考慮,即為了保證數(shù)據(jù)的可靠性,本申請(qǐng)中,在對(duì)待檢條塊進(jìn)行檢測(cè)的過(guò)程中,可以首先確定待檢條塊中的數(shù)據(jù),向該待檢條塊寫(xiě)入待檢條塊中原本的數(shù)據(jù)。需要說(shuō)明的是,為了描述方便,本申請(qǐng)中將待檢條塊中的數(shù)據(jù)稱為第二數(shù)據(jù)。
本申請(qǐng)中,可以依次對(duì)步驟104中得到的至少一個(gè)待檢條塊進(jìn)行處理。例如,假設(shè)步驟104中得到3個(gè)待檢條塊,分別為條塊0、條塊2,以及條塊3,則可以首先確定條塊0中的第二數(shù)據(jù),之后,向條塊0中寫(xiě)入第二數(shù)據(jù),若第二數(shù)據(jù)寫(xiě)入失敗,則執(zhí)行步驟106。
具體地,在一個(gè)可選的實(shí)現(xiàn)方式中,可以首先確定條塊0中的第二數(shù)據(jù)是否具有raid冗余性,若該條塊0中的第二數(shù)據(jù)具有raid冗余性,可以繼續(xù)基于raid算法,通過(guò)與條塊0位于同一條帶的其他成員磁盤(pán)中的對(duì)應(yīng)條塊中的數(shù)據(jù)計(jì)算得出條塊0中的第二數(shù)據(jù),之后,向條塊0寫(xiě)入該第二數(shù)據(jù),若該第二數(shù)據(jù)寫(xiě)入失敗,則執(zhí)行步驟106。
此外,若該條塊0中的第二數(shù)據(jù)不具有raid冗余性,可以繼續(xù)執(zhí)行步驟106。
此外,在上述過(guò)程中,若條塊0中的第二數(shù)據(jù)寫(xiě)入成功,則可以繼續(xù)計(jì)算得出條塊2中的第二數(shù)據(jù),之后,向條塊2中寫(xiě)入該第二數(shù)據(jù),直至成功向條塊3寫(xiě)入條塊3中原本的第二數(shù)據(jù)時(shí),可以認(rèn)為磁盤(pán)正常。
在另一個(gè)可選的實(shí)現(xiàn)方式中,可以首先讀取條塊0中的第二數(shù)據(jù),若條塊0中的第二數(shù)據(jù)讀取失敗,再確定條塊0中的第二數(shù)據(jù)是否具有raid冗余性。
此外,若條塊0中的第二數(shù)據(jù)讀取成功,則可以繼續(xù)讀取條塊2中的第二數(shù)據(jù),直至成功讀取條塊3中的第二數(shù)據(jù)時(shí),可以認(rèn)為磁盤(pán)正常。
需要說(shuō)明的是,上述所描述的首先基于條塊0進(jìn)行檢測(cè),其次基于條塊2進(jìn)行檢測(cè),再次基于條塊3進(jìn)行檢測(cè)的順序僅僅作為舉例,實(shí)際應(yīng)用中,對(duì)至少一個(gè)待檢條塊進(jìn)行檢測(cè)的順序并不作限制。
步驟106:確定磁盤(pán)故障。
由上述實(shí)施例可見(jiàn),raid陣列通過(guò)在實(shí)際的讀操作中,接收到磁盤(pán)返回的用于表示讀錯(cuò)誤的執(zhí)行結(jié)果時(shí),進(jìn)一步嘗試向發(fā)生讀錯(cuò)誤的故障條塊中寫(xiě)入該故障條塊中原本的數(shù)據(jù),在寫(xiě)入成功時(shí),觸發(fā)本申請(qǐng)?zhí)峁┑妮p量級(jí)磁盤(pán)檢測(cè),由于輕量級(jí)磁盤(pán)檢測(cè)是在實(shí)際的讀操作過(guò)程后觸發(fā)的,并未額外設(shè)置磁盤(pán)檢測(cè)觸發(fā)機(jī)制,可以實(shí)現(xiàn)盡可能早地發(fā)現(xiàn)磁盤(pán)故障,從而及時(shí)進(jìn)行相應(yīng)的修復(fù),提高raid的可靠性,提高數(shù)據(jù)的可靠性;同時(shí),由于在本申請(qǐng)?zhí)峁┑妮p量級(jí)磁盤(pán)檢測(cè)過(guò)程中,對(duì)指定范圍的待檢條塊進(jìn)行檢測(cè),相較于全盤(pán)檢測(cè),可以有效地降低磁盤(pán)檢測(cè)過(guò)程對(duì)系統(tǒng)資源和磁盤(pán)io處理性能的消耗。
與前述磁盤(pán)檢測(cè)方法的實(shí)施例相對(duì)應(yīng),本申請(qǐng)還提供了磁盤(pán)檢測(cè)裝置的實(shí)施例。
本申請(qǐng)磁盤(pán)檢測(cè)裝置的實(shí)施例可以應(yīng)用在存儲(chǔ)設(shè)備,例如計(jì)算機(jī)上。裝置實(shí)施例可以通過(guò)軟件實(shí)現(xiàn),也可以通過(guò)硬件或者軟硬件結(jié)合的方式實(shí)現(xiàn)。以軟件實(shí)現(xiàn)為例,作為一個(gè)邏輯意義上的裝置,是通過(guò)其所在存儲(chǔ)設(shè)備的處理器將非易失性存儲(chǔ)器中對(duì)應(yīng)的計(jì)算機(jī)程序指令讀取到內(nèi)存中運(yùn)行形成的。從硬件層面而言,如圖2所示,為本申請(qǐng)磁盤(pán)檢測(cè)裝置所在存儲(chǔ)設(shè)備的一種硬件結(jié)構(gòu)圖,除了圖2所示的處理器21、內(nèi)存22、網(wǎng)絡(luò)接口23、以及非易失性存儲(chǔ)器24之外,實(shí)施例中裝置所在的存儲(chǔ)設(shè)備通常根據(jù)該存儲(chǔ)設(shè)備的實(shí)際功能,還可以包括其他硬件,對(duì)此不再贅述。
請(qǐng)參考圖3,為本申請(qǐng)磁盤(pán)檢測(cè)裝置的一個(gè)實(shí)施例框圖,該裝置可以應(yīng)用于存儲(chǔ)設(shè)備的raid系統(tǒng)中的raid陣列,該裝置可以包括:冗余確定單元31、第一確定單元32、第一寫(xiě)入單元33、待檢確定單元34、第二確定單元35、第二寫(xiě)入單元36、故障確定單元37。
其中,該冗余確定單元31,可以用于當(dāng)接收到磁盤(pán)返回的用于表示讀錯(cuò)誤的執(zhí)行結(jié)果時(shí),確定所述磁盤(pán)中發(fā)生讀錯(cuò)誤的故障條塊中的第一數(shù)據(jù)是否具有raid冗余性;
該第一確定單元32,可以用于若所述第一數(shù)據(jù)具有raid冗余性,則通過(guò)所述磁盤(pán)所屬raid陣列中其他磁盤(pán)上的數(shù)據(jù)計(jì)算出所述第一數(shù)據(jù);
該第一寫(xiě)入單元33,可以用于向所述故障條塊寫(xiě)入所述第一數(shù)據(jù);
該待檢確定單元34,可以用于若所述第一數(shù)據(jù)寫(xiě)入成功,則基于所述故障條塊確定至少一個(gè)待檢條塊;
該第二確定單元35,可以用于依次確定所述至少一個(gè)待檢條塊中的一個(gè)待檢條塊中的第二數(shù)據(jù);
該第二寫(xiě)入單元36,可以用于向所述一個(gè)待檢條塊寫(xiě)入所述第二數(shù)據(jù);
該故障確定單元37,可以用于若所述第二數(shù)據(jù)寫(xiě)入失敗,則確定所述磁盤(pán)故障。
在一實(shí)施例中,所述待檢確定單元34可以具體用于:
基于預(yù)設(shè)的偏移量從所述故障條塊處進(jìn)行偏移,得到至少一個(gè)待檢條塊。
在一實(shí)施例中,所述第二確定單元35可以包括(圖3中并未示出):
冗余確定子單元,用于依次確定所述至少一個(gè)待檢條塊中的一個(gè)待檢條塊中的第二數(shù)據(jù)是否具有raid冗余性;
數(shù)據(jù)確定子單元,用于若所述第二數(shù)據(jù)具有raid冗余性,則通過(guò)所述磁盤(pán)所屬raid陣列中其他磁盤(pán)上的數(shù)據(jù)計(jì)算出所述第二數(shù)據(jù)。
在一實(shí)施例中,所述冗余確定子單元可以包括(圖3中并未示出):
讀取子單元,用于依次讀取所述至少一個(gè)待檢條塊中的一個(gè)待檢條塊中的第二數(shù)據(jù);
確定子單元,用于若所述第二數(shù)據(jù)讀取失敗,則確定所述第二數(shù)據(jù)具有raid冗余性。
在一實(shí)施例中,所述裝置還可以包括(圖3中并未示出):
讀取單元,用于若所述第二數(shù)據(jù)讀取成功,則繼續(xù)讀取另一個(gè)所述待檢條塊中的第二數(shù)據(jù),直至每一個(gè)所述待檢條塊中的第二數(shù)據(jù)讀取成功時(shí),確定所述磁盤(pán)正常。
在一實(shí)施例中,所述故障確定單元37還可以用于:
若所述第一數(shù)據(jù)不具有raid冗余性,則確定所述磁盤(pán)故障。
在一實(shí)施例中,所述故障確定單元37還可以用于:
若所述第一數(shù)據(jù)寫(xiě)入失敗,則確定所述磁盤(pán)故障。
上述裝置中各個(gè)單元的功能和作用的實(shí)現(xiàn)過(guò)程具體詳見(jiàn)上述方法中對(duì)應(yīng)步驟的實(shí)現(xiàn)過(guò)程,在此不再贅述。
對(duì)于裝置實(shí)施例而言,由于其基本對(duì)應(yīng)于方法實(shí)施例,所以相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本申請(qǐng)方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。
以上所述僅為本申請(qǐng)的較佳實(shí)施例而已,并不用以限制本申請(qǐng),凡在本申請(qǐng)的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)保護(hù)的范圍之內(nèi)。