(57)【要約】【課題】データが復元される可能性が高い記憶装置の提供を課題とする。【解決手段】本発明の記憶装置は、複数の記憶ユニットでホスト装置からのデータを冗長に格納する。第一記憶ユニットから該第一記憶ユニットを交換すべき旨の情報を受け取ると、該第一記憶ユニットに格納されたデータを冗長関係の他の記憶ユニットによって復元して予備記憶ユニットに書き込む。第一記憶ユニットから送信された該第一記憶ユニットを交換すべき旨の情報を受け取ると、該ホスト装置からの該第一記憶ユニットに書き込むべきデータを該予備記憶ユニットに書き込む。該ホスト装置からのデータの書き込みを行った該予備記憶ユニットの領域を記憶する。該他記憶ユニットによる復元を失敗した領域に対応する該予備記憶ユニットの領域が該ホスト装置からのデータの書き込みを行っていない領域であるときに、該第一記憶ユニットの情報を読み出す。【選択図】図１
2008181425.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶ユニットによりホスト装置からのデータを冗長に格納する記憶装置であって、
該複数の記憶ユニットのデータを相互に復元可能なデータを格納する一つ以上の冗長データ記憶ユニットと、
該記憶ユニットの復元されたデータを格納する予備記憶ユニットと、
該冗長データ記憶ユニットと該予備記憶ユニットとを制御する制御部とを有し、
該制御部は、該冗長データ記憶ユニットを構成する記憶ユニットから該記憶ユニットを交換すべき旨の情報を受け取ると、該冗長データ記憶ユニットによって復元した該交換すべき旨を出力した記憶ユニットに格納されたデータおよび該ホスト装置からの該交換すべき旨を出力した記憶ユニットに書き込むべきデータを該予備記憶ユニットに書き込み、
該制御部は、該冗長データ記憶ユニットによるデータの復元が失敗した領域に対応する該予備記憶ユニットの領域が該ホスト装置からのデータの書き込みを行っていない領域であるときに、該予備記憶ユニットの領域に対応するデータを該交換すべき旨を出力した記憶ユニットから読み出す、
ことを特徴とする記憶装置。
【請求項２】
該制御部は更に、該冗長データ記憶ユニットによる予備記憶ユニットに書き込むデータの復元が失敗した領域に対応する該予備記憶ユニットの領域が該ホスト装置からのデータの書き込みを行った領域であると識別したときに、該予備記憶ユニットに格納されたデータにより該冗長データ記憶ユニットのデータを復元する
ことを特徴とする請求項１に記載の記憶装置。
【請求項３】
該記憶ユニットは磁気ディスク装置であることを特徴とする請求項１に記載の記憶装置。
【請求項４】
予め定めた所定数以上の復元を実行する処理が実行された場合に、記憶装置に異常が有る旨を出力する手段を更に有することを特徴とする請求項１に記載の記憶装置。
【請求項５】
該交換すべき旨を出力した記憶ユニットを交換すべき旨の情報は、該交換すべき旨を出力した記憶ユニットの読出し及び書込みのエラーが発生する率を予め検出しておき、該エラーが発生する率によって該交換すべき旨を出力した記憶ユニットが動作できなくなると予想される時期の情報であることを特徴とする請求項１に記載の記憶装置。
【請求項６】
複数の記憶ユニットによりホスト装置からのデータを冗長に格納する記憶装置の制御方法であって、
該複数の記憶ユニットのデータを相互に復元可能なデータを格納する一つ以上の冗長データ記憶ユニットと、該記憶ユニットの復元されたデータを格納する予備記憶ユニットと、該冗長データ記憶ユニットと該予備記憶ユニットとを制御する制御部とからなり、
該制御部が、
該冗長データ記憶ユニットを構成する記憶ユニットから該記憶ユニットを交換すべき旨の情報を受け取ると、該冗長データ記憶ユニットによって復元した該交換すべき旨を出力した記憶ユニットに格納されたデータおよび該ホスト装置からの該交換すべき旨を出力した記憶ユニットに書き込むべきデータを該予備記憶ユニットに書き込み、
該冗長データ記憶ユニットによるデータの復元が失敗した領域に対応する該予備記憶ユニットの領域が該ホスト装置からのデータの書き込みを行っていない領域であるときに、該予備記憶ユニットの領域に対応するデータを該交換すべき旨を出力した記憶ユニットから読み出す、
ことを特徴とする記憶装置の制御方法。
【請求項７】
複数の記憶ユニットによりホスト装置からのデータを冗長に格納する記憶装置の制御方法であって、
該複数の記憶ユニットのデータを相互に復元可能なデータを格納する一つ以上の冗長データ記憶ユニットと、該記憶ユニットの復元されたデータを格納する予備記憶ユニットと、該冗長データ記憶ユニットと該予備記憶ユニットとを制御する制御部とからなり、
該制御部が、
該冗長データ記憶ユニットを構成する記憶ユニットから該記憶ユニットを交換すべき旨の情報を受け取ると、該冗長データ記憶ユニットによって復元した該交換すべき旨を出力した記憶ユニットに格納されたデータおよび該ホスト装置からの該交換すべき旨を出力した記憶ユニットに書き込むべきデータを該予備記憶ユニットに書き込む手順、
該冗長データ記憶ユニットによるデータの復元が失敗した領域に対応する該予備記憶ユニットの領域が該ホスト装置からのデータの書き込みを行っていない領域であるときに、該予備記憶ユニットの領域に対応するデータを該交換すべき旨を出力した記憶ユニットから読み出す手順、
を実行させるための制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は記憶装置に関する。
【背景技術】
【０００２】
記憶装置は記憶されたデータの保存の可能性を高めるために複数の記憶ユニットを冗長な構成とする。記憶装置には例えばディスクアレイ装置がある。ディスクアレイ装置は複数のディスク装置を有する。ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）は、独立した複数のディスク装置を冗長構成とすることにより、データの保存の信頼性を高めるデータ記録方式である。ＲＡＩＤを構成するディスク装置をメンバディスクという。メンバディスクの一台が故障した場合、他のメンバディスクに格納されたデータにより故障したメンバディスクが有するデータを復元することができる。故障したディスクを置き換えることにより、データの保護が実現できる。ディスク装置はデータ保護に関する高信頼性が求められるため、ディスク装置自身が故障予知を報告する機能（ＳＭＡＲＴ（Ｓｅｌｆ−Ｍｏｎｉｔｏｒｉｎｇ，  Ａｎａｌｙｓｉｓ  ａｎｄ  Ｒｅｐｏｒｔｉｎｇ  Ｔｅｃｈｎｏｌｏｇｙ））を有する。故障予知を出力したＲＡＩＤのメンバディスクは代替のディスク装置に交換される。
【０００３】
故障予知の出力をしたメンバディスク（以下、故障予知ディスクという）のデータは、故障予知ディスク以外のメンバディスク（以下、正常ディスクという）に格納されたデータによって復元（リカバリ）される。復元したデータはＲＡＩＤの予備のディスク（以下、予備ディスクという）に書き込まれる。上記の一連の復元処理はＲｅｂｕｉｌｄ処理という。
【０００４】
故障予知ディスクは将来に真の故障が発生する確率が高いため、可能な限り故障予知ディスクへのアクセスを抑止することが望ましい。しかし、ホストコンピュータからの書込データを格納する場合、ＲＡＩＤを構成するメンバディスク間でデータの不整合が発生しないようにデータを書き込む必要がある。故障予知ディスクにデータを書き込むことによって、故障予知ディスクへのアクセスを行った結果、故障予知ディスクが真に故障した状態になる恐れがある。故障予知ディスクが真に故障した場合、Ｒｅｂｕｉｌｄ処理中に正常ディスクでデータを読み込めなかった時に、読み込めなかったデータを復元することができなかった。一方、故障予知ディスクに対して一切のデータの読み書きを行わない場合、正常ディスクに格納されたデータと故障予知ディスクとの間で、データの整合性がない領域が存在することとなり、データの整合性がない領域のデータは復元できない場合があった。
【０００５】
従来技術として下記の文献がある。
【特許文献１】特開２００５−１５７７３９号公報
【特許文献２】特開２００６−７９４１８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明は上記のような問題点を解決するために、データが復元される可能性が高い記憶装置の提供を課題とする。
【課題を解決するための手段】
【０００７】
本発明を解決するための手段を以下に述べる。
【０００８】
第一の手段による記憶装置は、複数の記憶ユニットによりホスト装置からのデータを冗長に格納する記憶装置であって、複数の記憶ユニットのデータを相互に復元可能なデータを格納する一つ以上の冗長データ記憶ユニットと、記憶ユニットの復元されたデータを格納する予備の記憶ユニットと、該冗長データ記憶ユニットと該予備記憶ユニットを制御する制御部とを有する。そして、制御部は、冗長データ記憶ユニットを構成する記憶ユニットから記憶ユニットを交換すべき旨の情報を受け取ると、冗長データ記憶ユニットによって復元した交換すべき旨を出力した記憶ユニットに格納されたデータおよびホスト装置からの交換すべき旨を出力した記憶ユニットに書き込むべきデータを該予備記憶ユニットに書き込む。また、制御部は、冗長データ記憶ユニットによるデータの復元が失敗した領域に対応する予備記憶ユニットの領域が該ホスト装置からのデータの書き込みを行っていない領域であるときに、該予備記憶ユニットの領域に対応するデータを該交換すべき旨を出力した記憶ユニットから読み出す。
【０００９】
第二の手段による記憶装置は、第二の手段の制御部が更に、冗長データ記憶ユニットによる予備の記憶ユニットに書き込むデータの復元が失敗した領域に対応する予備の記憶ユニットの領域がホスト装置からのデータの書き込みを行った領域であると識別したときに、予備の記憶ユニットに格納されたデータにより冗長データ記憶ユニットのデータを復元する。
【００１０】
第三の手段による記憶装置では、記憶ユニットは磁気ディスク装置である。
【００１１】
第四の手段による記憶装置では更に、予め定めた所定数以上の復元を実行する処理が実行された場合に、記憶装置に異常が有る旨を出力する。
【００１２】
第五の手段による記憶装置では、交換すべき旨を出力した記憶ユニットを交換すべき旨の情報が、交換すべき旨を出力した記憶ユニットの読出し及び書込みのエラーが発生する率を予め検出しておき、エラーが発生する率によって該交換すべき旨を出力した記憶ユニットが動作できなくなると予想される時期の情報である。
【発明の効果】
【００１３】
本発明によってデータが復元される可能性が高い記憶装置の提供が可能となり、記憶装置のデータの保存の信頼性が高まる。
【発明を実施するための最良の形態】
【００１４】
図１は、本実施例のストレージシステム（Ｓｔｏｒａｇｅ  Ｓｙｓｔｅｍ）１の構成図である。
【００１５】
ストレージシステム１は、ホストコンピュータ（Ｈｏｓｔ  Ｃｏｍｐｕｔｅｒ）２とディスクアレイ装置（Ｄｉｓｋ  Ａｒｒａｙ  Ｄｅｖｉｃｅ）３とから構成される。ホストコンピュータ２はストレージシステム１の全体を制御する。また、ホストコンピュータ２はストレージシステム１で記憶するデータを管理する。ホストコンピュータ２は例えば、記憶するデータをディスクアレイ装置３に送信すること、あるいはディスクアレイ装置３に格納されたデータを読み出すことを行う。
【００１６】
ディスクアレイ装置３は、ホストコンピュータ２から送られるデータを格納し、ホストコンピュータ２からの要求に応じて格納したデータを読み出す処理を行う。ディスクアレイ装置３はＲＡＩＤ（ＲＥＤＵＮＤＡＮＴ  ＡＲＲＡＹ  ＯＦ  ＩＮＤＥＰＥＮＤＥＮＴ  ＤＩＳＫＳ）を構成する。ＲＡＩＤの構成とすることでデータを冗長に記憶することとなり、データをより確実に記憶することが可能となる。ディスクアレイ装置３は、チャネルアダプタ（Ｃｈａｎｎｅｌ  Ａｄａｐｔｅｒ）４、コントローラ（Ｃｏｎｔｒｏｌｌｅｒ）５、ディスクインターフェース（Ｄｉｓｋ  Ｉｎｔｅｒｆａｃｅ）６、及び、複数のディスク装置（Ｄｉｓｋ  Ｄｅｖｉｃｅ）１０を有する。
【００１７】
チャネルアダプタ４は、ホストコンピュータ２とコントローラとの間を接続するインターフェースである。チャネルアダプタはホストコンピュータ２およびディスクアレイ装置３内のコントローラ５と接続する。
【００１８】
コントローラ５は、ディスクアレイ装置３の全体を制御する。例えば、ホストコンピュータ２との間の制御、ホストコンピュータ２から受け取ったデータを一時格納するキャッシュメモリの制御、複数のディスク装置１０で構成されるＲＡＩＤシステムの制御等を行う。コントローラ５はチャネルアダプタ４とディスクアレイ装置３内のディスクインターフェース６と接続する。
【００１９】
ディスクインターフェース６は、コントローラ５と各ディスク装置１０との間を接続するインターフェースである。各ディスク装置１０は、データを格納する装置である。
【００２０】
ディスク装置１０はコントローラ５からの指示に応じてデータを格納する、あるいはコントローラ５からの指示に応じてデータをコントローラ５に送信する装置である。各ディスク装置１０はＳＭＡＲＴ（Ｓｅｌｆ−Ｍｏｎｉｔｏｒｉｎｇ，  Ａｎａｌｙｓｉｓ  ａｎｄ  Ｒｅｐｏｒｔｉｎｇ  Ｔｅｃｈｎｏｌｏｇｙ  自己診断、解析及び報告技術）機能を有する。ＳＭＡＲＴは、ディスク装置１０の読み出し及び書き込みのエラー率を予め検出しておき、エラー率によってディスク装置が動作できなくなると予想される時期をディスク装置内で求め、求めた予想時期を出力する機能である。ＳＭＡＲＴはＡＴＡ／ＡＴＡＰＩの規格に組み込まれている。
【００２１】
複数のディスク装置１０は、ＲＡＩＤとして機能するディスク装置（冗長データ記憶ユニット）と予備のディスク装置（予備の記憶ユニット）とから構成される。予備のディスク装置は、ＲＡＩＤとして機能するディスク装置が故障した場合、あるいは、ＳＭＡＲＴによって故障の予知を出力した場合にＲＡＩＤとして機能するディスク装置と置き換えるためのディスク装置である。予備ディスクとＲＡＩＤとして機能するディスク装置とを置き換えてＲＡＩＤを再構築する処理はＲｅｂｕｉｌｄ処理という。
【００２２】
次に本実施例のコントローラ５の構成について説明する。図２は本実施例のコントローラ５の構成図である。コントローラ５は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）５１、ＲＯＭ５２、キャッシュメモリ（Ｃａｃｈｅ  ｍｅｍｏｒｙ）５３、ＲＡＭ５４を有し、それぞれはバス５５によって接続される。
【００２３】
ＣＰＵ５１はコントローラ５の全体の制御を行なう。ＣＰＵ５１はＲＡＭ５４に展開された各プログラムを実行することにより、読出手段、書込手段、復元手段。ＲＡＭ５４は、ＣＰＵ５１から直接アクセスされる記憶素子である。ＲＡＭ５４にはＲＯＭ５２に格納された各プログラム（ファームウェア）が展開される。プログラムは例えば、ホストコンピュータ２とディスクアレイ装置３との間のインターフェースを制御するインターフェースプログラム、キャッシュメモリに格納されたデータの管理を制御するキャッシュ制御プログラム、複数のディスク装置１０によって構成されるＲＡＩＤを制御するＲＡＩＤ制御プログラムなどである。また、ＲＡＭ５４には図３で説明するＷｒｉｔｅＢａｃｋ監視テーブル７（以降ＷＢ監視テーブル７とする）が展開される。
【００２４】
ＷｒｉｔｅＢａｃｋ処理はコントローラ５がキャッシュメモリ５３のデータをディスクアレイ装置３内の各ディスク装置１０に書き込む処理である。
【００２５】
キャッシュメモリ５３はホストコンピュータ２から送られるディスクアレイ装置３内の各ディスク装置１０に格納すべきデータが一時格納される記憶領域である。キャッシュメモリ５３に書き込みは行われていても、最終的な書き込み先のディスク装置にＷｒｉｔｅＢａｃｋ処理がされていないデータをＤｉｒｔｙＤａｔａという。
【００２６】
ディスクアレイ装置３は信頼性の向上のため冗長構成である場合が多い。冗長構成のディスクアレイ装置３は複数のコントローラを有する。ディスクアレイ装置３の互いのコントローラ間は接続する。図２では、コントローラ５は冗長構成となる他のコントローラ５６に接続する。
【００２７】
次に本実施例のＷＢ監視テーブル７の構成について説明する。図３は本実施例のＷＢ監視テーブル７の構成図である。ＷＢ監視テーブル７は、予備のディスク装置に対してＲｅｂｕｉｌｄ処理を行うときに作成するテーブルである。
【００２８】
コントローラ５が予備ディスクに対してＲｅｂｕｉｌｄ処理を行う場合、Ｒｅｂｕｉｌｄ処理の開始から完了までの間、コントローラ５は予備のディスク装置に対するＷｒｉｔｅ  Ｂａｃｋ処理の有無を監視する。コントローラ５はＷｒｉｔｅ  Ｂａｃｋを監視するためにＷＢ監視テーブル７をＲＡＭ５４上に展開する。なお、コントローラ５はＲｅｂｕｉｌｄ処理を既に実行した領域をＷｒｉｔｅ  Ｂａｃｋ処理の有無の監視の対象から除外する構成とすることも可能である。Ｒｅｂｕｉｌｄ処理が実行された後の領域はＲＡＩＤを構成するグループとして冗長な状態であり、故障を予知したディスク装置からデータを読み出すことがないためである。
【００２９】
コントローラ５はＲｅｂｕｉｌｄ処理の開始時にＲＡＭ５４の領域にＷＢ監視テーブル７を新たに作成する。コントローラ５はＲｅｂｕｉｌｄ処理の完了時にＲＡＭ５４の領域のＷＢ監視テーブル７を解放する。なお、コントローラ５はＲＡＭ５４の領域のＷＢ監視テーブル７の作成および解放とディスクアレイ装置３の電源Ｏｎあるいは電源Ｏｆｆとを関連付けることも可能である。
【００３０】
ＷＲＩＴＥＢＡＣＫ処理はディスク装置１０のブロック（Ｂｌｏｃｋ）を単位とする。また、ディスク装置内のブロックを特定するために、各ブロックはＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）が付される。１Ｂｌｏｃｋを構成するデータの量は５２０Ｂｙｔｅである。そのため、１Ｂｌｏｃｋ毎にＷＲＩＴＥＢＡＣＫ処理の監視を行うと、ＷＢ監視テーブル７のサイズが大きくなりすぎる。例えばディスク装置の容量が３６ＧＢｙｔｅの場合に１Ｂｌｏｃｋ毎にＷＲＩＴＥＢＡＣＫ処理の監視を行うと、ＷＢ監視テーブルの大きさは約７．５ＧＢｙｔｅとなる。一方、ディスク装置に対するデータの書込み時でのＷＲＩＴＥＢＡＣＫ処理で要求されるＬＢＡの範囲は可変である。
ＷＲＩＴＥＢＡＣＫ処理の可変となる範囲は１Ｂｌｏｃｋ乃至２，０４８Ｂｌｏｃｋであり、１２８Ｂｌｏｃｋを一回のＷＲＩＴＥＢＡＣＫ要求サイズとして使用されることが多い。そこで本実施例のＷＢ監視テーブル７は１２８Ｂｌｏｃｋを１セグメントとし、１セグメントに対してＷＲＩＴＥＢＡＣＫ処理の有無を管理する。例えばディスク装置の容量が３６ＧＢｙｔｅの場合に１セグメント毎にＷＲＩＴＥＢＡＣＫ処理の監視を行うと、ＷＢ監視テーブルの大きさは約７５ｋＢｙｔｅ程度となる。１セグメントの範囲でのＷＲＩＴＥＢＡＣＫ処理の監視とすることにより、ＷＢ監視テーブル７がＲＡＭ５４を占有する領域を小さくすることが可能となる。
【００３１】
図３のＷＢ監視テーブル７は、Ｄｉｓｋ  ＬＢＡ７１とＷＢ有無Ｆｌａｇ７２とから構成される。Ｄｉｓｋ  ＬＢＡ７１は、予備のディスク装置のセグメントを単位とする場合のセグメントの先頭のブロックのＬＢＡを示す。ＷＢ有無Ｆｌａｇ７２はＤｉｓｋ  ＬＢＡ７１を先頭のブロックのアドレスとするセグメントに対してＷｒｉｔｅＢａｃｋ処理が行われた否かを示すフラグである。
【００３２】
また、ディスクアレイ装置３が搭載するディスク装置の全ての数のＷＢ監視テーブル７をＲＡＭ５４上に展開することはＲＡＭ５４の領域を無駄に占有することとなる。したがって、コントローラ５毎にＷＢ監視テーブル７を並行して展開する最大数を予め定めておく。例えばコントローラ５毎に４台のディスク装置に対応するＷＢ監視テーブル７を持たせる。コントローラ５はＲｅｂｕｉｌｄ処理を並行して４台以上のディスク装置に対して実行すると判別した場合、コントローラ５はＷＲＩＴＥＢＡＣＫ処理の監視を実施しない動作にすることとする。ＷＢ監視テーブル７を並行して展開する最大数が予め設定する値よりも多い場合には、ディスクアレイ装置３の動作を停止させて保守を行ったほうがよい場合もあるためである。
【００３３】
本実施例のＷＢ監視テーブル７はディスクアレイ装置３内で冗長構成となるコントローラの間で二重化を行わない構成とする。コントローラ毎に独立した構成とするため、ディスクアレイ装置３の片方のコントローラに異常が発生し、異常が発生したコントローラを再起動した場合、再起動したコントローラはＷＲＩＴＥＢＡＣＫの監視をしないようにする。また、異常が発生した後、異常が発生したコントローラの処理を引き継いだコントローラはＷＲＩＴＥＢＡＣＫの監視をしないようにする。また、本実施例では、処理の複雑化を回避するため、ディスクアレイ装置３全体の電源のＯｎ／Ｏｆｆをする場合は、コントローラ５はＷＢ監視テーブル７を記憶しないようにする。ディスクアレイ装置３全体の停電による電源のＯｎ／Ｏｆｆを含む。
【００３４】
次にＲｅｂｕｉｌｄ処理中のＷｒｉｔｅ  Ｂａｃｋ処理について説明する。図４はキャッシュメモリ５３に格納された更新データを各ディスク装置に格納する際のデータの流れを説明する図である。
【００３５】
更新データ５３３は、ホストコンピュータ２から送信されキャッシュメモリ５３に一時格納された、ストレージシステム１で更新されたデータである。
コントローラ５は更新データ５３３を各ディスク装置に格納する。更新データ５３３はセグメント５３１の大きさで管理される。セグメント５３１は連続する複数のブロック５３２のデータの集合である。
【００３６】
正常Ｄｉｓｋ１４、故障予知Ｄｉｓｋ１５、および予備Ｄｉｓｋ１６はディスクアレイ装置３を構成するディスク装置１０である。故障予知Ｄｉｓｋ１５はＳＭＡＲＴによる故障の予知情報をコントローラ５に対して報知したディスク装置である。正常Ｄｉｓｋ１４は故障予知Ｄｉｓｋ１５がＳＭＡＲＴによる故障の予知情報をコントローラ５に対して報知した後も継続して正常に動作をするディスク装置である。正常Ｄｉｓｋ１４と故障予知Ｄｉｓｋ１５とは本実施例ではＲＡＩＤ１を構成するものとする。予備Ｄｉｓｋ１６はディスクアレイ装置３に接続された予備のディスク装置である。
【００３７】
本実施例では、故障予知ディスク１５の故障の可能性を高めないためにＲｅｂｕｉｌｄ処理中にコントローラ５が故障予知ディスク１５に対してＷＲＩＴＥＢＡＣＫ処理を実施しない。故障予知ディスク１５に対してＷＲＩＴＥＢＡＣＫ処理を実施しないため、ＲＡＩＤを構成する正常ディスク１４と故障予知ディスク１５との間のデータは不整合の状態である。メンバディスク間のデータが不整合である状態とは、例えばＲＡＩＤ１の場合はミラー整合性、ＲＡＩＤ５の場合はストライプ（Ｓｔｒｉｐｅ）整合性が無い状態である。コントローラ５はデータが不整合の状態の領域については正常ディスクのデータを故障予知ディスクのデータによって復元することができない。そこで、コントローラ５はＷＲＩＴＥＢＡＣＫ時に故障予知ディスクへの書込みを実施しないかわりに、ＲＡＩＤを構成するメンバディスク間でデータが不整合となるデータ領域をＲＡＭ５４のＷＢ監視テーブル７に記録する。データが不整合となるデータ領域とＷＲＩＴＥＢＡＣＫ処理を実施した範囲とは一致するためである。この構成により、コントローラ５は正常ディスク１４でＷＲＩＴＥＢＡＣＫ処理を実施しない範囲のデータを読み出せない時に故障予知ディスクを使ったリカバリを行うことが可能となる。
【００３８】
Ｒｅｂｕｉｌｄ中にＷＲＩＴＥＢＡＣＫ処理を実行する場合、コントローラ５は正常ディスク１４と予備ディスク１６に対してＷｒｉｔｅＢａｃｋ処理を実行する。また、コントローラ５はＷＲＩＴＥＢＡＣＫ処理が要求されたセグメントをＷＢ監視テーブル７に記録する。一方、コントローラ５は故障予知ディスク１５に対してはＷｒｉｔｅＢａｃｋ処理を実行しない。コントローラ５はＲＡＩＤを構成するメンバディスク間のデータの不整合の範囲をＷＢ監視テーブル７に記録しているので、データの復元をすることが可能になる。
【００３９】
次に、コントローラ５が実行するＲｅｂｕｉｌｄ処理中のＷＲＩＴＥＢＡＣＫ処理の流れを説明する。図５はＲｅｂｕｉｌｄ処理中のＷＲＩＴＥＢＡＣＫ処理の流れのフローチャートである。
【００４０】
コントローラ５のキャッシュ制御手段はＲＡＩＤ制御手段を呼び出す。コントローラ５のＲＡＩＤ制御手段はキャッシュメモリ５３に格納されたデータに応じて、ＷＲＩＴＥＢＡＣＫ処理を実行するブロックの数がＷＢ監視テーブル７で管理するセグメントを構成するブロックの数以上か否かを判定する（Ｓ０１）。
【００４１】
ＷＲＩＴＥＢＡＣＫ処理を実行するブロック数がセグメントを構成するブロック数以上である場合（Ｓ０１：Ｙｅｓ）、コントローラ５は正常ディスク１４と予備ディスク１６に対して通常のＷｒｉｔｅ処理を実行する（Ｓ０２）。
【００４２】
コントローラ５のＲＡＩＤ制御手段は、ＷＢ監視テーブル７の処理を行ったセグメントの先頭のＬＢＡ７１に対応するＷＢ有無Ｆｌａｇ７２を「０」から「１」に更新する（Ｓ０４）。その後、コントローラ５のＲＡＩＤ制御手段は、キャッシュメモリ制御手段に対してＷＲＩＴＥＢＡＣＫ処理の完了応答を行う。
【００４３】
一方、ホストコンピュータ２からＷＲＩＴＥＢＡＣＫ処理が要求されるブロックの数は変動する。したがって、セグメントの単位である１２８個のブロックに満たないブロック数のＷＲＩＴＥＢＡＣＫ処理の要求がある場合がある。  図６はセグメントのブロック数がＷＲＩＴＥＢＡＣＫ処理のブロック数よりも大きい場合の状態の説明図である。ＷＲＩＴＥＢＡＣＫ処理を実行するブロック数がセグメントを構成するブロック数よりも少ない場合（Ｓ０１：Ｎｏ）は、コントローラ５は以下のＷｒｉｔｅ処理（Ｓ０３）を実行する。まず、コントローラ５は、正常ディスク１４にＷＲＩＴＥＢＡＣＫ処理を実行する。
【００４４】
コントローラ５のＲＡＩＤ制御手段はキャッシュメモリ５３内にディスク装置１０に書き込むデータを一時格納するためのデータバッファ領域を獲得する（Ｓ１１）。コントローラ５が獲得するデータバッファの領域はセグメントの大きさである。コントローラ５はＷＲＩＴＥＢＡＣＫ処理の対象のセグメントを正常ディスク１４から読み出す（Ｓ１２）。コントローラ５は正常ディスク１４から読み出したセグメントのデータをデータバッファに格納する。コントローラ５はデータバッファに格納されたデータをキャッシュメモリ５３のＤｉｒｔｙＤａｔａによって上書きする（Ｓ１３）。
【００４５】
コントローラ５はデータバッファのデータのＷｒｉｔｅＢａｃｋ処理を予備ディスク１６に対して実行する。コントローラ５はＷＢ監視テーブル７のフラグ７３２を更新する（Ｓ１４）。本実施例ではフラグ７３２の値を”０”から”１”に更新する。
【００４６】
コントローラ５は、正常ディスク１４および予備ディスク１６に対してＷｒｉｔｅＢａｃｋ処理を実行する。正常ディスク１４と予備ディスク１６に対してＷｒｉｔｅＢａｃｋ処理を実行する時期は並行して行っても良いし、正常ディスク１４に対するＷｒｉｔｅＢａｃｋ処理が完了した後で予備ディスク１６へのＷｒｉｔｅＢａｃｋ処理行ってよい。正常ディスク１４に対するＷｒｉｔｅＢａｃｋ処理が完了した後で予備ディスク１６へのＷｒｉｔｅＢａｃｋ処理を行う場合、ＷｒｉｔｅＢａｃｋ処理時のＤｉｒｔｙＤａｔａがセグメント内に含まれるため、コントローラ５はＤｉｒｔｙＤａｔａの上書き処理を省略することが出来る。しかし、コントローラ５は、並行したＷｒｉｔｅＢａｃｋ処理の実行が出来なくなるため、並行したＷｒｉｔｅＢａｃｋ処理と比較してＷｒｉｔｅＢａｃｋ処理に要する時間は長くなる。
【００４７】
また、Ｓ１２においてコントローラ５が正常ディスク１４のセグメントのブロックの読み出すときに、キャッシュメモリ５３に格納されたＤｉｒｔｙＤａｔａに対応するブロックをスキップして読み込むことも可能である。しかし、コントローラ５は正常ディスク１４に対するＲｅａｄ処理のコマンドの数が増加する。
【００４８】
次に、Ｓ１２において、セグメントの一部がキャッシュメモリ５３に格納されており、コントローラ５がキャッシュメモリ５３に格納されたセグメントの一部のデータをデータバッファに読み出す時に正常ディスク１４からデータを読み出せない場合の処理について説明する。図７は、コントローラ５がキャッシュメモリに格納されたセグメントの一部のデータをデータバッファに展開する時に正常ディスク１４からデータを読み出せない場合の処理を説明する図である。
【００４９】
コントローラ５が正常ディスクの対象のセグメントに属するブロックのデータを読出せない場合（Ｓ２１：Ｎｏ）は、コントローラ５は正常ディスク１４から読出せないブロックに対応する故障予知ディスク１５のブロックから読み出す（Ｓ２２）。コントローラ５は故障予知ディスク１５から読出したブロックのデータと正常ディスク１４から読出したブロックのデータとからセグメントを構成するデータをデータバッファに作成する。その後、Ｓ１３以降の処理を実行する。
【００５０】
次に、予備ディスク１６に対するＲｅｂｕｉｌｄ処理時のコントローラ５の動作について説明する。図８はデータ復旧処理時のコントローラ５の処理のフローチャートである。図９はデータ復旧処理時のコントローラ５の処理のフローチャートの動作を説明する図である。
【００５１】
コントローラ５はＲｅｂｕｉｌｄ処理を開始する。コントローラ５はセグメントに対応するブロックのデータを正常ディスク１４から読み出す（Ｓ３１）。コントローラ５はデータを読み出せたか否かを判定する（Ｓ３２）。例えば、ディスク装置が有する応答ステータスの値で媒体エラーの旨の結果を得た場合に正常に読み出せなかったと判定する。
【００５２】
コントローラ５は正常ディスク１４からＷｒｉｔｅｂａｃｋ処理の対象となるセグメントを読み出せない場合（Ｓ３２：Ｎｏ）ＲＡＩＤ制御プログラムを呼び出し、正常ディスク１４から読み出せないブロックのデータについての復旧処理を実行する。
【００５３】
一方、データを正常に読み出せなかった場合（Ｓ３２：Ｎｏ）、読み出せなかったデータに対応するセグメントのＷＲＩＴＥＢＡＣＫ処理の有無をＷＢ監視テーブル７のＷＢ有無Ｆｌａｇ７２によって判別する（Ｓ３３）。ＷＲＩＴＥＢＡＣＫ処理が既に行われているセグメントに読み出せなかったブロックが含まれる場合、セグメントに対応する予備ディスク１６内の各ブロックには既に正常ディスク１４のデータを復元し得るデータが書き込まれている状態である。したがって、ＷＢ監視テーブル７のＷＢ有無Ｆｌａｇ７２が「１」のセグメントに含まれるブロックの場合（Ｓ３３：Ｙｅｓ）、コントローラ５は現在のセグメントに対するＷｒｉｔｅ処理をスキップする。
【００５４】
ＷＲＩＴＥＢＡＣＫ処理を以前に実施されたセグメントの場合、予備ディスクのセグメントに格納されたデータと正常ディスク１４のセグメントに格納されたデータとはＲＡＩＤの冗長関係にある。したがって、故障予知ディスク１５を使ったリカバリは不要であり、コントローラ５は予備ディスク１６に対するＷｒｉｔｅＢａｃｋ処理を実施することもなく、次のセグメントについてのＲｅｂｕｉｌｄ処理を行う。
【００５５】
なお、コントローラ５は正常ディスク１４の読み出せなかったブロックのデータを予備ディスク１６によってリカバリ処理を実行することも可能である。Ｒｅｂｕｉｌｄ処理時にリカバリ処理をすることにより、ディスクパトロールによるブロックの異常検出の時だけでなく、正常ディスク１４の媒体エラーをリカバリする機会が増加する。これによりディスクアレイ装置３のデータ保存の可能性が高まる。
【００５６】
一方、読み出せなかったブロックを含むセグメントについてＷＲＩＴＥＢＡＣＫ処理がなされていない場合（Ｓ３３：Ｎｏ）、コントローラ５は正常ディスク１４で読み出せなかったブロックを故障予知ディスク１５から読み出してリカバリ処理を実行する（Ｓ３４）。具体的にはコントローラ５は、正常ブロック１４から読み出せないブロックに対応するデータを故障予知ディスク１５から読み出し、読み出したデータをデータバッファに格納する。コントローラ５は処理の対象となるセグメントの残りのブロックを正常ディスク１４から読み出しデータバッファに格納する（Ｓ３５）。
【００５７】
コントローラ５は、データバッファに格納されたセグメント単位のデータを予備ディスク１６に対して書き込む（Ｓ３６）。データを書込み後、コントローラ５は正しく書き込めたか否かの確認処理（Ｖｅｒｉｆｙ）を行う。コントローラ５は、正常ディスク１４の最終のブロックまで完了するまで（Ｓ３７）Ｒｅｂｕｉｌｄ処理を実行する。
具体的には、コントローラ５は故障予知ディスク１５から読み出したデータブロックの次のＬＢＡに該当するデータブロックを正常ディスク１４から読み出す処理をＳ３１から繰り返し、データバッファに格納する。コントローラ５はセグメントの最終のブロックをデータバッファに格納するまで繰り返す。
【００５８】
コントローラ５は正常ディスクの最終のブロックまで完了した場合（Ｓ３６：Ｙｅｓ）はＲｅｂｕｉｌｄ処理を完了する。Ｒｅｂｕｉｌｄ処理が完了した場合、コントローラ５はＲＡＭ５４上に格納されたＷＢ監視テーブル７の領域を開放する。また、コントローラ５は故障予知ディスク１５を故障とする。
【００５９】
また、コントローラ５は予備ディスク１６のセグメントはＷＲＩＴＥＢＡＣＫ処理を既に実行した領域か否かをＷＢ監視テーブル７のＷＢ有無フラグ７２によって判別することも可能である。コントローラ５は既にＷｒｉｔｅＢａｃｋ処理を行ったセグメントであると判別した場合、対象のセグメントのＲｅｂｕｉｌｄ処理をスキップすることも可能である。
【００６０】
次に、Ｒｅｂｕｉｌｄ処理の基準となるブロック数とＷＢ監視テーブル７で監視するセグメントを構成するブロック数とが不一致の場合でのＲｅｂｕｉｌｄ処理について説明する。セグメントの一部についてＲｅｂｕｉｌｄ処理を実行することは部分的なＲｅｂｕｉｌｄ（Ｐａｒｔｉａｌ  Ｒｅｂｕｉｌｄ）という。
【００６１】
Ｒｅｂｕｉｌｄ処理の基準となるブロック数がＷＢ監視テーブル７で監視するセグメントのブロック数よりも少ない場合は、ブロック数が同一の場合と同様の処理によりＲｅｂｕｉｌｄ処理が可能である。
【００６２】
一方、Ｒｅｂｕｉｌｄ処理の基準となるブロック数がＷＢ監視テーブル７で監視するセグメントのブロック数よりも多い場合、コントローラ５はＲｅｂｕｉｌｄ処理の対象のブロック群をセグメント毎に切り分け、コントローラ５は切り分けたセグメント毎にＲｅｂｕｉｌｄ処理を実行する。
【００６３】
従来のＷｒｉｔｅ処理の失敗情報による管理は、故障予知ディスクに対するＷｒｉｔｅコマンドの成否を管理することで、Ｒｅｂｕｉｌｄ処理時に正常ディスクのＲｅａｄ処理において媒体エラーが検出された場合の故障予知ディスクのデータの使用の可否を判断するものであった。従来の管理方法では、コントローラは、Ｗｒｉｔｅ処理を失敗した故障予知ディスクの領域を使ったリカバリを実行する場合、Ｂａｄ  Ｄａｔａを予備ディスクに書き込むことになる。一方、故障予知ディスクへのＷｒｉｔｅ処理は継続されるため故障予知ディスクが故障する可能性が高い。
【００６４】
本実施例では、Ｒｅｂｕｉｌｄ処理時に正常ディスクでのデータ読み取りエラー時のリカバリを故障予知ディスクからデータを読み出すことによって行う。本実施例は、Ｒｅｂｕｉｌｄ処理において正常ディスクからデータをＲｅａｄできない場合、ＷＲＩＴＥＢＡＣＫ処理の状態に基づき故障予知Ｄｉｓｋによる復元を行うことによりデータの復元可能性があがる。また、本実施例は故障予知ＤｉｓｋにＷｒｉｔｅＢａｃｋ処理を行わないこととするため、故障予知Ｄｉｓｋへの負担を軽減させることができる。本実施例により、Ｒｅｂｕｉｌｄ処理において復元できるデータが増加する。
【００６５】
本実施例ではミラーリングであるＲＡＩＤ１について説明をしたが他のＲＡＩＤの構成に適用可能である。例えばＲＡＩＤ５の場合、複数の正常Ｄｉｓｋによってデータを復元し、ディスク装置に書き込むデータを作成すればよい。
【図面の簡単な説明】
【００６６】
【図１】本実施例のストレージシステム１の構成図である。
【図２】本実施例のコントローラ５の構成図である。
【図３】本実施例のＷＢ監視テーブル７の構成図である。
【図４】キャッシュメモリ５３に格納された更新データを各ディスク装置に格納する際のデータの流れを説明する図である。
【図５】Ｒｅｂｕｉｌｄ処理中のＷＲＩＴＥＢＡＣＫ処理の流れのフローチャートである。
【図６】セグメントのブロック数がＷＲＩＴＥＢＡＣＫ処理のブロック数よりも大きい場合の状態の説明図である。
【図７】コントローラ５がキャッシュメモリに格納されたセグメントの一部のデータをデータバッファに展開する時に正常ディスク１４からデータを読み出せない場合の処理を説明する図である。
【図８】データ復旧処理時のコントローラ５の処理のフローチャートである。
【図９】データ復旧処理時のコントローラ５の処理のフローチャートの動作を説明する図である。
【符号の説明】
【００６７】
１  ストレージシステム（Ｓｔｏｒａｇｅ  Ｓｙｓｔｅｍ）
２  ホストコンピュータ（Ｈｏｓｔ  Ｃｏｍｐｕｔｅｒ）
２  ディスクアレイ装置（Ｄｉｓｋ  Ａｒｒａｙ  Ｄｅｖｉｃｅ）
４  チャネルアダプタ（Ｃｈａｎｎｅｌ  Ａｄａｐｔｅｒ）
５  コントローラ（Ｃｏｎｔｒｏｌｌｅｒ）
６  ディスクインターフェース（Ｄｉｓｋ  Ｉｎｔｅｒｆａｃｅ）
７  ＷＢ監視テーブル
１０  ディスク装置（Ｄｉｓｋ  Ｄｅｖｉｃｅ）
１４  正常Ｄｉｓｋ
１５  故障予知Ｄｉｓｋ
１６  予備Ｄｉｓｋ
５１  ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）
５２  ＲＯＭ
５３  キャッシュメモリ（Ｃａｃｈｅ  ｍｅｍｏｒｙ）
５４  ＲＡＭ
５５  バス
７１  Ｄｉｓｋ  ＬＢＡ
７２  ＷＢ有無Ｆｌａｇ
５３１  セグメント
５３２  ＬＢＡ
５３３  更新データ
【図１】
2008181425.tif 000003
【図２】
2008181425.tif 000004
【図３】
2008181425.tif 000005
【図４】
2008181425.tif 000006
【図５】
2008181425.tif 000007
【図６】
2008181425.tif 000008
【図７】
2008181425.tif 000009
【図８】
2008181425.tif 000010
【図９】
2008181425.tif 000011