(57)【要約】【課題】書き込み要求に対する応答遅延が抑制された、書き込みの信頼性が高いストレージ制御装置を実現する。【解決手段】書き込み制御部１１は、書き込み要求に応じて、書き込みデータに、同じ記憶領域への書き込みのたびに更新される付加データを付加して第１の記憶装置２１に書き込むとともに、第２の記憶装置２２における書き込みデータに対応する記憶領域に、同じ付加データを書き込む。読み出し制御部１２は、データの読み出し要求に応じて、読み出しデータとこれに付加された付加データとを第１の記憶装置２１から読み出すとともに、第２の記憶装置２２における対応する記憶領域から付加データを読み出し、各記憶装置から読み出した付加データの照合結果に基づいて読み出しデータの正当性を判定する。【選択図】図１
2015225603.tif 000002
【特許請求の範囲】
【請求項１】
データの書き込み要求に応じて、書き込みが要求された書き込みデータに、同じ記憶領域への書き込みのたびに更新される付加データを付加して第１の記憶装置に書き込むとともに、第２の記憶装置における前記書き込みデータに対応する記憶領域に、前記書き込みデータに付加した付加データを書き込んで、前記書き込み要求に応じた書き込み処理の完了通知を出力する書き込み制御部と、
データの読み出し要求に応じて、読み出しが要求された読み出しデータと前記読み出しデータに付加された付加データとを前記第１の記憶装置から読み出すとともに、前記第２の記憶装置における前記読み出しデータに対応する記憶領域から付加データを読み出し、前記第１の記憶装置および前記第２の記憶装置からそれぞれ読み出した付加データ同士を照合し、照合結果に基づいて前記読み出しデータの正当性を判定する読み出し制御部と、
を有することを特徴とするストレージ制御装置。
【請求項２】
前記書き込み制御部は、前記書き込みデータに対応する冗長データを前記第２の記憶装置に書き込むとともに、前記第１の記憶装置において前記書き込みデータに付加した付加データを前記冗長データに付加して前記第２の記憶装置に書き込み、
前記読み出し制御部は、前記読み出しデータと前記読み出しデータに付加された付加データとを前記第１の記憶装置から読み出すとともに、前記読み出しデータに対応する冗長データに付加された付加データを前記第２の記憶装置から読み出す、
ことを特徴とする請求項１記載のストレージ制御装置。
【請求項３】
前記書き込み制御部は、前記書き込みデータとこれに対応する冗長データとに付加する付加データに、前記書き込みデータの書き込み時の時刻を示す時刻情報を含め、
前記読み出し制御部は、前記第１の記憶装置および前記第２の記憶装置からそれぞれ読み出した付加データ同士を照合する処理において、各付加データに含まれる時刻情報同士を比較し、時刻情報が一致する場合には、読み出された前記読み出しデータおよび対応する冗長データをともに正当なデータと判定し、時刻情報が一致しない場合には、読み出された前記読み出しデータおよび対応する冗長データのうち、付加されていた付加データに含まれる時刻情報が早い時刻を示すデータを不当なデータと判定する、
ことを特徴とする請求項２記載のストレージ制御装置。
【請求項４】
前記読み出し制御部は、読み出された前記読み出しデータおよび対応する冗長データのうちの一方のデータを不当なデータと判定したとき、他方のデータを用いて前記一方のデータを再構築し、前記第１の記憶装置または前記第２の記憶装置に記憶されている前記一方のデータ、および、前記一方のデータに付加された付加データを、再構築された前記一方のデータ、および、前記他方のデータに付加されている付加データによってそれぞれ更新することを特徴とする請求項３記載のストレージ制御装置。
【請求項５】
前記第１の記憶装置に記憶されているデータを、前記第２の記憶装置に記憶されている、当該データに対応する冗長データを用いて再構築して第３の記憶装置に格納するとき、前記第２の記憶装置において当該冗長データに付加されている付加情報を、再構築されたデータに付加して前記第３の記憶装置に書き込むリカバリ制御部をさらに有することを特徴とする請求項２乃至４のいずれか１項に記載のストレージ制御装置。
【請求項６】
前記書き込み制御部は、前記第２の記憶装置に対して、前記書き込みデータに対応する冗長データとして、前記書き込みデータを用いて算出されるパリティデータを書き込むことを特徴とする請求項２乃至５のいずれか１項に記載のストレージ制御装置。
【請求項７】
前記第１の記憶装置および前記第２の記憶装置を含む複数の記憶装置のそれぞれにおける単位記憶領域によってストライプが構成され、ストライプ内の２以上の所定数の単位記憶領域が、書き込みが要求されたデータが格納されるデータ格納領域に割り当てられ、ストライプ内の残りの単位記憶領域が、同じストライプ内のデータ格納領域に格納されたデータに基づくパリティデータが格納されるパリティ格納領域に割り当てられ、
前記書き込み制御部は、ストライプ内の１以上のデータ格納領域に対するデータ更新に伴って同じストライプ内のパリティ格納領域のパリティデータを更新するとき、更新対象のパリティ格納領域における更新後のパリティデータに対して、当該パリティデータの更新時刻を示すパリティ更新時刻情報を付加するとともに、付加したパリティ更新時刻を、データが更新された前記１以上のデータ格納領域における更新後のデータにも付加し、
前記読み出し制御部は、ストライプ内のパリティ格納領域からパリティデータを読み出すとき、読み出したパリティデータに付加されたパリティ更新時刻情報と、同じストライプ内の全データ格納領域においてデータに付加されたパリティ更新時刻情報のうち、最も遅い時刻を示すパリティ更新時刻情報とを照合し、読み出したパリティデータの正当性を判定する、
ことを特徴とする請求項６記載のストレージ制御装置。
【請求項８】
前記書き込み制御部は、前記第２の記憶装置に対して、前記書き込みデータに対応する冗長データとして前記書き込みデータと同一のデータを書き込むことを特徴とする請求項２乃至５のいずれか１項に記載のストレージ制御装置。
【請求項９】
ストレージ制御装置が、
データの書き込み要求に応じて、書き込みが要求された書き込みデータに、同じ記憶領域への書き込みのたびに更新される付加データを付加して第１の記憶装置に書き込むとともに、第２の記憶装置における前記書き込みデータに対応する記憶領域に、前記書き込みデータに付加した付加データを書き込んで、前記書き込み要求に応じた書き込み処理の完了通知を出力し、
データの読み出し要求に応じて、読み出しが要求された読み出しデータと前記読み出しデータに付加された付加データとを前記第１の記憶装置から読み出すとともに、前記第２の記憶装置における前記読み出しデータに対応する記憶領域から付加データを読み出し、
前記第１の記憶装置および前記第２の記憶装置からそれぞれ読み出した付加データ同士を照合し、照合結果に基づいて前記読み出しデータの正当性を判定する、
ことを特徴とするストレージ制御方法。
【請求項１０】
コンピュータに、
データの書き込み要求に応じて、書き込みが要求された書き込みデータに、同じ記憶領域への書き込みのたびに更新される付加データを付加して第１の記憶装置に書き込むとともに、第２の記憶装置における前記書き込みデータに対応する記憶領域に、前記書き込みデータに付加した付加データを書き込んで、前記書き込み要求に応じた書き込み処理の完了通知を出力し、
データの読み出し要求に応じて、読み出しが要求された読み出しデータと前記読み出しデータに付加された付加データとを前記第１の記憶装置から読み出すとともに、前記第２の記憶装置における前記読み出しデータに対応する記憶領域から付加データを読み出し、
前記第１の記憶装置および前記第２の記憶装置からそれぞれ読み出した付加データ同士を照合し、照合結果に基づいて前記読み出しデータの正当性を判定する、
処理を実行させることを特徴とするストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、ストレージ制御方法およびストレージ制御プログラムに関する。
【背景技術】
【０００２】
ストレージシステムに関しては、書き込み処理の信頼性を高めるための様々な技術が考えられている。その例として、ＨＤＤ（Hard Disk Drive）等の記憶装置へデータを書き込んだ直後に、書き込まれたデータを読み込み、読み込んだデータと元のデータとが一致しているかを確認する技術がある。この技術は、リードアフターライト（Read After Write：ＲＡＷ）等と呼ばれる。
【０００３】
また、ファイル管理の信頼性を高める技術には次のようなものがある。例えば、参照対象ブロックの位置と、実際に読み出したブロック内のファイル更新情報域内に設定されているブロックの位置情報とを比較して、ファイルのブロック破壊を検査する技術が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平０６−１７５９０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
書き込み処理時にＲＡＷを用いた場合、ストレージシステムにおけるデータの書き込み処理の信頼性は向上するものの、データの書き込み処理に加え、書き込んだデータを確認するためのデータの読み出し処理が生じる。そのため、書き込み処理時にＲＡＷを用いる場合、上記データの読み出し処理にかかる時間だけ、書き込み処理の要求に対する応答が遅延する。
【０００６】
１つの側面では、本発明は、書き込み要求に対する応答遅延が抑制された、書き込みの信頼性が高いストレージ制御装置、ストレージ制御方法およびストレージ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
１つの案では、書き込み制御部と読み出し制御部とを有するストレージ制御装置が提供される。書き込み制御部は、データの書き込み要求に応じて、書き込みが要求された書き込みデータに、同じ記憶領域への書き込みのたびに更新される付加データを付加して第１の記憶装置に書き込むとともに、第２の記憶装置における書き込みデータに対応する記憶領域に、書き込みデータに付加した付加データを書き込んで、書き込み要求に応じた書き込み処理の完了通知を出力する。読み出し制御部は、データの読み出し要求に応じて、読み出しが要求された読み出しデータと読み出しデータに付加された付加データとを第１の記憶装置から読み出すとともに、第２の記憶装置における読み出しデータに対応する記憶領域から付加データを読み出し、第１の記憶装置および第２の記憶装置からそれぞれ読み出した付加データ同士を照合し、照合結果に基づいて読み出しデータの正当性を判定する。
【０００８】
また、１つの案では、上記ストレージ制御装置と同様の処理をコンピュータが実行するストレージ制御方法が提供される。
さらに、１つの案では、上記ストレージ制御装置と同様の処理をコンピュータに実行させるストレージ制御プログラムが提供される。
【発明の効果】
【０００９】
一側面では、書き込み要求に対する応答遅延が抑制された、書き込みの信頼性が高いストレージ制御装置、ストレージ制御方法およびストレージ制御プログラムを実現できる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施の形態のストレージシステムの構成例および処理例を示す図である。
【図２】第２の実施の形態のストレージシステムの構成例を示す図である。
【図３】ストレージ制御装置のハードウェア構成例を示す図である。
【図４】ストレージ制御装置の機能例を示す図である。
【図５】セクタのフォーマット例を示す図である。
【図６】ＲＡＩＤ管理テーブルの例を示す図である。
【図７】ＲＡＩＤ１における書き込み制御および読み出し制御の例を示す図である。
【図８】ＲＡＩＤ１における書き込み制御および読み出し制御の例を示す図（続き）である。
【図９】ＲＡＩＤ５における書き込み制御の例を示す図である。
【図１０】ＲＡＩＤ５における読み出し制御の例を示す図である。
【図１１】パリティの読み出し制御を伴うデータの書き込み制御の例を示す図である。
【図１２】パリティの読み出し制御を伴うデータの書き込み制御の例を示す図（続き）である。
【図１３】ＲＡＩＤ５におけるパリティの読み出し制御の例を示す図である。
【図１４】ＲＡＩＤ１のＲＡＩＤグループに属するＨＤＤのリカバリの例を示す図である。
【図１５】ＲＡＩＤ５のＲＡＩＤグループに属するＨＤＤのリカバリの例を示す図である。
【図１６】ＲＡＩＤ５のＲＡＩＤグループに属するＨＤＤのリカバリの例を示す図（続き）である。
【図１７】ＲＡＩＤ５のＲＡＩＤグループに属するＨＤＤのリカバリの例を示す図（続き２）である。
【図１８】書き込み制御処理の例を示すフローチャートである。
【図１９】読み出し制御処理の例を示すフローチャートである。
【図２０】リカバリ処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のストレージシステムの構成例および処理例を示す図である。第１の実施の形態のストレージ装置１は、ストレージ制御装置１０、第１の記憶装置２１および第２の記憶装置２２を有する。
【００１２】
第１の記憶装置２１および第２の記憶装置２２は、例えば、ＨＤＤやＳＳＤ（Solid State Drive）として実現される。なお、第１の記憶装置２１と第２の記憶装置２２の少なくとも一方は、ストレージ装置１の外部に設けられていてもよい。また、第１の記憶装置２１と第２の記憶装置２２の少なくとも一方は、ストレージ制御装置１０の内部に搭載されていてもよい。
【００１３】
ストレージ制御装置１０には、例えば、ホスト装置３０が接続されている。ストレージ制御装置１０は、例えば、ホスト装置３０からの要求に応じて、第１の記憶装置２１に対するデータの書き込みや、第１の記憶装置２１からのデータの読み出しを行う。また、データの書き込み要求やデータの読み出し要求は、ホスト装置３０ではなく、ストレージ制御装置１０の内部機能（図示せず）から発せられてもよい。
【００１４】
ストレージ制御装置１０は、書き込み制御部１１および読み出し制御部１２を有する。
書き込み制御部１１は、データの書き込み要求に応じて、書き込みが要求された書き込みデータに付加データを付加して第１の記憶装置２１に書き込む。これとともに、書き込み制御部１１は、第２の記憶装置２２における書き込みデータに対応する記憶領域にも、書き込みデータと付加データを書き込む。書き込み制御部１１は、以上の処理を実行すると、書き込み要求に応じた書き込み処理の完了通知を、その要求元に対して出力する。
【００１５】
書き込みデータに付加される付加データは、同じ記憶領域への書き込みのたびに更新されるデータであればよい。このような付加データの例としては、データの更新時刻を示す情報を用いることができる。また、第１の記憶装置２１において、付加データは、対応する書き込みデータと隣接する記憶領域に書き込まれる。
【００１６】
読み出し制御部１２は、データの読み出し要求に応じて、読み出しが要求された読み出しデータと、この読み出しデータに付加された付加データとを、第１の記憶装置２１から読み出す。これとともに、読み出し制御部１２は、第２の記憶装置２２における上記の読み出しデータに対応する記憶領域から、付加データを読み出す。
【００１７】
読み出し制御部１２は、第１の記憶装置２１および第２の記憶装置２２からそれぞれ読み出した付加データ同士を照合し、照合結果に基づいて、第１の記憶装置２１から読み出した読み出しデータの正当性を判定する。付加データ同士が一致している場合、読み出しデータが正当なものであると判定される。一方、付加データ同士が一致していない場合、読み出しデータが不当なものである可能性があると判定される。
【００１８】
ここで、第１の記憶装置２１におけるデータ領域２１ａにデータ＃１が記憶され、かつ、データ領域２１ａに隣接する付加データ領域２１ｂに、データ＃１に対応する付加データが記憶されている初期状態からの処理例について説明する。付加データには、対応するデータ領域でのデータの最終更新時刻を示すものとする。そして、初期状態では、付加データ領域２１ｂに、データ＃１に対応する付加データとして時刻“１２：００”が記憶されているとする。なお、この初期状態では、図示しないものの、第２の記憶装置２２における、データ領域２１ａに対応する付加データ領域２２ａにも、データ＃１に対応する付加データとして時刻“１２：００”が記憶されているとする。
【００１９】
書き込み制御部１１は、データ領域２１ａに対する新たなデータ＃２（図示せず）の書き込み要求を受け付ける。すると、書き込み制御部１１は、データ＃２をデータ領域２１ａに書き込み、現在の時刻“１４：００”を付加データ領域２１ｂに書き込む。これとともに、書き込み制御部１１は、第２の記憶装置２２における、データ領域２１ａに対応する付加データ領域２２ａにも、付加データとして現在の時刻“１４：００”を書き込む（Ｓ１）。
【００２０】
ここで、第１の記憶装置２１におけるデータ領域２１ａおよび付加データ領域２１ｂへの書き込み処理が失敗し、データ領域２１ａおよび付加データ領域２１ｂが更新されなかったものとする。例えば、第１の記憶装置２１がＨＤＤであるとすると、磁気ディスクの記録面やヘッドに一時的にゴミやホコリが付着した場合に、データ領域２１ａおよび付加データ領域２１ｂが更新されない“書き込み抜け”が発生する場合がある。
【００２１】
この後、読み出し制御部１２は、第１の記憶装置２１におけるデータ領域２１ａからのデータの読み出し要求を受け付ける。すると、読み出し制御部１２は、第１の記憶装置２１のデータ領域２１ａおよび付加データ領域２１ｂから、それぞれデータおよび付加データを読み出す。これとともに、読み出し制御部１２は、第２の記憶装置２１の付加データ領域２２ａから、付加データを読み出す（Ｓ２）。
【００２２】
読み出し制御部１２は、付加データ領域２１ｂ，２２ａからそれぞれ読み出した付加データ同士を照合する（Ｓ３）。もし、これらの付加データが一致する場合、読み出し制御部１２は、データ領域２１ａに対する直近の書き込み処理（データ＃２の書き込み処理）が正常に実行されており、データ領域２１ａから読み出したデータが正当なものであると判定する。この場合、データ領域２１ａから読み出されたデータは、データ＃２となる。
【００２３】
しかし、上記のように、データ領域２１ａに対するデータ＃２の書き込み処理が正常に行われず、データ領域２１ａおよび付加データ領域２１ｂが更新されなかった場合、付加データ領域２１ｂ，２２ａからそれぞれ読み出された付加データは一致しない。この場合、図１に示すように、付加データ領域２１ｂからは時刻“１２：００”が読み出され、付加データ領域２２ａからは時刻“１４：００”が読み出される。この場合、読み出し制御部１２は、データ領域２１ａに対する直近の書き込み処理（データ＃２の書き込み処理）が正常に実行されていないために、データ領域２１ａから読み出したデータが正当なものでない可能性があると判定する。
【００２４】
以上の処理によれば、ストレージ制御装置１０は、データの読み出しが要求されたときに、第１の記憶装置２１においてそのデータに付加された付加データと、第２の記憶装置２２における対応する記憶領域に格納された付加データとを照合する。これにより、ストレージ制御装置１０は、読み出したデータが不当である可能性の有無を判定することができる。よって、第１の記憶装置２１に対するデータ書き込みの信頼性を向上させることができる。
【００２５】
また、ストレージ制御装置１０は、データの書き込みが要求されたときに、そのデータに付加データを付加して第１の記憶装置２１に書き込むとともに、同じ付加データを別の記憶装置（第２の記憶装置２２）にも書き込む。これにより、ストレージ制御装置１０は、データの書き込み要求を受け付けたときでなく、その後に、書き込まれたデータの読み出し要求を受け付けたときに、書き込まれたデータが不当である可能性の有無を判定することができる。よって、データの書き込み要求に対する応答遅延を抑制することができる。例えば、データの書き込み要求を受け付けたときにデータの正当性を検証するＲＡＷと比較して、データの書き込み要求に対する応答速度を向上させることができる。
【００２６】
［第２の実施の形態］
図２は、第２の実施の形態のストレージシステムの構成例を示す図である。ストレージシステム２は、ストレージ制御装置１００およびディスクアレイ２００を有する。ストレージ制御装置１００は、第１の実施の形態のストレージ制御装置１０の一例である。
【００２７】
ディスクアレイ２００は、ＨＤＤ２１０ａ，２１０ｂ，２１０ｃ，２１０ｄ，２１０ｅ，２１０ｆを有する。ＨＤＤ２１０ａ，２１０ｂ，２１０ｃ，２１０ｄ，２１０ｅ，２１０ｆは、第１の実施の形態の第１の記憶装置２１または第２の記憶装置２２の一例である。ＨＤＤ２１０ａ，２１０ｂ，２１０ｃ，２１０ｄ，２１０ｅ，２１０ｆは、ホスト装置３００によるアクセス要求の対象となるデータを記憶する。第２の実施の形態において、ＨＤＤ２１０ａ，２１０ｂ，２１０ｃ，２１０ｄ，２１０ｅ，２１０ｆは、同じ物理記憶容量を有する。
【００２８】
なお、第２の実施の形態では、ディスクアレイ２００内の記憶装置としてＨＤＤ２１０ａ等のＨＤＤを備えるが、例えば、ＳＳＤ等のＨＤＤ以外の不揮発性記憶装置を備えていてもよい。また、ディスクアレイ２００が備えるＨＤＤは、２〜５つでもよいし、７つ以上でもよい。また、ストレージ制御装置１００には、ディスクアレイ２００と同様の構成を有する複数のディスクアレイが接続されていてもよい。
【００２９】
ストレージ制御装置１００には、ホスト装置３００が接続されている。ストレージ制御装置１００は、ホスト装置３００からのアクセス要求に応じて、ディスクアレイ２００内のＨＤＤに対するデータの読み書きを行う。アクセス要求には、ディスクアレイ２００内のＨＤＤに対するデータの書き込みを要求する"書き込み要求"や、ディスクアレイ２００内のＨＤＤに対するデータの読み出しを要求する"読み出し要求"が含まれる。
【００３０】
また、ストレージ制御装置１００は、ディスクアレイ２００内のＨＤＤによって実現される物理記憶領域をＲＡＩＤ（Redundant Arrays of Inexpensive Disks）によって管理し、これらの物理記憶領域へのアクセスを制御する。このとき、ストレージ制御装置１００は、ディスクアレイ２００に搭載された複数のＨＤＤを、ＲＡＩＤグループとして管理する。ＲＡＩＤグループとは、複数のＨＤＤの記憶領域によって構成され、異なるＨＤＤにデータが冗長化されるように管理される論理記憶領域である。
【００３１】
ホスト装置３００は、例えば、ユーザの操作に応じて、ストレージ制御装置１００を通じて、ディスクアレイ２００内のＨＤＤに対するデータの書き込みを行うことができる。また、ホスト装置３００は、例えば、ユーザの操作に応じて、ストレージ制御装置１００を通じて、ディスクアレイ２００内のＨＤＤからのデータの読み出しを行うことができる。
【００３２】
図３は、ストレージ制御装置のハードウェア構成例を示す図である。
ストレージ制御装置１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、ＲＡＭ１０２および複数の周辺機器が、バス１０９を介して接続されている。ＲＡＭ１０２は、ストレージ制御装置１００の主記憶装置として使用され、プロセッサ１０１に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。
【００３３】
プロセッサ１０１には、周辺機器の例として、ＨＤＤ１０３、表示装置１０４、入力装置１０５、読み取り装置１０６、ホストインタフェース１０７およびディスクインタフェース１０８が接続されている。
【００３４】
ＨＤＤ１０３は、ストレージ制御装置１００の二次記憶装置として使用され、プロセッサ１０１によって実行されるプログラムやその実行に必要な各種のデータ等を記憶する。なお、二次記憶装置としては、例えば、ＳＳＤ等の他の種類の不揮発性記憶装置が使用されてもよい。
【００３５】
表示装置１０４は、プロセッサ１０１からの命令にしたがって、ストレージ制御装置１００が備えるディスプレイに画像を表示させる。なお、ディスプレイとしては、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）や有機ＥＬ（Electro Luminescence）等を用いることができる。
【００３６】
入力装置１０５は、ストレージ制御装置１００のユーザによる入力操作により出力された出力信号をプロセッサ１０１に送信する。入力装置１０５の例として、タッチパッドやキーボード等が挙げられる。
【００３７】
読み取り装置１０６は、記録媒体１０６ａに記録されたプログラムやデータを読み取る駆動装置である。記録媒体１０６ａとして、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤ等の磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）等の光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。
【００３８】
ホストインタフェース１０７は、ホスト装置３００とストレージ制御装置１００との間でデータを送受信するインタフェース処理を実行する。ディスクインタフェース１０８は、ディスクアレイ２００とストレージ制御装置１００との間でデータを送受信するインタフェース処理を実行する。
【００３９】
なお、ストレージ制御装置１００は、読み取り装置１０６を備えていなくてもよく、専ら他の端末装置から制御される場合には、表示装置１０４や入力装置１０５を備えていなくてもよい。
【００４０】
図４は、ストレージ制御装置の機能例を示す図である。ストレージ制御装置１００は、管理情報記憶部１１０、ホストアクセス制御部１２０、ＲＡＩＤ制御部１３０、パトロール制御部１４０およびリカバリ制御部１５０を有する。管理情報記憶部１１０は、ＲＡＭ１０２またはＨＤＤ１０３に確保した記憶領域として実現できる。ホストアクセス制御部１２０、ＲＡＩＤ制御部１３０、パトロール制御部１４０およびリカバリ制御部１５０の処理は、例えば、プロセッサ１０１が所定のプログラムを実行することで実現される。
【００４１】
管理情報記憶部１１０は、ストレージ制御装置１００が管理するＲＡＩＤグループに関する情報を格納するＲＡＩＤ管理テーブルを記憶する。
ホストアクセス制御部１２０は、ホスト装置３００から、ディスクアレイ２００内のＨＤＤによって実現される記憶領域（論理ボリューム）に対するアクセス要求（読み出し要求または書き込み要求）を受け付ける。ホストアクセス制御部１２０は、ＲＡＭ１０２の一部をキャッシュ領域として使用しながら、ホスト装置３００からディスクアレイ２００内の記憶領域へのアクセスを制御する。キャッシュ領域は、ディスクアレイ２００に記録するデータをキャッシュするための記憶領域を意味する。
【００４２】
例えば、ホストアクセス制御部１２０は、ホスト装置３００から書き込みが要求されたデータを、キャッシュ領域に一時的に蓄積する。ホストアクセス制御部１２０は、キャッシュ領域へのデータの書き込みとは非同期のタイミングで、キャッシュ領域に蓄積されたデータをディスクアレイ２００の記憶領域に記憶させる"ライトバック"を実行する。ライトバックを実行する際、ホストアクセス制御部１２０は、ライトバックの対象とするデータと、書き込み先のＲＡＩＤグループおよび論理記憶領域とをＲＡＩＤ制御部１３０に指定して、ディスクアレイ２００への書き込みを依頼する。
【００４３】
また、ホストアクセス制御部１２０は、ホスト装置３００からデータの読み出し要求を受け付けると、読み出しを要求されたデータがキャッシュ領域に蓄積されているかを判定する。読み出しを要求されたデータがキャッシュ領域に蓄積されている場合、ホストアクセス制御部１２０は、データをキャッシュ領域から読み出してホスト装置３００に送信する。
【００４４】
一方、読み出しを要求されたデータがキャッシュ領域に蓄積されていない場合、ホストアクセス制御部１２０は、論理ボリュームにおけるデータの読み出し元の論理アドレスを指定して、ＲＡＩＤ制御部１３０にデータの読み出しを依頼する。ホストアクセス制御部１２０は、ディスクアレイ２００から読み出されたデータを、キャッシュ領域に格納すると共に、ホスト装置３００に送信する。
【００４５】
ＲＡＩＤ制御部１３０は、書き込み制御部１３１および読み出し制御部１３２を有する。書き込み制御部１３１は、第１の実施の形態の書き込み制御部１１の一例である。また、読み出し制御部１３２は、第１の実施の形態の読み出し制御部１２の一例である。
【００４６】
書き込み制御部１３１は、ホストアクセス制御部１２０からの書き込みの依頼を受けたとき、ＲＡＩＤ管理テーブルに記憶された、書き込み対象の論理ボリュームに対応するＲＡＩＤグループの情報と、ホストアクセス制御部１２０から指定された論理アドレスとに基づいて、書き込み先の物理記憶領域を特定する。物理記憶領域は、ディスク番号およびセクタ番号により特定される。ディスク番号は、ディスクアレイ２００内のＨＤＤを識別するための番号である。セクタ番号は、ＨＤＤ毎のセクタを識別するための番号である。書き込み制御部１３１は、特定したディスクアレイ２００内のＨＤＤの物理記憶領域にデータを書き込む。
【００４７】
書き込み制御部１３１は、データを書き込む際、書き込み先のセクタの更新日時を示す"更新日時情報"を生成する。書き込み制御部１３１は、生成した更新日時情報を、データの書き込みと同時に書き込み先のセクタに付加情報として書き込む。これとともに、書き込み制御部１３１は、生成した更新日時情報を、書き込み先のＨＤＤと同じＲＡＩＤグループに属する他のＨＤＤ内のセクタにも付加情報として書き込む。書き込み制御部１３１は、データの書き込みの結果をホストアクセス制御部１２０に通知する。
【００４８】
なお、更新日時情報の書き込み先のセクタの特定方法の詳細については、図７以降で後述する。また、第２の実施の形態において、異なる複数のＨＤＤにデータを書き込む場合、各ＨＤＤに並列して書き込むことが可能である。
【００４９】
読み出し制御部１３２は、ホストアクセス制御部１２０からの依頼に応じて、ディスクアレイ２００内のＨＤＤからデータを読み出す。依頼元がホストアクセス制御部１２０である場合、読み出し制御部１３２は、ＲＡＩＤ管理テーブルに記憶された、読み出し対象の論理ボリュームに対応するＲＡＩＤグループの情報と、ホストアクセス制御部１２０から指定された読み出し元の論理アドレスとに基づいて、読み出し元の物理記憶領域を特定する。読み出し制御部１３２は、依頼元の機能（ホストアクセス制御部１２０）に、読み出したデータを受け渡す。なお、第２の実施の形態において、異なる複数のＨＤＤからデータを読み出す場合、各ＨＤＤから並列してデータを読み出すことが可能である。
【００５０】
読み出し制御部１３２は、データを読み出す際、ＲＡＩＤ管理テーブルを参照して、読み出し元のＨＤＤと同じＲＡＩＤグループに属する他のＨＤＤから、比較対象となる更新日時情報が格納されたセクタを特定する。読み出し制御部１３２は、読み出し元のＨＤＤのセクタと、上記で特定したセクタの両方から更新日時情報を読み出し、読み出した更新日時情報同士を比較する。各更新日時情報が一致した場合、読み出し制御部１３２は、読み出し元のＨＤＤのセクタに対する書き込み処理で書き込み抜けが発生していなかったと判定する。ここで、"書き込み抜け"は、セクタへの書き込み時に、ＨＤＤの磁気ディスク面やヘッドに一時的にゴミやホコリが付着することにより、そのセクタへの書き込みが行われず、そのセクタのデータが更新されないことを意味する。
【００５１】
読み出し制御部１３２は、各更新日時情報が一致しなかった場合、比較対象である更新日時情報が設定されているセクタのいずれかについて、直近の書き込み処理で書き込み抜けが発生したと判定し、比較結果に基づいて書き込み抜けがあったセクタを判定する。読み出し制御部１３２は、リカバリ制御部１５０に、書き込み抜けがあったと判定したセクタを指定してリカバリを依頼する。書き込み抜けがあったセクタが読み出し元のセクタである場合、読み出し制御部１３２は、リカバリ制御部１５０からリカバリが完了した旨の通知を受けて、そのセクタを読み出し、読み出したセクタに設定されているデータを依頼元の機能に通知する。ここで、"セクタのリカバリ"は、ＨＤＤ内のいずれかのセクタについてのみリカバリすることを意味する。
【００５２】
パトロール制御部１４０は、ストレージシステム２の管理者の入力操作により、または、定期的または不定期に、ディスクアレイ２００内のＨＤＤのセクタからデータを読み出し、ＨＤＤに異常がないか判定する。
【００５３】
パトロール制御部１４０は、読み出しに失敗したＨＤＤが存在する場合、その旨をストレージシステム２の管理者に通知する。通知を受けた管理者は、例えば、ストレージ制御装置１００に対する入力操作により、通知されたＨＤＤに対するリカバリをストレージ制御装置１００に実行させる。なお、パトロール制御部１４０は、読み出しに失敗したＨＤＤが存在する場合、リカバリ制御部１５０に異常が発生したＨＤＤのディスク番号を指定して、そのＨＤＤのリカバリを依頼してもよいし、ログファイル等に記録したりしてもよい。後者の場合、ログファイルは、例えば、ストレージ制御装置１００のＨＤＤ１０３に格納する。ここで、"ＨＤＤのリカバリ"は、ＨＤＤ内の各セクタのデータをリカバリすることを意味する。
【００５４】
リカバリ制御部１５０は、読み出し制御部１３２からの依頼に応じて、指定されたセクタのリカバリを行う。また、リカバリ制御部１５０は、ストレージシステム２の管理者の入力操作に応じて、指定されたＨＤＤのリカバリを行う。
【００５５】
図５は、セクタのフォーマット例を示す図である。図５において、左側に記載された領域ほど前方の領域（記憶領域の先頭側の領域）であるものとする。セクタ２１１は、ディスクアレイ２００内のＨＤＤの物理記憶領域を、一定記憶容量毎に分割した領域である。セクタ２１１は、ストレージ制御装置１００がＨＤＤの物理記憶領域へデータを記録する際の最小単位となる。例えば、ＲＡＩＤ制御部１３０は、ホストアクセス制御部１２０から書き込みが要求されたデータを一定データ長の分割データに分割し、１つの分割データを１つのセクタ２１１に書き込む。
【００５６】
セクタ２１１は、データ領域および付加情報領域を有する。ここでは、例として、１つのセクタ２１１の大きさを４２２４バイトとし、データ領域の大きさを４１６０バイトとし、付加情報領域の大きさを６４バイトとする。
【００５７】
データ領域には、ホスト装置３００から書き込みが要求されたデータや、ストライプ内に分割されたデータのパリティが格納される。付加情報領域には、自己のセクタ内のデータの更新日時を示す情報（更新日時情報）が格納される。また、セクタ２１１が属するＲＡＩＤグループのＲＡＩＤレベルがＲＡＩＤ５である場合、付加情報領域には、さらに、同じストライプ内の他のセクタの更新日時情報が１つ以上格納される。
【００５８】
なお、各セクタにおける付加情報領域の位置は、データ領域の前方に隣接した位置でもよいし、データ領域の後方に隣接した位置でもよい。第２の実施の形態では、付加情報領域の位置は、データ領域の後方に位置するものとする。
【００５９】
図６は、ＲＡＩＤ管理テーブルの例を示す図である。ＲＡＩＤ管理テーブル１１１は、ストレージ制御装置１００が管理するＲＡＩＤグループに関する情報を格納する。ＲＡＩＤ管理テーブル１１１は、ＲＡＩＤグループ毎に生成されて、管理情報記憶部１１０に記憶される。各ＲＡＩＤ管理テーブル１１１には、ＲＡＩＤグループ番号、ＲＡＩＤレベル、ストライプサイズ、ディスク数およびディスク番号の各項目に対応する情報が登録される。
【００６０】
ＲＡＩＤグループ番号の項目には、ＲＡＩＤグループの識別番号が設定される。ＲＡＩＤレベルの項目には、対応するＲＡＩＤグループの制御に使用されるＲＡＩＤレベルが設定される。ストライプサイズの項目には、ストライプが使用されるＲＡＩＤレベル（例えば、ＲＡＩＤ５等）が設定された場合に、１ストライプにおける記憶装置毎の記憶領域のサイズが設定される。
【００６１】
ディスク数の項目には、対応するＲＡＩＤグループに属するＨＤＤの数が設定される。ディスク番号の項目には、対応するＲＡＩＤグループに属するＨＤＤの識別番号が設定される。したがって、ディスク番号の項目には、ディスク数の項目に設定された数分のディスク番号が登録される。
【００６２】
次に、ＲＡＩＤ制御部１３０が、ＲＡＩＤレベルがＲＡＩＤ１のＲＡＩＤグループに属するＨＤＤに対して、データの書き込み制御および読み出し制御を実行し、データの書き込み抜けの有無を判定する方法について説明する。
【００６３】
書き込み制御部１３１は、ディスクアレイ２００内のＨＤＤへデータを書き込む際、書き込み先がＲＡＩＤ１のＲＡＩＤグループの場合、書き込み先の各ＨＤＤのセクタに対して、データと同時に更新日時情報を書き込む。そして、書き込み制御部１３１は、書き込み結果をホストアクセス制御部１２０へ通知する。なお、ストレージシステム２において、各ＨＤＤの物理記憶領域の構成が同一であるため、書き込み先がＲＡＩＤ１のＲＡＩＤグループの場合、書き込み先の各セクタは、同じセクタ番号となる。
【００６４】
読み出し制御部１３２は、ＲＡＩＤ１のＲＡＩＤグループからデータを読み出す際、一方のＨＤＤにおける読み出し元のセクタから、データとともに更新日時情報を読み出す。これとともに、読み出し制御部１３２は、他方のＨＤＤにおける同じセクタからも更新日時情報を読み出す。そして、読み出し制御部１３２は、読み出した各更新日時情報を比較し、各更新日時情報の比較結果に基づいて、読み出し元の各セクタにおける書き込み抜けの有無を判定する。
【００６５】
ここで、図７〜８を用いて、ＲＡＩＤ１の場合のデータの書き込み制御および読み出し制御の具体例を説明する。
図７は、ＲＡＩＤ１における書き込み制御および読み出し制御の例を示す図である。ＨＤＤ２１０ａ，２１０ｂは、ＲＡＩＤグループ＃１に属する。ＲＡＩＤグループ＃１のＲＡＩＤレベルは、ＲＡＩＤ１である。ＨＤＤ２１０ａのディスク番号は"＃１"であり、ＨＤＤ２１０ｂのディスク番号は"＃２"である。セクタ２１１ａ，２１１ｂは、それぞれＨＤＤ２１０ａ，２１０ｂにおける記憶領域であり、セクタ２１１ａ，２１１ｂのセクタ番号は、ともに"＃１"である。すなわち、セクタ２１１ａ，２１１ｂに対しては、同じデータの書き込み処理が実行される。以下、ディスク番号が"ｎ"（ｎは、自然数）であるＨＤＤを"ＨＤＤ＃ｎ"と記載する場合がある。また、セクタ番号が"ｎ"（ｎは、自然数）であるセクタを"セクタ＃ｎ"と記載する場合がある。
【００６６】
ここで、書き込み制御部１３１が、ＲＡＩＤグループ＃１に属する各ＨＤＤ内のセクタ＃１に対して、データ＃Ｂの書き込み処理を実行する場合において、データ＃Ｂの書き込み抜けが発生しなかった場合の例について説明する。
【００６７】
まず、書き込み制御部１３１は、セクタ２１１ａ，２１１ｂの更新日時情報を生成する。そして、書き込み制御部１３１は、セクタ２１１ａ，２１１ｂに、生成した更新日時情報をデータ＃Ｂと同時に書き込む（Ｓ１１）。なお、書き込み制御部１３１は、セクタ２１１ａ，２１１ｂへのデータおよび更新日時情報の書き込みを、並列に行うことができる。
【００６８】
図７上段に示すように、セクタ２１１ａ，２１１ｂのいずれに対してもデータの書き込みが成功している。そのため、図７中段に示すように、セクタ２１１ａ，２１１ｂのデータ領域には、データ＃Ｂが格納され、付加情報領域には、更新日時情報として各セクタの更新日時情報"１０：００"が格納される。このように、各セクタへのデータの書き込みに成功した場合、各セクタに格納された更新日時情報は同じ値となる。
【００６９】
次に、読み出し制御部１３２は、ＲＡＩＤグループ＃１に属する各ＨＤＤ内のセクタ＃１からデータ＃Ｂを読み出す際、ＨＤＤ＃１のセクタ２１１ａからデータ＃Ｂおよび更新日時情報を読み出すとともに、ＨＤＤ＃２のセクタ２１１ｂからも更新日時情報を読み出す。なお、実際の処理では、ＨＤＤ＃１，＃２に対して読み出しアドレスとして同じセクタ番号"１"が指定され、この指定に応じてＨＤＤ＃１，＃２の両方からセクタ２１１ａ，２１１ｂ全体に格納された情報が読み出される。
【００７０】
読み出し制御部１３２は、セクタ２１１ａ，２１１ｂから読み出した各更新日時情報を比較する。図７中段に示すように、セクタ２１１ａ，２１１ｂの更新日時情報は、一致する。そのため、読み出し制御部１３２は、各ＨＤＤのセクタ＃１に対してデータの書き込み抜けがなかったと判定する。
【００７１】
図８は、ＲＡＩＤ１における書き込み制御および読み出し制御の例を示す図（続き）である。図８では、書き込み制御部１３１が、ＲＡＩＤグループ＃１に属する各ＨＤＤ内のセクタ＃１に対して、データ＃Ｂの書き込み処理を実行する場合において、データ＃Ｂの書き込み抜けが発生した場合の例について説明する。図８において、図７と同じ構成や処理については説明を省略する。
【００７２】
図８では、セクタへの書き込み前において、セクタ２１１ａ，２１１ｂのデータ領域にデータ＃Ａが格納され、付加情報領域には各セクタの更新日時情報"０９：００"が格納されているものとする。
【００７３】
まず、書き込み制御部１３１は、図７と同様に、セクタ２１１ａ，２１１ｂに、各セクタの更新日時情報をデータ＃Ｂと同時に書き込む（Ｓ１１ａ）。
図８上段に示すように、セクタ２１１ｂに対してはデータの書き込みに成功しているが、セクタ２１１ａに対しては書き込み抜けが発生している。そのため、図８中段に示すように、セクタ２１１ａのデータ領域には、更新前のデータであるデータ＃Ａが格納されたままであり、付加情報領域にはデータ＃Ａに更新したときの更新日時情報"０９：００"が格納されたままである。一方、セクタ２１１ｂのデータ領域は、データ＃Ｂに更新され、付加情報領域は、データ＃Ｂに更新したときの更新日時情報"１０：００"に更新されている。したがって、書き込み抜けがあったセクタ２１１ａに格納されている更新日時情報は、書き込み抜けのなかったセクタ２１１ｂに格納されている更新日時情報と比較して小さい。
【００７４】
このように、更新日時情報の格納先となるセクタのうち、いずれかのセクタについて書き込み抜けがあった場合、各セクタに格納した更新日時情報は一致しなくなる。また、更新日時情報は、直近の更新日時に近い日時であるほど値が大きくなる。そのため、上記のように、書き込み抜けのあったセクタに格納されている更新日時情報は、書き込みに成功した更新日時情報より小さくなる。
【００７５】
次に、読み出し制御部１３２は、ＲＡＩＤグループ＃１に属する各ＨＤＤ内のセクタ＃１からデータを読み出す際、ＨＤＤ＃１のセクタ２１１ａからデータおよび更新日時情報を読み出すとともに、ＨＤＤ＃２のセクタ２１１ｂからも更新日時情報を読み出す。そして、読み出し制御部１３２は、読み出した各更新日時情報を比較する。図８中段に示すように、セクタ２１１ａに格納された更新日時情報は、セクタ２１１ｂに格納された更新日時情報より小さい。したがって、読み出し制御部１３２は、セクタ２１１ａに対してデータの書き込み抜けがあったと判定する。
【００７６】
図７〜８で説明したように、ＲＡＩＤ１のＲＡＩＤグループに対してデータを書き込む際、データの書き込み先となる両方のセクタに、データと同時に更新日時情報を書き込む。そして、ＲＡＩＤ１のＲＡＩＤグループからデータを読み出す際、同じＲＡＩＤグループに属する各ＨＤＤから、読み出し元のセクタ番号が一致する各セクタから更新日時情報を読み出し、読み出した各更新日時情報同士を比較して書き込み抜けの有無を判定する。
【００７７】
データの書き込み先のセクタの一部の領域へ更新日時情報を書き込むことにより、その更新日時情報は、書き込みの対象となるデータと共に同じセクタに書き込まれる。そのため、更新日時情報の更新の有無を判定することで、同じセクタに格納されているデータの書き込み抜けの有無を判定でき、データの書き込みに対する信頼性が向上する。
【００７８】
また、ＲＡＷのように書き込みが要求された際にデータの書き込み抜けの有無を判定するのではなく、読み出しが要求された際に判定することで、ＲＡＷを行う場合と比較してデータの書き込み要求に対する応答の遅延を抑制できる。
【００７９】
また、付加情報領域に格納する情報を、更新日時情報のようなデータの更新に伴って大きくなる情報にすることで、付加情報領域に設定された情報の比較結果により、書き込み抜けのあったセクタを特定できるようになる。
【００８０】
また、二重化するデータのそれぞれに隣接する記憶領域に更新日時情報を書き込むことで、更新日時情報を各ＨＤＤへ並列に書き込み可能となり、しかも、更新日時情報をデータと同時に書き込み可能となる。そのため、データの書き込み要求に対する応答時間にほとんど影響を与えずに、更新日時情報を書き込む処理を実行できる。また、読み出し時においても、一方のＨＤＤからは更新日時情報をデータと同時に読み出し可能となる。しかも、更新日時情報を異なるＨＤＤに格納することで、各更新日時情報を並列に読み出すことができる。そのため、読み出し要求に対する応答時間に影響を与えずに、複数のＨＤＤから更新日時情報を読み出す処理を実行できる。よって、ホスト装置３００からのアクセス要求に対する応答時間に影響を与えずに、書き込み抜けの有無を判定できる。
【００８１】
なお、図７〜８では、ＲＡＩＤレベルがＲＡＩＤ１のＲＡＩＤグループに属するセクタに対する書き込み抜けの判定の例について説明したが、データが二重化されるＲＡＩＤグループであれば、ＲＡＩＤ１に限定されるものではない。例えば、図７〜８において、ＲＡＩＤグループ＃１のＲＡＩＤレベルは、ＲＡＩＤ１＋０やＲＡＩＤ０＋１であってもよい。
【００８２】
次に、パリティを用いてデータが冗長化される場合の例として、ＲＡＩＤ５の場合について説明する。なお、以下の説明では、データ領域にデータが格納されるセクタを"データセクタ"と記載する場合がある。また、データの領域にパリティが格納されるセクタを"パリティセクタ"と記載する場合がある。
【００８３】
まず、図９を用いて、書き込み先がＲＡＩＤ５のＲＡＩＤグループであり、書き込み先のストライプ内の全データセクタが更新される場合の書き込み制御について説明する。
図９は、ＲＡＩＤ５における書き込み制御の例を示す図である。ＨＤＤ２１０ｃ，２１０ｄ，２１０ｅは、ＲＡＩＤグループ＃２に属する。ＲＡＩＤグループ＃２のＲＡＩＤレベルは、ＲＡＩＤ５である。ＨＤＤ２１０ｃのディスク番号は"＃３"であり、ＨＤＤ２１０ｄのディスク番号は"＃４"であり、ＨＤＤ２１０ｅのディスク番号は"＃５"である。
【００８４】
セクタ２１１ｃ，２１１ｄ，２１１ｅは、それぞれＨＤＤ２１０ｃ，２１０ｄ，２１０ｅにおける記憶領域であり、セクタ２１１ｃ，２１１ｄ，２１１ｅのセクタ番号は、それぞれ"＃１"である。セクタ２１１ｃ，２１１ｄ，２１１ｅは、同一のストライプを構成する。セクタ２１１ｃ，２１１ｄは、データが格納されているセクタ（データセクタ）であり、セクタ２１１ｅは、セクタ２１１ｃ，２１１ｄに分割して格納されたデータのパリティが格納されているセクタ（パリティセクタ）である。
【００８５】
ＲＡＩＤ５のように１種類のパリティが利用される場合、同一ストライプ内の各データセクタの付加情報領域には、そのセクタに対応する更新日時情報と、同一ストライプのパリティセクタに対応する更新日時情報とが格納される。また、パリティセクタの付加情報領域には、同一ストライプの他のデータセクタのそれぞれに対応する更新日時情報と、当該パリティセクタに対応する更新日時情報とが格納される。
【００８６】
ここで、書き込み制御部１３１が、ＲＡＩＤグループ＃２に属するＨＤＤ２１０ｃ，２１０ｄ内のセクタ＃１に対してデータ＃１，＃２の書き込み処理を同時に実行する例について説明する。なお、図９以降では、ディスク番号が＃ｍ（ｍは、自然数）であり、セクタ番号が＃ｎ（ｎは、自然数）である物理記憶領域を、"ＨＤＤ＃ｍ：セクタ＃ｎ"と記載する場合がある。
【００８７】
この場合、まず、書き込み制御部１３１は、書き込み対象のデータ＃１，＃２を用いてパリティを算出し、データ領域の更新対象となるセクタ２１１ｃ，２１１ｄ，２１１ｅの更新日時情報を生成する（Ｓ２１）。このとき、セクタ２１１ｃ，２１１ｄ，２１１ｅのセクタの更新日時情報は、いずれも"１０：００"となる。
【００８８】
そして、書き込み制御部１３１は、セクタ２１１ｃを、データ＃１および更新日時情報"１０：００"で更新し、セクタ２１１ｄを、データ＃２および更新日時情報"１０：００"で更新する。これとともに、書き込み制御部１３１は、セクタ２１１ｅを、算出したパリティおよび更新日時情報"１０：００"で同時に更新する（Ｓ２２）。
【００８９】
このとき、データセクタであるセクタ２１１ｃ，２１１ｄについて、付加情報領域のうち一番前方の領域（図９における、セクタ２１１ｃ，２１１ｄの付加情報領域の左端の領域）に、自己のセクタの更新日時情報が格納される。また、その後方の（右側の）領域に、セクタ２１１ｅの更新日時情報が格納される。すなわち、データのセクタの付加情報領域には、自己のセクタの更新日時情報、パリティセクタの更新日時情報の順に、前方から並んで更新日時情報が設定される。
【００９０】
また、パリティセクタであるセクタ２１１ｅの付加情報領域のうち、一番手前の領域（図９における、セクタ２１１ｅの付加情報領域の左端の領域）に、セクタ２１１ｃの更新日時情報が設定される。さらに、その後方の（右側の）領域に、セクタ２１１ｄの更新日時情報が設定され、その後方の（右側の）領域に、パリティセクタの更新日時情報が設定される。すなわち、パリティのセクタの付加情報領域には、ストライプ内の各セクタに対応するディスク番号順に、各セクタの更新日時情報が前方から並んで設定される。
【００９１】
このように、ＲＡＩＤ５のＲＡＩＤグループに属するＨＤＤ内のセクタに対して、書き込み処理を行う場合、書き込み制御部１３１は、書き込みの対象となるデータをデータ領域に書き込む。同時に、書き込み先の各セクタの付加情報領域に、データセクタの更新日時情報と、パリティセクタの更新日時情報とを書き込む。また、パリティセクタに対して、算出したパリティをデータ領域に書き込み、同時に、各データセクタの更新日時情報と、パリティセクタの更新日時情報とを、付加情報領域に書き込む。
【００９２】
なお、第２の実施の形態では、データセクタには、自己のセクタの更新日時情報と、パリティセクタの更新日時情報とが格納され、パリティセクタには、自己のストライプ内の各セクタの更新日時情報が設定される。これに対し、各セクタに、自己のセクタが属するストライプを構成するセクタのうち、自己のセクタの更新日時情報と、自己のセクタが属するＨＤＤの次のディスク番号のＨＤＤに属するセクタの更新日時情報とが設定されるようにしてもよい。後者の場合、ＲＡＩＤグループに属する複数のＨＤＤは、ストライプを構成していればよく、例えば、ＲＡＩＤ０を構成するものであってもよい。
【００９３】
また、セクタの付加情報領域に設定される更新日時情報の並び順は、上記に限定されるものではない。例えば、データセクタ内の付加情報領域には、ストライプを構成する各セクタの更新日時情報を、各セクタが属するＨＤＤのディスク番号順に並べて設定する方法が挙げられる。別の例として、パリティセクタ内の付加情報領域の前方には、データセクタの更新日時情報をセクタが属するＨＤＤのディスク番号順に並べて設定し、その後方にパリティセクタの更新日時情報を設定する方法が挙げられる。
【００９４】
次に、図１０を用いて、ＲＡＩＤ制御部１３０によるＲＡＩＤ５のＲＡＩＤグループに対するデータの読み出し制御について説明する。この場合、読み出し制御部１３２は、読み出し元が要求されたデータが格納されたデータセクタ、および、同一ストライプにおけるパリティセクタから、データセクタに対応する更新日時情報を読み出す。そして、読み出し制御部１３２は、読み出した各更新日時情報の比較し、その比較結果に基づいてデータセクタにおける書き込み抜けの有無を判定する。
【００９５】
図１０は、ＲＡＩＤ５における読み出し制御の例を示す図である。図１０では、図９でデータ＃１，＃２の書き込み処理が実行された後、ホストアクセス制御部１２０からの読み出し要求に応じて、データセクタであるセクタ２１１ｃ（ＨＤＤ＃３：セクタ＃１）からデータを読み出す場合の例について説明する。
【００９６】
この場合、まず、読み出し制御部１３２は、データ読み出し対象のセクタ２１１ｃと、同一ストライプ内のパリティセクタであるセクタ２１１ｅとから、格納された内容を読み出す。そして、読み出し制御部１３２は、セクタ２１１ｃの付加領域情報に格納されたセクタ２１１ｃの更新日時情報と、セクタ２１１ｅの付加領域情報に格納されたセクタ２１１ｃの更新日時情報とを比較する（Ｓ２３）。図１０に示すように、各更新日時情報は一致するため、読み出し制御部１３２は、セクタ２１１ｃへの直近のデータ書き込み時に、セクタ２１１ｃ，２１１ｅに対して書き込み抜けが発生していないと判定する。
【００９７】
また、図示しないが、読み出し対象のデータセクタに格納されている自己の更新日時情報が、同じストライプ内のパリティセクタに格納されている読み出し対象のセクタの更新日時情報より小さい場合、読み出し対象のセクタに対してデータの書き込み抜けがあったと判定する。読み出し対象のセクタに格納されている自己の更新日時情報が、同じストライプ内のパリティセクタに格納されている読み出し対象のセクタの更新日時情報より大きい場合、当該パリティセクタに対してパリティの書き込み抜けがあったと判定する。読み出し制御部１３２は、書き込み抜けがあったと判定したセクタを指定して、そのセクタのリカバリをリカバリ制御部１５０に依頼する。
【００９８】
図９〜１０で説明したように、ＲＡＩＤ５のＲＡＩＤグループに対してデータを書き込む際、書き込み対象となるデータをデータ領域に書き込む。同時に、各書き込み先のデータのセクタの付加情報領域に、自己のセクタの更新日時情報と、パリティセクタの更新日時情報とを書き込む。また、書き込み先のストライプのパリティセクタのデータ領域に、書き込みデータに基づいて算出したパリティを書き込む。同時に、パリティセクタの付加情報領域に、同じストライプを構成する各セクタの更新日時情報を書き込む。
【００９９】
そして、ＲＡＩＤ５のＲＡＩＤグループからデータを読み出す際、データ読み出し対象のセクタと、パリティセクタとから読み出した読み出し対象のセクタの更新日時情報同士を比較する。そして、その比較結果に基づいて、読み出し対象のセクタに対する書き込み抜けの有無を判定する。
【０１００】
このような書き込み抜けの判定が可能になることで、データの書き込みに対する信頼性が向上する。また、データの読み出しが要求された際に書き込み抜けの判定を行うことで、ＲＡＷを行う場合と比較して、データの書き込み要求に対する応答の遅延を抑制できる。
【０１０１】
また、データの書き込みに伴いパリティも更新されるため、書き込み先のデータのセクタの更新日時情報をパリティのセクタに書き込むことで、データの書き込み要求に対する応答時間にほとんど影響を与えずに、更新日時情報を格納する処理を実行できる。さらに、データの読み出しの際には、データに対応する更新日時情報とパリティに対応する更新日時情報とを、異なるＨＤＤから並列に読み出すことができる。そのため、読み出し要求に対する応答時間に影響を与えずに、複数のＨＤＤから更新日時情報を読み出す処理を実行できる。
【０１０２】
なお、図９〜１０では、ＲＡＩＤレベルがＲＡＩＤ５のＲＡＩＤグループに属するセクタに対する書き込み抜けの判定の例について説明したが、パリティにより冗長化されているＲＡＩＤグループであれば、ＲＡＩＤ５に限定されるものではない。例えば、図９〜１０におけるＲＡＩＤグループ＃２のＲＡＩＤレベルは、ＲＡＩＤ３、ＲＡＩＤ４またはＲＡＩＤ６であってもよい。
【０１０３】
ＲＡＩＤ６の場合、例えば、データセクタの付加情報領域には、データセクタ自身に対応する更新日時情報と、同一ストライプ上のＰパリティのセクタに対応する更新日時情報と、Ｑパリティのセクタに対応する更新日時情報とが格納される。また、ＰパリティおよびＱパリティの各パリティセクタの付加情報領域には、同一ストライプ上の各データパリティに対応する更新日時情報と、パリティセクタ自身に対応する更新日時情報とが格納される。データ読み出し時においては、読み出しデータに付加された更新日時情報と、いずれかのパリティセクタから読み出された、読み出しデータに対応する更新日時情報とが比較されることで、データの書き込み抜けの有無を判定することができる。
【０１０４】
次に、ＲＡＩＤ５において、同じストライプ内の他のセクタの読み出し制御を伴う、データの書き込み制御について説明する。その例として、書き込み先がＲＡＩＤ５のＲＡＩＤグループであり、書き込み先のストライプ内のデータセクタのうちの一部のデータセクタに対する書き込み制御を実行する場合が挙げられる。
【０１０５】
この場合、まず、書き込み制御部１３１は、パリティを算出する。ここで、ストライプの全データではなく、一部のデータを更新する場合、パリティを算出するために、書き込み先のストライプ内のセクタのうち、書き込み先のセクタ以外のセクタのいずれかからデータを読み出す必要がある。
【０１０６】
例えば、パリティを算出する方法として、"更新前のデータ  ＸＯＲ  更新後のデータ  ＸＯＲ  更新前のパリティ"により算出する方法がある。上記方法を適用する場合、読み出し制御部１３２は、パリティを算出するために、書き込み先のセクタと、そのセクタと同じストライプ内のパリティセクタとから、それぞれ更新前のデータおよびパリティを読み出す。このとき、読み出し制御部１３２は、読み出した各セクタに対する書き込み抜けがないかを判定する。詳細は、図１１で後述する。各セクタに対して書き込み抜けがないと判定したら、書き込み制御部１３１は、書き込み先のセクタから読み出したデータと、パリティセクタから読み出したパリティと、書き込み対象となるデータとに基づいてパリティを算出する。
【０１０７】
次に、書き込み制御部１３１は、データを書き込む際、書き込み先のセクタの更新日時情報を生成する。次に、書き込み制御部１３１は、書き込み先のデータセクタに、生成した更新日時情報を書き込み対象のデータと同時に書き込む。これとともに、書き込み制御部１３１は、算出したパリティと、書き込み先の各データセクタの更新日時情報と、パリティセクタの更新日時情報とを、パリティセクタに同時に書き込む。そして、書き込み制御部１３１は、書き込み結果をホストアクセス制御部１２０へ通知する。
【０１０８】
図１１〜１２では、パリティセクタの読み出し制御を伴うデータの書き込み制御の例として、書き込み先のストライプ内のセクタのうちの一部のデータのセクタに対する書き込み制御について説明する。
【０１０９】
図１１は、パリティの読み出し制御を伴うデータの書き込み制御の例を示す図である。図１１〜１２において、図９〜１０と同じ内容については説明を省略する。
セクタ２１１ｃのデータ領域には、データ＃１が格納されている。セクタ２１１ｃの付加情報領域には、セクタ２１１ｃの更新日時情報"１０：００"、データ＃１の書き込み時に更新されたパリティセクタ（セクタ２１１ｅ）の更新日時情報"１０：００"の順に前方から並んで格納されている。
【０１１０】
また、セクタ２１１ｄのデータ領域には、データ＃２が格納されている。セクタ２１１ｄの付加情報領域には、セクタ２１１ｄの更新日時情報"１０：０２"、データ＃２の書き込み時に更新されたパリティのセクタ（セクタ２１１ｅ）の更新日時情報"１０：０２"の順に前方から並んで格納されている。
【０１１１】
セクタ２１１ｅのデータ領域には、データ＃１，＃２のパリティであるパリティ＃１が格納されている。さらに、セクタ２１１ｅの付加情報領域には、セクタ２１１ｃの更新日時情報"１０：００"、セクタ２１１ｄの更新日時情報"１０：０２"、セクタ２１１ｅの更新日時情報"１０：０２"の順に前方から並んで格納されている。
【０１１２】
ここで、書き込み制御部１３１が、ＲＡＩＤグループ＃２に属するＨＤＤ２１０ｃ内のセクタ＃１に対してデータ＃１の書き込み処理を実行する例について説明する。
まず、読み出し制御部１３２は、更新後のパリティを生成するために、更新前のデータ＃１を含むセクタ２１１ｃと、更新前のパリティを含むセクタ２１１ｅとから、格納された内容を読み出す。
【０１１３】
次に、読み出し制御部１３２は、セクタ２１１ｃの付加情報領域に格納されているセクタ２１１ｃの更新日時情報と、セクタ２１１ｅの付加情報領域に格納されているセクタ２１１ｃの更新日時情報とを比較する（Ｓ３１）。図１１に示すように、上記各更新日時情報は一致するため、読み出し制御部１３２は、セクタ２１１ｃに対して書き込み抜けが発生していないと判定する。すなわち、読み出し制御部１３２は、セクタ２１１ｃに格納されているデータ＃１を、正しく書き込まれたデータであると判定する。
【０１１４】
また、読み出し制御部１３２は、セクタ２１１ｄの内容を読み出す。読み出し制御部１３２は、セクタ２１１ｃの付加情報領域に格納されているパリティセクタの更新日時情報と、セクタ２１１ｄの付加情報領域に格納されているパリティセクタの更新日時情報とを比較する。なお、読み出し制御部１３２は、セクタ２１１ｄからの読み出しを、セクタ２１１ｃ，２１１ｅからの読み出しと並列に実行することができる。
【０１１５】
ここで、セクタ２１１ｃ，２１０ｄの両方から読み出したパリティセクタの更新日時情報を比較する理由は、図１１の状態より前の段階において、セクタ２１１ｃ，２１１ｄの一方のみが更新された可能性があるからである。例えば、セクタ２１１ｄのみが更新された場合、セクタ２１１ｄにおけるパリティセクタの更新日時情報と、セクタ２１１ｅにおけるパリティセクタの更新日時情報とが更新される。しかし、セクタ２１１ｃにおけるパリティセクタの更新日時情報は更新されない。この場合、セクタ２１１ｄ，２１１ｅにおけるパリティセクタの更新日時情報と、セクタ２１１ｃにおけるパリティセクタの更新日時情報とが一致しなくなる。
【０１１６】
このような場合に備えて、読み出し制御部１３２は、同一ストライプ上の一部のデータセクタにのみデータを書き込む際にも、そのストライプ上のすべてのデータセクタからパリティセクタの更新日時情報を読み出して、比較する。そして、読み出し制御部１３２は、読み出した更新日時情報のうち最大のものを、パリティが直近に更新されたときのパリティセクタの更新日時情報と判定する。
【０１１７】
図１１に示す例では、セクタ２１１ｃから読み出したパリティセクタの更新日時情報"１０：００"と比較して、セクタ２１１ｄから読み出したパリティセクタの更新日時情報"１０：０２"の方が大きい。そのため、読み出し制御部１３２は、セクタ２１１ｄから読み出したパリティセクタの更新日時情報"１０：０２"を、パリティが直近に更新されたときのセクタ２１１ｅの更新日時情報と判定する（Ｓ３２）。そして、セクタ２１１ｄから読み出したパリティセクタの更新日時情報"１０：０２"を、次の比較処理に利用する。
【０１１８】
すなわち、読み出し制御部１３２は、セクタ２１１ｄから読み出したパリティセクタの更新日時情報と、セクタ２１１ｅから読み出したパリティセクタの更新情報とを比較する（Ｓ３３）。図１１に示すように、上記各更新日時情報は、一致する。そのため、読み出し制御部１３２は、セクタ２１１ｅへの直近のパリティの書き込み時に書き込み抜けが発生していないと判定する。すなわち、読み出し制御部１３２は、セクタ２１１ｅに格納されているパリティ＃１を、正しく書き込まれたパリティであると判定する。
【０１１９】
次に、書き込み制御部１３１は、"データ＃１  ＸＯＲ  データ＃３  ＸＯＲ  パリティ＃１"により、パリティ＃２を算出する（Ｓ３４）。データ＃１は、セクタ２１１ｃのデータ領域から取得され、パリティ＃１は、セクタ２１１ｅのデータ領域から取得される。
【０１２０】
図１２は、パリティの読み出し制御を伴うデータの書き込み制御の例を示す図（続き）である。
次に、書き込み制御部１３１は、データ書き込み先のセクタ２１１ｃおよびパリティ書き込み先のセクタ２１１ｅの更新日時情報"１０：０３"を生成する。次に、書き込み制御部１３１は、セクタ２１１ｃのデータ領域をデータ＃３で更新するとともに、セクタ２１１ｃの付加情報領域のうち、セクタ２１１ｃの更新日時情報を"１０：０３"で更新し、セクタ２１１ｅの更新日時情報を"１０：０３"で更新する（Ｓ３５）。
【０１２１】
また、書き込み制御部１３１は、セクタ２１１ｅのデータ領域をパリティ＃２で更新するとともに、セクタ２１１ｅの付加情報領域のうち、セクタ２１１ｃの更新日時情報を"１０：０３"で更新し、セクタ２１１ｅの更新日時情報を"１０：０３"で更新する（Ｓ３６）。なお、セクタの一部のみを書換えることはできない。そのため、ステップＳ３６における更新では、データ＃３、セクタ２１１ｃの更新日時情報、セクタ２１１ｅの更新日時情報と共に、セクタ２１１ｄの更新日時情報に対しても、更新前の更新日時情報である"１０：０２"が書き込まれる。
【０１２２】
また、ストレージシステム２において、ディスクアレイ２００内のＨＤＤに対して並列してアクセスが可能であるため、ステップＳ３５，Ｓ３６を並列して実行してもよい。これにより、書き込み速度が向上する。
【０１２３】
図１１〜１２で説明したように、ホストアクセス制御部１２０から書き込み要求がされた場合でも、読み出し処理が発生する場合がある。このような場合においても、読み出し制御部１３２は、更新日時情報の比較を行い、書き込み抜けの有無を判定する。
【０１２４】
また、パリティセクタに対して読み出し処理を行う際、各データセクタに格納されているパリティセクタの更新日時情報のうち、最も大きい更新日時情報を特定し、特定した更新日時情報と、パリティセクタに格納されているパリティセクタの更新日時情報とを比較する。これにより、パリティセクタに対する書き込み抜けの判定を正確に行うことができる。
【０１２５】
なお、第２の実施の形態では、読み出し制御部１３２は、更新後のデータ、更新前のデータおよび更新前のパリティに基づいて、更新後のパリティを算出する。これに対し、書き込み先のストライプを構成するセクタのうち、書き込み先のセクタ以外の全データセクタに格納されているデータと、更新後のデータとに基づいて更新後のパリティを算出してもよい。この場合、書き込み先のセクタ以外の各データセクタの内容が読み出され、図１０で説明した方法により、当該各データセクタに対して書き込み抜けの有無が判定される。
【０１２６】
次に、図１３を用いて、パトロールに伴いパリティセクタからパリティが読み出される場合について説明する。
図１３は、ＲＡＩＤ５におけるパリティの読み出し制御の例を示す図である。図１３において、図９〜１２と同じ内容については説明を省略する。セクタ２１１ｃ，２１１ｄ，２１１ｅのデータ領域および付加情報領域には、図１１と同じ内容が格納されている。
【０１２７】
このとき、パトロール制御部１４０は、ＨＤＤ＃５のセクタ＃１の内容を読み出すとする。
この場合、まず、パトロール制御部１４０は、セクタ２１１ｃ，２１１ｄ，２１１ｅの内容を読み出す。次に、パトロール制御部１４０は、セクタ２１１ｃの付加情報領域に格納されているパリティセクタの更新日時情報と、セクタ２１１ｄの付加情報領域に格納されているパリティセクタの更新日時情報とを比較する。
【０１２８】
図１３に示すように、上記更新日時情報のうち、セクタ２１１ｃにおけるパリティセクタの更新日時情報と比較して、セクタ２１１ｄにおけるパリティセクタの更新日時情報の方が大きい。そのため、パトロール制御部１４０は、セクタ２１１ｄにおけるパリティセクタの更新日時情報を、直近にパリティを更新したときのセクタ２１１ｅの更新日時情報と判定する（Ｓ４１）。
【０１２９】
次に、パトロール制御部１４０は、直近にパリティを更新したときの更新日時情報と判定された更新日時情報と、セクタ２１１ｅに格納されているセクタ２１１ｅの更新日時情報とを比較する（Ｓ４２）。図１１に示すように、上記各更新日時情報は、一致する。そのため、パトロール制御部１４０は、セクタ２１１ｅへのパリティの書き込み時に、セクタ２１１ｄ，２１１ｅに対する書き込み抜けが発生していないと判定する。
【０１３０】
図示しないが、パリティセクタの更新日時情報が、データセクタに格納された、比較対象であるパリティセクタの更新日時情報より小さい場合、パトロール制御部１４０は、パリティセクタに対してデータの書き込み抜けがあったと判定する。一方、パリティセクタの更新日時情報が、データセクタに格納されたパリティセクタの更新日時情報より大きい場合、パトロール制御部１４０は、各データセクタのいずれかに対して書き込み抜けがあったと判定する。後者の場合、例えば、パトロール制御部１４０は、各データセクタについて、図１０で説明した方法で、書き込み抜けの有無を判定することで、書き込み抜けが発生したセクタを判定する。パトロール制御部１４０は、書き込み抜けがあったと判定したセクタを指定して、そのセクタのリカバリをリカバリ制御部１５０に依頼する。
【０１３１】
図１３で説明したように、パリティセクタのパトロールを実行する場合、パリティセクタに対して読み出し処理が発生する。このような場合においても、パトロール制御部１４０は、更新日時情報の比較を行い、書き込み抜けの有無を判定する。
【０１３２】
次に、図１４〜１７を用いて、ＨＤＤのリカバリの例について説明する。まず、図１４を用いて、ＲＡＩＤ１のＲＡＩＤグループに属するＨＤＤのリカバリについて説明する。そして、図１５〜１７を用いて、ＲＡＩＤ５のＲＡＩＤグループに属するＨＤＤのリカバリについて説明する。
【０１３３】
図１４は、ＲＡＩＤ１のＲＡＩＤグループに属するＨＤＤのリカバリの例を示す図である。図１４において、図７と同じ内容については説明を省略する。セクタ２１１ｂのデータ領域にはデータ＃Ａが格納され、付加情報領域には、セクタ２１１ｂの更新日時情報"１０：００"が格納されている。ＨＤＤ２１０ａは、例えば、ＨＤＤ２１０ｂとペアで運用されていたＨＤＤ（図示せず）が故障したことにより、そのＨＤＤの代わりに用いられるものであり、ＨＤＤ２１０ａ内の各セクタ（例えば、セクタ２１１ａ）にはデータが格納されていない。
【０１３４】
この状態において、ＨＤＤ２１０ａに対するリカバリの説明を、セクタ２１１ａ，２１１ｂを用いて説明する。この場合、リカバリ制御部１５０は、セクタ２１１ｂのデータ領域の内容をそのまま、セクタ２１１ａのデータ領域にコピーする。また、リカバリ制御部１５０は、新たに生成した更新日時情報ではなく、セクタ２１１ｂの付加情報領域に格納されている更新日時情報を、セクタ２１１ａの付加情報領域にコピーする（Ｓ５１）。すなわち、ＲＡＩＤ１のＲＡＩＤグループに属するＨＤＤをリカバリする際、リカバリ対象であるＨＤＤのミラーディスクの内容をそのままコピーする。
【０１３５】
ここで、リカバリの際、新たに生成された更新日時情報を書き込むと、その後の読み出し処理に伴う更新日時情報の比較結果が一致しなくなるため、リカバリ後に更新日時情報の比較による書き込み抜けの判定が正常に実行できなくなる。上記処理により、リカバリ後の読み出し処理時においても、更新日時情報の比較結果による書き込み抜けの判定を正常に実行できる。
【０１３６】
図１５は、ＲＡＩＤ５のＲＡＩＤグループに属するＨＤＤのリカバリの例を示す図である。図１５〜１７において、図９〜１２と同じ内容については説明を省略する。ＨＤＤ２１０ｆは、ホットスペア（Hot Spare）と呼ばれる予備用のＨＤＤである。ホットスペアのＨＤＤ２１０ｆのディスク番号は、"＃６"である。
【０１３７】
ＨＤＤ２１０ｃのセクタ２１１ｃ、ＨＤＤ２１０ｄのセクタ２１１ｄ、およびＨＤＤ２１０ｅのセクタ２１１ｅは、同一のストライプを構成している。セクタ２１１ｃ，２１１ｄ，２１１ｅのセクタ番号は、＃１である。セクタ２１１ｃ，２１１ｄはデータセクタであり、セクタ２１１ｅはパリティセクタである。セクタ２１１ｃ，２１１ｄのデータ領域にはそれぞれデータ＃１，データ＃２が格納され、セクタ２１１ｅのデータ領域にはパリティ＃１が格納されている。
【０１３８】
また、ＨＤＤ２１０ｃのセクタ２１１ｆ、ＨＤＤ２１０ｄのセクタ２１１ｇ、およびＨＤＤ２１０ｅのセクタ２１１ｈは、同一のストライプを構成している。セクタ２１１ｆ，２１１ｇ，２１１ｈのセクタ番号は、＃２である。セクタ２１１ｇ，２１１ｈはデータセクタであり、セクタ２１１ｆはパリティセクタである。セクタ２１１ｇ，２１１ｈのデータ領域にはそれぞれデータ＃３，データ＃４が格納され、セクタ２１１ｆのデータ領域にはパリティ＃２が格納されている。
【０１３９】
この状態において、ＨＤＤ２１０ｃが故障した場合のリカバリ処理について、セクタ２１１ｃ〜２１１ｈを用いて説明する。
この場合、まず、リカバリ制御部１５０は、セクタ番号が"＃１"であるセクタ２１１ｄ，セクタ２１１ｅの内容を読み出す。そして、リカバリ制御部１５０は、セクタ２１１ｄに格納されているデータ＃２と、セクタ２１１ｅに格納されているパリティ＃１との排他論理和（ＸＯＲ）により、セクタ２１１ｃに格納されていたデータ＃１を再構築する（Ｓ６１）。
【０１４０】
次に、リカバリ制御部１５０は、ホットスペアのＨＤＤ２１０ｆのセクタ＃１のデータ領域に、再構築したデータ＃１を書き込む。これとともに、リカバリ制御部１５０は、ＨＤＤ２１０ｆのセクタ＃１の付加情報領域に、セクタ２１１ｃの更新日時情報"１０：００"、セクタ２１１ｅの更新日時情報"１０：０２"の順に書き込む（Ｓ６２）。セクタ２１１ｃの更新日時情報およびセクタ２１１ｅの更新日時情報は、セクタ２１１ｅの付加情報領域に格納されている。
【０１４１】
図１６は、ＲＡＩＤ５のＲＡＩＤグループに属するＨＤＤのリカバリの例を示す図（続き）である。この図１６では、セクタ２１１ｆに格納されていたパリティを再構築する際の処理を示す。パリティを再構築する際の処理は、図１５に示したデータを再構築する処理とは、その一部が異なる。
【０１４２】
リカバリ制御部１５０は、セクタ番号が"＃２"であるセクタ２１１ｇ，２１１ｈの内容を読み出す。リカバリ制御部１５０は、セクタ２１１ｇに格納されているデータ＃３と、セクタ２１１ｈに格納されているデータ＃４との排他論理和（ＸＯＲ）により、セクタ２１１ｆに格納するパリティ＃２を再構築する（Ｓ６３）。
【０１４３】
次に、リカバリ制御部１５０は、セクタ２１１ｇに格納されているパリティセクタの更新日時情報と、セクタ２１１ｈに格納されているパリティセクタの更新日時情報とを比較する。リカバリ制御部１５０は、各データセクタに格納されているパリティセクタの更新日時情報のうち、大きい方の更新日時情報を、セクタ２１１ｆに格納されていた、セクタ２１１ｆ（パリティセクタ）の更新日時情報と特定する（Ｓ６４）。図１６に示すように、セクタ２１１ｈに格納されているパリティセクタの更新日時情報"１０：０３"と比較して、セクタ２１１ｇに格納されているパリティセクタの更新日時情報"１０：０４"の方が大きい。そのため、更新日時情報"１０：０４"が、セクタ２１１ｆの更新日時情報として特定される。
【０１４４】
図１７は、ＲＡＩＤ５のＲＡＩＤグループに属するＨＤＤのリカバリの例を示す図（続き２）である。次に、リカバリ制御部１５０は、ホットスペアのＨＤＤ２１０ｆのセクタ＃２のデータ領域に、再構築したパリティ＃２を書き込む。これとともに、リカバリ制御部１５０は、ＨＤＤ２１０ｆのセクタ＃２の付加情報領域に、セクタ２１１ｆの更新日時情報"１０：０４"、セクタ２１１ｇの更新日時情報"１０：０４"、セクタ２１１ｈの更新日時情報"１０：０３"の順に書き込む（Ｓ６５）。セクタ２１１ｇの更新日時情報は、セクタ２１１ｇの付加情報領域に格納され、セクタ２１１ｈの更新日時情報は、セクタ２１１ｈの付加情報領域に格納されている。
【０１４５】
このように、リカバリ制御部１５０は、ＨＤＤ２１０ｃ内の各セクタ番号のセクタの内容を再構築し、ホットスペアのＨＤＤ２１０ｆにおける同じセクタ番号のセクタに、再構築したセクタの内容を格納する。
【０１４６】
図１５〜１７で説明した方法により、リカバリ先のＨＤＤ２１０ｆをＲＡＩＤグループ＃２に組み入れた後の読み出し処理時において、更新日時情報の比較結果による書き込み抜けの判定を正常に実行できる。
【０１４７】
なお、この後に、故障したＨＤＤ２１０ｃの代わりに新たなＨＤＤ（図示せず）が搭載された場合には、リカバリ制御部１５０は、ホットスペアのＨＤＤ２１０ｆの内容を新たなＨＤＤに書き戻す。このとき、リカバリ制御部１５０は、図１４に示した処理と同様に、ホットスペアのＨＤＤ２１０ｆの各セクタにおけるデータ領域および付加情報領域の内容を、新たなＨＤＤの対応するセクタに対してそのままコピーする。これにより、書き戻しが完了したＨＤＤをＲＡＩＤグループに組み入れた後の読み出し処理時においても、更新日時情報の比較結果による書き込み抜けの判定を正常に実行できる。
【０１４８】
次に、図１８〜２０を用いて、書き込み制御および読み出し制御の処理についてフローチャートを用いて説明する。
図１８は、書き込み制御処理の例を示すフローチャートである。以下、図１８に示す処理をステップ番号に沿って説明する。
【０１４９】
（Ｓ１０１）書き込み制御部１３１は、ホストアクセス制御部１２０からデータの書き込み要求を受け付ける。ここで、ホストアクセス制御部１２０がデータの書き込み要求を出力するケースとは、例えば、キャッシュ領域に格納されたデータをディスクアレイ２００内のＨＤＤへ書き込む"ライトバック"を行うケースである。ライトバックの具体例としては、例えば、キャッシュ領域の残容量が所定容量以下になったとき、最終更新日時が最も早いデータをＨＤＤへ書き込んで、そのデータをキャッシュ領域から削除する場合と、キャッシュ領域内のデータが更新されてから所定時間後に、更新されたデータをＨＤＤへ書き込む場合とがある。
【０１５０】
ホストアクセス制御部１２０からの書き込み要求には、例えば、書き込み対象のデータの論理ボリュームにおける先頭論理アドレスが含まれる。書き込み制御部１３１は、書き込み対象の論理ボリュームに対応するＲＡＩＤグループを特定する。書き込み制御部１３１は、特定したＲＡＩＤグループに対応するＲＡＩＤ管理テーブル１１１を参照し、そのＲＡＩＤグループに関する情報と、ホストアクセス制御部１２０から指定された先頭論理アドレスと、書き込み対象のデータのデータ長とに基づいて、書き込み先のセクタを特定する。書き込み先のセクタは、ディスク番号とセクタ番号の組み合わせより指定される。
【０１５１】
（Ｓ１０２）書き込み制御部１３１は、更新日時情報を生成する。生成される更新日時情報は、現在の日時を示す。
（Ｓ１０３）書き込み制御部１３１は、ＲＡＩＤ管理テーブル１１１を参照して、書き込み対象のＲＡＩＤグループのＲＡＩＤレベルを判定する。ミラーリングが行われるＲＡＩＤレベル（例えば、ＲＡＩＤ１）である場合、処理をステップＳ１０４へ進める。パリティが使用されるＲＡＩＤレベル（例えば、ＲＡＩＤ５）である場合、処理をステップＳ１０５へ進める。
【０１５２】
（Ｓ１０４）書き込み制御部１３１は、書き込み先となる２つのＨＤＤのそれぞれに１セクタ分のデータを並列に書き込む際に、データとともに、ステップＳ１０２で生成した更新日時情報を、各ＨＤＤのセクタに書き込む。この処理は、図７のステップＳ１１で説明した通りである。
【０１５３】
（Ｓ１０５）書き込み制御部１３１は、１つのストライプのセクタのうち、データの書き込み対象となっているデータセクタとパリティセクタとを更新する。
ストライプ内の全データセクタが書き込み対象となっている場合、図９のステップＳ２１，Ｓ２２で説明した手順により書き込み処理が行われる。この場合、書き込み制御部１３１は、ストライプ内の全セクタのデータ領域に新たなデータまたはパリティを書き込む。これとともに、書き込み制御部１３１は、ストライプ内の全セクタの付加情報領域に、ステップＳ１０２で生成した更新日時情報を書き込む。
【０１５４】
また、ストライプ内の一部のデータセクタが書き込み対象となっている場合、図１１，１２に示した手順により書き込み処理が行われる。この場合、書き込み制御部１３１は、ストライプ内のデータセクタのうち、書き込み対象となっているデータセクタのデータ領域および付加情報領域に、新たなデータと更新日時情報とをそれぞれ書き込む。また、書き込み制御部１３１は、パリティセクタのデータ領域に新たなパリティを書き込むとともに、パリティセクタの付加情報領域に対して、データの書き込み対象となっているデータセクタの更新日時情報とパリティセクタの更新日時情報とを書き込む。
【０１５５】
（Ｓ１０６）書き込み制御部１３１は、ホストアクセス制御部１２０に対して、書き込み要求に応じた書き込み処理が完了したことを通知して応答する。
図１９は、読み出し制御処理の例を示すフローチャートである。読み出し制御部１３２は、ホストアクセス制御部１２０から、読み出し対象の論理ボリュームおよび論理アドレスの指定を受ける。読み出し制御部１３２は、指定された論理ボリュームに対応するＲＡＩＤ管理テーブル１１１を参照して、読み出し元のディスク番号およびセクタ番号を特定する。そして、読み出し制御部１３２は、読み出し元のセクタ毎に図１９の処理を実行する。以下、図１９に示す処理をステップ番号に沿って説明する。
【０１５６】
（Ｓ１２１）読み出し制御部１３２は、ＲＡＩＤ管理テーブル１１１を参照して、読み出し元のＲＡＩＤグループのＲＡＩＤレベルを判定する。ミラーリングが行われるＲＡＩＤレベルである場合、処理をステップＳ１２２へ進める。パリティが使用されるＲＡＩＤレベルである場合、処理をステップＳ１２３へ進める。
【０１５７】
（Ｓ１２２）読み出し制御部１３２は、メインディスク（二重化されたＨＤＤのうち、メインのＨＤＤ）の該当セクタの内容を読み出すとともに、ミラーディスク（二重化されたＨＤＤのうち、他方のＨＤＤ）の該当セクタの内容を読み出す。
【０１５８】
（Ｓ１２３）読み出し制御部１３２は、該当データセクタの内容を読み出すとともに、同じストライプ内のパリティセクタの内容を読み出す。
なお、実際には、同じストライプ内の複数のデータセクタが読み出し対象である場合には、それらのデータセクタおよびパリティセクタのそれぞれからの読み出しが同時に行われる。
【０１５９】
（Ｓ１２４）読み出し制御部１３２は、各セクタの付加情報領域から、該当データセクタの更新日時情報を取得し、それらを比較する。
（Ｓ１２５）読み出し制御部１３２は、ステップＳ１２４で取得した各更新日時情報同士が一致するか判定する。ステップＳ１２４で取得した各更新日時情報が一致する場合、処理をステップＳ１３０へ進める。各更新日時情報が一致しない場合、処理をステップＳ１２６へ進める。
【０１６０】
（Ｓ１２６）読み出し制御部１３２は、ステップＳ１２４，Ｓ１２５での更新日時情報の比較結果から、比較対象とされたセクタのどちらにおいて書き込み抜けが発生したかを判定する。
【０１６１】
（Ｓ１２７）読み出し制御部１３２は、現時点から所定時間（例えば、１０分）前までの期間において、ディスクアレイ２００に搭載されたＨＤＤのうち、ステップＳ１２６で書き込み抜けの発生が判定されたセクタが属するＨＤＤを除く他のＨＤＤでも、書き込み抜けの発生が判定されているかを判定する。他のＨＤＤでも書き込み抜けが発生した場合、処理をステップＳ１２８に進める。他のＨＤＤで書き込み抜けが発生していない場合、処理をステップＳ１２９に進める。
【０１６２】
（Ｓ１２８）読み出し制御部１３２は、ストレージ制御装置１００が故障している旨を、ストレージシステム２の管理者に通知する。
（Ｓ１２９）読み出し制御部１３２は、ステップＳ１２６で書き込み抜けが発生したと判定されたセクタを指定して、セクタのリカバリをリカバリ制御部１５０に依頼する。リカバリ制御部１５０は、読み出し制御部１３２からの依頼に応じて、指定されたセクタのリカバリを実行する。詳細は、図２０において後述する。
【０１６３】
（Ｓ１３０）読み出し制御部１３２は、読み出しが要求されたデータを取得する。ステップＳ１２２が実行された場合、メインディスクのセクタのデータ領域からデータが取得される。ステップＳ１２３が実行された場合、データセクタのデータ領域からデータが取得される。読み出し制御部１３２は、例えば、取得したデータをＲＡＭ１０２等に一時的に格納する。
【０１６４】
図２０は、リカバリ処理の例を示すフローチャートである。図２０の処理は、前述のステップＳ１２９で実行される。本処理実行時には、リカバリ対象のセクタが指定される。リカバリ対象のセクタは、ディスク番号とセクタ番号の組み合わせより指定される。以下、図２０に示す処理をステップ番号に沿って説明する。
【０１６５】
（Ｓ１４１）リカバリ制御部１５０は、ＲＡＩＤ管理テーブル１１１を参照して、リカバリ対象のＲＡＩＤグループのＲＡＩＤレベルを判定する。ミラーリングが行われるＲＡＩＤレベルである場合、処理をステップＳ１４２へ進める。パリティが使用されるＲＡＩＤである場合、処理をステップＳ１４３へ進める。
【０１６６】
（Ｓ１４２）リカバリ制御部１５０は、ステップＳ１２４で比較した更新日時情報のうち、後の日時を示す更新日時情報の取得元セクタにおけるデータ領域および付加情報領域の内容を、他方のセクタのデータ領域および付加情報領域にそれぞれコピーする。これにより、書き込み抜けが発生したセクタの内容が復旧する。
【０１６７】
（Ｓ１４３）リカバリ制御部１５０は、次のようにしてセクタの内容を復旧する。
ステップＳ１２６においてデータセクタでの書き込み抜けが発生したと判定された場合、リカバリ制御部１５０は、同一ストライプのセクタのうち、書き込み抜けが発生したデータセクタを除く他の全データセクタおよびパリティセクタの内容を読み出す。リカバリ制御部１５０は、読み出した内容のうち、各データ領域のデータおよびパリティに基づいて、書き込み抜けが発生したデータセクタにおけるデータ領域のデータを算出する。これとともに、リカバリ制御部１５０は、パリティセクタの付加情報領域から、書き込み抜けが発生したデータセクタの更新日時情報と、パリティセクタの更新日時情報とを取得する。リカバリ制御部１５０は、書き込み抜けが発生したデータセクタにおけるデータ領域に、算出したデータを書き込むとともに、そのデータセクタにおける付加情報領域に、取得した各更新日時情報を書き込む。これにより、書き込み抜けが発生したデータセクタの内容が復旧する。
【０１６８】
なお、以上の処理は、図１５において、セクタ２１１ｃで書き込み抜けが発生したと仮定した場合に、再構築したデータ＃１と更新日時情報とを、ホットスペアのセクタの代わりに元のセクタ２１１ｃに書き込む処理に相当する。
【０１６９】
一方、ステップＳ１２６においてパリティセクタでの書き込み抜けが発生したと判定された場合、リカバリ制御部１５０は、同一ストライプの全データセクタの内容を読み出す。リカバリ制御部１５０は、読み出した内容のうち、各データ領域のデータに基づいて、パリティを再計算する。これとともに、読み出した内容のうちの各付加情報領域に格納されているパリティセクタの更新日時情報を比較し、これらの中から最も後の日時を示す更新日時情報を選択する。リカバリ制御部１５０は、書き込み抜けが発生したパリティセクタにおけるデータ領域に、再計算により算出されたパリティを書き込む。これとともに、書き込み抜けが発生したパリティセクタにおける付加情報領域に、各データセクタの付加情報領域に格納されていた、各データセクタの更新日時情報と、上記手順で選択したパリティセクタの更新日時情報とを書き込む。これにより、書き込み抜けが発生したパリティセクタの内容が復旧する。
【０１７０】
なお、以上の処理は、図１６において、セクタ２１１ｆで書き込み抜けが発生したと仮定した場合に、再構築したパリティ＃２と更新日時情報とを、ホットスペアのセクタの代わりに元のセクタ２１１ｆに書き込む処理に相当する。
【０１７１】
図１９，２０の処理では、読み出し制御部１３２は、ステップＳ１２５において更新日時情報が一致しない場合、ステップＳ１２６において、それらの更新日時情報の比較に基づいて、比較対象としたどちらのセクタで書き込み抜けが発生したかを判定できる。このため、読み出し制御部１３２は、書き込み抜けが発生したと判定したセクタをリカバリ対象として指定して、そのリカバリをリカバリ制御部１５０に依頼することができる。これにより、書き込み抜けが発生したセクタの内容を、正当な内容に更新することができ、記録データの信頼性を向上させることができる。
【０１７２】
なお、前述のように、第１の実施の形態の情報処理は、ストレージ制御装置１０にプログラムを実行させることで実現でき、第２の実施の形態の情報処理は、ストレージ制御装置１００にプログラムを実行させることで実現できる。このようなプログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体１０６ａ）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリ等を使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。
【０１７３】
プログラムを流通させる場合、例えば、当該プログラムを記録した可搬記録媒体が提供される。また、プログラムを他のコンピュータの記憶装置に格納しておき、ネットワーク経由でプログラムを配布することもできる。コンピュータは、例えば、可搬記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを、記憶装置（例えば、ＨＤＤ１０３）に格納し、当該記憶装置からプログラムを読み込んで実行する。ただし、可搬記録媒体から読み込んだプログラムを直接実行してもよく、他のコンピュータからネットワークを介して受信したプログラムを直接実行してもよい。また、上記の情報処理の少なくとも一部を、ＤＳＰ（Digital Signal Processor）、ＰＬＤ（Programmable Logic Device）等の電子回路で実現することも可能である。
【０１７４】
以上の第１および第２の実施の形態を含む実施の形態に関し、さらに以下の付記を開示する。
（付記１）  データの書き込み要求に応じて、書き込みが要求された書き込みデータに、同じ記憶領域への書き込みのたびに更新される付加データを付加して第１の記憶装置に書き込むとともに、第２の記憶装置における前記書き込みデータに対応する記憶領域に、前記書き込みデータに付加した付加データを書き込んで、前記書き込み要求に応じた書き込み処理の完了通知を出力する書き込み制御部と、
データの読み出し要求に応じて、読み出しが要求された読み出しデータと前記読み出しデータに付加された付加データとを前記第１の記憶装置から読み出すとともに、前記第２の記憶装置における前記読み出しデータに対応する記憶領域から付加データを読み出し、前記第１の記憶装置および前記第２の記憶装置からそれぞれ読み出した付加データ同士を照合し、照合結果に基づいて前記読み出しデータの正当性を判定する読み出し制御部と、
を有することを特徴とするストレージ制御装置。
【０１７５】
（付記２）  前記書き込み制御部は、前記書き込みデータに対応する冗長データを前記第２の記憶装置に書き込むとともに、前記第１の記憶装置において前記書き込みデータに付加した付加データを前記冗長データに付加して前記第２の記憶装置に書き込み、
前記読み出し制御部は、前記読み出しデータと前記読み出しデータに付加された付加データとを前記第１の記憶装置から読み出すとともに、前記読み出しデータに対応する冗長データに付加された付加データを前記第２の記憶装置から読み出す、
ことを特徴とする付記１記載のストレージ制御装置。
【０１７６】
（付記３）  前記書き込み制御部は、前記書き込みデータとこれに対応する冗長データとに付加する付加データに、前記書き込みデータの書き込み時の時刻を示す時刻情報を含め、
前記読み出し制御部は、前記第１の記憶装置および前記第２の記憶装置からそれぞれ読み出した付加データ同士を照合する処理において、各付加データに含まれる時刻情報同士を比較し、時刻情報が一致する場合には、読み出された前記読み出しデータおよび対応する冗長データをともに正当なデータと判定し、時刻情報が一致しない場合には、読み出された前記読み出しデータおよび対応する冗長データのうち、付加されていた付加データに含まれる時刻情報が早い時刻を示すデータを不当なデータと判定する、
ことを特徴とする付記２記載のストレージ制御装置。
【０１７７】
（付記４）  前記読み出し制御部は、読み出された前記読み出しデータおよび対応する冗長データのうちの一方のデータを不当なデータと判定したとき、他方のデータを用いて前記一方のデータを再構築し、前記第１の記憶装置または前記第２の記憶装置に記憶されている前記一方のデータ、および、前記一方のデータに付加された付加データを、再構築された前記一方のデータ、および、前記他方のデータに付加されている付加データによってそれぞれ更新することを特徴とする付記３記載のストレージ制御装置。
【０１７８】
（付記５）  前記第１の記憶装置に記憶されているデータを、前記第２の記憶装置に記憶されている、当該データに対応する冗長データを用いて再構築して第３の記憶装置に格納するとき、前記第２の記憶装置において当該冗長データに付加されている付加情報を、再構築されたデータに付加して前記第３の記憶装置に書き込むリカバリ制御部をさらに有することを特徴とする付記２乃至４のいずれか１つに記載のストレージ制御装置。
【０１７９】
（付記６）  前記書き込み制御部は、前記第２の記憶装置に対して、前記書き込みデータに対応する冗長データとして、前記書き込みデータを用いて算出されるパリティデータを書き込むことを特徴とする付記２乃至５のいずれか１つに記載のストレージ制御装置。
【０１８０】
（付記７）  前記第１の記憶装置および前記第２の記憶装置を含む複数の記憶装置のそれぞれにおける単位記憶領域によってストライプが構成され、ストライプ内の２以上の所定数の単位記憶領域が、書き込みが要求されたデータが格納されるデータ格納領域に割り当てられ、ストライプ内の残りの単位記憶領域が、同じストライプ内のデータ格納領域に格納されたデータに基づくパリティデータが格納されるパリティ格納領域に割り当てられ、
前記書き込み制御部は、ストライプ内の１以上のデータ格納領域に対するデータ更新に伴って同じストライプ内のパリティ格納領域のパリティデータを更新するとき、更新対象のパリティ格納領域における更新後のパリティデータに対して、当該パリティデータの更新時刻を示すパリティ更新時刻情報を付加するとともに、付加したパリティ更新時刻を、データが更新された前記１以上のデータ格納領域における更新後のデータにも付加し、
前記読み出し制御部は、ストライプ内のパリティ格納領域からパリティデータを読み出すとき、読み出したパリティデータに付加されたパリティ更新時刻情報と、同じストライプ内の全データ格納領域においてデータに付加されたパリティ更新時刻情報のうち、最も遅い時刻を示すパリティ更新時刻情報とを照合し、読み出したパリティデータの正当性を判定する、
ことを特徴とする付記６記載のストレージ制御装置。
【０１８１】
（付記８）  前記書き込み制御部は、前記第２の記憶装置に対して、前記書き込みデータに対応する冗長データとして前記書き込みデータと同一のデータを書き込むことを特徴とする付記２乃至５のいずれか１つに記載のストレージ制御装置。
【０１８２】
（付記９）  ストレージ制御装置が、
データの書き込み要求に応じて、書き込みが要求された書き込みデータに、同じ記憶領域への書き込みのたびに更新される付加データを付加して第１の記憶装置に書き込むとともに、第２の記憶装置における前記書き込みデータに対応する記憶領域に、前記書き込みデータに付加した付加データを書き込んで、前記書き込み要求に応じた書き込み処理の完了通知を出力し、
データの読み出し要求に応じて、読み出しが要求された読み出しデータと前記読み出しデータに付加された付加データとを前記第１の記憶装置から読み出すとともに、前記第２の記憶装置における前記読み出しデータに対応する記憶領域から付加データを読み出し、
前記第１の記憶装置および前記第２の記憶装置からそれぞれ読み出した付加データ同士を照合し、照合結果に基づいて前記読み出しデータの正当性を判定する、
ことを特徴とするストレージ制御方法。
【０１８３】
（付記１０）  前記書き込み要求に応じた書き込み処理では、前記書き込みデータに対応する冗長データを前記第２の記憶装置に書き込むとともに、前記第１の記憶装置において前記書き込みデータに付加した付加データを前記冗長データに付加して前記第２の記憶装置に書き込み、
前記読み出し要求に応じた読み出し処理では、前記読み出しデータと前記読み出しデータに付加された付加データとを前記第１の記憶装置から読み出すとともに、前記読み出しデータに対応する冗長データに付加された付加データを前記第２の記憶装置から読み出す、
ことを特徴とする付記９記載のストレージ制御方法。
【０１８４】
（付記１１）  前記書き込み要求に応じた書き込み処理では、前記書き込みデータとこれに対応する冗長データとに付加する付加データに、前記書き込みデータの書き込み時の時刻を示す時刻情報を含め、
前記第１の記憶装置および前記第２の記憶装置からそれぞれ読み出された付加データ同士を照合する処理では、各付加データに含まれる時刻情報同士を比較し、時刻情報が一致する場合には、読み出された前記読み出しデータおよび対応する冗長データをともに正当なデータと判定し、時刻情報が一致しない場合には、読み出された前記読み出しデータおよび対応する冗長データのうち、付加されていた付加データに含まれる時刻情報が早い時刻を示すデータを不当なデータと判定する、
ことを特徴とする付記１０記載のストレージ制御方法。
【０１８５】
（付記１２）  読み出された前記読み出しデータおよび対応する冗長データのうちの一方のデータを不当なデータと判定したとき、他方のデータを用いて前記一方のデータを再構築し、前記第１の記憶装置または前記第２の記憶装置に記憶されている前記一方のデータ、および、前記一方のデータに付加された付加データを、再構築された前記一方のデータ、および、前記他方のデータに付加されている付加データによってそれぞれ更新することを特徴とする付記１１記載のストレージ制御方法。
【０１８６】
（付記１３）  前記第１の記憶装置に記憶されているデータを、前記第２の記憶装置に記憶されている、当該データに対応する冗長データを用いて再構築して第３の記憶装置に格納するとき、前記第２の記憶装置において当該冗長データに付加されている付加情報を、再構築されたデータに付加して前記第３の記憶装置に書き込むことを特徴とする付記１０乃至１２のいずれか１つに記載のストレージ制御方法。
【０１８７】
（付記１４）  前記書き込み要求に応じた書き込み処理では、前記第２の記憶装置に対して、前記書き込みデータに対応する冗長データとして、前記書き込みデータを用いて算出されるパリティデータを書き込むことを特徴とする付記２乃至５のいずれか１つに記載のストレージ制御方法。
【０１８８】
（付記１５）  コンピュータに、
データの書き込み要求に応じて、書き込みが要求された書き込みデータに、同じ記憶領域への書き込みのたびに更新される付加データを付加して第１の記憶装置に書き込むとともに、第２の記憶装置における前記書き込みデータに対応する記憶領域に、前記書き込みデータに付加した付加データを書き込んで、前記書き込み要求に応じた書き込み処理の完了通知を出力し、
データの読み出し要求に応じて、読み出しが要求された読み出しデータと前記読み出しデータに付加された付加データとを前記第１の記憶装置から読み出すとともに、前記第２の記憶装置における前記読み出しデータに対応する記憶領域から付加データを読み出し、
前記第１の記憶装置および前記第２の記憶装置からそれぞれ読み出した付加データ同士を照合し、照合結果に基づいて前記読み出しデータの正当性を判定する、
処理を実行させることを特徴とするストレージ制御プログラム。
【符号の説明】
【０１８９】
１０  ストレージ制御装置
１１  書き込み制御部
１２  読み出し制御部
２１  第１の記憶装置
２１ａ  データ領域
２１ｂ，２２ａ  付加データ領域
２２  第２の記憶装置
３０  ホスト装置
【図１】
2015225603.tif 000003
【図２】
2015225603.tif 000004
【図３】
2015225603.tif 000005
【図４】
2015225603.tif 000006
【図５】
2015225603.tif 000007
【図６】
2015225603.tif 000008
【図７】
2015225603.tif 000009
【図８】
2015225603.tif 000010
【図９】
2015225603.tif 000011
【図１０】
2015225603.tif 000012
【図１１】
2015225603.tif 000013
【図１２】
2015225603.tif 000014
【図１３】
2015225603.tif 000015
【図１４】
2015225603.tif 000016
【図１５】
2015225603.tif 000017
【図１６】
2015225603.tif 000018
【図１７】
2015225603.tif 000019
【図１８】
2015225603.tif 000020
【図１９】
2015225603.tif 000021
【図２０】
2015225603.tif 000022