(57)【特許請求の範囲】
【請求項１】
ホスト計算機と接続され、第１の論理ボリュームを有する第１のストレージ装置と、
前記ホスト計算機と前記第１のストレージ装置と接続され、第２の論理ボリュームを有する第２のストレージ装置と、
を備えるストレージシステムであって、
前記ストレージシステムは、
前記第１の論理ボリュームと前記第２の論理ボリュームとが、前記第１の論理ボリュームをプライマリボリュームとし、前記第１の論理ボリュームのデータを前記第２の論理ボリュームに二重化するＨｉｇｈ  Ａｖａｉｌａｂｉｌｉｔｙペアに設定されると、
前記第１のストレージ装置または前記第２のストレージ装置のいずれでも仮想識別子で識別される仮想ボリュームへのアクセス要求を受け付けられるよう、前記第１の論理ボリュームと前記第２の論理ボリュームとに前記仮想識別子を対応付け、
前記ストレージシステムは、前記仮想ボリュームへのライト要求を受信すると、前記第１のストレージ装置または第２のストレージ装置いずれが当該ライト要求を受信した場合にも、
当該ライト要求にかかる前記第１の論理ボリューム内の記憶領域の排他ロックを確保し、当該ライト要求にかかるデータを前記第１の論理ボリュームに書き込み、
前記第１の論理ボリュームへのデータの書き込みが完了すると、当該ライト要求にかかるデータを前記第２の論理ボリュームに書き込み、
前記第２の論理ボリュームへのデータの書き込みが完了すると、前記ホスト計算機に完了応答を送信し、前記第１の論理ボリューム内の記憶領域の前記排他ロックを解除し、
前記第１のストレージ装置は、
前記仮想ボリュームへのリード要求を受信すると、当該リード要求に係る第１の論理ボリュームの記憶領域の排他ロックが確保されているか判定し、
排他ロックが確保されていない場合、前記第１の論理ボリュームから当該リード要求にかかる記憶領域のデータを読み出し、前記ホスト計算機に送信し、
排他ロックが確保されている場合、当該前記排他ロックの解除を待ち、前記第１の論理ボリュームから当該リード要求にかかる記憶領域のデータを読み出し、前記ホスト計算機に送信し、
前記第２のストレージ装置は、
前記仮想ボリュームへのリード要求を受信すると、排他ロックが確保されているか否かの判定を行わず、当該リード要求に係る前記第２の論理ボリュームの記憶領域のデータを読み出し、前記ホスト計算機に送信することを特徴とするストレージシステム。
【請求項２】
前記第２のストレージ装置が前記仮想ボリュームへの前記ライト要求を受信すると、
前記第２のストレージ装置は、当該ライト要求にかかるライトデータを前記第１のストレージ装置に送信し、
前記第１のストレージ装置は、当該ライト要求に係る前記第１の論理ボリューム内の記憶領域の排他ロックを確保し、当該ライトデータを前記第１の論理ボリュームに書き込み、前記第２のストレージ装置に完了応答を送信し、
前記第２のストレージ装置は、当該完了応答を受領すると、当該ライトデータを前記第２の論理ボリュームに書き込み、前記第１のストレージ装置に排他解除コマンドを送信し、前記ホスト計算機に完了応答を送信し、
前記第１のストレージ装置は、当該排他解除コマンドを受領すると、当該ライト要求に係る前記第１の論理ボリューム内の記憶領域の前記排他ロックを解除することを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記第２のストレージ装置は、
バッファを備えており、
前記仮想ボリュームへの前記ライト要求を受信すると、当該ライト要求にかかるライトデータを前記バッファに格納し、
前記完了応答を受領すると、当該ライトデータを前記バッファから前記第２の論理ボリュームに書き込むことを特徴とする請求項２に記載のストレージシステム。
【請求項４】
前記第１のストレージ装置が前記仮想ボリュームへの前記ライト要求を受信すると、
前記第１のストレージ装置は、当該ライト要求にかかる前記第１の論理ボリューム内の記憶領域の排他ロックを確保し、当該ライト要求にかかるデータを前記第１の論理ボリュームに書き込み、当該ライト要求にかかるライトデータを前記第２のストレージ装置に送信し、
前記第２のストレージ装置は、前記ライトデータを前記第２の論理ボリュームに書き込み、前記第１のストレージ装置に完了応答を送信し、
前記第１のストレージ装置は、当該完了応答を受領すると、前記ホスト計算機に完了応答を送信し、前記第１の論理ボリューム内の記憶領域の前記排他ロックを解除することを特徴とする請求項１乃至３いずれかに記載のストレージシステム。
【請求項５】
前記第２の論理ボリュームに障害が発生した場合、前記第２のストレージ装置は、
前記仮想ボリュームへのリード要求を受信すると、前記第１のストレージ装置から当該リード要求に係るデータを読み出し、前記ホスト計算機に送信することを特徴とする請求項１乃至４いずれかに記載のストレージシステム。
【請求項６】
前記第１のストレージ装置は第１のプロセッサと、第２のプロセッサと、前記第１のプロセッサと前記第２のプロセッサとからアクセス可能な共有メモリと、を備え、
前記共有メモリは、対応する前記第２の論理ボリュームの記憶領域へのデータの書き込みが完了していない前記第１の論理ボリュームの記憶領域を二重書き中の記憶領域として管理する管理情報を有し、
前記第１の論理ボリュームへの入出力を行う前記第１のプロセッサに障害が発生した場合、
前記第２のプロセッサは、
前記管理情報を参照し、
前記第１の論理ボリュームの記憶領域のうち二重書き中である記憶領域を特定し、
二重書き中の前記第１の論理ボリュームの記憶領域に格納されるデータを第２のストレージ装置に送信し、
前記第２のストレージ装置から前記二重書き中の前記第１の論理ボリュームの記憶領域に格納されるデータの前記第２の論理ボリュームへのライトの完了応答を受領し、
前記ホスト計算機からの要求に基づく前記第１の論理ボリュームへの入出力処理を実行することを特徴とする請求項１乃至５いずれかに記載のストレージシステム。
【請求項７】
ホスト計算機と接続され、第１の論理ボリュームを有する第１のストレージ装置と、
前記ホスト計算機と前記第１のストレージ装置と接続され、第２の論理ボリュームを有する第２のストレージ装置と、
を備えるストレージシステムの制御方法であって、
前記第１の論理ボリュームと前記第２の論理ボリュームとが、前記第１の論理ボリュームをプライマリボリュームとし、前記第１の論理ボリュームのデータを前記第２の論理ボリュームに二重化するＨｉｇｈ  Ａｖａｉｌａｂｉｌｉｔｙペアに設定されると、
前記第１のストレージ装置または前記第２のストレージ装置のいずれでも仮想識別子で識別される仮想ボリュームへのアクセス要求を受け付けられるよう、前記第１の論理ボリュームと前記第２の論理ボリュームとに前記仮想識別子を対応付け、
前記仮想ボリュームへのライト要求を受信すると、前記第１のストレージ装置または第２のストレージ装置いずれが当該ライト要求を受信した場合にも、
当該ライト要求にかかる前記第１の論理ボリューム内の記憶領域の排他ロックを確保し、当該ライト要求にかかるデータを前記第１の論理ボリュームに書き込み、
前記第１の論理ボリュームへのデータの書き込みが完了すると、当該ライト要求にかかるデータを前記第２の論理ボリュームに書き込み、
前記第２の論理ボリュームへのデータの書き込みが完了すると、前記ホスト計算機に完了応答を送信し、前記第１の論理ボリューム内の記憶領域の前記排他ロックを解除し、
前記第１のストレージ装置が前記仮想ボリュームへのリード要求を受信すると、当該リード要求に係る第１の論理ボリュームの記憶領域の排他ロックが確保されているか判定し、
排他ロックが確保されていない場合、前記第１の論理ボリュームから当該リード要求にかかる記憶領域のデータを読み出し、前記ホスト計算機に送信し、
排他ロックが確保されている場合、前記排他ロックの解除を待ち、前記第１の論理ボリュームから当該リード要求にかかる記憶領域のデータを読み出し、前記ホスト計算機に送信し、
前記第２のストレージ装置が前記仮想ボリュームへのリード要求を受信すると、排他ロックが確保されているか否かの判定を行わず、当該リード要求に係る前記第２の論理ボリュームの記憶領域のデータを読み出し、前記ホスト計算機に送信することを特徴とするストレージシステムの制御方法。
【請求項８】
前記第２のストレージ装置が前記仮想ボリュームへの前記ライト要求を受信すると、
当該ライト要求にかかるライトデータを前記第２のストレージ装置から前記第１のストレージ装置に送信し、
当該ライト要求に係る前記第１の論理ボリューム内の記憶領域の排他ロックを確保し、当該ライトデータを前記第１の論理ボリュームに書き込み、前記第１のストレージ装置から前記第２のストレージ装置に完了応答を送信し、
前記第２のストレージ装置が当該完了応答を受領すると、当該ライトデータを前記第２の論理ボリュームに書き込み、前記第２のストレージ装置から前記第１のストレージ装置に排他解除コマンドを送信し、前記ホスト計算機に完了応答を送信し、
前記第１のストレージ装置が当該排他解除コマンドを受領すると、当該ライト要求に係る前記第１の論理ボリューム内の記憶領域の前記排他ロックを解除することを特徴とする請求項７に記載のストレージシステムの制御方法。
【請求項９】
前記第２のストレージ装置は、バッファを備えており、
前記第２のストレージ装置が前記仮想ボリュームへの前記ライト要求を受信すると、当該ライト要求にかかるライトデータを前記バッファに格納し、
前記第２のストレージ装置が前記完了応答を受領すると、当該ライトデータを前記バッファから前記第２の論理ボリュームに書き込むことを特徴とする請求項８に記載のストレージシステムの制御方法。
【請求項１０】
前記第１のストレージ装置が前記仮想ボリュームへの前記ライト要求を受信すると、
当該ライト要求にかかる前記第１の論理ボリューム内の記憶領域の排他ロックを確保し、当該ライト要求にかかるデータを前記第１の論理ボリュームに書き込み、当該ライト要求にかかるライトデータを前記第１のストレージ装置から前記第２のストレージ装置に送信し、
前記ライトデータを前記第２の論理ボリュームに書き込み、前記第２のストレージ装置から前記第１のストレージ装置に完了応答を送信し、
前記第１のストレージ装置が当該完了応答を受領すると、前記ホスト計算機に完了応答を送信し、前記第１の論理ボリューム内の記憶領域の前記排他ロックを解除することを特徴とする請求項７乃至９いずれかに記載のストレージシステムの制御方法。
【請求項１１】
前記第２の論理ボリュームに障害が発生した場合、
前記第２のストレージ装置が前記仮想ボリュームへのリード要求を受信すると、前記第１のストレージ装置から当該リード要求に係るデータを読み出し、前記ホスト計算機に送信することを特徴とする請求項７乃至１０いずれかに記載のストレージシステムの制御方法。
【請求項１２】
前記第１のストレージ装置は第１のプロセッサと、第２のプロセッサと、前記第１のプロセッサと前記第２のプロセッサとからアクセス可能な共有メモリと、を備え、
前記共有メモリは、対応する前記第２の論理ボリュームの記憶領域へのデータの書き込みが完了していない前記第１の論理ボリュームの記憶領域を二重書き中の記憶領域として管理する管理情報を有し、
前記第１の論理ボリュームへの入出力を行う前記第１のプロセッサに障害が発生した場合、
前記管理情報を参照し、
前記第２のプロセッサは、
前記第１の論理ボリュームの記憶領域のうち二重書き中である記憶領域を特定し、
二重書き中の前記第１の論理ボリュームの記憶領域に格納されるデータを第２のストレージ装置に送信し、
前記第２のストレージ装置から前記二重書き中の前記第１の論理ボリュームの記憶領域に格納されるデータの前記第２の論理ボリュームへのライトの完了応答を受領し、
前記ホスト計算機からの要求に基づく前記第１の論理ボリュームへの入出力処理を実行することを特徴とする請求項７乃至１１いずれかに記載のストレージシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関する。
【背景技術】
【０００２】
近年、ビックデータ解析の普及などにより情報の重要性はさらに高まっており、重要な情報を保護するためのディザスタリカバリの重要性は高まっている。ディザスタリカバリ技術として特許文献１に、通常運用時にはメインサイトのストレージ装置のみにホスト計算機からのリード・ライトを受け付け、リモートサイトのストレージ装置にコピーし、メインサイトの障害発生時にリモートサイトへアクセスするように切り替える技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２００９／０２７１５８２号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ビックデータ解析などデータ量の増大は著しく、その結果システムは大規模化・複雑化、装置点数増加し、バックアップサイトのコストも増加しており、バックアップサイトのリソースの有効活用が望まれる。特許文献１に開示されている技術は通常運用時はメインサイトのストレージ装置のみでリード・ライトを受信するため、リモートサイトのストレージ装置にアクセスできず、リソースを十分に有効活用できない。
【課題を解決するための手段】
【０００５】
上記課題を解決するために、第１のストレージ装置及び第２のストレージ装置を備えるストレージシステムであって、第１のストレージ装置は第１の論理ボリュームを提供し、第２のストレージ装置は第１の論理ボリュームとペア構成を組む第２の論理ボリュームを提供し、第１のストレージ装置は第１の論理ボリュームの記憶領域のうち二重書き中である記憶領域を管理し、第１の論理ボリューム又は第２の論理ボリュームへのライトデータをホスト計算機から受領した場合、第１の論理ボリューム、第２の論理ボリュームの順にライトデータを二重書きし、第１のストレージ装置は第１の論理ボリュームへのリード要求をホスト計算機から受領した場合、リード要求のあった記憶領域が二重書き中か判断し、判断の結果二重書き中の場合、規定時間経過後リード要求のあった記憶領域が二重書き中か判断を再度おこない、判断の結果二重書き中でない場合、第１の論理ボリュームからリード要求のあったデータを読み出してホスト計算機に応答し、第２のストレージ装置は第２の論理ボリュームへのリード要求をホスト計算機から受領した場合、第２の論理ボリュームからリード要求のあったデータを読み出してホスト計算機に応答するストレージシステムを提供する。
【発明の効果】
【０００６】
本発明の一態様によれば、リモートサイトのストレージ装置でリード／ライトを受信できるため、リモートサイトのリソースを有効に活用する事ができる。
【図面の簡単な説明】
【０００７】
【図１Ａ】ＰＶＯＬにライト指示が入った場合の処理の流れの概要を示している。
【図１Ｂ】ＰＶＯＬ及びＳＶＯＬにリード指示が入った場合の処理の流れの概要を示している。
【図２】本実施形態における情報システムを含む計算機システムの構成例を示している。
【図３】ホスト計算機及びストレージ装置のハードウェア構成例を模式的に示している。
【図４】ストレージ装置がホスト計算機に提供する仮想構成例を示している。
【図５】ストレージ装置のＣＭＰＫの共有メモリ内に格納されている情報を示している。
【図６】ストレージ装置のＭＰＰＫのローカルメモリ内に格納されている情報を示している。
【図７】ＶＯＬマッピングテーブルの構成例を示している。
【図８】ＨＡボリュームペア管理テーブルの構成例を示している。
【図９】ＬＵパス管理テーブルの構成例を示している。
【図１０】ＶＯＬ管理テーブルの構成例を示している。
【図１１】ＰＧ管理テーブルの構成例を示している。
【図１２】キャッシュスロット管理テーブルの構成例を示している。
【図１３】ＪＯＢ管理テーブルの構成例を示している。
【図１４】ホスト計算機に対して、仮想ストレージ装置及び仮想ボリュームの情報を提供する方法のシーケンスを示している。
【図１５】ホスト計算機からＰＶＯＬへのライト処理のシーケンスを示している。
【図１６】ホスト計算機からＳＶＯＬへのライト処理のシーケンスを示している。
【図１７】ホスト計算機からのライトコマンドに対するＭＤＫＣ及びＲＤＫＣの処理のフローチャートを示している。
【図１８】ＭＤＫＣとＲＤＫＣとの間のライトコマンドに対する、ＭＤＫＣとＲＤＫＣの処理のフローチャートを示している。
【図１９】ホスト計算機からＰＶＯＬへのリードコマンドに対する処理のシーケンスを示している。
【図２０】ホスト計算機からＳＶＯＬへのリードコマンドに対する処理のシーケンスを示している。
【図２１】ホスト計算機からのリードコマンドに対応するＭＤＫＣ１０Ｍ及びＲＤＫＣ１Ｒの処理のフローチャートを示している。
【図２２】ＨＡボリュームペアのペア状態と、ＰＶＯＬ及びＳＶＯＬへのＩ／Ｏアクセスにおける排他種別との関係を示している。
【図２３】承継ＭＰＰＫが、ＳＶＯＬへのライトコマンドを送信する処理のフローチャートである。
【図２４】ライトデータと共に排他ロック解除コマンドを送信するシーケンスを示している。
【図２５】ＲＤＫＣ１０ＲによるＪＯＢ排他ロックを含む、ホスト計算機からＰＶＯＬへのライト処理のシーケンスを示している。
【図２６】ＲＤＫＣによるＪＯＢ排他ロックを含む、ホスト計算機からＳＶＯＬへのライト処理のシーケンスを示している。
【図２７】図２５及び図２６のシーケンスに対応する、ホスト計算機からのライトコマンドに対するＭＤＫＣ及びＲＤＫＣの処理のフローチャートを示している。
【図２８】図２５及び図２６のシーケンスに対応する、ＭＤＫＣ、ＲＤＫＣ間のライトコマンドに対するＭＤＫＣ及びＲＤＫＣの処理のフローチャートを示している。
【発明を実施するための形態】
【０００８】
以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成については同一の参照符号が付されている。
【０００９】
図１Ａ及び図１Ｂは本実施形態の概要を示す図である。図１Ａ及び図１Ｂに開示される構成は、ホスト計算機１８０Ａ、ホスト計算機１８０Ｂ、ストレージ装置１０Ａ及びストレージ装置１０Ｂからなり、ストレージ装置１０Ａ及びストレージ装置１０Ｂがホスト計算機１８０Ａ及びホスト計算機１８０Ｂに対して仮想ストレージ装置１５を提供している。
【００１０】
ストレージ装置１０Ａのボリュームであるボリューム１６１Ａ及び、ストレージ装置１０Ｂのボリュームであるボリューム１６１Ｂは同一のデータが格納され、ホストに対して同じＩＤを示し、仮想ストレージ装置１５の一つの仮想ボリューム１５１として提供されている。なお、以下において「仮想」と明示されない構成要素は、特に言及のない場合、実構成要素である。
【００１１】
ホスト計算機１８０Ａ及び１８０Ｂはひとつの仮想ボリューム１５１にリード／ライト指示を送信するが、実際にはボリューム１６１Ａ及びボリューム１６１Ｂいずれにも前記指示が送られる可能性がある。このようなボリューム１６１Ａとボリューム１６１ＢのペアをＡｃｔｉｖｅ−Ａｃｔｉｖｅ型のるＨｉｇｈ  Ａｖａｉｌａｂｉｌｉｔｙ（ＨＡ）ボリュームペアやＨＡペアと呼び、図１Ａ及び図１ＢのようにＨＡペア含む構成をＨＡ構成と呼ぶ。
【００１２】
以下の説明において、ＨＡ構成及びＨＡペアは、Ａｃｔｉｖｅ−Ａｃｔｉｖｅ型のＨＡ構成及びＨＡペアを意味する。ＨＡペアは、Ｐｒｉｍａｒｙ  Ｖｏｌｕｍｅ（ＰＶＯＬ）とＳｅｃｏｎｄａｒｙ  Ｖｏｌｕｍｅ（ＳＶＯＬ）とで構成され、ここではボリューム１６１ＡをＰＶＯＬ、ボリューム１６１ＢをＳＶＯＬとする。また、ＰＶＯＬを提供するストレージ装置１０ＡをＭＤＫＣ（Ｍａｉｎ  ＤｉｓＫ  Ｃｏｎｔｏｌｌｅｒ）と呼び、ＳＶＯＬを提供するストレージ装置１０ＢをＲＤＫＣ（Ｒｅｍｏｔｅ  ＤｉｓＫ  Ｃｏｎｔｏｌｌｅｒ）と呼ぶ。
【００１３】
なお、一つのストレージ装置が、異なるＨＡボリュームペアのＰＶＯＬとＳＶＯＬとを含むこともできる。つまり、１台のストレージ装置は、各ＨＡボリュームペアにおけるボリューム種別に応じて、ＭＤＫＣ及びＲＤＫＣとして機能する。以下図１Ａ及び図２Ｂを用いて、ホストからＰＶＯＬ及びＳＶＯＬにライト指示及びリード指示が発行された際の処理の概要について説明する。なお、ボリュームへのデータの書き込み及び読み出しとは、キャッシュ又は記憶ドライブへの書き込み及び読み出しである。
【００１４】
図１Ａはホスト計算機１８０ＡからＰＶＯＬであるボリューム１６１Ａにライト指示が入った場合の処理の流れの概要である。
【００１５】
Ｉ．ホスト計算機１８０Ａからのライト指示に伴うデータ転送を受けたストレージ装置１０Ａが受信する。ＩＩ．ストレージ装置１０Ａはボリューム１６１Ａのライト先アドレスの排他を取得し、ボリューム１６１Ａにライトする。ＩＩＩ．ストレージ装置１０ＡはＳＶＯＬであるボリューム１６１Ｂにデータを格納させるために、ストレージ装置１０Ｂにライト命令及びデータを転送する。
【００１６】
ＩＶ．ライト命令及びデータを受信したストレージ装置１０Ｂはボリューム１６１Ｂにデータを格納する。Ｖ．ストレージ装置１０Ｂは、ライトの完了報告をストレージ装置１０Ａに送信する。ＶＩ．ストレージ装置１０ＡはＩＩで取得した排他を解除する。ＶＩＩ．ストレージ装置１０Ａはホスト計算機１８０Ａに対してライト完了報告を送信する。
【００１７】
このように、ＰＶＯＬにライト指示を受領した場合には、ＭＤＫＣはライト先アドレス範囲を排他し、ＰＶＯＬに書き込みした後、ＳＶＯＬに書き込みさせ、ＳＶＯＬへの書き込み完了後に排他を解除しホストに応答をする。詳細は後述するが、ＳＶＯＬ側にライト指示を受領した場合でも、ＭＤＫＣ側で排他を取得し、ＰＬＯＬを先に書き込みした後、ＳＶＯＬに書き込みし、その後ＭＤＫＣ側で排他を解除するという順序で、ライト処理が実行される。ライト処理におけるＪＯＢ排他制御は、当該領域に対する他のライト処理及びリード処理を禁止する。これにより、ＰＶＯＬとＳＶＯＬの同一性を適切に維持する。
【００１８】
図１Ｂはホスト計算機１８０Ａ及び１８０ＢからＰＶＯＬであるボリューム１６１Ａ及びＳＶＯＬであるボリューム１６１Ｂにリード要求を発行した場合の処理の流れの概要である。ボリューム１６１Ｂへのリード要求を受領したストレージ装置１０ＢはＩＯ要求を受領した場合、ボリューム１６１Ｂからデータをリードし、ホスト計算機１８０Ｂにデータを返す。この時にストレージ装置１０Ａに対して通信を行う必要はない。
【００１９】
ボリューム１６１Ａへのリード要求を受領したストレージ装置１０Ａは、図１Ａでリード要求のあったデータの格納領域に対し、図１Ａで説明したライト先アドレス排他が取得されていないか確認し、ライト先アドレス排他がない場合には、ボリューム１６１Ａからデータをリードし、ホスト計算機１８０Ａにデータを返す。
【００２０】
ライト先アドレス排他がされている場合に、ストレージ装置１０Ａは一定時間Ｗａｉｔし、再度ライト先アドレス排他が取得されているか確認する。ＰＶＯＬであるボリューム１６１Ａにリードがあった場合にも、ストレージ装置１０Ａとストレージ装置１０Ｂ間の通信を行う必要はない。
【００２１】
なお、リード処理におけるＪＯＢ排他制御の詳細については後述するが、リード処理におけるＪＯＢ排他制御は、当該領域に対する他のライト処理は禁止し、他のリード処理を禁止しても禁止しなくともよい。リード処理を許可することで、他のコマンドの処理の遅延を低減できる。
【００２２】
近年、地震などの災害への対策としてディザスタリカバリの重要性は高まっている。ＨＡ機能は、ストレージシステムの高可用性を実現する。ＨＡ構成は、二重化された系を有し、障害発生時には自動的に故障した系を切り離し、正常な系のみを用いて動作を継続することができる。さらに、ディザスタリカバリやリソースの有効利用の観点等から、ストレージ装置の二重化によるＡｃｔｉｖｅ−Ａｃｔｉｖｅ型ＨＡ構成に対する要求が強くなってきている。
【００２３】
Ａｃｔｉｖｅ−Ａｃｔｉｖｅ型ＨＡ構成は、全ての系を稼動系として運用する。Ａｃｔｉｖｅ−Ａｃｔｉｖｅ型ＨＡ構成において、情報システムは、ホストからのボリュームペアのいずれへのＩ／Ｏアクセスも受け付けることができ、パスの帯域、ストレージコントローラ処理能力、ドライブの処理能力などのリソースを有効活用する事が出来る。
【００２４】
ボリュームペアのいずれへのＩ／Ｏアクセスも受け付けるには、ＰＶＯＬとＳＶＯＬのいずれにアクセスされたとしても、新しいデータを読み出された後に、古いデータが読みだされる事を防ぐ必要がある。この順序が逆になってしまうまき戻りが起こることによりホストの誤作動が生じる可能性があるためである。
【００２５】
そこで本実施例では、一例としてＰＶＯＬへのＩ／Ｏアクセスは、ＰＶＯＬにおけるＪＯＢ排他制御を伴い、ＳＶＯＬへのＩ／ＯアクセスにおいてＪＯＢ排他制御は使用されない。ＰＶＯＬにおけるＪＯＢ排他制御により、ホストからのコマンドに対するＰＶＯＬとＳＶＯＬの同一性を適切に維持でき、さらにＳＶＯＬの排他制御を省略することで、処理を効率化できる。
【００２６】
また、本実施例はディザスタリカバリの観点から二重化したストレージは異なるサイトに置かれ、このサイト間は１００ｋｍ程度を想定している。このためサイト間の通信で1ｍｓ程度遅延する。このため、ライト及びリードコマンドへの応答の際にIO同期でのサイト間通信を減らす必要がある。本実施例では、ホストからのリード処理において、ＭＤＣＫ及びＲＤＫＣは、それぞれストレージ装置間の通なしで、ＰＶＯＬ及びＳＶＯＬから読み出したデータをホストに返す。ストレージ装置の通信が不要であり、ホストからのリードコマンドの処理の遅延を防ぐことができる。
【００２７】
さらに、前述の様にデータの増大によりシステムの大規模化が進んでおり、システム構築コスト及びシステム管理コストの低減の観点からも少ない装置点数での機能実現が求められている。本実施例では特別な装置であるアプライアンス等を用いる必要なく、Ａｃｔｉｖｅ−Ａｃｔｉｖｅ型ＨＡ構成を実現している。
【００２８】
図２は、本実施形態における情報システムを含む計算機システムの構成例を示している。図２の計算機システムは、ホスト計算機１８０Ａ、１８０Ｂ、ストレージ装置１０Ａ〜１０Ｃ、及び、管理計算機２０を含む。ストレージ装置１０Ａ〜１０Ｃが情報システムに含まれ、ホスト計算機１８０Ａ、１８０Ｂは情報システムにアクセスし、管理計算機２０は情報システムを管理する。
【００２９】
計算機システムに含まれる各種装置（システム）の数は、設計に依存する。ストレージ装置１０Ａ、１０Ｂは、Ａｃｔｉｖｅ−Ａｃｔｉｖｅ型ＨＡストレージペアを構成し、さらに、仮想ストレージ装置を提供する。ストレージ装置１０Ａ、１０Ｂ、それぞれ、ホスト計算機１８０Ａ、１８０Ｂに対して、同一の仮想ストレージ装置として振舞う。以下に説明する例においては、ストレージ装置１０Ａ、１０Ｂは、１台の仮想ストレージ装置を構成する。
【００３０】
ストレージ装置１０Ｃは、Ｑｕｏｒｕｍ  Ｄｉｓｋを持つ。Ｑｕｏｒｕｍ  Ｄｉｓｋは、ＨＡ構成におけるストレージ装置１０Ａ、１０Ｂ間で通信不可となった場合に、ＨＡ構成のストレージ装置１０Ａ、１０Ｂのうち、継続稼動させるものと停止させるものを決定する機能を提供する。
【００３１】
具体的にはストレージ装置１０Ａ、１０Ｂはそれぞれストレージ装置の状態や、それぞれのストレージ装置から見た他方のストレージ装置への通信状態をＱｕｏｒｕｍ  Ｄｉｓｋに書き込む。互いのストレージ装置は、Ｑｕｏｒｕｍ  Ｄｉｓｋを定期的又はＩＯ応答に同期して参照し、Ｑｕｏｒｕｍ  Ｄｉｓｋに書き込まれた情報に基づいて継続稼動させるものと停止させるものを決定する。
【００３２】
ホスト計算機１８０Ａ、１８０Ｂ、管理計算機２０及びストレージ装置１０Ａ〜１０Ｃは、ＬＡＮ１９５で構成された管理ネットワークにより、通信可能に接続されている。例えば、管理ネットワーク１９５は、ＩＰネットワークである。管理ネットワーク１９５は、管理データ通信用のネットワークであればどのタイプのネットワークでもよい。
【００３３】
ホスト計算機１８０Ａ、１８０Ｂ、及びストレージ装置１０Ａ〜１０Ｃは、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）１９０で構成されたデータネットワークにより接続されている。ホスト計算機１８０Ａ、１８０Ｂは、ＳＡＮ１９０を介して、ストレージ装置１０Ａ、１０Ｂのボリュームにアクセスする。ストレージ装置１０Ａ〜１０Ｃは、ＳＡＮ１９０を介して、互いに通信する。
【００３４】
データネットワーク１９０はデータ通信用のネットワークであれば、どのようなタイプのネットワークでもよい。データネットワーク１９０と管理ネットワーク１９５は同一のネットワークでもよい。
【００３５】
図３は、ホスト計算機１８０及びストレージ装置１０のハードウェア構成例を模式的に示している。ホスト計算機１８０及びストレージ装置１０は、それぞれ、計算機システム内の任意のホスト計算機及びストレージ装置を示している。
【００３６】
ホスト計算機１８０は、二次記憶デバイス１８１、プロセッサであるＣＰＵ１８２、主記憶装置であるメモリ１８３、入力デバイス１８４、出力装置である表示デバイス１８５、Ｉ／Ｆ１８６、及びポート１８７を備える。これらは、内部ネットワークによって相互に接続される。管理計算機２０も同様のハードウェア構成を有することができる。
【００３７】
ＣＰＵ１８２は、メモリ１８３に格納されるプログラムを実行することによって、各種処理を行う。例えば、メモリ１８３は、ＯＳ、交替パスプログラム及びアプリケーションプログラムを保持する。アプリケーションプログラムは、ストレージ装置１０が提供するボリュームへデータの読み書きを行う。交替パスプログラムは、仮想ボリュームに割当てられているパスから、アクセス先の実ボリュームに対するパスを選択する。
【００３８】
ポート１８７は、ＳＡＮ１９０に接続するネットワークインタフェースである。ポート１８７は、ＳＡＮ１９０を介してストレージ装置１０とデータ及び要求を送受信する。インタフェース１８６は、ＬＡＮ１９５に接続するネットワークインタフェースである。インタフェース１８６は、ＬＡＮ１９５を介して管理計算機２０及び物理ストレージ装置１０と管理データ及び制御命令を送受信する。
【００３９】
ストレージ装置１０は、複数の記憶ドライブ１７０を収容している。記憶ドライブ１７０は、例えば、不揮発性の磁気ディスクを有するＨＤＤ、不揮発半導体メモリ（例えばフラッシュメモリ）を搭載したＳＳＤである。この記憶ドライブ１７０に基づきボリューム１６１などが構成される。
【００４０】
記憶ドライブ１７０は、ホスト又は他のストレージ装置から送られたデータ（ユーザデータ）を格納する。複数の記憶ドライブ１７０がＲＡＩＤ演算によるデータの冗長化を行うことで、１つの記憶ドライブ１７０に障害が発生した場合のデータ消失を防ぐことができる。
【００４１】
ストレージ装置１０は、ＳＡＮ１９０を介して外部装置と接続するためのフロントエンドパッケージ（ＦＥＰＫ）１００を含む。本例の計算機システムにおいて、外部装置は、ホスト又はストレージ装置である。
【００４２】
ストレージ装置１０は、さらに、記憶ドライブ１７０と接続するためのバックエンドパッケージ（ＢＥＰＫ）１４０、キャッシュメモリを搭載するキャッシュメモリパッケージ（ＣＭＰＫ）１３０、内部処理を行うマイクロプロセッサを搭載するマイクロプロセッサパッケージ（ＭＰＰＫ）１２０、及びそれらを接続する内部ネットワーク１５０を有する。
【００４３】
本例のストレージ装置１０は、複数のＦＥＰＫ１００、複数のＢＥＰＫ１４０、複数のＣＭＰＫ１３０、そして複数のＭＰＰＫ１２０を含む。ストレージ装置１０は、さらに、管理計算機２０との通信におけるインタフェースとして機能する管理プロセッサを含んでもよい。
【００４４】
各ＦＥＰＫ１００は、外部装置との接続を行うためのインタフェース１０１、ストレージ装置１０内のデータ転送を行うための転送回路１１２を基板上に有する。インタフェース１０１は複数のポートを含むことができ、各ポートが外部装置と接続することができる。インタフェース１０１は、外部装置とストレージ装置１０との間のデータ通信に用いられるプロトコル、例えばＦｉｂｒｅ  Ｃｈａｎｎｅｌ  Ｏｖｅｒ  Ｅｔｈｅｒｎｅｔ（ＦＣｏＥ）を、内部ネットワーク１５０で用いられるプロトコル、例えばＰＣＩ−Ｅｘｐｒｅｓｓに変換する。また、バッファ１１３を備える。バッファはホスト計算機１８０ａから受信したデータ一時的に格納する領域であり、ＤＲＡＭなどの記憶媒体で構成される。
【００４５】
各ＢＥＰＫ１４０は、ドライブ１７０と接続するためにインタフェース１４１、ストレージ装置１０内のデータ転送を行うための転送回路１４２を基板上に有する。インタフェース１４１は、記憶ドライブ１７０との通信に用いられるプロトコル、例えばＦＣを、内部ネットワーク１５０で用いられるプロトコルに変換する。
【００４６】
各ＣＭＰＫ１３０は、ユーザデータを一時的に格納するキャッシュメモリ（ＣＭ）１３１及び１又は複数のＭＰＰＫ１２０が扱う制御情報を格納する共有メモリ（ＳＭ）１３２を基板上に有する。
【００４７】
異なるボリュームを担当する複数のＭＰＰＫ１２０（のマイクロプロセッサ）が、共有メモリ１３２にアクセスすることができる。ＭＰＰＫ１２０が扱うデータやプログラムは、ストレージ装置１０内の不揮発性メモリ（不図示）又は記憶ドライブ１７０からロードされる。
【００４８】
各ＭＰＰＫ１２０は、１以上のマイクロプロセッサ１２１、ローカルメモリ（ＬＭ）１２２及びそれらを接続するバス１２３を有する。本例のＭＰＰＫ１２０には、複数のマイクロプロセッサ１２１が実装されている。マイクロプロセッサ１２１の数は１つでもよい。ローカルメモリ１２２は、マイクロプロセッサ１２１が実行するプログラム及びマイクロプロセッサ１２１が使用する制御情報を格納する。
【００４９】
上述のように、一つの共有メモリ１３２は、複数のＭＰＰＫ１２０が扱う制御情報を格納する。ＭＰＰＫ１２０は、共有メモリ１３２から、自身が必要とする制御情報を自身のローカルメモリ１２２にロードする。
【００５０】
本構成例において、ＭＰＰＫ１２０（のマイクロプロセッサ１２１）には、ストレージ装置１０がホスト計算機１８０Ａ、１８０Ｂに提供するボリュームの担当が割り当てられる。ＭＰＰＫ１２０に割り当てられているローカルメモリ１２２及び共有メモリ１３２が、当該ＭＰＰＫ１２０がＩ／Ｏを担当するボリュームの制御情報を格納する。
【００５１】
図４は、ストレージ装置１０Ａ、１０Ｂがホスト計算機１８０に提供する仮想構成例を示している。ストレージ装置１０Ａ、１０Ｂは、それぞれ、ターゲットポート１０２Ａ、１０２Ｂを有する。ターゲットポート１０２Ａに対して、ボリューム１６１Ａ、１６２Ａ、１６３が割当てられている。ターゲットポート１０２Ｂに対して、ボリューム１６１Ｂ、１６２Ｂ、１６４が割当てられている。
【００５２】
なお、ボリュームは、ボリューム容量と実際の容量が一致するいわゆるＬＤＥＶでも、プールからページを割り当てるシンプロビジョニングボリュームでもよい。また、全てのボリュームは図示しない他のストレージ装置の備える記憶媒体に基づいて構成されてもよい。この場合、当該ボリュームにホスト計算機からアクセスがされた場合には、アクセスをされたストレージ装置は、記憶媒体を備える他のストレージと通信を行い、ホスト計算機に応答を行う。
【００５３】
ストレージ装置１０Ａ、１０Ｂは、仮想ストレージ装置１５をホスト計算機１８０に提供する。ホスト計算機１８０は、仮想ストレージ装置１５の製造番号（Ｓ／Ｎ）は、ＸＸＸである。一方、ストレージ装置１０Ａ、１０Ｂ、それぞれ、製造番号ＡＡＡ、製造番号ＢＢＢを有している。ホスト計算機１８０は、仮想ストレージ装置１５を、ターゲットポート１０２Ａ、１０２Ｂを含む、製造番号ＸＸＸのストレージ装置と認識する。製造番号は、ストレージ装置及び仮想ストレージ装置の識別子である。
【００５４】
ボリューム１６１Ａ、１６１Ｂは、ＨＡボリュームペアを構成し、一つの仮想ボリューム１５１を構成する。ボリューム１６１Ａ、１６１ＢのＩＤは、それぞれ、１０：００、３０：００である。一方、仮想ボリューム１５１のＩＤは、２０：００である。
【００５５】
ボリューム１６２Ａ、１６２Ｂは、ＨＡボリュームペアを構成し、一つの仮想ボリューム１５２を構成する。ボリューム１６２Ａ、１６２ＢのＩＤは、それぞれ、１０：０１、３０：０１である。一方、仮想ボリューム１５２のＩＤは、２０：０１である。
【００５６】
ボリューム１６３、１６４は、それぞれ、仮想ボリューム１５３、１５４を構成する。ボリューム１６３、１６４のＩＤは、それぞれ、１０：０２、３０：０２である。一方、仮想ボリューム１５３、１５４のＩＤは、それぞれ、２０：０２、２０：０３である。
【００５７】
ホスト計算機１８０は、仮想ボリューム１５１〜１５４を、仮想ストレージ装置１５が提供し、ＩＤが２０：００〜２０：０３のボリュームと認識する。ホスト計算機１８０は、ターゲットポート１０２Ａ、１０２Ｂのいずれを介しても、仮想ボリューム１５１、１５２にアクセスすることができる。ホスト計算機１８０は、ターゲットポート１０２Ａのみを介して仮想ボリューム１５３にアクセスし、ターゲットポート１０２Ｂのみを介して仮想ボリューム１５４にアクセスする。
【００５８】
図５は、ストレージ装置１０のＣＭＰＫ１３０の共有メモリ１３２内に格納されている情報を示している。共有メモリ１３２は、ＶＯＬマッピング情報管理テーブル２１０、ＨＡボリュームペア管理テーブル２２０、ＬＵパス管理テーブル２３０、ＶＯＬ管理テーブル２４０、ＰＧ管理テーブル２５０、及び、キャッシュスロット管理テーブル２７０を格納している。共有メモリ１３２は、複数のＭＰＰＫ１２０からアクセスされ得る。
【００５９】
図６は、ストレージ装置１０のＭＰＰＫ１２０のローカルメモリ１２２内に格納されている情報を示している。ローカルメモリ１２２は、ＪＯＢ管理テーブル２６０を格納している。
【００６０】
以下において、上記テーブルの構成例を説明する。以下の説明で参照される図面は、ストレージ装置１０Ａのテーブルを例示している。図７は、ＶＯＬマッピング情報管理テーブル２１０の構成例を示している。ＶＯＬマッピング情報管理テーブル２１０は、ストレージ装置１０が有するボリュームの実構成情報と仮想構成情報とを関連付ける。具体的には、ＶＯＬマッピング情報管理テーブル２１０は、ボリュームＩＤのカラム２１１、仮想ボリュームＩＤのカラム２１２、仮想ストレージ装置の製品番号（識別子）のカラム２１３、ＨＡフラグのカラム２１４を有する。
【００６１】
各エントリは、ボリュームが対応付けられている仮想ボリュームのＩＤ、当該仮想ボリュームを提供する仮想ストレージ装置のＩＤ、及び、当該ボリュームがＨＡボリュームペアを構成するか否かを示している。ＨＡフラグのカラムの値がＯＮのとき、当該ボリュームは、他のボリュームとＨＡボリュームペアを構成する。
【００６２】
図８は、ＨＡボリュームペア管理テーブル２２０の構成例を示している。ＨＡボリュームペア管理テーブル２２０は、ＨＡボリュームペアの管理情報を保持している。具体的には、ＨＡボリュームペア管理テーブル２２０は、ＨＡボリュームペアのＩＤのカラム２２１、ＨＡボリュームペアの状態を示しているカラム２２２、ＨＡボリュームペアのＰＶＯＬのＩＤのカラム２２３、ＰＶＯＬを提供するＭＤＫＣの識別子を格納するカラム２２４を有する。
【００６３】
ＨＡボリュームペア管理テーブル２２０は、さらに、ＨＡボリュームペアのＳＶＯＬのＩＤのカラム２２５、ＳＶＯＬを提供するＲＤＫＣの識別子を格納するカラム２２６を有する。各エントリにおいて、ＰＶＯＬ又はＳＶＯＬが、当該ストレージ装置１０が提供するボリュームである。
【００６４】
ペア状態の例は、ＣＯＰＹ状態、ＰＡＩＲ状態、ＳＵＳＰＥＮＤ状態等である。ＣＯＰＹ状態は、ＨＡボリュームペアの一方のボリュームから他方のボリュームにデータコピーをしている状態である。ＰＡＩＲ状態は、ＨＡボリュームペアの二つのボリュームが同期している状態である。ＳＵＳＰＥＮＤ状態は、ＨＡボリュームペアの二つのボリュームが非同期の状態である。
【００６５】
図９は、ＬＵパス管理テーブル２３０の構成例を示している。ＬＵパス管理テーブル２３０は、ＬＵＮに関連付けられているポート及びボリュームを管理する。具体的には、ＬＵパス管理テーブル２３０は、ポートＩＤのカラム２３１、ＬＵＮのカラム２３２、ボリュームＩＤのカラム２３３を有する。
【００６６】
図１０は、ＶＯＬ管理テーブル２４０の構成例を示している。ＶＯＬ管理テーブル２４０は、ボリュームの特性情報を保持している。具体的には、ＶＯＬ管理テーブル２４０は、ボリュームＩＤのカラム２４１、ボリュームのサイズを示しているカラム２４２、ボリュームへ物理記憶領域を提供するパリティグループ（ＰＧ）のカラム２４３を有する。パリティグループは、ＲＡＩＤグループとも呼ばれる。
【００６７】
図１１は、ＰＧ管理テーブル２５０の構成例を示している。ＰＧ管理テーブル２５０は、パリティグループの特性を管理する。具体的には、ＰＧ管理テーブル２５０は、パリティグループのＩＤのカラム２５１、パリティグループのタイプを示しているカラム２５２、パリティグループのサイズを示しているカラム２５３、パリティグループのＲＡＩＤレベルを示しているカラム２５４を有する。
【００６８】
図１２は、キャッシュスロット管理テーブル２７０の構成例を示している。キャッシュスロット管理テーブル２７０は、キャッシュされているデータを管理する。具体的には、キャッシュスロット管理テーブル２７０は、キャッシュの管理単位であるキャッシュスロット（単にスロットとも呼ぶ）に関する情報を保持している。スロットのサイズは、共通であり、スロット番号から当該スロットのキャッシュ内アドレスが特定できる。
【００６９】
ストッロ番号カラム２７１は、スロットの番号を格納している。ＰＧ  ＩＤカラム２７２及びＰＧ内アドレスカラム２７３は、スロットに格納されているデータを格納するパリティグループのＩＤ及び当該パリティグループ内のアドレスを示している。ＶＯＬ  ＩＤカラム２７４及びＶＯＬ内アドレスカラム２７５は、スロットに格納されているデータを格納するボリュームの識別子及びボリューム内のアドレスを示している。
【００７０】
スロットステータスカラム２７６は、スロットの状態を示している。フリー状態は、スロットが開放されていることを示している。なお、ここではフリー状態のスロットも管理しているが他の状態でないスロットはフリーとして管理しなくても良い。ダーティ状態は、スロット内のデータがパリティグループに書き込まれる前であることを示している。スロット内のデータとパリティグループのデータが、不一致である。
【００７１】
クリーン状態は、ＰＶＯＬとＳＶＯＬとの間において異なる。ＰＶＯＬのクリーン状態は、スロット内のデータがパリティグループに書き込まれ、かつ、ＳＶＯＬにも書き込まれた後（ＲＤＫＣからの完了応答後）であることを示している。つまり、スロット内のデータがパリティグループ内のデータに一致する。ＳＶＯＬのクリーン状態は、スロット内のデータがパリティグループに書き込まれた後であることを示している。
【００７２】
二重書き中状態は、ＰＶＯＬ特有の状態であり、スロット内のデータがＳＶＯＬに書き込まれる前（ＲＤＫＣからの完了応答前）であることを示している。つまり、ＰＶＯＬのデータがＳＶＯＬのデータと一致していないことを示している。
【００７３】
図１３は、ＪＯＢ管理テーブル２６０の構成例を示している。ＪＯＢ管理テーブル２６０は、それを保持しているＭＰＰＫ１２０が実行するＪＯＢを管理する。ここでのＪＯＢは、ボリュームへのライト処理又はボリュームからのリード処理である。ＪＯＢ管理テーブル２６０は、実行中のＪＯＢ及び今後実行すべきＪＯＢの情報を保持している。ＪＯＢ管理テーブル２６０の最大エントリ数は決まっている。
【００７４】
ＪＯＢ番号カラム２６１は、ＪＯＢの識別子を示している。処理種別カラム２６２は、ＪＯＢにおいて実行すべき処理の種別を示している。具体的には、ホスト計算機１８０からのリードコマンドに対応した処理（ＨＯＳＴ  ＲＥＡＤ）、ホスト計算機１８０からのライトコマンドに対応した処理（ＨＯＳＴ  ＷＲＩＴＥ）、他のストレージ装置からのリードコマンドに対応した処理（ＤＫＣ間ＲＥＡＤ）、他のストレージ装置からのライトコマンドに対応した処理（ＤＫＣ間ＷＲＩＴＥ）である。
【００７５】
ＨＡ  Ｐ／Ｓカラム２６３は、ＪＯＢの対象ボリュームが、ＨＡボリュームペアのボリュームであるか、さらに、ＨＡボリュームペアのボリュームである場合に、ＰＶＯＬであるかＳＶＯＬであるかを示している。
【００７６】
ＶＯＬ  ＩＤカラム２６４は、ＪＯＢの対象ボリュームのＩＤを示している。ＳＴＡＲＴ  ＬＢＡカラム２６５及びＬＢＡ  ＬＥＮＧＴＨカラム２６６は、ＪＯＢの対象データのボリューム内の開始アドレス及びデータサイズ（アドレス長）を示している。
【００７７】
排他種別カラム２６７は、ＪＯＢが排他ロックを確保しているか、さらに、排他ロックを確保している場合にその排他種別を示している。ＲＤ共有は、当該アドレス領域へのライトを禁止し、リードを許可する。Ｒ／Ｗ排他は、当該アドレス領域へのライト及びリードを禁止する。
【００７８】
ＪＯＢ番号及びＭＰＰＫ番号カラム２６８は、ホスト計算機１８０からＳＶＯＬへのライトコマンドに対応した処理を示しているエントリにおいて、データを格納する。ＪＯＢ番号及びＭＰＰＫ番号カラム２６８は、対応ＰＶＯＬへのＭＤＫＣにおけるライト処理のＪＯＢを特定する情報を格納する。ＪＯＢは、ＪＯＢ番号と当該ＪＯＢを実行するＭＰＰＫの番号（ＭＰＰＫの識別子）で特定される。後述するように、ＪＯＢ特定情報は、ＲＤＫＣからＭＤＫＣへ排他ロック解除コマンドに含まれる。
【００７９】
図１４のシーケンス図は、ホスト計算機１８０に対して、仮想ストレージ装置１５及び仮想ボリューム１５１〜１５４の情報を提供する方法を示している。ホスト計算機１８０は、ストレージ装置１０にログイン要求を送信し、その応答を受信した後、ＲＥＰＯＲＴＬＵＮコマンドを送信する。ＲＥＰＯＲＴ  ＬＵＮコマンドは、当該ポートにおいてアクセス可能なＬＵＮ（Ｌｏｇｉａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）のリストを要求する。ストレージ装置１０Ａは、ＬＵパス管理テーブル２３０を参照し、アクセス可能なＬＵＮのリストを返す（ＲＥＰＯＲＴ  ＬＵＮ応答）。
【００８０】
ホスト計算機１８０は、ＩＮＱＵＩＲＹコマンドを用いて、ストレージ装置１０の製造番号及びＬＵＮが対応するボリュームのＩＤを問い合わせることができる。ストレージ装置１０は、ストレージ装置１０は、ＬＵパス管理テーブル２３０及びＶＯＬマッピング情報管理テーブル２１０を参照し、対応する仮想構成が定義されているか判定する（Ｓ１０１）。
【００８１】
対応する仮想構成（仮想ストレージ装置又は仮想ボリューム）が定義されている場合（Ｓ１０１：Ｙ）、ストレージ装置１０は、当該仮想構成の情報をＩＮＱＵＩＲＹ応答に含めて返す（Ｓ１０２）。仮想構成が定義されていない場合（Ｓ１０１：Ｎ）、ストレージ装置１０は実構成の情報をＩＮＱＵＩＲＹ応答に含めて返す（Ｓ１０３）。
【００８２】
図４の構成において、例えば、ホスト計算機１８０が、ストレージ装置１０Ａ（Ｓ／Ｎ：ＡＡＡ）に対して、製造番号の通知を要求した場合、当該要求を受領したストレージ装置１０Ａは、仮想ストレージ装置１５の製造番号ＸＸＸを、ホスト計算機１８０に応答する。ストレージ装置１０Ｂも、仮想ストレージ装置１５の製造番号ＸＸＸを、ホスト計算機１８０に応答する。
【００８３】
仮想ストレージ装置１５の製造番号は、ＨＡストレージ装置ペアを構成するストレージ装置１０Ａ及び１０Ｂで共通である。ＨＡストレージペアを構成するストレージ装置１０Ａ、１０Ｂを、単一の仮想ストレージ装置１５としてホスト計算機１８０に認識させる。
【００８４】
同様に、ホスト計算機１８０が、ＩＮＱＵＩＲＹコマンドを用いて、ストレージ装置１０Ａに対して、ＬＵＮに対応するボリュームＩＤ（ＶＯＬ  ＩＤ）の通知を要求した場合、ストレージ装置１０Ａは、仮想ボリューム１５１〜１５３のＩＤ（２０：００〜２０：０２）をホスト計算機１８０に応答する。同様に、ストレージ装置１０Ｂは、仮想ボリューム１５１、１５２、１５４のＩＤ（２０：００、２０：０１、２０：０３）をホスト計算機１８０に応答する。
【００８５】
このようにして、ホスト計算機１８０は、仮想ボリューム１５１〜１５４を認識し、さらに、仮想ボリューム１５１、１５２のそれぞれに対する二つのパス（ポート）及び仮想ボリューム１５３、１５４それぞれに対する一つのパス（ポート）を認識する。
【００８６】
ＨＡボリュームペアの作成を説明する。管理者は、ボリュームを使用して、ＨＡボリュームペアを作成する。管理者は、管理計算機２０を使用して、ＨＡボリュームペアを作成することを、ストレージ装置１０Ａ、１０Ｂに指示している。
【００８７】
ＨＡボリュームペアの一方がＰＶＯＬとして定義され、他方がＳＶＯＬと定義される。管理者は、管理計算機２０を使用してＰＶＯＬとＳＶＯＬを定義してもよい。後述するように、ＰＶＯＬとＳＶＯＬの間では、ホスト計算機１８０からアクセスに対する処理が異なる。ストレージ装置１０Ａ、１０Ｂは、ＨＡボリュームペアを作成するとＨＡボリュームペア管理テーブル２２０に新しいエントリを追加する。
【００８８】
さらに、ＨＡボリュームペアに共通の仮想情報が定義される。ストレージ装置１０Ａ、１０Ｂ又は管理者は、ＨＡボリュームペアに共通の仮想ボリュームＩＤを定義する。ストレージ装置１０Ａ、１０Ｂは、定義された仮想情報を有する新しいエントリを、ＶＯＬマッピング情報管理テーブル２１０に追加する。
【００８９】
ＨＡボリュームペアが定義されると、ストレージ装置１０Ａ、１０Ｂは、ＰＶＯＬからＳＶＯＬへの初期データコピーを開始する。初期データコピーが完了すると、二つのボリュームは同一のデータを有し、互いに同期する。つまり、ストレージ装置１０Ａ、１０Ｂは、それぞれ、ホスト計算機１８０からのライトコマンドを受信し、互いの間でライトコマンドとライトデータの通信を行って、ＰＶＯＬとＳＶＯＬの双方を更新し、ボリューム間の同一性を維持する。
【００９０】
後述するように、ストレージ装置１０Ａ、１０Ｂは、ホスト計算機１８０からのリードコマンドに対して、ストレージ装置１０Ａ、１０Ｂ間での通信を行うことなく、自装置のボリュームのデータをホスト計算機１８０に返す。これにより、処理遅延を避ける。
【００９１】
ストレージ装置１０Ａ、１０Ｂの一方において障害が発生し、ホスト計算機１８０からのＩ／Ｏアクセスに応答できない場合、それを検知した障害が発生していない他方のストレージ装置が、ホスト計算機１８０からの全てのＩ／Ｏアクセスを処理する。
【００９２】
一方のボリュームにおいて障害が発生し、ストレージ装置１０Ａ、１０Ｂがホスト計算機１８０と通信できる場合、障害発生したボリュームを保持するストレージ装置は、他方のストレージ装置にホスト計算機１８０からコマンドを転送する。
【００９３】
例えば、ストレージ装置１０Ｂのボリュームにおいて障害が発生したとする。ストレージ装置１０Ｂは、ホスト計算機１８０からのライトコマンドをストレージ装置１０Ａに転送し、ストレージ装置１０Ａは、自装置のボリュームへのライト処理を実行する。ストレージ装置１０Ｂは、ホスト計算機１８０にライト完了応答を返す。また、ストレージ装置１０Ｂは、ストレージ装置１０Ａから受信したリードデータをホスト計算機１８０に返す。ストレージ装置１０Ａのボリュームにおいて障害が発生した場合も、ストレージ装置１０Ａとストレージ装置１０Ｂの対応が逆転するだけで同様である。
【００９４】
このように、本情報システムは、高可用性を示し得る。また、ＰＶＯＬとＳＶＯＬとに対して、障害発生時における異なる役割を定義することができる。例えば、ストレージ装置１０Ａ、１０Ｂ間の通信で障害が発生した場合、情報システムは、ホスト計算機１８０からのＰＶＯＬへのＩ／Ｏアクセスを受け付け、ＳＶＯＬへのＩ／Ｏアクセスをブロックする。これにより、仮想ボリュームにおけるデータ同一性が維持される。
【００９５】
ストレージ装置１０Ａ、１０Ｂは、他装置の障害やストレージ装置１０Ａ、１０Ｂ間の通信障害を、Ｑｕｏｒｕｍ  Ｄｉｓｋ及びストレージ装置１０Ａ、１０Ｂ間通信の状態により知ることができる。
【００９６】
図１５は、ホスト計算機１８０からＰＶＯＬへのライト処理のシーケンスを示している。ホスト計算機１８０は、ＭＤＫＣ１０Ｍに対して、仮想ボリューム内の領域へのライトコマンド（ＷＲ  ＣＭＤ）を発行する。ＭＤＫＣ１０Ｍは、仮想ボリュームに対応するＰＶＯＬにおいて、ライトコマンドにより指定された領域に対する排他ロックを確保する（Ｓ２０１）。
【００９７】
ＭＤＫＣ１０Ｍは、データ受信の準備ができると、データ転送のＲＥＡＤＹ応答（ＸＦＲ  ＲＤ）をホスト計算機１８０に返し、ホスト計算機１８０からライトデータ（ＷＲ  ＤＡＴ）を受信する。ＭＤＫＣ１０Ｍは、受信したライトデータを、ＰＶＯＬ内のアドレス領域に書き込む（Ｓ２０２）。上述のように、ＰＶＯＬへ書き込みは、ライトキャッシュ機能がＯＮであればキャッシュメモリ１３１への書き込みであり、ライトキャッシュ機能がＯＦＦであればパリティグループ（物理記憶領域）への書き込みである。
【００９８】
ＭＤＫＣ１０Ｍは、ＰＶＯＬとＨＡボリュームペアを構成するＳＶＯＬ内の領域へのライトコマンド（ＷＲ  ＣＭＤ）をＲＤＫＣ１０Ｒに送信する。ＳＶＯＬは、ボリュームＩＤ又は別途定義されているＬＵＮにより指定できる。ＲＤＫＣ１０Ｒは、データ転送のＲＥＡＤＹ応答（ＸＦＲ  ＲＤ）をＭＤＫＣ１０Ｍに返し、ＭＤＫＣ１０Ｍからライトデータ（ＷＲ  ＤＡＴ）を受信する。ＲＤＫＣ１０Ｒは、受信したライトデータを、ＳＶＯＬ内のアドレス領域に書き込む（Ｓ２０３）。ＳＶＯＬへの書き込みは、上記ＰＶＯＬへの書き込みと同様である。
【００９９】
ＲＤＫＣ１０Ｒは、ＳＶＯＬ内のアドレス領域へのデータの書き込みが完了すると、ライト完了応答（ＷＲ  ＲＳＰ）をＭＤＫＣ１０Ｍに返す。ＭＤＫＣ１０Ｍは、ＲＤＫＣ１０Ｒからライト完了応答受信した後、ホスト計算機１８０にライト完了応答（ＷＲ  ＲＳＰ）を返す。さらに、ＭＤＫＣ１０Ｍは、確保していた排他ロックを解除する（Ｓ２０４）。
【０１００】
図１６は、ホスト計算機１８０からＳＶＯＬへのライト処理のシーケンスを示している。ホスト計算機１８０は、ＲＤＫＣ１０Ｒに対して、仮想ボリューム内の領域へのライトコマンド（ＷＲ  ＣＭＤ）を発行する。
【０１０１】
ＲＤＫＣ１０Ｒは、データ受信の準備ができると、データ転送のＲＥＡＤＹ応答（ＸＦＲ  ＲＤ）をホスト計算機１８０に返し、ホスト計算機１８０からライトデータ（ＷＲ  ＤＡＴ）を受信する。ＲＤＫＣ１０Ｒは、ＳＶＯＬとＨＡボリュームペアを構成するＰＶＯＬ内の領域へのライトコマンド（ＷＲ  ＣＭＤ）をＭＤＫＣ１０Ｍに送信する。
【０１０２】
ＭＤＫＣ１０Ｍは、ライトコマンドで指定されたボリューム内の領域に対する排他ロックを確保する（Ｓ２５１）。その後、ＭＤＫＣ１０Ｍは、データ転送のＲＥＡＤＹ応答（ＸＦＲ  ＲＤ）をＲＤＫＣ１０Ｒに返し、ＲＤＫＣ１０Ｒからライトデータ（ＷＲ  ＤＡＴ）を受信する。
【０１０３】
ＭＤＫＣ１０Ｍは、受信したライトデータを、ＰＶＯＬ内の指定された領域に書き込む（Ｓ２５２）。ＭＤＫＣ１０Ｍは、ＰＶＯＬ内の領域へのデータの書き込みが完了すると、ライト完了応答（ＷＲ  ＲＳＰ）をＲＤＫＣ１０Ｒに返す。
【０１０４】
ＲＤＫＣ１０Ｒは、ＭＤＫＣ１０Ｍからライト完了応答受信した後、ＳＶＯＬ内の指定された領域にライトデータを書き込む（Ｓ２５３）。ＲＤＫＣ１０Ｒは、ホスト計算機１８０に、ライト完了応答（ＷＲ  ＲＳＰ）を返す。その後、ＲＤＫＣ１０Ｒは、ＪＯＢを指定して、排他ロック解除コマンドをＭＤＫＣ１０Ｍに送信する。ＭＤＫＣ１０Ｍは、確保していた排他ロックを解除し（Ｓ２５４）、指定されたＪＯＢの排他ロックを解除したことを示している応答をＲＤＫＣ１０Ｒに返す。
【０１０５】
図１７は、ホスト計算機１８０からのライトコマンドに対するＭＤＫＣ１０Ｍ及びＲＤＫＣ１０Ｒの処理のフローチャートを示している。図１７において、ＭＤＫＣ１０Ｍは、ステップＳ３０１〜Ｓ３１１を実行し、ＲＤＫＣ１０Ｒは、ステップＳ３０１、Ｓ３０２、Ｓ３１２〜Ｓ３１９を実行する。以下に説明する例では、ボリュームへの書き込みは、キャッシュメモリ１３０へのライトデータの書き込みが対応する。
【０１０６】
まず、ＭＤＫＣ１０Ｍの処理を説明する。ＭＤＫＣ１０Ｍは、ホスト計算機１８０からライトコマンドを受信する。ライトコマンドは、ＬＵＮを使用して対象ボリュームを指定する。ＭＤＫＣ１０Ｍは、ライトコマンドが指定する仮想ボリュームに対応するボリュームＩＤを、ＬＵパス管理テーブル２３０を参照して決定する。
【０１０７】
ＭＤＫＣ１０Ｍは、ＪＯＢ管理テーブル２６０に、新たなエントリを作成することでＪＯＢを確保する（Ｓ３０１）。具体的には、ＭＰＰＫ１２０は、そのＪＯＢ管理テーブル２６０においてフリーのＪＯＢを選択し、そのエントリに、処理種別（ＨＯＳＴ  ＷＲＩＴＥ）、並びに、ライトコマンドが指定するボリューム及びアドレスの情報を書き込む。排他種別カラム２６７のセルは未記入である。図１３のＪＯＢ管理テーブル２６０において、ＪＯＢ番号が１のエントリが、ホスト計算機１８０からＰＶＯＬへのライト処理を示している。
【０１０８】
ＭＰＰＫ１２０は、ＨＡボリュームペア管理テーブル２２０を参照し、指定されたボリュームが、ＨＡボリュームペアのＰＶＯＬ又はＳＶＯＬであるか判定する（Ｓ３０２）。ここでは、指定されたボリュームは、ＰＶＯＬである。
【０１０９】
次に、ＭＰＰＫ１２０は、新たなＪＯＢの排他ロックを確保する（Ｓ３０３）。具体的には、ＭＰＰＫ１２０は、ＪＯＢ管理テーブル２６０を検索し、指定ボリュームかつ指定領域の排他ロックを確保している他のＪＯＢを検索する。排他ロックが確保されている場合、当該排他ロックの解除を待つ。排他ロックを確保する順序は、例えば、不図示のキューにより制御される。なお、排他制御単位は、本例のようにＬＢＡ単位でもよいし、ボリューム単位でもよい。ボリューム内の一部領域のみ排他ロックすることで、他のコマンドの処理への影響を小さくすることができる。
【０１１０】
指定ボリュームかつ指定領域の排他ロックが他のＪＯＢによって確保されていない場合、ＭＰＰＫ１２０は、新規ＪＯＢの排他種別カラム２６７のセルに排他ロックを設定する。処理はＰＶＯＬへのライト処理であり、その排他種別は、Ｒ／Ｗ排他である。
【０１１１】
排他ロックを確保すると、ＭＰＰＫ１２０は、ホスト計算機１８０に対してデータ転送のＲＥＡＤＹ応答を返し、ホスト計算機１８０からのライトデータを待つ（Ｓ３０４）。ＭＰＰＫ１２０は、ライトデータのためのキャッシュスロットを確保する（Ｓ３０５）。具体的には、ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、フリーのスロットに、新たなデータを設定する。ＭＰＰＫ１２０は、ＶＯＬ管理テーブル２４０を参照して、指定ボリュームに対応するパリティグループを特定できる。
【０１１２】
ＭＰＰＫ１２０は、ＦＥＰＫ１００を使用して受信したライトデータを確保したキャッシュスロットに書き込む（Ｓ３０６）。ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、当該キャッシュスロットのスロットステータスを、二重書き中に設定する。
【０１１３】
ＭＰＰＫ１２０は、ＲＤＫＣ１０Ｒに対して、ＰＶＯＬに対応するＳＶＯＬへのライトコマンドを発行し、データ転送のＲＥＡＤＹ応答を待つ（Ｓ３０７）。ＭＰＰＫ１２０は、ＨＡボリュームペア管理テーブル２２０から、ＳＶＯＬ及びＳＶＯＬを保有するＲＤＫＣ１０ＲのＩＤを取得する。ＭＰＰＫ１２０は、当該ＲＤＫＣ１０Ｒに対して、当該ＳＶＯＬへのライト処理を指示している。ＳＶＯＬはボリュームＩＤ又は別途定義されているＬＵＮにより指定され得る。
【０１１４】
ＲＥＡＤＹ応答を受信すると、ＭＰＰＫ１２０は、ＦＥＰＫ１００を使用してＲＤＫＣ１０Ｒにホスト計算機１８０から受信したライトデータを転送し、ライト完了の応答を待つ（Ｓ３０８）。
【０１１５】
ＲＤＫＣ１０Ｒからライト完了応答を受信すると、ＭＰＰＫ１２０は、ホスト計算機１８０にライト完了応答を送信する（Ｓ３０９）。さらに、ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、当該キャッシュスロットのスロットステータスを、ダーティに変更する（Ｓ３１０）。例えば、ＭＰＰＫ１２０は、ＪＯＢ管理テーブル２６０から当該ＪＯＢの対象ボリューム及び領域を取得し、それによりキャッシュスロット管理テーブル２７０において対応キャッシュスロットを特定できる。
【０１１６】
ＭＰＰＫ１２０は、ＪＯＢ管理テーブル２６０を更新して、当該ＪＯＢの排他ロックを解除する（Ｓ３１１）。例えば、ＭＰＰＫ１２０は、ＪＯＢ管理テーブル２６０において当該ＪＯＢを開放することで、排他ロックを解除する。
【０１１７】
次に、ＲＤＫＣ１０Ｒの処理を説明する。ＲＤＫＣ１０ＲによるステップＳ３０１、Ｓ４０２は、ＭＤＫＣ１０ＭによるＳ４０１、Ｓ４０２と実質的に同様である。ただし、ホスト計算機１８０からのライトコマンドにより指定されたボリュームはＳＶＯＬである。図１３において、ＪＯＢ番号が５のエントリが、ホスト計算機１８０からＳＶＯＬへのライト処理を示している。
【０１１８】
指定されたボリュームを担当するＭＰＰＫ１２０は、ホスト計算機１８０に対してデータ転送のＲＥＡＤＹ応答を返し、ホスト計算機１８０からのライトデータを待つ（Ｓ３１２）。
【０１１９】
ＦＥＰＫ１００は、ホスト計算機１８０から受信したライトデータをバッファ１１３に保持する。ＭＰＰＫ１２０は、ＭＤＫＣ１０Ｍに対して、ＳＶＯＬに対応するＰＶＯＬへのライトコマンドを発行し、データ転送のＲＥＡＤＹ応答を待つ（Ｓ３１３）。ＭＰＰＫ１２０は、ＨＡボリュームペア管理テーブル２２０から、ＰＶＯＬ及びＰＶＯＬを保有するＭＤＫＣ１０ＭのＩＤを取得する。ＭＰＰＫ１２０は、当該ＭＤＫＣ１０Ｍに対して、当該ＰＶＯＬへのライト処理を指示している。ＰＶＯＬはボリュームＩＤ又は別途定義されているＬＵＮにより指定され得る。
【０１２０】
ＲＥＡＤＹ応答を受信すると、ＭＰＰＫ１２０は、ＦＥＰＫ１００を使用してＭＤＫＣ１０Ｍにホスト計算機１８０から受信したライトデータを転送し、ライト完了の応答を待つ（Ｓ３１４）。
【０１２１】
ＭＰＰＫ１２０は、ＭＤＫＣ１０Ｍから受信したライト完了応答を解析し、ＪＯＢ特定情報を取得する（Ｓ３１５）。ライト完了応答は、当該ライト処理のＪＯＢを特定する情報を含む。ＪＯＢ特定情報は、当該ＪＯＢの番号、及び、ＭＤＫＣ１２０において当該ＪＯＢを担当しているＭＰＰＫの番号を含む。ＭＰＰＫ１２０は、ＪＯＢ管理テーブル２６０において、当該エントリのカラム２６８にＪＯＢ特定情報を格納する。
【０１２２】
ＭＰＰＫ１２０は、ライトデータのためのキャッシュスロットを確保する（Ｓ３１６）。具体的には、ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、フリーのスロットに、新たなデータを設定する。ＭＰＰＫ１２０は、ＶＯＬ管理テーブル２４０を参照して、指定ボリュームに対応するパリティグループを特定できる。
【０１２３】
ＭＰＰＫ１２０は、バッファ１１３に格納されたライトデータを確保したキャッシュスロットに書き込む（Ｓ３１７）。ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、当該キャッシュスロットのスロットステータスを、ダーティに設定する。
【０１２４】
キャッシュライトの後、ＭＰＰＫ１２０は、ホスト計算機１８０にライト完了応答を送信する（Ｓ３１８）。さらに、ＭＰＰＫ１２０は、ＪＯＢ管理テーブル２６０からＪＯＢ特定情報を取得し、当該ＪＯＢ特定情報を含む排他ロック解除コマンドを生成する。ＭＰＰＫ１２０は、生成した排他ロック解除コマンドをＭＤＫＣ１０Ｍに送信し、ＭＤＫＣ１０Ｍからの応答を待つ（Ｓ３１９）。
【０１２５】
図１８は、ＭＤＫＣ１０ＭとＲＤＫＣ１０Ｒとの間のライトコマンドに対する、ＭＤＫＣ１０ＭとＲＤＫＣ１０Ｒの処理のフローチャートを示している。図１８において、ＭＤＫＣ１０Ｍは、ステップＳ３５１〜Ｓ３６１を実行し、ＲＤＫＣ１０Ｒは、ステップＳ３５１、Ｓ３５２、Ｓ３６２〜Ｓ３６５を実行する。
【０１２６】
まず、ＭＤＫＣ１０Ｍの処理を説明する。ＭＤＫＣ１０Ｍは、ＲＤＫＣ１０Ｒからライトコマンドを受信する。ライトコマンドは、ボリュームＩＤ又は別途定義されたＬＵＮにより対象ボリュームを指定する。ＭＤＫＣ１０Ｍは、ＪＯＢ管理テーブル２６０に、新たなエントリを作成することでＪＯＢを確保する（Ｓ３５１）。
【０１２７】
具体的には、指定されたボリュームを担当するＭＰＰＫ１２０は、そのＪＯＢ管理テーブル２６０においてフリーのＪＯＢを選択し、そのエントリに、処理種別（ＤＫＣ間ＷＲＩＴＥ）、並びに、ライトコマンドが指定するボリューム及びアドレスの情報を書き込む。排他種別カラム２６７のセルは未記入である。図１３において、ＪＯＢ番号が３のエントリが、ＲＤＫＣ１０ＲからＰＶＯＬへのライトコマンドの処理を示している。
【０１２８】
ＭＰＰＫ１２０は、ＨＡボリュームペア管理テーブル２２０を参照し、指定されたボリュームが、ＨＡボリュームペアのＰＶＯＬ又はＳＶＯＬであるか判定する（Ｓ３５２）。ここでは、指定されたボリュームは、ＰＶＯＬである。
【０１２９】
次に、ＭＰＰＫ１２０は、新たなＪＯＢの排他ロックを確保する（Ｓ３５３）。具体的には、ＭＰＰＫ１２０は、ＪＯＢ管理テーブル２６０を検索し、指定ボリュームかつ指定領域の排他ロックを確保している他のＪＯＢを検索する。排他ロックが確保されている場合、当該排他ロックの解除を待つ。排他ロックを確保する順序は、例えば、不図示のキューにより制御される。
【０１３０】
指定ボリュームかつ指定領域の排他ロックが他のＪＯＢによって確保されていない場合、ＭＰＰＫ１２０は、新規ＪＯＢの排他種別カラム２６７のセルに排他ロックを設定する。処理はＰＶＯＬへのライト処理であり、その排他種別は、Ｒ／Ｗ排他である。
【０１３１】
排他ロックを確保すると、ＭＰＰＫ１２０は、ＲＤＫＣ１０Ｒに対してデータ転送のＲＥＡＤＹ応答を返し、ＲＤＫＣ１０Ｒからのライトデータを待つ（Ｓ３５４）。ＭＰＰＫ１２０は、ライトデータのためのキャッシュスロットを確保する（Ｓ３５５）。具体的には、ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、フリーのスロットに、新たなデータを設定する。ＭＰＰＫ１２０は、ＶＯＬ管理テーブル２４０を参照して、指定ボリュームに対応するパリティグループを特定できる。
【０１３２】
ＭＰＰＫ１２０は、ＦＥＰＫ１００を使用して受信したライトデータを確保したキャッシュスロットに書き込む（Ｓ３５６）。ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、当該キャッシュスロットのスロットステータスを、二重化書き中に設定する。
【０１３３】
ライトデータをキャッシュメモリ１３０も書き込んだ後、ＭＰＰＫ１２０は、ＲＤＫＣ１０Ｒに書きライト完了の応答を返し、排他ロック解除コマンドを待つ（Ｓ３５７）。ライト完了応答は、当該ライト処理のＪＯＢ特定情報を含む。ＪＯＢは、ＪＯＢ番号と当該ＪＯＢを担当するＭＰＰＫの番号で特定され得る。ＭＰＰＫ１２０は、ＪＯＢ管理テーブル２６０から取得したＪＯＢ番号と自装置のＭＰＰＫ番号とを、ライト完了応答に含める。
【０１３４】
ＭＰＰＫ１２０は、排他ロック解除コマンドをＲＤＫＣ１０Ｒから受信すると、当該排他ロック解除コマンドからＪＯＢ特定情報を取得する（Ｓ３５８）。ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、指定されたＪＯＢのキャッシュスロットのスロット状態を、ダーティに変更する（Ｓ３５９）。例えば、ＭＰＰＫ１２０は、ＪＯＢ管理テーブル２６０から当該ＪＯＢの対象ボリューム及び領域を取得し、それによりキャッシュスロット管理テーブル２７０において対応キャッシュスロットを特定できる。
【０１３５】
ＭＰＰＫ１２０は、さらに、ＪＯＢ特定情報が示しているＪＯＢの排他ロックを解除する（Ｓ３６０）。例えば、ＭＰＰＫ１２０は、ＪＯＢ管理テーブル２６０において当該ＪＯＢを開放することで、排他ロックを解除する。その後、ＭＰＰＫ１２０は、ＲＤＫＣ１０Ｒに、排他ロック解除の応答を返す（Ｓ３６１）。
【０１３６】
次に、ＲＤＫＣ１０Ｒの処理を説明する。ＲＤＫＣ１０Ｒは、ＭＤＫＣ１０Ｍからライトコマンドを受信する。ライトコマンドは、ボリュームＩＤ又は別途定義されたＬＵＮにより対象ボリュームを指定する。ＲＤＫＣ１０Ｒは、ＪＯＢ管理テーブル２６０に、新たなエントリを作成することでＪＯＢを確保する（Ｓ３５１）。具体的な方法は、ＭＤＫＣ１０Ｍによる方法と同様である。
【０１３７】
ＭＰＰＫ１２０は、ＨＡボリュームペア管理テーブル２２０を参照し、指定されたボリュームが、ＨＡボリュームペアのＰＶＯＬ又はＳＶＯＬであるか判定する（Ｓ３５２）。ここでは、指定されたボリュームは、ＳＶＯＬである。
【０１３８】
ＭＰＰＫ１２０は、ＭＤＫＣ１０Ｍに対して、データ転送のＲＥＡＤＹを返し、データ転送を待つ（Ｓ３６２）。ＭＰＰＫ１２０は、ライトデータのためのキャッシュスロットを確保する（Ｓ３６３）。具体的には、ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、フリーのスロットに、新たなデータを設定する。ＭＰＰＫ１２０は、ＶＯＬ管理テーブル２４０を参照して、指定ボリュームに対応するパリティグループを特定できる。
【０１３９】
ＭＰＰＫ１２０は、ＦＥＰＫ１００を使用してライトデータを確保したキャッシュスロットに書き込む（Ｓ３６４）。ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、当該キャッシュスロットのスロットステータスを、ダーティに設定する。キャッシュライトの後、ＭＰＰＫ１２０は、ＭＤＫＣ１０Ｍにライト完了応答を送信する（Ｓ３６５）。
【０１４０】
図１９は、ホスト計算機１８０からＰＶＯＬへのリードコマンドに対する処理のシーケンスを示している。ホスト計算機１８０は、ＭＤＫＣ１０Ｍに対して、仮想ボリューム内の領域へのリードコマンド（ＲＤ  ＣＭＤ）を発行する。ＭＤＫＣ１０Ｍは、仮想ボリュームに対応するＰＶＯＬにおいて、リードコマンドにより指定された領域に対する排他ロックを確保する（Ｓ４０１）。ＭＤＫＣ１０Ｍは、ＰＶＯＬの指定アドレス領域のデータを読み出す（Ｓ４０２）。ＭＤＫＣ１０Ｍは、排他ロックを解除し（Ｓ４０３）、ホスト計算機１８０にリードデータを含むリード完了応答（ＲＤ  ＲＳＰ）を返す。
【０１４１】
図２０は、ホスト計算機１８０からＳＶＯＬへのリードコマンドに対する処理のシーケンスを示している。ホスト計算機１８０は、ＲＤＫＣ１０Ｒに対して、仮想ボリューム内の領域へのリードコマンド（ＲＤ  ＣＭＤ）を発行する。ＲＤＫＣ１０Ｒは、仮想ボリュームに対応するＳＶＯＬの指定アドレス領域のデータを読み出す（Ｓ４５１）。ＲＤＫＣ１０Ｒは、ホスト計算機１８０にリードデータを含むリード完了応答（ＲＤ  ＲＳＰ）を返す。
【０１４２】
図２１は、ホスト計算機１８０からのリードコマンドに対応するＭＤＫＣ１０Ｍ及びＲＤＫＣ１Ｒの処理のフローチャートを示している。図２１において、ＭＤＫＣ１０Ｍは、ステップＳ５０１〜Ｓ５０８を実行し、ＲＤＫＣ１０Ｒは、ステップＳ５０１、Ｓ５０２、Ｓ５０９〜Ｓ５１１を実行する。
【０１４３】
まず、ＭＤＫＣ１０Ｍのリード処理を説明する。ＭＤＫＣ１０Ｍは、ホスト計算機１８０からリードコマンドを受信する。リードコマンドは、ＬＵＮを使用して対象ボリュームを指定する。ＭＤＫＣ１０Ｍは、リードコマンドが指定する仮想ボリュームに対応するボリュームＩＤを、ＬＵパス管理テーブル２３０を参照して決定する。
【０１４４】
ＭＤＫＣ１０Ｍは、ＪＯＢ管理テーブル２６０に、新たなエントリを作成することでＪＯＢを確保する（Ｓ５０１）。具体的には、指定されたボリュームを担当するＭＰＰＫ１２０は、そのＪＯＢ管理テーブル２６０においてフリーのＪＯＢを選択し、そのエントリに、処理種別（ＨＯＳＴ  ＲＥＡＤ）、並びに、リードコマンドが指定するボリューム及びアドレスの情報を書き込む。排他種別カラム２６７のセルは未記入である。図１３において、ＪＯＢ番号が０のエントリが、ホスト計算機１８０からのコマンドによるＰＶＯＬからリード処理を示している。
【０１４５】
ＭＰＰＫ１２０は、ＨＡボリュームペア管理テーブル２２０を参照し、指定されたボリュームが、ＨＡボリュームペアのＰＶＯＬ又はＳＶＯＬであるか判定する（Ｓ５０２）。ここでは、指定されたボリュームは、ＰＶＯＬである。
【０１４６】
次に、ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０を参照して、リードコマンドが指定する記憶領域のデータが、キャッシュされているか判定する（Ｓ５０３）。リードデータがキャッシュされている場合（Ｓ５０３：Ｙ）、ＭＰＰＫ１２０は、当該ＪＯＢの排他ロックを確認する（Ｓ５１２）。
【０１４７】
具体的には、ＭＰＰＫ１２０は、ＪＯＢ管理テーブル２６０を検索し、指定ボリュームかつ指定領域のＲ／Ｗ排他ロックを確保している他のＪＯＢを検索する。Ｒ／Ｗ排他ロックが確保されている場合、当該Ｒ／Ｗ排他ロックの解除を待つ。指定ボリュームかつ指定領域のＲ／Ｗ排他ロックが他のＪＯＢによって確保されていない場合、キャッシュされているリードデータをホスト計算機１８０に送信する（Ｓ５０８）。
【０１４８】
リードデータがキャッシュされていない場合（Ｓ５０３：Ｎ）、ＭＰＰＫ１２０は、当該ＪＯＢの排他ロックを確保する（Ｓ５０３）。具体的には、ＭＰＰＫ１２０は、ＪＯＢ管理テーブル２６０を検索し、指定ボリュームかつ指定領域のＲ／Ｗ排他ロックを確保している他のＪＯＢを検索する。Ｒ／Ｗ排他ロックが確保されている場合、当該Ｒ／Ｗ排他ロックの解除を待つ。
【０１４９】
指定ボリュームかつ指定領域のＲ／Ｗ排他ロックが他のＪＯＢによって確保されていない場合、ＭＰＰＫ１２０は、新規ＪＯＢの排他種別カラム２６７のセルに排他ロックを設定する。処理はリード処理であり、その排他種別は、ＲＤ共有である。
【０１５０】
排他ロックを確保すると、ＭＰＰＫ１２０は、リードデータのためのキャッシュスロットを確保する（Ｓ５０５）。具体的には、ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、フリーのスロットに、新たなデータを設定する。ＭＰＰＫ１２０は、ＶＯＬ管理テーブル２４０を参照して、指定ボリュームに対応するパリティグループを特定できる。
【０１５１】
ＭＰＰＫ１２０は、パリティグループから読み出したライトデータを、確保したキャッシュスロットに書き込む（Ｓ５０６）。ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、当該キャッシュスロットのスロットステータスを、クリーンに設定する。ＭＰＰＫ１２０は、ＪＯＢ管理テーブル２６０を更新して、当該ＪＯＢの排他ロックを解除する（Ｓ５０７）。その後、ＭＰＰＫ１２０は、ホスト計算機１８０に、リードデータを含むリード完了応答を送信する（Ｓ５０８）。
【０１５２】
次に、ＲＤＫＣ１０Ｒのリード処理を説明する。ＪＯＢの排他ロックを実行しない点を除き、ＲＤＫＣ１０Ｒの処理はＭＤＫＣ１０Ｍの処理と同様である。ステップＳ５０９〜Ｓ５１１は、それぞれ、ステップＳ５０３、Ｓ５０５、Ｓ５０６に対応する。ＲＤＫＣ１０Ｒは、ＳＶＯＬのリードデータをホスト計算機１８０に送信する。
【０１５３】
上記例において、ＨＡボリュームペアは、ＰＡＩＲ状態であって、同期している。図２２は、ＨＡボリュームペアのペア状態と、ＰＶＯＬ及びＳＶＯＬへのＩ／Ｏアクセスにおける排他種別との関係を示している。ペア状態として、ＰＡＩＲ状態とＰＳＵＳ（Ｐａｉｒ  ＳＵＳｐｅｎｄ）状態とが示されている。ＰＡＩＲ状態において、ＰＶＯＬとＳＶＯＬは同期しており、一方の更新は他方に反映される。
【０１５４】
ＰＡＩＲ状態において、上述のように、ＰＶＯＬに対しては、ホスト計算機１８０からのライトアクセス及びリードアクセス、並びに、ＲＤＫＣ１０Ｒからのライトアクセスが存在する。これらのアクセスに対しては、ＲＤ共有及びＲ／Ｗ排他の排他ロックが実行される。同様に、ＳＶＯＬに対しては、ホスト計算機１８０からのライトアクセス及びリードアクセス、並びに、ＭＤＫＣ１０Ｍからのライトアクセスが存在する。ＳＶＯＬへのアクセスに対しては、排他ロックは実行されない。
【０１５５】
ＰＳＵＳ状態において、ＳＶＯＬの更新は禁止されており、ＰＶＯＬとＳＶＯＬとは同期していない。ＭＤＫＣ１０Ｍは、ホスト計算機１８０からのアクセスを処理する。ＭＤＫＣ１０Ｍは、ＰＶＯＬに対して、ホスト計算機１８０からのライトアクセス及びリードアクセスを受け付ける。
【０１５６】
ＭＤＫＣ１０Ｍは、ホスト計算機１８０からのライトコマンドの処理において、ＲＤＫＣ１０Ｒにライトコマンドを送信しない。ＭＤＫＣ１０Ｍは、ホスト計算機１８０からのライトアクセス及びリードアクセスに対しては、それぞれ、Ｒ／Ｗ排他及びＲＤ共有の排他ロックを実行する。
【０１５７】
一方、ＰＳＵＳ状態において、ＲＤＫＣ１０Ｒは、ホスト計算機１８０からライトコマンド又はリードを受信すると、ＭＤＫＣ１０Ｒに転送する。この時にＲＤＫＣはキャッシュメモリ１３１にデータを格納する必要はなく、バッファ１１３に格納した後、ＭＤＫＣ１０Ｒに転送する。ライト処理において、ＲＤＫＣ１０Ｒは、ＭＤＫＣ１０Ｒからライト完了応答を受信すると、ホスト計算機１８０にライト完了応答を返す。リード処理において、ＲＤＫＣ１０Ｒは、ＭＤＫＣ１０Ｍからリードデータを受信し、ホスト計算機１８０に送信する。
【０１５８】
ＭＰＰＫ１２０において発生した障害に対応する処理の例を説明する。ホスト計算機１８０からのライトコマンドを処理中にＭＰＰＫ１２０において障害が発生した場合、ＰＶＯＬとＳＶＯＬとが同期していない可能性がある。本例において、障害による性能低下を防ぐと共に、他のＭＰＰＫ１２０が、ＲＤＫＣ１０ＲのＳＶＯＬにライトコマンドを送信することによって、ＨＡボリュームペアの同一性を確実に維持する。
【０１５９】
ＳＶＯＬへのライトコマンドの送信は、例えば、障害を起こしたＭＰＰＫ１２０（障害ＭＰＰＫ１２０）を検知した他のＭＰＰＫ１２０（障害検知ＭＰＰＫ１２０）、及び／又は、障害ＭＰＰＫ１２０からＰＶＯＬの担当を承継した他のＭＰＰＫ１２０（承継ＭＰＰＫ１２０）が行うことができる。
【０１６０】
上述のように、キャッシュスロット管理テーブル２７０のスロットステータスが二重書き中の場合、ＳＶＯＬへライトデータが書き込まれているか否かは、ＭＤＫＣ１０Ｍにとって不明である。したがって、ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０を参照して、ライトコマンドを送信すべきＪＯＢを特定できる。
【０１６１】
障害検知ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、障害ＭＰＰＫ１２０が担当していたＰＶＯＬのエントリであって、スロットステータスが二重書き中であるエントリを検索する。これらは、ライトコマンドをＳＶＯＬに送信すべきエントリである。障害検知ＭＰＰＫ１２０は、見つけたエントリにおいて、スロットステータスを、「ライトコマンド送信要」に変更する。
【０１６２】
例えば、各承継ＭＰＰＫ１２０が、キャッシュスロット管理テーブル２７０における上記変更を行っても良い。各承継ＭＰＰＫ１２０は、担当を承継したＰＶＯＬのエントリのみ更新する。
【０１６３】
図２３は、承継ＭＰＰＫ１２０が、ＳＶＯＬへのライトコマンドを送信する処理のフローチャートである。図２３は、承継ＭＰＰＫ１２０による、承継したＰＶＯＬへのライト処理又リード処理内の一部のステップを示している。
【０１６４】
本例において、承継ＭＰＰＫ１２０は、障害ＭＰＰＫ１２０から承継したＰＶＯＬのリード／ライト処理において、必要なライトコマンドをＳＶＯＬに送信する。ライト処理は、ホストライト処理又はＤＫＣ間ライト処理である。
【０１６５】
図２３に示しているように、承継ＭＰＰＫ１２０は、今回コマンドに対応するＪＯＢの排他ロックを確保し（Ｓ５５１）、さらに、キャッシュスロットを確保する（Ｓ５５２）。承継ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、ライトコマンドをＳＶＯＬに送信すべきエントリが存在するか検索する（Ｓ５５３）。
【０１６６】
例えば、承継ＭＰＰＫ１２０は、当該ＰＶＯＬのエントリであって、スロットステータスが「ライトコマンド送信要」であるエントリを検索する。または、ＭＰＰＫ１２０は、今回のコマンドで指定されている領域の一部又は全部を含み、スロットステータスが「ライトコマンド送信要」であるエントリを検索してもよい。
【０１６７】
検索したエントリが存在する場合（Ｓ５５３：Ｙ）、承継ＭＰＰＫ１２０は、ライトコマンドをＲＤＫＣ１０Ｒに発行し、データ転送のＲＥＡＤＹ応答を待つ（Ｓ５５４）。ＲＥＡＤＹ応答を受信すると、承継ＭＰＰＫ１２０は、ＲＤＫＣ１０Ｒに、キャッシュスロットに格納されているライトデータを転送し、ライト完了の応答を待つ（Ｓ５５５）。
【０１６８】
ＲＤＫＣ１０Ｒからライト完了応答を受信すると、承継ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、当該キャッシュスロットのスロットステータスを、ダーティに変更する（Ｓ５５６）。その後、承継ＭＰＰＫ１２０は、ホスト計算機１８０から今回受信したコマンドに対応する処理を再開する。
【０１６９】
承継ＭＰＰＫ１２０とは異なるＭＰＰＫ１２０、例えば、障害検知ＭＰＰＫ１２０が、キャッシュスロット管理テーブル２７０を参照して、必要なライトコマンドをＲＤＫＣ１０Ｒに送信してもよい。ＭＰＰＫ１２０は、キャッシュスロット管理テーブル２７０において、「ライトコマンド送信要」のエントリを順次選択してＳＶＯＬへのライト処理を実行する。障害検知ＭＰＰＫ１２０と承継ＭＰＰＫ１２０の双方又は一方のみが、ＳＶＯＬへのライト処理を実行してよい。
【０１７０】
ＳＶＯＬへのライト処理において、ＲＤＫＣ１０ＲからＭＤＫＣ１０Ｍに対するＪＯＢ排他ロック解除コマンドの他の送信方法を説明する。上記構成例において、ＲＤＫＣ１０Ｒは、排他ロック解除コマンドをライトデータと別にＭＤＫＣ１０Ｍに送信する。以下に説明する例において、ＲＤＫＣ１０Ｒは、ライトデータと共に排他ロック解除コマンドをＭＤＫＣ１０Ｍに送信する。これにより、トラヒックを低減する。
【０１７１】
図２４は、ライトデータと共に排他ロック解除コマンドを送信するシーケンスを示している。以下においては、図１６に示しているシーケンス図との相違点を主に説明する。図２４において、ＭＤＫＣ１０Ｍが排他ロックを確保し（Ｓ２５１）、データ転送のＲＥＡＤＹ応答（ＸＦＲ  ＲＤ）をＲＤＫＣ１０Ｒに返す。
【０１７２】
ＲＤＫＣ１０Ｒは、ライトデータ（ＷＲ  ＤＡＴ）と共に、排他ロック解除コマンドをＭＤＫＣ１０Ｍに送信する。具体的には、ＲＤＫＣ１０Ｒは、複数の部分に分けてライトデータを送信する場合、最後の部分の送信において排他ロック解除コマンドを共に送信する。
【０１７３】
ＭＤＫＣ１０Ｍは、ＲＤＫＣ１０Ｒからライトデータ（ＷＲ  ＤＡＴ）と共に排他ロック解除コマンドを受信する。ＭＤＫＣ１０Ｍは、受信したライトデータを、ＰＶＯＬ内の指定された領域に書き込む（Ｓ２５２）。ＭＤＫＣ１０Ｍは、ＰＶＯＬ内の領域へのデータの書き込みが完了すると、確保していた排他ロックを解除し（Ｓ２５７）する。その後、ＭＤＫＣ１０Ｍは、ＲＤＫＣ１０Ｒに、ライト完了応答（ＷＲ  ＲＳＰ）を返す。
【０１７４】
本シーケンスは、ＦＥＰＫ１００がライトコマンドとライトデータとを自動転送する機能を有していない構成において有効である。本シーケンスにより、ＭＤＫＣ１０ＭとＲＤＫＣ１０Ｒとの間の通信回数を低減できる。
【０１７５】
上記構成例において、ＲＤＫＣ１０Ｒは、ＪＯＢの排他ロックを実行しない。以下に説明するように、ＲＤＫＣ１０Ｒも、ＭＤＫＣ１０Ｍのように、ＪＯＢ排他ロックを実行してもよい。これにより、強固な順序保証によるより高い信頼性が得られる。
【０１７６】
図２５は、ＲＤＫＣ１０ＲによるＪＯＢ排他ロックを含む、ホスト計算機１８０からＰＶＯＬへのライト処理のシーケンスを示している。以下においては、図１５が示しているシーケンスとの相違点を主に説明する。
【０１７７】
ＲＤＫＣ１０Ｒは、ＭＤＫＣ１０Ｍからライトコマンド（ＷＲ  ＣＭＤ）を受信すると、ライトコマンドにより指定された領域に対する排他ロックを確保する（Ｓ２０７）。ＲＤＫＣ１０Ｒは、データ転送のＲＥＡＤＹ応答（ＸＦＲ  ＲＤ）をＭＤＫＣ１０Ｍに返し、ＭＤＫＣ１０Ｍからライトデータ（ＷＲ  ＤＡＴ）を受信する。ＲＤＫＣ１０Ｒは、受信したライトデータを、ＳＶＯＬ内のアドレス領域に書き込む（Ｓ２０３）。
【０１７８】
ＲＤＫＣ１０Ｒは、ＳＶＯＬ内のアドレス領域へのデータの書き込みが完了すると、ライト完了応答（ＷＲ  ＲＳＰ）をＭＤＫＣ１０Ｍに返す。さらに、ＲＤＫＣ１０Ｒは、確保していた排他ロックを解除する（Ｓ２０９）。
【０１７９】
図２６は、ＲＤＫＣ１０ＲによるＪＯＢ排他ロックを含む、ホスト計算機１８０からＳＶＯＬへのライト処理のシーケンスを示している。以下においては、図１６が示しているシーケンスとの相違点を主に説明する。
【０１８０】
ホスト計算機１８０は、ＲＤＫＣ１０Ｒに対して、仮想ボリューム内の領域へのライトコマンド（ＷＲ  ＣＭＤ）を発行する。ＲＤＫＣ１０Ｒは、仮想ボリュームに対応するＳＶＯＬにおいて、ライトコマンドにより指定された領域に対する排他ロックを確保する（Ｓ２５７）。
【０１８１】
その後のＲＤＫＣ１０Ｒの実行ステップは、ＳＶＯＬ内の指定された領域にライトデータを書き込むステップ（Ｓ２５３）まで、図１６が示しているシーケンス図と同様である。ＲＤＫＣ１０Ｒは、ライト完了応答（ＷＲ  ＲＳＰ）をホスト計算機１８０に返した後、確保していた排他ロックを解除する（Ｓ２５８）。次に、ＲＤＫＣ１０Ｒは、ＪＯＢを指定して、排他ロック解除コマンドをＭＤＫＣ１０Ｍに送信する。
【０１８２】
図２７は、図２５及び図２６のシーケンスに対応する、ホスト計算機１８０からのライトコマンドに対するＭＤＫＣ１０Ｍ及びＲＤＫＣ１０Ｒの処理のフローチャートを示している。以下においては、図１７に示しているフローチャートとの相違点を主に説明する。図１７のフローチャートとの相違点は、ＲＤＫＣ１０Ｒによる排他ロックの確保（Ｓ３２１）と、排他ロックの解除（Ｓ３２２）である。
【０１８３】
ＲＤＫＣ１０Ｒは、ホスト計算機１８０にＲＥＡＤＹ応答を返す前に、ステップＳ３２１において、新たなＪＯＢの排他ロックを確保する。排他ロックを確保する方法は、ステップＳ３０３におけるＭＤＫＣ１０Ｍの方法と同様である。排他種別は、Ｒ／Ｗ排他である。
【０１８４】
ＲＤＫＣ１０Ｒは、ホスト計算機１８０へライト完了応答を返した後、ステップＳ３２２において、排他ロックを解除する。排他ロックを解除する方法は、ステップＳ３１１におけるＭＤＫＣ１０Ｍの方法と同様である。
【０１８５】
図２８は、図２５及び図２６のシーケンスに対応する、ＭＤＫＣ１０Ｍ、ＲＤＫＣ１０Ｒ間のライトコマンドに対するＭＤＫＣ１０Ｍ及びＲＤＫＣ１０Ｒの処理のフローチャートを示している。以下においては、図１８に示しているフローチャートとの相違点を主に説明する。図１８のフローチャートとの相違点は、ＲＤＫＣ１０Ｒによる排他ロックの確保（Ｓ３７１）と、排他ロックの解除（Ｓ３７２）である。
【０１８６】
ＲＤＫＣ１０Ｒは、ＭＤＫＣ１０ＭにＲＥＡＤＹ応答を返す前に、ステップＳ３７１において、新たなＪＯＢの排他ロックを確保する。排他ロックを確保する方法は、ステップＳ３５３におけるＭＤＫＣ１０Ｍの方法と同様である。排他種別は、Ｒ／Ｗ排他である。
【０１８７】
ＲＤＫＣ１０Ｒは、ＭＤＫＣ１０Ｍへライト完了応答を返した後、ステップＳ３７２において、排他ロックを解除する。排他ロックを解除する方法は、ステップＳ３６０におけるＭＤＫＣ１０Ｍの方法と同様である。ＲＤＫＣ１０Ｒは、ホスト計算機１８０からのリードコマンドに対する処理においても、排他ロックを実行してもよい。その場合、ＲＤＫＣ１０Ｒのリード処理は、ＭＤＫＣ１０Ｍによる排他ロックを伴うリード処理と同様である。
【０１８８】
ＲＤＫＣでこのようにＳＶＯＬへのＩ／ＯアクセスにおいてＪＯＢ排他制御を行う事により信頼性を高めることができる。
【０１８９】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１９０】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。
【０１９１】
なお、本実施例ではストレージ装置がストレージ装置及びボリュームを仮想化しているが、仮想化専用装置やホストのパスマネージャ側の機能により、ストレージ装置及びボリュームを仮想化してもよい。本実施例は冗長化（ＨＡ）構成しているＡｃｔｉｖｅ−Ａｃｔｉｖｅ型の複数のボリュームを備える複数のストレージ装置に対して適用可能である。
【要約】
第１のストレージ装置は第１の論理ボリュームを提供し、第２のストレージ装置は第１の論理ボリュームとペア構成を組む第２の論理ボリュームを提供し、第１又は第２の論理ボリュームへのライトデータをホスト計算機から受領した場合、第１、第２の論理ボリュームの順にライトデータを二重書きし、第１のストレージ装置は第１の論理ボリュームへのリード要求をホスト計算機から受領した場合、リード要求のあった記憶領域が二重書き中でない場合、第１の論理ボリュームからデータを読み出してホスト計算機に応答し、第２のストレージ装置は第２の論理ボリュームへのリード要求をホスト計算機から受領した場合、第２の論理ボリュームからデータを読み出してホスト計算機に応答するストレージシステムを提供する。【図１Ａ】
0005620614.tif 000002
【図１Ｂ】
0005620614.tif 000003
【図２】
0005620614.tif 000004
【図３】
0005620614.tif 000005
【図４】
0005620614.tif 000006
【図５】
0005620614.tif 000007
【図６】
0005620614.tif 000008
【図７】
0005620614.tif 000009
【図８】
0005620614.tif 000010
【図９】
0005620614.tif 000011
【図１０】
0005620614.tif 000012
【図１１】
0005620614.tif 000013
【図１２】
0005620614.tif 000014
【図１３】
0005620614.tif 000015
【図１４】
0005620614.tif 000016
【図１５】
0005620614.tif 000017
【図１６】
0005620614.tif 000018
【図１７】
0005620614.tif 000019
【図１８】
0005620614.tif 000020
【図１９】
0005620614.tif 000021
【図２０】
0005620614.tif 000022
【図２１】
0005620614.tif 000023
【図２２】
0005620614.tif 000024
【図２３】
0005620614.tif 000025
【図２４】
0005620614.tif 000026
【図２５】
0005620614.tif 000027
【図２６】
0005620614.tif 000028
【図２７】
0005620614.tif 000029
【図２８】
0005620614.tif 000030