專利名稱:檢測不準(zhǔn)確數(shù)據(jù)的設(shè)備和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及檢測例如由數(shù)據(jù)被寫入存儲器設(shè)備中的地址的錯誤而產(chǎn)生的不準(zhǔn)確數(shù)據(jù)的單元。
背景技術(shù):
存儲子系統(tǒng)響應(yīng)讀命令向主機(jī)系統(tǒng)返回不準(zhǔn)確數(shù)據(jù)的問題不僅導(dǎo)致用戶數(shù)據(jù)的損失,而且導(dǎo)致例如系統(tǒng)故障的嚴(yán)重故障。為此,通常存儲子系統(tǒng)通過向每個數(shù)據(jù)增加例如奇偶檢驗,ECC(糾錯編碼)和CRC(循環(huán)冗余檢查)編碼的冗余數(shù)據(jù)并且在讀取每個數(shù)據(jù)時檢查冗余數(shù)據(jù),來避免把不準(zhǔn)確數(shù)據(jù)返回到主機(jī)系統(tǒng)的問題。
例如,當(dāng)中間范圍或高級RAID子系統(tǒng)向512字節(jié)的扇區(qū)數(shù)據(jù)增加8到16字節(jié)冗余編碼時,其中512字節(jié)是在從高速緩存向盤驅(qū)動器寫入(降級)時用戶數(shù)據(jù)的最小單元。接著,在從盤驅(qū)動器向高速緩存讀取(升級)時檢查這個冗余編碼。通過這種方式,在RAID控制器的后端接口之后的數(shù)據(jù)路徑中執(zhí)行檢錯。附帶地,在這種情況下,冗余編碼是由512字節(jié)的扇區(qū)數(shù)據(jù)唯一計算的數(shù)據(jù),并且通常使用基于LRC(縱向冗余校驗),CRC(循環(huán)冗余校驗)等等的編碼。
同時,在數(shù)據(jù)被寫入實際盤驅(qū)動器時,在某些情況下,由于例如振動的外部原因,在頭定位期間出現(xiàn)臨時異常事件。數(shù)據(jù)可能被寫入不同于寫入請求所指定的LBA的LBA(邏輯塊地址)。然而,在這種情況下,有時出現(xiàn)在存儲子系統(tǒng)端不能通過上面描述的冗余編碼檢測的寫入位置錯誤。
參照圖8具體解釋此情況。如該附圖所示,假定扇區(qū)數(shù)據(jù)1(512字節(jié))和LRC1(對應(yīng)于扇區(qū)數(shù)據(jù)1的冗余編碼)被存儲在LBA1中,并且扇區(qū)數(shù)據(jù)2(512字節(jié))和LRC2(對應(yīng)于扇區(qū)數(shù)據(jù)2的冗余編碼)被存儲在LBA2中。在這個條件下,在過程1從LBA1讀取扇區(qū)數(shù)據(jù)1和LRC1,并且在過程2校驗LRC1。結(jié)果,如果扇區(qū)數(shù)據(jù)1與LRC1一致,則在過程3修改扇區(qū)數(shù)據(jù)1,在過程4計算新LRC(LRC1′),并且在過程5把校正的扇區(qū)數(shù)據(jù)1′和LRC1′寫入LBA1。
然而,如該附圖所示,假定要寫入LBA1的數(shù)據(jù)被寫入LBA2。換言之,最初應(yīng)當(dāng)在過程5重寫的扇區(qū)數(shù)據(jù)1和LRC1仍然在LBA1中存儲。
在這個條件下,如果在過程6從LBA1讀取扇區(qū)數(shù)據(jù)1和LRC1并且在過程7校驗LRC1,則判斷扇區(qū)數(shù)據(jù)1與LRC1一致。即,雖然在過程6返回最初不應(yīng)當(dāng)返回的不準(zhǔn)確數(shù)據(jù),然而在過程7不能檢測它們。此外,在這個條件下,盡管附圖中未示出,但是假定從LBA2讀取扇區(qū)數(shù)據(jù)1′和LRC1′。在這種情況下,讀取最初要寫入LBA1的數(shù)據(jù),并且此外,由于扇區(qū)數(shù)據(jù)1′與LRC1′一致,所以不可能檢測寫入位置的錯誤。
通過這種方式,出現(xiàn)存儲子系統(tǒng)響應(yīng)讀取命令而向主機(jī)系統(tǒng)返回不準(zhǔn)確數(shù)據(jù)的問題(此后被稱作(問題))。
因此,在某些情況下,針對該問題,通過把LBA信息引入到冗余編碼中,能夠檢測到驅(qū)動器從錯誤地址讀取數(shù)據(jù)。通過采用這個方法,可以在要寫入的LBA和實際寫入的LBA之間存在差異的情況下檢測錯誤。把圖8作為一個例子進(jìn)行解釋,它對應(yīng)于過程5之后從LBA2讀取數(shù)據(jù)的情況。
然而,即使采用了這種方法,由于LBA1信息被包含在對應(yīng)于在過程5應(yīng)當(dāng)已經(jīng)改寫但是實際沒有改寫的數(shù)據(jù)的冗余編碼中,所以在過程5之后從LBA1讀取數(shù)據(jù)的情況下不可能檢測錯誤。因此,即使在這種方法被采用的情況下,仍然有該問題出現(xiàn)的可能性。
作為檢測問題的出現(xiàn)的現(xiàn)有技術(shù),存在如下文中所描述的方法。盤驅(qū)動單元或主機(jī)系統(tǒng)當(dāng)寫入數(shù)據(jù)時在數(shù)據(jù)內(nèi)并且在盤內(nèi)的不同位置存儲寫入歷史信息,并且當(dāng)讀取數(shù)據(jù)時比較和驗證這些分別存儲的寫入歷史信息(例如,參考日本專利待審公開Tokkai 2001-338468(5-6頁,圖5-6))。
然而,日本專利待審公開Tokkai 2001-338468(5-6頁,圖5-6)的發(fā)明存在的問題是,寫入歷史被存儲在與扇區(qū)數(shù)據(jù)沒有關(guān)系的區(qū)域,并且驅(qū)動器的容量被消耗。此外,還具有由于需要與扇區(qū)數(shù)據(jù)不同地讀取寫入歷史,所以影響讀取性能的問題。
發(fā)明內(nèi)容
提出本發(fā)明以解決上述技術(shù)問題。本發(fā)明的一個目的是避免存儲子系統(tǒng)把不準(zhǔn)確數(shù)據(jù)返回到主機(jī)系統(tǒng)的問題,而無需消耗驅(qū)動器的容量。此外,本發(fā)明的另一個目的是避免存儲子系統(tǒng)把不準(zhǔn)確數(shù)據(jù)返回到主機(jī)系統(tǒng)的問題,而無需影響從驅(qū)動器讀取的性能。
為了實現(xiàn)這些目的,基于本發(fā)明,關(guān)于某扇區(qū)數(shù)據(jù)的寫入歷史被加入到不同扇區(qū)數(shù)據(jù)中,并且在讀取時被驗證。換言之,本發(fā)明的單元是用于檢測存儲器中不準(zhǔn)確數(shù)據(jù)的單元,包含添加單元,用于把結(jié)合要存儲在存儲器的第一扇區(qū)中的數(shù)據(jù)的更新而更新的歷史信息加入到該數(shù)據(jù)上,并且加入到要存儲在存儲器的第二扇區(qū)中的數(shù)據(jù)上;以及驗證單元,用于通過在已經(jīng)被加到第一扇區(qū)中存儲的該數(shù)據(jù)上的歷史信息和已經(jīng)被加到第二扇區(qū)中存儲的該數(shù)據(jù)上的歷史信息之間進(jìn)行比較,來驗證第一扇區(qū)中存儲的該數(shù)據(jù)和第二扇區(qū)中存儲的該數(shù)據(jù)。
此外,本發(fā)明也可以被視作在讀取已經(jīng)被加到不同扇區(qū)數(shù)據(jù)的某扇區(qū)數(shù)據(jù)的寫入歷史時對其進(jìn)行驗證的方法。在這種情況下,本發(fā)明的方法是一種用于在存儲以分布方式同步處理的多個數(shù)據(jù)的多個存儲器中檢測不準(zhǔn)確數(shù)據(jù)的方法,包括添加步驟,把結(jié)合多個數(shù)據(jù)中的一個數(shù)據(jù)的更新而更新的歷史信息加入到該一個數(shù)據(jù)上,并且加入到該多個數(shù)據(jù)中的另一個數(shù)據(jù)上;寫入步驟,把該一個數(shù)據(jù)寫入到存儲器的第一扇區(qū),并且把該另一個數(shù)據(jù)寫入到存儲器的第二扇區(qū);讀取步驟,讀取第一扇區(qū)中存儲的數(shù)據(jù)和第二扇區(qū)中存儲的數(shù)據(jù);以及驗證步驟,通過比較分別加入到兩個讀取數(shù)據(jù)的歷史信息來驗證該兩個數(shù)據(jù)。
同時,本發(fā)明也可以被視作允許計算機(jī)實現(xiàn)預(yù)定功能的程序。在這種情況下,本發(fā)明的程序允許連接到存儲器的計算機(jī)實現(xiàn)從第一數(shù)據(jù)中獲得結(jié)合要存儲在存儲器的第一扇區(qū)的第一數(shù)據(jù)的更新而更新的第一歷史信息,以及從第二數(shù)據(jù)中獲得結(jié)合要存儲在存儲器的第二扇區(qū)的第二數(shù)據(jù)的更新而更新的第二歷史信息的功能;以及通過比較第一歷史信息和第二歷史信息,驗證第一數(shù)據(jù)或第二數(shù)據(jù)的功能。
為了更全面地理解本發(fā)明及其優(yōu)點,現(xiàn)在參照下面結(jié)合附圖的描述。
圖1是基于本發(fā)明的實施例示出了用戶數(shù)據(jù),奇偶檢驗數(shù)據(jù)和DC值的排列的第一個例子的圖例。
圖2是基于本發(fā)明的實施例示出了用戶數(shù)據(jù),奇偶檢驗數(shù)據(jù)和DC值的排列的第二個例子的圖例。
圖3是基于本發(fā)明的實施例示出了冗余編碼的DC值的存儲方法的例子的圖例。
圖4是基于本發(fā)明的實施例示出了實現(xiàn)存儲子系統(tǒng)的計算機(jī)的硬件結(jié)構(gòu)的模塊圖。
圖5是基于本發(fā)明的實施例示出了存儲子系統(tǒng)的功能結(jié)構(gòu)的模塊圖。
圖6是基于本發(fā)明的實施例示出了升級(staging)處理操作的例子的流程圖。
圖7-1是基于本發(fā)明的實施例示出了降級(destaging)處理的操作的例子的流程圖。
圖7-2是基于本發(fā)明的實施例示出了降級處理的操作的例子的流程圖。
圖8是解釋現(xiàn)有技術(shù)的問題的圖例。
具體實施例方式
此后,將參照附圖詳細(xì)描述本發(fā)明的實施例的最優(yōu)方面(此后,被稱作″實施例的方面″)。這個實施例的一個方面是本發(fā)明被應(yīng)用于通過例如RAID5的奇偶檢驗的使用而執(zhí)行數(shù)據(jù)保護(hù)的盤陣列系統(tǒng)。在類似這個的盤陣列系統(tǒng)中,通過把從主機(jī)系統(tǒng)發(fā)送的數(shù)據(jù)按扇區(qū)大小分區(qū)而獲得的多個扇區(qū)數(shù)據(jù)(此后被稱作″用戶數(shù)據(jù)″)和用于檢測不準(zhǔn)確用戶數(shù)據(jù)并且恢復(fù)它的扇區(qū)數(shù)據(jù)(此后被稱作″奇偶校驗數(shù)據(jù)″)被以分布方式存儲在多個盤中。此外,在存儲用戶數(shù)據(jù)的扇區(qū)(此后被稱作″數(shù)據(jù)扇區(qū)″)中,伴隨提供了存儲用于校驗用戶數(shù)據(jù)的有效性的冗余編碼的區(qū)域,并且在存儲奇偶檢驗數(shù)據(jù)的扇區(qū)(此后被稱作″奇偶檢驗扇區(qū)″)中,伴隨提供了存儲用于校驗奇偶檢驗數(shù)據(jù)的有效性的冗余編碼的區(qū)域。
基于本發(fā)明的實施例,通過注意盤陣列系統(tǒng)的這種結(jié)構(gòu),在存儲用戶數(shù)據(jù)的數(shù)據(jù)扇區(qū)的冗余編碼區(qū)域中,和在存儲用戶數(shù)據(jù)的奇偶檢驗數(shù)據(jù)的奇偶檢驗扇區(qū)的冗余編碼區(qū)域中,提供要結(jié)合用戶數(shù)據(jù)的更新而更新的寫入歷史信息。
這里,作為寫入歷史信息,可以采用任何種類的信息,而在實施例的一個方面,采用在更新用戶數(shù)據(jù)時將要加1的計數(shù)器。在這種情況下,由于寫入歷史信息能夠作為計數(shù)器而被得到,以顯示用戶數(shù)據(jù)的降級的數(shù)量,所以這種計數(shù)器被稱作DC(降級計數(shù)器),并且針對DC設(shè)置的值此后被稱作DC值。
接著,參照圖1和2詳細(xì)描述在實施例的該方面假定的RAID的結(jié)構(gòu)中的用戶數(shù)據(jù),奇偶檢驗數(shù)據(jù),DC值等等的排列。
注意,在實施例的該方面,為了方便著想,數(shù)據(jù)扇區(qū)的冗余編碼區(qū)域中提供的DC被稱作DDC(數(shù)據(jù)DC),并且對DDC設(shè)置的值被稱作DDC值。
此外,在與所注意的用戶數(shù)據(jù)相關(guān)的奇偶檢驗數(shù)據(jù)中,確定第一優(yōu)先奇偶檢驗數(shù)據(jù)(主奇偶檢驗數(shù)據(jù))和第二優(yōu)先奇偶檢驗數(shù)據(jù)(次奇偶檢驗數(shù)據(jù))。接著,存儲主奇偶檢驗數(shù)據(jù)的奇偶檢驗扇區(qū)的冗余編碼區(qū)域中提供的DC被稱作PDC(主DC),并且對PDC設(shè)置的值被稱作PDC值。而且,存儲次奇偶檢驗數(shù)據(jù)的奇偶檢驗扇區(qū)(次奇偶檢驗扇區(qū))的冗余編碼區(qū)域中提供的DC被稱作SDC(次DC),并且對SDC設(shè)置的值被稱作SDC值。
例如,在RAID5等等的情況下,與存儲所述用戶數(shù)據(jù)的數(shù)據(jù)扇區(qū)存在于相同片段(slice)的奇偶檢驗扇區(qū)被設(shè)置成主奇偶檢驗扇區(qū),并且在扇區(qū)的冗余編碼區(qū)域中維護(hù)的DC被設(shè)置成PDC。此外,假定與存儲所述用戶數(shù)據(jù)的數(shù)據(jù)扇區(qū)存在于不同片段的奇偶檢驗扇區(qū)被設(shè)置成次奇偶檢驗扇區(qū),并且在扇區(qū)的冗余編碼區(qū)域中維護(hù)的DC被設(shè)置成SDC。
此外,在RAID50等等的情況下,存在于鏡像片段之一中的奇偶檢驗扇區(qū)被設(shè)置成主奇偶檢驗扇區(qū),并且在扇區(qū)的冗余編碼區(qū)域中維護(hù)的DC被設(shè)置成PDC。接著,假定存在于鏡像片段的其它片段中的奇偶檢驗扇區(qū)被設(shè)置成次奇偶檢驗扇區(qū),并且在扇區(qū)的冗余編碼區(qū)域中維護(hù)的DC被設(shè)置成SDC。
圖1是示出了RAID5的結(jié)構(gòu)的圖例。在圖1中,準(zhǔn)備了3個盤,并且在每個盤中提供512字節(jié)的扇區(qū)數(shù)據(jù)的區(qū)域和4到16字節(jié)的冗余編碼的區(qū)域。此外,在兩個任意選擇的片段中,如附圖所示,維護(hù)用戶數(shù)據(jù)(在附圖中指示為″數(shù)據(jù)″),奇偶檢驗數(shù)據(jù)(指示為″奇偶檢驗″),DDC值(指示為″DDC″),PDC值(指示為″PDC″),及SDC值(指示為″SDC″)。換言之,在存儲用戶數(shù)據(jù)1-1,1-2,2-1及2-2的數(shù)據(jù)扇區(qū)的冗余編碼區(qū)域中,DDC 1-1,1-2,2-1及2-2被分別維護(hù)為每個用戶數(shù)據(jù)的DC值。此外,奇偶檢驗數(shù)據(jù)1是用戶數(shù)據(jù)1-1及1-2的主奇偶檢驗數(shù)據(jù),以及用戶數(shù)據(jù)2-1和2-2的次奇偶檢驗數(shù)據(jù)。因此,在存儲奇偶檢驗數(shù)據(jù)1的奇偶檢驗扇區(qū)的冗余編碼區(qū)域中,維護(hù)對應(yīng)于DDC 1-1和1-2的PDC 1-1和1-2,同時維護(hù)對應(yīng)于DDC 2-1和2-2的SDC 2-1和2-2。并且,奇偶檢驗數(shù)據(jù)2是用戶數(shù)據(jù)2-1和2-2的主奇偶檢驗數(shù)據(jù),以及用戶數(shù)據(jù)1-1和1-2的次奇偶檢驗數(shù)據(jù)。因此,在存儲奇偶檢驗數(shù)據(jù)2的奇偶檢驗扇區(qū)的冗余編碼區(qū)域中,存儲對應(yīng)于DDC 2-1和2-2的PDC 2-1和2-2,同時維護(hù)對應(yīng)于DDC 1-1和1-2的SDC 1-1和1-2。
此外,圖2是示出了RAID50的結(jié)構(gòu)的圖例。類似于圖1,在圖2中,準(zhǔn)備了3個盤并且盡管未圖解,在每個盤中提供了512字節(jié)的扇區(qū)數(shù)據(jù)區(qū)域和4到16字節(jié)的冗余編碼區(qū)域。此外,這個RAID50結(jié)構(gòu)是鏡像的RAID5的結(jié)構(gòu),并且盤1到3中存儲的數(shù)據(jù)也被分別存儲在盤4到6。此外,在這些鏡像的片段中,如附圖所示,維護(hù)用戶數(shù)據(jù)(在附圖中指示為″數(shù)據(jù)″),奇偶檢驗數(shù)據(jù)(指示為″奇偶檢驗″),DDC值(指示為″DDC″),PDC值(指示為″PDC″)及SDC值(指示為″SDC″)。換言之,在存儲用戶數(shù)據(jù)1和2的數(shù)據(jù)扇區(qū)的冗余編碼區(qū)域中,DDC 1和2被維護(hù)為每個用戶數(shù)據(jù)的DC值。此外,由于要存儲在盤3的奇偶檢驗數(shù)據(jù)是用戶1和2的主奇偶檢驗數(shù)據(jù),所以在存儲這個奇偶檢驗數(shù)據(jù)的奇偶檢驗扇區(qū)的冗余編碼區(qū)域中,維護(hù)對應(yīng)于DDC 1和2的PDC 1和2。并且,由于要存儲在盤6的奇偶檢驗數(shù)據(jù)是用戶1和2的次奇偶檢驗數(shù)據(jù),所以在存儲這個奇偶檢驗數(shù)據(jù)的奇偶檢驗扇區(qū)的冗余編碼區(qū)域中,維護(hù)對應(yīng)于DDC 1和2的SDC 1和2。
接著,參照圖3,描述存儲DC值到冗余編碼區(qū)域的方法。注意,圖3示出了在圖1的RAID5的結(jié)構(gòu)中DC值的存儲方法。
如上所述,每個用戶數(shù)據(jù)的DC值在每個扇區(qū)的冗余編碼區(qū)域被存儲為用戶數(shù)據(jù)的冗余編碼(RCx),以及對應(yīng)于用戶數(shù)據(jù)的奇偶檢驗數(shù)據(jù)的冗余編碼(RCpx)。具體地,首先,RCG(冗余編碼生成器)通過使用常規(guī)方法產(chǎn)生每個扇區(qū)數(shù)據(jù)的冗余編碼。接著,通過如此產(chǎn)生的冗余編碼和要存儲的DC值的XOR操作獲得的新冗余編碼被存儲在每個扇區(qū)的冗余編碼區(qū)域中。
例如,在DC值被存儲在用戶數(shù)據(jù)2-1的冗余編碼RC 2-1中的情況下,存儲方法如下。
首先,RCG通過使用常規(guī)方法產(chǎn)生用戶數(shù)據(jù)2-1的冗余編碼RC2-1。接著,XOR操作器執(zhí)行RC 2-1-和DC 2-1的XOR操作,從而獲得新冗余編碼RC 2-1。這個新冗余編碼被存儲在冗余編碼區(qū)域中。
此外,在DC值被存儲在奇偶檢驗數(shù)據(jù)2的冗余編碼RCp2中的情況下,存儲方法如下。
首先,RCG通過使用常規(guī)方法產(chǎn)生奇偶檢驗數(shù)據(jù)2的冗余編碼RCp2。接著,XOR操作器執(zhí)行RCp2-和DC 2-1,2-2,1-1和1-2所形成的位序列的XOR操作,從而獲得新冗余編碼RCp2。這個新冗余編碼被存儲在冗余編碼區(qū)域中。
此外,類似于用戶數(shù)據(jù)2-1的情況,DC值被存儲到用戶數(shù)據(jù)2-2的冗余編碼R C2-2中。
接著,詳細(xì)描述產(chǎn)生和驗證包含這種DC值的冗余編碼的存儲子系統(tǒng)的結(jié)構(gòu)和操作的例子。
圖4是示意性示出最好用作這種存儲子系統(tǒng)的計算機(jī)的硬件結(jié)構(gòu)的例子的圖例。
圖4中示出的計算機(jī)包含作為操作裝置的CPU(中央處理單元)10a;主存儲器10c,也通過M/B(母板)芯片組10b和CPU總線連接到CPU 10a;視頻卡10d,通過M/B芯片組10b和AGP(圖形加速端口)連接到CPU 10a;及顯示器10j。計算機(jī)還包含磁盤驅(qū)動器(HDD)10e,通過PCI(外設(shè)部件互連)總線及網(wǎng)絡(luò)接口10g連接到M/B芯片組10b。計算機(jī)此外還包含軟盤驅(qū)動器10h,通過橋電路10f及例如ISA(工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu))總線的低速總線從PCI總線連接到M/B芯片組10b;及鍵盤/鼠標(biāo)10i。
注意,圖4僅僅示出了實現(xiàn)實施例的該方面的計算機(jī)的硬件結(jié)構(gòu)的例子,并且就能夠應(yīng)用的本實施例的該方面而言,能夠采用各種不同結(jié)構(gòu)。例如,可以用這樣的方式配置計算機(jī),其中不是提供視頻卡10d,而是只安裝視頻存儲器,并且可通過CPU 10a處理圖像數(shù)據(jù)??梢杂眠@樣的方式配置計算機(jī),其中通過例如ATA(AT附件)和SCSI(小型計算機(jī)系統(tǒng)接口)接口提供CD-R(可記錄光盤)或DVD-RAM(數(shù)字化視頻光盤隨機(jī)訪問存儲器)的驅(qū)動器以作為外部存儲器設(shè)備。
圖5是示出實施例的該方面的存儲子系統(tǒng)的結(jié)構(gòu)的圖例。這個存儲子系統(tǒng)包含控制器11;前端接口單元12(此后被稱作″前端I/F單元″);數(shù)據(jù)路徑控制器13;后端接口單元14(此后被稱作″后端I/F單元″);高速緩存單元15;及盤驅(qū)動器161,162,---,16n。控制器11控制整個存儲子系統(tǒng)。附帶地,控制器11也具有根據(jù)從數(shù)據(jù)路徑控制器13傳遞的信息指定在數(shù)據(jù)扇區(qū),主奇偶檢驗扇區(qū)和次奇偶檢驗扇區(qū)中出現(xiàn)問題的扇區(qū)的功能。這個功能能夠被作為″指定裝置″。前端I/F單元12充當(dāng)主機(jī)系統(tǒng)和存儲子系統(tǒng)之間的接口。
此外,數(shù)據(jù)路徑控制器13控制后端I/F單元14和高速緩存單元15之間的數(shù)據(jù)路徑,并且還包含冗余編碼生成器13a,冗余編碼驗證器13b,DDC存儲器區(qū)域13c,SDC存儲器區(qū)域13d和舊數(shù)據(jù)存儲器區(qū)域13e。附帶地,數(shù)據(jù)路徑控制器13也具有把冗余編碼生成器13a產(chǎn)生的冗余編碼加入到數(shù)據(jù)中的功能。這個功能能夠被作為″添加裝置″。并且,冗余編碼驗證器13b能夠被作為″驗證裝置″。后端I/F單元14充當(dāng)存儲子系統(tǒng)和盤驅(qū)動器161,162,…,16n之間的接口。
另外,高速緩存單元15高速緩存從盤驅(qū)動器161,162,---,16n讀取的用戶數(shù)據(jù),奇偶檢驗數(shù)據(jù)和DC值,并且還包含高速緩存控制器15a,用戶數(shù)據(jù)存儲器區(qū)域15b,奇偶檢驗數(shù)據(jù)存儲器區(qū)域和DC緩沖器15d。
盤驅(qū)動器161,162,---,16n是存儲變成存儲子系統(tǒng)要處理的對象的用戶數(shù)據(jù)和奇偶檢驗數(shù)據(jù)的存儲器,并且對應(yīng)于圖1中的盤1到3以及圖2中的盤1到6。
接著,描述數(shù)據(jù)路徑控制器13的內(nèi)部結(jié)構(gòu)。冗余編碼生成器13a具有當(dāng)響應(yīng)對驅(qū)動器的寫入請求用戶數(shù)據(jù)被從高速緩存單元15傳送到后端I/F單元14時計算冗余編碼的功能。以讀取DC緩沖器15d中的對應(yīng)DC值,并且執(zhí)行通過使用常規(guī)方法獲得的冗余編碼和如此讀取的DC值的XOR操作的方式計算冗余編碼。
此外,冗余編碼驗證器13b具有當(dāng)響應(yīng)驅(qū)動器的讀取請求而將用戶數(shù)據(jù)從后端I/F單元14傳送到高速緩存單元15時驗證冗余編碼的功能。以這種方式驗證冗余編碼,其中通過執(zhí)行使用常規(guī)方法從用戶數(shù)據(jù)獲得的冗余編碼和從驅(qū)動器讀取的冗余編碼的XOR操作來獲得DC值,并且把如此所獲得的DC值與DC緩沖器15d中存儲的DC值比較。
DDC存儲器區(qū)域13c是臨時存儲從用戶數(shù)據(jù)的冗余編碼獲得的DDC值的區(qū)域,而SDC存儲器區(qū)域13d是臨時存儲從次奇偶檢驗數(shù)據(jù)的冗余編碼獲得的SDC值的區(qū)域。舊數(shù)據(jù)存儲器區(qū)域13e是臨時存儲在降級之前已經(jīng)讀取的變化之前的數(shù)據(jù)(此后被稱作″舊數(shù)據(jù)″)的區(qū)域。
注意,與軟件資源及硬件資源協(xié)作地實現(xiàn)這些功能。具體地,實現(xiàn)存儲子系統(tǒng)的CPU 10a把實現(xiàn)冗余編碼生成器13a及冗余編碼驗證器13b的功能的程序從外部存儲設(shè)備讀到主存儲器10c中,并且根據(jù)必要性,在訪問主存儲器10c中的DDC存儲器區(qū)域13c,SDC存儲器區(qū)域13d及舊數(shù)據(jù)存儲器區(qū)域13e中存儲的信息的同時執(zhí)行處理。
接著,描述高速緩存單元15的內(nèi)部結(jié)構(gòu)。高速緩存控制器15a具有控制針對用戶數(shù)據(jù)存儲器區(qū)域15b,奇偶檢驗存儲器區(qū)域15c及DC緩沖器15d的信息的讀/寫的功能。例如,高速緩存控制器15a控制哪些種類的信息被存儲在用戶數(shù)據(jù)存儲器區(qū)域15b,奇偶檢驗數(shù)據(jù)存儲器區(qū)域15c及DC緩沖器15d中,以及控制DC緩沖器15d中存儲的DC值是否已經(jīng)被驗證。
用戶數(shù)據(jù)存儲器區(qū)域15b是存儲從盤驅(qū)動器161,162,---,16n讀取的用戶數(shù)據(jù)的區(qū)域,而奇偶檢驗數(shù)據(jù)存儲器區(qū)域15c是存儲從盤驅(qū)動器161,162,---,16n讀取的奇偶檢驗數(shù)據(jù)的區(qū)域。
DC緩沖器15d是存儲從主奇偶檢驗數(shù)據(jù)的冗余編碼獲得的、作為從用戶數(shù)據(jù)的冗余編碼獲得的DC值的比較對象的DC數(shù)據(jù)的區(qū)域。附帶地,在RAID5等的情況下,在DC緩沖器15d中能夠維護(hù)的DC值是在用戶數(shù)據(jù)存儲器區(qū)域15b中能夠維護(hù)的用戶數(shù)據(jù)的用戶數(shù)據(jù)塊的數(shù)量的兩倍,并且在RAID50等的情況下,等于在用戶數(shù)據(jù)存儲器區(qū)域15b中能夠維護(hù)的用戶數(shù)據(jù)塊的數(shù)量。此外,當(dāng)在高速緩存單元15中分配用戶數(shù)據(jù)存儲器區(qū)域15b時,響應(yīng)來自控制器11的請求,由高速緩存控制器15a設(shè)置DC緩沖器15d。
接著,描述基于實施例的該方面的存儲子系統(tǒng)的操作。當(dāng)從盤驅(qū)動器161,162,---,16n讀取扇區(qū)數(shù)據(jù)到高速緩存單元15(升級)時,以及當(dāng)從高速緩存單元15寫扇區(qū)數(shù)據(jù)到盤驅(qū)動器161,162,---,16n(降級)時,執(zhí)行存儲子系統(tǒng)中的DC值的操作。因此,如下分別描述升級操作和降級操作。
首先,參照圖6,描述升級操作。注意,圖6示出當(dāng)執(zhí)行一個用戶數(shù)據(jù)的升級時的操作。通常,響應(yīng)來自主機(jī)系統(tǒng)的讀命令,返回至少一個片段中包含的多個用戶數(shù)據(jù)。然而,在這種情況下,可以認(rèn)為是對多個用戶數(shù)據(jù)的每個用戶數(shù)據(jù)執(zhí)行圖6的操作。此外,由于奇偶檢驗數(shù)據(jù)保持成為由用戶數(shù)據(jù)保持的DC值的核對對象的DC值,所以不對奇偶檢驗數(shù)據(jù)執(zhí)行圖6的操作。
首先,控制器11檢查要執(zhí)行升級的用戶數(shù)據(jù)的DC值是否存在于DC緩沖器15d中(步驟101)。由于過去從主奇偶檢驗數(shù)據(jù)獲得的DC值被存儲在DC緩沖器15d中,所以檢查此時必須比較的DC值是否存在。結(jié)果,當(dāng)判斷DC值存在于DC緩沖器15d中時,處理前進(jìn)到步驟104。反之,當(dāng)判斷DC值不存在于DC緩沖器15d中時,控制器11指示后端I/F單元14讀取對應(yīng)于這個用戶數(shù)據(jù)的主奇偶檢驗數(shù)據(jù)。在此之后,后端I/F單元14對驅(qū)動器執(zhí)行主奇偶檢驗數(shù)據(jù)的讀取請求。接著,如此讀取的主奇偶檢驗數(shù)據(jù)通過數(shù)據(jù)路徑控制器13被傳送到高速緩存單元15的奇偶檢驗數(shù)據(jù)存儲器區(qū)域15c(步驟102)。在這個數(shù)據(jù)傳送時,冗余編碼驗證器13b從讀取的主奇偶檢驗數(shù)據(jù)產(chǎn)生冗余編碼。接著,通過執(zhí)行如此產(chǎn)生的冗余編碼和加入主奇偶檢驗數(shù)據(jù)中的冗余編碼的XOR操作來獲得PDC值。這個PDC值被傳送到DC緩沖器15d(步驟103)。注意,此時PDC值未被定義為已驗證。
接著,控制器11指示后端I/F單元14讀取執(zhí)行升級的用戶數(shù)據(jù)。在此之后,后端I/F單元14對驅(qū)動器執(zhí)行用戶數(shù)據(jù)的讀取請求。接著,如此讀取的用戶數(shù)據(jù)通過數(shù)據(jù)路徑控制器13被傳送到高速緩存單元15的用戶數(shù)據(jù)存儲器區(qū)域15b(步驟104)。在這個數(shù)據(jù)傳送時,冗余編碼驗證器13b從如此讀取的用戶數(shù)據(jù)產(chǎn)生冗余編碼。接著,通過執(zhí)行如此產(chǎn)生的冗余編碼和加入用戶數(shù)據(jù)中的冗余編碼的XOR操作來獲得DDC值。把這個DDC值與DC緩沖器15d中的PDC值比較(步驟105)。
結(jié)果,當(dāng)PDC值與DDC值一致時,PDC值被定義成已驗證(步驟106)。即,指示高速緩存控制器15a以便進(jìn)行控制,使得DC緩沖器15d中存儲的PDC值作為第二次和后續(xù)的DDC值的比較對象是可靠的。在這種情況下,無需處理地完成升級過程。另一方面,當(dāng)PDC值與DDC值不一致時,冗余編碼驗證器13b在DDC存儲器區(qū)域13c中臨時存儲如此獲得的DDC值,并且通知控制器11出現(xiàn)DC值的不一致。
在這之后,控制器11檢查PDC值是否已經(jīng)被驗證(步驟109)。結(jié)果,當(dāng)PDC值已經(jīng)被驗證時,控制器11檢測存儲在步驟104讀取的用戶數(shù)據(jù)的數(shù)據(jù)扇區(qū)中出現(xiàn)的問題,并且通過前端I/F單元12向主機(jī)系統(tǒng)通知問題的出現(xiàn)(步驟110)。注意,然后自主地或通過來自主機(jī)系統(tǒng)的指令執(zhí)行恢復(fù)處理。然而,由于過程類似于普通RAID系統(tǒng)的過程,所以不在這里描述。
另一方面,如果PDC值仍沒有被驗證,則控制器11指示后端I/F單元14讀取次奇偶檢驗數(shù)據(jù)。在此之后,后端I/F單元14對驅(qū)動器執(zhí)行次奇偶檢驗數(shù)據(jù)的讀取請求。接著,如此讀取的次奇偶檢驗數(shù)據(jù)被傳送到數(shù)據(jù)路徑控制器13(步驟111)。當(dāng)這個數(shù)據(jù)傳送時,冗余編碼驗證器13b從如此讀取的次奇偶檢驗數(shù)據(jù)產(chǎn)生冗余編碼。接著,通過執(zhí)行如此產(chǎn)生的冗余編碼和加入次奇偶檢驗數(shù)據(jù)中的冗余編碼的XOR操作來獲得SDC值。這個SDC值被臨時存儲在SDC存儲器區(qū)域13d中,同時SDC值與DC緩沖器15d中的PDC值比較(步驟112)。
結(jié)果,當(dāng)PDC值與SDC值一致時,冗余編碼驗證器13b定義PDC值為已驗證(步驟113)。接著,冗余編碼驗證器13b檢測存儲在步驟104讀取的用戶數(shù)據(jù)的數(shù)據(jù)扇區(qū)中出現(xiàn)的問題,并且通過前端I/F單元12向主機(jī)系統(tǒng)通知問題的出現(xiàn)(步驟110)。注意,然后自主地或通過來自主機(jī)系統(tǒng)的指令執(zhí)行恢復(fù)處理,然而,由于過程類似于普通RAID系統(tǒng)的過程,所以不在這里描述。另一方面,當(dāng)PDC值與SDC值不一致時,SDC存儲器區(qū)域13d中臨時存儲的SDC值與DDC存儲器區(qū)域13c中臨時存儲的DDC值比較(步驟114)。
結(jié)果,當(dāng)SDC值與DDC值一致時,冗余編碼驗證器13b用DDC存儲器區(qū)域13c中臨時存儲的DDC值改寫DC緩沖器15d中的PDC值,并且定義PDC值為已驗證(步驟115)。接著,冗余編碼驗證器13b檢測出現(xiàn)在主奇偶檢驗扇區(qū)中的問題,并且通過前端I/F單元12向主機(jī)系統(tǒng)通知問題的出現(xiàn)(步驟116)。注意,然后自主地或通過來自主機(jī)系統(tǒng)的指令執(zhí)行恢復(fù)處理,然而,由于過程類似于普通RAID系統(tǒng)的過程,所以不在這里描述。另一方面,當(dāng)SDC值與DDC值不一致時,控制器11從DC緩沖器15d中刪除PDC值(步驟117)。接著,控制器11檢測雙重故障的出現(xiàn),并且通過前端I/F單元12向主機(jī)系統(tǒng)通知故障的出現(xiàn)(步驟118)。注意,然后自主地或通過來自主機(jī)系統(tǒng)的指令執(zhí)行恢復(fù)處理,然而,由于過程類似于普通RAID系統(tǒng)的過程,所以不在這里描述。
接著,參照圖7-1和7-2,描述降級的操作。注意,圖7-1和7-2示出每個片段執(zhí)行的降級操作。例如,即使在多個用戶數(shù)據(jù)中只有一部分發(fā)生變化時,奇偶檢驗數(shù)據(jù)也根據(jù)這個變化而變化。因此,需要每個片段地執(zhí)行處理。
首先,控制器11檢查在作為降級對象的片段中存在的主奇偶檢驗數(shù)據(jù)是否存在于高速緩存單元15的奇偶檢驗數(shù)據(jù)存儲器區(qū)域15c中(步驟201)。結(jié)果,當(dāng)判斷主奇偶檢驗數(shù)據(jù)存在于奇偶檢驗數(shù)據(jù)存儲器區(qū)域15c時,處理前進(jìn)到步驟211。
反之,當(dāng)判斷主奇偶檢驗數(shù)據(jù)不存在于奇偶檢驗數(shù)據(jù)存儲器區(qū)域15c時,控制器11指示后端I/F單元14讀取主奇偶檢驗數(shù)據(jù)。在此之后,后端I/F單元14指示驅(qū)動器執(zhí)行主奇偶檢驗數(shù)據(jù)的讀取請求。接著,如此讀取的主奇偶檢驗數(shù)據(jù)通過數(shù)據(jù)路徑控制器13被傳送到高速緩存單元15的奇偶檢驗數(shù)據(jù)存儲器區(qū)域15c(步驟202)。
當(dāng)這個數(shù)據(jù)傳送時,冗余編碼驗證器13b從如此讀取的主奇偶檢驗數(shù)據(jù)產(chǎn)生冗余編碼。接著,通過執(zhí)行如此產(chǎn)生的冗余編碼和加入主奇偶檢驗數(shù)據(jù)中的冗余編碼的XOR操作來獲得PDC值(步驟203)。
接著,控制器11檢查存儲這個主奇偶檢驗數(shù)據(jù)的主奇偶檢驗扇區(qū)的冗余編碼區(qū)域中保持的PDC值是否已經(jīng)存在于DC緩沖器15d中(步驟204)。這里,如果在冗余編碼區(qū)域中保持多個PDC值,則所有它們以集中方式被當(dāng)作判斷對象來處理。例如,在圖1的奇偶檢驗數(shù)據(jù)1的情況下,PDC 1-1和1-2集中地被當(dāng)作判斷對象。
附帶地,盡管在步驟201判斷奇偶檢驗數(shù)據(jù)不存在,但是在步驟204判斷PDC值存在的情況限于RAID5等等的情況。這種情況不出現(xiàn)于RAID50等等的情況下。這是由于,在RAID5等的情況下,用戶數(shù)據(jù)的DC值也存在于不同片段的奇偶檢驗扇區(qū)的冗余編碼區(qū)域中,而在RAID50等的情況下,用戶數(shù)據(jù)的DC值只存在于相同片段的奇偶檢驗扇區(qū)的冗余編碼區(qū)域中。
當(dāng)在步驟204判斷PDC值不存在時,在步驟203獲得的PDC值被簡單地傳送到DC緩沖器15d(步驟205),并且處理前進(jìn)到步驟211。此時,PDC值沒有被定義為已驗證。
并且,當(dāng)判斷PDC值存在時,在步驟203獲得的PDC值與DC緩沖器15d中對應(yīng)的PDC值比較(步驟206)。
結(jié)果,當(dāng)在步驟203獲得的PDC值與DC緩沖器15d中的PDC值一致時,PDC值被定義成已驗證(步驟207),并且處理前進(jìn)到步驟211。另一方面,當(dāng)在步驟203獲得的PDC值與DC緩沖器15d中的PDC值不一致時,檢查PDC值是否被定義成已驗證(步驟208)。
結(jié)果,當(dāng)發(fā)現(xiàn)PDC值被驗證時,檢測到主奇偶檢驗扇區(qū)中問題的出現(xiàn),并且通過前端I/F單元12把此情況通知主機(jī)系統(tǒng)(步驟210),并且處理結(jié)束。注意,然后自主地或通過來自主機(jī)系統(tǒng)的指令執(zhí)行恢復(fù)處理,然而,由于過程類似于普通RAID系統(tǒng)的過程,所以不在這里描述。
并且,當(dāng)PDC值沒有被定義為已驗證時,用在步驟203獲得的PDC值改寫DC緩沖器15d中的PDC值(步驟209),并且處理前進(jìn)到步驟211。此時,PDC值沒有被定義為已驗證。
接著,控制器11指示后端I/F單元14讀取要降級的用戶數(shù)據(jù)。在此之后,后端I/F單元14對驅(qū)動器執(zhí)行用戶數(shù)據(jù)的讀取請求。接著,如此讀取的用戶數(shù)據(jù)被傳送到數(shù)據(jù)路徑控制器13的舊數(shù)據(jù)存儲器區(qū)域13e(步驟211)。在這個數(shù)據(jù)傳送時,冗余編碼驗證器13b從如此讀取的用戶數(shù)據(jù)產(chǎn)生冗余編碼。接著,通過執(zhí)行如此產(chǎn)生的冗余編碼和加入用戶數(shù)據(jù)中的冗余編碼的XOR操作來獲得DDC值。把這個DDC值與DC緩沖器15d中的PDC值比較(步驟221)。結(jié)果,當(dāng)PDC值與DDC值不一致時,冗余編碼驗證器13b在DDC存儲器區(qū)域13c中臨時存儲如此獲得的DDC值(步驟228),并且通知控制器11存在DC值的不一致。
在這之后,控制器11檢查PDC值是否被定義成已驗證(步驟229)。結(jié)果,當(dāng)PDC值被定義成已驗證時,控制器11檢測到在存儲步驟104所讀取的用戶數(shù)據(jù)的數(shù)據(jù)扇區(qū)中出現(xiàn)問題,并且通過前端I/F單元12向主機(jī)系統(tǒng)通知問題的出現(xiàn)(步驟230)。注意,然后自主地或通過來自主機(jī)系統(tǒng)的指令執(zhí)行恢復(fù)處理,然而,由于過程類似于普通RAID系統(tǒng)的過程,所以不在這里描述。
反之,當(dāng)PDC值沒有被定義為已驗證時,控制器11指示后端I/F單元14讀取次奇偶檢驗數(shù)據(jù)。在此之后,后端I/F單元14對驅(qū)動器執(zhí)行次奇偶檢驗數(shù)據(jù)的讀取請求。接著,如此讀取的次奇偶檢驗數(shù)據(jù)被傳送到數(shù)據(jù)路徑控制器13(步驟231)。
在這個數(shù)據(jù)傳送時,冗余編碼驗證器13b從如此讀取的次奇偶檢驗數(shù)據(jù)產(chǎn)生冗余編碼。接著,通過執(zhí)行如此產(chǎn)生的冗余編碼和加入次奇偶檢驗數(shù)據(jù)中的冗余編碼的XOR操作來獲得SDC值。這個SDC值被臨時存儲在SDC存儲器區(qū)域13d中,并且與DC緩沖器15d中的PDC值比較(步驟232)。
結(jié)果,當(dāng)PDC值與SDC值一致時,冗余編碼驗證器13b定義PDC值為已驗證(步驟233)。接著,冗余編碼驗證器13b檢測到在存儲步驟211所讀取的用戶數(shù)據(jù)的數(shù)據(jù)扇區(qū)中出現(xiàn)問題,并且通過前端I/F單元12向主機(jī)系統(tǒng)通知問題的出現(xiàn)(步驟230)。注意,然后自主地或通過來自主機(jī)系統(tǒng)的指令執(zhí)行恢復(fù)處理,然而,由于過程類似于普通RAID系統(tǒng)的過程,所以不在這里描述。
并且,當(dāng)PDC值與SDC值不一致時,SDC存儲器區(qū)域13d中臨時存儲的SDC值與DDC存儲器區(qū)域13c中臨時存儲的DDC值比較(步驟234)。
結(jié)果,當(dāng)SDC值與DDC值一致時,冗余編碼驗證器13b用DDC存儲器區(qū)域13c中臨時存儲的DDC值改寫DC緩沖器15d中的PDC值,并且定義PDC值為已驗證(步驟235)。接著,冗余編碼驗證器13b檢測到在主奇偶檢驗扇區(qū)中出現(xiàn)問題,并且通過前端I/F單元12向主機(jī)系統(tǒng)通知問題的出現(xiàn)(步驟236)。注意,然后自主地或通過來自主機(jī)系統(tǒng)的指令執(zhí)行恢復(fù)處理,然而,由于過程類似于普通RAID系統(tǒng)的過程,所以不在這里描述。
并且,當(dāng)SDC值與DDC值不一致時,控制器11從DC緩沖器15d刪除PDC值(步驟237)。接著,控制器11檢測到存在雙重故障的問題,并且通過前端I/F單元12向主機(jī)系統(tǒng)通知問題的出現(xiàn)(步驟238)。注意,然后自主地或通過來自主機(jī)系統(tǒng)的指令執(zhí)行恢復(fù)處理,然而,由于過程類似于普通RAID系統(tǒng)的過程,所以不在這里描述。
此外,當(dāng)在步驟221PDC值與DDC值一致時,數(shù)據(jù)路徑控制器13執(zhí)行舊數(shù)據(jù)存儲器區(qū)域13e中存儲的舊數(shù)據(jù),奇偶檢驗數(shù)據(jù)存儲器區(qū)域15c中存儲的奇偶檢驗數(shù)據(jù)和新用戶數(shù)據(jù)的XOR操作,從而計算新奇偶檢驗數(shù)據(jù)(步驟222)。注意,新奇偶檢驗數(shù)據(jù)可以通過在從驅(qū)動器讀取數(shù)據(jù)時的數(shù)據(jù)傳送期間的XOR操作來計算(運行時XOR)。接著,數(shù)據(jù)路徑控制器13把DC緩沖器15d中的用戶數(shù)據(jù)的DC值加1(步驟223)。此后,檢查執(zhí)行降級的另一個用戶數(shù)據(jù)是否存在(步驟224)。
結(jié)果,在判斷存在執(zhí)行降級的另一個用戶數(shù)據(jù)的情況下,處理返回到步驟211并且對執(zhí)行降級的所有用戶數(shù)據(jù)執(zhí)行相同處理。另一方面,當(dāng)判斷不存在其它用戶數(shù)據(jù)時,控制器11指示后端I/F單元14把新用戶數(shù)據(jù)和新奇偶檢驗數(shù)據(jù)寫入到驅(qū)動器。在此之后,后端I/F單元14對驅(qū)動器執(zhí)行寫入請求。接著,新用戶數(shù)據(jù)和新奇偶檢驗數(shù)據(jù)通過數(shù)據(jù)路徑控制器13被傳送到驅(qū)動器。
在這個數(shù)據(jù)傳送時,冗余編碼生成器13a從用戶數(shù)據(jù)和奇偶檢驗數(shù)據(jù)產(chǎn)生用戶數(shù)據(jù)和奇偶檢驗數(shù)據(jù)的每個的冗余編碼。接著,通過執(zhí)行從用戶數(shù)據(jù)產(chǎn)生的冗余編碼和DC緩沖器15d中的DC值的XOR操作而獲得的值被作為新冗余編碼加到用戶數(shù)據(jù)上,而通過執(zhí)行從奇偶檢驗數(shù)據(jù)產(chǎn)生的冗余編碼和DC緩沖器15d中的DC值的XOR操作而獲得的值被作為新冗余編碼加到奇偶檢驗數(shù)據(jù)上(步驟225)。附帶地,當(dāng)產(chǎn)生要加到用戶數(shù)據(jù)上的冗余編碼時,只參考用戶數(shù)據(jù)的DC值,并且當(dāng)產(chǎn)生要加到奇偶檢驗數(shù)據(jù)上的冗余編碼時,參考對應(yīng)于奇偶檢驗數(shù)據(jù)的所有用戶數(shù)據(jù)的DC值。
如上所述完成實施例的該方面的操作。附帶地,基于實施例的該方面,逐個扇區(qū)地執(zhí)行升級處理,并且逐個片段地執(zhí)行降級處理。然而,也可以按照由相同盤中多個扇區(qū)構(gòu)成的條(strip)來執(zhí)行升級處理,并且按照作為多個片段的集合的條來執(zhí)行降級處理。
此外,基于實施例的該方面,通過執(zhí)行冗余編碼和DC值的XOR操作把DC值加到扇區(qū)數(shù)據(jù)上。然而,DC值能夠通過嵌入除了冗余編碼之外的部分中而被加到扇區(qū)數(shù)據(jù)上。另外,作為嵌入DC值的方法,也可以采用各種方法,而不是限于XOR操作。此外,基于實施例的該方面,用戶數(shù)據(jù)的DC值被加到對應(yīng)于用戶數(shù)據(jù)的奇偶檢驗數(shù)據(jù)上。然而,不必限于這個方面,并且例如可以采用加入到其它用戶數(shù)據(jù)上的方面。
此外,基于實施例的該方面,當(dāng)PDC值與DDC值不一致時,則檢查PDC值是否與SDC值一致。然而,當(dāng)PDC值與DDC值不一致時,可以作為下一步驟來檢查SDC值是否與DDC值一致。在這種情況下,當(dāng)SDC值與DDC值一致時,能夠判斷在主奇偶檢驗扇區(qū)中出現(xiàn)問題,并且當(dāng)SDC值與DDC值不一致時,能夠判斷在數(shù)據(jù)扇區(qū)中出現(xiàn)問題。
此外,基于實施例的該方面,當(dāng)PDC值與DDC值一致時,在假定任何地方均沒有出現(xiàn)問題的情況下執(zhí)行處理。然而,在這種情況下,可以驗證次奇偶檢驗扇區(qū)中是否出現(xiàn)問題。具體地,這是在步驟221判斷PDC值與DDC值一致,在步驟206判斷DC緩沖器15d中的PDC值與從主奇偶檢驗扇區(qū)讀取的PDC值不一致,及在步驟208判斷PDC值未驗證的情況。在這種情況下,也可以通過讀取次奇偶檢驗數(shù)據(jù)并且比較從次奇偶檢驗數(shù)據(jù)獲得的SDC值與DC緩沖器15d中的PDC值來檢測問題的出現(xiàn)。此外,也可以在檢測到問題出現(xiàn)時執(zhí)行恢復(fù)處理。
此外,也可以采用同時比較PDC值,SDC值和DDC值的方面。在這種情況下,當(dāng)3個值中只有一個值不同于其余兩個值時,可以判斷獲得該值的扇區(qū)出現(xiàn)問題。
如上所述,基于實施例的該方面,要結(jié)合用戶數(shù)據(jù)的更新而被更新的DC被加到用戶數(shù)據(jù)上,并且作為比較對象的DC值被加到在存儲用戶數(shù)據(jù)時有必要存儲的數(shù)據(jù)(例如,用戶數(shù)據(jù)的奇偶檢驗數(shù)據(jù))上。通過采用這種結(jié)構(gòu),無需消耗驅(qū)動器容量便可避免存儲子系統(tǒng)返回不準(zhǔn)確數(shù)據(jù)到主機(jī)系統(tǒng)的問題。
此外,作為比較對象的DC值被加到數(shù)據(jù)(例如,用戶數(shù)據(jù)的奇偶檢驗數(shù)據(jù))上,并且與用戶數(shù)據(jù)的寫/讀同步地執(zhí)行其寫/讀。通過采用這種結(jié)構(gòu),不影響從驅(qū)動器讀取的性能便可避免存儲子系統(tǒng)返回不準(zhǔn)確數(shù)據(jù)到主機(jī)系統(tǒng)的問題。
基于本發(fā)明,無需消耗驅(qū)動器的容量便可以避免存儲子系統(tǒng)把不準(zhǔn)確數(shù)據(jù)返回到主機(jī)系統(tǒng)的問題。
雖然已經(jīng)詳細(xì)描述了本發(fā)明的優(yōu)選實施例,但應(yīng)當(dāng)理解,在不偏離本發(fā)明如所附權(quán)利要求書定義的宗旨和范圍的前提下,可以對其進(jìn)行各種變化,替換和轉(zhuǎn)換。
權(quán)利要求
1.一種用于檢測存儲器中的任何差錯數(shù)據(jù)的設(shè)備,包括添加單元,用于把結(jié)合要存儲在存儲器的第一扇區(qū)中的數(shù)據(jù)的更新而更新的歷史信息加入到該數(shù)據(jù)上,并且加入到要存儲在存儲器的第二扇區(qū)中的數(shù)據(jù)上;以及驗證單元,用于通過在已經(jīng)被加到第一扇區(qū)中存儲的該數(shù)據(jù)上的歷史信息和已經(jīng)被加到第二扇區(qū)中存儲的該數(shù)據(jù)上的歷史信息之間進(jìn)行比較,來驗證第一扇區(qū)中存儲的該數(shù)據(jù)和第二扇區(qū)中存儲的該數(shù)據(jù)。
2.如權(quán)利要求1所述的單元,其中添加單元把根據(jù)要存儲在第一扇區(qū)的數(shù)據(jù)的更新而更新的歷史信息嵌入檢測數(shù)據(jù)的錯誤的冗余編碼中,并且嵌入檢測要存儲在第二扇區(qū)的數(shù)據(jù)的錯誤的冗余編碼中。
3.如權(quán)利要求1所述的單元,其中根據(jù)對第一扇區(qū)的訪問執(zhí)行對第二扇區(qū)的訪問。
4.如權(quán)利要求1所述的單元,其中檢測要存儲在第一扇區(qū)的數(shù)據(jù)的錯誤的奇偶檢驗被存儲在第二扇區(qū)中。
5.如權(quán)利要求1所述的單元,其中添加單元把根據(jù)要存儲在第一扇區(qū)的數(shù)據(jù)的更新而更新的歷史信息加入到要存儲在存儲器的第三扇區(qū)的數(shù)據(jù)上;并且驗證單元通過比較加入到分別存儲在第一扇區(qū),第二扇區(qū)和第三扇區(qū)的數(shù)據(jù)上的每個歷史信息,驗證分別被存儲在第一扇區(qū),第二扇區(qū)和第三扇區(qū)中的數(shù)據(jù)。
6.如權(quán)利要求5所述的單元,還包括指定單元,用于將被加到第一扇區(qū),第二扇區(qū)和第三扇區(qū)中分別存儲的數(shù)據(jù)上的歷史信息中唯一一個不同于其它歷史信息的歷史信息所被加入到的數(shù)據(jù),指定為不準(zhǔn)確數(shù)據(jù)。
7.一種用于在存儲以分布方式同步處理的多個數(shù)據(jù)的多個存儲器中檢測不準(zhǔn)確數(shù)據(jù)的方法,包括步驟把結(jié)合多個數(shù)據(jù)中的一個數(shù)據(jù)的更新而更新的歷史信息加入到該一個數(shù)據(jù)上,并且加入到該多個數(shù)據(jù)中的另一個數(shù)據(jù)上;把該一個數(shù)據(jù)寫入到存儲器的第一扇區(qū),并且把該另一個數(shù)據(jù)寫入到存儲器的第二扇區(qū);讀取第一扇區(qū)中存儲的數(shù)據(jù)和第二扇區(qū)中存儲的數(shù)據(jù);以及通過比較分別加入到兩個讀取數(shù)據(jù)的歷史信息來驗證該兩個數(shù)據(jù)。
8.如權(quán)利要求7所述的方法,其中在加入步驟中,將根據(jù)要存儲在第一扇區(qū)的數(shù)據(jù)的更新而更新的歷史信息嵌入檢測該一個數(shù)據(jù)的錯誤的冗余編碼中,并且嵌入檢測該另一個數(shù)據(jù)的錯誤的冗余編碼。
9.如權(quán)利要求7所述的方法,其中檢測要存儲在第一扇區(qū)的數(shù)據(jù)的錯誤的奇偶檢驗被存儲在第二扇區(qū)中。
10.如權(quán)利要求7所述的方法,其中在加入步驟,歷史信息被加到該多個數(shù)據(jù)中的又一個數(shù)據(jù)上;在寫入步驟,該又一個數(shù)據(jù)被寫入存儲器的第三扇區(qū)中;以及在讀取步驟,讀取被存儲在第三扇區(qū)的數(shù)據(jù);當(dāng)加入到第一扇區(qū)中存儲的數(shù)據(jù)上的歷史信息與加入到第二扇區(qū)中存儲的數(shù)據(jù)上的歷史信息不一致時,通過比較加入到第一和第二扇區(qū)中存儲的數(shù)據(jù)上的任何一個歷史信息和加入到第三扇區(qū)中存儲的數(shù)據(jù)上的歷史信息,驗證分別被存儲在第一扇區(qū),第二扇區(qū)和第三扇區(qū)中的數(shù)據(jù)。
11.一種程序產(chǎn)品,用于允許連接到存儲器的計算機(jī)實現(xiàn)從第一數(shù)據(jù)中獲得結(jié)合要存儲在存儲器的第一扇區(qū)的第一數(shù)據(jù)的更新而更新的第一歷史信息,以及從第二數(shù)據(jù)中獲得結(jié)合要存儲在存儲器的第二扇區(qū)的第二數(shù)據(jù)的更新而更新的第二歷史信息的功能;以及通過比較第一歷史信息和第二歷史信息,驗證第一數(shù)據(jù)或第二數(shù)據(jù)的功能。
12.如權(quán)利要求11所述的程序產(chǎn)品,用于允許計算機(jī)進(jìn)一步實現(xiàn)當(dāng)?shù)谝粩?shù)據(jù)或第二數(shù)據(jù)被更新時,如果第一歷史信息與第二歷史信息一致,則更新第一歷史信息并且把它加入到第一數(shù)據(jù)的功能,以及更新第二歷史信息并且把它加入到第二數(shù)據(jù)的功能。
13.如權(quán)利要求11所述的程序產(chǎn)品,其中通過獲得第一歷史信息的功能,從檢測第一數(shù)據(jù)的錯誤的冗余編碼中獲得第一歷史信息;并且通過獲得第二歷史信息的功能,從檢測第二數(shù)據(jù)的錯誤的冗余編碼中獲得第二歷史信息。
14.如權(quán)利要求11所述的程序產(chǎn)品,其中第二數(shù)據(jù)是檢測第一數(shù)據(jù)的錯誤的奇偶檢驗。
15.如權(quán)利要求11所述的程序產(chǎn)品,用于允許計算機(jī)進(jìn)一步實現(xiàn)從第三數(shù)據(jù)中獲得根據(jù)存儲器的第三扇區(qū)中存儲的第三數(shù)據(jù)的更新而更新的第三歷史信息的功能;以及當(dāng)?shù)谝粴v史信息與第二歷史信息不一致時,通過比較第一歷史信息或第二歷史信息和第三歷史信息,驗證第一數(shù)據(jù),第二數(shù)據(jù)和第三數(shù)據(jù)的功能。
全文摘要
當(dāng)數(shù)據(jù)通過后端I/F單元從盤驅(qū)動器傳送到一個高速緩存時,數(shù)據(jù)路徑控制器的冗余編碼驗證器比較嵌入數(shù)據(jù)的冗余編碼的寫入歷史信息(DC值)和嵌入對應(yīng)奇偶檢驗的冗余編碼的DC值,從而驗證數(shù)據(jù)是否不準(zhǔn)確。另外,在數(shù)據(jù)被更新的情況下,冗余編碼驗證器在要用于產(chǎn)生奇偶檢驗的舊數(shù)據(jù)被讀取時進(jìn)行類似驗證。當(dāng)數(shù)據(jù)不是不準(zhǔn)確時,數(shù)據(jù)路徑控制器的冗余編碼生成器向新數(shù)據(jù)和奇偶檢驗加入已經(jīng)嵌入新DC值的冗余編碼。并且,當(dāng)數(shù)據(jù)不準(zhǔn)確時,控制器通過前端I/F單元向主機(jī)系統(tǒng)通知問題的出現(xiàn)。
文檔編號G06F11/00GK1808611SQ200510127040
公開日2006年7月26日 申請日期2005年11月29日 優(yōu)先權(quán)日2004年12月2日
發(fā)明者寺下善彥, 住吉徹, 三好浩之 申請人:國際商業(yè)機(jī)器公司