(57)【要約】【課題】データの妥当性を検査する改善されたシステム及び方法を提供すること【解決手段】第１のストレージシステム（以下「ＳＳ」と称す）(102)上の特定位置にデータブロックを書き込む(304)。所定の初期値を有し前記データブロックに関するバージョンチェックデータを前記第１のＳＳ(102)に書き込む(310)。該バージョンチェックデータを第２のＳＳ(210)に書き込む(312)。第１のＳＳ上の同一位置への後続のデータ書き込みの際に、第１のＳＳ(102)上のバージョンチェックデータをインクリメントし(318)、該インクリメントしたバージョンチェックデータを前記第２のＳＳ(210)に格納する(320)。第１のＳＳ(102)から１グループのデータを読み出す際、該第１のＳＳ(102)上のバージョンチェックデータを第２のＳＳ(210)上のバージョンチェックデータと比較する(416)ことによりデータの妥当性が検査される。【選択図】図３
2005004753.tif 000002
【特許請求の範囲】
【請求項１】
第１のストレージシステム(102)上の特定の位置にデータブロックを書き込み(304)、
前記データブロックに関するバージョンチェックデータを前記第１のストレージシステム(102)に書き込み(310)、該バージョンチェックデータが所定の初期値を有し、
前記データブロックに関するバージョンチェックデータを第２のストレージシステム(210)に書き込み(312)、
前記第１のストレージシステム上の前記位置に対するデータの後続の書き込みの際に、
前記第１のストレージシステム(102)上の前記バージョンチェックデータをインクリメントし(318)、
該インクリメントされたバージョンチェックデータを前記第２のストレージシステム(210)に格納する(320)、
という各ステップを有する方法。
【請求項２】
前記データブロックに関するチェックサム情報を前記第１のストレージシステム(102)に書き込むステップ(308)を更に有する、請求項１に記載の方法。
【請求項３】
前記第１のストレージシステム(102)に対して前記データブロックを書き込むステップ(304)と前記バージョンチェックデータを書き込むステップ(310)とが単一操作で行われる、請求項１に記載の方法。
【請求項４】
前記第２のストレージシステム(210)が、前記第１のストレージシステム(102)に結合されたストレージコントローラ(100)内のメモリ素子である、請求項１に記載の方法。
【請求項５】
前記第２のストレージシステム(210)が不揮発性メモリ素子である、請求項１に記載の方法。
【請求項６】
第１のストレージシステム(102)からデータを読み出し(404)、
前記第１のストレージシステム(102)から読み出された前記データに関する第１のバージョンチェックデータを該第１のストレージシステム(102)から読み出し(408)、
第２のストレージシステム(210)に格納されている第２のバージョンチェックデータを用いて前記第１のバージョンチェックデータの妥当性を検査する(416)、
という各ステップを有する方法。
【請求項７】
前記バージョンチェックデータの妥当性が確認されなかった場合にバージョンエラーメッセージを作成するステップ(418)を更に有する、請求項６に記載の方法。
【請求項８】
前記第１のストレージシステム(102)から読み出された前記データに関するチェックサム情報を該第１のストレージシステム(102)から読み出すステップ(406)を更に有する、請求項６に記載の方法。
【請求項９】
前記第１のストレージシステム(102)から読み出されたデータを用いて前記チェックサム情報の妥当性を検査するステップ(412)を更に有する、請求項８に記載の方法。
【請求項１０】
前記第１のストレージシステム(102)がディスクであり、前記第２のストレージシステム(210)が、前記第１のストレージシステム(102)に結合されたストレージコントローラ(100)内のメモリ素子である、請求項６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バージョンチェックデータに基づきデータが有効か否かを判定するシステム及び方法に関するものである。
【背景技術】
【０００２】
複数の記憶装置を使用してその個々の記憶装置と比較して改善された性能及び信頼性を有するデータ記憶装置を提供するストレージシステム（storage system）が現在利用可能である。例えば、RAID（Redundant Array of Independent Disks）システムは、データを格納する複数のディスクを含む。RAIDシステムその他の複数の記憶装置を用いるストレージシステムは、チェックサム情報を用いて信頼性を向上させることができる。チェックサム情報は、複数の記憶装置に書き込まれる特定のデータブロックの妥当性を保証するために算出され記録される付加データである。
【０００３】
チェックサム情報はデータブロックの内容に基づいて算出される。チェックサム情報は、データ破損の検出を可能にすべくデータブロックと共に格納される。データブロックを読み出す際に、記憶装置から読み出されたデータに基づいて新たなチェックサムを算出する。この新たなチェックサムは、データブロックと共に格納されたチェックサム情報と同じ数式を用いて算出される。この新たなチェックサムは、データブロックと共に格納されたチェックサムと比較される。これら２つのチェックサムの情報が一致する場合、記憶装置から読み出されたデータは正しいと見なされる。これら２つのチェックサムの情報が一致しない場合には、当該データは破損している。
【０００４】
チェックサム情報はまた、特定のデータブロックと共に送信され、これにより、データが送信プロセス中に破損しなかったことを受信側システムが検証することが可能となる。チェックサム情報は、任意数のビットを含むことが可能であり、また様々な技法を使って算出することが可能である。チェックサム算出技法としては、例えば、データブロックのバイト又はワードを（オーバーフローを無視して）合計すること、又は特定の位置にあるバイトの各ビットにビット単位のＸＯＲ演算を行って８個のチェックサムビット（すなわち、該バイトの各ビット毎に１つ）を得ることが挙げられる。
【０００５】
チェックサムの算出に伴う問題は、チェックサムの算出結果が、ディスクその他の記憶媒体といった記憶装置上に書き込まれている内容に基づいていることである。記憶装置に格納されているデータは、同一の記憶装置から読み出されたチェックサム情報と比較される。かかる手法は、記憶装置に格納されているデータが、現在のデータであるか旧いデータであるかを判定することができない。このため、記憶装置は、もはや有効でないが正しいチェックサム情報を提供する旧いデータを含んでいる可能性がある。例えば、１データブロック及びそれに関連するチェックサムが記憶装置に書き込まれる。記憶装置上に格納されているチェックサムは、該記憶装置に格納されているデータブロックについては有効なものである。次いで、データブロックが新たなデータに書き換えられた場合、その新たなデータに基づいて新たなチェックサムが算出され、該新たなチェックサムが該新たなデータと共に記憶装置に格納される。しかし、新たなデータ及び新たなチェックサム情報を書き込んでいる間にエラーが発生すると、該データも該チェックサム情報も実際には記憶装置に書き込まれない。エラーが発生したものの、書き込み動作が成功したことを誤って示すステータス情報が記憶装置から返される。このため、データを書き込む（又はデータの書き込みを制御する）システムは、かかるエラーには気づかない。記憶装置上の誤った位置にデータが書き込まれる場合にも、同様の問題が発生する。
【０００６】
データを書き込むシステムは、記憶装置に新しいデータが収容されていると思っているが、実際には記憶装置には旧いデータと旧いチェックサム情報が収容されている。かかる状況は問題を呈するものとなる。なぜなら、記憶装置上のデータとそれに関連するチェックサム情報との間に矛盾がなく、有効であるように見えるからである。このため、旧いデータ及びそれに関連するチェックサムを読み出すシステムは、記憶装置上のチェックサム情報と一致するチェックサム情報を算出し、これは、データが有効であることを示すものとなる。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
したがって、データの妥当性を検査する改善されたシステム及び方法が必要である。
【課題を解決するための手段】
【０００８】
本書で解説するシステム及び方法は、第１のストレージシステム上の特定位置にデータブロックを書き込む。該データブロックに関連し及び所定の初期値を有するバージョンチェックデータが、第１のストレージシステムに書き込まれる。このデータブロックに関連するバージョンチェックデータは、第２のストレージシステムにも書き込まれる。その後に第１のストレージシステム上の前記位置にデータが書き込まれる際に、第１のストレージシステム上のバージョンチェックデータがインクリメントされ、該インクリメントされたバージョンチェックデータが第２のストレージシステムに格納される。
【０００９】
一実施形態では、データは第１のストレージシステムから読み出される。第１のバージョンチェックデータは第１のストレージシステムから読み出される。第１のバージョンチェックデータは、第１のストレージシステムから読み出されたデータに関連するものである。第１のバージョンチェックデータは、第２のストレージシステム上に格納された第２のバージョンチェックデータを用いて、その妥当性が検査される。
【発明を実施するための最良の形態】
【００１０】
本発明を限定的な意味でなく例示として図示する。これら図面は単に本発明の１つ又は２つ以上の考え得る実施形態を示したものである。同様の構成要素及び／又は特徴を参照するために全図を通して同じ符号を使用する。
【００１１】
本書で解説するシステム及び方法は、特定グループのデータと共に格納され及び第２のストレージシステムにも格納されたバージョンチェック情報に含まれる情報に基づいて、該データが正しいか否かを判定する。データを読み出すときに、該データと共に格納されたバージョンチェック情報を、第２のストレージシステムに格納されたバージョンチェック情報と比較する。これらのバージョンチェック情報が一致する場合には、データは有効であると見なされる。該バージョンチェック情報は、単独で使用すること、又はチェックサム情報と組み合わせて使用することが可能である。
【００１２】
本書に記載する特定の例は、複数のディスクと様々な誤り検出手順とを利用するストレージシステムを説明したものである。しかし、本書で解説するシステム及び方法は、如何なるタイプの記憶装置にも、また如何なるデータ記憶技法にも適用することができる。例えば、記憶装置は、ディスク、メモリ素子、又は他の任意のデータ記憶機構を含むことが可能である。更に、本書で解説するシステム及び方法に、任意のパリティ及び／又はデータストライピング技法を利用して、障害が発生した記憶装置からのデータを復元できるようにすることも可能である。ストレージシステムによっては、複数の記憶装置にまたがってデータを格納する１つ又は２つ以上のRAID技法を実施することが可能である。本書中で用いる「バージョンチェックデータ」、「バージョンチェック情報」、「バージョンデータ」、及び「バージョン情報」なる用語は、互いに置き換えて用いることが可能なものである。
【００１３】
図１は、ストレージコントローラ100が様々なデータ記憶及びデータ読出操作を管理する例示的な環境を示している。ストレージコントローラ100は、１つ又は２つ以上のホスト110,112からデータ読出要求及びデータ書込要求を受け取る。ホストは、ワークステーション、ラップトップコンピュータ、ハンドヘルドコンピュータ、又はサーバーといった、あらゆるタイプのコンピュータとすることが可能である。代替的に、ホストは、他のあらゆるタイプのコンピューティング装置とすることが可能である。図１には２つのホスト110,112が示されているが、特定のストレージコントローラ100は、任意の数のホストに結合することが可能である。
【００１４】
ストレージコントローラ100は、複数のディスク102,104,106,108にも結合される。特定のストレージコントローラに結合するディスク又は他の記憶装置はいくつあってもよい。既存のディスクに障害が発生した場合又は同ディスクがシステムから取り外された場合に、アクティブなディスクの数を変更することが可能である。また、（例えば、記憶容量を増やすため、障害が発生したディスクを取り替えるため、又は追加の予備ディスクを提供するために）システムアドミニストレータが新たなディスクをシステムに追加することが可能である。
【００１５】
本書で解説するように、ストレージコントローラ100は、複数のディスク102〜108上のデータの記憶及び読出を取り扱う。特定の実施形態では、ストレージコントローラ100は、様々なタイプのRAID（Redundant Array of Independent Disk）技術を実施することが可能である。代替的に、ストレージコントローラ100は、記憶装置に障害が発生した後にデータを復元することを可能にする他の技術又は手順を実施することが可能である。ストレージコントローラ100はまた、様々なデータ検証技法を用いて、複数のディスク102〜108から読み出されたデータを検証する。ストレージコントローラ100は、個別の装置とすること、又はサーバー等のコンピュータシステムの一部とすることが可能である。更に、ディスク102〜108は、ストレージコントローラ100と同じ装置内に配置すること、又はストレージコントローラ100に結合された別の装置内に配置することが可能である。一実施形態では、ディスク102〜108は、互いにほぼ等しい記憶容量を有するものである。
【００１６】
図２は、本書で解説する手順を実施することのできるストレージコントローラ100を示すブロック図である。プロセッサ202は、ホスト110,112から受け取った様々なデータ記憶要求及びデータ読出要求を管理するのに必要な様々な処理及びタスクを実行する（図１）。更に、プロセッサ202は、本書で解説するように、データの妥当性を検査し、バージョンチェック情報を管理し、及び失われたデータを復元するための、様々な機能を実行する。
【００１７】
プロセッサ202は、双方向データ通信インタフェイスを１つ又は２つ以上のホストに提供するホストインタフェイス204に結合される。プロセッサ202はまた、双方向データ通信インタフェイスを複数のディスク又は他の記憶装置に提供するストレージインタフェイス206にも結合される。チェックサムロジック208は、プロセッサ202に結合され、チェックサム情報を算出して、該チェックサム情報に基づいてデータの妥当性を検査するのに必要なロジックをプロセッサ202に提供する。チェックサムロジック208は、ストレージコントローラ100によりサポートされるチェックサム算出のタイプに応じて複数のチェックサムアルゴリズム又は公式を含むことが可能である。他の実施形態では、チェックサムロジック208は、ホストインタフェイス204、ストレージインタフェイス206、１つ又は２つ以上のホスト、又は記憶装置（例えばバックエンドディスクドライブ）に結合される。ストレージコントローラ100の代替的な実施形態では、チェックサムロジック208が省略されている。
【００１８】
メモリ210もまた、プロセッサ202に結合され、プロセッサ202がそのタスクを実行する際に該プロセッサにより使用される様々な情報を格納する。メモリ210は、揮発性メモリ、不揮発性メモリ、又は揮発性メモリと不揮発性メモリとの組み合わせを含むことが可能である。メモリ210は、ディスク上にデータと共に格納されたバージョンチェック情報に対して検証されるバージョンチェック情報を格納する。プロセッサ202は更にバージョンチェックロジック212にも結合され、該バージョンチェックロジック212は、本書で解説するように、バージョンチェック情報を利用して無効なデータを識別するための１つ又は２つ以上の技法を収容している。
【００１９】
図２の実施形態は、ストレージコントローラ100の１つの考え得る構成を表している。他の様々なストレージコントローラ100の構成を使用して本書で解説する手順を実施することが可能であることが理解されよう。
【００２０】
上述のように、特定の実施形態では、ストレージコントローラ100は、RAID技術を実施することができる。RAIDシステムは、複数の記憶装置（例えばディスク）をパリティデータと組み合わせて使用して、信頼性及びフォールトトレランスを向上させる。
【００２１】
図３は、データをストレージシステムに書き込む手順300の一実施形態を示すフローチャートである。最初に、手順300は、１つ又は２つ以上の記憶装置を収容するストレージシステムに格納すべきデータブロックを特定する（ブロック302）。１データブロックは、１ビットのデータ、数バイトのデータ、又は数千バイトのデータといった任意量のデータとすることが可能である。特定の１「ブロック」中のデータは、記憶装置上の隣接する記憶位置に格納すること、又は記憶装置上の複数の位置に格納することが可能である。他の実施形態では、１「ブロック」中のデータは、（例えばRAID技法その他のデータ記憶手順を用いて）複数の記憶装置にまたがる複数の位置に格納することが可能である。
【００２２】
手順300は、次に、該受容したデータブロックを第１のストレージシステム上の特定の位置に書き込む（ブロック304）。この例では、第１のストレージシステムはストレージディスクである。次に、手順300は、このデータブロックに関連するチェックサム情報を算出する（ブロック306）。このチェックサム情報を算出するために様々な異なるアルゴリズムを用いることが可能である。特定の実施形態では、ビット単位のＸＯＲ演算を用いてチェックサム情報を作成する。次いで、このチェックサム情報を第１のストレージシステムに書き込む（ブロック308）。
【００２３】
ブロック310で、バージョンチェックビットを第１のストレージシステムに書き込む。これと同一のバージョンチェックビットを、ストレージコントローラ内のメモリ素子等の第２のストレージシステムに書き込む（ブロック312）。代替的に、このバージョンチェックビットの第２のコピーは、第１のストレージシステムの異なる位置に、異なるストレージコントローラに、又はこのストレージコントローラの外部の記憶装置に、格納することが可能である。
【００２４】
このバージョンチェックビットは「１」等の所定の初期値を有する。図３に示す実施形態は、単一のバージョンチェックビットを使用するものではあるが、代替的な実施形態は、後述するように任意数のバージョンチェックビットを使用することができる。
【００２５】
次に、手順300は、第１のストレージシステム上の同一位置に新しい（又は更新された）データブロックを書き込むための要求に関して第１のストレージシステムを監視する（ブロック314）。かかる要求を受容すると、手順300は、この新しい（又は、更新された）データに関連するチェックサム情報を算出し、該チェックサム情報を新データと共に第１のストレージシステムに書き込む（ブロック316）。次に、手順300は、第１のストレージシステム上のバージョンチェックビットの値をインクリメントし（ブロック318）、そのインクリメントされたバージョンチェックビットを第２のストレージシステムに格納する（ブロック320）。例えば、バージョンチェックビットが、以前に「１」にセットされた場合には、このバージョンチェックビットをインクリメントすることにより、その値が「０」に変更される。同様に、バージョンチェックビットが、以前に「０」にセットされた場合には、このバージョンチェックビットをインクリメントすることにより、その値が「1」に変更される。代替的な実施形態では、手順300は、第１のストレージシステムに格納されているインクリメントされたバージョンチェックビットの値を格納するのではなく、ブロック320で、第２のストレージシステム上のバージョンチェックビットの値をインクリメントする。
【００２６】
バージョンチェックビットをインクリメントすることにより、ストレージコントローラ等の装置が無効なデータを識別することが可能となる。例えば、初めてデータを第１のストレージシステムに書き込む際に、バージョンチェックビットも第１のストレージシステムに書き込む。更に、第１のストレージシステムとは異なる第２のストレージシステムにも該バージョンチェックビットを書き込む。新しいデータ又は更新されたデータを第１のストレージシステム上の同一位置に書き込む場合に、第１のストレージシステム上のバージョンチェックビットをインクリメントし、該インクリメントされた値を第２のストレージシステムにも格納する。新しいデータが第１のストレージシステムに正しく格納された場合には、これら２つのバージョンチェックビットは一致するはずである。しかし、新しいデータが第１のストレージシステムに正しく格納されなかった場合には、第１のストレージシステム上のバージョンチェックビットはインクリメントされなかったことになる。このため、これら２つのバージョンチェックビットは一致せず、これによりデータが無効であることが示される。これらのバージョンチェックビットの使用に関する更なる詳細を以下で説明する。
【００２７】
第１のストレージシステムへの、データブロックの書き込み、チェックサム情報の書き込み、及びバージョンチェックビットの書き込みが、図３に別個のブロックとして示されているが、典型的には該３つの項目の全てが単一の書き込み動作で第１のストレージシステムに書き込まれる。同様に、新しいデータの書き込み、新しいチェックサム情報の書き込み、及びバージョンチェックビットのインクリメントは、典型的には単一の書き込み動作で行われる。
【００２８】
本書には、チェックサム情報とバージョンチェック情報を両方とも使用するものとして、個々の例が説明されているが、代替的な実施形態では、システム及び方法は、本書で解説するバージョンチェック技法をチェックサム情報を使用しないで実施することが可能である。
【００２９】
図４は、ストレージシステムからデータを読み出す手順400の一実施形態を示すフローチャートである。最初に、手順400は、データブロックを読み出す要求を受け取る（ブロック402）。この要求されたデータブロックを第１のストレージシステムから読み出す（ブロック404）。更に、このデータブロックに関連するチェックサム情報も第１のストレージシステムから読み出す（ブロック406）。次に、手順400は、このデータブロックに関連する第１のバージョンチェックビットを第１のストレージシステムから読み出す（ブロック408）。次に、手順400は、このデータブロックに関連する第２のバージョンチェックビットを第２のストレージシステムから読み出す（ブロック410）。
【００３０】
ブロック412で、手順400は、第１のストレージシステムから読み出されたチェックサム情報が正しいか否かを判定する。例えば、第１のストレージシステムから読み出されたデータブロックにチェックサムアルゴリズムを適用することが可能である。このチェックサムアルゴリズムの結果と、第１のストレージシステムから読み出されたチェックサム情報とが一致しない場合には、データは破損している。ブロック412の判定により、チェックサム情報が正しくないと判定された場合には、手順400は、チェックサムエラーメッセージを作成する（ブロック414）。
【００３１】
チェックサム情報の妥当性を検査する場合に、手順400は、ブロック416に進んでバージョンチェックビットが一致するか否かを判定する。手順400は、第１のストレージシステムから読み出されたバージョンチェックビットの値を第２のストレージシステムから読み出されたバージョンチェックビットの値と比較する。これらのバージョンチェックビットが一致しない場合には、手順400は、データバージョンエラーメッセージを作成する（ブロック418）。更に、これらバージョンチェックビットが一致しない場合には、手順400は、データ復元プロセスを開始して、第１のストレージシステムから読み出されたはずのデータブロックの復元を試行することが可能である。例えば、RAID1のデータストライプにおいて、そのデータの一方のコピーがバージョンデータと整合したが別のコピーがバージョンデータと整合しなかった場合に、第２のメモリシステム内のバージョンデータと整合したデータを有効と見なし、次いで該データを用いて無効なデータを訂正することが可能である。
【００３２】
ブロック416で、バージョンチェックビットが一致する場合には、第１のストレージシステムから読み出されたデータブロックを有効と見なし、該データブロックを、データを読み出す要求を出したホストに提供する（ブロック420）。第１のストレージシステムからデータを読み出す後続する要求に対して、手順400を繰り返す。
【００３３】
手順400の代替的な実施形態では、チェックサム情報の妥当性を検査する前にバージョンチェックビットを比較する（ブロック416）ことが可能である。かかる順序は、チェックサムを算出してその妥当性を検査するよりもバージョンチェックビットを準備する方が速い場合に特に役に立つ。更に、手順400の別の実施形態では、バージョンチェックビットを比較した（ブロック416）後、要求されたデータブロックを第１のストレージシステムから読み出し（ブロック404）、これにより、バージョンチェックビットが一致しない場合にデータ読出し時間を節約することが可能である。
【００３４】
図５は、チェックサム情報及びバージョンチェック情報を含むデータの例示的な配置を示している。図５に示すデータブロックは５バイトを有し、各バイトが８ビットを有している。したがって、このデータブロックは40ビットのデータに相当する。図５に示す配置は、本発明の解説を目的として提供したものである。代替的な実施形態では、１データブロックは、任意の構成で配置された任意数のデータビットを含むことが可能である。特定のデータブロックは512バイトのデータを含み、各データバイトが８ビットを含む。
【００３５】
図５に示すチェックサム情報は、各ビット列について行われたビット単位のＸＯＲ演算の結果を表している。各ビット列は、各バイト中の特定のビット位置（例えば「ビット１」、「ビット２」等）を表している。例えば、位置「ビット１」を表す第１のビット列は、チェックサム値「０」を有している。このチェックサムは、ビット列中の最初の２ビットにＸＯＲ演算を実行して算出されたものである。すなわち、１ＸＯＲ１＝０である。その結果（０）と、「０」である次のビット（すなわち「バイト３」に関連するビット）とに別のＸＯＲ演算が実行される。したがって、０ＸＯＲ０＝０である。この結果（０）を、次のビット（１）と共に用いて、０ＸＯＲ１＝１となる。その結果（１）を、ビット列（１）中の最後のビットと共に用いて、１ＸＯＲ１＝０となる。このため、第１のビット列についてのチェックサム値は「０」である。同様の手順を各ビット列について実行して、８ビットのチェックサム情報を作成する。
【００３６】
図５に示すように、チェックサム情報の隣りにバージョンビット502が格納される。代替的な実施形態では、バージョンビット502は、それに関連するデータと共にストレージシステム上の任意の位置に格納することが可能である。図５に示す別のバージョンビット504は、第２のストレージシステムに格納される。例えば、データ、チェックサム情報、及びバージョンビット502は、特定のストレージシステム（第１のストレージシステムとも称す）に格納される。第２のバージョンビット504は、例えば、第１のストレージシステムを制御するストレージコントローラ内のメモリ素子に格納される。第２のバージョンビット504は、説明の便宜上、第１のストレージシステムに格納された情報の近くに示されている。図５は、データを第１のストレージシステムに書き込んだ後のデータ、チェックサム情報、及びバージョンビットのステータスを表している。
【００３７】
図６は、図５に示すものと同じ記憶位置に新しいデータを書き込んだ後の意図するデータの配置を示している。新しいデータが第１のストレージシステムに正しく書き込まれた場合、図６に示す情報は精確なものとなる。例えば、チェックサム情報が該新しいデータに基づいて更新されることになる。更に、バージョンビット502及びバージョンビット504の両者が更新されて、それらの値が「１」から「０」にインクリメントされることになる。しかし、データ書き込み動作に失敗した場合には、図６に示すデータ配置を実現することができなくなる。
【００３８】
図７は、図５に示すものと同じ記憶位置にデータを書き込めなかった後の実際のデータ配置を示している。図７に示すように、第１のストレージシステム上のデータ及びチェックサム情報は変化していない（すなわちデータ及びチェックサム情報は図５に示すものと同じである）。しかし、第１のストレージシステムは、新しいデータが第１のストレージシステムに正しく記録されたとストレージコントローラに誤って報告している。このため、ストレージコントローラは、新しいデータが第１のストレージシステムに書き込まなかった考える理由がない。
【００３９】
図７に示すように、第１のストレージシステムに格納されたチェックサム情報は、旧いデータについては有効なままとなっている。この旧いデータは「古い（stale）」データと呼ぶことができる。しかし、新しいデータが第１のストレージシステムに正しく書き込まれなかったため、バージョンビット502はインクリメントされなかった。このため、バージョンビット502は不変でもとのままであって値「１」を有しており、これは、図５に示すものと同じ値である。ストレージコントローラは、新しいデータが第１のストレージシステムに正しく書き込まれたと信じているため、バージョンビット504の値が「０」に変更されて、バージョンビット502をインクリメントした値と一致する。このため、図７上の２つのバージョンビット502,504の値は一致しない。このバージョンビット値の不一致は、データを読み出すシステム又は装置に該データが有効でないことを知らせるものとなる。例えば、第１のストレージシステムからデータを読み出すストレージコントローラは、第１のストレージシステム上のバージョンビット502の値と、ストレージコントローラ内のメモリ素子に格納されたバージョンビット504の値とが一致しないことを認識することになる。
【００４０】
したがって、図７に示すチェックサム情報は、図７に示すデータについては有効であるが、その古いデータは有効ではない。かかる場合には、本書で解説するようなバージョンチェックビットを使用することにより、無効なデータを検出し、データ復元プロセスを開始させることにより、有効なデータを取り出すことが可能となる。
【００４１】
本書で解説するように、実施形態によっては、２つの異なる記憶装置上、又は同一記憶装置の２つの異なる位置にある、バージョンチェックデータの２つのコピーをインクリメントする。別の実施形態は、バージョンチェックデータの１つのコピーをインクリメントし、該インクリメントされたデータの第２のコピーを、異なる記憶装置、又は同一記憶装置上の異なる位置に格納する。本書で解説する例は、第１の記憶装置上のバージョンチェックデータ値をインクリメントし、該インクリメントされた値を第２の記憶装置に格納する。代替的な実施形態では、第２の記憶装置に格納されたバージョンチェックデータ値をインクリメントし、そのインクリメントされた値を第１の記憶装置に格納する。この代替的な実施形態では、データは典型的には第２の記憶装置から一層速く読み出され、このため、システムは該データを読み出してインクリメントし、これによりシステムの全体的な速度が向上することになる。
【００４２】
第１の記憶装置及び第２の記憶装置が両方ともほぼ等しいデータアクセスタイムを提供するシステムでは、バージョンチェックデータは、その読み出しを行う時点で最もビジーでない記憶装置から読み出される。このため、バージョンチェックデータは、記憶装置の利用度が変化すると、異なる記憶装置から読み出される可能性がある。
【００４３】
特定の実施形態では、不揮発性のランダムアクセスメモリ（RAM）に格納されたバージョンチェックデータが最初に読み出されてインクリメントされる。次いで、新しいバージョンチェックデータ値が新しいデータ及びそれに関連するチェックサム値と共に不揮発性RAM及びストレージディスクの両者に書き込まれる。
【００４４】
上述した例は、単一ビットのバージョンデータを含む。同一のデータ記憶位置への連続する２回の書き込み動作が失敗した後に、１グループのデータをストレージシステムから読み出す場合には、バージョンデータは、そのデータが古い場合であっても有効なデータを示すことになる。この連続する２回の書き込み動作は、第２のストレージシステム上のバージョンデータを２回変更させるものとなり、これにより、その１ビット値が、第１のストレージシステムに格納されたものと同じ値に戻される。かかる事態は起こりそうもないとはいえ、かかる事態は、無効なデータを誤って読み出すものとなる。
【００４５】
データが旧い場合に等しいバージョンチェックデータが得られる可能性を低減させるために、複数のビットを使用してバージョンチェックデータを表すことができる。例えば、２個のバージョンチェックデータビットを使用する場合、無効なデータを生成するためには、同一グループのデータの読み出し動作の前に、連続して４（２2）回書き込み動作に失敗する必要がある。同様に、３個のバージョンチェックデータビットを使用する場合には、無効なデータを生成するためには、同一グループのデータの読み出し動作の前に、連続して８（２3）回書き込み動作に失敗する必要がある。
【００４６】
図８は、ストレージシステム内の様々なデータ記憶位置に関連するバージョンデータが収容されているバージョンアレイ800を示している。該バージョンアレイ800に格納されたバージョンデータには２ビットのデータが収容されている。バージョンアレイ800の代替的な実施形態は、任意のビット数を有するバージョンデータを収容することが可能である。バージョンアレイ800内の各エントリは、ストレージシステムに格納された特定のデータブロックに関連づけされている。対応するバージョンデータは各データブロックと共に格納される。ストレージシステムからデータが読み出されるときに、このデータブロックと共に格納されたバージョンデータを、バージョンアレイ800に格納された対応するバージョンデータと比較する。これら２つのバージョンデータ値が一致する場合には、ストレージシステムから読み出されたデータは有効と見なされる。バージョンアレイ800は、関連するデータブロックとは別のストレージシステムに格納される。一実施形態では、バージョンアレイ800は、これらのデータブロックの記憶及び読出を取り扱うストレージコントローラ内のメモリ素子に格納される。バージョンアレイ800は、８列及び８行を含む。バージョンアレイ800の代替的な実施形態は、バージョンアレイ800に関連するデータブロックの数及び配置に応じて、任意数の列及び行を含むことが可能である。
【００４７】
バージョンアレイ800の特定の実施形態は、各データブロックについてのバージョンデータを関連するストレージシステムに格納することができる。該バージョンアレイ800は、データブロックの識別に用いられるデータブロックアドレスによりアドレス指定される。
【００４８】
図９は、ストレージシステム内の同一位置への各書き込みの後にバージョンデータをインクリメントする一連の動作900の一実施形態を示す状態図である。該一連の動作900は、関連するデータと共にストレージシステムに格納されたバージョンデータをインクリメントするために使用される。これと同じバージョンデータを、第２のストレージシステム（例えばストレージコントローラ）にも格納する。
【００４９】
最初に、ストレージシステム上の特定の位置にデータが書き込まれた際に、該データに関連するバージョンデータを状態902で表す「11」等の所定の値に設定する。この初期の所定の値は、一連の動作900中の任意の状態とすることが可能である。現在の状態が902である場合には、同一記憶位置への次のデータ書き込み動作は、状態を状態904に進ませ、これにより関連するバージョンデータが「00」にインクリメントされる。データと共に記憶装置に格納されたバージョンデータと第２の記憶装置に格納されたバージョンデータとは両方とも「00」に更新される。同一記憶位置への次の書き込み動作は、状態を状態906に進ませ、これによりバージョンデータが「01」にインクリメントされる。同一記憶位置への別の書き込み動作は、状態を状態908に進ませ、これによりバージョンデータが「10」にインクリメントされる。同一記憶位置への次の書き込み動作は、状態を状態902に進ませ、これによりバージョンデータが「11」にインクリメントされる。この一連の動作は、同一記憶位置への連続する各書き込み動作の後に、上述のように続行される。
【００５０】
本書で解説する様々な実施形態は、バージョンチェックデータのコピーを２つの異なる記憶装置に格納する。他の実施形態では、バージョンチェックデータのこれら２つのコピーは、同一の記憶装置（例えば、ディスク、メモリ、又はデータを格納できる他の装置）に格納することが可能である。例えば、バージョンチェックデータのこれら２つのコピーは、記憶装置の異なる位置に格納され、及び２つの別個の操作で書き込まれる。記憶装置上でバージョンチェックデータをインクリメントし更新する態様は、２つの異なる記憶装置を用いることに関して本書で解説した手順と同様（又は同一）である。同一の記憶装置上の異なる位置にバージョンチェックデータの２つのコピーを書き込む際に、２つの別個の書き込み動作を実行し、これにより何れかの書き込み動作中の失敗が切り離される。
【００５１】
本書で解説する特定の例は、ディスクアレイ等のストレージシステムにおけるデータ誤り検出に関するものである。しかし、本書で解説するシステム及び方法は、ホスト／アレイ対話（インタラクション）等の他の環境において利用することが可能である。ホスト／アレイ環境では、バージョンアレイはホスト装置上に置かれ、バージョンデータはデータと共にストレージアレイに書き込まれることになる。ホストがストレージアレイからデータを読み出す際に、ホストは、バージョンアレイ中のバージョンデータと、データと共にストレージアレイから読み出されたバージョンデータとが一致することをチェックすることになる。
【００５２】
上記説明は、構造上の特徴及び／又は方法論的な行為に固有の言葉を使用しているが、併記の特許請求の範囲において定義されるデータ誤り検出用の方法及び装置は、述べられる特定の特徴又は行為に限定されないものとする。もっと適切に言えば、前記の特定の特徴及び行為は、本書に述べられるシステム及び方法を実施する例示的な形態として開示されている。
【図面の簡単な説明】
【００５３】
【図１】ストレージコントローラが様々なデータ記憶及びデータ読出操作を管理する例示的な環境を示す説明図である。
【図２】本書で解説する手順を実施することのできる例示的なストレージコントローラを示すブロック図である。
【図３】データをストレージシステムに書き込む手順の一実施形態を示すフローチャートである。
【図４】ストレージシステムからデータを読み出す手順の一実施形態を示すフローチャートである。
【図５】チェックサム情報及びバージョンチェック情報を含むデータの例示的な配置を示す説明図である。
【図６】図５に示すものと同じ記憶位置に新しいデータを書き込んだ後の意図するデータの配置を示す説明図である。
【図７】図５に示すものと同じ記憶位置にデータを書き込めなかった後の実際のデータの配置を示す説明図である。
【図８】ストレージシステム内の様々なデータ記憶位置に関連するバージョンデータを収容するバージョンアレイを示す説明図である。
【図９】ストレージシステム内の同一位置に対する各書き込みの後にバージョン情報をインクリメントする一連の動作の一実施形態を示す状態図である。
【符号の説明】
【００５４】
100  ストレージコントローラ
102  第１のストレージシステム
210  第２のストレージシステム
【図１】
2005004753.tif 000003
【図２】
2005004753.tif 000004
【図３】
2005004753.tif 000005
【図４】
2005004753.tif 000006
【図５】
2005004753.tif 000007
【図６】
2005004753.tif 000008
【図７】
2005004753.tif 000009
【図８】
2005004753.tif 000010
【図９】
2005004753.tif 000011