(57)【特許請求の範囲】
【請求項１】
コンピュータと接続される複数のディスクを持つ外部記憶装置のディスク障害復旧方法であって、
第一の複数のディスクを用いてパリティグループを構成し、前記第一の複数のディスクに第一の論理ユニットを配置する第一のステップと、
前記第一の複数のディスクと同じ数のディスクを用い、前記第一の複数のディスクと対を成すように、第二の複数のディスクを用いたパリティグループを構成し、前記第二の複数のディスクに第二の論理ユニットを配置する第二のステップとを有し、
前記コンピュータがデータ書込み要求を行った際、前記第一の論理ユニットと前記第二の論理ユニットの両方に、前記データ書込み要求のデータを書き込む第三のステップと、
前記コンピュータからデータ書込み要求が有った場合、当該データ書込みを前記第一の論理ユニットへ行ない、かつ、前記第二の論理ユニットへ行わないように、前記第一の論理ユニットと前記第二の論理ユニットへのデータ書込みを制御する第四のステップと、
前記第四のステップにおける、第一の論理ユニットへのデータ書込み時の、当該データが書き込まれた前記ディスク上の位置と更新記録を記憶する第５のステップと、
前記第二の複数のディスクの内の一つのディスクが新しいディスクと交換された場合、前記交換されたディスクと対を成す前記第一の複数のディスクの内のディスクを特定する第六のステップと、
前記特定されたディスク上のデータの位置に前記更新記録が無いなら、当該位置のデータを、前記特定されたディスクの当該位置に対応する前記新しいディスクの位置へコピーする第七のステップと、
前記特定されたディスク上のデータの位置に前記更新記録が有るなら、当該位置に対応する前記新しいディスクの位置に、前記新しいディスクの当該位置に対応するデータを、前記第二の複数のディスクのうち前記交換されたディスク以外の他のディスク群からパリティ演算によって求め記録する第八のステップを有することを特徴とする外部記憶装置のディスク障害復旧方法。
【請求項２】
コンピュータと接続される複数のディスクを持つ外部記憶装置のディスク障害復旧方法であって、
第一の複数のディスクを用いてパリティグループを構成し、前記第一の複数のディスクに第一の論理ユニットを配置する第一のステップと、
前記第一の複数のディスクと同じ数のディスクを用い、前記第一の複数のディスクと対を成すように、第二の複数のディスクを用いたパリティグループを構成し、前記第二の複数のディスクに第二の論理ユニットを配置する第二のステップとを有し、
前記コンピュータがデータ書込み要求を行った際、前記第一の論理ユニットと前記第二の論理ユニットの両方に、前記データ書込み要求のデータを書き込む第三のステップと、
前記コンピュータからデータ書込み要求が有った場合、当該データ書込みを前記第一の論理ユニットへ行ない、かつ、前記第二の論理ユニットへ行わないように、前記第一の論理ユニットと前記第二の論理ユニットへのデータ書込みを制御する第四のステップと、
前記第四のステップにおける、第一の論理ユニットへのデータ書込み時の、当該データが書き込まれた前記ディスク上の位置と更新記録を記憶する第５のステップと、
前記第一の複数のディスクの内の一つのディスクが新しいディスクと交換された場合、前記交換されたディスクと対を成す前記第二の複数のディスクの内のディスクを特定する第六のステップと、
前記交換された一つのディスク上のデータの位置に前記更新記録が無いなら、前記交換された一つのディスクの当該位置と対を成していた前記特定されたディスクの位置のデータを、当該位置に対応する前記新しいディスクの位置へコピーする第七のステップと、
前記交換された一つのディスク上のデータの位置に前記更新記録が有るなら、当該位置に対応する前記新しいディスクの位置に、前記新しいディスクの当該位置に対応するデータを、前記第一の複数のディスクのうち前記交換された一つのディスク以外の他のディスク群からパリティ演算によって求め記録する第八のステップを有することを特徴とする外部記憶装置のディスク障害復旧方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は主として、コンピュータの外部記憶装置システムにおけるディスク障害復旧方法に関するものである。
【０００２】
【従来の技術】
（１）ディスクアレイのディスク障害復旧方法
ディスクアレイシステムは、ＲＡＩＤ(Redundant Arrays of Inexpensive Disks)とも呼ばれ、複数のディスク装置をアレイ状に配置した構成をとり、ホスト装置（以下ホストと略する）からのリード要求（データの読み出し要求）およびライト要求（データの書き込み要求）をディスク装置の並列動作によって高速に処理するとともに、データに冗長データを付加することによって信頼性を向上させた記憶装置である。ディスクアレイシステムは、冗長データの種類と構成により５つのレベルに分類されている（論文："A Case for Redundant Arrays of Inexpensive Disks (RAID)", David A.Patterson, Garth Gibson, and Randy H.Katz, Computer Science Division Department of Electrical Engineering and Computer Sciences, University of California Berkeley）。
【０００３】
上記のようなディスクアレイを実現するためには、ホストからのリード／ライト要求を各ディスク装置へのリード／ライト要求に変換し、ライト時にはデータを各ディスク装置へ分散し、リード時には各ディスク装置からデータを集合するデータ分散・集合制御を行う必要がある。このような制御をディスクアレイ制御と呼ぶこととする。
【０００４】
ディスクアレイのうちパリティを付加している例えばＲＡＩＤ５レベルでは、１台のディスク障害が発生しても他のディスクとのパリティ保証により、ディスクの内容を復旧することができる。ディスクを復旧する場合、障害があったディスクを交換し、パリティグループを構成する他のディスクからデータを読み出し、ＸＯＲ演算（排他的論理和）を施した後、演算結果を交換したディスクに書き込む。
【０００５】
（２）スナップショットのための二重化
一般にハードディスクなどのコンピュータの外部記憶装置に記録されたデータは、装置の障害、ソフトウェアの欠陥、誤操作などによりデータを喪失した場合に、喪失したデータを回復できるように定期的にテープなどにコピーして保存しておくバックアップが必要である。その際、コピー作業中にデータが更新され、データに不整合が生じるとバックアップとして意味をなさないため、コピー作業中はデータの整合性を保証する必要がある。
【０００６】
バックアップされるデータの整合性を保証するためには、データにアクセスするバックアッププログラム以外のプログラムを停止すればよいが、高可用性が要求されるシステムではプログラムを長時間停止させることができない。そのため、バックアップ中にプログラムがデータを更新することを妨げず、なおかつバックアップ開始時点でのデータの記憶イメージを作成する仕組みを提供する必要がある。ここで、ある時点でのデータの記憶イメージをスナップショットと呼び、指定された時点のスナップショットを作成しつつデータの更新が可能な状態を提供する仕組みをスナップショット管理方法と呼ぶ。また、スナップショット管理方法によりスナップショットを作成することをスナップショットの取得と呼び、スナップショット取得の対象となったデータをオリジナルデータと呼ぶ。また、スナップショットを作成した状態をやめることをスナップショットの削除と呼ぶ。
【０００７】
従来のスナップショット管理方法の一つとして、データの二重化による方法が挙げられる。
【０００８】
この方法では、スナップショットを取得していない通常の状態において、コンピュータ上のプログラムがすべてのデータを２つの記憶領域に二重化（ミラー）する。スナップショットを取得する時は二重化を停止して２つの記憶領域を独立な領域に分離し、１つの領域をオリジナルデータ、もう１つの領域をスナップショットとして提供する。
【０００９】
スナップショットを取得し二重化を停止している間は、オリジナルデータの記憶領域に対するデータの更新を許可するとともに、データ更新が発生した場合は更新した位置を記録しておく。スナップショット削除時には、データの二重化を再開するとともに、２つの記憶領域の間で内容が一致していない更新データを更新位置の記録をもとにオリジナルデータの記憶領域からスナップショットとして提供していた記憶領域にコピーする（ミラー再同期化）。コンピュータ上のプログラムでデータを二重化する方法は、例えば米国特許５，０５１，８８７に示されている。
【００１０】
【発明が解決しようとする課題】
ディスク交換後のパリティ再構築時には、交換したディスク以外の同パリティグループの全ディスクからデータを読み出す必要があるため通常アクセス性能が低下するという課題がある。また、パリティグループを形成するＲＡＩＤ５などの構成を表すｎＤ＋１Ｐにおいて、データドライブ数ｎが増加すると性能がさらに悪化するという課題がある。
【００１１】
データの二重化によるスナップショット管理方法では、ミラー再同期化時において、更新／参照をする通常アクセスと更新データのコピーアクセスがオリジナルデータの記憶領域に集中し、通常アクセスの性能が低下する。ミラー再同期化にかかる時間は、スナップショットを取得して二重化を停止している間に更新されたデータ量に比例するので、更新アクセスが単位時間あたり同じ回数発生すると仮定した場合、ミラー再同期化にかかる時間は二重化の停止時間に比例して大きくなる。ディスク交換後のパリティ再構築と並行してバックアップをとる場合、スナップショットを取得して二重化を停止している時間が長く、通常アクセスの性能が低下するミラー再同期化時間が長くなるという課題がある。
【００１２】
本発明の第１の目的は、スナップショット取得のために二重化運用しているディスクアレイにおいて、ディスク交換後のパリティ再構築時の通常アクセス性能低下を抑止するディスク障害復旧方法を提供することである。
【００１３】
本発明の第２の目的は、スナップショット取得のために二重化運用しているディスクアレイにおいて、二重化を停止している期間におけるディスク交換後のパリティ再構築時間を短縮することで、ミラー再同期化中の更新データのコピー量を削減し、性能が低下するミラー再同期化時間を短縮するディスク障害復旧方法を提供することである。
【００１４】
本発明の第３の目的は、第１、第２の目的に加えて、パリティグループを形成するＲＡＩＤ５などのディスク構成を表すｎＤ＋１Ｐにおいて、データドライブ数ｎの増加による性能低下を抑止するディスク障害復旧方法を提供することである。
【００１５】
【課題を解決するための手段】
前記第１の目的を達成するために本発明は、スナップショット取得のために二重化運用しているディスクアレイにおいて、障害ディスクの復旧時に行うパリティ再構築を、パリティ冗長性を用いたパリティ生成に代えて、スナップショット用ミラー構成の同じ位置にあるディスクからのデータコピーによって実施するディスク障害復旧サブプログラムを設ける。ディスク交換後のパリティ再構築に関わるディスクアクセス回数を削減することで、通常アクセス性能の低下を抑止することができる。
【００１６】
また、前記第２の目的を達成するために本発明は、スナップショット取得のために二重化運用しているディスクアレイにおいて、前記同様のディスク障害復旧サブプログラムを設ける。二重化を停止している期間におけるディスク交換後のパリティ再構築時間を短縮することで、ミラー再同期化中の更新データのコピー量を削減し、性能が低下するミラー再同期化時間を短縮することができる。
【００１７】
また、前記第２の目的を達成するために本発明は、スナップショット取得のために二重化運用しているディスクアレイにおいて、前記同様のディスク障害復旧サブプログラムを設ける。パリティグループを形成するＲＡＩＤ５などのディスク構成を表すｎＤ＋１Ｐにおいて、ｎの数によらず１台のディスクからのコピーとなるため、データドライブ数ｎの増加による性能低下を抑止することができる。
【００１８】
【発明の実施の形態】
本発明の第１の実施形態は、スナップショット取得のために二重化運用しているディスクアレイにおいて、ディスク交換後のパリティ再構築に関わるディスクアクセス回数を削減することで、通常アクセス性能の低下を抑止するためのものである。
【００１９】
また、二重化を停止している期間におけるディスク交換後のパリティ再構築時間を短縮することで、ミラー再同期化中の更新データのコピー量を削減し、性能が低下するミラー再同期化時間を短縮するためのものである。
【００２０】
また、ディスク交換後のパリティ再構築に関わるディスクアクセス回数を削減することで、パリティグループを形成するＲＡＩＤ５などのディスク構成を表すｎＤ＋１Ｐでのデータドライブ数ｎの増加による性能低下を抑止するためのものである。
【００２１】
なお、本発明ではスナップショットの利用例として、バックアップをとりあげるが、ＯＬＡＰ（ＯｎＬｉｎｅ  Ａｎａｌｙｔｉｃａｌ  Ｐｒｏｃｅｓｓｉｎｇ）やシステムテスト等の他の目的においても利用が可能である。
【００２２】
（１）構成の説明
本発明の第１の実施形態のシステム構成を図１を用いて説明する。図１において、コンピュータ１００とディスクアレイ２００が、ＳＣＳＩインタフェース１４０、２４０を介してＳＣＳＩバス３００で接続されている。コンピュータ１００のメモリ１２０には、データベースプログラム１２６、バックアッププログラム１２７があり、コンピュータ１００を制御するＣＰＵ１１０によって実行される。ディスクアレイ２００には、ディスクコントローラ２５０によって制御されるディスク群２５１〜２５２があり、またメモリ２２０内にはスナップショット管理プログラム２２１があり、ＣＰＵ２１０によって実行される。ディスク群２５１はディスク２７１〜２７５を有し、ディスク群２５２はディスク２８１〜２８２を有し、各ディスク群は各々がパリティ付きのストライピングされたアレイ構成をとる。本実施形態では、ディスク群２５１〜２５２内のディスク数を５としているが、それぞれ３つ以上のディスクから構成されていればよい。
【００２３】
各ディスク群２５１〜２５２内の記憶領域は、ＳＣＳＩの論理ユニットであるＬＵ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ）としてコンピュータ１００からアクセスされる。各ディスク群２５１〜２５２に対応する各記憶領域をそれぞれＬＵ２６１〜２６２とする。各ディスク群２５１〜２５２内のＬＵはそれぞれ複数であってもよい。本実施形態では、ディスクアレイ２２０内のスナップショット管理プログラム２２１が、ＬＵ２６１とＬＵ２６２を二重化して管理し、ＬＵ２６１をオリジナルデータを持ったミラー元ＬＵとし、ＬＵ２６２をオリジナルデータのミラーであるミラー先ＬＵとする。ＬＵ２６２が、スナップショットとして使用するＬＵである。
【００２４】
次に、コンピュータ１００内のプログラムについて説明する。
【００２５】
データベースプログラム１２６は、実行中にミラー元ＬＵであるＬＵ２６１にアクセスし、また、データ更新を制御してＬＵ２６１内のデータの整合性を保証するバックアップモードに切替える機能を持つ。バックアップモードへはユーザまたはバックアッププログラム１２７からの指示により遷移する。バックアッププログラム１２７は、ユーザからの指示によってスナップショットを保存したＬＵ２６２からテープ等にバックアップするためのデータを読み出す機能と、ディスクアレイ２００にＳＣＳＩのＭｏｄｅＳｅｌｅｃｔコマンドを発行する機能と、データベースプログラム１２６にバックアップモードの有効化、無効化を指示する機能を持つ。
【００２６】
次に、ディスクアレイ２００内のプログラム、および、管理表について説明する。
【００２７】
ディスクアレイ２００のスナップショット管理プログラム２２１は、コンピュータ１００からの要求に応じてディスクコントローラ２５０にディスクアクセスを指示するディスクアクセスサブプログラム２３０と、１つのＬＵに対する更新を二重化してあらかじめ指定された別のＬＵにも適用し、２つのＬＵに同じ内容を書き込むＬＵミラーサブプログラム２３１を持つ。ディスクアクセスサブプログラム２３０は、コンピュータ１００からのリード／ライト要求を各ディスク２７１〜２７５、２８１〜２８５へのリード／ライト要求に変換するディスクアレイ制御を行う。ＬＵミラーサブプログラム２３１は、ＬＵ２６１に対するアクセスをＬＵ２６２に二重化する。
【００２８】
また、スナップショット管理プログラム２２１は、二重化を停止しているとき（非ミラー時）にミラー元ＬＵに対する更新を検出する非ミラー時更新監視サブプログラム２３４と、その更新位置を後述する更新／不整合位置管理表２２２に記録する非ミラー時更新位置管理サブプログラム２３５と、ミラー再同期化を行う際にミラー元ＬＵの更新部分をミラー先ＬＵにコピーするミラー再同期サブプログラム２３２と、障害ディスクを交換した後にパリティ付きのストライピングされたアレイ構成に復旧するディスク障害復旧サブプログラム２３３とを持つ。更新／不整合位置管理表２２２は、ミラー元ＬＵとミラー先ＬＵのデータ内容の管理に用い、非ミラー時に更新されたミラー元ＬＵの更新位置と、ディスク障害後の交換したディスクにおいて同一ＬＵ内でのパリティが不整合となっている位置を記録するものである。
【００２９】
更新／不整合位置管理表２２２は、図２に示すようなビットマップとし、ミラー元ＬＵ内のすべてのＬＢＡセット番号、および、ＬＢＡセット番号に付随する更新ビット、ミラー元不整合ビット、ミラー先不整合ビットから成る。ＬＢＡセットは、ＬＵの全領域に対して、１個以上の同数のＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）を単位として先頭から分割していったときの個々の集合であり、ＬＢＡセット番号は、ＬＢＡの先頭側から各ＬＢＡセットに通し番号をつけたものである。
【００３０】
ディスクアレイのデータ分散により、ＬＢＡセットは各ディスクに対し先頭側から１個ずつ分配されていくものとし、各ディスク内の同じ位置におけるＬＢＡセットの組に対してパリティグループ番号を付記する。図２の例では、パリティグループ番号０は、ＬＢＡセット番号０〜４により構成されている。また、本実施形態ではディスク５台に対してデータ分散を行うものとし、各ディスクのＬＢＡセットの組を表すディスクセット番号を付記する。図２の例では、ディスクセット０は、ＬＢＡセット番号０、５、１０、１５により構成されている。
【００３１】
更新ビットは、非ミラー時にミラー元ＬＵのＬＢＡセットが更新されたかどうかを示し、「更新」、「非更新」に応じてそれぞれ１、０を指定する。更新ビットの初期設定値は０である。図２の例では、ＬＢＡセット番号１の領域のみが非ミラー時に更新されている状態を示す。
【００３２】
ミラー元不整合ビットは、ミラー元ＬＵが交換されたときに同一ＬＵ内の他のディスクとパリティの整合性がとれているかどうかを示し、「不整合」「整合」に応じてそれぞれ１、０を指定する。ミラー元不整合ビットの式設定値は０である。
【００３３】
ミラー先不整合ビットは、ミラー先ＬＵが交換されたときに同一ＬＵ内の他のディスクとパリティの整合性がとれているかどうかを示し、「不整合」「整合」に応じてそれぞれ１、０を指定する。ミラー先不整合ビットの式設定値は０である。図２の例では、ミラー先ＬＵにおいて、パリティグループ番号１〜３のディスクセット０の領域が他のディスクとのパリティ不整合となっている状態を示す。パリティグループ番号０のディスクセット０の領域は、後述するディスク障害復旧方法により他のディスクとのパリティ整合性がとれていることを示す。
【００３４】
（２）スナップショットの取得／削除
ミラー元ＬＵであるＬＵ２６１のスナップショットをミラー先ＬＵであるＬＵ２６２として提供する場合を例にとり、スナップショット取得／削除時におけるバックアッププログラム１２７とスナップショット管理プログラム２２１の動作を図３のフローチャートを用いて説明する。
【００３５】
まず、コンピュータ１００のバックアッププログラム１２７がデータベースプログラム１２６に指示を与え、バックアップモードを有効化してスナップショットを取得するデータの整合性を保証する（ステップ２０００）。次に、バックアッププログラム１２７は、ディスクアレイ２００にスナップショットを取得するためのＭｏｄｅＳｅｌｅｃｔコマンドを発行する（ステップ２００１）。ディスクアレイ２００のスナップショット管理プログラム２２１は、ＭｏｄｅＳｅｌｅｃｔコマンドを受信すると（ステップ３０００）、非ミラー時更新監視サブプログラム２３４と非ミラー時更新位置管理サブプログラム２３５を有効化し、ＬＵ２６１の更新位置記録を開始する（ステップ３００１）。以降、ＬＵ２６１が更新されると、更新／不整合位置管理表２２２における更新されたＬＢＡを含むＬＢＡセットの更新ビットに１を設定し、更新があったことを記録する。次に、スナップショット管理プログラム２２１は、ＬＵミラーサブプログラム２３１を無効化し、ＬＵ２６１とＬＵ２６２の二重化を停止する（ステップ３００２）。これにより、ミラー元ＬＵであるＬＵ２６１に対する更新がミラー先ＬＵであるＬＵ２６２に反映されなくなる。次に、スナップショット管理プログラム２２１は、ＭｏｄｅＳｅｌｅｃｔコマンドの終了ステータスをコンピュータ１００のバックアッププログラム１２７に送信する（ステップ３００３）。バックアッププログラム１２７は、ＭｏｄｅＳｅｌｅｃｔコマンドの終了ステータスを受信すると（ステップ２００２）、データベースプログラム１２６に指示を与え、バックアップモードを無効化する（ステップ２００３）。
【００３６】
次に、バックアッププログラム１２７は、ディスクアレイ２００に対し、ＬＵ２６３にスナップショット削除を指示するＭｏｄｅＳｅｌｅｃｔコマンドを発行する（ステップ２００４）。ディスクアレイ２００のスナップショット管理プログラム２２１は、ＭｏｄｅＳｅｌｅｃｔコマンドを受信すると（ステップ３００５）、ＬＵミラーサブプログラム２３１を有効化し、ＬＵ２６１とＬＵ２６２の二重化を再開する（ステップ３００６）。これにより、ＬＵ２６１に対する更新がＬＵ２６２にも反映される。次に、スナップショット管理プログラム２２１は、非ミラー時更新監視サブプログラム２３４と非ミラー時更新位置管理サブプログラム２３５を無効化し、ＬＵ２６１の更新位置記録を停止する（ステップ３００７）。以降、更新／不整合位置管理表２２２の更新ビットを非ミラー時更新位置管理サブプログラム２３５が変更しなくなる。次に、スナップショット管理プログラム２２１は、ミラー再同期サブプログラム２３２を有効化し、更新／不整合位置管理表２２２を参照して、ＬＵ２６１とＬＵ２６２で内容が一致しない部分をＬＵ２６１からＬＵ２６２にコピーする（ステップ３００８）。次に、スナップショット管理プログラム２２１は、ミラー再同期サブプログラム２３２を無効化し（３００９）、ＭｏｄｅＳｅｌｅｃｔコマンドの終了ステータスをコンピュータ１００のバックアッププログラム１２７に送信する（ステップ３０１０）。バックアッププログラム１２７は、ＭｏｄｅＳｅｌｅｃｔコマンドの終了ステータスを受信し動作を終了する（ステップ２００５）。
【００３７】
ここで、ステップ３００８でＬＵ２６１からＬＵ２６２へのデータコピーを行うミラー再同期サブプログラム２３２の動作を図４のフローチャートを用いて説明する。まず、ミラー再同期サブプログラム２３２が、更新／不整合位置管理表２２２の更新ビットに更新記録として１があるかどうかを調べる（ステップ１００１）。もし、更新記録である１がなければミラー再同期化が完了したので処理を終了する（ステップ１００２）。更新記録があれば、該当記録位置の更新を抑止し（ステップ１００３）、該当記録位置のデータを
ミラー元ＬＵであるＬＵ２６１からミラー先ＬＵであるＬＵ２６２にコピーする（ステップ１００４）。データのコピーは、ＬＵ２６１を含むディスク群２５１のディスク２７１〜２７５のいずれかにＲＥＡＤコマンドを発行して指定したＬＢＡのデータを読み出し、ＬＵ２６２を含むディスク群２５２のうちディスク群２５１のＲＥＡＤコマンドを発行したディスクに対応するディスク２８１〜２８５のいずれかにＷＲＩＴＥコマンドを発行してＬＵ２６１に指定したＬＢＡと同じＬＢＡに読み出したデータを書きこむことで実施する。データのコピーは、ＣＯＰＹコマンドを用いてもよい。次に、ミラー再同期サブプログラム２３２は、該当記録位置の更新抑止を解除し（ステップ１００５）、更新／不整合位置管理表２２２の該当する更新ビットに０を設定して更新記録を削除し（ステップ１００６）、ステップ１００１に戻る。
【００３８】
以上が、スナップショット取得／削除時におけるバックアッププログラム１２７とスナップショット管理プログラム２２１の動作である。コンピュータ１００のバックアッププログラム１２７は、ステップ２００３〜ステップ２００４の間でスナップショットを取得したＬＵ２６２の読み出しを行うことができる。
【００３９】
（３）ディスク障害復旧方法
本発明では、障害ディスクを交換して新しくセットしたディスクに対するパリティ再構築を、パリティの冗長性を利用して行うことに代えて、ミラー化された対となるディスクからコピーすることで行う。対となるディスクとは、例えば、図１のディスク２７１〜２７５とディスク２８１〜２８５がこの順番でディスク群を形成していると想定するとディスク２７１とディスク２８１の関係が該当する。
【００４０】
本実施形態では、障害ディスクを交換した後のパリティ再構築について、スナップショット取得／削除動作のどの段階で行ったかにより、ミラーフェーズ、非ミラーフェーズ、再同期化フェーズの３フェーズに分けて説明する。非ミラーフェーズは、ミラー化がされていない図３のステップ３００２開始からステップ３００７終了までとする。再同期化フェーズは、更新されたデータをミラー元ＬＵからミラー先ＬＵにコピーしている図３のステップ３００８開始からステップ３００９終了までとする。ミラーフェーズは、ミラー化されている段階とし、非ミラーフェーズと再同期化フェーズ以外の全範囲とする。
【００４１】
また、各フェーズの間に、ミラー元ＬＵとミラー先ＬＵのどちらのディスクを交換したかについても場合分けする。
【００４２】
なお、障害ディスクを交換した後のパリティ再構築は、ディスクアレイ２００のスナップショット管理プログラム２２１がディスク障害復旧サブプログラム２３３を有効化することによって行い、コンピュータ１００からの指示とは独立して実施することができる。
【００４３】
（３−１）ミラーフェーズ
ミラーフェーズにおけるディスク障害復旧サブプログラム２３３の動作を図５のフローチャートを用いて説明する。ミラーフェーズにおいては、ミラー元ＬＵとミラー先ＬＵの内容が同じであり、ミラー元ＬＵとミラー先ＬＵのどちらのディスクを交換した場合でもディスク障害復旧サブプログラム２３３の動作が同じであるので、ミラー先ＬＵのディスクを交換した場合を例にとる。ここで、障害で交換したディスクを図１のミラー先ＬＵであるディスク群２５２のディスク２８１と想定する。ミラー化されている場合は、ミラー元ＬＵであるディスク群２５１のディスク２７１と同じデータがディスク２８１に格納されることになる。まず、ディスクが交換されると、ディスク障害復旧サブプログラム２３３が、交換したディスク２８１に対応する更新／不整合位置管理表２２２のミラー先不整合ビットをすべて１に設定する（ステップ４００１）。次に、ディスク障害復旧サブプログラム２３３は、更新／不整合位置管理表２２２のミラー先不整合ビットに不整合記録として１があるかどうかを調べる（ステップ４００２）。もし、不整合記録である１がなければディスク２８１の障害復旧が完了しディスク群２５２のパリティは整合性がとれたので処理を終了する（ステップ４００３）。不整合記録があれば、該当記録位置の更新を抑止し（ステップ４００４）、更新／不整合位置管理表２２２のミラー元不整合ビットに不整合記録として１があるかどうかを調べる（ステップ４００５）。もし、不整合記録である１がなければミラー元ＬＵのパリティ整合性はとれているので、該当位置のデータをディスク２７１からディスク２８１にコピーする（ステップ４００７）。不整合記録である１があればミラー元ＬＵも障害復旧中でありパリティの整合性はとれていないので、ディスク２８１と同一ディスク群２５２の他のディスク２８２〜２８５からデータを読み出しパリティ演算によってデータを復元し、ディスク２８１の該当位置に書き込む（ステップ４００６）。ステップ４００７、または、ステップ４００６終了後、ディスク障害復旧サブプログラム２３３は、更新／不整合位置管理表２２２のディスク２８１に該当する不整合ビットを０に設定して不整合記録を削除し（ステップ４００８）、該当記録位置の更新抑止を解除し（ステップ４００９）、ステップ４００２に戻る。
【００４４】
以上が、ミラーフェーズにおけるディスク障害復旧サブプログラム２３３の動作である。
【００４５】
なお、ステップ４００７におけるデータのコピーは、ディスク２７１にＲＥＡＤコマンドを発行して指定したＬＢＡのデータを読み出し、ディスク２８１にＷＲＩＴＥコマンドを発行してディスク２７１に指定したＬＢＡと同じＬＢＡに読み出したデータを書きこむことで実施する。データのコピーは、ＣＯＰＹコマンドを用いてもよい。
【００４６】
スナップショット管理プログラム２２１は、ディスク障害復旧サブプログラム２３３動作中にコンピュータ１００からデータ更新要求が来た場合、ミラー元ＬＵとミラー先ＬＵの両方に反映させるものとし、交換したディスクの不整合ビットを０にする。また、コンピュータ１００からデータ読み出し要求が来た場合は、不整合ビットが０であるＬＵからデータを読み出す。両方のＬＵの不整合ビットが１である場合は、交換したディスク以外の全ディスクからデータを読み出しパリティ演算によって要求されたデータを復元し、コンピュータ１００に送信する。
【００４７】
（３−２）非ミラーフェーズ
非ミラーフェーズにおけるディスク障害復旧サブプログラム２３３の動作を図６のフローチャートを用いて説明する。非ミラーフェーズにおいては、ミラー元ＬＵとミラー先ＬＵの内容は一致していないが、ミラー元ＬＵとミラー先ＬＵのどちらのディスクを交換した場合でもディスク障害復旧サブプログラム２３３の動作が同じであるので、ミラー元ＬＵのディスクを交換した場合を例にとる。ここで、障害で交換したディスクを図１のミラー元ＬＵであるディスク群２５１のディスク２７１と想定する。
【００４８】
まず、ディスクが交換されると、ディスク障害復旧サブプログラム２３３が、交換したディスク２７１に対応する更新／不整合位置管理表２２２のミラー元不整合ビットをすべて１に設定する（ステップ５００１）。次に、ディスク障害復旧サブプログラム２３３は、更新／不整合位置管理表２２２のミラー元不整合ビットに不整合記録として１があるかどうかを調べる（ステップ５００２）。もし、不整合記録である１がなければディスク２７１の障害復旧が完了しディスク群２５１のパリティは整合性がとれたので処理を終了する（ステップ５００３）。不整合記録があれば、該当記録位置の更新を抑止し（ステップ５００４）、更新／不整合位置管理表２２２のミラー先不整合ビットに不整合記録として１があるかどうかを調べる（ステップ５００５）。もし、不整合記録である１があればミラー先ＬＵも障害復旧中でありパリティの整合性はとれていないので、ディスク２７１と同一ディスク群２５１の他のディスク２７２〜２７５からデータを読み出しパリティ演算によってデータを復元し、ディスク２７１の該当位置に書き込む（ステップ５００６）。もし、不整合記録である１がなければ、更新／不整合位置管理表２２２の該当する更新ビットに更新記録として１があるかどうかを調べる（ステップ５００７）。もし、更新記録である１があれば、該当位置のディスク２７１とディスク２８１のデータは異なるので、ディスク障害復旧サブプログラム２３３はディスク２７１と同一ディスク群２５１の他のディスク２７２〜２７５からデータを読み出しパリティ演算によってデータを復元し、ディスク２７１の該当位置に書き込む（ステップ５００６）。もし、更新記録である１がなければ、該当位置のディスク２７１とディスク２８１のデータは同一となるべきなので、該当位置のデータをディスク２８１からディスク２７１にコピーする（ステップ５００８）。
【００４９】
ステップ５００６、または、ステップ５００８終了後、ディスク障害復旧サブプログラム２３３は、更新／不整合位置管理表２２２のディスク２７１に該当する不整合ビットを０に設定して不整合記録を削除し（ステップ５００９）、該当記録位置の更新抑止を解除し（ステップ５０１０）、ステップ５００２に戻る。以上が、非ミラーフェーズにおけるディスク障害復旧サブプログラム２３３の動作である。
【００５０】
なお、ステップ５００８におけるデータのコピーは、ディスク２８１にＲＥＡＤコマンドを発行して指定したＬＢＡのデータを読み出し、ディスク２７１にＷＲＩＴＥコマンドを発行してディスク２８１に指定したＬＢＡと同じＬＢＡに読み出したデータを書きこむことで実施する。データのコピーは、ＣＯＰＹコマンドを用いてもよい。
【００５１】
スナップショット管理プログラム２２１は、ディスク障害復旧サブプログラム２３３動作中にコンピュータ１００からデータ読み出し要求が来た場合、通常はミラー元ＬＵからデータを読み出すが、更新ビットが０、ミラー先不整合ビットが０であるＬＢＡセットに関してはミラー先ＬＵから読み出してもよい。
【００５２】
（３−３）再同期化フェーズ（ミラー先ＬＵ復旧）
再同期化フェーズにおけるミラー先ＬＵに関わるディスク障害復旧サブプログラム２３３の動作を図７のフローチャートを用いて説明する。ここで、障害で交換したディスクを図１のミラー先ＬＵであるディスク群２５２のディスク２８１と想定する。
【００５３】
まず、ディスクが交換されると、ディスク障害復旧サブプログラム２３３が、交換したディスク２８１に対応する更新／不整合位置管理表２２２のミラー先不整合ビットをすべて１に設定する（ステップ６００１）。次に、ディスク障害復旧サブプログラム２３３は、更新／不整合位置管理表２２２のミラー先不整合ビットに不整合記録として１があるかどうかを調べる（ステップ６００２）。もし、不整合記録である１がなければディスク２８１の障害復旧が完了しディスク群２５２のパリティは整合性がとれたので処理を終了する（ステップ６００３）。不整合記録があれば、該当記録位置の更新を抑止し（ステップ６００４）、更新／不整合位置管理表２２２のミラー元不整合ビットに不整合記録として１があるかどうかを調べる（ステップ６００５）。もし、不整合記録である１がなければミラー元ＬＵのパリティ整合性はとれているので、該当位置のデータをディスク２７１からディスク２８１にコピーし（ステップ６００７）、更新／不整合位置管理表２２２の該当する更新ビットに０を設定して更新の有無にかかわらず更新記録を削除する（ステップ６００８）。もし、不整合記録である１があればミラー元ＬＵも障害復旧中でありパリティの整合性はとれていないので、ディスク２８１と同一ディスク群２５２の他のディスク２８２〜２８５からデータを読み出しパリティ演算によってデータを復元し、ディスク２８１の該当位置に書き込む（ステップ６００６）。ステップ６００８、または、ステップ６００６終了後、ディスク障害復旧サブプログラム２３３は、更新／不整合位置管理表２２２のディスク２８１に該当する不整合ビットを０に設定して不整合記録を削除し（ステップ６００６）、該当記録位置の更新抑止を解除し（ステップ６０１０）、ステップ６００２に戻る。
【００５４】
以上が、再同期化フェーズにおけるミラー先ＬＵに関わるディスク障害復旧サブプログラム２３３の動作である。
【００５５】
なお、ステップ６００７におけるデータのコピーは、ディスク２７１にＲＥＡＤコマンドを発行して指定したＬＢＡのデータを読み出し、ディスク２８１にＷＲＩＴＥコマンドを発行してディスク２７１に指定したＬＢＡと同じＬＢＡに読み出したデータを書きこむことで実施する。データのコピーは、ＣＯＰＹコマンドを用いてもよい。
【００５６】
（３−４）再同期化フェーズ（ミラー元ＬＵ復旧）
再同期化フェーズにおけるミラー元ＬＵに関わるディスク障害復旧サブプログラム２３３の動作を図８のフローチャートを用いて説明する。ここで、障害で交換したディスクを図１のミラー元ＬＵであるディスク群２５１のディスク２７１と想定する。
【００５７】
まず、ディスクが交換されると、ディスク障害復旧サブプログラム２３３が、交換したディスク２７１に対応する更新／不整合位置管理表２２２のミラー元不整合ビットをすべて１に設定する（ステップ７００１）。次に、ディスク障害復旧サブプログラム２３３は、更新／不整合位置管理表２２２のミラー元不整合ビットに不整合記録として１があるかどうかを調べる（ステップ７００２）。もし、不整合記録である１がなければディスク２７１の障害復旧が完了しディスク群２５１のパリティは整合性がとれたので処理を終了する（ステップ７００３）。不整合記録があれば、該当記録位置の更新を抑止し（ステップ７００４）、更新／不整合位置管理表２２２のミラー先不整合ビットに不整合記録として１があるかどうかを調べる（ステップ７００５）。もし、不整合記録である１があればミラー先ＬＵも障害復旧中でありパリティの整合性はとれていないので、ディスク２７１と同一ディスク群２５１の他のディスク２７２〜２７５からデータを読み出しパリティ演算によってデータを復元し、ディスク２７１の該当位置に書き込む（ステップ７００６）。もし、不整合記録である１がなければ、更新／不整合位置管理表２２２の該当する更新ビットに更新記録として１があるかどうかを調べる（ステップ７００７）。もし、更新記録である１があれば、該当位置のディスク２７１とディスク２８１のデータは異なるので、ディスク障害復旧サブプログラム２３３はディスク２７１と同一ディスク群２５１の他のディスク２７２〜２７５からデータを読み出しパリティ演算によってデータを復元し、ディスク２７１の該当位置に書き込む（ステップ７００６）。もし、更新記録である１がなければ、該当位置のディスク２７１とディスク２８１のデータは同一でよいので、該当位置のデータをディスク２８１からディスク２７１にコピーする（ステップ７００８）。
【００５８】
ステップ７００６、または、ステップ７００８終了後、ディスク障害復旧サブプログラム２３３は、更新／不整合位置管理表２２２のディスク２７１に該当する不整合ビットを０に設定して不整合記録を削除し（ステップ７００９）、該当記録位置の更新抑止を解除し（ステップ７０１０）、ステップ７００２に戻る。以上が、再同期化フェーズにおけるミラー元ＬＵに関わるディスク障害復旧サブプログラム２３３の動作である。
【００５９】
なお、ステップ７００８におけるデータのコピーは、ディスク２８１にＲＥＡＤコマンドを発行して指定したＬＢＡのデータを読み出し、ディスク２７１にＷＲＩＴＥコマンドを発行してディスク２８１に指定したＬＢＡと同じＬＢＡに読み出したデータを書きこむことで実施する。データのコピーは、ＣＯＰＹコマンドを用いてもよい。
【００６０】
スナップショット管理プログラム２２１は、ディスク障害復旧サブプログラム２３３動作中にコンピュータ１００からデータ読み出し要求が来た場合、通常はミラー元ＬＵからデータを読み出すが、更新ビットが０、ミラー先不整合ビットが０であるＬＢＡセットに関してはミラー先ＬＵから読み出してもよい。
【００６１】
（４）データ読み出しと書きこみ、および、スナップショット読み出しの際のコンピュータ動作
まず、コンピュータ１００が、ディスクアレイ２００にあるＬＵ２６１のデータにアクセスする場合のデータベースプログラム１２６の動作を説明する。データベースプログラム１２６は、スナップショット取得の有無に関係なく、同じ動作を行う。
【００６２】
データベースプログラム１２６がＬＵ２６１のデータを読み出す場合、データベースプログラム１２６はディスクアレイ２００に対し、ＬＵ２６１のデータを読み出すＲＥＡＤコマンドを発行する。最後に、データベースプログラム１２６は、ディスクアレイ２００からデータとステータスを受信し動作を終了する。また、データベースプログラム１２６がＬＵ２６１にデータを書きこむ場合、データベースプログラム１２６はディスクアレイ２００に対し、ＬＵ２６１にデータを書きこむＷＲＩＴＥコマンドを発行し、データを送信する。最後に、データベースプログラム１２６は、ディスクアレイ２００からステータスを受信し動作を終了する。
【００６３】
次に、コンピュータ１００が、ディスクアレイ２００にあるＬＵ２６１のスナップショットを読み出す場合のバックアッププログラム１２７の動作を説明する。
【００６４】
バックアッププログラム１２７がＬＵ２６１のスナップショットを読み出す場合、バックアッププログラム１２７はディスクアレイ２００に対し、ＬＵ２６１のミラー先ＬＵであるＬＵ２６２のデータを読み出すＲＥＡＤコマンドを発行する。最後に、バックアッププログラム１２７は、ディスクアレイ２００からデータとステータスを受信し動作を終了する。
【００６５】
（５）データ読み出しと書きこみ、および、スナップショット読み出しの際のディスクアレイ動作
まず、コンピュータ１００が、ディスクアレイ２００にあるＬＵ２６１のデータにアクセスする場合のスナップショット管理プログラム２２１の動作を説明する。
【００６６】
コンピュータ１００がＬＵ２６１のデータを読み出す場合、スナップショット管理プログラム２２１がＬＵ２６１に対するＲＥＡＤコマンドを受信する。次に、ＬＵミラーサブプログラム２３１が有効で、かつ、ミラー再同期サブプログラム２３２による更新部分のコピーが終了していれば、ＬＵ２６１、もしくは、ミラー先ＬＵであるＬＵ２６２からデータを読み出す。そうでなければ、ＬＵ２６１からデータを読み出す。最後に、読み出したデータとステータスをコンピュータ１００に送信する。ＬＵ２６１とミラー先ＬＵであるＬＵ２６２の内容が一致している場合は、両者のいずれかからデータを読み出すことにより負荷を分散させることができる。
【００６７】
コンピュータ１００がＬＵ２６１にデータを書きこみ記憶内容を更新する場合、スナップショット管理プログラム２２１がＬＵ２６１に対するＷＲＩＴＥコマンドとデータを受信する。次に、ＬＵミラーサブプログラム２３１が有効であればＬＵ２６１とミラー先ＬＵであるＬＵ２６２にデータを書きこみ、無効であればＬＵ２６１にデータを書きこむ。次に、非ミラー時更新監視サブプログラム２３４と非ミラー時更新位置管理サブプログラム２３５が有効であれば、ＬＵ２６１の更新／不整合位置管理表２２２に対して更新したＬＢＡを含むＬＢＡセットの更新ビットを１に設定し、無効であれば何もしない。最後に、ステータスをコンピュータ１００に送信する。
【００６８】
次に、コンピュータ１００が、ディスクアレイ２００にあるＬＵ２６１のスナップショットを読み出す場合のスナップショット管理プログラム２２１の動作を説明する。
【００６９】
コンピュータ１００がＬＵ２６１のスナップショットを読み出す場合、スナップショット管理プログラム２２１がＬＵ２６１のミラー先ＬＵであるＬＵ２６２に対するＲＥＡＤコマンドを受信する。次に、スナップショット管理プログラム２２１は、ミラー先ＬＵであるＬＵ２６２からデータを読み出す。最後に、読み出したデータとステータスをコンピュータ１００に送信する。
【００７０】
なお、ミラー再同期サブプログラム２３２による更新部分のコピー中は、コピー処理とコンピュータ１００によるＬＵ２６１へのデータアクセス処理が同じＬＵ２６１に集中するため、データアクセス性能が低下する。
【００７１】
（６）効果
本実施形態によれば、スナップショット取得のために二重化運用しているディスクアレイにおいて、ディスク交換後のパリティ再構築に関わるディスクアクセス回数を削減することで、通常アクセス性能の低下を抑止することができるという効果がある。
【００７２】
また、本実施形態によれば、二重化を停止している期間におけるディスク交換後のパリティ再構築時間を短縮することで、ミラー再同期化中の更新データのコピー量を削減し、性能が低下するミラー再同期化時間を短縮できるという効果がある。
【００７３】
たとえば、ＲＡＩＤ５の５Ｄ＋１Ｐの構成を想定し、ミラーフェーズにおいてディスク障害を復旧する場合、パリティの冗長性によるディスク復旧をした場合、４回のディスク読み出しと１回のディスク書き込みが発生する。本発明を適用することで、１回のディスク読み出しと１回のディスク書き込みにすることができ、通常のアクセス性能の低下を抑止できる。非ミラーフェーズにおいても同様のディスクアクセス回数の削減効果が期待でき、スナップショットを取得してバックアップ等をとる際の読み出し性能低下を抑止でき、読み出し時間の増加も抑止できることから二重化停止時間、および、性能が低下するミラー再同期化時間を短縮できる。
【００７４】
また、ディスク交換後のパリティ再構築に関わるディスクアクセス回数を削減することで、パリティグループを形成するＲＡＩＤ５などのディスク構成を表すｎＤ＋１Ｐでのデータドライブ数ｎの増加による性能低下を抑止できるという効果がある。ｎＤ＋１Ｐの場合、パリティの冗長性によるディスク復旧をした場合、ｎ回のディスク読み出しと１回のディスク書き込みが発生する。本発明を適用することで、１回のディスク読み出しと１回のディスク書き込みにすることができる。
【００７５】
なお、本発明ではコンピュータ１００とディスクアレイ２００を接続するインターフェースをＳＣＳＩバス３００としたが、ＦｉｂｒｅＣｈａｎｎｅｌ等の他のインターフェースであってもよい。
【００７６】
また、本実施形態では、スナップショット取得のためミラー元ＬＵとミラー先ＬＵで二重化しているが、ミラー先ＬＵを複数設けた多重ミラーにおいても本発明は適用可能である。この場合、更新／不整合位置管理表２２２のミラー先不整合ビットをミラー先ＬＵ分だけ設け、ディスク障害復旧サブプログラム２３３がそれぞれのミラー先ＬＵとミラー元ＬＵに対し二重化の場合と同様の動作をし、ＬＵミラーサブプログラム２３１がミラー元
ＬＵに対するアクセスを複数のミラー先ＬＵに多重化する動作をすればよい。
【００７７】
【発明の効果】
以上述べたように、本発明によれば、スナップショット取得のために二重化運用しているディスクアレイにおいて、ディスク交換後のパリティ再構築に関わるディスクアクセス回数を削減することで、通常アクセス性能の低下を抑止することができるという効果がある。
【００７８】
また、本実施形態によれば、二重化を停止している期間におけるディスク交換後のパリティ再構築時間を短縮することで、ミラー再同期化中の更新データのコピー量を削減し、性能が低下するミラー再同期化時間を短縮できるという効果がある。
【００７９】
また、ディスク交換後のパリティ再構築に関わるディスクアクセス回数を削減することで、パリティグループを形成するＲＡＩＤ５などのディスク構成を表すｎＤ＋１Ｐでのデータドライブ数ｎの増加による性能低下を抑止できるという効果がある。
【図面の簡単な説明】
【図１】第１の実施形態におけるシステム構成図である。
【図２】第１の実施形態における更新／不整合位置管理表の説明図である。
【図３】第１の実施形態におけるスナップショット取得／削除フローである。
【図４】第１の実施形態におけるミラー再同期サブプログラムの動作フローである。
【図５】第１の実施形態におけるミラーフェーズのディスク障害復旧サブプログラム動作フローである。
【図６】第１の実施形態における非ミラーフェーズのディスク障害復旧サブプログラム動作フローである。
【図７】第１の実施形態における再同期化フェーズのミラー先ＬＵ復旧に関わるディスク障害復旧サブプログラム動作フローである。
【図８】第１の実施形態における再同期化フェーズのミラー元ＬＵ復旧に関わるディスク障害復旧サブプログラム動作フローである。
【符号の説明】
１００…コンピュータ、２００…ディスクアレイ、２２１…スナップショット管理プログラム、２２２…更新／不整合位置管理表、２３３…ディスク障害復旧サブプログラム、２７１〜２７５、２８１〜２８５…ディスク。
【図１】
0003832223.tif 000002
【図２】
0003832223.tif 000003
【図３】
0003832223.tif 000004
【図４】
0003832223.tif 000005
【図５】
0003832223.tif 000006
【図６】
0003832223.tif 000007
【図７】
0003832223.tif 000008
【図８】
0003832223.tif 000009