本發(fā)明涉及數(shù)據(jù)存儲(chǔ)的管理,特別地包括獨(dú)立磁盤冗余陣列的使用。
背景技術(shù):
在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,對(duì)于數(shù)據(jù)可靠性和輸入/輸出性能的需求已經(jīng)導(dǎo)致在多個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備中間劃分和復(fù)制數(shù)據(jù)的一系列數(shù)據(jù)存儲(chǔ)方案的開發(fā)。這樣的存儲(chǔ)方案通常被稱為獨(dú)立磁盤冗余陣列(RAID)。RAID系統(tǒng)通過(guò)使用專用硬件或軟件將諸如磁盤驅(qū)動(dòng)器的物理數(shù)據(jù)存儲(chǔ)設(shè)備組合為單個(gè)物理單元。硬件方案將通常被設(shè)計(jì)為將自身呈現(xiàn)給所附接的系統(tǒng)作為單個(gè)邏輯設(shè)備或者驅(qū)動(dòng)器,使得操作系統(tǒng)不知道底層陣列的技術(shù)工作。備選地,軟件方案可以實(shí)現(xiàn)在操作系統(tǒng)中,并且將類似地將RAID驅(qū)動(dòng)器呈現(xiàn)給應(yīng)用程序作為單個(gè)設(shè)備或者驅(qū)動(dòng)器。驅(qū)動(dòng)器的最小數(shù)目和數(shù)據(jù)可靠性的水平取決于被實(shí)現(xiàn)的RAID方案的類型。
最初,存在五個(gè)RAID級(jí)別,其中,不同的RAID級(jí)別使用被稱為鏡像、加條帶(striping)和錯(cuò)誤糾正的一個(gè)或多個(gè)技術(shù)。鏡像包含將數(shù)據(jù)拷貝到超過(guò)一個(gè)磁盤,加條帶涉及跨越超過(guò)一個(gè)磁盤散布數(shù)據(jù),并且錯(cuò)誤糾正涉及存儲(chǔ)冗余數(shù)據(jù)(奇偶校驗(yàn))以允許問(wèn)題被檢測(cè)并且可能固定。
RAID 0在沒(méi)有奇偶校驗(yàn)的情況下跨越兩個(gè)或兩個(gè)以上磁盤均勻地散布數(shù)據(jù)。因此,可以說(shuō),RAID 0在沒(méi)有任何冗余的情況下提供加條帶。RAID 0適于其中存在很少或者沒(méi)有關(guān)于數(shù)據(jù)完整性的關(guān)心的高性能。
RAID 1陣列提供兩個(gè)或兩個(gè)以上磁盤上的數(shù)據(jù)的完整并且精確 的拷貝。因此,RAID 1包括完整的冗余或者鏡像。RAID 1的性能是好的,并且可以可選地包括使得磁盤的不同區(qū)段的獨(dú)立讀取能夠進(jìn)一步增加速度的雙工。由于伙伴磁盤中所維持的完整復(fù)制,因而RAID 1的數(shù)據(jù)完整性也是好的。
一般而言,RAID 3利用專用奇偶校驗(yàn)磁盤提供字節(jié)級(jí)加條帶,RAID 4利用專用奇偶校驗(yàn)磁盤提供塊級(jí)加條帶,并且RAID 5利用遍及所有成員磁盤分布的奇偶校驗(yàn)數(shù)據(jù)提供塊級(jí)加條帶。RAID 5已經(jīng)實(shí)現(xiàn)由于其冗余的低成本的流行度。通常,利用用于奇偶校驗(yàn)計(jì)算的硬件支持實(shí)現(xiàn)RAID 5。針對(duì)完整RAID 5配置一般地要求最少三個(gè)磁盤。RAID 5提供針對(duì)大多數(shù)服務(wù)器工作量的價(jià)格與性能之間的平衡,并且通過(guò)實(shí)現(xiàn)被稱為單個(gè)方程單個(gè)未知數(shù)(single equation single unknown)的技術(shù)提供單驅(qū)動(dòng)故障容限。校驗(yàn)和信息均勻地分布在所有驅(qū)動(dòng)器之上,并且校驗(yàn)和更新操作在陣列內(nèi)均勻地平衡。
在讀操作期間,通常未讀取奇偶校驗(yàn)塊,這是因?yàn)檫@將是不必要的開銷并且將降低性能。然而,當(dāng)數(shù)據(jù)扇區(qū)的讀取導(dǎo)致CRC錯(cuò)誤時(shí)(每個(gè)扇區(qū)也由CRC保護(hù)),讀取奇偶校驗(yàn)塊。在這種情況下,條帶中的剩余數(shù)據(jù)塊中的每個(gè)數(shù)據(jù)塊內(nèi)與條帶中的奇偶校驗(yàn)塊內(nèi)的相同相對(duì)位置中的扇區(qū)被用于重建錯(cuò)誤扇區(qū)。因此,CRC錯(cuò)誤對(duì)主計(jì)算機(jī)是隱藏的。同樣地,如果磁盤在陣列中故障,則來(lái)自尚存磁盤的奇偶校驗(yàn)塊與來(lái)自尚存磁盤的數(shù)據(jù)塊數(shù)學(xué)地組合以重建“在飛行中”故障的驅(qū)動(dòng)器上的數(shù)據(jù)。然而,在其中存在每條帶的單個(gè)奇偶校驗(yàn)塊的RAID 5中,第二個(gè)驅(qū)動(dòng)器的故障導(dǎo)致全部數(shù)據(jù)丟失。RAID級(jí)別的前述討論旨在提供包括在不同RAID級(jí)別中的特征的一般示例,并且不旨在是RAID級(jí)別的綜合性列表或者描述。
不管RAID級(jí)別如何,已經(jīng)在機(jī)械硬盤驅(qū)動(dòng)器的使用周圍已經(jīng)建立RAID棧。然而,閃速數(shù)據(jù)存儲(chǔ)設(shè)備不斷增長(zhǎng)地使用在各種應(yīng)用中。閃速數(shù)據(jù)存儲(chǔ)設(shè)備更快并且可以提供利用機(jī)械硬盤驅(qū)動(dòng)器不可能實(shí)現(xiàn)的響應(yīng)時(shí)間。然而,閃速數(shù)據(jù)存儲(chǔ)設(shè)備以可能導(dǎo)致操作問(wèn)題的方式與機(jī)械硬盤驅(qū)動(dòng)器不同地操作。例如,閃速數(shù)據(jù)存儲(chǔ)設(shè)備具 有對(duì)設(shè)備可以寫入的次數(shù)的非??蓽y(cè)量的限制。為了允許用戶仍然訪問(wèn)其數(shù)據(jù),閃速數(shù)據(jù)存儲(chǔ)設(shè)備將進(jìn)入只讀模式,使得即使系統(tǒng)不再能夠?qū)?shù)據(jù)寫入到設(shè)備,計(jì)算機(jī)系統(tǒng)也仍然可以從設(shè)備讀取數(shù)據(jù)。這在RAID陣列中是有問(wèn)題的,因?yàn)镽AID控制器將在所嘗試的寫入失敗時(shí)使驅(qū)動(dòng)器廢止。而且,這樣的寫入可以發(fā)生在這樣的情況中,諸如在用戶甚至將不試圖訪問(wèn)數(shù)據(jù)時(shí)清洗的后臺(tái)數(shù)據(jù)的情況。此外,啟動(dòng)操作系統(tǒng)以便嘗試救援來(lái)自設(shè)備的數(shù)據(jù)的動(dòng)作可能觸發(fā)將使得設(shè)備故障并且變得被標(biāo)記為廢止的寫入。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的一個(gè)實(shí)施例提供了一種控制獨(dú)立磁盤冗余陣列(RAID)的方法。方法包括計(jì)算機(jī)系統(tǒng)將數(shù)據(jù)寫入到獨(dú)立磁盤冗余陣列并且從獨(dú)立磁盤冗余陣列讀取數(shù)據(jù),其中獨(dú)立磁盤冗余陣列包括控制器和多個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備,并且其中多個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備包括閃速數(shù)據(jù)存儲(chǔ)設(shè)備。該方法還包括控制器檢測(cè)閃速數(shù)據(jù)存儲(chǔ)設(shè)備是否在只讀模式中,并且控制器響應(yīng)于檢測(cè)閃速數(shù)據(jù)存儲(chǔ)設(shè)備在只讀模式中,阻止將數(shù)據(jù)寫入到閃速數(shù)據(jù)存儲(chǔ)設(shè)備的嘗試。
附圖說(shuō)明
圖1根據(jù)本發(fā)明的一個(gè)實(shí)施例的包括閃速數(shù)據(jù)存儲(chǔ)設(shè)備的獨(dú)立磁盤冗余陣列(RAID)的示圖。
圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的包括只讀模式中的閃速數(shù)據(jù)存儲(chǔ)設(shè)備的獨(dú)立磁盤冗余陣列(RAID)的示圖。
圖3是根據(jù)本發(fā)明的一個(gè)實(shí)施例的包括具有更新的數(shù)據(jù)的替換閃速數(shù)據(jù)存儲(chǔ)設(shè)備的獨(dú)立磁盤冗余陣列(RAID)的示圖。
圖4A-B是處理涉及獨(dú)立磁盤冗余陣列(RAID)中的閃速數(shù)據(jù)存儲(chǔ)設(shè)備的讀寫操作的方法的流程圖。
具體實(shí)施方式
本發(fā)明的一個(gè)實(shí)施例提供了一種控制獨(dú)立磁盤冗余陣列(RAID)的方法。該方法包括計(jì)算機(jī)系統(tǒng)將數(shù)據(jù)寫入到獨(dú)立磁盤冗余陣列并且從獨(dú)立磁盤冗余陣列讀取數(shù)據(jù),其中獨(dú)立磁盤冗余陣列包括控制器和多個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備,并且其中多個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備包括閃速數(shù)據(jù)存儲(chǔ)設(shè)備。該方法還包括控制器檢測(cè)閃速數(shù)據(jù)存儲(chǔ)設(shè)備是否在只讀模式中,并且控制器響應(yīng)于檢測(cè)閃速數(shù)據(jù)存儲(chǔ)設(shè)備在只讀模式中,阻止將數(shù)據(jù)寫入到閃速數(shù)據(jù)存儲(chǔ)設(shè)備的嘗試。然而,作為在只讀模式中的結(jié)果,閃速數(shù)據(jù)存儲(chǔ)設(shè)備被標(biāo)記為廢止的,并且RAID陣列能夠繼續(xù)跨越多個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備存儲(chǔ)數(shù)據(jù)。閃速數(shù)據(jù)存儲(chǔ)設(shè)備可以包括存儲(chǔ)閃速存儲(chǔ)設(shè)備是否在只讀模式中的指示的寄存器集??蛇x地,多個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備可以包括至少一個(gè)硬盤驅(qū)動(dòng)器。
在一個(gè)選項(xiàng)中,控制器可以響應(yīng)于閃速數(shù)據(jù)存儲(chǔ)設(shè)備在只讀模式中,將旨在針對(duì)閃速數(shù)據(jù)存儲(chǔ)設(shè)備的寫入重定向到多個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)的另一個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備上的空的數(shù)據(jù)存儲(chǔ)空間。當(dāng)數(shù)據(jù)被寫入到空的數(shù)據(jù)存儲(chǔ)空間時(shí),數(shù)據(jù)與寫原始預(yù)期或者引導(dǎo)到的閃速數(shù)據(jù)存儲(chǔ)設(shè)備的次條帶相關(guān)聯(lián)。
在類似選項(xiàng)中,控制器可以響應(yīng)于閃速數(shù)據(jù)存儲(chǔ)設(shè)備在只讀模式中,將旨在針對(duì)數(shù)據(jù)存儲(chǔ)設(shè)備的寫入重定向到對(duì)控制器可訪問(wèn)的高速緩存存儲(chǔ)器。高速緩存存儲(chǔ)器可以與控制器直接附接或相關(guān)聯(lián)或者高速緩存存儲(chǔ)器可以是閃速數(shù)據(jù)存儲(chǔ)設(shè)備的一部分。
在又一選項(xiàng)中,控制器可以修改主條帶的奇偶校驗(yàn)條帶,如若對(duì)閃速數(shù)據(jù)存儲(chǔ)設(shè)備的寫已經(jīng)發(fā)生,并且控制器存儲(chǔ)其中在閃速數(shù)據(jù)存儲(chǔ)設(shè)備在只讀模式中時(shí)由于旨在針對(duì)閃速數(shù)據(jù)存儲(chǔ)設(shè)備的寫入而修改的奇偶校驗(yàn)條帶的每個(gè)主條帶的列表。根據(jù)該選項(xiàng),響應(yīng)于控制器確定在閃速數(shù)據(jù)存儲(chǔ)設(shè)備在只讀模式中時(shí)數(shù)據(jù)尚未修改,可以直接從只讀模式中的閃速數(shù)據(jù)存儲(chǔ)設(shè)備讀取數(shù)據(jù)。例如,控制器可以查看其中修改奇偶校驗(yàn)條帶的主條帶的列表,并且如果待從閃速數(shù)據(jù)存儲(chǔ)設(shè)備讀取的數(shù)據(jù)未定位在那些主條帶中的任一個(gè)主條帶中,那么可以在沒(méi)有任何附加開銷的情況下,直接從閃速數(shù)據(jù)存儲(chǔ) 設(shè)備將數(shù)據(jù)讀取為正常的。然而,響應(yīng)于控制器確定在閃速數(shù)據(jù)存儲(chǔ)設(shè)備在只讀模式中時(shí)修改了數(shù)據(jù),控制器可以使用相同主條帶中的、被存儲(chǔ)在其他數(shù)據(jù)存儲(chǔ)設(shè)備上的經(jīng)修改的奇偶校驗(yàn)條帶和數(shù)據(jù)重新生成針對(duì)閃速數(shù)據(jù)存儲(chǔ)設(shè)備的相關(guān)聯(lián)的次條帶。換句話說(shuō),如果控制器已經(jīng)將主條帶列出為已經(jīng)修改,那么實(shí)際上存儲(chǔ)在閃速數(shù)據(jù)存儲(chǔ)設(shè)備的相關(guān)聯(lián)的次條帶上的數(shù)據(jù)被認(rèn)為是失效或者壞的。但是由于修改奇偶校驗(yàn)條帶以反映旨在寫到閃速數(shù)據(jù)存儲(chǔ)設(shè)備的該次條帶的數(shù)據(jù),可以在該次條帶中引導(dǎo)的讀取的滿足中重新生成旨在寫入的數(shù)據(jù)。雖然數(shù)據(jù)的重新生成要求附加的計(jì)算或者開銷,但是即使閃速數(shù)據(jù)存儲(chǔ)設(shè)備在只讀模式中,前述操作也允許獨(dú)立磁盤冗余陣列在不丟失數(shù)據(jù)的情況下繼續(xù)執(zhí)行讀寫功能。
根據(jù)本發(fā)明的另一實(shí)施例,方法還可以包括通過(guò)讀取被存儲(chǔ)在閃速數(shù)據(jù)存儲(chǔ)設(shè)備上的未修改數(shù)據(jù)和被存儲(chǔ)在設(shè)備高速緩存、存儲(chǔ)控制器高速緩存、陣列內(nèi)的另一個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備上的經(jīng)修改的數(shù)據(jù)或者使用奇偶校驗(yàn)重新生成數(shù)據(jù),來(lái)創(chuàng)建一個(gè)或多個(gè)文件的備份。實(shí)際上,可以從設(shè)備高速緩存、存儲(chǔ)控制器高速緩存、陣列內(nèi)的另一個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備的任何組合或者使用奇偶校驗(yàn)重新生成數(shù)據(jù),來(lái)讀取經(jīng)修改的數(shù)據(jù)。
在又一實(shí)施例中,方法可以包括通過(guò)讀取被存儲(chǔ)在閃速數(shù)據(jù)存儲(chǔ)設(shè)備上的未修改的數(shù)據(jù)和被存儲(chǔ)在設(shè)備高速緩存、存儲(chǔ)控制器高速緩存、陣列內(nèi)的另一個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備上的經(jīng)修改的數(shù)據(jù)或者使用奇偶校驗(yàn)重新生成所述數(shù)據(jù),來(lái)在第二數(shù)據(jù)存儲(chǔ)設(shè)備上創(chuàng)建將整個(gè)閃速數(shù)據(jù)存儲(chǔ)設(shè)備的拷貝。實(shí)際上,可以從設(shè)備高速緩存、存儲(chǔ)控制器高速緩存、陣列內(nèi)的另一數(shù)據(jù)存儲(chǔ)設(shè)備的任何組合或者使用奇偶校驗(yàn)重新生成數(shù)據(jù),來(lái)讀取經(jīng)修改的數(shù)據(jù)。可選地,可以利用第二數(shù)據(jù)存儲(chǔ)設(shè)備替換閃速數(shù)據(jù)存儲(chǔ)設(shè)備。當(dāng)?shù)诙?shù)據(jù)存儲(chǔ)設(shè)備已經(jīng)替換閃速數(shù)據(jù)存儲(chǔ)設(shè)備,那么可以刪除存儲(chǔ)與閃速數(shù)據(jù)存儲(chǔ)設(shè)備相關(guān)聯(lián)的數(shù)據(jù)的任何設(shè)備高速緩存、存儲(chǔ)控制器高速緩存或者陣列內(nèi)的數(shù)據(jù)存儲(chǔ)設(shè)備。應(yīng)當(dāng)理解,第二數(shù)據(jù)存儲(chǔ)設(shè)備還可以是第二閃速 數(shù)據(jù)存儲(chǔ)設(shè)備或者其他類型的數(shù)據(jù)存儲(chǔ)裝置,諸如硬盤驅(qū)動(dòng)器。
在一個(gè)選項(xiàng)中,控制器響應(yīng)于在寫入到閃速數(shù)據(jù)存儲(chǔ)設(shè)備時(shí)的寫入錯(cuò)誤,檢測(cè)閃速數(shù)據(jù)存儲(chǔ)設(shè)備是否在只讀模式中。當(dāng)控制器在任何寫入嘗試之前可以檢測(cè)閃速數(shù)據(jù)存儲(chǔ)設(shè)備是否在只讀模式中時(shí),等待寫入錯(cuò)誤阻止在閃速數(shù)據(jù)存儲(chǔ)設(shè)備的每次寫入之前執(zhí)行該檢測(cè)的開銷。在另一選項(xiàng)中,控制器可以響應(yīng)于在寫入到閃速數(shù)據(jù)存儲(chǔ)設(shè)備的寫入錯(cuò)誤并且檢測(cè)閃速數(shù)據(jù)存儲(chǔ)設(shè)備不在只讀模式中,對(duì)在寫入到閃速數(shù)據(jù)存儲(chǔ)設(shè)備時(shí)所發(fā)生的寫入錯(cuò)誤的數(shù)目進(jìn)行計(jì)數(shù)。隨后,控制器可以響應(yīng)于寫入錯(cuò)誤的數(shù)目超過(guò)寫入錯(cuò)誤的設(shè)定點(diǎn)數(shù)目,將閃速數(shù)據(jù)存儲(chǔ)設(shè)備標(biāo)記為廢止的。
在另一選項(xiàng)中,方法還可以包括響應(yīng)于閃速數(shù)據(jù)存儲(chǔ)設(shè)備在只讀模式中,關(guān)閉計(jì)算機(jī)系統(tǒng)的、將涉及將數(shù)據(jù)寫入到閃速數(shù)據(jù)存儲(chǔ)設(shè)備的后臺(tái)任務(wù)。關(guān)閉后臺(tái)任務(wù)將具有減少將需要被寫入到陣列的其他設(shè)備上的空的空間、被寫入到高速緩存或者被反映在奇偶校驗(yàn)的修改中的數(shù)據(jù)量的效果。
圖1根據(jù)本發(fā)明的一個(gè)實(shí)施例的包括閃速數(shù)據(jù)存儲(chǔ)設(shè)備的獨(dú)立磁盤冗余陣列(RAID)10的示圖。獨(dú)立磁盤冗余陣列10包括控制器20和形成陣列的多個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備30??刂破?0連接用于與計(jì)算機(jī)系統(tǒng)12通信并且還連接用于與陣列中的數(shù)據(jù)存儲(chǔ)設(shè)備30中的每個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備通信。優(yōu)選地,計(jì)算機(jī)系統(tǒng)12將獨(dú)立磁盤冗余陣列10視為單個(gè)邏輯實(shí)體并且將讀和寫指令發(fā)送給控制器20。負(fù)責(zé)管理如何將數(shù)據(jù)存儲(chǔ)在跨越陣列的主條帶中的是控制器20。通過(guò)可用的數(shù)據(jù)存儲(chǔ)設(shè)備30的數(shù)目和所實(shí)現(xiàn)的RAID級(jí)別來(lái)影響控制器的精確操作和陣列的配置。圖1中所示的獨(dú)立磁盤冗余陣列10的非限制性示例包括操作為RAID級(jí)別5的四個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備30,其利用分布的奇偶校驗(yàn)表征塊級(jí)加條帶。例如,在主條帶1中,數(shù)據(jù)A被存儲(chǔ)在數(shù)據(jù)存儲(chǔ)設(shè)備1上的次條帶中,數(shù)據(jù)B被存儲(chǔ)在數(shù)據(jù)存儲(chǔ)設(shè)備2上的次條帶中,數(shù)據(jù)C被存儲(chǔ)在數(shù)據(jù)存儲(chǔ)設(shè)備3上的次條帶中,并且奇偶校驗(yàn)P1(ABC)存儲(chǔ)在數(shù)據(jù)存儲(chǔ)設(shè)備4上的次條帶中。使 用第一主條帶中的數(shù)據(jù)A、數(shù)據(jù)B和數(shù)據(jù)C作為輸入、使用預(yù)先確定的奇偶校驗(yàn)計(jì)算來(lái)計(jì)算奇偶校驗(yàn)P1(ABC)。奇偶校驗(yàn)計(jì)算的一個(gè)示例是跨條帶的數(shù)據(jù)的異OR(XOR)。其他RAID級(jí)別還可以包含本發(fā)明的特征。
如所示,數(shù)據(jù)存儲(chǔ)設(shè)備30之一是閃速數(shù)據(jù)存儲(chǔ)設(shè)備40。閃速數(shù)據(jù)存儲(chǔ)設(shè)備40可以包括指示閃速數(shù)據(jù)存儲(chǔ)設(shè)備40是在正常模式還是在只讀模式中的寄存器集42。在正常模式中,控制器20可以讀取和寫入設(shè)備上的任何地方的數(shù)據(jù)。在只讀模式中,控制器20可以仍然讀取設(shè)備上的任何地方的數(shù)據(jù),但是將數(shù)據(jù)寫入到設(shè)備的任何嘗試將導(dǎo)致寫入錯(cuò)誤。在優(yōu)選的實(shí)施方式中,控制器20讀取寄存器42并且將設(shè)備模式的指示存儲(chǔ)在與控制器20相關(guān)聯(lián)的存儲(chǔ)器中。如所示,控制器20存儲(chǔ)指示閃速數(shù)據(jù)存儲(chǔ)設(shè)備40當(dāng)前在正常模式/狀態(tài)、只讀模式/狀態(tài)還是廢止?fàn)顟B(tài)中的表22。還示出了控制器20,其存儲(chǔ)列出自從閃速數(shù)據(jù)存儲(chǔ)設(shè)備40進(jìn)入只讀模式以來(lái)已經(jīng)修改閃速數(shù)據(jù)存儲(chǔ)設(shè)備40的那些次條帶的第二表24。應(yīng)當(dāng)認(rèn)識(shí)到,在只讀模式中的閃速數(shù)據(jù)存儲(chǔ)設(shè)備的上下文中,術(shù)語(yǔ)“經(jīng)修改的”意指閃速數(shù)據(jù)存儲(chǔ)設(shè)備上的數(shù)據(jù)是失效或者壞的。根據(jù)各種實(shí)施例,針對(duì)次條帶的“經(jīng)修改的”數(shù)據(jù)可以存儲(chǔ)在其他數(shù)據(jù)存儲(chǔ)設(shè)備30、設(shè)備高速緩存存儲(chǔ)器44、控制器高速緩存存儲(chǔ)器26之一上的空的空間中或者通過(guò)奇偶校驗(yàn)的重新計(jì)算,如本文所描述的。在數(shù)據(jù)存儲(chǔ)在其他數(shù)據(jù)存儲(chǔ)設(shè)備、設(shè)備高速緩存存儲(chǔ)器或者控制器高速緩存存儲(chǔ)器之一上的情況下,控制器將數(shù)據(jù)的位置和相關(guān)聯(lián)的次條帶的標(biāo)識(shí)存儲(chǔ)在存儲(chǔ)器映射26中。雖然其他數(shù)據(jù)存儲(chǔ)設(shè)備30(即,設(shè)備2、設(shè)備3和設(shè)備4)可以是硬盤驅(qū)動(dòng)器或者其他類型的數(shù)據(jù)存儲(chǔ),但是本發(fā)明涵蓋其中陣列10中的多個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備30全部是閃速數(shù)據(jù)存儲(chǔ)設(shè)備的實(shí)施例。
圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的包括只讀模式中的閃速數(shù)據(jù)存儲(chǔ)設(shè)備40的獨(dú)立磁盤冗余陣列(RAID)10的示圖。如所示,閃速數(shù)據(jù)存儲(chǔ)設(shè)備40已經(jīng)改變其狀態(tài)寄存器集42以指示其現(xiàn)在在只 讀模式中??刂破?0已經(jīng)讀取狀態(tài)寄存器集42并且存儲(chǔ)具有閃速數(shù)據(jù)存儲(chǔ)設(shè)備在只讀臨界狀態(tài)中的指示的表22?!爸蛔x臨界狀態(tài)”指示閃速存儲(chǔ)器設(shè)備在只讀模式中并且控制器將采取步驟以對(duì)陣列10繼續(xù)讀取和寫入數(shù)據(jù),而沒(méi)有實(shí)際上將數(shù)據(jù)寫入到閃速數(shù)據(jù)存儲(chǔ)設(shè)備40。
在圖2的示例中,控制器20需要將數(shù)據(jù)存儲(chǔ)在主條帶3中的次條帶G。然而,由于閃速數(shù)據(jù)存儲(chǔ)設(shè)備40在只讀臨界狀態(tài)中,因而控制器20避免將數(shù)據(jù)寫入到閃速數(shù)據(jù)存儲(chǔ)設(shè)備40。相反,控制器20可以將數(shù)據(jù)存儲(chǔ)在其他數(shù)據(jù)存儲(chǔ)設(shè)備30、設(shè)備高速緩存存儲(chǔ)器44、控制器高速緩存存儲(chǔ)器26之一上的空的空間32中或者通過(guò)奇偶校驗(yàn)P3(GHI)到P3(G'H'I')的計(jì)算,如本文所描述的。當(dāng)將數(shù)據(jù)存儲(chǔ)到另一數(shù)據(jù)存儲(chǔ)設(shè)備或者高速緩存存儲(chǔ)器時(shí),控制器20將該數(shù)據(jù)映射到閃速數(shù)據(jù)存儲(chǔ)設(shè)備的預(yù)期的次條帶G,使得在次條帶G處引導(dǎo)的任何后續(xù)讀指令將滿足來(lái)自其他數(shù)據(jù)存儲(chǔ)設(shè)備或者高速緩存存儲(chǔ)器的相關(guān)部分的數(shù)據(jù)。當(dāng)使用奇偶校驗(yàn)修改或者重新計(jì)算時(shí),其他數(shù)據(jù)存儲(chǔ)設(shè)備30(即,設(shè)備3和設(shè)備4)上的非奇偶校驗(yàn)次條帶寫入正常,并且使用設(shè)備3上的當(dāng)前數(shù)據(jù)H'、設(shè)備4上的當(dāng)前數(shù)據(jù)I'和旨在寫在次條帶G之上的數(shù)據(jù)(G')來(lái)計(jì)算奇偶校驗(yàn)次條帶(即,設(shè)備2)。在P3(G'H'I')已經(jīng)被計(jì)算并且存儲(chǔ)在設(shè)備2中之后,那么控制器可以清除旨在寫到次條帶G的數(shù)據(jù)G'的其存儲(chǔ)器。
注意,在主條帶4中,閃速數(shù)據(jù)存儲(chǔ)設(shè)備40上的次條帶存儲(chǔ)奇偶校驗(yàn)P4(JKL)。在其他數(shù)據(jù)存儲(chǔ)設(shè)備之一將發(fā)生故障的情況下,控制器20可以仍然讀取該奇偶校驗(yàn)P4(JKL)以便重建故障的設(shè)備。如果修改次條帶J、K或者L中的任一個(gè)次條帶中的數(shù)據(jù),那么奇偶校驗(yàn)應(yīng)當(dāng)重新計(jì)算。在該實(shí)例中,由于經(jīng)重新計(jì)算的奇偶校驗(yàn)不能寫入到閃速數(shù)據(jù)存儲(chǔ)設(shè)備40,因而控制器可以將經(jīng)重新計(jì)算的奇偶校驗(yàn)存儲(chǔ)在其他數(shù)據(jù)存儲(chǔ)設(shè)備30、設(shè)備高速緩存存儲(chǔ)器44或者控制器高速緩存存儲(chǔ)器26之一上的空的空間32中。
可以提供另一數(shù)據(jù)存儲(chǔ)設(shè)備50(即,數(shù)據(jù)存儲(chǔ)設(shè)備1A)以便備 份只讀閃速數(shù)據(jù)存儲(chǔ)設(shè)備40的內(nèi)容,也許使得另一數(shù)據(jù)存儲(chǔ)設(shè)備50可以替換在只讀狀態(tài)中的閃速數(shù)據(jù)存儲(chǔ)設(shè)備40。為了進(jìn)行備份,控制器20將使用其所存儲(chǔ)的映射來(lái)標(biāo)識(shí)映射到閃速數(shù)據(jù)存儲(chǔ)設(shè)備40的任何數(shù)據(jù)的位置,并且將數(shù)據(jù)從那些位置拷貝到數(shù)據(jù)存儲(chǔ)設(shè)備50的相關(guān)次條帶。這可以涉及讀取存儲(chǔ)在其他數(shù)據(jù)存儲(chǔ)設(shè)備30、設(shè)備高速緩存存儲(chǔ)器44或者控制器高速緩存存儲(chǔ)器26之一上的先前空的空間32中的數(shù)據(jù)。此外,當(dāng)控制器20重新計(jì)算奇偶校驗(yàn)而不是將旨在針對(duì)閃速存儲(chǔ)器的次條帶數(shù)據(jù)寫在另一位置中時(shí),那么控制器20必須讀取其他數(shù)據(jù)存儲(chǔ)設(shè)備30(即,設(shè)備2、設(shè)備3和設(shè)備4)的次條帶并且使用與奇偶校驗(yàn)計(jì)算(即,XOR)相同的功能確定什么數(shù)據(jù)旨在寫到閃速數(shù)據(jù)存儲(chǔ)設(shè)備40。因此,確定然后寫到適當(dāng)?shù)拇螚l帶中的備份數(shù)據(jù)存儲(chǔ)設(shè)備50的數(shù)據(jù)。
圖3是包括替換只讀閃速數(shù)據(jù)存儲(chǔ)設(shè)備40的具有更新的/當(dāng)前的數(shù)據(jù)的新數(shù)據(jù)存儲(chǔ)設(shè)備50的獨(dú)立磁盤冗余陣列(RAID)10的示圖。由于可以將數(shù)據(jù)寫到新數(shù)據(jù)存儲(chǔ)設(shè)備(即,其在正常模式而非只讀模式中),因而控制器20改變其表22以指示新數(shù)據(jù)存儲(chǔ)設(shè)備50在正常狀態(tài)中。因此,控制器20可以將數(shù)據(jù)讀取和寫入到整個(gè)陣列作為正常的。注意,新數(shù)據(jù)存儲(chǔ)設(shè)備50現(xiàn)在存儲(chǔ)數(shù)據(jù)G'。而且,控制器可以刪除或者重新使用先前被用于存儲(chǔ)不能寫到只讀閃速數(shù)據(jù)存儲(chǔ)設(shè)備40的數(shù)據(jù)的其他數(shù)據(jù)存儲(chǔ)設(shè)備或者高速緩存存儲(chǔ)器上的存儲(chǔ)器位置。
圖4A-B提供了用于處理涉及獨(dú)立磁盤冗余陣列(RAID)中的閃速數(shù)據(jù)存儲(chǔ)設(shè)備的讀和寫操作的方法60的一個(gè)實(shí)施例的流程圖。方法優(yōu)選地允許只讀閃速數(shù)據(jù)存儲(chǔ)設(shè)備在不損害陣列的數(shù)據(jù)完整性的情況下保持阻止標(biāo)記廢止的。
在步驟62中,方法確定閃速數(shù)據(jù)存儲(chǔ)設(shè)備是否在“只讀臨界”狀態(tài)中。如果閃速數(shù)據(jù)存儲(chǔ)設(shè)備不在“只讀臨界”狀態(tài)中,那么方法轉(zhuǎn)到(即,跟隨“否”分支)步驟64,在其中方法確定預(yù)期的操作是來(lái)自閃存設(shè)備的讀取還是到閃存設(shè)備的寫入。如果預(yù)期的操作 是來(lái)自閃存設(shè)備的讀取,那么方法轉(zhuǎn)到(即,跟隨“讀取”分支)步驟66,在其中方法正常讀取來(lái)自閃存設(shè)備的次條帶。由于讀取功能完成,因而方法結(jié)束。如果請(qǐng)求另一讀取或者寫入,那么方法可以再次開始。
如果步驟64確定預(yù)期的操作是到閃存設(shè)備的寫入,那么方法轉(zhuǎn)到(即,跟隨“寫入”分支)步驟68,在其中方法嘗試寫入到閃存設(shè)備。步驟70然后確定在所嘗試的寫入期間是否存在寫入錯(cuò)誤。如果不存在寫入錯(cuò)誤,那么方法結(jié)束。然而,如果步驟70確定存在寫入錯(cuò)誤,那么方法轉(zhuǎn)到步驟72以確定閃存設(shè)備是否在“只讀”模式中。如果閃存設(shè)備被確定為在只讀模式中,那么在步驟74中,控制器存儲(chǔ)閃存設(shè)備在“只讀臨界”狀態(tài)中的指示,使得根據(jù)本發(fā)明執(zhí)行附加的程序。在步驟74之后,方法轉(zhuǎn)到圖4B(參見連接點(diǎn)“B”)。
如果步驟72確定閃存設(shè)備不在“只讀”模式中,那么步驟76確定與當(dāng)前寫入指令相關(guān)聯(lián)的寫入錯(cuò)誤的數(shù)目是否大于寫入錯(cuò)誤的設(shè)定點(diǎn)數(shù)目。如果步驟76實(shí)現(xiàn)肯定確定,那么步驟78將閃存設(shè)備標(biāo)記為廢止的。備選地,如果步驟76實(shí)現(xiàn)否定確定,那么步驟80在返回到步驟70之前執(zhí)行正常寫入錯(cuò)誤過(guò)程以確定下一個(gè)所嘗試的寫入是否發(fā)生寫入錯(cuò)誤。
返回參考步驟62,如果方法確定閃速數(shù)據(jù)存儲(chǔ)設(shè)備在“只讀臨界”狀態(tài)中,那么方法轉(zhuǎn)到(即,跟隨“是”分支)步驟82,在其中方法確定預(yù)期的操作是來(lái)自閃存設(shè)備的讀取還是到閃存設(shè)備的寫入。如果預(yù)期的操作是寫入操作,那么方法轉(zhuǎn)到圖4B(參見連接點(diǎn)“B”)。然而,如果步驟82確定預(yù)期的操作是讀取操作,那么步驟84確定次條帶是否已經(jīng)先前列出為經(jīng)修改的。注意,“經(jīng)修改的”次條帶的列表僅包括在閃速數(shù)據(jù)存儲(chǔ)設(shè)備進(jìn)入只讀模式之后“經(jīng)修改的”次條帶。因此,“經(jīng)修改的”列表意指與次條帶相關(guān)聯(lián)的數(shù)據(jù)被存儲(chǔ)在其他數(shù)據(jù)存儲(chǔ)設(shè)備30、設(shè)備高速緩存存儲(chǔ)器44或者控制器高速緩存存儲(chǔ)器26之一上,或者控制器可以使用跨陣列的相同主條帶內(nèi)的數(shù)據(jù)和奇偶校驗(yàn)次條帶來(lái)重新計(jì)算期望的數(shù)據(jù)。如果次條 帶沒(méi)有被列出為經(jīng)修改的,那么步驟86正常讀取來(lái)自閃存設(shè)備的次條帶。如果次條帶被列出為已經(jīng)修改,那么步驟88使用其他數(shù)據(jù)存儲(chǔ)設(shè)備上的奇偶校驗(yàn)和數(shù)據(jù)重新生成次條帶,如先前所描述的。備選地或者與重新生成數(shù)據(jù)進(jìn)行組合,方法可以使用映射標(biāo)識(shí)其中與次條帶相關(guān)聯(lián)存儲(chǔ)數(shù)據(jù)的另一位置。如果步驟82確定預(yù)期的操作是寫入操作,那么方法轉(zhuǎn)到圖4B(參見連接點(diǎn)“B”)。
從步驟74或者步驟82中的任一個(gè)步驟繼續(xù),圖4B描述了用于處理在“只讀”模式中的閃速數(shù)據(jù)存儲(chǔ)設(shè)備上的次條帶的寫入操作的步驟。在步驟90中,方法確定是否存在陣列中的其他數(shù)據(jù)存儲(chǔ)設(shè)備上可用的可用數(shù)據(jù)存儲(chǔ)空間。如果是的話,步驟92將數(shù)據(jù)存儲(chǔ)在另一數(shù)據(jù)存儲(chǔ)設(shè)備上并且步驟94存儲(chǔ)其中已經(jīng)存儲(chǔ)每個(gè)次條帶的位置的列表。對(duì)于后續(xù)讀取操作而言,需要位置的該列表。如果按照步驟90存在其他數(shù)據(jù)存儲(chǔ)設(shè)備上可用的不足的數(shù)據(jù)存儲(chǔ)空間,那么步驟96確定是否存在設(shè)備高速緩存或者控制器高速緩存中可用的足夠的可用數(shù)據(jù)存儲(chǔ)空間。如果是的話,那么步驟98將數(shù)據(jù)存儲(chǔ)在可用的高速緩存中并且步驟94存儲(chǔ)其中已經(jīng)存儲(chǔ)每個(gè)次條帶的高速緩存位置的列表。如果按照步驟96存在高速緩存中可用的不足的數(shù)據(jù)存儲(chǔ)空間,那么步驟100修改主條帶奇偶校驗(yàn),如若數(shù)據(jù)寫入到閃存設(shè)備。步驟102存儲(chǔ)主條帶的列表,其中已經(jīng)修改奇偶校驗(yàn)以反映旨在寫到只讀閃速數(shù)據(jù)存儲(chǔ)設(shè)備的數(shù)據(jù)。
如本領(lǐng)域的技術(shù)人員將理解到,本發(fā)明的方面可以實(shí)現(xiàn)為系統(tǒng)或者方法。因此,本發(fā)明的方面可以采取以下形式:完全硬件實(shí)施例、完全軟件實(shí)施例(包括固件、常駐軟件、微代碼等等)或者可以在本文中全部一般地被稱為“電路”、“模塊”或者“系統(tǒng)”的組合軟件和硬件方面的實(shí)施例。在不脫離本發(fā)明的范圍和精神的情況下,許多修改和變型將對(duì)于本領(lǐng)域的技術(shù)人員是明顯的。選擇和描述實(shí)施例以便最好地解釋本發(fā)明的原理和實(shí)際應(yīng)用,并且使得本領(lǐng)域的普通技術(shù)人員能夠理解針對(duì)具有如適于所預(yù)期的特定使用的各種修改的各種實(shí)施例的本發(fā)明。