(57)【要約】  【課題】  記憶容量を消費せず、読出しパフォーマンスに影響を与えずに、ストレージサブシステムがホストシステムに不正データを返す問題を回避する。  【解決手段】  ディスクドライブ１６１〜１６ｎからバックエンドＩ/Ｆ部１４を介してデータをキャッシュ部１５に転送する際、データパス制御部１３の冗長コード検証部１３ｂが、そのデータの冗長コードに埋め込まれた書込み履歴情報(ＤＣ値)と、対応するパリティの冗長コードに埋め込まれたＤＣ値とを比較し、不正データかどうか検証する。また、データの更新時には、パリティを作成するための旧データの読出し時に同様の検証を行い、不正データでなければ、データパス制御部１３の冗長コード生成部１３ａが、新たなＤＣ値を埋め込んだ冗長コードを新データ及びパリティに付加する。一方、不正データの場合、コントロール部１１は、問題の発生をフロントエンドＩ/Ｆ部１２を介してホストシステムに通知する。  【選択図】  図５
2006164319.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置上の不正データを検出するための装置であって、
前記記憶装置の第１のセクタに記憶されるべきデータの更新に伴って更新される履歴情報を、当該データと、前記記憶装置の第２のセクタに記憶されるべきデータとに付加する付加手段と、
前記第１のセクタに記憶されているデータに付加された履歴情報と、前記第２のセクタに記憶されているデータに付加された履歴情報とを照合することにより、当該第１のセクタに記憶されているデータ及び当該第２のセクタに記憶されているデータを検証する検証手段と
を備えた、装置。
【請求項２】
前記付加手段は、前記第１のセクタに記憶されるべきデータの更新に伴って更新される履歴情報を、当該データの誤りを検出するための冗長コード及び前記第２のセクタに記憶されるべきデータの誤りを検出するための冗長コードに埋め込む、請求項１記載の装置。
【請求項３】
前記第１のセクタへのアクセスに伴って、前記第２のセクタへのアクセスが行われる、請求項１記載の装置。
【請求項４】
前記第１のセクタに記憶されるデータの誤りを検出するためのパリティが、前記第２のセクタに記憶される、請求項１記載の装置。
【請求項５】
前記付加手段は、前記記憶装置の第３のセクタに記憶されるべきデータに前記第１のセクタに記憶されるべきデータの更新に伴って更新される履歴情報を付加し、
前記検証手段は、前記第１のセクタ、前記第２のセクタ、前記第３のセクタにそれぞれ記憶されているデータに付加された履歴情報を照合することにより、当該第１のセクタ、当該第２のセクタ、当該第３のセクタにそれぞれ記憶されているデータを検証する、請求項１記載の装置。
【請求項６】
前記第１のセクタ、前記第２のセクタ、前記第３のセクタにそれぞれ記憶されているデータに付加された履歴情報のうち、１つだけ異なる履歴情報が付加されたデータを、不正データとして特定する特定手段を更に備えた、請求項５記載の装置。
【請求項７】
同期して処理される複数のデータを分散して記憶する複数の記憶装置上の不正データを検出するための方法であって、
前記複数のデータのうち一のデータの更新に伴って更新される履歴情報を、当該一のデータと、前記複数のデータのうちの他のデータに付加するステップと、
前記一のデータを前記記憶装置の第１のセクタに書き込み、前記他のデータを前記記憶装置の第２のセクタに書き込むステップと、
前記第１のセクタに記憶されているデータと前記第２のセクタに記憶されているデータとを読み出すステップと、
読み出された２つのデータにそれぞれ付加された履歴情報を照合することにより、当該２つのデータを検証するステップと
を含む、方法。
【請求項８】
前記付加するステップでは、前記一のデータの更新に伴って更新される履歴情報を、当該一のデータの誤りを検出するための冗長コード及び前記他のデータの誤りを検出するための冗長コードに埋め込む、請求項７記載の方法。
【請求項９】
前記第１のセクタに記憶されるデータの誤りを検出するためのパリティが、前記第２のセクタに記憶される、請求項７記載の方法。
【請求項１０】
前記付加するステップでは、前記複数のデータのうちの更に他のデータに前記履歴情報を付加し、
前記書き込むステップでは、前記更に他のデータを前記記憶装置の第３のセクタに書き込み、
前記読み出すステップでは、前記第３のセクタに記憶されているデータを読み出し、
前記第１のセクタに記憶されているデータに付加された履歴情報と前記第２のセクタに記憶されているデータに付加された履歴情報とが整合しない場合に、これらの履歴情報のいずれかと前記第３のセクタに記憶されているデータに付加された履歴情報とを照合することにより、前記第１のセクタ、前記第２のセクタ、前記第３のセクタにそれぞれ記憶されているデータを検証する、請求項７記載の方法。
【請求項１１】
記憶装置に接続されたコンピュータに、
前記記憶装置の第１のセクタに記憶された第１のデータの更新に伴って更新される第１の履歴情報を当該第１のデータから取得し、前記記憶装置の第２のセクタに記憶された第２のデータの更新に伴って更新される第２の履歴情報を当該第２のデータから取得する機能と、
前記第１の履歴情報と前記第２の履歴情報とを照合することにより、前記第１のデータ又は前記第２のデータを検証する機能と
を実現させるためのプログラム。
【請求項１２】
前記コンピュータに、
前記第１のデータ又は前記第２のデータを更新する際に、前記第１の履歴情報と前記第２の履歴情報とが整合していれば、当該第１の履歴情報を更新して当該第１のデータに付加し、当該第２の履歴情報を更新して当該第２のデータに付加する機能を更に実現させる、請求項１１記載のプログラム。
【請求項１３】
前記第１の履歴情報を取得する機能では、前記第１のデータの誤りを検出するための冗長コードから当該第１の履歴情報を取得し、
前記第２の履歴情報を取得する機能では、前記第２のデータの誤りを検出するための冗長コードから当該第２の履歴情報を取得する、請求項１１記載のプログラム。
【請求項１４】
前記第２のデータは、前記第１のデータの誤りを検出するためのパリティである、請求項１１記載のプログラム。
【請求項１５】
前記コンピュータに、
前記記憶装置の第３のセクタに記憶された第３のデータの更新に伴って更新される第３の履歴情報を当該第３のデータから取得する機能と、
前記第１の履歴情報と前記第２の履歴情報とが整合しない場合に、当該第１の履歴情報又は当該第２の履歴情報と前記第３の履歴情報とを照合することにより、前記第１のデータ、前記第２のデータ、前記第３のデータを検証する機能と
を更に実現させる、請求項１１記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、書き込むべきアドレスの誤りによって発生した、記憶装置上の不正データを検出するための装置等に関する。
【背景技術】
【０００２】
ストレージサブシステムがホストシステムからのＲＥＡＤコマンドに対して不正なデータを返すことは、ユーザデータの喪失のみならず、システムダウン等の重大な障害を発生させる原因となる。このため、一般に、ストレージサブシステムでは、パリティ、ＥＣＣ(Error Correcting Code)、ＣＲＣ(Cyclic Redundancy Check)コード等の冗長データを各データに付加し、各データの読み出し時にその冗長データを検査することにより、不正なデータがホストシステムに返されることを防いでいる。
例えば、ミドルレンジ以上のＲＡＩＤサブシステムでは、キャッシュからディスクドライブへの書込み(デステージング)に際して、ユーザデータの最小単位である５１２バイトのセクタデータに対して８から１６バイトの冗長コードを付加する。そして、ディスクドライブからキャッシュへの読込み(ステージング)に際して、この冗長コードを検査するようにしている。これにより、ＲＡＩＤコントローラのバックエンドインターフェース以降のデータパスにおけるエラー検出を行っている。尚、この場合、冗長コードは、５１２バイトのセクタデータから一意に求められるデータであり、ＬＲＣ(Longitudinal Redundancy Check)やＣＲＣ(Cyclical Redundancy Check)等に基づくコードが一般的に使用されている。
【０００３】
ところで、実際のディスクドライブへの書込みにおいては、振動等の外因によりヘッドシークに一時的な異常が発生し、ドライブがＷＲＩＴＥ要求で指定されたＬＢＡ(Logical Block Address)とは異なるＬＢＡにデータを書き込む場合がある。しかし、このような場合、上記の冗長コードでは、ストレージサブシステム側でこの書込み位置の誤りを検知できないことがある。
このことを、図８を参照して、具体的に説明する。
図示するように、ＬＢＡ１に、セクタデータ１(５１２バイト)とこれに対する冗長コードであるＬＲＣ１とが記憶され、ＬＢＡ２に、セクタデータ２(５１２バイト)とこれに対する冗長コードであるＬＲＣ２とが記憶されているものとする。このような状況において、手順１で、ＬＢＡ１からセクタデータ１及びＬＲＣ１を読み込み、手順２で、ＬＲＣ１を検査する。そして、その結果、セクタデータ１とＬＲＣ１との整合がとれていれば、手順３で、セクタデータ１を修正し、手順４で、新たなＬＲＣ(ＬＲＣ１’)を計算し、手順５で、修正後のセクタデータ１’及びＬＲＣ１’をＬＢＡ１に書き込むことになる。
【０００４】
ところが、図示するように、ドライブのシークエラー等により、ＬＢＡ１に書き込むべきデータがＬＢＡ２に書き込まれたとする。即ち、ＬＢＡ１には、本来、手順５で上書きされるはずであったセクタデータ１及びＬＲＣ１が記憶されたままになっているとする。
このような状況において、手順６で、ＬＢＡ１からセクタデータ１及びＬＲＣ１を読み込み、手順７で、ＬＲＣ１を検査すると、セクタデータ１とＬＲＣ１との整合はとれていると判断されることになる。即ち、手順６で本来返されるべきではない不正なデータが返されたにもかかわらず、手順７でそのことが検出できないのである。
また、このような状況において、図示しないが、ＬＢＡ２からセクタデータ１’及びＬＲＣ１’を読み込んだとする。この場合も、本来ＬＢＡ１に書き込まれるはずであったデータが読み出され、しかも、セクタデータ１’とＬＲＣ１’との整合はとれているので、書込み位置の誤りは検出できないのである。
このようにして、ストレージサブシステムがホストシステムからのＲＥＡＤコマンドに対して不正なデータを返してしまうという問題(以下、「本問題」という)が発生する。
【０００５】
そこで、本問題に対し、ＬＢＡ情報を冗長コードに含めることにより、ドライブが誤ったアドレスからデータを読み出したことを検知できるようにすることもある。この方法を採用すれば、書き込むべきＬＢＡと実際に書込みが行われたＬＢＡとが異なるデータについては、誤りを検出することが可能である。図８の例で言えば、手順５の後にＬＢＡ２からデータを読み込もうとした場合である。
しかしながら、この方法を採用しても、手順５の後にＬＢＡ１からデータを読み込もうとした場合には、誤りを検出することはできない。なぜなら、手順５で上書きされるはずであったが実際には上書きされなかったデータの冗長コードには、ＬＢＡ１の情報が含まれるためである。従って、かかる方法を採用した場合も、本問題が発生する可能性は依然として残されている。
【０００６】
本問題の発生を検知する従来技術としては、ディクスドライブ装置やホストシステムが、データの書込み時に、書込み履歴情報をそのデータ及びディスク内の別の場所に記録しておき、データの読込み時に、それらの記録された書込み履歴情報を比較検証する方法があった(例えば、特許文献１参照。)。
【０００７】
【特許文献１】特開２００１−３３８４６８号公報(第５−６頁、第５−６図)
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１の発明では、書込み履歴をセクタデータとは無関係な場所に保存することとなり、ドライブの容量を消費するという問題点がある。また、セクタデータとは別に書込み履歴を読み出す必要があるため、読出しパフォーマンスに影響を与えるという問題点もある。
【０００９】
本発明は、以上のような技術的課題を解決するためになされたものであって、その目的は、ドライブの容量を消費することなく、ストレージサブシステムがホストシステムに対して不正なデータを返してしまうという問題を回避することにある。
また本発明の他の目的は、ドライブからの読出しパフォーマンスに影響を与えることなく、ストレージサブシステムがホストシステムに対して不正なデータを返してしまうという問題を回避することにある。
【課題を解決するための手段】
【００１０】
かかる目的のもと、本発明では、あるセクタデータについての書込み履歴を他のセクタデータに付加して読出し時にそれらを検証するようにしている。即ち、本発明の装置は、記憶装置上の不正データを検出するためのものであり、記憶装置の第１のセクタに記憶されるべきデータの更新に伴って更新される履歴情報を、そのデータと、記憶装置の第２のセクタに記憶されるべきデータとに付加する付加手段と、第１のセクタに記憶されているデータに付加された履歴情報と、第２のセクタに記憶されているデータに付加された履歴情報とを照合することにより、第１のセクタに記憶されているデータ及び第２のセクタに記憶されているデータを検証する検証手段とを備えている。
【００１１】
また、本発明は、あるセクタデータについての書込み履歴を他のセクタデータに付加して読出し時にそれらを検証する方法として捉えることもできる。その場合、本発明の方法は、同期して処理される複数のデータを分散して記憶する複数の記憶装置上の不正データを検出するためのものであり、複数のデータのうち一のデータの更新に伴って更新される履歴情報を、その一のデータと、複数のデータのうちの他のデータに付加するステップと、その一のデータを記憶装置の第１のセクタに書き込み、他のデータを記憶装置の第２のセクタに書き込むステップと、第１のセクタに記憶されているデータと第２のセクタに記憶されているデータとを読み出すステップと、読み出された２つのデータにそれぞれ付加された履歴情報を照合することにより、その２つのデータを検証するステップとを含んでいる。
【００１２】
一方、本発明は、コンピュータに所定の機能を実現させるプログラムとして捉えることもできる。その場合、本発明のプログラムは、記憶装置に接続されたコンピュータに、記憶装置の第１のセクタに記憶された第１のデータの更新に伴って更新される第１の履歴情報をその第１のデータから取得し、記憶装置の第２のセクタに記憶された第２のデータの更新に伴って更新される第２の履歴情報をその第２のデータから取得する機能と、第１の履歴情報と第２の履歴情報とを照合することにより、第１のデータ又は第２のデータを検証する機能とを実現させるものである。
【発明の効果】
【００１３】
本発明によれば、ドライブの容量を消費することなく、ストレージサブシステムがホストシステムに対して不正なデータを返してしまうという問題を回避することができるようになる。
【発明を実施するための最良の形態】
【００１４】
以下、添付図面を参照して、本発明を実施するための最良の形態(以下、「実施の形態」という)について詳細に説明する。
本実施の形態は、ＲＡＩＤ５等のパリティによるデータプロテクションを行うディスクアレイシステムに本発明を適用したものである。このようなディスクアレイシステムでは、ホストシステムから送られたデータをセクタの大きさで区切ることによって得られる複数のセクタデータ(以下、「ユーザデータ」という)と、これらのユーザデータの不正を検出し修復するためのセクタデータ(以下、「パリティデータ」という)とが、複数のディスクに分散して記録される。また、ユーザデータが記録されるセクタ(以下、「データセクタ」という)には、そのユーザデータが正しいかどうかを検査するための冗長コードを記録す領域が付随して設けられ、パリティデータが記録されるセクタ(以下、「パリティセクタ」という)には、そのパリティデータが正しいかどうかを検査するための冗長コードを記録する領域が付随して設けられている。
【００１５】
本実施の形態では、このようなディスクアレイシステムの構成に着目し、ユーザデータの更新に伴って更新される書込み履歴情報を、そのユーザデータが記録されるデータセクタの冗長コード領域と、そのユーザデータに対するパリティデータが記録されるパリティセクタの冗長コード領域とに設けるようにしている。
ここで、書込み履歴情報としては、いかなる情報を採用してもよいが、本実施の形態では、ユーザデータの更新時に１インクリメントされるカウンタを採用することとする。その場合、書込み履歴情報は、ユーザデータのデステージングの回数を示すカウンタとして把握することができるので、以下では、そのようなカウンタをＤＣ(Destaging Counter)と呼び、ＤＣに設定された値のことをＤＣ値と呼ぶこととする。
【００１６】
次に、図１及び図２を参照しながら、本実施の形態で想定するＲＡＩＤの構成におけるユーザデータ、パリティデータ、ＤＣ値の配置について詳しく説明する。
尚、本実施の形態では、便宜上、データセクタの冗長コード領域に設けられるＤＣをＤＤＣ(Data DC)と称し、ＤＤＣに設定された値をＤＤＣ値と称する。
また、着目するユーザデータに関連付けられたパリティデータの中から、第１優先のパリティデータ(プライマリパリティデータ)及び第２優先のパリティデータ(セカンダリパリティデータ)を決めておく。そして、プライマリパリティデータが記録されたパリティセクタ(プライマリパリティセクタ)の冗長コード領域に設けられたＤＣをＰＤＣ(Primary DC)と称し、ＰＤＣに設定された値をＰＤＣ値と称する。一方、セカンダリパリティデータが記録されたパリティセクタ(セカンダリパリティセクタ)の冗長コード領域に設けられたＤＣをＳＤＣ(Secondary DC)と称し、ＳＤＣに設定された値をＳＤＣ値と称する。
【００１７】
例えば、ＲＡＩＤ５等であれば、着目するユーザデータが記録されたデータセクタと同一スライスに存在するパリティセクタをプライマリパリティセクタとし、その冗長コード領域に保持されるＤＣをＰＤＣとする。そして、着目するユーザデータが記録されたデータセクタと異なるスライスに存在するパリティセクタをセカンダリパリティセクタとし、その冗長コード領域に保持されるＤＣをＳＤＣとすることが考えられる。
また、ＲＡＩＤ５０等であれば、ミラーリングされたスライスの一方に存在するパリティセクタをプライマリパリティセクタとし、その冗長コード領域に保持されるＤＣをＰＤＣとする。そして、ミラーリングされたスライスの他方に存在するパリティセクタをセカンダリパリティセクタとし、その冗長コード領域に保持されるＤＣをＳＤＣとすることが考えられる。
【００１８】
図１は、ＲＡＩＤ５構成について示した図である。
図１では、３つのディスクが用意され、各ディスクには、５１２バイトのセクタデータ領域と、４〜１６バイトの冗長コード領域とが設けられている。そして、任意に選択された２つのスライスに、図示するように、ユーザデータ(図では、「データ」と表記)、パリティデータ(図では、「パリティ」と表記)、ＤＤＣ値(図では、「ＤＤＣ」と表記)、ＰＤＣ値(図では、「ＰＤＣ」と表記)、ＳＤＣ値(図では、「ＳＤＣ」と表記)を保持する。即ち、ユーザデータ１−１、１−２、２−１、２−２が記録されたデータセクタの冗長コード領域には、各ユーザデータのＤＣ値であるＤＤＣ１−１、１−２、２−１、２−２が保持されている。また、パリティデータ１は、ユーザデータ１−１、１−２にとってのプライマリパリティデータであると共に、ユーザデータ２−１、２−２にとってのセカンダリパリティデータである。従って、パリティデータ１が記録されたパリティセクタの冗長コード領域には、ＤＤＣ１−１、１−２に対応するＰＤＣ１−１、１−２が保持されると共に、ＤＤＣ２−１、２−２に対応するＳＤＣ２−１、２−２が保持されている。一方、パリティデータ２は、ユーザデータ２−１、２−２にとってのプライマリパリティデータであると共に、ユーザデータ１−１、１−２にとってのセカンダリパリティデータである。従って、パリティデータ２が記録されたパリティセクタの冗長コード領域には、ＤＤＣ２−１、２−２に対応するＰＤＣ２−１、２−２が保持されると共に、ＤＤＣ１−１、１−２に対応するＳＤＣ１−１、１−２が保持されている。
【００１９】
また、図２は、ＲＡＩＤ５０構成について示した図である。
図２でも、図１と同様、３つのディスクが用意され、各ディスクには、図示しないが、５１２バイトのセクタデータ領域と、４〜１６バイトの冗長コード領域とが設けられている。そして、このＲＡＩＤ５０構成は、ＲＡＩＤ５構成をミラーリングしたものであり、ディスク１、２、３に記録されたデータは、それぞれ、ディスク４、５、６にも記録されるようになっている。そして、このミラーリングされたスライスに、図示するように、ユーザデータ(図では、「データ」と表記)、パリティデータ(図では、「パリティ」と表記)、ＤＤＣ値(図では、「ＤＤＣ」と表記)、ＰＤＣ値(図では、「ＰＤＣ」と表記)、ＳＤＣ値(図では、「ＳＤＣ」と表記)を保持する。即ち、ユーザデータ１、２が記録されたデータセクタの冗長コード領域には、各ユーザデータのＤＣ値であるＤＤＣ１、２が保持されている。また、ディスク３に記録されるパリティデータは、ユーザデータ１、２にとってのプライマリパリティデータであるので、このパリティデータが記録されたパリティセクタの冗長コード領域には、ＤＤＣ１、２に対応するＰＤＣ１、２が保持されている。一方、ディスク６に記録されるパリティデータは、ユーザデータ１、２にとってのセカンダリパリティデータであるので、このパリティデータが記録されたパリティセクタの冗長コード領域には、ＤＤＣ１、２に対応するＳＤＣ１、２が保持されている。
【００２０】
次に、図３を参照しながら、冗長コード領域へのＤＣ値の格納方法について説明する。尚、図３は、図１のＲＡＩＤ５の構成におけるＤＣ値の格納方法を示している。
既に述べたように、各ユーザデータのＤＣ値は、そのユーザデータの冗長コード(ＲＣｘ)、及び、そのユーザデータに対応するパリティデータの冗長コード(ＲＣｐｘ)として、各セクタの冗長コード領域に格納される。具体的には、まず、ＲＣＧ(Redundant Code Generator)が、既存の手法により各セクタデータから冗長コードを生成する。そして、この生成された冗長コードと格納すべきＤＣ値とをＸＯＲ演算して得られる新たな冗長コードが各セクタの冗長コード領域に格納される。
【００２１】
例えば、ユーザデータ２−１の冗長コードＲＣ２−１にＤＣ値を格納する場合は、次のようになる。
まず、ＲＣＧが、ユーザデータ２−１から従来の手法により冗長コードＲＣ２−１−を生成する。そして、ＸＯＲ演算器がＲＣ２−１−とＤＣ２−１とをＸＯＲ演算することにより新たな冗長コードＲＣ２−１を求め、この冗長コードが冗長コード領域に格納される。
また、パリティデータ２の冗長コードＲＣｐ２にＤＣ値を格納する場合は、次のようになる。
まず、ＲＣＧが、パリティデータ２から従来の手法により冗長コードＲＣｐ２−を生成する。そして、ＸＯＲ演算器がＲＣｐ２−と、ＤＣ２−１、２−２、１−１、１−２からなるビット列とをＸＯＲ演算することにより新たな冗長コードＲＣｐ２を求め、この冗長コードが冗長コード領域に格納される。
更に、ユーザデータ２−２の冗長コードＲＣ２−２へのＤＣ値の格納も、ユーザデータ２−１の場合と同様にして行われる。
【００２２】
次に、このようなＤＣ値を含む冗長コードの生成及び検証を行うストレージサブシステムの構成及び動作の例について詳細に説明する。
図４は、このようなストレージサブシステムとして用いるのに好適なコンピュータのハードウェア構成の例を模式的に示した図である。
図４に示すコンピュータは、演算手段であるＣＰＵ(Central Processing Unit)１０ａと、Ｍ/Ｂ(マザーボード)チップセット１０ｂ及びＣＰＵバスを介してＣＰＵ１０ａに接続されたメインメモリ１０ｃと、同じくＭ/Ｂチップセット１０ｂ及びＡＧＰ(Accelerated Graphics Port)を介してＣＰＵ１０ａに接続されたビデオカード１０ｄ及びディスプレイ１０ｊとを備える。また、ＰＣＩ(Peripheral Component Interconnect)バスを介してＭ/Ｂチップセット１０ｂに接続された磁気ディスク装置(ＨＤＤ)１０ｅと、ネットワークインターフェース１０ｇとを備える。更に、このＰＣＩバスからブリッジ回路１０ｆ及びＩＳＡ(Industry Standard Architecture)バス等の低速なバスを介してＭ/Ｂチップセット１０ｂに接続されたフレキシブルディスクドライブ１０ｈとキーボード/マウス１０ｉとを備える。
【００２３】
尚、図４は本実施の形態を実現するコンピュータのハードウェア構成を例示するに過ぎず、本実施の形態を適用可能であれば、他の種々の構成を取ることができる。例えば、ビデオカード１０ｄを設ける代わりに、ビデオメモリのみを搭載し、ＣＰＵ１０ａにてイメージデータを処理する構成としてもよいし、外部記憶装置として、ＡＴＡ(AT Attachment)やＳＣＳＩ(Small Computer System Interface)等のインターフェースを介してＣＤ−Ｒ(Compact Disc Recordable)やＤＶＤ−ＲＡＭ(Digital Versatile Disc Random Access Memory)のドライブを設けてもよい。
【００２４】
図５は、本実施の形態におけるストレージサブシステムの構成を示した図である。このストレージサブシステムは、コントロール部１１と、フロントエンドインターフェース部(以下、「フロントエンドＩ/Ｆ部」という)１２と、データパス制御部１３と、バックエンドインターフェース部(以下、「バックエンドＩ/Ｆ部」という)１４と、キャッシュ部１５と、ディスクドライブ１６１、１６２、…、１６ｎとから構成されている。
コントロール部１１は、ストレージサブシステム全体を制御する部分である。尚、コントロール部１１は、データパス制御部１３から渡された情報に基づいて、データセクタ、プライマリパリティセクタ、セカンダリパリティセクタのうち、本問題が発生したセクタを特定する機能も有しており、この機能は「特定手段」として把握することができる。
フロントエンドＩ/Ｆ部１２は、ホストシステムとストレージサブシステムとの間のインターフェースとして機能する部分である。
【００２５】
また、データパス制御部１３は、バックエンドＩ/Ｆ部１４とキャッシュ部１５との間のデータパスを制御する部分であり、冗長コード生成部１３ａ、冗長コード検証部１３ｂ、ＤＤＣ記憶領域１３ｃ、ＳＤＣ記憶領域１３ｄ、オールドデータ記憶領域１３ｅを更に含んでいる。尚、データパス制御部１３は、冗長コード生成部１３ａにより生成された冗長コードをデータに付加する機能も有しており、この機能は「付加手段」として把握することができる。また、冗長コード検証部１３ｂは、「検証手段」として把握することができる。
バックエンドＩ/Ｆ部１４は、ストレージサブシステムとディスクドライブ１６１、１６２、…、１６ｎとの間のインターフェースとして機能する部分である。
【００２６】
更に、キャッシュ部１５は、ディスクドライブ１６１、１６２、…、１６ｎから読み込まれたユーザデータ、パリティデータ、ＤＣ値をキャッシュする部分であり、キャッシュ制御部１５ａ、ユーザデータ記憶領域１５ｂ、パリティデータ記憶領域１５ｃ、ＤＣバッファ１５ｄを更に含んでいる。
ディスクドライブ１６１、１６２、…、１６ｎは、ストレージサブシステムによる処理対象となるユーザデータ及びパリティデータを記憶するための記憶装置であり、図１のディスク１〜３、図２のディスク１〜６に相当する。
【００２７】
次に、データパス制御部１３内部の構成について説明する。
冗長コード生成部１３ａは、ドライブへのＷＲＩＴＥ要求に応じてキャッシュ部１５からバックエンドＩ/Ｆ部１４へユーザデータを転送する際に、冗長コードを計算する機能を有する。冗長コードの計算は、ＤＣバッファ１５ｄ内の該当するＤＣ値を読み出し、ユーザデータから従来の方法で求めた冗長コードとその読み出されたＤＣ値とをＸＯＲ演算することにより行う。
また、冗長コード検証部１３ｂは、ドライブへのＲＥＡＤ要求に応じてバックエンドＩ/Ｆ部１４からキャッシュ部１５へユーザデータを転送する際に、冗長コードを検証する機能を有する。冗長コードの検証は、ユーザデータから従来の方法で求めた冗長コードとドライブから読み出された冗長コードとをＸＯＲ演算することによりＤＣ値を求め、このＤＣ値とＤＣバッファ１５ｄ内のＤＣ値とを比較することにより行う。
【００２８】
ＤＤＣ記憶領域１３ｃは、ユーザデータの冗長コードから取得したＤＤＣ値を一時的に記憶する領域であり、ＳＤＣ記憶領域１３ｄは、セカンダリパリティデータの冗長コードから取得したＳＤＣ値を一時的に記憶する領域である。オールドデータ記憶領域１３ｅは、デステージングに先立って読み出された変更前のデータ(以下、「オールドデータ」という)を一時的に記憶する領域である。
【００２９】
尚、これらの機能部分は、ソフトウェアとハードウェア資源とが協働することにより実現される。具体的には、ストレージサブシステムを実現するコンピュータのＣＰＵ１０ａが、冗長コード生成部１３ａ、冗長コード検証部１３ｂの機能を実現するプログラムを外部記憶装置からメインメモリ１０ｃに読み込み、メインメモリ１０ｃ上のＤＤＣ記憶領域１３ｃ、ＳＤＣ記憶領域１３ｄ、オールドデータ記憶領域１３ｅに記憶された情報を必要に応じて参照しながら処理を行う。
【００３０】
次に、キャッシュ部１５内部の構成について説明する。
キャッシュ制御部１５ａは、ユーザデータ記憶領域１５ｂ、パリティデータ記憶領域１５ｃ、ＤＣバッファ１５ｄへの情報の出し入れ等を制御する機能を有する。例えば、ユーザデータ記憶領域１５ｂ、パリティデータ記憶領域１５ｃ、ＤＣバッファ１５ｄにどのような情報が保持されているか、及び、ＤＣバッファ１５ｄに記憶されたＤＣ値が検証済かどうかについても、キャッシュ制御部１５ａが管理する。
【００３１】
ユーザデータ記憶領域１５ｂは、ディスクドライブ１６１、１６２、…、１６ｎから読み込まれたユーザデータを記憶するための領域であり、パリティデータ記憶領域１５ｃは、ディスクドライブ１６１、１６２、…、１６ｎから読み込まれたパリティデータを記憶するための領域である。
ＤＣバッファ１５ｄは、プライマリパリティデータの冗長コードから取得したＤＣ値を、ユーザデータの冗長コードから取得したＤＣ値の比較対象として記憶しておく領域である。尚、ＤＣバッファ１５ｄに保持できるＤＣ値は、ＲＡＩＤ５等の場合であれば、ユーザデータ記憶領域１５ｂに保持できるユーザデータのブロック数の２倍であり、ＲＡＩＤ５０等の場合であれば、ユーザデータ記憶領域１５ｂに保持できるユーザデータのブロック数と同数である。また、ＤＣバッファ１５ｄは、キャッシュ部１５にユーザデータ記憶領域１５ｂを確保する時に、コントロール部１１からの要求により、キャッシュ制御部１５ａにより設定される。
【００３２】
次に、本実施の形態におけるストレージサブシステムの動作について説明する。
ストレージサブシステムにおけるＤＣ値の操作は、ディスクドライブ１６１〜１６ｎからキャッシュ部１５へのセクタデータの読込み(ステージング)の際、及び、キャッシュ部１５からディスクドライブ１６１〜１６ｎへのセクタデータの書出し(デステージング)の際に行われる。従って、以下では、ステージング時の動作と、デステージング時の動作とを分けて説明する。
【００３３】
まず、図６を参照して、ステージング時の動作を説明する。尚、図６は、１つのユーザデータをステージングする際の動作について示している。一般には、ホストシステムからのＲＥＡＤコマンドに対し、少なくとも１つのスライスに含まれる複数のユーザデータを返すことになるが、その場合は、それら複数のユーザデータの全てについて図６の動作を行うものと考えればよい。また、パリティデータは、ユーザデータが保持するＤＣ値の照合対象となるＤＣ値を保持するものであるので、図６の動作はパリティデータについては行われない。
【００３４】
まず、コントロール部１１は、ステージングを行うユーザデータのＤＣ値がＤＣバッファ１５ｄ内に存在するかどうかを判定する(ステップ１０１)。ＤＣバッファ１５ｄには、プライマリパリティデータから過去に取得したことのあるＤＣ値が格納されているので、その中に今回比較対象とすべきＤＣ値が存在するかどうかを判定するのである。
その結果、ＤＣ値がＤＣバッファ１５ｄ内に存在すると判定された場合、処理はステップ１０４へ進む。
一方、ＤＣ値がＤＣバッファ１５ｄ内に存在しないと判定された場合、コントロール部１１は、このユーザデータに対応するプライマリパリティデータの読込みをバックエンドＩ/Ｆ部１４に指示する。これに従い、バックエンドＩ/Ｆ部１４は、ドライブに対し、プライマリパリティデータのＲＥＡＤ要求を行う。そして、読み込まれたプライマリパリティデータは、データパス制御部１３を介して、キャッシュ部１５のパリティデータ記憶領域１５ｃに転送される(ステップ１０２)。
このデータ転送時に、冗長コード検証部１３ｂは、読み出されたプライマリパリティデータから冗長コードを生成する。そして、この生成された冗長コードとプライマリパリティデータに付加された冗長コードとをＸＯＲ演算することによりＰＤＣ値を取得し、これをＤＣバッファ１５ｄへ転送する(ステップ１０３)。尚、この時、ＰＤＣ値は、検証済とはしない。
【００３５】
次に、コントロール部１１は、ステージングを行うユーザデータの読込みをバックエンドＩ/Ｆ部１４に指示する。これに従い、バックエンドＩ/Ｆ部１４は、ドライブに対し、ユーザデータのＲＥＡＤ要求を行う。そして、読み込まれたユーザデータは、データパス制御部１３を介して、キャッシュ部１５のユーザデータ記憶領域１５ｂに転送される(ステップ１０４)。
このデータ転送時に、冗長コード検証部１３ｂは、読み出されたユーザデータから冗長コードを生成する。そして、この生成された冗長コードとユーザデータに付加された冗長コードとをＸＯＲ演算することによりＤＤＣ値を取得し、これをＤＣバッファ１５ｄ内のＰＤＣ値と比較する(ステップ１０５)。
【００３６】
その結果、ＰＤＣ値とＤＤＣ値とが一致した場合、ＰＤＣ値を検証済とする(ステップ１０６)。即ち、ＤＣバッファ１５ｄに記憶されたＰＤＣ値が、次回以降のＤＤＣ値との比較対象として信頼できるものであることを、キャッシュ制御部１５ａに把握させておくのである。この場合は、そのままステージング処理を完了する。
一方、ＰＤＣ値とＤＤＣ値とが一致しない場合、冗長コード検証部１３ｂは、取得したＤＤＣ値をＤＤＣ記憶領域１３ｃに一時保存し(ステップ１０８)、ＤＣ値の不一致の発生をコントロール部１１に通知する。
【００３７】
これに応じて、コントロール部１１は、ＰＤＣ値が検証済かどうかを調べる(ステップ１０９)。
その結果、ＰＤＣ値が検証済の場合、コントロール部１１は、ステップ１０４で読み込まれたユーザデータが記録されていたデータセクタにおいて本問題が発生したことを検知し、その旨をフロントエンドＩ/Ｆ部１２を介してホストシステムへ通知する(ステップ１１０)。尚、その後、自律的、もしくは、ホストシステムからの指示により復旧処理が行われるが、その手順は、通常のＲＡＩＤシステムと同様であるのでここでは言及しない。
【００３８】
一方、ＰＤＣ値が検証済でない場合、コントロール部１１は、バックエンドＩ/Ｆ部１４に対し、セカンダリパリティデータの読込みを指示する。これに従い、バックエンドＩ/Ｆ部１４は、ドライブに対し、セカンダリパリティデータのＲＥＡＤ要求を行う。そして、読み込まれたセカンダリパリティデータは、データパス制御部１３に転送される(ステップ１１１)。
このデータ転送時に、冗長コード検証部１３ｂは、読み出されたセカンダリパリティデータから冗長コードを生成する。そして、この生成された冗長コードとセカンダリパリティデータに付加された冗長コードとをＸＯＲ演算することによりＳＤＣ値を取得し、これを、ＳＤＣ記憶領域１３ｄに一時保存すると共に、ＤＣバッファ１５ｄ内のＰＤＣ値と比較する(ステップ１１２)。
【００３９】
その結果、ＰＤＣ値とＳＤＣ値とが一致した場合、冗長コード検証部１３ｂは、ＰＤＣ値を検証済みとする(ステップ１１３)。そして、ステップ１０４で読み込まれたユーザデータが記録されていたデータセクタにおいて本問題が発生したことを検知し、その旨をフロントエンドＩ/Ｆ部１２を介してホストシステムへ通知する(ステップ１１０)。尚、その後、自律的、もしくは、ホストシステムからの指示により復旧処理が行われるが、その手順は、通常のＲＡＩＤシステムと同様であるのでここでは言及しない。
一方、ＰＤＣ値とＳＤＣ値とが一致しない場合、ＳＤＣ記憶領域１３ｄに一時保存されＳＤＣ値とＤＤＣ記憶領域１３ｃに一時保存されたＤＤＣ値とを比較する(ステップ１１４)。
【００４０】
その結果、ＳＤＣ値とＤＤＣ値とが一致した場合、冗長コード検証部１３ｂは、ＤＤＣ記憶領域１３ｃに一時保存されたＤＤＣ値によってＤＣバッファ１５ｄ内のＰＤＣ値を上書きし、ＰＤＣ値を検証済とする(ステップ１１５)。そして、プライマリパリティセクタにおいて本問題が発生したことを検知し、その旨をフロントエンドＩ/Ｆ部１２を介してホストシステムへ通知する(ステップ１１６)。尚、その後、自律的、もしくは、ホストシステムからの指示により復旧処理が行われるが、その手順は、通常のＲＡＩＤシステムと同様であるのでここでは言及しない。
一方、ＳＤＣ値とＤＤＣ値とが一致しない場合、コントロール部１１は、ＰＤＣ値をＤＣバッファ１５ｄから削除する(ステップ１１７)。そして、二重障害(Double Fault)の発生を検知し、その旨をフロントエンドＩ/Ｆ部１２を介してホストシステムへ通知する(ステップ１１８)。尚、その後、自律的、もしくは、ホストシステムからの指示により復旧処理が行われるが、その手順は、通常のＲＡＩＤシステムと同様であるのでここでは言及しない。
【００４１】
次に、図７−１及び図７−２を参照して、デステージング時の動作を説明する。尚、図７−１及び図７−２は、スライス単位でデステージングする際の動作について示している。例えば、複数のユーザデータの一部しか変更しない場合であっても、その変更によってパリティデータも変更されるため、スライス単位で処理を行う必要があるのである。
【００４２】
まず、コントロール部１１は、デステージング対象のスライスに存在するプライマリパリティデータがキャッシュ部１５のパリティデータ記憶領域１５ｃに存在するかどうかを判定する(ステップ２０１)。
その結果、プライマリパリティデータがパリティデータ記憶領域１５ｃに存在すると判定された場合、処理はステップ２１１へ進む。
一方、プライマリパリティデータがパリティデータ記憶領域１５ｃに存在しないと判定された場合、コントロール部１１は、バックエンドＩ/Ｆ部１４に対し、プライマリパリティデータの読込みを指示する。これに従い、バックエンドＩ/Ｆ部１４は、ドライブに対し、プライマリパリティデータのＲＥＡＤ要求を行う。そして、読み込まれたプライマリパリティデータは、データパス制御部１３を介して、キャッシュ部１５のパリティデータ記憶領域１５ｃに転送される(ステップ２０２)。
このデータ転送時に、冗長コード検証部１３ｂは、読み出されたプライマリパリティデータから冗長コードを生成する。そして、この生成された冗長コードとプライマリパリティデータに付加された冗長コードとをＸＯＲ演算することによりＰＤＣ値を取得する(ステップ２０３)。
【００４３】
次に、コントロール部１１は、このプライマリパリティデータが記録されていたプライマリパリティセクタの冗長コード領域に保持されていたＰＤＣ値がＤＣバッファ１５ｄ内に既に存在するかどうかを判定する(ステップ２０４)。ここで、冗長コード領域に複数のＰＤＣ値が保持されていれば、それらをまとめて判定の対象とする。例えば、図１のパリティデータ１であれば、ＰＤＣ１−１、１−２がまとめて判定の対象となる。
尚、ステップ２０１でパリティデータが存在しないと判定されたにも関わらず、ステップ２０４でＰＤＣ値が存在すると判定されるのは、ＲＡＩＤ５等の場合に限られ、ＲＡＩＤ５０等の場合には、このようなことは起こらない。ＲＡＩＤ５等では、ユーザデータのＤＣ値が、異なるスライスのパリティセクタの冗長コード領域にも存在しているのに対し、ＲＡＩＤ５０等では、ユーザデータのＤＣ値が、同一のスライスのパリティセクタの冗長コード領域にしか存在しないためである。
【００４４】
ステップ２０４において、ＰＤＣ値が存在しないと判定された場合は、ステップ２０３で取得したＰＤＣ値を単にＤＣバッファ１５ｄに転送し(ステップ２０５)、ステップ２１１へ進む。この時、ＰＤＣ値は検証済としない。
一方、ＰＤＣ値が存在すると判定された場合は、ステップ２０３で取得したＰＤＣ値をＤＣバッファ１５ｄ内の対応するＰＤＣ値と比較する(ステップ２０６)。
【００４５】
その結果、ステップ２０３で取得したＰＤＣ値がＤＣバッファ１５ｄ内のＰＤＣ値と一致する場合は、ＰＤＣ値を検証済とし(ステップ２０７)、ステップ２１１へ進む。
一方、ステップ２０３で取得したＰＤＣ値がＤＣバッファ１５ｄ内のＰＤＣ値と一致しない場合は、ＰＤＣ値が検証済かどうかを調べる(ステップ２０８)。
その結果、ＰＤＣ値が検証済の場合は、プライマリパリティセクタにおいて本問題が発生したことを検知し、その旨をフロントエンドＩ/Ｆ部１２を介してホストシステムに通知し(ステップ２１０)、処理を終了する。尚、その後、自律的、もしくは、ホストシステムからの指示により復旧処理が行われるが、その手順は、通常のＲＡＩＤシステムと同様であるのでここでは言及しない。
一方、ＰＤＣ値が検証済でない場合は、ＤＣバッファ１５ｄ内のＰＤＣ値を、ステップ２０３で取得されたＰＤＣ値で上書きし(ステップ２０９)、ステップ２１１へ進む。この時、ＰＤＣ値は検証済としない。
【００４６】
次に、コントロール部１１は、デステージングを行うユーザデータの読込みをバックエンドＩ/Ｆ部１４に指示する。これに従い、バックエンドＩ/Ｆ部１４は、ドライブに対し、ユーザデータのＲＥＡＤ要求を行う。そして、読み込まれたユーザデータは、データパス制御部１３のオールドデータ記憶領域１３ｅに転送される(ステップ２１１)。
このデータ転送時に、冗長コード検証部１３ｂは、読み出されたユーザデータから冗長コードを生成する。そして、この生成された冗長コードとユーザデータに付加された冗長コードとをＸＯＲ演算することによりＤＤＣ値を取得し、これをＤＣバッファ１５ｄ内のＰＤＣ値と比較する(ステップ２２１)。
その結果、ＰＤＣ値とＤＤＣ値とが一致しない場合、冗長コード検証部１３ｂは、取得したＤＤＣ値をＤＤＣ記憶領域１３ｃに一時保存し(ステップ２２８)、ＤＣ値の不一致の発生をコントロール部１１に通知する。
【００４７】
これに応じて、コントロール部１１は、ＰＤＣ値が検証済かどうかを調べる(ステップ２２９)。
その結果、ＰＤＣ値が検証済の場合、コントロール部１１は、ステップ１０４で読み込まれたユーザデータが記録されていたデータセクタにおいて本問題が発生したことを検知し、その旨をフロントエンドＩ/Ｆ部１２を介してホストシステムへ通知する(ステップ２３０)。尚、その後、自律的、もしくは、ホストシステムからの指示により復旧処理が行われるが、その手順は、通常のＲＡＩＤシステムと同様であるのでここでは言及しない。
【００４８】
一方、ＰＤＣ値が検証済でない場合、コントロール部１１は、バックエンドＩ/Ｆ部１４に対し、セカンダリパリティデータの読込みを指示する。これに従い、バックエンドＩ/Ｆ部１４は、ドライブに対し、セカンダリパリティデータのＲＥＡＤ要求を行う。そして、読み込まれたセカンダリパリティデータは、データパス制御部１３に転送される(ステップ２３１)。
このデータ転送時に、冗長コード検証部１３ｂは、読み出されたセカンダリパリティデータから冗長コードを生成する。そして、この生成された冗長コードとセカンダリパリティデータに付加された冗長コードとをＸＯＲ演算することによりＳＤＣ値を取得し、これを、ＳＤＣ記憶領域１３ｄに一時保存すると共に、ＤＣバッファ１５ｄ内のＰＤＣ値と比較する(ステップ２３２)。
【００４９】
その結果、ＰＤＣ値とＳＤＣ値とが一致した場合、冗長コード検証部１３ｂは、ＰＤＣ値を検証済みとする(ステップ２３３)。そして、ステップ２１１で読み込まれたユーザデータが記録されていたデータセクタにおいて本問題が発生したことを検知し、その旨をフロントエンドＩ/Ｆ部１２を介してホストシステムへ通知する(ステップ２３０)。尚、その後、自律的、もしくは、ホストシステムからの指示により復旧処理が行われるが、その手順は、通常のＲＡＩＤシステムと同様であるのでここでは言及しない。
一方、ＰＤＣ値とＳＤＣ値とが一致しない場合、ＳＤＣ記憶領域１３ｄに一時保存されＳＤＣ値とＤＤＣ記憶領域１３ｃに一時保存されたＤＤＣ値とを比較する(ステップ２３４)。
【００５０】
その結果、ＳＤＣ値とＤＤＣ値とが一致した場合、冗長コード検証部１３ｂは、ＤＤＣ記憶領域１３ｃに一時保存されたＤＤＣ値によってＤＣバッファ１５ｄ内のＰＤＣ値を上書きし、ＰＤＣ値を検証済とする(ステップ２３５)。そして、プライマリパリティセクタにおいて本問題が発生したことを検知し、その旨をフロントエンドＩ/Ｆ部１２を介してホストシステムへ通知する(ステップ２３６)。尚、その後、自律的、もしくは、ホストシステムからの指示により復旧処理が行われるが、その手順は、通常のＲＡＩＤシステムと同様であるのでここでは言及しない。
一方、ＳＤＣ値とＤＤＣ値とが一致しない場合、コントロール部１１は、ＰＤＣ値をＤＣバッファ１５ｄから削除する(ステップ２３７)。そして、二重障害(Double Fault)の発生を検知し、その旨をフロントエンドＩ/Ｆ部１２を介してホストシステムへ通知する(ステップ２３８)。尚、その後、自律的、もしくは、ホストシステムからの指示により復旧処理が行われるが、その手順は、通常のＲＡＩＤシステムと同様であるのでここでは言及しない。
【００５１】
また、ステップ２２１において、ＰＤＣ値とＤＤＣ値とが一致した場合、データパス制御部１３は、オールドデータ記憶領域１３ｅに記憶されたオールドデータと、パリティデータ領域１５ｃに記憶されたパリティデータと、新しいユーザデータとのＸＯＲ演算を行い、新しいパリティデータを算出する(ステップ２２２)。尚、新しいパリティデータの算出は、ドライブからのデータ読込み時、データ転送を行いながらのＸＯＲ演算(オン・ザ・フライＸＯＲ)により行ってもよい。
次に、データパス制御部１３は、ＤＣバッファ１５ｄ内のこのユーザデータのＤＣ値を１インクリメントする(ステップ２２３)。
その後、デステージングを行うユーザデータが他にあるかどうかを判定する(ステップ２２４)。
【００５２】
その結果、デステージングを行うユーザデータが他にあると判定された場合は、ステップ２１１に戻り、デステージングを行う全てのユーザデータについて同じ処理を行う。
一方、デステージングを行うユーザデータが他にないと判定された場合、コントロール部１１は、バックエンドＩ/Ｆ部１４に対し、新しいユーザデータ及び新しいパリティデータのドライブへの書込みを指示する。これに従い、バックエンドＩ/Ｆ部１４は、ドライブに対し、ＷＲＩＴＥ要求を行う。そして、新しいユーザデータ及び新しいパリティデータは、データパス制御部１３を介して、ドライブへ転送される。
【００５３】
このデータ転送時に、冗長コード生成部１３ａは、ユーザデータ及びパリティデータからそれぞれに対する冗長コードを生成する。そして、ユーザデータから生成された冗長コードとＤＣバッファ１５ｄ内のＤＣ値とをＸＯＲ演算したものを新しい冗長コードとしてユーザデータに付加すると共に、パリティデータから生成された冗長コードとＤＣバッファ１５ｄ内のＤＣ値とをＸＯＲ演算したものを新しい冗長コードとしてパリティデータに付加する(ステップ２２５)。尚、ユーザデータに付加する冗長コードを生成する際には、そのユーザデータのＤＣ値のみを参照し、パリティデータに付加する冗長コードを生成する際には、そのパリティデータに対応する全てのユーザデータのＤＣ値を参照する。
【００５４】
以上により、本実施の形態の動作は終了する。
尚、本実施の形態では、ステージング時の処理はセクタを単位として行い、デステージング時の処理はスライスを単位として行うようにした。しかしながら、ステージング時の処理を、同じディスク内の複数のセクタからなるストリップを単位として行い、デステージング時の処理を、複数のスライスの集合であるストライプを単位として行うようにしてもよい。
また、本実施の形態では、冗長コードとＤＣ値とをＸＯＲ演算することにより、ＤＣ値をセクタデータに付加するようにした。しかしながら、ＤＣ値は、冗長コード以外の部分に埋め込むことにより、セクタデータに付加してもよい。また、ＤＣ値の埋め込み方法としても、ＸＯＲ演算に限らず、種々の方法を採用することができる。
更に、本実施の形態では、ユーザデータのＤＣ値をそのユーザデータに対応するパリティデータに付加するようにした。しかしながら、必ずしもそのような形態に限られず、例えば、他のユーザデータに付加するような形態であっても構わない。
【００５５】
更にまた、本実施の形態では、ＰＤＣ値とＤＤＣ値とが一致しない場合には、次に、ＰＤＣ値とＳＤＣ値とが一致するかどうかを判定するようにした。しかしながら、ＰＤＣ値とＤＤＣ値とが一致しない場合には、次に、ＳＤＣ値とＤＤＣ値とが一致するかどうかを判定するようにしてもよい。この場合、ＳＤＣ値とＤＤＣ値とが一致すれば、プライマリパリティセクタにおいて本問題が発生したと判定することができ、ＳＤＣ値とＤＤＣ値とが一致しなければ、データセクタにおいて本問題が発生したと判定することができる。
また、本実施の形態では、ＰＤＣ値とＤＤＣ値とが一致する場合は、どこにも本問題は発生していないものとして処理していた。しかしながら、このような場合に、セカンダリパリティセクタにおいて本問題が発生しているかどうかを検証するようにしてもよい。具体的には、ステップ２２１でＰＤＣ値とＤＤＣ値とが一致すると判定され、かつ、ステップ２０６でＤＣバッファ１５ｄ内のＰＤＣ値とプライマリパリティセクタから読み込まれたＰＤＣ値とが一致しないと判定され、しかも、ステップ２０８でＰＤＣ値が未検証であると判定されたような場合である。この場合において、セカンダリパリティデータを読み込み、セカンダリパリティデータから取得したＳＤＣ値をＤＣバッファ１５ｄ内のＰＤＣ値と比較することにより、本問題の発生を検知してもよい。また、本問題の発生が検知された場合には、復旧処理を行うようにしてもよい。
更には、ＰＤＣ値、ＳＤＣ値、ＤＤＣ値を同時に照合するような形態であってもよい。この場合、これら３つの値の中で１つだけ他の２つと値が異なるものがあれば、その値の取得元のセクタにおいて本問題が発生したと判定することができる。
【００５６】
以上述べたように、本実施の形態では、ユーザデータの更新に伴って更新されるＤＣをユーザデータに付加し、その比較対象となるＤＣ値は、そのユーザデータを記録するに際して必ず記録することが必要となるデータ(例えば、そのユーザデータに対するパリティデータ)に付加するようにした。このような構成により、ドライブの容量を消費することなく、ストレージサブシステムがホストシステムに対して不正なデータを返してしまうという問題を回避することができるようになった。
また、比較対象となるＤＣ値を、そのユーザデータの書込み/読出しと同期して書込み/読出しが行われるデータ(例えば、そのユーザデータに対するパリティデータ)に付加するようにした。このような構成により、ドライブからの読出しパフォーマンスに影響を与えることなく、ストレージサブシステムがホストシステムに対して不正なデータを返してしまうという問題を回避することもできるようになった。
【図面の簡単な説明】
【００５７】
【図１】本発明の実施の形態におけるユーザデータ、パリティデータ、ＤＣ値の配置の第１の例を示した図である。
【図２】本発明の実施の形態におけるユーザデータ、パリティデータ、ＤＣ値の配置の第２の例を示した図である。
【図３】本発明の実施の形態における冗長コードへのＤＣ値の格納方法の例を示した図である。
【図４】本発明の実施の形態におけるストレージサブシステムを実現するコンピュータのハードウェア構成を示したブロック図である。
【図５】本発明の実施の形態におけるストレージサブシステムの機能構成を示したブロック図である。
【図６】本発明の実施の形態におけるステージング時の処理動作の例を示したフローチャートである。
【図７−１】本発明の実施の形態におけるデステージング時の処理動作の例を示したフローチャートである。
【図７−２】本発明の実施の形態におけるデステージング時の処理動作の例を示したフローチャートである。
【図８】従来技術における問題点を説明するための図である。
【符号の説明】
【００５８】
１１…コントロール部、１２…フロントエンドＩ/Ｆ部、１３…データパス制御部、１３ａ…冗長コード生成部、１３ｂ…冗長コード検証部、１３ｃ…ＤＤＣ記憶領域、１３ｄ…ＳＤＣ記憶領域、１３ｅ…オールドデータ記憶領域、１４…バックエンドＩ/Ｆ部、１５…キャッシュ部、１５ａ…キャッシュ制御部、１５ｂ…ユーザデータ記憶領域、１５ｃ…パリティデータ記憶領域、１５ｄ…ＤＣバッファ、１６１〜１６ｎ…ディスクドライブ
【図１】
2006164319.tif 000003
【図２】
2006164319.tif 000004
【図３】
2006164319.tif 000005
【図４】
2006164319.tif 000006
【図５】
2006164319.tif 000007
【図６】
2006164319.tif 000008
【図７−１】
2006164319.tif 000009
【図７−２】
2006164319.tif 000010
【図８】
2006164319.tif 000011