專利名稱:自修復(fù)方法和存儲系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種在存儲系統(tǒng)中包括自修復(fù)盤驅(qū)動器的數(shù)據(jù)存儲和檢索系統(tǒng)。
背景技術(shù):
在計算機數(shù)據(jù)存儲網(wǎng)絡(luò)中,主處理機典型地連接到存儲子系統(tǒng)。存儲子系統(tǒng)可以包括存儲控制器和多個互連的盤驅(qū)動器,這些盤驅(qū)動器稱作廉價盤冗余陣列(Redundant Array of Inexpensive Disks,RAID),也稱作RAID盤驅(qū)動器陣列或盤驅(qū)動器陣列。存儲控制器可以包括一個或多個處理器和一個或多個設(shè)備適配器。主處理機可以是工作站或服務(wù)器,如銀行出納員的計算機或在機場由航空公司雇員操作的計算機。主處理機引導(dǎo)存儲控制器的處理器以指示適配器向盤驅(qū)動器陣列寫入數(shù)據(jù),并且從盤驅(qū)動器陣列讀取數(shù)據(jù)。例如,數(shù)據(jù)串存儲在盤驅(qū)動器陣列中,并且該數(shù)據(jù)串包括存儲在作為陣列一個成員的給定盤驅(qū)動器上的數(shù)據(jù)串子段(subsection)(以下稱作第一數(shù)據(jù)串的第一數(shù)據(jù)串子段)。主處理機可以請求存儲子系統(tǒng)的存儲控制器從盤驅(qū)動器陣列讀取第一數(shù)據(jù)串。當(dāng)從盤驅(qū)動器陣列讀取第一數(shù)據(jù)串時,第一數(shù)據(jù)串可能由于其第一數(shù)據(jù)串子段損壞而不完整。因此,第一數(shù)據(jù)串暫時丟失。然而,與第一數(shù)據(jù)串的第一數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)可以通過也與數(shù)據(jù)串一起存儲的奇偶校驗信息來重構(gòu)和恢復(fù)。當(dāng)與第一數(shù)據(jù)串的第一數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)得到重構(gòu)時,主機此時可以接收第一數(shù)據(jù)串的完整版本。當(dāng)與第一數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)得到重構(gòu)時,將所重構(gòu)的第一數(shù)據(jù)串子段恢復(fù)到盤驅(qū)動器陣列中的給定盤驅(qū)動器的新位置。
在傳統(tǒng)的存儲系統(tǒng)中,除了重構(gòu)和恢復(fù)與主處理機所請求的第一數(shù)據(jù)串的第一數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)之外,不再做更多操作。如果在盤驅(qū)動器陣列的特定盤驅(qū)動器上存在徑向或螺旋形劃痕,則該劃痕可能破壞附加數(shù)據(jù)串的多個附加數(shù)據(jù)串子段。由于除了重構(gòu)和恢復(fù)與第一數(shù)據(jù)串的第一數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)的步驟之外不再做更多操作,因此在重構(gòu)和恢復(fù)與第一數(shù)據(jù)串的第一數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)的同時,沒有立即重構(gòu)和恢復(fù)與附加數(shù)據(jù)串的附加數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)。
如果在重構(gòu)和恢復(fù)與第一數(shù)據(jù)串的第一數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)的同時沒有立即重構(gòu)和恢復(fù)與附加數(shù)據(jù)串的附加數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù),并且當(dāng)隨后從盤驅(qū)動器陣列讀取附加數(shù)據(jù)串之一時,萬一在那個附加數(shù)據(jù)串中存在二個或更多損壞數(shù)據(jù)串子段時,則會出現(xiàn)與那個附加數(shù)據(jù)串相關(guān)的單故障點(a single point of failure)。
單故障點在至少兩種情況下會出現(xiàn)(1)RAID盤驅(qū)動器之一不再響應(yīng),同時另一個盤驅(qū)動器存在介質(zhì)損壞,例如導(dǎo)致數(shù)據(jù)串子段硬讀取錯誤的介質(zhì)劃痕,或者(2)當(dāng)RAID陣列中的兩個驅(qū)動器在給定數(shù)據(jù)串的各自數(shù)據(jù)串子段的位置存在損壞時。在這兩種情況下,RAID奇偶校驗信息不再足以恢復(fù)丟失的數(shù)據(jù)串子段。
因此,當(dāng)定位、重構(gòu)和恢復(fù)與盤驅(qū)動器陣列的特定盤驅(qū)動器上的第一損壞數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)時,有必要立即檢查盤驅(qū)動器陣列的特定盤驅(qū)動器上第一損壞數(shù)據(jù)串子段周圍的相鄰區(qū)域,以便定位附加損壞如附加數(shù)據(jù)串的附加損壞數(shù)據(jù)串子段,并且除了與第一損壞數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)之外,還立即重構(gòu)和恢復(fù)與附加損壞數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)。為了避免當(dāng)隨后從存儲子系統(tǒng)的RAID盤驅(qū)動器陣列讀取附加數(shù)據(jù)串時出現(xiàn)單故障點,該操作是必要的。
發(fā)明內(nèi)容
在本發(fā)明的一個實施例中,一種可由機器讀取的程序存儲設(shè)備,有形地實施可由機器執(zhí)行的指令程序以執(zhí)行用于定位盤驅(qū)動器上的損壞并且重構(gòu)和遷移(relocate)與這些損壞相關(guān)聯(lián)的數(shù)據(jù)的方法,該方法包括響應(yīng)定位所述盤驅(qū)動器上的損壞,檢查所述盤驅(qū)動器上的所述損壞周圍的相鄰區(qū)域以判定在所述盤驅(qū)動器上是否存在附加損壞;響應(yīng)定位所述盤驅(qū)動器上的所述損壞,重構(gòu)與所述損壞相關(guān)聯(lián)的數(shù)據(jù),從而生成重構(gòu)數(shù)據(jù);以及存儲所述重構(gòu)數(shù)據(jù)。
本發(fā)明還包括響應(yīng)定位盤驅(qū)動器上的損壞而自修復(fù)盤驅(qū)動器的存儲系統(tǒng)和方法,包括響應(yīng)定位盤驅(qū)動器上的損壞,檢查盤驅(qū)動器上的損壞周圍的相鄰區(qū)域以判定在盤驅(qū)動器上是否存在附加損壞;重構(gòu)與損壞相關(guān)聯(lián)的數(shù)據(jù),從而生成重構(gòu)數(shù)據(jù);以及恢復(fù)重構(gòu)數(shù)據(jù)。
根據(jù)以下給出的詳細(xì)描述,本發(fā)明的更大適用范圍將會變得清楚。然而,應(yīng)該理解,本詳細(xì)描述和特定例子雖然代表本發(fā)明的優(yōu)選實施例,但是它們只是作為示例而給出的,因為通過閱讀下面詳細(xì)描述,本發(fā)明的精神和范圍之內(nèi)的變更和修改對于本領(lǐng)域的技術(shù)人員而言將是顯而易見的。
現(xiàn)在參照附圖,其中,相同的標(biāo)號在全文范圍內(nèi)表示對應(yīng)部件圖1示出工作時連接到存儲子系統(tǒng)的主處理機;圖2示出包括存儲子系統(tǒng)的計算機網(wǎng)絡(luò),其中,存儲子系統(tǒng)具有帶有一個或多個處理器和一個或多個適配器的存儲控制器以及RAID盤驅(qū)動器陣列;圖3示出存儲子系統(tǒng)中的存儲控制器;圖4示出包括適配器的存儲控制器,其中,適配器進一步包括本發(fā)明的自修復(fù)軟件;圖5示出存儲控制器,其中,存儲控制器可讀性和可服務(wù)性(Readability and Serviceability,RAS)功能包括根據(jù)本發(fā)明一個實施例的自修復(fù)系統(tǒng);圖6示出RAID盤驅(qū)動器陣列的盤驅(qū)動器,其中,盤驅(qū)動器包括根據(jù)本發(fā)明一個實施例的自修復(fù)系統(tǒng);圖7示出根據(jù)本發(fā)明的一個實施例的包括奇偶校驗的RAID陣列的多個盤驅(qū)動器、盤驅(qū)動器目錄、緩沖器以及計數(shù)器;圖8示出根據(jù)本發(fā)明一個實施例的自修復(fù)存儲系統(tǒng)的流程圖;
圖9示出根據(jù)本發(fā)明一個實施例的自修復(fù)存儲系統(tǒng)的流程圖;圖10示出根據(jù)本發(fā)明一個實施例的自修復(fù)存儲系統(tǒng)的流程圖;圖11示出根據(jù)本發(fā)明一個實施例的自修復(fù)存儲系統(tǒng)中檢查損壞數(shù)據(jù)串子段周圍的相鄰區(qū)域的流程圖;圖12示出根據(jù)本發(fā)明一個實施例的自修復(fù)存儲系統(tǒng)中檢查損壞數(shù)據(jù)串子段周圍的相鄰區(qū)域的流程圖;圖13示出RAID盤驅(qū)動器陣列中的多個盤驅(qū)動器;以及圖14示出RAID盤驅(qū)動器陣列中的盤驅(qū)動器的詳細(xì)構(gòu)造。
具體實施例方式
在下面對本發(fā)明優(yōu)選實施例的詳細(xì)描述中,參照形成其一部分的附圖,其中作為示例示出可以實施本發(fā)明的特定實施例。應(yīng)該理解,還可以利用其他實施例,因為在不脫離本發(fā)明的范圍的情況下可以作結(jié)構(gòu)改動。
在本發(fā)明的一個實施例中,當(dāng)RAID陣列的盤驅(qū)動器上的損壞被定位時,檢查盤驅(qū)動器上的損壞周圍的相鄰區(qū)域,以便定位盤驅(qū)動器上的損壞周圍的附加損壞。使用奇偶校驗來重構(gòu)和遷移與該損壞和附加損壞相關(guān)聯(lián)的數(shù)據(jù)。這樣,本發(fā)明的自修復(fù)系統(tǒng)可以避免因盤驅(qū)動器上的增長介質(zhì)損壞包括盤驅(qū)動器上的徑向和螺旋形劃痕而導(dǎo)致丟失盤驅(qū)動器或RAID陣列上的數(shù)據(jù),自修復(fù)系統(tǒng)消除了潛在的單故障點暴露。
當(dāng)存儲控制器的適配器控制向RAID陣列的盤驅(qū)動器寫入數(shù)據(jù)串時,并且當(dāng)隨后由適配器從盤驅(qū)動器讀取那個數(shù)據(jù)串時,由于存儲那個數(shù)據(jù)串的特定數(shù)據(jù)串子段的盤驅(qū)動器中的一個扇區(qū)存在損壞,因此不能從盤驅(qū)動器正確讀取那個數(shù)據(jù)串的特定數(shù)據(jù)串子段(該特定數(shù)據(jù)串子段以下稱作損壞數(shù)據(jù)串子段)。然而,可以構(gòu)造和恢復(fù)與損壞數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)。數(shù)據(jù)串包括多個子段,其中包括損壞數(shù)據(jù)串子段和奇偶校驗信息。奇偶校驗信息用來重構(gòu)和恢復(fù)與損壞數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)。適配器可以使用RAID恢復(fù)方法來重構(gòu)與損壞數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù),并且將該數(shù)據(jù)遷移到較安全的位置如當(dāng)前盤驅(qū)動器或備用盤驅(qū)動器上的另一個位置。因而,重構(gòu)數(shù)據(jù)串存儲在RAID陣列的盤驅(qū)動器或備用盤驅(qū)動器上的新位置中,新位置具有由盤驅(qū)動器目錄如文件分配表提供的新地址。在本發(fā)明的一個實施例中,存儲控制器立即檢查損壞數(shù)據(jù)串子段周圍的相鄰區(qū)域以便定位可能位于損壞數(shù)據(jù)串子段附近的其他附加損壞數(shù)據(jù)串子段。自修復(fù)過程可以在背景中運行,從而允許主機不受阻礙地訪問客戶數(shù)據(jù)(customer data)。
如果在RAID陣列的盤驅(qū)動器上存在徑向或螺旋形劃痕,則在損壞數(shù)據(jù)串子段的鄰近處將存在其他損壞數(shù)據(jù)串子段。除了與損壞數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)之外還立即同時重構(gòu)與其他損壞數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)降低了單故障點的風(fēng)險。在本發(fā)明的一個實施例中,存儲控制器立即檢查損壞數(shù)據(jù)串子段(位于柱面N和扇區(qū)偏移SO)周圍的相鄰區(qū)域,這是通過首先檢查損壞數(shù)據(jù)串子段周圍的間隔相鄰柱面中的任何其他損壞數(shù)據(jù)串子段(例如,柱面N+1和N-1、N+3和N-3、N+5和N-5等,以扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)),直到定位邊遠柱面(outlyingcylinder)中的非損壞數(shù)據(jù)串子段,此時,存儲控制器然后將重構(gòu)與位于損壞數(shù)據(jù)串子段與非損壞數(shù)據(jù)串子段之間的被跳過柱面中的其他損壞數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)。如果與邊遠柱面中的非損壞數(shù)據(jù)串子段相關(guān)聯(lián)的柱面數(shù)大于或等于M(由用戶設(shè)置的數(shù)目),則存儲控制器將判定是否由于在盤驅(qū)動器陣列的局部區(qū)域中存在太多損壞數(shù)據(jù)串子段而應(yīng)該以備用盤驅(qū)動器更換當(dāng)前盤驅(qū)動器。這樣,存儲控制器將(1)立即檢查由RAID陣列的可疑盤驅(qū)動器成員報告的損壞周圍的相鄰區(qū)域,(2)判定在這些相鄰區(qū)域中是否存在附加損壞,(3)比較新報告的損壞與盤驅(qū)動器p列表和g列表中的已知損壞的鄰近性,(4)如果所需自修復(fù)量被證實過大,則以備用驅(qū)動器更換或者作為備份拷貝可疑驅(qū)動器,其中,當(dāng)計數(shù)器中的計數(shù)大于或等于預(yù)定值時,自修復(fù)量過大,該計數(shù)表示RAID陣列中的特定盤驅(qū)動器所需的自修復(fù)次數(shù),(5)使用RAID奇偶校驗,重構(gòu)與損壞相關(guān)聯(lián)的數(shù)據(jù)從而產(chǎn)生重構(gòu)數(shù)據(jù),并且重構(gòu)與附加損壞相關(guān)聯(lián)的數(shù)據(jù)從而產(chǎn)生另外重構(gòu)數(shù)據(jù)(further reconstructed data),以及(6)將重構(gòu)數(shù)據(jù)和另外重構(gòu)數(shù)據(jù)遷移到該盤驅(qū)動器或備用盤驅(qū)動器上的較可靠位置。在本發(fā)明的其他實施例中,可以延遲如上所述立即采取的操作。本發(fā)明的前述方面將在下文中進行更詳細(xì)的描述。
參照圖1,一個或多個主處理機10在工作時連接到存儲子系統(tǒng)11。主處理機10可以是工作站、服務(wù)器或個人計算機如自動柜員機(ATM)、由銀行出納員操作的銀行計算機終端或者在機場由航空公司雇員操作的機場計算機終端。存儲子系統(tǒng)11可以在工作時通過數(shù)英里的互連長途電纜連接到主機10。存儲子系統(tǒng)11包括存儲控制器和存儲器,存儲控制器控制在存儲器中存儲數(shù)據(jù)。主機10可以請求接收存儲在存儲子系統(tǒng)11的存儲器中的數(shù)據(jù)。對此響應(yīng),存儲子系統(tǒng)11的存儲控制器將從存儲器檢索數(shù)據(jù),并且將所請求數(shù)據(jù)提供給主機10。在讀取操作期間,如果存儲器不包含從主機請求的數(shù)據(jù),則子系統(tǒng)從適當(dāng)?shù)谋P驅(qū)動器讀取該數(shù)據(jù),并且將它存儲在存儲器中。另外,主機10還可以請求將特定數(shù)據(jù)存儲在存儲子系統(tǒng)11的存儲器中。對此響應(yīng),存儲子系統(tǒng)11的存儲控制器將從主機10接收數(shù)據(jù),并且將數(shù)據(jù)存儲在存儲器中。在寫入操作期間,在將數(shù)據(jù)存儲在存儲器中之后,子系統(tǒng)將該數(shù)據(jù)從存儲器降級(destage)到盤驅(qū)動器上。
參照圖2,一個或多個主處理機10在工作時通過長途電纜38連接到存儲子系統(tǒng)11。存儲子系統(tǒng)11包括存儲控制器12和存儲器26,其中存儲器26包括工作時連接到存儲控制器12的廉價盤冗余陣列(RAID)26(以下稱作RAID陣列26)。RAID陣列26包括第一盤驅(qū)動器28、第二盤驅(qū)動器30、第三盤驅(qū)動器32、第(n-1)盤驅(qū)動器34以及第n盤驅(qū)動器36。在一個實施例中,盤驅(qū)動器包括磁性記錄盤驅(qū)動器。在可選實施例中,盤驅(qū)動器可以包括光盤驅(qū)動器或者使用其他數(shù)據(jù)記錄機制的盤驅(qū)動器。本發(fā)明還可以采用其他形式的存儲設(shè)備來實現(xiàn)。存儲控制器12包括一個或多個處理器22以及工作時連接到處理器22和RAID陣列26的一個或多個設(shè)備適配器24。
參照圖3,圖2的存儲子系統(tǒng)11的存儲控制器12的處理器22包括第一處理器“處理器1”22a和第二處理器“處理器2”22b,它們均連接到系統(tǒng)總線。圖2的存儲控制器12的設(shè)備適配器24包括第一適配器24a、第二適配器24b、第三適配器24c和第四適配器24d,所有這些適配器都連接到系統(tǒng)總線。另外,RAID陣列26包括第一盤驅(qū)動器28、第二盤驅(qū)動器30、第三盤驅(qū)動器32、第(n-1)盤驅(qū)動器34和第n盤驅(qū)動器36,所有這些盤驅(qū)動器都連接到系統(tǒng)總線。
在圖3中,主機10可以在RAID陣列26中存儲一個數(shù)據(jù)串,其中,該數(shù)據(jù)串的第一數(shù)據(jù)串子段存儲在第一盤驅(qū)動器28中,該數(shù)據(jù)串的第二數(shù)據(jù)串子段存儲在第二盤驅(qū)動器30中,該數(shù)據(jù)串的第三數(shù)據(jù)串子段存儲在第三盤驅(qū)動器32中,該數(shù)據(jù)串的第(n-1)數(shù)據(jù)串子段存儲在第(n-1)盤驅(qū)動器34中,并且該數(shù)據(jù)串的第n數(shù)據(jù)串子段存儲在第n盤驅(qū)動器36中。另一方面,主處理機10可以請求從RAID陣列26檢索該數(shù)據(jù)串,其中,從第一盤驅(qū)動器28檢索該數(shù)據(jù)串的第一數(shù)據(jù)串子段,從第二盤驅(qū)動器30檢索該數(shù)據(jù)串的第二數(shù)據(jù)串子段,從第三盤驅(qū)動器32檢索該數(shù)據(jù)串的第三數(shù)據(jù)串子段,從第(n-1)盤驅(qū)動器34檢索該數(shù)據(jù)串的第(n-1)數(shù)據(jù)串子段,并且從第n盤驅(qū)動器36檢索該數(shù)據(jù)串的第n數(shù)據(jù)串子段。當(dāng)在圖3的RAID陣列26中存儲數(shù)據(jù)串或者從其檢索數(shù)據(jù)串時,存儲控制器12的處理器22a和/或22b將響應(yīng)來自主機10的指令而進一步指示設(shè)備適配器24a-24d中的一個或多個在盤驅(qū)動器28-36中存儲數(shù)據(jù)串或者從其檢索數(shù)據(jù)串。
參照圖4,根據(jù)一個優(yōu)選實施例,存儲控制器12包括處理器22和設(shè)備適配器24。然而,設(shè)備適配器24進一步包括本發(fā)明的自修復(fù)軟件模塊42。在本發(fā)明的一個實施例中,當(dāng)定位存儲在圖3的盤驅(qū)動器28、30、32、34或36之一中的損壞數(shù)據(jù)串子段時,適配器24立即重構(gòu)與損壞數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)從而產(chǎn)生重構(gòu)數(shù)據(jù)串子段,將重構(gòu)數(shù)據(jù)串子段存儲在緩沖器中,增大計數(shù)器,更新盤驅(qū)動器目錄,并且根據(jù)由盤驅(qū)動器目錄提供的新地址在同一盤驅(qū)動器或者備用或備份盤驅(qū)動器的新可用扇區(qū)中恢復(fù)與損壞數(shù)據(jù)串子段相對應(yīng)的重構(gòu)數(shù)據(jù)串子段。當(dāng)從其盤驅(qū)動器檢索包含重構(gòu)數(shù)據(jù)串子段的數(shù)據(jù)串時,數(shù)據(jù)串此時將包含重構(gòu)數(shù)據(jù)串子段。以下描述用于檢查盤驅(qū)動器上的損壞周圍的相鄰區(qū)域以定位盤驅(qū)動器上的附加損壞、重構(gòu)與損壞相關(guān)聯(lián)的數(shù)據(jù)以及重構(gòu)與附加損壞相關(guān)聯(lián)的數(shù)據(jù)的這一過程。
參照圖5和6,在可選方案中,本發(fā)明的自修復(fù)軟件42可以包括在存儲控制器12的可讀性和可服務(wù)性(RAS)功能40內(nèi),如圖5所示??蛇x地,本發(fā)明的自修復(fù)軟件42可以包括在盤驅(qū)動器本身如盤驅(qū)動器28、30、32、34和36之一內(nèi),如圖6所示。在可選方案中,本發(fā)明的自修復(fù)軟件42可以在所有三個上述裝置即設(shè)備適配器24、RAS功能40和盤驅(qū)動器28-36之間分配。在此所用的術(shù)語“自修復(fù)軟件”包括例如微代碼。
參照圖7,例如,主機10指示存儲子系統(tǒng)11的存儲控制器12在RAID陣列26中存儲數(shù)據(jù)串。作為響應(yīng),存儲控制器12的處理器22指示設(shè)備適配器24在圖3的盤驅(qū)動器28-36中存儲數(shù)據(jù)串。在圖7中,數(shù)據(jù)串以下稱作數(shù)據(jù)串46-52。數(shù)據(jù)串46-52由三個數(shù)據(jù)串子段46、48和50加上奇偶校驗信息52組成。在圖7中,第一數(shù)據(jù)串子段46存儲在盤驅(qū)動器A中,第二數(shù)據(jù)串子段48存儲在盤驅(qū)動器B中,第三數(shù)據(jù)串子段50存儲在盤驅(qū)動器C中,并且奇偶校驗信息52存儲在驅(qū)動器D中。盤驅(qū)動器B具有劃痕44。劃痕44貫穿第二數(shù)據(jù)串子段48;也就是,第二數(shù)據(jù)串子段48包括在劃痕44內(nèi)。這樣,第二數(shù)據(jù)串子段48存在損壞(以下稱作損壞數(shù)據(jù)串子段48),因為盤驅(qū)動器B中存儲了第二數(shù)據(jù)串子段48的扇區(qū)存在損壞。因此,當(dāng)主機10請求存儲子系統(tǒng)11的存儲控制器12從存儲器檢索數(shù)據(jù)串46-52時,存儲控制器12的處理器22將指示設(shè)備適配器24從圖7中的RAID盤驅(qū)動器A、B、C和D檢索數(shù)據(jù)串46-52。對此響應(yīng),當(dāng)設(shè)備適配器24從圖7中的盤驅(qū)動器A、B、C和D檢索數(shù)據(jù)串46-52時,適配器將從盤驅(qū)動器A接收第一數(shù)據(jù)串子段46,從盤驅(qū)動器B接收損壞數(shù)據(jù)串子段48,從盤驅(qū)動器C接收第三數(shù)據(jù)串子段50,并且從盤驅(qū)動器D接收奇偶校驗信息52。
當(dāng)設(shè)備適配器24從盤驅(qū)動器B接收損壞數(shù)據(jù)串子段48時,設(shè)備適配器24將開始重構(gòu)與損壞數(shù)據(jù)串子段48相關(guān)聯(lián)的數(shù)據(jù)。使用例如公知的RAID數(shù)據(jù)恢復(fù)技術(shù)來重構(gòu)與損壞數(shù)據(jù)串子段48相關(guān)聯(lián)的數(shù)據(jù)(以下稱作重構(gòu)數(shù)據(jù)串子段48)。將重構(gòu)數(shù)據(jù)串子段48置于緩沖器54中,并且對計數(shù)器56中的計數(shù)增一。計數(shù)器56存儲針對特定盤驅(qū)動器已定位的損壞數(shù)。與盤驅(qū)動器B的損壞數(shù)相對應(yīng)的計數(shù)器56中的計數(shù)增一。適配器24咨詢(consult)盤驅(qū)動器目錄58以定位用于重構(gòu)數(shù)據(jù)串子段48的新盤驅(qū)動器地址。對盤驅(qū)動器目錄58進行更新以記錄用于重構(gòu)數(shù)據(jù)串子段48的新盤驅(qū)動器地址位置。然后,適配器24可以從盤驅(qū)動器目錄58獲得盤驅(qū)動器B上的用于重構(gòu)數(shù)據(jù)串子段48的位置。然后,在盤驅(qū)動器B上的新盤驅(qū)動器地址60存儲重構(gòu)數(shù)據(jù)串子段48(目前存在于緩沖器54中)。盤驅(qū)動器B上的用于重構(gòu)數(shù)據(jù)串子段48的新盤驅(qū)動器地址以標(biāo)號60表示。因此,與損壞數(shù)據(jù)串子段48相關(guān)聯(lián)的數(shù)據(jù)得到重構(gòu),并且將緩沖器54中的重構(gòu)數(shù)據(jù)串子段恢復(fù)到盤驅(qū)動器B上的位置地址60。這就完成了損壞數(shù)據(jù)串子段48的數(shù)據(jù)恢復(fù)。
數(shù)據(jù)串子段64也位于盤驅(qū)動器B上。第二數(shù)據(jù)串子段48包括在劃痕44內(nèi),并且數(shù)據(jù)串子段64也包括在劃痕44內(nèi)。因此,數(shù)據(jù)串子段64也是損壞數(shù)據(jù)串子段。數(shù)據(jù)串子段64相鄰于第二數(shù)據(jù)串子段48。如果損壞數(shù)據(jù)串子段64未被重構(gòu),則這可能導(dǎo)致單故障點暴露。例如,如果盤驅(qū)動器A上的數(shù)據(jù)串子段62也存在損壞并且主機10請求存儲控制器12從盤驅(qū)動器A、B、C和D檢索數(shù)據(jù)串62-68。當(dāng)從盤驅(qū)動器A、B、C和D檢索數(shù)據(jù)串62-68時,從驅(qū)動器A檢索第一損壞數(shù)據(jù)串子段62,從驅(qū)動器B檢索第二損壞數(shù)據(jù)串子段64,從驅(qū)動器C檢索第三數(shù)據(jù)串子段66,并且從驅(qū)動器D檢索奇偶校驗信息68。由于在數(shù)據(jù)串62-68中存在兩個損壞數(shù)據(jù)串子段(第一損壞數(shù)據(jù)串子段62和第二損壞數(shù)據(jù)串子段64),因此出現(xiàn)了單故障點。每當(dāng)出現(xiàn)單故障點時,在數(shù)據(jù)串中存在兩個或更多損壞數(shù)據(jù)串子段。由于在數(shù)據(jù)串62-68中存在兩個損壞數(shù)據(jù)串子段(第一損壞數(shù)據(jù)串子段62和第二損壞數(shù)據(jù)串子段64),因此將出現(xiàn)單故障點,這樣將不能使用傳統(tǒng)技術(shù)來重構(gòu)數(shù)據(jù)串子段62和64中的損壞。這可能導(dǎo)致數(shù)據(jù)串62-68的丟失。然而,如果當(dāng)重構(gòu)與損壞數(shù)據(jù)串子段48相關(guān)聯(lián)的數(shù)據(jù)時重構(gòu)與損壞數(shù)據(jù)串子段64(在盤驅(qū)動器B上相鄰于損壞數(shù)據(jù)串子段48)相關(guān)聯(lián)的數(shù)據(jù),則這將避免單故障點。
參照圖8、9和10,示出根據(jù)本發(fā)明一個實施例的自修復(fù)方法的流程圖。參照圖8,在操作42a中,當(dāng)損壞數(shù)據(jù)串子段被定位時,立即檢查盤驅(qū)動器中損壞數(shù)據(jù)串子段周圍的相鄰區(qū)域以定位相鄰區(qū)域中的附加損壞數(shù)據(jù)串子段。另外,在操作42b中,判定在損壞數(shù)據(jù)串子段周圍的相鄰區(qū)域中是否存在附加損壞數(shù)據(jù)串子段。
例如,參照圖7,當(dāng)損壞數(shù)據(jù)串子段48在盤驅(qū)動器B中被定位時,立即檢查損壞數(shù)據(jù)串子段48周圍的相鄰區(qū)域,并且判定在相鄰區(qū)域中是否存在任何附加損壞數(shù)據(jù)串子段。損壞數(shù)據(jù)串子段48位于柱面70上。柱面70的損壞數(shù)據(jù)串子段48周圍的相鄰區(qū)域?qū)⑹?至少是)相鄰于柱面70的柱面如柱面72。在圖7中,數(shù)據(jù)串子段64位于相鄰柱面72上。因此,當(dāng)檢查柱面70的損壞數(shù)據(jù)串子段48周圍的相鄰區(qū)域時,由于柱面72相鄰于柱面70,因此檢查存在于柱面72上的任何數(shù)據(jù)串子段如存在于柱面72上的數(shù)據(jù)串子段64。下一步,判定在柱面70的損壞數(shù)據(jù)串子段48周圍的相鄰區(qū)域中是否存在任何附加損壞數(shù)據(jù)串子段。由于柱面72上的數(shù)據(jù)串子段64處于柱面70的損壞數(shù)據(jù)串子段48周圍的相鄰區(qū)域內(nèi),因此立即判定柱面72上的數(shù)據(jù)串子段64是否存在損壞(該操作可以在背景中完成,從而允許主機10不受阻礙地訪問客戶數(shù)據(jù))。例如,向柱面72上的數(shù)據(jù)串子段64位置執(zhí)行寫入然后從其執(zhí)行讀取。該操作將判定數(shù)據(jù)串子段64是否存在損壞。如果實施圖8中的操作42a和42b,則可以避免單故障點。后面將參照附圖中的圖11、12、13和14更詳細(xì)地討論操作42a。
在圖8中,參照操作42c。將盤驅(qū)動器上的損壞數(shù)據(jù)串子段和附加損壞數(shù)據(jù)串子段的位置與盤驅(qū)動器p列表和g列表中的已知損壞地方進行比較。
在圖7中,將柱面70上的損壞數(shù)據(jù)串子段48的位置和柱面72上的附加損壞數(shù)據(jù)串子段64的位置與盤驅(qū)動器p列表和g列表進行比較。p列表是由制造商標(biāo)識為盤上損壞位置的盤驅(qū)動器如圖7中的驅(qū)動器B上的位置的列表。p列表是在制造盤期間和之后由制造商生成的。g列表是由適配器24生成并且反映盤上另外損壞位置的盤驅(qū)動器如圖7中的驅(qū)動器B上的位置的另一個列表。當(dāng)適配器24定位盤驅(qū)動器上的第一損壞數(shù)據(jù)串子段時,適配器把該第一損壞數(shù)據(jù)串子段在盤驅(qū)動器上的地址放置在g列表上。每當(dāng)定位盤驅(qū)動器上的第二損壞數(shù)據(jù)串子段時,適配器24將把該第二損壞數(shù)據(jù)串子段在盤驅(qū)動器上的地址放置在g列表上。圖7的柱面70上的第一損壞數(shù)據(jù)串子段48的第一地址位置和圖7的柱面72上的第二損壞數(shù)據(jù)串子段64的第二地址位置由適配器24與p列表和g列表中的地址位置進行比較。如果第一損壞數(shù)據(jù)串子段48和第二損壞數(shù)據(jù)串子段64的第一和第二地址位置位于p列表和g列表中的其他損壞數(shù)據(jù)串子段的位置的附近,則適配器24將考慮是否應(yīng)以備用驅(qū)動器更換盤驅(qū)動器。
在圖8中,參照操作42d。通過將表示損壞數(shù)據(jù)串子段和附加損壞數(shù)據(jù)串子段的數(shù)目加到計數(shù)器,判定計數(shù)器中的計數(shù)是否大于或等于預(yù)定閾值,并且將結(jié)果報告給適配器,從而判定重構(gòu)與損壞數(shù)據(jù)串子段和附加損壞數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)所需的自修復(fù)量是否過大,當(dāng)計數(shù)器中的計數(shù)大于或等于預(yù)定閾值時,適配器判決自修復(fù)量過大。
在圖7中,當(dāng)柱面70上的損壞數(shù)據(jù)串子段48被定位時,增大計數(shù)器56中的計數(shù)。立即檢查損壞數(shù)據(jù)串子段48周圍的相鄰區(qū)域如相鄰柱面72。當(dāng)發(fā)現(xiàn)數(shù)據(jù)串子段64存在損壞時,進一步增大計數(shù)器56中的計數(shù)。在圖2中,設(shè)備適配器24將檢查計數(shù)器56中的計數(shù)。當(dāng)計數(shù)器56中的計數(shù)大于或等于預(yù)定閾值時,適配器24將由于在盤驅(qū)動器的局部區(qū)域中存在太多損壞而以備用盤驅(qū)動器更換盤驅(qū)動器。
在圖9的操作42e中,當(dāng)適配器判定自修復(fù)量過大時,以新備用盤驅(qū)動器或者備份盤驅(qū)動器替換原始盤驅(qū)動器。例如,參照圖7,當(dāng)計數(shù)器56中的計數(shù)大于或等于預(yù)定閾值時,適配器24現(xiàn)在可以判定由于盤驅(qū)動器B在盤的局部區(qū)域上存在太多損壞因此盤驅(qū)動器B的自修復(fù)量過大。因此,有必要以新備用盤驅(qū)動器更換盤驅(qū)動器B。在做此之前,將有必要更新盤驅(qū)動器目錄58;也就是,必須在盤驅(qū)動器目錄58中更改盤驅(qū)動器B上的所有數(shù)據(jù)的地址以反映它們在備用盤驅(qū)動器上的新位置。
在圖9的操作42f中,使用RAID恢復(fù)軟件,立即重構(gòu)與損壞數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù),從而生成重構(gòu)數(shù)據(jù)串子段,并且立即重構(gòu)與附加損壞數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù),從而生成另外重構(gòu)數(shù)據(jù)串子段。在緩沖器中存儲重構(gòu)數(shù)據(jù)串子段和另外重構(gòu)數(shù)據(jù)串子段,操作42g。通過在盤驅(qū)動器目錄58中記錄用于重構(gòu)數(shù)據(jù)串子段的第一新盤驅(qū)動器地址并且在盤驅(qū)動器目錄58中記錄用于另外重構(gòu)數(shù)據(jù)串子段的一個或多個附加新盤驅(qū)動器地址,更新盤驅(qū)動器目錄58,操作42h。當(dāng)適配器24判定自修復(fù)量過大時,在新備用或備份盤驅(qū)動器的第一新盤驅(qū)動器地址上存儲重構(gòu)數(shù)據(jù)串子段,并且當(dāng)適配器24判定自修復(fù)量過大時,在新備用或備份盤驅(qū)動器的附加新盤驅(qū)動器地址上存儲重構(gòu)數(shù)據(jù)串子段,圖10的操作42i。當(dāng)適配器24判定自修復(fù)量不過大時,在原始盤驅(qū)動器的第一新盤驅(qū)動器地址上存儲重構(gòu)數(shù)據(jù)串子段,并且當(dāng)適配器24判定自修復(fù)量不過大時,在原始盤驅(qū)動器的附加新盤驅(qū)動器地址上存儲重構(gòu)數(shù)據(jù)串子段,圖10的操作42j。
例如參照圖7,當(dāng)發(fā)現(xiàn)損壞數(shù)據(jù)串子段48時,立即重構(gòu)與損壞數(shù)據(jù)串子段48相關(guān)聯(lián)的數(shù)據(jù)。也就是,根據(jù)第一數(shù)據(jù)串子段46、第三數(shù)據(jù)串子段50和奇偶校驗信息52,可以重構(gòu)與第二損壞數(shù)據(jù)串子段48相關(guān)聯(lián)的數(shù)據(jù)。然而,如果計數(shù)器56中的計數(shù)小于預(yù)定閾值(當(dāng)計數(shù)器56中的計數(shù)小于預(yù)定閾值時,適配器24判定自修復(fù)量不過大),則將重構(gòu)數(shù)據(jù)串子段置于緩沖器54中,增大計數(shù)器56,在盤驅(qū)動器目錄58中為重構(gòu)數(shù)據(jù)串子段確定新盤驅(qū)動器地址,更新盤驅(qū)動器目錄58來記錄用于重構(gòu)數(shù)據(jù)串子段的新盤驅(qū)動器地址,并且根據(jù)由盤驅(qū)動器目錄58提供的新盤驅(qū)動器地址,將重構(gòu)數(shù)據(jù)串子段存儲在盤驅(qū)動器B的柱面70上的新位置60。
還應(yīng)該重構(gòu)與任何附加損壞數(shù)據(jù)串子段相關(guān)聯(lián)的數(shù)據(jù)(這可以在背景中完成以允許主機不受阻礙地訪問客戶數(shù)據(jù))。參照圖7,立即重構(gòu)與存在于相鄰柱面72上的附加損壞數(shù)據(jù)串子段64相關(guān)聯(lián)的數(shù)據(jù)(再次,這可以在背景中完成以允許主機不受阻礙地訪問客戶數(shù)據(jù))。為了重構(gòu)與附加損壞數(shù)據(jù)串子段64相關(guān)聯(lián)的數(shù)據(jù),使用驅(qū)動器A上的第一數(shù)據(jù)串子段62、驅(qū)動器C上的第三數(shù)據(jù)串子段66和驅(qū)動器D上的奇偶校驗信息68來確定與附加損壞數(shù)據(jù)串子段64相關(guān)聯(lián)的數(shù)據(jù)(以下稱作另外重構(gòu)數(shù)據(jù)串子段)。然而,如果計數(shù)器56中的計數(shù)小于預(yù)定閾值(當(dāng)計數(shù)器56中的計數(shù)小于預(yù)定閾值時,適配器24判定自修復(fù)量不過大),則將另外重構(gòu)數(shù)據(jù)串子段置于緩沖器54中,增大計數(shù)器56,在盤驅(qū)動器目錄58中為另外重構(gòu)數(shù)據(jù)串子段確定附加新盤驅(qū)動器地址,更新盤驅(qū)動器目錄58以記錄用于另外重構(gòu)數(shù)據(jù)串子段的附加新盤驅(qū)動器地址,并且根據(jù)由盤驅(qū)動器目錄58提供的附加新盤驅(qū)動器地址,將另外重構(gòu)數(shù)據(jù)串子段存儲在盤驅(qū)動器B的柱面72上的新位置65。然而,如果計數(shù)器56中的計數(shù)大于或等于預(yù)定閾值,則適配器24判定自修復(fù)盤驅(qū)動器B所需的自修復(fù)量過大。在這種情況下,定位新備用或備份盤驅(qū)動器,根據(jù)由盤驅(qū)動器目錄58提供的新盤驅(qū)動器地址,將損壞數(shù)據(jù)串子段48的重構(gòu)數(shù)據(jù)串子段重新存儲在新備用或備份盤驅(qū)動器的新盤驅(qū)動器地址上,并且根據(jù)由盤驅(qū)動器目錄58提供的附加新盤驅(qū)動器地址,將損壞數(shù)據(jù)串子段64的另外重構(gòu)數(shù)據(jù)串子段重新存儲在新備用或備份盤驅(qū)動器的附加新盤驅(qū)動器地址上。
圖11、12、13和14示出當(dāng)損壞數(shù)據(jù)串子段被定位時檢查盤驅(qū)動器中損壞數(shù)據(jù)串子段周圍的相鄰區(qū)域以在相鄰區(qū)域中定位附加損壞數(shù)據(jù)串子段的操作即操作42a的其他方面。參照圖11,當(dāng)原始盤驅(qū)動器上的損壞數(shù)據(jù)串子段位于柱面N和扇區(qū)偏移SO時,嘗試以扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)對柱面N-1和N+1進行讀取或?qū)懭?以下稱作新位置),操作42a1。例如,在圖13中,示出了包括盤驅(qū)動器A、盤驅(qū)動器B、盤驅(qū)動器C和奇偶校驗驅(qū)動器D的RAID盤驅(qū)動器陣列。在圖13中,劃痕44存在于盤驅(qū)動器B的表面上。這樣,在與劃痕44重合的驅(qū)動器B的表面上將存在多個損壞數(shù)據(jù)串子段。圖14示出了盤驅(qū)動器B的更詳細(xì)視圖。
在圖14中,示出了圖13的盤驅(qū)動器B的更詳細(xì)視圖。在圖14中,劃痕44存在于驅(qū)動器B的表面上。盤驅(qū)動器B包括多個柱面80,柱面80中的每一個上均存儲有多個數(shù)據(jù)串子段。類似于圖7中與驅(qū)動器B上的劃痕44重合的損壞數(shù)據(jù)串子段48,損壞數(shù)據(jù)串子段48存在于與劃痕44重合的盤驅(qū)動器B的表面上。在圖14中,假定其上存儲了損壞數(shù)據(jù)串子段48的柱面稱作柱面n。因此,損壞數(shù)據(jù)串子段48位于柱面n、扇區(qū)偏移SO。在圖14中,相鄰于柱面n的柱面在圖14的損壞數(shù)據(jù)串子段48的一側(cè)包括柱面n+1、n+2和n+3,并且在圖14的損壞數(shù)據(jù)串子段48的另一側(cè)包括柱面n-1、n-2和n-3。在圖14中,雖然損壞數(shù)據(jù)串子段48(與劃痕44重合)位于柱面n、扇區(qū)偏移SO,但是扇區(qū)偏移SO+1字節(jié)位于扇區(qū)偏移SO的一側(cè),而扇區(qū)偏移SO-1字節(jié)位于扇區(qū)偏移SO的另一側(cè),如圖14所示。
在圖14中,當(dāng)損壞數(shù)據(jù)串子段48位于柱面n和扇區(qū)偏移SO時,存儲控制器12的適配器24嘗試以扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)對柱面n+1和n-1進行讀取或?qū)懭搿S捎谌鐖D14所示劃痕44以扇區(qū)偏移SO與柱面n+1和n-1重合,因此以扇區(qū)偏移SO在柱面n+1和n-1上將發(fā)現(xiàn)稱作損壞數(shù)據(jù)串子段的損壞。
參照圖11,如果有損壞數(shù)據(jù)串子段位于這些新位置,則在g列表中記錄這些損壞,并且以扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)檢查間隔相鄰柱面n-3和n+3(以下稱作另外新位置),操作42a2。例如,參照圖14,如果嘗試以扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)對柱面n+1和n-1進行讀取或?qū)懭?稱作新位置),則在柱面n+1和n-1的扇區(qū)偏移SO將發(fā)現(xiàn)損壞(即損壞數(shù)據(jù)串子段),因為劃痕44與柱面n+1和n-1上的扇區(qū)偏移SO重合。由于有損壞數(shù)據(jù)串子段位于柱面n+1和n-1的扇區(qū)偏移SO,因此在g列表中記錄這些損壞數(shù)據(jù)串子段(先前定位的損壞數(shù)據(jù)串子段及其位置的增長列表),然后開始檢查并且嘗試以扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)對間隔相鄰柱面n-3和n+3進行讀取或?qū)懭?。由于劃?4不以扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)與柱面n+3和n-3重合,因此以扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)在柱面n-3和n+3上將找不到損壞數(shù)據(jù)串子段。
參照圖11,如果有損壞(損壞數(shù)據(jù)串子段)位于這些另外新位置,則將這些另外新位置與任何先前p列表或g列表條目進行比較,操作42a3。如果另外新位置相鄰于與先前p列表或g列表條目相關(guān)聯(lián)的位置(例如,相同頭(head),在相同扇區(qū)偏移和柱面的附近),則將結(jié)果報告給適配器24,適配器確定24原始盤驅(qū)動器的處置,包括由于存在太多增長損壞而拒絕盤驅(qū)動器。
例如,參照圖14,如果除了損壞以扇區(qū)偏移SO和/或SO+1字節(jié)和SO-1字節(jié)存在于柱面n-1和n+1(新位置)之外,還有損壞(損壞數(shù)據(jù)串子段)以扇區(qū)偏移SO和/或SO+1字節(jié)和SO-1字節(jié)存在于柱面n-3和n+3(另外新位置),則將這些另外新位置與任何先前p列表和g列表條目進行比較。如果另外新位置相鄰于p列表或g列表中的其他位置,則將該結(jié)果報告給適配器24。適配器24判決是以備用盤驅(qū)動器更換當(dāng)前盤驅(qū)動器,還是繼續(xù)使用當(dāng)前盤驅(qū)動器。然而,由于劃痕44不以扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)與柱面n-3和n+3重合,因此以扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)在柱面n-3和n+3上將找不到損壞數(shù)據(jù)串子段。
下一步,參照圖11,檢查間隔相鄰柱面n-3和n+3是否無損壞?(操作42a4)。例如,在圖14中,由于劃痕44不以扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)與柱面n-3和n+3重合,因此間隔相鄰柱面n-3和n+3無損壞,從而以扇區(qū)偏移SO在柱面n-3和n+3上沒有任何損壞數(shù)據(jù)串子段,而且以扇區(qū)偏移SO+1字節(jié)或扇區(qū)偏移SO-1字節(jié)沒有任何損壞數(shù)據(jù)串子段。
然后,參照圖12,如果間隔相鄰柱面n-3和n+3無損壞并且不包含損壞數(shù)據(jù)串子段,則以扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)檢查被跳過的柱面包括柱面n-2和n+2,以判定損壞數(shù)據(jù)串子段是否存在于被跳過柱面上的這些扇區(qū)位置,操作42a5。例如,在圖14中,已經(jīng)確定以扇區(qū)偏移SO、扇區(qū)偏移SO+1字節(jié)或扇區(qū)偏移SO-1字節(jié)在柱面n+3和n-3上不存在任何損壞(即損壞數(shù)據(jù)串子段)。因此,檢查被跳過的柱面。柱面n+2和n-1被跳過。因此,檢查并嘗試以扇區(qū)偏移SO、扇區(qū)偏移SO+1字節(jié)和扇區(qū)偏移SO-1字節(jié)對柱面n+2和n-2進行讀取和寫入。由于劃痕44以扇區(qū)偏移SO與柱面n+2和n-2重合,因此以扇區(qū)偏移SO在柱面n+2和n-2上將找到損壞(即損壞數(shù)據(jù)串子段)。
如果間隔相鄰柱面n-3和n+3有損壞并且包含損壞數(shù)據(jù)串子段,則在g列表中記錄這些損壞,并且以扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)檢查間隔相鄰柱面n-5和n+5(圖12操作42a6)。例如,在圖14中,由于劃痕44不與柱面n-3和n+3的任何部分重合,因此間隔相鄰柱面n-3和n+3無損壞。
然而,如果在柱面n-3和n+3上的確存在損壞(損壞數(shù)據(jù)串子段),則在g列表中記錄這些損壞,并且檢查并嘗試以扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)對間隔相鄰柱面n-5和n+5進行數(shù)據(jù)寫入和數(shù)據(jù)讀取。在圖14中,注意扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)下的柱面n-5和n+5的位置。
向間隔相鄰柱面(例如,柱面n-1和n+1,隨后是柱面n-3和n+3,再隨后是柱面n-5和n+5)寫入數(shù)據(jù)并從其讀取數(shù)據(jù)的操作表示圖14中的盤驅(qū)動器B的表面上的劃痕44的范圍。劃痕44在損壞數(shù)據(jù)串子段48的一側(cè)以扇區(qū)偏移SO從損壞數(shù)據(jù)串子段48延伸到柱面n+2和n+3之間的位置,并且在損壞數(shù)據(jù)串子段48的另一側(cè)以扇區(qū)偏移SO延伸到柱面n-2和n-3之間的位置。因此,以扇區(qū)偏移SO在柱面n、n+1、n+2、n-1和n-2上將找到損壞(即損壞數(shù)據(jù)串子段);然而,由于劃痕44沒有延伸到柱面n+3、n+5、n-3和n-5,因此以扇區(qū)偏移SO在柱面n+3、n+5、n-3和n-5上將找不到損壞數(shù)據(jù)串子段。當(dāng)在柱面n+3和n-3上找不到損壞時,我們將知道劃痕44在盤驅(qū)動器B上的范圍。因此,在下一個操作中,有必要回過頭來以扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)對被跳過的柱面進行檢查/數(shù)據(jù)寫入/數(shù)據(jù)讀取,在圖14中,被跳過的柱面是柱面n+2和n-2。
在圖12中,參照操作42a7、42a8和42a9。重復(fù)圖11中的操作42a2、圖11中的操作42a3以及圖12中的操作42a6最大次數(shù)M,其中M由用戶設(shè)置,或者直到到達圖12中的操作42a5。達到了次數(shù)M?如果是,則由于在驅(qū)動器的局部區(qū)域中存在太多損壞而拒絕原始盤驅(qū)動器。如果否,則返回到操作42a2,并且重復(fù)操作42a2、42a3和42a6。
在圖14中,如果在間隔相鄰柱面n-1和n+1、n-3和n+3、n-5和n+5、n-7和n+7等上連續(xù)找到損壞,則將在最大次數(shù)M內(nèi)繼續(xù)檢查其余間隔相鄰柱面。如果損壞繼續(xù)存在于其余間隔相鄰柱面上,則適配器24必須判定是否根據(jù)盤驅(qū)動器在其局部區(qū)域上存在太多損壞而應(yīng)該以備用驅(qū)動器更換盤驅(qū)動器。
相鄰區(qū)域可以局限于可疑盤驅(qū)動器的相同頭和表面,但是如果跨越盤組(disk stack)的機械沖擊是潛在故障機制,則它也可以推廣到針對相同柱面和扇區(qū)位置的其余頭。相鄰區(qū)域可以意味著鄰近于相同盤表面上的損壞地方,或者它可以意味著位于相同柱面扇區(qū)偏移位置的不同頭上的潛在損壞地方。觸發(fā)自修復(fù)的讀取或?qū)懭霌p壞一般而言可以是可恢復(fù)的或不可恢復(fù)的,但是如果IO性能受到自修復(fù)過程的影響,則可以限于不可恢復(fù)自修復(fù)。這些損壞可以是預(yù)設(shè)的或者是客戶可選擇的。雖然讀取損壞是自修復(fù)的主要觸發(fā)條件,但是也可以使用特定寫入損壞如伺服突發(fā)錯誤來觸發(fā)自修復(fù)軟件。
在一個優(yōu)選實施例中,檢查損壞周圍的相鄰區(qū)域涉及以扇區(qū)SO、SO+1字節(jié)和SO-1字節(jié)檢查奇數(shù)柱面n+1和n-1、n+3和n-3等直到找不到進一步的損壞(或者達到M次),此時,搜索被跳過的柱面n+2和n-2。檢查也可以在扇區(qū)位置SO、SO+1字節(jié)和SO-1字節(jié)使用偶數(shù)柱面n+2和n-2、n+4和n-4等來完成,然后是檢查被跳過的柱面n+3和n-3等??蛇x地,在不脫離本發(fā)明的精神和范圍的情況下,關(guān)于這些檢查,可以使用這些柱面的任何其他組合(例如,奇數(shù)或偶數(shù))。
雖然上文示出了本發(fā)明的多個示例性實施例,但是本領(lǐng)域的技術(shù)人員應(yīng)該清楚,在不脫離由所附權(quán)利要求限定的本發(fā)明范圍的情況下,可以對其進行各種變更和修改。
權(quán)利要求
1.一種可由機器讀取的程序存儲設(shè)備,有形地實施可由機器執(zhí)行的指令程序以執(zhí)行用于定位盤驅(qū)動器上的損壞并且重構(gòu)和遷移與這些損壞相關(guān)聯(lián)的數(shù)據(jù)的方法,所述方法包括響應(yīng)定位所述盤驅(qū)動器上的損壞,檢查所述盤驅(qū)動器上的所述損壞周圍的相鄰區(qū)域以判定在所述盤驅(qū)動器上是否存在附加損壞;響應(yīng)定位所述盤驅(qū)動器上的所述損壞,重構(gòu)與所述損壞相關(guān)聯(lián)的數(shù)據(jù),從而生成重構(gòu)數(shù)據(jù);以及存儲所述重構(gòu)數(shù)據(jù)。
2.如權(quán)利要求1所述的程序存儲設(shè)備,還包括響應(yīng)定位所述盤驅(qū)動器上的所述損壞周圍的所述相鄰區(qū)域中的所述附加損壞,重構(gòu)與所述附加損壞相關(guān)聯(lián)的數(shù)據(jù),從而生成另外重構(gòu)數(shù)據(jù);以及存儲所述另外重構(gòu)數(shù)據(jù)。
3.如權(quán)利要求2所述的程序存儲設(shè)備,其中,所述損壞位于所述盤驅(qū)動器的柱面n上的扇區(qū)偏移SO處,并且其中,檢查所述盤驅(qū)動器上的損壞周圍的相鄰區(qū)域以判定在所述盤驅(qū)動器上是否存在附加損壞,包括檢查盤驅(qū)動器的柱面n+1和n-1上的扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)。
4.如權(quán)利要求3所述的程序存儲設(shè)備,其中,檢查所述盤驅(qū)動器上的損壞周圍的相鄰區(qū)域以判定在所述盤驅(qū)動器上是否存在附加損壞,還包括響應(yīng)在與盤驅(qū)動器的柱面n+1和n-1上的扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)中的至少之一相對應(yīng)的一個或多個位置定位所述盤驅(qū)動器上的所述附加損壞,檢查柱面n+3和n-3上的扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)。
5.如權(quán)利要求4所述的程序存儲設(shè)備,其中,檢查所述盤驅(qū)動器上的損壞周圍的相鄰區(qū)域以判定在所述盤驅(qū)動器上是否存在附加損壞,還包括響應(yīng)在與柱面n+3和n-3上的所述扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)相對應(yīng)的一個或多個位置沒有定位所述盤驅(qū)動器上的所述附加損壞,檢查柱面n+2和n-2上的扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)。
6.如權(quán)利要求5所述的程序存儲設(shè)備,其中,檢查所述盤驅(qū)動器上的損壞周圍的相鄰區(qū)域以判定在所述盤驅(qū)動器上是否存在附加損壞,還包括響應(yīng)在與柱面n+3和n-3上的所述扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)中的至少之一相對應(yīng)的一個或多個位置定位所述盤驅(qū)動器上的所述附加損壞,檢查柱面n+5和n-5上的扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)。
7.如權(quán)利要求2所述的程序存儲設(shè)備,其中,在所述盤驅(qū)動器上存在特定數(shù)目的所述附加損壞,并且其中,存儲所述重構(gòu)數(shù)據(jù)和存儲所述另外重構(gòu)數(shù)據(jù)均包括當(dāng)所述特定數(shù)目的所述附加損壞大于或等于預(yù)定閾值時,在另一個備用盤驅(qū)動器上存儲所述重構(gòu)數(shù)據(jù)和所述另外重構(gòu)數(shù)據(jù)。
8.一種響應(yīng)定位盤驅(qū)動器上的損壞而在所述盤驅(qū)動器中自修復(fù)的方法,包括響應(yīng)定位所述盤驅(qū)動器上的所述損壞,檢查所述盤驅(qū)動器上的所述損壞周圍的相鄰區(qū)域以判定在所述盤驅(qū)動器上是否存在附加損壞;重構(gòu)與所述損壞相關(guān)聯(lián)的數(shù)據(jù),從而生成重構(gòu)數(shù)據(jù);以及存儲所述重構(gòu)數(shù)據(jù)。
9.如權(quán)利要求8所述的方法,還包括響應(yīng)定位所述盤驅(qū)動器上的所述損壞周圍的所述相鄰區(qū)域中的所述附加損壞,重構(gòu)所述附加損壞,從而生成另外重構(gòu)數(shù)據(jù);以及存儲所述另外重構(gòu)數(shù)據(jù)。
10.如權(quán)利要求9所述的方法,其中,所述損壞位于所述盤驅(qū)動器的柱面n上的扇區(qū)偏移SO處,并且其中,檢查所述盤驅(qū)動器上的所述損壞周圍的相鄰區(qū)域以判定在所述盤驅(qū)動器上是否存在附加損壞,包括檢查盤驅(qū)動器的柱面n+1和n-1上的扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)。
11.如權(quán)利要求10所述的方法,其中,檢查所述盤驅(qū)動器上的所述損壞周圍的相鄰區(qū)域以判定在所述盤驅(qū)動器上是否存在附加損壞,還包括響應(yīng)在與盤驅(qū)動器的柱面n+1和n-1上的扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)中的至少之一相對應(yīng)的一個或多個位置定位所述盤驅(qū)動器上的所述附加損壞,檢查柱面n+3和n-3上的扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)。
12.如權(quán)利要求11所述的方法,其中,檢查所述盤驅(qū)動器上的所述損壞周圍的相鄰區(qū)域以判定在所述盤驅(qū)動器上是否存在附加損壞,還包括響應(yīng)在與盤驅(qū)動器的柱面n+3和n-3上的所述扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)相對應(yīng)的一個或多個位置沒有定位所述盤驅(qū)動器上的所述附加損壞,檢查柱面n+2和n-2上的扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)。
13.如權(quán)利要求12所述的方法,其中,檢查所述盤驅(qū)動器上的所述損壞周圍的相鄰區(qū)域以判定在所述盤驅(qū)動器上是否存在附加損壞,還包括響應(yīng)在與盤驅(qū)動器的柱面n+3和n-3上的所述扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)中的至少之一相對應(yīng)的一個或多個位置定位所述盤驅(qū)動器上的所述附加損壞,檢查柱面n+5和n-5上的扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)。
14.如權(quán)利要求8所述的方法,其中,在所述盤驅(qū)動器上存在特定數(shù)目的所述附加損壞,并且其中,存儲所述重構(gòu)數(shù)據(jù)包括如果所述特定數(shù)目的所述附加損壞大于或等于預(yù)定閾值,則在另一個備用盤驅(qū)動器上存儲所述重構(gòu)數(shù)據(jù)。
15.如權(quán)利要求9所述的方法,其中,在所述盤驅(qū)動器上存在特定數(shù)目的所述附加損壞,并且其中,存儲所述另外重構(gòu)數(shù)據(jù)包括如果所述特定數(shù)目的所述附加損壞大于或等于預(yù)定閾值,則在另一個備用盤驅(qū)動器上存儲所述另外重構(gòu)數(shù)據(jù)。
16.一種適用于存儲和檢索數(shù)據(jù)的存儲系統(tǒng),包括多個盤驅(qū)動器;存儲控制器,工作時連接到所述多個盤驅(qū)動器,其中,存儲控制器編程成執(zhí)行定位存在于所述多個所述盤驅(qū)動器中的一個盤驅(qū)動器上的損壞并且重構(gòu)與所述損壞相關(guān)聯(lián)的數(shù)據(jù)的操作,這些操作包括,響應(yīng)定位所述盤驅(qū)動器上的損壞,檢查所述盤驅(qū)動器上的所述損壞周圍的相鄰區(qū)域以判定在所述盤驅(qū)動器上是否存在附加損壞;響應(yīng)定位所述盤驅(qū)動器上的所述損壞,重構(gòu)與所述損壞相關(guān)聯(lián)的數(shù)據(jù),從而生成重構(gòu)數(shù)據(jù);以及存儲所述重構(gòu)數(shù)據(jù)。
17.如權(quán)利要求16所述的系統(tǒng),其中,這些操作還包括響應(yīng)定位所述盤驅(qū)動器上的所述損壞周圍的所述相鄰區(qū)域中的所述附加損壞,重構(gòu)與所述附加損壞相關(guān)聯(lián)的數(shù)據(jù),從而生成另外重構(gòu)數(shù)據(jù);以及存儲所述另外重構(gòu)數(shù)據(jù)。
18.如權(quán)利要求17所述的系統(tǒng),其中,所述損壞位于所述盤驅(qū)動器的柱面n上的扇區(qū)偏移SO處,并且其中,檢查所述盤驅(qū)動器上的損壞周圍的相鄰區(qū)域以判定在所述盤驅(qū)動器上是否存在附加損壞,包括檢查盤驅(qū)動器的柱面n+1和n-1上的扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)。
19.如權(quán)利要求18所述的系統(tǒng),其中,檢查所述盤驅(qū)動器上的損壞周圍的相鄰區(qū)域以判定在所述盤驅(qū)動器上是否存在附加損壞,還包括響應(yīng)在與盤驅(qū)動器的柱面n+1和n-1上的扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)中的至少之一相對應(yīng)的一個或多個位置定位所述盤驅(qū)動器上的所述附加損壞,檢查柱面n+3和n-3上的扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)。
20.如權(quán)利要求19所述的系統(tǒng),其中,檢查所述盤驅(qū)動器上的損壞周圍的相鄰區(qū)域以判定在所述盤驅(qū)動器上是否存在附加損壞,還包括響應(yīng)在與柱面n+3和n-3上的所述扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)相對應(yīng)的一個或多個位置沒有定位所述盤驅(qū)動器上的所述附加損壞,檢查柱面n+2和n-2上的扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié);以及響應(yīng)在與柱面n+3和n-3上的所述扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)中的至少之一相對應(yīng)的一個或多個位置定位所述盤驅(qū)動器上的所述附加損壞,檢查柱面n+5和n-5上的扇區(qū)偏移SO、SO+1字節(jié)和SO-1字節(jié)。
21.一種可由機器讀取的程序存儲設(shè)備,有形地實施可由機器執(zhí)行的指令程序以執(zhí)行用于定位存儲設(shè)備上的損壞并且重構(gòu)和遷移與這些損壞相關(guān)聯(lián)的數(shù)據(jù)的方法,所述方法包括檢查所述存儲設(shè)備上的損壞周圍的相鄰區(qū)域以判定是否存在附加損壞;重構(gòu)與所述損壞相關(guān)聯(lián)的數(shù)據(jù),從而生成重構(gòu)數(shù)據(jù);以及存儲所述重構(gòu)數(shù)據(jù)。
全文摘要
一種RAID陣列中的自修復(fù)系統(tǒng),降低因盤驅(qū)動器上的增長介質(zhì)損壞而導(dǎo)致丟失盤驅(qū)動器上的數(shù)據(jù)的風(fēng)險。增長介質(zhì)損壞包括盤驅(qū)動器上的徑向和螺旋形劃痕。當(dāng)RAID陣列的盤驅(qū)動器上的第一損壞被定位時,自修復(fù)系統(tǒng)檢查盤驅(qū)動器上的第一損壞周圍的相鄰區(qū)域,以便立即定位存在于盤驅(qū)動器上的第一損壞周圍的相鄰區(qū)域中的任何附加損壞。自修復(fù)系統(tǒng)使用奇偶校驗來重構(gòu)與第一損壞相關(guān)聯(lián)的數(shù)據(jù),然后使用奇偶校驗來重構(gòu)與任何附加損壞相關(guān)聯(lián)的數(shù)據(jù)。這可以在背景中完成以允許主機不受阻礙地訪問客戶數(shù)據(jù)。這樣,自修復(fù)系統(tǒng)可以消除當(dāng)隨后從RAID陣列讀取數(shù)據(jù)時的潛在單故障點。
文檔編號G06F3/06GK1551202SQ20041003971
公開日2004年12月1日 申請日期2004年3月16日 優(yōu)先權(quán)日2003年5月6日
發(fā)明者阿米內(nèi)·哈吉, 威廉·約翰·杜里卡, 約翰 杜里卡, 阿米內(nèi) 哈吉 申請人:國際商業(yè)機器公司