(57)【要約】【課題】通信装置相互が複数の通信経路で接続されている場合に、各通信経路相互間での応答時間差を抑止すると共に、通信経路の送信レート低下を防止する。【解決手段】各ストレージ装置１，２には、送信経路Ａ，Ｂ毎に送信キュー３０６ａ，３０６ｂが設けられている。ストレージ装置１は、各送信キュー３０６ａ，３０６ｂに同じ要求データを格納して、各データを各送信経路Ａ，Ｂを介して、相手方のストレージ装置２へ送信する（Ｓ８１１，８１２）。相手方のストレージ装置２は、先着の要求データ又は応答データの履歴を受信履歴情報テーブル３００に格納し（Ｓ８１７）、後着の要求データを廃棄する（Ｓ９０３，９０４）。また、送信元のストレージ装置１は、要求データに対する応答データを１つでも受信すると、送信キュー３０６ａ，３０６ｂを検索して、いずれかの送信キューに要求データが残っていれば、これを削除する（Ｓ９０９）。【選択図】  図３９
2005318073.tif 000002
【特許請求の範囲】
【請求項１】
識別子が含まれている送信データを、異なる複数の通信経路を介して、他の通信装置に送信する通信装置において、
複数の前記通信経路毎に設けられ、前記送信データを一時的に記憶しておく送信データ記憶領域と、
複数の前記送信データ記憶領域のそれぞれに、前記送信データを格納する冗長化手段と、
複数の前記送信データ記憶領域のそれぞれに格納されている前記送信データを、異なる複数の前記通信経路を介して、前記他の通信装置へ送信すると共に、該他の通信装置から、複数の該通信経路を介して、識別子を含む受信データを受信する送受信制御手段と、
前記送受信制御手段が受信した前記受信データ中の前記識別子と、前記送信データ中の前記識別子とを比較し、該受信データが該送信データに対する受信データであると判断される場合には、複数の前記送信データ記憶領域のいずれかに、前記受信データの前記識別子に対応する識別子を含む前記送信データが格納されているかを検索して、該送信データが格納されているときには該送信データを削除する冗長受信処理手段と、
を備えていることを特徴とする通信装置。
【請求項２】
識別子が含まれている送信データを、異なる複数の通信経路を介して、他の通信装置に送信する通信装置において、
複数の前記通信経路毎に設けられ、前記送信データを一時的に記憶しておく送信キューと、前記他の通信装置との通信を制御するプロセッサと、を備え、
前記プロセッサは、
複数の前記送信キューのそれぞれに、前記送信データを格納する冗長化処理工程と、
複数の前記送信キューのそれぞれに格納されている前記送信データを、異なる複数の前記通信経路を介して、前記他の通信装置へ送信すると共に、該他の通信装置から、複数の該通信経路を介して、識別子を含む受信データを受信する送受信制御工程と、
前記送受信制御工程で受信した前記受信データ中の前記識別子から、該受信データが前記送信データに対する受信データであると判断される場合には、複数の前記送信キューのいずれかに、該受信データの該識別子に対応する識別子を含む前記送信データが格納されているかを検索して、該送信データが格納されているときには該送信データを削除する冗長受信処理工程と、
を実行することを特徴とする通信装置。
【請求項３】
請求項２に記載の通信装置において、
前記送受信制御工程で受信した受信データの履歴を記憶する受信履歴情報テーブルを備え、
前記冗長受信処理工程では、前記送受信制御工程で受信した前記受信データの識別子から、同一の受信データが前記受信履歴情報テーブルに既に記憶されているか否かを判断し、同一の受信データが記憶されていれば、後から受信した受信データを削除し、同一の受信データが記憶されていなければ、該受信データの情報を前記受信履歴情報テーブルに記憶する、
ことを特徴とする通信装置。
【請求項４】
請求項３に記載の通信装置において、
前記受信履歴情報テーブルには、受信データの情報を保持しておくタイムアウト値の欄が設定されており、
前記プロセッサは、前記受信履歴情報テーブルのタイムアウト値を一定時間ごとに減少させ、該タイムアウト値が０になると、該タイムアウト値が０になった受信データの情報を前記受信履歴情報テーブルから削除する登録処理工程を実行する、
ことを特徴とする通信装置。
【請求項５】
請求項３及び４のいずれか一項に記載の通信装置において、
前記受信履歴情報テーブルには、複数の前記通信経路に対応した数の初期値が設定されるカウンタ値の欄が設定されており、
前記プロセッサは、前記受信履歴情報テーブルのカウンタ値を同一の受信データを受信する毎に1つずつ減少させ、複数の前記通信回路の数分減少すると、該受信データの情報を前記受信履歴情報テーブルから削除する登録処理工程を実行する、
ことを特徴とする通信装置。
【請求項６】
請求項２から５のいずれか一項に記載の通信装置において、
データを記憶する記憶装置を備えている、
ことを特徴とする通信装置。
【請求項７】
請求項６に記載の通信装置において、
前記プロセッサは、前記送受信制御工程の実行により、前記記憶装置に記憶された又は記憶されるデータを前記他の通信装置にライトデータとして送信するリモートコピー処理工程を実行する、
ことを特徴とする通信装置。
【請求項８】
請求項６及び７のいずれか一項に記載の通信装置としてのストレージ装置を少なくとも２台備え、
少なくとも2台の前記ストレージ装置のうち、一方のストレージ装置に対する他方のストレージ装置が前記他の通信装置を成し、該一方のストレージ装置と該他方のストレージ装置とが複数の前記通信経路で接続されている、
ことを特徴とするストレージシステム。
【請求項９】
請求項８に記載のストレージシステムにおいて、
前記一方のストレージ装置と前記他方のストレージ装置との間に複数の前記通信経路を開設するためのデータを、該一方のストレージ装置及び該他方のストレージ装置に対して送信する管理装置を備えている、
ことを特徴とするストレージシステム。
【請求項１０】
請求項２から６のいずれか一項に記載の通信装置としてのホストと、
請求項６及び７のいずれか一項に記載の通信装置としてのストレージ装置と、
前記ストレージ装置が前記他の通信装置を成し、前記ホストと前記ストレージ装置とが複数の前記通信経路で接続されている、
ことを特徴とするストレージシステム。
【請求項１１】
データ識別子が含まれている送信データを、異なる複数の通信経路を介して、第１ストレージ装置から第二ストレージ装置に送信するストレージシステムにおいて、
前記第１ストレージ装置と前記第２ストレージ装置との間に複数の前記通信経路を開設するためのデータを、該第1ストレージ装置及び該第2ストレージ装置に対して送信する管理装置を備え、
前記第１ストレージ装置は、複数の前記通信経路毎に設けられ、前記送信データを一時的に記憶しておく送信キューと、前記第２ストレージ装置との通信を制御するプロセッサと、を有し、
前記プロセッサは、
複数の前記通信経路毎に設けられている前記送信キューのそれぞれに、前記送信データを格納する冗長化処理工程と、
複数の前記送信キューのそれぞれに格納されている前記送信データを、異なる複数の前記通信経路を介して、前記第２ストレージ装置へ送信すると共に、該第２ストレージ装置から、複数の該通信経路を介して、識別子を含む受信データを受信する送受信制御工程と、
前記送受信制御工程で受信した前記受信データ中の前記識別子から、該受信データが前記送信データに対する受信データであると判断される場合には、複数の前記送信キューのいずれかに、該受信データの該識別子に対応する識別子を含む前記送信データが格納されているかを検索して、該送信データが格納されているときには該送信データを削除する冗長受信処理工程と、
を実行することを特徴とするストレージシステム。
【請求項１２】
データ識別子が含まれている送信データを、異なる複数の通信経路を介して、一方の通信装置から他方の通信装置に送信する通信方法において、
複数の前記通信経路毎に設けられている送信キューのそれぞれに、前記送信データを格納する冗長化処理工程と、
複数の前記送信キューのそれぞれに格納されている前記送信データを、異なる複数の前記通信経路を介して、前記他方の通信装置へ送信すると共に、該他の通信装置から、複数の該通信経路を介して、識別子を含む受信データを受信する送受信制御工程と、
前記送受信制御工程で受信した前記受信データ中の前記識別子から、該受信データが前記送信データに対する受信データであると判断される場合には、複数の前記送信キューのいずれかに、該受信データの該識別子に対応する識別子を含む前記送信データが格納されているかを検索して、該送信データが格納されているときには該送信データを削除する冗長受信処理工程と、
を含むことを特徴とする通信方法。
【請求項１３】
請求項１２に記載の通信方法において、
前記送受信制御工程で受信した受信データの履歴を記憶する受信履歴情報テーブルを予め準備しておき、
前記冗長受信処理工程では、前記送受信制御工程で受信した前記受信データの識別子から、同一の受信データが前記受信履歴情報テーブルに既に記憶されているか否かを判断し、同一の受信データが記憶されていれば、後から受信した受信データを削除し、同一の受信データが記憶されていなければ、該受信データの情報を前記受信履歴情報テーブルに記憶する、
ことを特徴とする通信方法。
【請求項１４】
請求項１３に記載の通信方法において、
前記受信履歴情報テーブルには、受信データの情報を保持しておくタイムアウト値の欄が設定されており、
前記受信履歴情報テーブルのタイムアウト値を一定時間ごとに減少させ、該タイムアウト値が０になると、該タイムアウト値が０になった受信データの情報を前記受信履歴情報テーブルから削除する登録処理工程を含む、
ことを特徴とする通信方法。
【請求項１５】
請求項１３及び１４のいずれか一項に記載の通信方法において、
前記受信履歴情報テーブルには、複数の前記通信経路に対応した数の初期値が設定されるカウンタ値の欄が設定されており、
前記受信履歴情報テーブルのカウンタ値を同一の受信データを受信する毎に1つずつ減少させ、複数の前記通信回路の数分減少すると、該受信データの情報を前記受信履歴情報テーブルから削除する登録処理工程を含む、
ことを特徴とする通信方法。
【請求項１６】
請求項１２から１５のいずれか一項に記載の通信方法において、
前記一方の通信装置及び前記他方の通信装置は、それぞれ、記憶装置を備えているストレージ装置を成し、
前記一方の通信装置としての前記ストレージ装置は、前記送受信制御工程の実行により、前記記憶装置に記憶された又は記憶されるデータを、前記他方の通信装置としての前記ストレージ装置にライトデータとして送信するリモートコピー処理工程を実行する、
ことを特徴とする通信方法。
【請求項１７】
データ識別子が含まれている送信データを、異なる複数の通信経路を介して、他の通信装置に送信する通信装置の動作プログラムにおいて、
複数の前記通信経路毎に設けられている送信キューのそれぞれに、前記送信データを格納する冗長化処理工程と、
複数の前記送信キューのそれぞれに格納されている前記送信データを、異なる複数の前記通信経路を介して、前記他の通信装置へ送信すると共に、該他の通信装置から、複数の該通信経路を介して、識別子を含む受信データを受信する送受信制御工程と、
前記送受信制御工程で受信した前記受信データ中の前記識別子から、該受信データが前記送信データに対する受信データであると判断される場合には、複数の前記送信キューのいずれかに、該受信データの該識別子に対応する識別子を含む前記送信データが格納されているかを検索して、該送信データが格納されているときには該送信データを削除する冗長受信処理工程と、
をコンピュータに実行させることを特徴とする通信装置の動作プログラム。
【請求項１８】
請求項１７に記載の通信装置の動作プログラムにおいて、
前記送受信制御工程で受信した受信データの履歴を記憶する受信履歴情報テーブルを予め準備しておき、
前記冗長受信処理工程では、受信データの履歴を記憶する受信履歴情報テーブルに、前記送受信制御工程で受信した前記受信データの識別子から同一の受信データが既に記憶されているか否かを判断し、同一の受信データが記憶されていれば、後から受信した受信データを削除し、同一の受信データが記憶されていなければ、該受信データの情報を前記受信履歴情報テーブルに記憶する、
ことを特徴とする通信装置の動作プログラム。
【請求項１９】
請求項１８に記載の通信装置の動作プログラムにおいて、
前記受信履歴情報テーブルには、受信データの情報を保持しておくタイムアウト値の欄が設定されており、
前記受信履歴情報テーブルのタイムアウト値を一定時間ごとに減少させ、該タイムアウト値が０になると、該タイムアウト値が０になった受信データの情報を前記受信履歴情報テーブルから削除する登録処理工程、
をコンピュータに実行させることを特徴とする通信装置の動作プログラム。
【請求項２０】
請求項１８及び１９のいずれか一項に記載の通信装置の動作プログラムにおいて、
前記受信履歴情報テーブルには、複数の前記通信経路に対応した数の初期値が設定されるカウンタ値の欄が設定されており、
前記受信履歴情報テーブルのカウンタ値を同一の受信データを受信する毎に1つずつ減少させ、複数の前記通信回路の数分減少すると、該受信データの情報を前記受信履歴情報テーブルから削除する登録処理工程
をコンピュータに実行させることを特徴とする通信装置の動作プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、識別子が含まれている送信データを、異なる複数の通信経路を介して、他の通信装置に送信する通信装置、その動作プログラム、及び通信方法に関する。
【背景技術】
【０００２】
企業、および組織の基幹業務へ情報技術が浸透するのに伴い、企業、および組織が保有する電子データの量と重要性が増している。このような企業、および組織が、地震、停電、およびテロなどの大規模災害が発生した場合にも、保有するデータを保護でき、かつ迅速に修復できるためには、データの正確なコピーを保持することが必要である。
【０００３】
通常、このようなデータのコピーでは、データを記憶する複数のストレージ装置相互間で、リモートコピー技術を用いて、一のストレージ装置のデータを他のストレージ装置にコピーしている。複数のストレージ装置は、災害の被害を局所化するため、地理的に離れた（たとえば数百マイル）拠点にそれぞれ設置される。各拠点には、データを記憶するストレージ装置のほか、このストレージ装置にアクセスするホストが設置される。また、各拠点間は、は専用線、広域イーサネット、あるいはインターネットなどの広域ネットワーク（ＷＡＮ）で接続される。このリモートコピー技術では、一般的に、データの原本を記憶するストレージ装置をマスタストレージ装置、マスタストレージ装置と接続されたホストをマスタホスト、マスタストレージ装置やマスタホストが設置された拠点をマスタサイトと言われる。また、データの複製を記憶するストレージ装置をリモートストレージ装置、リモートストレージ装置と接続されたホストをリモートホスト、リモートストレージ装置やリモートホストが設置された拠点をリモートサイトと言われる。
【０００４】
以上のリモートコピーの種類としては、同期リモートコピーと非同期リモートコピーがある。これらの違いは、マスタストレージ装置が、マスタホストからの書き込み処理要求を受けてから、マスタホストへ応答するまでに行う処理にある。同期リモートコピーでは、マスタストレージ装置が、マスタホストのデータベース等のアプリケーションからの書き込み処理要求を受けると、リモートストレージへ書き込みデータをコピーした後に、ホストへ応答する。一方、非同期リモートコピーでは、マスタストレージ装置が、マスタホストの書き込み処理要求を受けると、書き込みデータをマスタストレージ装置のメモリに待避したら、すぐにマスタホストへ応答する。その後、マスタストレージ装置が、メモリに待避した書き込みデータをリモートストレージへリコピーし、待避データを消去する。
【０００５】
また、リモートコピーシステムの拠点間通信には、通常、重要なデータに欠損が生じるのを防止するため、以下の非特許文献１に記載されている、ＴＣＰ（Transmission Control Protocol）／ＩＰ（Internet  Protocol）などの信頼性を保証するプロトコルが用いられる。ＴＣＰ／ＩＰでは、具体的には、送信側装置が、送信データのコピーをメモリに保持しておき、受信側装置から送達確認通知を受信するまで、再送を繰り返すことで信頼性を確保する。
【０００６】
しかし、ＴＣＰ／ＩＰ通信を行うと、以下の非特許文献２に記載されているＴＣＰの輻輳制御の特性により、リモートコピーが滞留する場合がある。その特性とは、送信側装置は、ネットワークの輻輳やネットワークを構成する機器（ＬＡＮやＷＡＮを構成するスイッチ、ルータ等）の故障に伴うパケット廃棄発生時に、送信レートを大幅に下げた後、パケットを再送するという特性である。この特性のため、輻輳・故障時に、送信レートの低減によるスループット低下、および再送による応答時間増大が発生する。これらのスループット低下・応答時間増大の発生に伴い、リモートコピーの通信が滞留する。
【０００７】
このようにリモートコピーの通信が滞留すると、マスタホストの書き込み処理要求に対する、マスタストレージ装置のマスタホストへの応答が滞り、マスタホストのアプリケーションが停止する恐れがある。具体的には、上記の同期リモートコピーでは、マスタストレージ装置が、リモートコピー後にマスタホストへ応答するので、リモートコピー通信が滞留すると、マスタホストへの応答が滞る。一方、非同期リモートコピーでは、リモートコピー通信が滞留すると、データ送信量が減少し、マスタストレージ装置のメモリが未消去データで飽和する。その結果、データをメモリに待避できなくなり、マスタホストへの応答が滞る。このようにマスタホストへの応答が滞ると、マスタホストが実行するデータベース等の重要なアプリケーションが、書き込み処理を完了できずタイムアウトし、停止する恐れがある。
【０００８】
そこで、リモートコピーシステムの拠点間通信において、ネットワークの輻輳・故障時の、ＴＣＰ／ＩＰの特性に伴うスループット低下および応答時間増大を原因とした、リモートコピー通信の滞留を防ぐ技術が重要になる。
【０００９】
ネットワークを構成する機器の故障に対応する技術は、例えば、以下の特許文献１に記載されている。当該技術は、物理的な複数のネットワーク回線を論理的に一つの回線として上位層（アプリケーションなど）に提供する制御装置（例えば、１０／１００ＭｂｐｓのＥｔｈｅｒｎｅｔ回線を複数用いて冗長化を実現した装置（以下、回線冗長化装置と呼ぶ））において、ネットワーク回線の冗長化を実現するための方法として、送信時には、管理下の全ネットワーク回線の故障情報を参照した後、故障していない回線すべてに同一データを送信し、受信時には、複数のネットワーク回線から受信する複数の同一データの１つ（大抵は最も先に到着した正常データ）を上位層（アプリケーション）に通知し、他のデータは破棄する方法である。
【００１０】
【非特許文献１】Ｊｏｈｎ  Ｌ．Ｈｕｆｆｅｒｄ著「ｉＳＣＳＩ：Ｔｈｅ  Ｕｎｉｖｅｒｓａｌ  Ｓｔｏｒａｇｅ  Ｃｏｎｎｅｃｔｉｏｎ」Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ社出版、２００３、Ｐ．５２−５５、Ｆｉｇｕｒｅ４−３
【非特許文献２】ＲＦＣ２５８１（第３-７頁）
【特許文献１】特開２００３−１２４９６４号公報（図１、図３）
【発明の開示】
【発明が解決しようとする課題】
【００１１】
特許文献１に記載の技術では、通信に使用する複数のネットワークのうち、故障していないネットワークの全てに、送信レートの差に関係なく同一データを送信するので、送信レートの低下したネットワークへのデータ送出待ち時間が、送信レートの低下していないネットワークへのデータ送出待ち時間に比べて大きくなる。そのため、送信レートの低下していないネットワークのデータが連続して先着するようになり、複数のネットワークの応答時間に大きな差が生じる。このような状況で、送信レートの高いネットワークが故障してデータの送信を停止すると、リモートコピー通信は、送信レートの下がったネットワークからデータが到着するまで長時間待たなければならず、応答時間の増大が発生して、リモートコピーが滞留する。その結果、ホストのデータベース等の重要なアプリケーションが停止する場合がある。アプリケーションが停止すると、企業や組織にとって重要なデータが失われ、企業および組織が多大な損害をこうむる恐れがあるという問題点がある。
【００１２】
また、特許文献１に記載の技術では、前述したように、故障していないネットワークの全てに、送信レートの差に関係なく同一データを送信するので、ネットワーク内のデータ量が多くなり、このネットワークの送信レートが低下してしまうという問題点もある。
【００１３】
本発明は、このような従来技術の問題点に着目し、複数の通信経路相互間での応答時間差の増大を防止すると共に、通信経路の送信レートの低下を防止することができる通信装置、通信方法及び通信装置の動作プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
前記目的を達成するための通信装置に係る第一の発明は、
識別子が含まれている送信データを、異なる複数の通信経路を介して、他の通信装置に送信する通信装置において、
複数の前記通信経路毎に設けられ、前記送信データを一時的に記憶しておく送信データ記憶領域と、
複数の前記送信データ記憶領域のそれぞれに、前記送信データを格納する冗長化手段と、
複数の前記送信データ記憶領域のそれぞれに格納されている前記送信データを、異なる複数の前記通信経路を介して、前記他の通信装置へ送信すると共に、該他の通信装置から、複数の該通信経路を介して、識別子を含む受信データを受信する送受信制御手段と、
前記送受信制御手段が受信した前記受信データ中の前記識別子と、前記送信データ中の前記識別子とを比較し、該受信データが該送信データに対する受信データであると判断される場合には、複数の前記送信データ記憶領域のいずれかに、前記受信データの前記識別子に対応する識別子を含む前記送信データが格納されているかを検索して、該送信データが格納されているときには該送信データを削除する冗長受信処理手段と、
を備えていることを特徴とする。
【００１５】
前記目的を達成するための通信装置に係る第二の発明は、
識別子が含まれている送信データを、異なる複数の通信経路を介して、他の通信装置に送信する通信装置において、
複数の前記通信経路毎に設けられ、前記送信データを一時的に記憶しておく送信キューと、前記他の通信装置との通信を制御するプロセッサと、を備え、
前記プロセッサは、
複数の前記送信キューのそれぞれに、前記送信データを格納する冗長化処理工程と、
複数の前記送信キューのそれぞれに格納されている前記送信データを、異なる複数の前記通信経路を介して、前記他の通信装置へ送信すると共に、該他の通信装置から、複数の該通信経路を介して、識別子を含む受信データを受信する送受信制御工程と、
前記送受信制御工程で受信した前記受信データ中の前記識別子から、該受信データが前記送信データに対する受信データであると判断される場合には、複数の前記送信キューのいずれかに、該受信データの該識別子に対応する識別子を含む前記送信データが格納されているかを検索して、該送信データが格納されているときには該送信データを削除する冗長受信処理工程と、
を実行することを特徴とする。
【００１６】
前記目的を達成するための通信装置に係る第三の発明は、
前記第二の発明の通信装置において、
前記送受信制御工程で受信した受信データの履歴を記憶する受信履歴情報テーブルを備え、
前記冗長受信処理工程では、前記送受信制御工程で受信した前記受信データの識別子から、同一の受信データが前記受信履歴情報テーブルに既に記憶されているか否かを判断し、同一の受信データが記憶されていれば、後から受信した受信データを削除し、同一の受信データが記憶されていなければ、該受信データの情報を前記受信履歴情報テーブルに記憶する、ことを特徴とする。
【００１７】
前記目的を達成するための通信方法に係る発明は、
データ識別子が含まれている送信データを、異なる複数の通信経路を介して、一方の通信装置から他方の通信装置に送信する通信方法において、
複数の前記通信経路毎に設けられている送信キューのそれぞれに、前記送信データを格納する冗長化処理工程と、
複数の前記送信キューのそれぞれに格納されている前記送信データを、異なる複数の前記通信経路を介して、前記他方の通信装置へ送信すると共に、該他の通信装置から、複数の該通信経路を介して、識別子を含む受信データを受信する送受信制御工程と、
前記送受信制御工程で受信した前記受信データ中の前記識別子から、該受信データが前記送信データに対する受信データであると判断される場合には、複数の前記送信キューのいずれかに、該受信データの該識別子に対応する識別子を含む前記送信データが格納されているかを検索して、該送信データが格納されているときには該送信データを削除する冗長受信処理工程と、
を含むことを特徴とする。
【００１８】
前記目的を達成するための通信装置の動作プログラムは、
データ識別子が含まれている送信データを、異なる複数の通信経路を介して、他の通信装置に送信する通信装置の動作プログラムにおいて、
複数の前記通信経路毎に設けられている送信キューのそれぞれに、前記送信データを格納する冗長化処理工程と、
複数の前記送信キューのそれぞれに格納されている前記送信データを、異なる複数の前記通信経路を介して、前記他の通信装置へ送信すると共に、該他の通信装置から、複数の該通信経路を介して、識別子を含む受信データを受信する送受信制御工程と、
前記送受信制御工程で受信した前記受信データ中の前記識別子から、該受信データが前記送信データに対する受信データであると判断される場合には、複数の前記送信キューのいずれかに、該受信データの該識別子に対応する識別子を含む前記送信データが格納されているかを検索して、該送信データが格納されているときには該送信データを削除する冗長受信処理工程と、
をコンピュータに実行させることを特徴とする。
【発明の効果】
【００１９】
本発明によれば、複数の通信経路のうち、ある通信経路で送信が完了した送信データと同じ送信データが、他の通信経路の送信キューに残っていれば、この残っている送信データを削除し、他の通信経路には送出しない。これにより、複数の通信経路間の送信レートに大きな差が生じた場合に、送信レートの低い通信経路の送信待ちデータが、送信レートの高い通信経路の送信待ちデータよりも非常に多くなることを防ぎ、複数の通信経路間の応答時間差の増大を低減できる。また、送信レートの低い通信経路に送出されるデータの量を少なくでき、この通信経路の送信レートを高めることができる。
【発明を実施するための最良の形態】
【００２０】
以下、本願発明の実施形態について、図面を用いて説明する。なお、以下の説明において、同一の部分には同一の符号を付加し、重複した説明を省略する。また、本願の発明は、以下の実施形態に制限されることはなく、本願発明の思想に合致するあらゆる応用例が本願発明に該当する。また、特に限定しない限り、各構成要素は複数でも単数でも構わない。
【００２１】
「第１実施形態」
本実施形態は、複数のストレージ装置を備え、各ストレージ相互間でリモートコピーにｉＳＣＳＩを用いるストレージシステムである。なお、ｉＳＣＳＩとは、従来技術の欄で示した非特許文献２に示されるように、データの書込み・読出しを制御するＳＣＳＩコマンドを、ＴＣＰ／ＩＰプロトコルでカプセル化して、ＴＣＰ／ＩＰネットワークでやりとりする技術である。
【００２２】
図１は、第１実施形態のストレージシステムの構成例を示した図である。このストレージシステムは、ＷＡＮ５およびＷＡＮ１０を介して、マスタサイトとリモートサイトがある。マスタサイトには、マスタストレージ装置１、ルータ４、ルータ９、マスタホスト１３およびマスタストレージ装置１の管理端末であるストレージ管理装置１５が設けられ、相互に、ギガビットイーサネット（イーサネットは米国ゼロックス社の登録商標）などのＬＡＮ３およびＬＡＮ４によって接続される。また、リモートサイトには、リモートストレージ装置２、ルータ６、ルータ１１およびリモートホスト１４が設けられ、相互に、ＬＡＮ７およびＬＡＮ１２によって接続されている。
【００２３】
マスタストレージ装置１およびリモートストレージ装置２は、単体の記憶装置あるいは複数の記憶装置を有する記憶装置システムである。なお、記憶装置は、ハードディスクドライブやＤＶＤといった、不揮発性の記憶媒体を用いた装置が含まれる。また、記憶装置システムでは、ＲＡＩＤ構成が採用されていてもよい。マスタストレージ装置１およびリモートストレージ装置２は、複数の記憶装置（以下、「ディスク」という）１００，１０１，１０２と、これらディスク１００，１０１，１０２に対するデータの書き込みや読み出しを制御するディスクコントローラ１０４と、各ディスク１００，１０１，１０２とディスクコントローラ１０４とを接続するバスなどの通信線であるＩＯパス１０３と、を備えている。
【００２４】
ディスクコントローラ１０４は、ＬＡＮ３やＬＡＮ４経由で他装置と通信する通信インタフェース（以下、「通信Ｉ／Ｆ」という）１１０，１１４と、各種プログラム等が記憶される揮発性のメモリ（以下、単に「メモリ」という）１０７と、メモリ１０７に記憶されている各プログラムを実行する中央演算装置（以下、「ＣＰＵ」という）１０９と、ディスクコントローラ１０４をＩＯパス１０３に接続させるためのインタフェースであるＩＯインタフェース（以下、「ＩＯ  Ｉ／Ｆ」という）１０５，１０６と、バスなどの通信線（以下、「内部バス」という）１０８とを備えている。
【００２５】
メモリ１０７には、ストレージ装置が受信した情報をテーブル等に登録するための情報登録プログラム２０８と、ディスクに記憶されたデータが更新される時それをリモートコピープログラムへ通知する際に実行されるディスク管理プログラム２０７と、リモートコピーを行う際に実行されるリモートコピープログラム２０６と、データ書き込みのためのＳＣＳＩコマンドの生成を行う際に実行されるＳＣＳＩ処理プログラム２０５と、ＳＣＳＩコマンドの冗長化処理を行う際に実行される冗長化処理プログラム２０４と、ＳＣＳＩコマンドをＴＣＰ／ＩＰでカプセル化する際に実行されるｉＳＣＳＩ処理プログラム２０３と、カプセル化したＳＣＳＩコマンドを通信Ｉ／Ｆ１１０へ送信する際に実行される送信制御プログラム２０２と、重複して受信したＳＣＳＩコマンドを着順に応じて処理する冗長コマンド受信処理を行う際に実行される冗長受信制御プログラム２０１と、時間経過に応じて受信履歴を消去する際に実行されるタイマ制御プログラム２００と、が格納される。なお、前述のＳＣＳＩコマンドには、マスタストレージ装置１が送信するＳＣＳＩ要求と、リモートストレージ装置２が送信するＳＣＳＩ応答との２種類があり、ある一つのデータ書き込みにおいて複数のＳＣＳＩ要求・応答が生成・送信される。
【００２６】
さらに、メモリ１０７には、ディスクから読み出されたデータ書き込みに伴う更新データを記憶するキャッシュメモリ３０６と、データの原本を記憶するマスタストレージ装置とデータの複製を記憶するリモートストレージ装置との対応情報を記憶するリモートコピー情報テーブル３０５と、ＳＣＳＩ要求の中で、あるデータ書き込みのために生じる一連のＳＣＳＩ要求のグループを一意に識別する情報を記憶する要求情報テーブル３０４と、データ書き込みのために生じる一連のＳＣＳＩ応答のグループを一意に識別する情報を記憶する応答情報テーブル３０３と、マスタストレージ装置１がリモートストレージ装置２との間に確立したｉＳＣＳＩセッションの情報を記憶するセッション情報テーブル３０２と、送出待ちＳＣＳＩ要求・応答の、送出待ちＳＣＳＩ要求・応答に関する情報を記憶する送信キュー情報テーブル３０１と、受信済みのＳＣＳＩコマンドの情報を記憶する受信履歴情報テーブル３００とが格納される。また、キャッシュメモリ３０６上には、送出待ちＳＣＳＩ要求・応答が格納される送信待ちキュー３０６ａ，３０６ｂが形成される。この送信待ちキュー３０６ａ，３０６ｂは、各ポート１１３，１１７毎に対応して設けられる。なお、本実施形態で、以上のテーブルは、読み書きの速度が速いメモリ１０７に格納されることとしているが、ディスク１００〜１０２に格納されてもよい。また、上記のプログラム２０１〜２０８は、あらかじめ、または可搬型記録媒体からの読み込み、または他装置からのＬＡＮ３もしくはＬＡＮ４経由のダウンロードにより、ディスク１００に格納され、必要に応じてメモリ１０７に転送された後、ＣＰＵ１０９が実行する。
【００２７】
通信Ｉ／Ｆ１１０は、通信用バッファとして使用するメモリ１１１と、他装置との通信を処理する通信処理部１１２と、ＬＡＮ８を構成するケーブルが接続されるポート１１３とを備えている。また、通信Ｉ／Ｆ１１４も、以上と同様に、メモリ１１５、通信処理部１１６およびＬＡＮ３を構成するケーブルが接続されるポート１１７を備えている。
【００２８】
ストレージ管理装置１５は、各種プログラム等が記憶されるメモリ１１９と、ディスク１２０と、メモリ１１９に記憶された各プログラムを実行するＣＰＵ１２４と、表示装置などの出力装置（以下、「ディスプレイ装置」という）１２３と、キーボードなどの文字入力装置１２２と、マウスやタッチパネルなどのポインティング装置１２１と、内部バス１２５と、このストレージ管理装置１５をＬＡＮ８と接続するインタフェースである通信Ｉ／Ｆ１１８とを備えている。
【００２９】
メモリ１１９には、システム管理者等が、リモートコピーに必要な情報の入力や、リモートコピー開始の指示などの作業を行うためのＧＵＩ（Graphical  User  interface）画面を表示する際に実行されるＧＵＩ制御プログラム２１０と、システム管理者等が入力した情報や指示を、マスタストレージ装置１へ送信する際に実行される情報送信プログラム２０９とが格納される。これらのプログラムは、あらかじめ、または可搬型記録媒体からの読み込み、または他装置からのＬＡＮ８経由のダウンロードにより、ディスク１１７に格納され、必要に応じてメモリ１１９に転送された後、ＣＰＵ１２４が実行する。
【００３０】
マスタホスト１３およびリモートホスト１４は、パーソナルコンピュータ、サーバ装置あるいはメインフレームなどの従来のホスト装置である。
【００３１】
ルータ４およびルータ６は、それぞれＬＡＮ３およびＬＡＮ７をＷＡＮ５へ接続するためのゲートウェイ機能を備えた従来のルータ装置である。同様に、ルータ９およびルータ１１は、それぞれＬＡＮ８およびＬＡＮ１２をＷＡＮ１０へ接続するためのゲートウェイ機能を備えた従来のルータ装置である。
【００３２】
次に、マスタストレージ装置１のメモリ１０７に格納される各種テーブルのデータ構造について説明する。
【００３３】
リモートコピー情報テーブル３０５、要求情報テーブル３０４、応答情報テーブル３０３、セッション情報テーブル３０２、送信キュー情報テーブル３０１および受信履歴情報テーブル３００は配列構造を成し、１つ以上のレコードを格納可能である。ただし、データ構造が配列構造に限定されることはない。
【００３４】
図２（１）は、リモートコピー情報テーブル３０５のデータ構造例を示す図である。リモートコピー情報テーブル３０５の各レコードは、マスタストレージ装置の識別子であるマスタノード名が登録されるエントリ３０５１、マスタストレージ装置内のディスクの識別子であるマスタ論理デバイスＩＤが登録されるエントリ３０５２、リモートストレージ装置の識別子であるリモートノード名が登録されるエントリ３０５３およびリモートストレージ装置内のディスクの識別子であるリモート論理デバイスＩＤが登録されるエントリ３０５４を有する。例えば、レコード３０５０は、マスタノード名が「Ｘ１」であるマスタストレージ装置内で、マスタ論理デバイスＩＤが「ｓｄｂ１」であるディスク装置内に記憶されているデータのリモートコピー先が、リモートノード名が「Ｙ１」であるリモートストレージ装置内で、リモート論理デバイスＩＤが「ｓｄｂ２」であるディスクであることを表す。なお、本実施形態では、論理デバイスと物理ディスクとが１対１の関係であるが、論理デバイスは、物理ディスクに対して、１対ｎ又はｎ対１の関係であってもよい。
【００３５】
図２（２）は、要求情報テーブル３０４のデータ構造例を示す図である。要求情報テーブル３０４の各レコードは、あるデータ書き込みに伴い更新されたデータをリモートコピーするための一連のＳＣＳＩ要求を、他のデータ書き込みに伴うＳＣＳＩ要求から一意に識別する要求タグが登録されるエントリ３０４１、マスタストレージ装置１のキャッシュメモリ３０６上に記憶された更新データの先頭メモリアドレスが登録されるエントリ３０４２、更新データのデータ長が登録されるエントリ３０４３および更新データのうちリモートストレージ装置への複製が完了したデータの長さである処理済データ長が登録されるエントリ３０４４を有する。例えば、レコード３０４０は、要求タグ「ｐ１」で識別される一連のＳＣＳＩ要求により、キャッシュメモリ３０６上の先頭メモリアドレス「１５００００」の位置からデータ長「５００００」ビットの領域に記憶されている更新データが、処理済データ長「７０００」ビット分複製済みであることを表す。
【００３６】
図２（３）は、応答情報テーブル３０３のデータ構造例を示す図である。応答情報テーブル３０５の各レコードは、あるデータ書き込みに伴い更新されたデータをリモートコピーするための一連のＳＣＳＩ要求に対応するＳＣＳＩ応答を、他のデータ書き込みに伴うＳＣＳＩ応答から一意に識別する応答タグが登録されるエントリ３０３１、前記更新データの書き込み対象ディスクを識別する論理デバイスＩＤが登録されるエントリ３０３２、前記書き込み対象ディスク内のデータ更新対象ブロック領域の先頭アドレスを表す論理ブロックアドレスが登録されるエントリ３０３３、更新データのデータ長が登録されるエントリ３０３４および更新データのうちディスクへの書き込みが終了したデータの長さである処理済データ長が登録されるエントリ３０３５を有する。例えば、レコード３０３０は、応答タグ「ｑ１」で識別される一連のＳＣＳＩ応答により、論理デバイスＩＤ「ｓｄｂ２」で特定されるディスクの、論理ブロックアドレス「１０００」の位置からデータ長「５００００」ビットの領域のデータ書込みが、処理済データ長「７０００」ビット分書込み済みであることを表す。
【００３７】
図２（４）は、セッション情報テーブル３０２のデータ構造例を示す図である。セッション情報テーブル３０２の各レコードは、データを送信するセッションを一意に識別するためのセッションＩＤが登録されるエントリ３０２１、前記マスタノード名が登録されるエントリ３０２２、セッションのマスタストレージ装置１側のＩＰアドレスであるマスタＩＰアドレスが登録されるエントリ３０２３、セッションのマスタストレージ装置１側のポート番号であるマスタポート番号が登録されるエントリ３０２４、前記リモートノード名が登録されるエントリ３０２５、セッションのリモートストレージ装置２側のＩＰアドレスであるリモートＩＰアドレスが登録されるエントリ３０２６、セッションのリモートストレージ装置側のリモートポート番号が登録されるエントリ３０２７、このセッションへ送り出す前のＳＣＳＩコマンド(ＳＣＳＩ要求orＳＣＳＩ応答)のアドレスを保持する送信キューのアドレスである送信キューアドレスが登録されるエントリ３０２８、セッション中でＬＡＮとＷＡＮとの中継点となるルータのアドレスであるゲートウェイＩＰアドレスが登録されるエントリ３０２９および経路に張られたセッションのタイムアウト値が登録されるエントリ３０２ａを有する。ここで、前記ゲートウェイＩＰアドレスは、マスタストレージ装置１内のセッション情報テーブル３０２においては、マスタサイトのＬＡＮ３およびＬＡＮ８と、ＷＡＮ５およびＷＡＮ１０との中継点であるルータ４もしくはルータ９のＩＰアドレスであるマスタゲートウェイアドレスをゲートウェイＩＰアドレスとしている。一方、リモートストレージ装置２内のセッション情報テーブルにおいては、リモートサイトのＬＡＮ７およびＬＡＮ１２と、ＷＡＮ５およびＷＡＮ１０との中継点であるルータ６もしくはルータ１１のＩＰアドレスであるリモートゲートウェイＩＰアドレスをゲートウェイＩＰアドレスとしている。例えば、レコード３０２０は、セッションＩＤ「Ｓ１」で識別されるセッションが、マスタノード名「Ｘ１」、マスタＩＰアドレス「２１１．１．１．２０」およびマスタポート番号「１００００」で特定されるマスタストレージ装置１側の端点と、リモートノード名「Ｙ１」、リモートＩＰアドレス「１７８．１．８．１５」およびリモートポート番号「１２０００」で特定されるリモートストレージ装置２側の端点を、ゲートウェイＩＰアドレス「２１１．１．１．１」で識別されるルータを中継点として接続したものである。また、そのセッションで通信が途絶えるとタイムアウトと判断する時間がタイムアウト値「１０」秒間であることを表す。
【００３８】
図２（５）は、送信キュー情報テーブル３０１のデータ構造例を示す図である。送信キュー情報テーブル３０１は、セッションごとに作成される。送信キュー情報テーブル３０１の各レコードは、コマンドを一意に識別する順序制御タグが登録されるエントリ３０１１、コマンドがもつタスクタグ（マスタストレージ装置においては要求タグをタスクタグとし、リモートストレージ装置においては応答タグをタスクタグとする）が登録されるエントリ３０１２、およびこれらのタグに対応するコマンドのアドレスであるコマンドアドレスが登録されるエントリ３０１３を有する。そして、レコード３０１０は、最初に送信される先頭レコードであり、一方、レコード３０１１は、最後に送信される最後尾レコードである。この最後尾レコードの後に新しいレコードを追加する。例えば、レコード３０１０は、最初に送り出されるコマンドが、順序制御タグ「１」およびタスクタグ「ｐ１」で識別され、コマンドアドレス「１５０００」の位置にあるコマンドであることを表す。なお、コマンドアドレスは、キャッシュメモリ３０６上で送信キュー３０６ａ，３０６ｂとして設定された領域内のアドレスである。
【００３９】
図２（６）は、受信履歴情報テーブル３００のデータ構造例を示す図である。受信履歴情報テーブル３００の各レコードは、順序制御タグが登録されるエントリ３００１、タスクタグ（マスタストレージ装置においては要求タグをタスクタグとし、リモートストレージ装置においては応答タグをタスクタグとする）が登録されるエントリ３００２、受信したコマンドに対応するコマンドを返信したかどうかを示す（０：未返信  １以上：返信済）返信フラグが登録されるエントリ３００３、同一コマンドが届くたびに１ずつ減らし、０になるとその履歴を削除するための（１以上：保持  ０：履歴削除）履歴保持カウンタが保持されるエントリ３００４および１秒経過するたびに１ずつ減らし、０になるとその履歴を削除する（１以上：保持  ０：履歴削除）ための履歴保持タイムアウトが登録されるエントリ３００５を有する。例えば、レコード３０００は、順序制御タグ「１」およびタスクタグ「ｐ１」で識別されるコマンドを受信したこと、それに対応するコマンドは未返信（返信フラグ「０」）であること、同一コマンドをあと２度受信するとこのレコードを削除すること（履歴保持カウンタ「２」）およびあと１秒経過するとこのレコードを削除すること（履歴保持タイムアウト「１」秒）を表す。
【００４０】
次に、第１実施形態で用いられるＧＵＩについて説明する。ＧＵＩ画面は、ストレージ管理装置１５のＣＰＵ１２４がＧＵＩ制御プログラム２１０を実行することによってディスプレイ１２３に表示される。システム管理者等は、文字入力装置１２２およびポインティング装置１２１を用いて、表示されたＧＵＩ画面上で各パラメータを設定する。
【００４１】
なお、ディスプレイ１２３、文字入力装置１２２およびポインティング装置１２１は、ストレージ管理装置１５とは別の計算機が有していてもよい。例えば、ストレージ管理装置１５とＬＡＮ８あるいはシリアルケーブルを介して接続されるコンソール用端末がディスプレイ等を有していても良い。この場合、ＣＰＵ１２４は、ＧＵＩ制御プログラム２１０を実行して画面データをコンソール用端末へ送信し、コンソール用端末がディスプレイ等にＧＵＩ画面を表示する。さらに、コンソール用端末は、システム管理者等が文字入力装置とポインティング装置とを用いて設定した各パラメータをストレージ管理装置１５へ送信する。
【００４２】
また、ストレージ管理装置１５は、第１実施形態で説明するＧＵＩのかわりに、そのＧＵＩと同等の機能を有するコマンドラインインタフェースを備えてもよい。
【００４３】
図３は、システム管理者等が、リモートコピーの実行に必要な情報を入力するために使用する、リモートコピー情報入力画面Ｇ３００の表示例を示す図である。リモートコピー情報入力画面３００は、マスタノード名が入力される領域Ｇ３０１、マスタ論理デバイスＩＤが入力される領域Ｇ３０２、リモートノード名が入力される領域Ｇ３０３、リモート論理デバイスＩＤが入力される領域Ｇ３０４、第一の経路に関する情報が入力される領域Ｇ３０５、第二の経路に関する情報が入力される領域Ｇ３０６、これらの領域で指定された情報をマスタストレージ装置１へ登録する際に指定されるボタンＧ３０７および登録を取り消す際に指定されるボタンＧ３０８を有する。
【００４４】
さらに、領域Ｇ３０５は、マスタＩＰアドレスが入力される領域Ｇ３１０、マスタポート番号が入力される領域Ｇ３１１、マスタゲートウェイＩＰアドレスが入力される領域Ｇ３１２、リモートＩＰアドレスが入力される領域Ｇ３１３、リモートポート番号が入力される領域Ｇ３１４、リモートゲートウェイＩＰアドレスが入力される領域Ｇ３１５およびタイムアウト値が入力される領域Ｇ３１６を有する。同様に、領域Ｇ３０６は、マスタＩＰアドレスが入力される領域Ｇ３２０、マスタポート番号が入力される領域Ｇ３２１、マスタゲートウェイＩＰアドレスが入力される領域Ｇ３２２、リモートＩＰアドレスが入力される領域Ｇ３２３、リモートポート番号が入力される領域Ｇ３２４、リモートゲートウェイＩＰアドレスが入力される領域Ｇ３２５およびタイムアウト値が入力される領域Ｇ３２６を有する。
【００４５】
図４は、システム管理者等が、リモートコピーの実行の開始を指示するために使用する、リモートコピー開始指示画面Ｇ４００の表示例を示す図である。リモートコピー開始指示画面Ｇ４００は、リモートコピーを開始する際に指定されるボタンＧ４０１およびリモートコピーの開始を取り消す際に指定されるボタンＧ４０２を有する。
【００４６】
次に、第１実施形態における各装置間の通信シーケンスについて説明する。
【００４７】
図５は、システム管理者等が、ストレージ管理装置１５を使用して、リモートコピーの実行に必要な情報をマスタストレージ装置１およびリモートストレージ装置２へ登録する時から、リモートコピーを開始する時までの、装置間の通信シーケンス例を示す図である。
【００４８】
最初に、ストレージ管理装置１５のＣＰＵ１２４でＧＵＩ制御プログラム２１０が実行され、ストレージ管理装置１５が、リモートコピー情報入力画面Ｇ３００（図３に示す）を表示し、システム管理者等からの入力を受け付けるリモートコピー情報入力処理を実行する（Ｓ５０１）。その後、システム管理者等がボタンＧ３０７を指定すると、ＣＰＵ１２４で情報送信プログラム２０９が実行され、ストレージ管理装置１５が、領域Ｇ３０１から領域Ｇ３０６までに入力された情報からなる情報登録要求を組み立て、マスタストレージ装置１へ送信する（Ｓ５０２）。マスタストレージ装置１が前記情報登録要求を受信すると、図６で説明する情報登録処理を実行し、リモートコピーの実行に必要な情報を各種テーブルに登録する（Ｓ５０３）。そして、マスタストレージ装置１は、情報が登録されたことを表す情報登録応答をストレージ管理装置１５へ送信する（Ｓ５０４）。次に、ストレージ管理装置１５は、Ｓ５０２で組み立てた情報登録要求をリモートストレージ装置２へ送信する（Ｓ５０５）。リモートストレージ装置２が前記情報登録要求を受信すると、前記情報登録処理を実行し、リモートコピーの実行に必要な情報を各種テーブルに登録する（Ｓ５０６）。そして、リモートストレージ装置２は、情報が登録されたことを表す情報登録応答をストレージ管理装置１５へ送信する（Ｓ５０７）。
【００４９】
次に、ストレージ管理装置１５は、各ストレージ装置１，２から情報登録応答を受信すると、前述の情報登録要求の場合と同様に、領域Ｇ３０１から領域Ｇ３０６までに入力された情報からなる経路開設要求をマスタストレージ装置１へ送信する（Ｓ５０８）。マスタストレージ装置１が前記経路開設要求を受信すると、以下の経路開設処理を行う（Ｓ５０９）。まず、マスタストレージ装置１は、前記経路開設要求から経路１のマスタゲートウェイＩＰアドレスを取り出し、ＡＲＰ（Ａｄｄｒｅｓｓ  Ｒｅｓｏｌｕｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）等を用いて、第一の経路を構成する、マスタサイト内のルータの物理アドレスを得る。そして、前記経路開設要求からマスタノード名と、リモートノード名と、経路１のマスタＩＰアドレス、マスタポート番号、リモートＩＰアドレスおよびリモートポート番号とを取り出し、前記マスタノード名が示すイニシエータから前記リモートノード名が示すターゲットへのログイン要求を表す経路１開設要求を組み立て、前記物理アドレスあてに送信する（Ｓ５１０）。この経路１開設要求のソースＩＰアドレスは前記マスタＩＰアドレスであり、デスティネーションＩＰアドレスは前記リモートＩＰアドレスであり、ソースＴＣＰポート番号は前記マスタポート番号であり、デスティネーションＴＣＰポート番号は前記リモートポート番号である。リモートストレージ装置２が前記経路１開設要求を受信すると、ｉＳＣＳＩセッションを許可することを表す経路１開設応答を送信する（Ｓ５１１）。このようにして第一の経路上にｉＳＣＳＩセッションを確立する。その後、同様に、第二の経路上にｉＳＣＳＩセッションを確立する（Ｓ５１２、Ｓ５１３）。そして、マスタストレージ装置１は、経路が開設されたことを表す経路開設応答を組み立て、ストレージ管理装置１５へ送信する（Ｓ５１４）。
【００５０】
次に、ストレージ管理装置１５が、前記経路開設応答を受信すると、ＣＰＵ１２４でＧＵＩ制御プログラム２１０が実行され、ストレージ管理装置１５が、リモートコピー開始指示画面Ｇ４００（図４に示す）を表示し、システム管理者等からリモートコピー開始の指示を待ち受けるリモートコピー開始指示処理を実行する（Ｓ５１５）。その後、システム管理者等がボタン４０１を指定すると、ＣＰＵ１２４で情報送信プログラム２０９が実行され、ストレージ管理装置１５が、リモートコピー開始が指示されたことを表すリモートコピー開始要求を組み立て、マスタストレージ装置１へ送信する（Ｓ５１６）。マスタストレージ装置１が、前記リモートコピー開始要求を受信すると、ＣＰＵ１０９でリモートコピープログラム２０６が実行され、マスタストレージ装置１が、リモートコピー開始処理を実行する（Ｓ５１７）。そして、マスタストレージ装置１が、リモートコピーが正常に開始されたことを表すリモートコピー開始応答を組み立て、ストレージ管理装置１５へ送信する（Ｓ５１８）。以上が、リモートコピーの実行に必要な情報の登録およびリモートコピーの開始に関わる通信シーケンスである。
【００５１】
図６は、前述の情報登録処理（Ｓ５０３，５０６）の動作手順を示すフローチャートである。本処理は、マスタストレージ装置１あるいはリモートストレージ装置２のＣＰＵ１０９で情報登録プログラム２０８が実行されることによって、実行される。なお、ここでの説明では、マスタストレージ装置１とリモートストレージ装置２とをまとめてストレージ装置という。本処理では、最初に、ストレージ装置が、ストレージ管理装置１５から受信した情報登録要求の内容に基づき、リモートコピー情報テーブル３０５（図２（１））へレコードを追加する（Ｓ６０１）。ここで追加されるレコードのエントリ３０４１にはマスタノード名が、エントリ３０４２にはマスタ論理デバイスＩＤが、エントリ３０４３にはリモートノード名が、エントリ３０４４にはリモート論理デバイスＩＤがそれぞれ登録される。次に、ストレージ装置が、キャッシュメモリ３０６に送信キュー３０６ａを形成すると共に、送信キュー情報テーブル３０１を作成し、送信キュー３０６ａの先頭アドレスを、送信キューアドレスとする（Ｓ６０２）。
【００５２】
次に、本処理の動作主体がマスタストレージ装置１かリモートストレージ装置２かによって処理を分岐する（Ｓ６０３）。動作主体がマスタストレージ装置１の場合、第一の経路ＡのマスタゲートウェイＩＰアドレスをゲートウェイＩＰアドレスとして以下の処理を行う（Ｓ６０４）。一方、動作主体がリモートストレージ装置２の場合、第一の経路のリモートゲートウェイＩＰアドレスをゲートウェイＩＰアドレスとして以下の処理を行う（Ｓ６０５）。次に、ストレージ装置が、一意なセッションＩＤを発行する（Ｓ６０６）。次に、ストレージ装置が、前記情報登録要求の内容に基づき、セッション情報テーブル３０２にレコードを追加する（Ｓ６０７）。ここで追加するレコードのエントリ３０２１にはＳ６０６で得たセッションＩＤが、エントリ３０２２にはマスタノード名が、エントリ３０２３にはマスタＩＰアドレスが、エントリ３０２４にはマスタポート番号が、エントリ３０２５にはリモートノード名が、エントリ３０２６にはリモートＩＰアドレスが、エントリ３０２７にはリモートポート番号が、エントリ３０２８にはＳ６０２で得た送信キューアドレスが、エントリ３０２９にはＳ６０４あるいはＳ６０５で得たゲートウェイＩＰアドレスが、エントリ３０２ａにはタイムアウト値がそれぞれ登録される。そして、ストレージ装置が、Ｓ６０２からＳ６０７までの処理を、第二の経路Ｂについても同様に実行する（Ｓ６０８）。この第二の経路Ｂについても同様に実行することで、より具体的には、Ｓ６０２を繰り返すことで、キャッシュメモリ３０６上に、第一の経路Ａ用の送信キュー３０６ａと、第二の経路Ｂ用の送信キュー３０６ｂとが生成される。
【００５３】
図７〜図９は、マスタストレージ装置１のディスク１００〜１０２に記憶されたデータが更新された時の、装置間の通信シーケンス例を示す図である。なお、この通信シーケンス例では、ＬＡＮ３、ルータ４、ＷＡＮ５、ルータ６およびＬＡＮ７からなる経路が第一の経路Ａであり、ＬＡＮ８，ルータ９、ＷＡＮ１０、ルータ１１およびＬＡＮ１２からなる経路が第二の経路Ｂであるとする。
【００５４】
ディスク１００〜１０２に記憶されたデータが更新されると、マスタストレージ装置１のＣＰＵ１０９でディスク管理プログラム２０７が実行される。その結果、マスタストレージ装置１のＣＰＵ１０９は、マタノード名、マスタ論理デバイスＩＤ、論理ブロックアドレス、先頭メモリアドレス、データ長および更新されたデータからなるデータ更新通知を組み立て、それを入力としてリモートコピープログラム２０６を実行する。ＣＰＵ１０９でリモートコピープログラム２０６が実行されると、マスタストレージ装置１は、図１０で説明するデータ更新通知受信処理を行い、リモートストレージ装置２のデータ更新をＳＣＳＩ処理プログラム２０５に要求するための更新要求を組み立てる（Ｓ７０１）。次に、ＣＰＵ１０９でＳＣＳＩ処理プログラム２０５が、前記更新要求を入力として実行され、マスタストレージ装置１が図１１で説明するＳＣＳＩ  Ｗｒｉｔｅ要求生成処理を行い、データの書き込みを要求するＳＣＳＩコマンドを組み立てる（Ｓ７０２）。次に、ＣＰＵ１０９で冗長化処理プログラム２０４が、前記ＳＣＳＩコマンドを入力として実行され、マスタストレージ装置１が、図１２および図１３で説明する、同一コマンドを複数の経路へ送出するコマンド冗長化処理を行い、ＳＣＳＩコマンドを第一の経路Ａの送信キュー３０６ａ、および第二の経路Ｂの送信キュー３０６ｂへ追加すると共に、このコマンドの情報を送信キュー情報テーブル３０１に格納する（Ｓ７０３）。一方、ＣＰＵ１０９では送信制御プログラム２０２が、マスタストレージ装置１の起動時から、常に実行されている。その結果、マスタストレージ装置１は、図１４で説明する送信キュー制御処理を繰り返し実行しており、Ｓ７０３で送信キュー３０６ａ，３０６ｂに追加されたＳＣＳＩコマンドが、送信キュー３０６ａ，３０６ｂの先頭に至ると、マスタストレージ装置１はそのＳＣＳＩコマンドをｉＳＣＳＩ処理プログラム２０３へ送信する（Ｓ７０４）。次に、ＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行され、マスタストレージ装置１が図１５で説明するｉＳＣＳＩカプセル化処理を行い、ｉＳＣＳＩ  ＰＤＵを組み立て、それをリモートストレージ装置２宛てに送信する（Ｓ７０５）。このようなＳ７０３からＳ７０５の処理の結果、マスタストレージ装置１は、更新準備要求をルータ４およびルータ９に冗長化送信する（Ｓ７０６、Ｓ７０７）。
【００５５】
マスタストレージ装置１による以上の処理の結果、リモートストレージ装置２が、第一の経路Ａを通った更新準備要求を、第二の経路Ｂを通った更新準備要求よりも早く受信すると、リモートストレージ装置２のＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行され、リモートストレージ装置２が図１６（２）で説明する脱ｉＳＣＳＩカプセル化処理を行い、受信した更新準備要求からＳＣＳＩコマンドを取り出す（Ｓ７０８）。次に、ＣＰＵ１０９で冗長受信制御プログラム２０１が実行され、リモートストレージ装置２が図１７および図１８で説明する冗長コマンド受信処理を行い、同一の更新準備要求を既に受信済みか否かを調べる。現時点では、受信していないため、Ｓ７０８で取り出したＳＣＳＩ  Ｗｒｉｔｅ要求をＳＣＳＩ処理プログラム２０５へ送信する（Ｓ７０９）。また、受信履歴情報テーブル３００に、前記更新準備要求を受信したことを表す受信履歴を記憶する。さらに、ストレージ装置２のＣＰＵ１０９では、タイマ制御プログラム２００が、ストレージ装置２の起動時から常に実行されている。この結果、ストレージ装置２は、図１９で説明する受信履歴タイマ制御処理を繰り返し実行しており、Ｓ７０９で受信履歴テーブル３００に記憶された受信履歴のタイムアウト値が０になると、ストレージ装置は受信履歴テーブル３００からその受信履歴を消去する（Ｓ７１０）。次に、ＣＰＵ１０９でＳＣＳＩ処理プログラム２０５が実行され、リモートストレージ装置２が図２２で説明するＳＣＳＩ応答生成処理を行い、Ｓ７０９で取り出したＳＣＳＩ  Ｗｒｉｔｅ要求に対応する応答であるＳＣＳＩ  ＸＦＲ＿ＲＤＹ(Ｔｒａｎｓｆｅｒ  Ｒｅａｄｙの略)応答を組み立てる（Ｓ７１１）。次に、ＣＰＵ１０９で冗長化プログラム２０４が実行され、リモートストレージ装置２がコマンド冗長化処理を行い、ＳＣＳＩコマンドを第一の経路Ａの送信キュー３０６ａおよび第二の経路Ｂの送信キュー３０６ｂへ追加すると共に、このコマンドの情報を送信キュー情報テーブル３０１に格納する（Ｓ７１２）。一方、マスタストレージ装置１と同様に、リモートストレージ装置２のＣＰＵ１０９では送信制御プログラム２０２が、リモートストレージ装置２の起動時から常に実行されている。その結果、リモートストレージ装置２は、図１４で説明する送信キュー制御処理を繰り返し実行しており、Ｓ７１２で送信キューに追加されたＳＣＳＩコマンドが、送信キュー３０６ａ，３０６ｂの先頭に至ると、リモートストレージ装置２はそのＳＣＳＩコマンドをｉＳＣＳＩ処理プログラム２０３へ送信する（Ｓ７１３）。次に、ＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行され、マスタストレージ装置１が図１５で説明するｉＳＣＳＩカプセル化処理を行い、ｉＳＣＳＩ  ＰＤＵを組み立て、それをマスタストレージ装置１宛てに送信する（Ｓ７１４）。その結果、リモートストレージ装置２は、更新準備応答ルータ６およびルータ１１に冗長化送信する（Ｓ７１５，Ｓ７１６）。
【００５６】
その後、リモートストレージ装置２が、図８に示すように、第二の経路Ｂを通った更新準備要求を受信すると、ＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行され、リモートストレージ装置２が脱ｉＳＣＳＩカプセル化処理を行い、受信した更新準備要求からＳＣＳＩコマンドを取り出す（Ｓ８０１）。次に、ＣＰＵ１０９で冗長受信制御プログラム２０１が実行され、リモートストレージ装置２が冗長コマンド受信処理を行い、同一の更新準備要求を既に受信済みと判断し、この更新準備要求を削除する（Ｓ８０２）。なお、Ｓ７１０で述べたとおり、ＣＰＵ１０９でタイマ制御プログラム２００がリモートストレージ装置２の起動時から常に実行されており、リモートストレージ装置２が、タイムアウト値が０となった受信履歴を削除する受信履歴タイマ制御処理を常に行っている（Ｓ８０３）。
【００５７】
マスタストレージ装置１が、第一の経路Ａを通った更新準備応答を、第二の経路Ｂを通った更新準備応答よりも早く受信すると、マスタストレージ装置１のＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行され、マスタストレージ装置１が脱ｉＳＣＳＩカプセル化処理を行い、受信した前記更新準備応答からＳＣＳＩ  ＸＦＲ＿ＲＤＹ応答を取り出す（Ｓ８０４）。次に、ＣＰＵ１０９で冗長受信制御プログラム２０１が実行され、マスタストレージ装置１が冗長コマンド受信処理を行い、同一の更新準備応答を既に受信済みか否かを調べる。現時点では、受信していないため、Ｓ８０４で取り出したＳＣＳＩ  ＸＦＲ＿ＲＤＹ応答をＳＣＳＩ処理プログラム２０５へ送信する（Ｓ８０５）。また、受信履歴情報テーブル３００に、前記更新準備応答を受信したことを表す受信履歴を記憶する。なお、リモートストレージ装置と同様に、マスタストレージ装置１のＣＰＵ１０９で、タイマ制御プログラム２００が、マスタストレージ装置１の起動時から常に実行されており、マスタストレージ装置１が受信履歴タイマ制御処理を常に行っている（Ｓ８０６）。次に、ＣＰＵ１０９でＳＣＳＩ処理プログラム２０５が実行され、マスタストレージ装置１がＳＣＳＩ応答受信処理を行い、ＳＣＳＩ  Ｄａｔａ＿Ｏｕｔ要求を組み立てる（Ｓ８０７）。次に、ＣＰＵ１０９で冗長化処理プログラム２０４が実行され、マスタストレージ装置１がコマンド冗長化処理を行い、Ｓ８０７で生成したＳＣＳＩコマンドを第一の経路Ａの送信キュー１０３Ａ、および第二の経路Ｂの送信キュー１０３Ｂへ追加する（Ｓ８０８）。そして、送信キュー制御処理を繰り返し実行しているマスタストレージ装置１は、Ｓ８０８で送信キューに追加されたＳＣＳＩコマンドが、送信キューの先頭に至ると、そのＳＣＳＩコマンドをｉＳＣＳＩ処理プログラム２０３へ送信する（Ｓ８０９）。次に、ＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行され、マスタストレージ装置１がｉＳＣＳＩカプセル化処理を行い、ｉＳＣＳＩ  ＰＤＵを組み立て、それをリモートストレージ装置２宛てに送信する（Ｓ８１０）。その結果、マスタストレージ装置１は、更新要求をルータ４およびルータ９に冗長化送信する（Ｓ８１１，Ｓ８１２）。
【００５８】
その後、マスタストレージ装置１が、第二の経路Ｂを通った更新準備応答をさらに受信すると、ＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行され、マスタストレージ装置１が脱ｉＳＣＳＩカプセル化処理を行い、受信した更新準備応答からＳＣＳＩコマンドを取り出す（Ｓ８１３）。次に、ＣＰＵ１０９で冗長受信制御プログラム２０１が実行され、マスタストレージ装置１が冗長コマンド受信処理を行い、同一の更新準備要求を既に受信済みと判断し、削除する（Ｓ８１４）。なお、Ｓ８０６で述べたとおり、マスタストレージ装置１のＣＰＵ１０９でタイマ制御プログラム２００がマスタストレージ装置１の起動時から常に実行されており、マスタトレージ装置１が受信履歴を削除する受信履歴タイマ制御処理を常に行っている（Ｓ８１５）。
【００５９】
一方、リモートストレージ装置２が、第二の経路Ｂを通った更新要求を、第一の経路Ａを通った更新要求よりも早く受信すると、リモートストレージ装置２のＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行され、リモートストレージ装置２が脱ｉＳＣＳＩカプセル化処理を行い、受信した前記更新要求からＳＣＳＩ  Ｄａｔａ＿Ｏｕｔ要求を取り出す（Ｓ８１６）。次に、ＣＰＵ１０９で冗長受信制御プログラム２０１が実行され、リモートストレージ装置２が冗長コマンド受信処理を行い、同一の更新要求を既に受信済みか否かを調べる。現時点では、受信していないため、Ｓ８１６で取り出したＳＣＳＩ  Ｄａｔａ＿Ｏｕｔ要求をＳＣＳＩ処理プログラム２０５へ送信する（Ｓ８１７）。また、受信履歴情報テーブル３００に、前記更新要求を受信したことを表す受信履歴を記憶する。なお、リモートストレージ装置２のＣＰＵ１０９で、タイマ制御プログラム２００が、リモートストレージ装置２の起動時から常に実行されており、リモートストレージ装置２が受信履歴タイマ制御処理を常に行っている（Ｓ８１８）。次に、ＣＰＵ１０９でＳＣＳＩ処理プログラム２０５が実行され、リモートストレージ装置２がＳＣＳＩ応答生成処理を行い、Ｓ８１７で取り出したＳＣＳＩ  Ｄａｔａ＿Ｏｕｔコマンドに基づき、リモートストレージ装置２のディスク１００〜１０２のデータを更新し、さらにＳＣＳＩ  Ｄａｔａ＿Ｏｕｔコマンドに対応する応答であるＳＣＳＩ  ＲＳＰ応答を組み立てる（Ｓ８１９）。すなわち、このステップ８１９の処理で、マスターストレージ装置１のデータがリモートストレージ装置２にリモートコピーされる。次に、ＣＰＵ１０９で冗長化処理プログラム２０４が実行され、リモートストレージ装置２がコマンド冗長化処理を行い、Ｓ８１９で生成したＳＣＳＩコマンドを第一の経路Ａの送信キュー３０６ａおよび第二の経路Ｂの送信キュー３０６ｂへ追加する（Ｓ８２０）。そして、送信キュー制御処理を繰り返し実行しているリモートストレージ装置２は、Ｓ８２０で送信キュー３０６ａ，３０６ｂに追加されたＳＣＳＩコマンドが、送信キュー３０６ａ，３０６ｂの先頭に至ると、そのＳＣＳＩコマンドをｉＳＣＳＩ処理プログラム２０３へ送信する（Ｓ９０１）。次に、ＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行され、リモートストレージ装置２がｉＳＣＳＩカプセル化処理を行い、ｉＳＣＳＩ  ＰＤＵを組み立て、それをマスタストレージ装置１宛てに送信する（Ｓ９０２）。その結果、マスタストレージ装置２は、更新応答をルータ６およびルータ１１に冗長化送信する（Ｓ９０３、Ｓ９０４）。
【００６０】
その後、リモートストレージ装置２が、第一の経路Ａを通った更新要求を受信すると、ＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行され、リモートストレージ装置２が脱ｉＳＣＳＩカプセル化処理を行い、受信した更新要求からＳＣＳＩコマンドを取り出す（Ｓ９０５）。次に、ＣＰＵ１０９で冗長受信制御プログラム２０１が実行され、リモートストレージ装置２が冗長コマンド受信処理を行い、同一の更新要求を既に受信済みと判断し、削除する（Ｓ９０６）。なお、Ｓ７１０で述べたとおり、ＣＰＵ１０９でタイマ制御プログラム２００がリモートストレージ装置２の起動時から常に実行されており、リモートストレージ装置２が、受信履歴タイマ制御処理を常に行っている（Ｓ９０７）。
【００６１】
一方、マスタストレージ装置１が、第一の経路Ａを通った更新応答を、第二の経路Ｂを通った更新応答よりも早く受信すると、マスタストレージ装置１のＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行され、マスタストレージ装置１が脱ｉＳＣＳＩカプセル化処理を行い、受信した前記更新準備応答からＳＣＳＩ  ＲＳＰ応答を取り出す（Ｓ９０８）。次に、ＣＰＵ１０９で冗長受信制御プログラム２０１が実行され、マスタストレージ装置１が冗長コマンド受信処理を行い、同一の更新応答を既に受信済みか否かを調べる。現時点では、受信していないため、Ｓ９０８で取り出したＳＣＳＩ  ＲＳＰ応答をＳＣＳＩ処理プログラム２０５へ送信する（Ｓ９０９）。また、受信履歴情報テーブル３００に、前記更新応答を受信したことを表す受信履歴を記憶する。なお、リモートストレージ装置と同様に、マスタストレージ装置１のＣＰＵ１０９でタイマ制御プログラム２００が常に実行されており、マスタストレージ装置１が受信履歴タイマ制御処理を常に行っている（Ｓ９１０）。次に、ＣＰＵ１０９でＳＣＳＩ処理プログラム２０５が実行され、マスタストレージ装置１がＳＣＳＩ応答受信処理を行う（Ｓ９１１）。次に、ＣＰＵ１０９でリモートコピープログラム２０６が実行され、マスタストレージ装置１が図２５で説明する完了応答送信処理を行う（Ｓ９１２）。
【００６２】
その後、マスタストレージ装置１が、第二の経路Ｂを通った更新応答を受信すると、ＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行され、マスタストレージ装置１が脱ｉＳＣＳＩカプセル化処理を行い、受信した更新準備応答からＳＣＳＩコマンドを取り出す（Ｓ９１３）。次に、ＣＰＵ１０９で冗長受信制御プログラム２０１が実行され、マスタストレージ装置１が冗長コマンド受信処理を行い、同一の更新応答を既に受信済みと判断し、削除する（Ｓ９１４）。なお、Ｓ８０６で述べたとおり、マスタストレージ装置１のＣＰＵ１０９で、タイマ制御プログラム２００が、マスタストレージ装置１の起動時から常に実行されており、マスタトレージ装置１が受信履歴を削除する受信履歴タイマ制御処理を常に行っている（Ｓ９１５）。
【００６３】
以上で、マスタストレージ装置１のディスク１００〜１０２に記憶されたデータが更新された時の、装置間の通信シーケンス例を説明した。
【００６４】
次に、図７〜図９までで挙げられた各処理の詳細動作手順を説明する。
【００６５】
図１０は、図７におけるデータ更新通知受信処理（Ｓ７０１）の動作手順を示すフローチャートである。本処理は、マスタストレージ装置１のＣＰＵ１０９でリモートコピープログラム２０６が実行されることによって、マスタストレージ装置１で実行される。本処理では、最初に、マスタストレージ装置１が、ディスク管理プログラム２０７から、マスタノード名、マスタ論理デバイスＩＤ、論理ブロックアドレス、先頭メモリアドレス、データ長および更新データからなるデータ更新通知を受信する（Ｓ１００１）。
【００６６】
次に、マスタストレージ装置１が、キャッシュメモリ３０５上に読み出した更新データを記録し、その先頭メモリアドレスおよびデータ長を取得する（Ｓ１００２）。次に、マスタストレージ装置１が、マスタノード名およびマスタ論理デバイスＩＤをキーとしてリモートコピー情報テーブル３０４を検索する（Ｓ１００３）。次に、マスタストレージ装置１が、Ｓ１００３の検索でヒットしたレコードから、リモートノード名、リモート論理デバイスＩＤを読み出す（Ｓ１００４）。最後に、マスタストレージ装置１が、マスタノード名、マスタ論理デバイスＩＤ、リモートノード名、リモート論路デバイスＩＤ、論理ブロックアドレス、データ長および先頭メモリアドレスから成る更新要求を組み立て（Ｓ１００５）、本処理を終了する。
【００６７】
図１１は、図７におけるＳＣＳＩ  Ｗｒｉｔｅ要求生成処理（Ｓ７０２）の動作手順を示すフローチャートである。本処理は、マスタストレージ装置１のＣＰＵ１０９でＳＣＳＩ処理プログラム２０５が実行されることによって、マスタストレージ装置１のＣＰＵ１０９で実行される。本処理では、最初に、マスタストレージ装置１が、更新要求から、先頭メモリアドレスおよびデータ長を読み出す（Ｓ１１０１）。次に、マスタストレージ装置１が、更新要求に一意な要求タグを発行する（Ｓ１１０２）。次に、マスタストレージ装置１が、要求タグ、キャッシュメモリアドレス、データ長および送信済みデータ長（初期値０）から成るレコードを、タスク情報テーブル３０３へ追加する（Ｓ１１０３）。最後に、マスタストレージ装置１が、マスタノード名、マスタ論理デバイスＩＤ、リモートノード名、リモート論路デバイスＩＤ、論理ブロックアドレス、要求タグ、データ長およびＷｒｉｔｅオペレーションコードから成るＳＣＳＩ  Ｗｒｉｔｅ要求を組み立て（Ｓ１１０４）、本処理を終了する。
【００６８】
図１２および図１３は、図７及び図８におけるコマンド冗長化処理（Ｓ７０３，７１２，８０８，８２０）の動作手順の例を示すフローチャートである。本処理は、マスタストレージ装置１あるいはリモートストレージ装置２のＣＰＵ１０９でＳＣＳＩ処理プログラム２０５が実行されることによって、マスタストレージ装置１あるいはリモートストレージ装置２で実行される。本処理では、最初に、コマンドが要求か応答かで処理を分岐する（Ｓ１２０１）。コマンドが要求の場合、ストレージ装置が、コマンドから要求タグを読み出し、タスクタグとし（Ｓ１２０２）、その後、ストレージ装置が、コマンドに対して一意な順序制御タグを付与し（Ｓ１２０３）、Ｓ１３０１（図１３）以降の処理を実行する。一方、コマンドが応答の場合、ストレージ装置が、コマンドから応答タグの値を読み出してタスクタグとし（Ｓ１２０４）、Ｓ１２０４で読み出した値が受信履歴情報テーブル３００のエントリ３００２の内容と一致し、かつエントリ３００３の内容が「０」であるという条件で、受信履歴情報テーブル３００を検索する（Ｓ１２０５）。そして、ストレージ装置は、Ｓ１２０５の検索の結果に従って処理を分岐する（Ｓ１２０６）。Ｓ１２０５の検索にヒットするレコードがあった場合、ストレージ装置が、ヒットしたレコードの順序制御タグを読み出し、コマンドに付与する（Ｓ１２０７）。また、ストレージ装置が、ヒットしたレコードの返信フラグの値を「１」とする（Ｓ１２０８）。一方、ヒットしたレコードがなかった場合、ストレージ装置はＳ１２０３を実行する。
【００６９】
次に、ストレージ装置が、コマンドからマスタノード名、リモートノード名を読み出す（Ｓ１３０１（図１３））。次に、ストレージ装置は、Ｓ１３０１で読み出したマスタノード名およびリモートノード名が、それぞれ、セッション情報テーブル３０２のエントリ３０２１およびエントリ３０２２の内容に一致するレコードを、セッション情報テーブル３０２から検索する（Ｓ１３０２）。次に、ストレージ装置が、Ｓ１３０２の検索にヒットしたレコード数を、同時送信数とし、コマンドに付与する（Ｓ１３０３）。次に、ストレージ装置が、ヒットしたレコードのうち一つを取り出す（Ｓ１３０４）。次に、ストレージ装置が、取り出したレコードからセッションＩＤ（、マスタＩＰアドレス、マスタポート番号、リモートＩＰアドレス、リモートポート番号）および送信キューアドレスを読み出し、コマンドに付与する（Ｓ１３０５）。次に、ストレージ装置が、コマンドが記憶されているキャッシュメモリ３０６上の送信キュー内の先頭アドレスを取得し、コマンドアドレスとする（Ｓ１３０６）。次に、ストレージ装置が、Ｓ１３０５で読み出した送信キューアドレスで送信キュー情報を特定し、送信キュー情報テーブル３０１の最後尾レコードの次に、順序制御タグ、タスクタグ、コマンドアドレスからなるレコードを追加する（Ｓ１３０７）。ストレージ装置は、Ｓ１３０５からＳ１３０７の処理をＳ１３０２の検索にヒットした全てのレコードについて実行し（Ｓ１３０８）、本処理を終了する。
【００７０】
すなわち、以上の処理で、通信経路Ａ，Ｂ毎に設けられた送信キュー３０６ａ，３０６ｂにコマンドが設定されたことになる。
【００７１】
図１４は、図７〜図９における送信キュー制御処理（Ｓ７０４，７１３，８０９，９０１）の動作手順を示すフローチャートである。本処理は、マスタストレージ装置１あるいはリモートストレージ装置２のＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行されることによって、マスタストレージ装置１あるいはリモートストレージ装置２で実行される。本処理では、最初に、送信キューが空か否かによって処理を分岐する（Ｓ１４０１）。送信キューが空の場合、ストレージ装置は、次のレコードが追加されるまで待ち（Ｓ１４０２）、コマンドが到着したらＳ１４０３以降の処理を行う。一方、送信キューが空ではない場合、ストレージ装置は、送信キューの先頭データ、つまり、送信キュー情報テーブル３０１の先頭のレコードのデータをｉＳＣＳＩ処理プログラムへ送信する（Ｓ１４０３）。次に、Ｓ１４０３でレコードの送信が成功したか否かをｉＳＣＳＩ処理プログラムから受信すると（Ｓ１４０４）、送信が成功したか否かによって処理を分岐する（Ｓ１４０５）。送信できた場合、ストレージ装置は、送信キューの先頭データ、つまり、送信キュー情報テーブル３０１の先頭レコードを削除し（Ｓ１４０６）、Ｓ１４０１の処理へ戻る。一方、送信できなかった場合、ストレージ装置は、送信キュー情報テーブル３０１の先頭レコードからコマンドアドレスを読み出し（Ｓ１４０７）、Ｓ１４０７で読み出したコマンドアドレスを含む送信可能状態通知要求をｉＳＣＳＩ処理プログラムへ送信する（Ｓ１４０８）。ストレージ装置は、ｉＳＣＳＩ処理プログラムから、送信Ｉ／Ｆ１１０，１１４のメモリ１１１，１１５の送信用バッファ領域に空き領域ができたことを示す送信可能状態通知が届くまで待ち（Ｓ１４０９）、送信可能状態通知が届いたらＳ１４０１の処理へ戻る。なお、ｉＳＣＳＩ処理プログラムが、Ｓ１４０８で送信された送信可能状態通知要求を受信すると、図１６（１）で説明する送信可能状態通知処理を実行して、送信可能状態通知を応答する。
【００７２】
図１５は、図７〜図９におけるｉＳＣＳＩカプセル化処理（Ｓ７０５，７１４，８１０，９０２）の動作手順を示すフローチャートである。本処理は、マスタストレージ装置１あるいはリモートストレージ装置２のＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行されることによって、マスタストレージ装置１あるいはリモートストレージ装置２で実行される。本処理では、最初に、ストレージ装置が、受信したレコードからコマンドアドレスを読み出し（Ｓ１５０１）、そのコマンドアドレスでキャッシュメモリ上のコマンドを特定し（Ｓ１５０２）、特定したコマンドからセッションＩＤを読み出して、そのセッションＩＤをキーとしてセッション情報テーブル３０２を検索する（Ｓ１５０３）。次に、Ｓ１５０３の結果ヒットしたレコードから、マスタＩＰアドレス、マスタポート番号、リモートＩＰアドレスおよびリモートポート番号を読み出す（Ｓ１５０４）。次に、ストレージ装置が、Ｓ１５０４で読み出した情報によりＴＣＰコネクションを特定し、そのＴＣＰコネクションの送信可否状態を取得する（Ｓ１５０５）。最後に、Ｓ１５０５で取得したＴＣＰコネクションの送信可否状態が、送信可能であるか否かで処理を分岐する（Ｓ１５０６）。ＴＣＰコネクションの送信可否状態が送信可能状態であった場合、ストレージ装置が、Ｓ１５０２で特定したコマンドにｉＳＣＳＩ  ＰＤＵヘッダを付与してｉＳＣＳＩ  ＰＤＵを生成し、それをＳ１５０５で特定したＴＣＰコネクションへ送信して（Ｓ１５０８）、その後、送信制御プログラム２０２へ送信成功通知を送信し（Ｓ１５０９）、本処理を終了する。一方、ＴＣＰコネクションの送信可否状態が送信不能状態であった場合、ストレージ装置が、送信制御プログラム２０２へ送信失敗通知を送信し（Ｓ１５０９）、本処理を終了する。
【００７３】
図１６（１）は、送信可能状態通知処理の動作手順を示すフローチャートである。本処理は、マスタストレージ装置１あるいはリモートストレージ装置２のＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行されることによって、マスタストレージ装置１あるいはリモートストレージ装置２で実行される。本処理では、最初に、ストレージ装置が、受信した送信可能状態通知要求からコマンドアドレスを読み出し（Ｓ１６０１）、そのコマンドアドレスでキャッシュメモリ上のコマンドを特定し（Ｓ１６０２）、特定したコマンドからセッションＩＤを読み出して、そのセッションＩＤをキーとしてセッション情報テーブル３０２を検索する（Ｓ１６０３）。次に、Ｓ１６０３の結果ヒットしたレコードから、マスタＩＰアドレス、マスタポート番号、リモートＩＰアドレスおよびリモートポート番号を読み出す（Ｓ１６０４）。次に、ストレージ装置が、Ｓ１６０４で読み出した情報によりＴＣＰコネクションを特定し、そのＴＣＰコネクションから送信可否状態を取得できるまで待つ（Ｓ１６０５）。その後、ストレージ装置が、ＴＣＰコネクションから送信可能状態を取得できると、送信可能状態通知を送信制御プログラムへ送信する（Ｓ１６０６）。
【００７４】
図１６（２）は、図７〜図９における脱ｉＳＣＳＩカプセル化処理（Ｓ７０８，８０１，８０４，８１３，８１６，９０８，９０５，９１３）の動作手順を示すフローチャートである。本処理は、マスタストレージ装置１あるいはリモートストレージ装置２のＣＰＵ１０９でｉＳＣＳＩ処理プログラム２０３が実行されることによって、マスタストレージ装置１あるいはリモートストレージ装置２で実行される。最初に、ストレージ装置が、ｉＳＣＳＩ  ＰＤＵから、ｉＳＣＳＩ  ＰＤＵヘッダを削除し、ＳＣＳＩコマンドを取り出す（Ｓ１６０７）。そして、ストレージ装置が、Ｓ１６０７で取り出したＳＣＳＩコマンドを冗長化処理プログラム２０４へ送信し（Ｓ１６０８）、本処理を終了する。
【００７５】
図１７および図１８は、図７〜図９における冗長コマンド受信処理（Ｓ７０９，８０２，８０５，８１４，８１７，９０６，９０９，９１４）の動作手順を示すフローチャートである。本処理は、マスタストレージ装置１およびリモートストレージ装置２のＣＰＵ１０９で冗長受信制御プログラム２０１が実行されることによって、マスタストレージ装置１およびリモートストレージ装置２で実行される。本処理では、最初に、ストレージ装置が、コマンドから順序制御タグを読み出し、それをキーとして受信履歴情報テーブル３００を検索する（Ｓ１７０１）。次に、Ｓ１７０１の検索の結果によって処理を分岐する（Ｓ１７０２）。Ｓ１７０１の検索にレコードがヒットした場合、まず、ストレージ装置が、コマンドを廃棄し（Ｓ１７１０）、ヒットしたレコードの履歴保持カウンタ３００５の値をデクリメントする（Ｓ１７１１）。次に、Ｓ１７１１の処理の結果、履歴保持カウンタ３００５の値が０になったら、ストレージ装置が、当該レコードをテーブルから削除し（Ｓ１７１２、Ｓ１７１３）、本処理を終了する。一方、Ｓ１７０１の検索にいずれのレコードもヒットしなかった場合、さらにコマンドが要求か応答かによって処理を分岐する（Ｓ１７０３）。コマンドが要求の場合、ストレージ装置が、コマンドから要求タグを読み出し、以降タスクタグとし（Ｓ１７０４）、コマンドが応答の場合、ストレージ装置が、コマンドから応答タグを読み出し、以降タスクタグとする（Ｓ１７０５）。次に、ストレージ装置が、コマンドから、マスタＩＰアドレス、マスタポート番号、リモートＩＰアドレス、リモートポート番号および同時送信数を読み出す（Ｓ１６０６）。次に、ストレージ装置が、マスタＩＰアドレス、マスタポート番号、リモートＩＰアドレスおよびリモートポート番号の組をキーに、セッション情報テーブル３０２を検索する（Ｓ１７０７）。次に、ストレージ装置が、ヒットしたレコードからタイムアウト値３０２ａを読み出し、履歴保持タイムアウトとする（Ｓ１７０８）。次に、ストレージ装置が、順序制御タグ、タスクタグ、返信フラグ(初期値：０))、履歴保持カウンタ（初期値：同時送信数−１）および履歴保持タイムアウトから成るレコードを受信履歴情報テーブル３００に追加する（Ｓ１７０９）。
【００７６】
次に、再度、コマンドが要求か応答かによって処理を分岐する（Ｓ１８０１）。コマンドが要求の場合、Ｓ１８０７以降の処理を行う。一方、コマンドが応答の場合は、まず、ストレージ装置が、コマンドからマスタノード名とリモートノード名を読み出し、これらの組をキーとして、セッション管理情報テーブル３０２を検索する（Ｓ１８０２）。次に、ストレージ装置が、Ｓ１８０２の検索にヒットしたレコードのうちひとつを取り出す（Ｓ１８０３）。次に、ストレージ装置が、取り出したレコードから送信キューアドレスを読み出し、それが指し示す送信キューを特定する（Ｓ１８０４）。そして、ストレージ装置が、特定した送信キューの情報テーブル３０１を順序制御タグで検索し、ヒットしたレコードをすべて削除する（Ｓ１８０５）。つまり、応答を受信した場合、この応答に対する要求が送信キューに残っている場合には、この送信キューから要求を削除する。ストレージ装置は、Ｓ１８０３からＳ１８０５までの処理を、Ｓ１８０２の検索でヒットしたすべてのレコードに対して実行する（Ｓ１８０６）。最後に、ストレージ装置が、コマンドから、順序制御タグ、同時送信数、マスタＩＰアドレス、マスタポート番号、リモートＩＰアドレスおよびリモートポート番号を除去し、コマンドをＳＣＳＩ処理プログラム２０５へ送信し（Ｓ１８０７）、本処理を終了する。なお、ここでは、応答を受信した場合に、この応答に対する要求が送信キューに残っている場合に、この要求を削除しているが、要求を受信した場合に、この要求に対する応答が送信キューに残っている場合に、この応答を削除するようにしてもよい。
【００７７】
図１９は、図７〜図９における受信履歴タイマ制御処理（Ｓ７１０，８０３，８０６，８１５，８１８，９０７，９１０，９１５）の動作手順を示すフローチャートである。本処理は、マスタストレージ装置１あるいはリモートストレージ装置２のＣＰＵ１０９でタイマ制御プログラム２００が実行されることによって、マスタストレージ装置１あるいはリモートストレージ装置２で実行される。
【００７８】
最初に、ストレージ装置は、１秒間待つ（Ｓ１９０１）。次に、ストレージ装置が、受信履歴情報テーブル３００のすべてのレコードにおいて、エントリ３００５（履歴保持タイムアウト）の値をデクリメントする（Ｓ１９０２）。最後に、ストレージ装置が、エントリ３００５の値が０となったレコードを削除し（Ｓ１９０３）、Ｓ１９０１の処理へ戻る。なお、履歴保持タイムアウトの初期値は、ここでは、１０秒で、受信履歴情報テーブル３００のレコードにエントリされた時点から、以上の処理が開示される。
【００７９】
図２０および図２１は、図７及び図８におけるＳＣＳＩ応答生成処理（Ｓ７１１，８１９）の動作手順を示すフローチャートである。本処理は、リモートストレージ装置２のＣＰＵ１０９でＳＣＳＩ処理プログラム２０５が実行されることによって、リモートストレージ装置２で実行される。最初に、コマンドが、ＳＣＳＩ  Ｗｒｉｔｅ要求か否かにより処理を分岐する（Ｓ２００１）。ＳＣＳＩ  Ｗｒｉｔｅ要求ではない場合、リモートストレージ装置２が、図２２で説明するＳＣＳＩ  ＸＦＲ＿ＲＤＹ生成処理を実行し（Ｓ２００２）、ＳＣＳＩ応答生成処理を終了する。一方、ＳＣＳＩ  Ｗｒｉｔｅ要求である場合、リモートストレージ装置２が、コマンドから応答タグを読み出し、それをキーとして応答情報テーブル３０３を検索する（Ｓ２００３）。次に、リモートストレージ装置２が、ヒットしたレコードから、論理デバイスＩＤ、論理ブロックアドレスおよび処理済データ長を読み出す（Ｓ２００４）。次に、リモートストレージ装置２が、論理デバイスＩＤでデータ更新対象論理デバイスを特定する（Ｓ２００５）。次に、論理ブロックアドレスに処理済データ長を加えた値をデータ更新ブロックアドレスとする（Ｓ２００６）。次に、リモートストレージ装置２が、コマンドから送信データを読み出し、Ｓ２００５で特定したデータ更新対象論理デバイスの、Ｓ２００６で算出したデータ更新ブロックアドレスを先頭とする領域に書き込む（Ｓ２００７）。次に、コマンドから送信データ長を読み出す（Ｓ２００８）。次に、リモートストレージ装置２が、Ｓ２００３でヒットしたレコードの処理済みデータサイズの値を、送信データ長分加算する（Ｓ２００９）。
【００８０】
次に、コマンドがファイナルビットを含むか否かで処理を分岐する（Ｓ２１０１）。ファイナルビットを含まない場合、リモートストレージ装置２が、図２２で説明するＳＣＳＩ  ＸＦＲ＿ＲＤＹ生成処理を実行し（Ｓ２１０２）、ＳＣＳＩ応答生成処理を終了する。一方、ファイナルビットを含む場合、リモートストレージ装置２が、コマンドから、マスタノード名、マスタ論理デバイスＩＤ、リモートノード名、リモート論理デバイスＩＤ、要求タグおよび論理ブロックアドレスを読み出す（Ｓ２１０３）。次に、リモートストレージ装置２が、マスタノード名、マスタ論理デバイスＩＤ、リモートノード名、リモート論理デバイスＩＤ、要求タグ、論理ブロックアドレスからなる、ＳＣＳＩ  ＲＳＰ応答を生成する（Ｓ２１０４）。最後に、リモートストレージ装置２が、Ｓ２００３でヒットしたレコードを、応答情報テーブル３０３から削除して（Ｓ２１０５）、本処理を終了する。
【００８１】
図２２は、図２０及び図２１におけるＳＣＳＩ  ＸＦＲ＿ＲＤＹ生成処理（Ｓ２００２，２１０２）の動作手順を示すフローチャートである。本処理は、リモートストレージ装置２のＣＰＵ１０９でＳＣＳＩ処理プログラム２０５が実行されることによって、リモートストレージ装置２で実行される。本処理では、最初に、コマンドが、ＳＣＳＩ  Ｗｒｉｔｅ要求か否かにより処理を分岐する（Ｓ２２０１）。ＳＣＳＩ  Ｗｒｉｔｅ要求ではない場合、リモートストレージ装置２が、コマンドから応答タグを読み出し（Ｓ２２０２）、Ｓ２２０７以降の処理を実行する。一方、ＳＣＳＩ  Ｗｒｉｔｅ要求である場合、リモートストレージ装置２は、コマンドに一意な応答タグを発行する（Ｓ２２０３）。次にリモートストレージ装置２が、コマンドからリモート論理デバイスＩＤの値を読み出し、論理デバイスＩＤとする（Ｓ２２０４）。次に、リモートストレージ装置２が、コマンドから論理ブロックアドレスおよびデータ長を読み出す（Ｓ２２０５）。次に、リモートストレージ装置２が、Ｓ２２０３で発行した応答タグ、Ｓ２２０２で読み出した論理デバイスＩＤと論理ブロックアドレス、および処理済データ長（初期値：０）から成るレコードを応答情報テーブル３０３に追加する（Ｓ２２０６）。次に、リモートストレージ装置２が、ディスク管理プログラム２０７へ、書込み可能データ長通知要求を送信し（Ｓ２２０７）、その後、書込み可能データ長通知を受けると、その通知から書込み可能データ長を読み出す（Ｓ２２０８）。次に、コマンドから、マスタノード名、マスタ論理デバイスＩＤ、リモートノード名、リモート論理デバイスＩＤおよび要求タグを読み出す（Ｓ２２０９）。最後に、リモートストレージ装置２が、マスタノード名、マスタ論理デバイスＩＤ、リモートノード名、リモート論理デバイスＩＤ、要求タグ、応答タグおよび書込み可能データ長からなるＳＣＳＩ  ＸＦＲ＿ＲＤＹを組み立て（Ｓ２２１０）、本処理を終了する。
【００８２】
図２３および図２４は、図８及び図９におけるＳＣＳＩ応答受信処理（Ｓ８０７，９１１）の動作手順を示すフローチャートである。本処理は、マスタストレージ装置１のＣＰＵ１０９でＳＣＳＩ処理プログラム２０５が実行されることによって、マスタストレージ装置１で実行される。本処理では、最初に、受信したコマンドがＸＦＲ＿ＲＤＹ応答かＲＳＰ応答かによって処理を分岐する（Ｓ２３０１）。ＲＳＰ応答の場合、マスタストレージ装置１が、コマンドから、マスタノード名、マスタ論理デバイスＩＤ、論理ブロックアドレスおよび要求タグを読み出し、それらから成るデータ更新完了通知を生成して、リモートコピープログラム２０６へ送信し（Ｓ２３０２）、本処理を終了する。一方、ＸＦＲ＿ＲＤＹ応答の場合、マスタストレージ装置１が、コマンドから書込み可能長を読み出し（Ｓ２３０３）、さらに、コマンドから要求タグを読み出し、それをキーとして要求情報テーブル３０４を検索する（Ｓ２３０４）。次に、マスタストレージ装置１が、Ｓ２３０４の検索にヒットしたレコードから、先頭メモリアドレス、データ長および処理済データ長を読み出す（Ｓ２３０５）。そして、マスタストレージ装置１が、先頭メモリアドレスに処理済データ長を加えたアドレスを、送信データ取得アドレスとする（Ｓ２３０６）。
【００８３】
次に、書込み可能データ長が、データ長から処理済みデータ長を減算した結果以上であれば（Ｓ２３０７）、データ長から処理済データ長を差し引いた値を送信データ長とし（Ｓ２３０８）、そうでなければ、書込み可能データ長を送信データ長とする（Ｓ２３０９）。次に、送信データ取得アドレスから送信データ長分のデータを送信データとする（Ｓ２３１０）。次に、マスタストレージ装置１が、Ｓ２３０４の検索にヒットしたレコードの処理済みデータサイズの値を、送信データ長分加算する（Ｓ２３１１）。
【００８４】
次に、マスタストレージ装置１が、コマンドから、マスタノード名、マスタ論理デバイスＩＤ、リモートノード名、リモート論理デバイスＩＤ、要求タグおよび応答タグを読み出す（Ｓ２４０１）。そして、マスタストレージ装置１が、マスタノード名、マスタ論理デバイスＩＤ、リモートノード名、リモート論理デバイスＩＤ、要求タグ、応答タグ、データ長、送信データ長および送信データからなるＳＣＳＩ ＤＡＴＡ＿ＯＵＴ要求を組み立てる（Ｓ２４０２）。最後に、リモートデータ長が、データ長から処理済みデータ長を減算した結果以上であれば（Ｓ２４０３）、マスタストレージ装置１が、Ｓ２４０２で組み立てたＳＣＳＩ ＤＡＴＡ＿ＯＵＴ応答に、ファイナルビットを付与する（Ｓ２４０４）。以上で、本処理を終了する。
【００８５】
図２５は、図９における完了応答送信処理（Ｓ９１２）の動作手順を示すフローチャートである。本処理は、マスタストレージ装置１のＣＰＵ１０９でリモートコピープログラム２０６が実行されることによって、マスタストレージ装置１で実行される。本処理では、最初に、マスタストレージ装置１が、データ更新完了通知を受信すると、そのデータ更新完了通知から要求タグを読み出し、それをキーとして要求情報テーブル３０３を検索する（Ｓ２５０１）。次に、マスタストレージ装置１が、Ｓ２５０１の検索でヒットしたレコードから先頭メモリアドレスおよびデータ長を読み出す（Ｓ２５０２）。次に、マスタストレージ装置１が、データ更新完了通知から、マスタノード名、マスタ論理デバイスＩＤおよび論理ブロックアドレスを読み出す（Ｓ２５０３）。次に、マスタストレージ装置１が、マスタノード名、マスタ論理デバイスＩＤ、論理ブロックアドレス、およびデータ長からなる完了応答を、ディスク管理プログラム２０７へ送信する（Ｓ２５０４）。次に、マスタストレージ装置１が、ヒットしたレコードを、要求情報テーブル３０３から削除する（Ｓ２５０５）。最後に、マスタストレージ装置１が、先頭メモリアドレスで確保済みメモリ領域を特定し開放し（Ｓ２５０６）、本処理を終了する。
【００８６】
以上、本実施形態では、図３９に示すように、各ストレージ装置１，２に送信経路Ａ，Ｂ毎に送信キュー３０６ａ，３０６ｂを設け、各送信キュー３０６，３０６ｂに同じ要求データ又は応答データを格納して、各要求データ又は応答データを各送信経路Ａ，Ｂを介して、相手方のストレージ装置２，１へ送信している。相手方のストレージ装置２，１は、先着の要求データ又は応答データの履歴を受信履歴情報テーブル３００に格納し、後着の要求データ又は応答データを廃棄している。また、要求データの送信元のストレージ装置１は、要求データに対する応答データを１つでも受信すると、送信キュー３０６ａ，３０６ｂを検索して、この送信キュー３０６ａ，３０６ｂに要求データが残っていれば、これを削除している。
【００８７】
従って、第１実施形態では、ｉＳＣＳＩを用いたリモートコピーを行う場合、ＴＣＰ／ＩＰの特性により複数の通信経路間の送信レートに大きな差が生じたときに、送信レートの低い通信経路の送信待ち要求が、送信レートの高い通信経路の送信待ち要求よりも非常に多くなることを防ぎ、複数の通信経路間の応答時間差の増大を防止できる。また、送信レートの低い通信経路に送出されるデータの量を少なくでき、この通信経路の送信レートを高めることができる。すなわち、本実施形態では、送信レートの高い通信経路が故障した場合のリモートコピーの滞留を防ぎ、基幹業務の停止を防ぐことができる。さらに、無駄なデータ送信を削減し、通信経路の帯域の浪費を減らすことができる。
【００８８】
「第２実施形態」
本実施形態は、ホストとストレージ装置とを備え、このホストとストレージ装置間でｉＳＣＳＩを用いてストレージアクセスを行うストレージシステムである。
【００８９】
図２６は、第２実施形態のストレージシステムの構成例を示した図である。このストレージシステムは、前述したように、ホスト２８とストレージ装置２１とを備え、両者間をスイッチ２２、ＬＡＮ２４およびスイッチ２６から成る第一の経路Ａと、スイッチ２３、ＬＡＮ２５およびスイッチ２７から成る第二の経路Ｂにより接続しているものである。
【００９０】
ストレージ装置２１は、単体の記憶装置あるいは複数の記憶装置を有する記憶装置システムである。なお、記憶装置は、ハードディスクドライブやＤＶＤといった、不揮発性の記憶媒体を用いた装置が含まれる。また、記憶装置システムでは、ＲＡＩＤ構成が採用されていてもよい。ストレージ装置２１は、複数の記憶装置（以下、「ディスク」という）１５０，１５１，１５２と、これらディスク１５０，１５１，１５２に対するデータの書き込みや読み出しを制御するディスクコントローラ１５４と、各ディスク１５０，１５１，１５２とディスクコントローラ１５４とを接続するバスなどの通信線であるＩＯパス１５３と、を備えている。
【００９１】
ディスクコントローラ１５４は、スイッチ２２やスイッチ２３経由で他装置と通信する通信通信Ｉ／Ｆ１６０，１６４と、各種プログラム等が記憶されるメモリ１５７と、メモリ１５７に記憶されている各プログラムを実行するＣＰＵ１５９と、ディスクコントローラ１５４をＩＯパス１５３に接続させるためのインタフェースであるＩＯ  Ｉ／Ｆ１５５と、バスなどの通信線（以下、「内部バス」という）１５８とを備えている。
【００９２】
メモリ１５７には、ストレージ装置が受信した情報をテーブル等の記憶手段に登録する際に実行される情報登録プログラム２５６と、ディスクに記憶されたデータが更新される際に実行されるディスク管理プログラム２５７、データ書込み・読出しのためのＳＣＳＩコマンドの生成を行う際に実行されるＳＣＳＩ処理プログラム２５５、ＳＣＳＩコマンドの冗長化処理を行う際に実行される冗長化処理プログラム２５４、ＳＣＳＩコマンドをＴＣＰ／ＩＰでカプセル化する際に実行されるｉＳＣＳＩ処理プログラム２５３、カプセル化したＳＣＳＩコマンドを通信Ｉ／Ｆ１６０，１６４へ送信する際に実行される送信制御プログラム２５２、重複して受信したＳＣＳＩコマンドを着順に応じて処理する冗長コマンド受信処理を行う際に実行される冗長受信制御プログラム２５１、および時間経過に応じて受信履歴を消去する際に実行されるタイマ制御プログラム２５０が格納される。
【００９３】
さらに、メモリ１５７には、ディスクから読み出されたデータ書き込みに伴う更新データを記憶するキャッシュメモリ３５０と、あるデータを記憶するストレージ装置およびストレージ装置内の論理的なディスクの識別子、それに記憶されたデータにアクセスするホストおよびホスト内の論理的なディスクの識別子との対応情報を記憶するストレージアクセス情報テーブル３５５と、ＳＣＳＩ要求・応答の中で、あるデータ書込み・読出しのために生じる一連のＳＣＳＩ応答のグループを一意に識別する情報を記憶する応答情報テーブル３５４と、ホスト２８がストレージ装置２１との間に確立したｉＳＣＳＩセッションの情報を記憶するセッション情報テーブル３５３と、送出待ちＳＣＳＩ要求・応答の情報を記憶する送信キュー情報テーブル３５２と、受信済みのＳＣＳＩコマンドの情報を記憶する受信履歴情報テーブル３５１とが格納される。さらに、キャッシュメモリ３５０上には、送出待ちＳＣＳＩ要求・応答が格納される送信待ちキュー３５０ａ，３５０ｂが形成される。この送信待ちキュー３５０ａ，３５０ｂは、各ポート１６３，１６７毎に対応して設けられる。なお、本実施形態では、以上のテーブルは、読み書きの速度が速いメモリ１５７に格納されることとしているが、ディスク１５０〜１５２に格納されてもよい。また、上記のプログラム２５０〜２５７は、あらかじめ、または可搬型記録媒体からの読み込み、または他装置からのＬＡＮ２４もしくはＬＡＮ２５経由のダウンロードにより、前記ディスク１５０に格納され、必要に応じてメモリ１５７に転送された後、ＣＰＵ１５９が実行する。
【００９４】
通信Ｉ／Ｆ１６０は、通信用バッファとして使用するメモリ１６１、他装置との通信を処理する通信処理部１６２およびスイッチ２２へのケーブルを接続するポート１６３とを備えている。また、通信Ｉ／Ｆ１６４も、以上と同様に、メモリ１６５、通信処理部１６６およびスイッチ２３へのケーブルを接続するポート１６７とを備えている。
【００９５】
ホスト２８は、各種プログラム等が記憶されるメモリ１７０と、ディスク１７１と、メモリ１７０に記憶された各プログラムを実行するＣＰＵ１７５と、出力装置としてのディスプレイ１７４と、キーボードなどの文字入力装置１７３、マウスやタッチパネルなどのポインティング装置１７２と、内部バス１７６およびホスト２１をスイッチ２６やスイッチ２７と接続するインタフェースである通信Ｉ／Ｆ１６８，１６９とを備えている。
【００９６】
ホスト２８のメモリ１７０には、ホスト２８がデータベース等のサービスを提供する際に実行されるアプリケーションプログラム２６７、このアプリケーションプログラム２６７の実行に必要となるデータの書込み・読み出しなどの汎用的な操作を行う際に実行されるオペレーティングシステムプログラム２６６、システム管理者等がホスト２８のストレージアクセスに必要な情報の入力作業を行うためのＧＵＩ画面を表示する際に実行されるＧＵＩ制御プログラム２６４、システム管理者が入力した情報をテーブル等に登録する際にＣＰＵ１７５で実行される情報登録プログラム２６８、システム管理者等が入力した情報や指示をストレージ装置２１へ送信する際に実行される情報送信プログラム２６５、時間経過に応じて受信履歴を消去する際にタイマ制御プログラム２６３、データ書込み・読出しのためのＳＣＳＩコマンドの生成を行う際に実行されるＳＣＳＩ処理プログラム２６２、ＳＣＳＩコマンドの冗長化処理を行う際にＣＰＵ１７５で実行される冗長化処理プログラム２６１、ＳＣＳＩコマンドをＴＣＰ／ＩＰでカプセル化する際に実行されるｉＳＣＳＩ処理プログラム２６０、カプセル化したＳＣＳＩコマンドを通信Ｉ／Ｆ１６８，１６９へ送信する際に実行される送信制御プログラム２５９、および重複して受信したＳＣＳＩコマンドを着順に応じて処理する冗長コマンド受信処理を行う際に実行される冗長受信制御プログラム２５８が格納される。さらに、メモリ１７０には、あるデータを記憶するストレージ装置およびストレージ装置内の論理的なディスクの識別子と、それに記憶されたデータにアクセスするホストおよびホスト内の論理的なディスクの識別子との対応情報を記憶するストレージアクセス情報テーブル３６０、ＳＣＳＩ要求・応答の中で、あるデータ書込み・読出しのために生じる一連のＳＣＳＩ要求のグループを一意に識別する情報を記憶する要求情報テーブル３５９、ホスト２８がストレージ装置２１との間に確立したｉＳＣＳＩセッションの情報を記憶するセッション情報テーブル３５８、送出待ちＳＣＳＩ要求・応答の情報を記憶する送信キュー情報テーブル３５７および受信済みのＳＣＳＩコマンドの情報を記憶する受信履歴情報テーブル３５６が格納される。また、このメモリ１７０には、送出待ちＳＣＳＩ要求・応答が格納される送信待ちキュー３７０ａ，３７０ｂが形成される。この送信待ちキュー３７０ａ，３７０ｂは、各通信Ｉ／Ｆ１６８，１６９のポート毎に対応して設けられる。なお、第２実施形態では、これらのテーブルは、読み書きの速度が速いメモリ１７０に格納されることとしているが、ディスク１７１に格納されてもよい。また、上記のプログラム２５８〜２６７は、あらかじめ、または可搬型記録媒体からの読み込み、または他装置からのＬＡＮ２４もしくはＬＡＮ２５経由のダウンロードにより、前記ディスク１７１に格納され、必要に応じてメモリ１７０に転送された後、ＣＰＵ１７５が実行する。
【００９７】
次に、ストレージ装置２１のメモリ１５７とホスト２８のメモリ１７０に格納される各種テーブルのデータ構造について説明する。
【００９８】
ストレージアクセス情報テーブル３５５，３６０、要求情報テーブル３５９、応答情報テーブル３５４、セッション情報テーブル３５３，３５８、送信キュー情報テーブル３５２，３５７、および受信履歴情報テーブル３５０，３５６は配列構造を成し、１つ以上のレコードを格納可能である。ただし、データ構造が配列構造に限定されることはない。
【００９９】
図２７（１）は、ストレージアクセス情報テーブル３５５，３６０のデータ構造例を示す図である。ストレージアクセス情報テーブル３５５、３６０の各レコードは、ホストの識別子であるホスト名が登録されるエントリ３５５１、ホスト内の論理ディスクの識別子であるホスト論理デバイスＩＤが登録されるエントリ３５５２、ストレージ装置の識別子であるストレージ名が登録されるエントリ３５５３およびストレージ装置内の論理ディスクの識別子であるストレージ論理デバイスＩＤが登録されるエントリ３５５４を有する。例えば、レコード３５５０は、ホスト名が「Ｘ１」であるホスト内の、ホスト論理デバイスＩＤが「ｓｄｂ１」である論理ディスク内にあるように見えるデータを実際に記憶しているのが、ストレージ名が「Ｙ１」であるストレージ装置内の、ストレージ論理デバイスＩＤが「ｓｄｂ２」であるディスクであることを表す。
【０１００】
図２７（２）は、セッション情報テーブル３５３，３５８のデータ構造例を示す図である。セッション情報テーブル３５３，３５８の各レコードは、データを送信するセッションを一意に識別するためのセッションＩＤが登録されるエントリ３５２１、前記ホスト名が登録されるエントリ３５２２、セッションのホスト２８側のＩＰアドレスであるホストＩＰアドレスが登録されるエントリ３５２３、セッションのホスト２８側のポート番号であるホストポート番号が登録されるエントリ３５２４、前記ストレージ名が登録されるエントリ３５２５、セッションのストレージ装置２１側のＩＰアドレスであるストレージＩＰアドレスが登録されるエントリ３５２６、セッションのストレージ装置２１側のポート番号であるストレージポート番号が登録されるエントリ３５２７、このセッションへ送り出す前のＳＣＳＩコマンド(ＳＣＳＩ要求orＳＣＳＩ応答)のアドレスを保持する送信キューアドレスが登録されるエントリ３５２８、および経路に張られたセッションのタイムアウト値が登録されるエントリ３５２９を有する。例えば、レコード３５２０は、セッションＩＤ「Ｓ１」で識別されるセッションが、ホスト名「Ｘ１」、ホストＩＰアドレス「２１１．１．１．２０」およびホストポート番号「１００００」で特定されるホスト２８側の端点と、ストレージ名「Ｙ１」、ストレージＩＰアドレス「１７８．１．８．１５」およびストレージポート番号「１２０００」で特定されるストレージ装置２１側の端点を接続したものであり、またそのセッションで通信が途絶えるとタイムアウトと判断する時間がタイムアウト値「１０」秒間であることを表す。
【０１０１】
要求情報テーブル３５４及び応答情報テーブル３５４のデータ構造は、第１実施形態で図２（２）（３）を用いて説明したものと基本的同じである。また、送信キュー情報テーブル３５２，３５７のデータ構造は、第１実施形態で図２（５）を用いて説明したものと基本的に同じである。受信履歴情報テーブル３５１，３５６のデータ構造は、第1実施形態で図２（６）を用いて説明したものと基本的に同じである。但し、この実施形態では、タスクタグに関しては、ホスト２８においては要求タグをタスクタグとし、ストレージ装置２１においては応答タグをタスクタグとしている。
【０１０２】
次に、第２実施形態で用いられるＧＵＩについて説明する。ＧＵＩ画面は、ホスト２８のＣＰＵ１７５がＧＵＩ制御プログラム２６４を実行することによってディスプレイ１７４に表示される。システム管理者等は、文字入力装置１７３およびポインティング装置１７２を用いて、表示されたＧＵＩ上で各パラメータを設定する。
【０１０３】
図２８は、システム管理者等が、ホスト２８によるストレージアクセスに必要な情報を入力するために使用する、ストレージアクセス情報入力画面Ｇ２８００の表示例を示す図である。ストレージアクセス情報入力画面Ｇ２８００は、ホスト名が入力される領域Ｇ２８０１、ホスト論理デバイスＩＤが入力される領域Ｇ２８０２、ストレージ名が入力される領域Ｇ２８０３、ストレージ論理デバイスＩＤが入力される領域Ｇ２８０４、第一の経路に関する情報が入力される領域Ｇ２８０５、第二の経路に関する情報が入力される領域Ｇ２８０６、これらの領域で指定された情報をホスト２８へ登録する際に指定されるボタンＧ２８０７および登録を取り消す際に指定されるボタンＧ２８０８を有する。
さらに、領域Ｇ２８０５は、ホストＩＰアドレスが入力される領域Ｇ２８１０、ホストポート番号が入力される領域Ｇ２８１１、ストレージＩＰアドレスが入力される領域Ｇ２８１２、ストレージポート番号が入力される領域Ｇ２８１３およびタイムアウト値が入力される領域Ｇ２８１４を有する。同様に、領域Ｇ２８０６は、ホストＩＰアドレスが入力される領域Ｇ２８２０、ホストポート番号が入力される領域Ｇ２８２１、ストレージＩＰアドレスが入力される領域Ｇ２８２２、ストレージポート番号が入力される領域Ｇ２８２３およびタイムアウト値が入力される領域Ｇ２８２４を有する。
【０１０４】
次に、第２実施形態における各装置間の通信シーケンスについて説明する。
【０１０５】
図２９は、システム管理者等が、ホスト２８を使用して、ホストのストレージアクセスに必要な情報をホスト２８に入力する時から、ホスト２８およびストレージ装置２１へ情報を登録する時までの、装置間の通信シーケンス例を示す図である。
【０１０６】
最初に、ホスト２８のＣＰＵ１７５でＧＵＩ制御プログラム２６４が実行され、ホスト２８が、ストレージアクセス情報入力画面Ｇ２８００を表示し、システム管理者等からの入力を受け付けるストレージアクセス情報入力処理を実行する（Ｓ２９０１）。その後、システム管理者等がボタンＧ２８０７を指定すると、まず、ＣＰＵ１７５で情報登録プログラム２６８が実行され、ホスト２８が領域Ｇ２８０１から領域Ｇ２８０６までに入力された情報に従って図３０で説明する情報登録処理を行い、ホストのストレージアクセスに必要な情報を各種テーブルに登録する（Ｓ２９０２）。次に、ＣＰＵ１７５で情報送信プログラム２６５が実行され、ホスト２８が、領域Ｇ２８０１から領域Ｇ２８０６までに入力された情報からなる情報登録要求を組み立て、ストレージ装置２１へ送信する（Ｓ２９０３）。ストレージ装置２１が前記情報登録要求を受信すると、ＣＰＵ１５９で情報登録プログラム２５６が実行され、ストレージ装置２１が図３０で説明する情報登録処理を実行し、ホストのストレージアクセスに必要な情報を各種テーブルに登録する（Ｓ２９０４）。そして、ストレージ装置２１は、情報が登録されたことを表す情報登録応答をホスト２８へ送信する（Ｓ２９０５）。
【０１０７】
次に、ホスト２８は、前記情報登録応答を受信すると、以下の経路開設処理を行う（Ｓ２９０６）。まず、ホスト２８は、前記経路開設要求から経路１のホスト名と、ストレージ名と、経路１のホストＩＰアドレス、ホストポート番号、ストレージＩＰアドレスおよびストレージポート番号とを取り出し、前記ホスト名が示すイニシエータから前記ストレージ名が示すターゲットへのログイン要求を表す経路１開設要求を組み立て、ストレージ装置２１へ送信する（Ｓ２９０７）。この経路１開設要求のソースＩＰアドレスは前記ホストＩＰアドレスであり、デスティネーションＩＰアドレスは前記ストレージＩＰアドレスであり、ソースＴＣＰポート番号は前記ホストポート番号であり、デスティネーションＴＣＰポート番号は前記ストレージポート番号である。ストレージ装置２１が前記経路１開設要求を受信すると、ｉＳＣＳＩセッションを許可することを表す経路１開設応答を送信する（Ｓ２９０８）。このようにして第一の経路上にｉＳＣＳＩセッションを確立する。その後、同様に、第二の経路上にｉＳＣＳＩセッションを確立する（Ｓ２９０９、Ｓ２９１０）。以上が、ホストのストレージアクセスに必要な情報の登録に関わる通信シーケンスである。
【０１０８】
図３０は、情報登録処理の動作手順を示すフローチャートである。本処理は、ホスト２８のＣＰＵ１７５で情報登録プログラム２６８が実行されるか、あるいはストレージ装置２１のＣＰＵ１５９で情報登録プログラム２５６が実行されることによって、実行される。本処理では、最初に、ホスト２８あるいはストレージ装置２１が、領域Ｇ２８０１から領域Ｇ２８０４までに入力された情報に基づき、ストレージアクセス情報テーブル３６０あるいは３５５へレコードを追加する（Ｓ３００１）。ここで追加されるレコードのエントリ３５５１にはホスト名が、エントリ３５５２にはホスト論理デバイスＩＤが、エントリ３５５３にはストレージ名が、エントリ３５５４にはストレージ論理デバイスＩＤがそれぞれ登録される。次に、ホスト２８は、メモリ１７０に送信キュー３７０ａ，３７０ｂを形成すると共に、送信キュー情報テーブル３５７を作成し、送信キュー３７０ａ，３７０ｂの先頭アドレスを送信キューアドレスとする。また、ストレージ装置２１は、キャッシュメモリ３５０に送信キュー３５０ａ，３５０ｂを形成すると共に、送信キュー情報テーブル３５２を作成し、送信キュー３５０ａ，３５０ｂの先頭アドレスを、送信キューアドレスとする（Ｓ３００２）。次に、ホスト２８あるいはストレージ装置２１が、第一の経路Ａに対して、一意なセッションＩＤを発行する（Ｓ３００３）。次に、ホスト２８あるいはストレージ装置２１が、前記領域Ｇ２８０１からＧ２８０６の内容に基づき、セッション情報テーブル３５８あるいは３５３にレコードを追加する（Ｓ３００４）。ここで追加するレコードのエントリ３５２１にはＳ３００３で得たセッションＩＤが、エントリ３５２２にはホスト名が、エントリ３５２３にはホストＩＰアドレスが、エントリ３５２４にはホストポート番号が、エントリ３５２５にはストレージ名が、エントリ３５２６にはストレージＩＰアドレスが、エントリ３５２７にはストレージポート番号が、エントリ３５２８にはＳ３００２で得た送信キューアドレスが、エントリ３５２９にはタイムアウト値がそれぞれ登録される。そして、ホスト２８あるいはストレージ装置２１が、Ｓ３００２からＳ３００４までの処理を、第二の経路Ｂについても同様に実行する（Ｓ３００５）。この第二の経路Ｂについても同様に実行することで、より具体的には、Ｓ６０２を繰り返すことで、第一の経路Ａ用の送信キュー３５０ａ，３７０ａと、第二の経路Ｂ用の送信キュー３５０ｂ，３７０ｂとが生成される。
【０１０９】
図３１と図３２は、ホスト２８のアプリケーションプログラム２６７が、オペレーティングシステムプログラム２６６へデータ読出し要求を送信した時の、装置間の通信シーケンス例を示す図である。
【０１１０】
ホスト２８では、データベース等のサービスを提供するために、ホスト２８のＣＰＵ１７５でアプリケーションプログラム２６７が常時実行されている。データベースの参照等のために、データ読出しが必要になったとき、アプリケーションプログラム２６７は、ホスト名、ホスト論理デバイスＩＤ、論理ブロックアドレス、データ長から成るデータ読出し要求を組み立て、それを入力としてオペレーティングシステムプログラム２６６をＣＰＵ１７５で実行する。
【０１１１】
ホスト２８のオペレーティングシステムプログラム２６６が、アプリケーションプログラム２６７からデータ読出し要求を受信すると、ホスト２８は、図３３で説明するデータ読出し要求受信処理を行い、Ｒｅａｄ要求を組み立て、ＳＣＳＩ処理プログラム２６２へ送信する。（Ｓ３１０１）。次に、ＣＰＵ１７５でＳＣＳＩ処理プログラム２６２が、前記Ｒｅａｄ要求を入力として実行され、ホスト２８が図３４で説明するＳＣＳＩ  Ｒｅａｄ要求生成処理を行い、データの読出しを要求するＳＣＳＩコマンドを組み立てる（Ｓ３１０２）。次に、ＣＰＵ１７５で冗長化処理プログラム２６１が、前記ＳＣＳＩコマンドを入力として実行され、ホスト２８が、図１２および図１３を用いて前述した、同一コマンドを複数の経路へ送出するコマンド冗長化処理を行い、ＳＣＳＩコマンドを第一の経路Ａの送信キュー、および第二の経路Ｂの送信キューへ追加する。ただし、第２実施形態においては、図１３を用いて前述した処理で、“マスタノード名”を“ホスト名”に、“リモートノード名”を“ストレージ名に、”キャッシュメモリ“を”メモリ“に、それぞれ読み替えて実行する（Ｓ３１０３）。一方、ＣＰＵ１７５では送信制御プログラム２５９が、ホスト２８の起動時から常に実行されている。その結果、ホスト２８は、図１４を用いて前述した送信キュー制御処理を繰り返し実行しており、Ｓ３１０３で送信キューに追加されたＳＣＳＩコマンドが、送信キューの先頭に至ると、ホスト２８はそのＳＣＳＩコマンドをｉＳＣＳＩ処理プログラム２６０へ送信する（Ｓ３１０４）。次に、ＣＰＵ１７５でｉＳＣＳＩ処理プログラム２６０が実行され、ホスト２８が図１５を用いて前述したｉＳＣＳＩカプセル化処理を行い、ｉＳＣＳＩ  ＰＤＵを組み立て、それをストレージ装置２１宛てに送信する。ただし、第２実施形態においては、図１５を用いて前述した処理で、”マスタ“を”ホスト“に、”リモート“を”ストレージ“に、それぞれ読み替えて実行する（Ｓ３１０５）。このようなＳ３１０３からＳ３１０５の処理の結果、ホスト２８は、読出し要求をスイッチ２６およびスイッチ２７に冗長化送信する（Ｓ３１０６、Ｓ３１０７）。
【０１１２】
その後、ストレージ装置２１が、第一の経路Ａを通った読出し要求を、第二の経路を通った読出し要求よりも早く受信すると、ストレージ装置２１のＣＰＵ１５９でｉＳＣＳＩ処理プログラム２５３が実行され、ストレージ装置２１が図１６（２）を用いて前述した脱ｉＳＣＳＩカプセル化処理を行い、受信した更新準備要求からＳＣＳＩコマンドを取り出す（Ｓ３１０８）。次に、ＣＰＵ１５９で冗長受信制御プログラム２５１が実行され、ストレージ装置２１が図１７および図１８を用いて前述した冗長コマンド受信処理を行い、同一の読出し要求を既に受信済みか否かを調べる。現時点では、受信していないため、Ｓ３１０８で取り出したＳＣＳＩ  Ｗｒｉｔｅ要求をＳＣＳＩ処理プログラム２５５へ送信する。ただし、第２実施形態においては、図１７および図１８を用いて前述した処理で、”マスタ“を”ホスト“に、”リモート“を”ストレージ“に、それぞれ読み替えて実行する（Ｓ３１０９）。また、受信履歴情報テーブル３５１に、前記読出し要求を受信したことを表す受信履歴を記憶する。一方、ストレージ装置２１のＣＰＵ１５９では、タイマ制御プログラム２５０が、ストレージ装置２１の起動時から常に実行されている。その結果、ストレージ装置２１は、図１９を用いて前述した受信履歴タイマ制御処理を繰り返し実行しており、Ｓ３１０９で受信履歴テーブル３５１に記憶された受信履歴のタイムアウト値が０になると、ストレージ装置２１は受信履歴テーブル３５１からその受信履歴を消去する（Ｓ３１１０）。次に、ＣＰＵ１５９でＳＣＳＩ処理プログラム２５５が実行され、ストレージ装置２１が図３６で説明するＳＣＳＩ  Ｒｅａｄ応答生成処理を行い、Ｓ３１０９で取り出したＳＣＳＩ  Ｒｅａｄ要求に対応する応答であるＳＣＳＩ  Ｄａｔａ＿Ｉｎ応答を組み立て、冗長化処理プログラム２５４へ送信する。（Ｓ３１１１）。次に、ＣＰＵ１５９で冗長化処理プログラム２５４が実行され、ストレージ装置２１がコマンド冗長化処理を行い、ＳＣＳＩコマンドを第一の経路Ａの送信キュー、および第二の経路Ｂの送信キューへ追加する（Ｓ３１１２）。一方、ホスト２８と同様に、ストレージ装置２１のＣＰＵ１５９では送信制御プログラム２５２が、ストレージ装置２１の起動時から常に実行されている。その結果、ストレージ装置２１は、図１４を用いて前述した送信キュー制御処理を繰り返し実行しており、Ｓ３１１２で送信キューに追加されたＳＣＳＩコマンドが、送信キューの先頭に至ると、ストレージ装置２１はそのＳＣＳＩコマンドをｉＳＣＳＩ処理プログラム２５３へ送信する（Ｓ３１１３）。次に、ＣＰＵ１５９でｉＳＣＳＩ処理プログラム２５３が実行され、ホスト２８が図１５を用いて前述したｉＳＣＳＩカプセル化処理を行い、ｉＳＣＳＩ  ＰＤＵを組み立て、それをホスト２８あてに送信する（Ｓ３１１４）。その結果、ストレージ装置２１は、読出し応答をスイッチ２２およびスイッチ２３に冗長化送信する（Ｓ３１１５，３１１６）。
【０１１３】
さらに、Ｓ３１１１において、ＳＣＳＩ  Ｄａｔａ＿Ｏｕｔ応答によって全ての読出し要求データを送信し終えた場合、ＳＣＳＩ  ＲＳＰ応答を組み立て、冗長化処理プログラム２５４へ送信する（Ｓ３２０８）。次に、ＣＰＵ１５９で冗長化処理プログラム２５４が実行され、ストレージ装置２１がコマンド冗長化処理を行い、ＳＣＳＩコマンドを第一の経路の送信キュー、および第二の経路の送信キューへ追加する（Ｓ３２０９）。一方、ホスト２８と同様に、ストレージ装置２１のＣＰＵ１５９では送信制御プログラム２５２が、ストレージ装置２１の起動時から常に実行されている。その結果、ストレージ装置２１は、図１４を用いて前述した送信キュー制御処理を繰り返し実行しており、Ｓ３２０９で送信キューに追加されたＳＣＳＩコマンドが、送信キューの先頭に至ると、ストレージ装置２１はそのＳＣＳＩコマンドをｉＳＣＳＩ処理プログラム２５３へ送信する（Ｓ３２１０）。次に、ＣＰＵ１５９でｉＳＣＳＩ処理プログラム２５３が実行され、ホスト２８が図１５を用いて前述したｉＳＣＳＩカプセル化処理を行い、ｉＳＣＳＩ  ＰＤＵを組み立て、それをホスト２８あてに送信する（Ｓ３２１１）。その結果、ストレージ装置２１は、読出し終了応答をスイッチ２２およびスイッチ２３に冗長化送信する（Ｓ３１１２，３１１３）。
【０１１４】
その後、ストレージ装置２１が、第二の経路Ｂを通った読出し要求を受信すると、ＣＰＵ１５９でｉＳＣＳＩ処理プログラム２５３が実行され、ストレージ装置２１が脱ｉＳＣＳＩカプセル化処理を行い、受信した読出要求からＳＣＳＩコマンドを取り出す（Ｓ３２２２）。次に、ＣＰＵ１５９で冗長受信制御プログラム２５１が実行され、ストレージ装置２１が冗長コマンド受信処理を行い、同一の読出し要求を既に受信済みと判断し、削除する（Ｓ３２２３）。なお、Ｓ３１１０で述べたとおり、ＣＰＵ１５９でタイマ制御プログラム２５０が、ストレージ装置２１の起動時から常に実行されており、ストレージ装置２１が、タイムアウト値が０となった受信履歴を削除する受信履歴タイマ制御処理を常に行っている（Ｓ３２２４）。
【０１１５】
一方、ホスト２８が、第一の経路Ａを通った読出し応答を、第二の経路Ｂを通った読出し応答よりも早く受信すると、ホスト２８のＣＰＵ１７５でｉＳＣＳＩ処理プログラム２６０が実行され、ホスト２８が脱ｉＳＣＳＩカプセル化処理を行い、受信した前記読出し応答からＳＣＳＩ  Ｄａｔａ＿Ｉｎ応答を取り出す（Ｓ３２０１）。次に、ＣＰＵ１７５で冗長受信制御プログラム２５８が実行され、ホスト２８が冗長コマンド受信処理を行い、同一の読出し応答を既に受信済みか否かを調べる。現時点では、受信していないため、Ｓ３２０１で取り出したＳＣＳＩ  Ｄａｔａ＿Ｉｎ応答をＳＣＳＩ処理プログラム２６２へ送信する（Ｓ３２０２）。また、受信履歴情報テーブル３５６に、前記読出し応答を受信したことを表す受信履歴を記憶する。なお、ストレージ装置２１と同様に、ホスト２８のＣＰＵ１７５でタイマ制御プログラム２６３が、ホスト２８の起動時から常に実行されており、ホスト２８が受信履歴タイマ制御処理を常に行っている（Ｓ３２０３）。次に、ＣＰＵ１７５でＳＣＳＩ処理プログラム２６２が実行され、ホスト２８が図３７で説明するＳＣＳＩ  Ｒｅａｄ応答受信処理を行い、Ｓ３２０１で取り出したＳＣＳＩ  Ｄａｔａ＿Ｉｎ応答に基づき、読出しデータをメモリ１７０上に記憶する（Ｓ３２０４）。
【０１１６】
その後、ホスト２８が、第二の経路Ｂを通った読出し応答を受信すると、ＣＰＵ１７５でｉＳＣＳＩ処理プログラム２６０が実行され、ホスト２８が脱ｉＳＣＳＩカプセル化処理を行い、受信した読出し応答からＳＣＳＩコマンドを取り出す（Ｓ３２０５）。次に、ＣＰＵ１７５で冗長受信制御プログラム２５８が実行され、ホスト２８が冗長コマンド受信処理を行い、同一の読出し応答を既に受信済みと判断し、削除する（Ｓ３２０６）。なお、Ｓ３２０３で述べたとおり、ホスト２８のＣＰＵ１７５でタイマ制御プログラム２６３が、ホスト２８の起動時から常に実行されており、ホスト２８が受信履歴を削除する受信履歴タイマ制御処理を常に行っている（Ｓ３２０７）。
【０１１７】
一方、ホスト２８が、第二の経路Ａを通った読出し完了応答を、第一の経路Ｂを通った読出し完了応答よりも早く受信すると、ホスト２８のＣＰＵ１７５でｉＳＣＳＩ処理プログラム２６０が実行され、ホスト２８が脱ｉＳＣＳＩカプセル化処理を行い、受信した前記読出し完了応答からＳＣＳＩ  ＲＳＰ応答を取り出す（Ｓ３２１４）。次に、ＣＰＵ１７５で冗長受信制御プログラム２５８が実行され、ホスト２８が冗長コマンド受信処理を行い、同一の読出し完了応答を既に受信済みか否かを調べる。現時点では、受信していないため、Ｓ３２１４で取り出したＳＣＳＩ  ＲＳＰ要求をＳＣＳＩ処理プログラム２５５へ送信する（Ｓ３２１５）。また、受信履歴情報テーブル３５６に、前記更新要求を受信したことを表す受信履歴を記憶する。なお、ホスト２８のＣＰＵ１７５でタイマ制御プログラム２６３が、ホスト２８の起動時から常に実行されており、ホスト２８が受信履歴タイマ制御処理を常に行っている（Ｓ３２１６）。次に、ＣＰＵ１７５でＳＣＳＩ処理プログラム２６２が実行され、ホスト２８が図３７で説明するＳＣＳＩ  Ｒｅａｄ応答受信処理を行い、Ｓ３２１４で取り出したＳＣＳＩ  ＲＳＰ応答に基づき、Ｒｅａｄ応答を組み立て、オペレーティングシステムプログラムへ送信する（Ｓ３２１７）。次に、ＣＰＵ１７５でオペレーティングシステムプログラム２６６が実行され、ホスト２８が図３８で説明するデータ読出し応答送信処理を行い、Ｒｅａｄ応答に基づきデータ読出し応答を組み立て、アプリケーションプログラムへ送信する（Ｓ３２１８）。その後、ＣＰＵ１７５で実行されているアプリケーションプログラムが、データ読出し要求から読出しデータを取り出し、参照する。
【０１１８】
その後、ホスト２８が、第一の経路Ａを通った読出し完了応答を受信すると、ＣＰＵ１７５でｉＳＣＳＩ処理プログラム２６０が実行され、ホスト２８が脱ｉＳＣＳＩカプセル化処理を行い、受信した読出し完了応答からＳＣＳＩコマンドを取り出す（Ｓ３２１９）。次に、ＣＰＵ１７５で冗長受信制御プログラム２５８が実行され、ホスト２８が冗長コマンド受信処理を行い、同一の読出し完了応答を既に受信済みと判断し、削除する（Ｓ３２２０）。なお、Ｓ３２１６で述べたとおり、ＣＰＵ１７５でタイマ制御プログラム２６３が、ホスト２８の起動時から常に実行されており、ホスト２８が、受信履歴タイマ制御処理を常に行っている（Ｓ３２２１）。
【０１１９】
以上で、ホスト２８のアプリケーションプログラム２６７がストレージ装置２１に格納されているデータを参照する時の、装置間の通信シーケンス例を説明した。
【０１２０】
次に、図３１および図３２で挙げられた各処理の動作手順を説明する。
【０１２１】
図３３は、図３１におけるデータ読出要求受信処理（Ｓ３１０１）の動作手順を示すフローチャートである。本処理は、ホスト２８のＣＰＵ１７５でオペレーティングシステムプログラムが実行されることにより、ホスト２８で実行される。本処理では、最初に、ホスト２８が、アプリケーションプログラム２６７から、ホスト名、ホスト論理デバイスＩＤ、論理ブロックアドレスおよびデータ長から成るデータ読出し要求を受信すると（Ｓ３３０１）、そのデータ読出し要求からデータ長を読出す（Ｓ３３０２）。次に、ホスト２８が、メモリ上にＳ３３０２で読み出したデータ長分の領域を確保し、その領域の先頭メモリアドレスを取得する（Ｓ３３０３）。次に、ホスト２８が、ホスト名およびホスト論理デバイスＩＤの組をキーとして、ストレージアクセス情報テーブル３６０を検索し（Ｓ３３０４）、その結果ヒットしたレコードから、ストレージ名およびストレージ論理デバイスＩＤを読み出す（Ｓ３３０５）。最後に、ホスト２８が、ホスト名、ホスト論理デバイスＩＤ、ストレージ名、ストレージ論理デバイスＩＤ、論理ブロックアドレス、データ長および先頭メモリアドレスから成るＲｅａｄ要求を生成し、ＳＣＳＩ処理プログラムへ送信して（Ｓ３３０６）、本処理を終了する。
【０１２２】
図３４は、図３１におけるＳＣＳＩ  Ｒｅａｄ要求生成処理（Ｓ３１０２）の動作手順を示すフローチャートである。本処理は、ホスト２８のＣＰＵ１７５でＳＣＳＩ処理プログラム２６２が実行されることによって、ホスト２８で実行される。本処理では、最初に、ホスト２８が、オペレーティングシステムプログラムから受信したＲｅａｄ要求から、先頭メモリアドレスおよびデータ長を読み出す（Ｓ３４０１）。次に、ホスト２１が、Ｒｅａｄ要求に一否要求タグを発行する（Ｓ３４０２）。次に、ホスト２１が、要求タグ、先頭メモリアドレス、データ長および処理済データ長（初期値を０とする）から成るレコードを要求情報テーブル３５９へ追加する（Ｓ３４０３）。最後に、ホスト２８が、ホスト名、ホスト論理デバイスＩＤ、ストレージ名、ストレージ論理デバイスＩＤ、データ長およびＲｅａｄオペレーションコードから成るＳＣＳＩ  Ｒｅａｄ要求を生成し（Ｓ３４０４）、本処理を終了する。
【０１２３】
次に、図３１及び図３２におけるコマンド冗長化処理（Ｓ３１０３，３１１２，３２０９）について、第１実施形態の説明でも用いた図１２および図１３に示すフローチャートに従って説明する。本実施形態のコマンド冗長化処理は、第１実施形態におけるコマンド冗長化処理と基本的に同じである。但し、図１３中の、“マスタノード”を“ホスト”に、“リモートノード”を“ストレージ”に、“キャッシュメモリ”を“メモリあるいはキャッシュメモリ”に、それぞれ読み替える必要がある。このため、図１２及び図１３を用いて、改めて本実施形態のコマンド冗長化処理について説明する。
【０１２４】
本処理は、ホスト２８のＣＰＵ１７５あるいはストレージ装置２１のＣＰＵ１５９で、冗長化処理プログラム２６１あるいは２５４が実行されることによって、ホスト２８あるいはストレージ装置２１で実行される。本処理では、最初に、コマンドが要求か応答かで処理を分岐する（Ｓ１２０１）。コマンドが要求の場合、ストレージ装置が、コマンドから要求タグを読み出し、タスクタグとし（Ｓ１２０２）、その後、ホスト２８あるいはストレージ装置２１が、コマンドに対して一意な順序制御タグを付与し（Ｓ１２０３）、Ｓ１３０１以降の処理を実行する。一方、コマンドが応答の場合、ホスト２８あるいはストレージ装置２１が、コマンドから応答タグの値を読み出してタスクタグとし（Ｓ１２０４）、Ｓ１２０４で読み出した値がエントリ３００２の内容と一致し、かつエントリ３００３の内容が「０」であるという条件で、受信履歴情報テーブル３５６あるいは３５１を検索する（Ｓ１２０５）。そして、ホスト２８あるいはストレージ装置２１は、Ｓ１２０５の検索の結果に従って処理を分岐する（Ｓ１２０６）。Ｓ１２０５の検索にヒットするレコードがあった場合、ホスト２８あるいはストレージ装置２１が、ヒットしたレコードの順序制御タグを読み出し、コマンドに付与する（Ｓ１２０７）。また、ホスト２８あるいはストレージ装置２１が、ヒットしたレコードの返信フラグの値を「１」とする（Ｓ１２０８）。一方、ヒットしたレコードがなかった場合、ホスト２８あるいはストレージ装置２１はＳ１２０３を実行する。
【０１２５】
次に、ホスト２８あるいはストレージ装置２１が、コマンドからホスト名、ストレージ名を読み出す（Ｓ１３０１）。次に、ホスト２８あるいはストレージ装置２１は、Ｓ１３０１で読み出したホスト名およびストレージ名が、それぞれエントリ３０２１およびエントリ３０２２の内容に一致するレコードを、セッション情報テーブル３０２から検索する（Ｓ１３０２）。次に、ホスト２８あるいはストレージ装置２１が、Ｓ１３０２の検索にヒットしたレコード数を、同時送信数とし、コマンドに付与する（Ｓ１３０３）。次に、ホスト２８あるいはストレージ装置２１が、ヒットしたレコードのうち一つを取り出す（Ｓ１３０４）。次に、ホスト２８あるいはストレージ装置２１が、取り出したレコードからセッションＩＤ（ホストＩＰアドレス、ホストポート番号、ストレージＩＰアドレス、ストレージポート番号）および送信キューアドレスを読み出し、コマンドに付与する（Ｓ１３０５）。次に、ホスト２８あるいはストレージ装置２１が、コマンドが記憶されているメモリあるいはキャッシュメモリ上の領域（送信キュー）の先頭アドレスを取得し、コマンドアドレスとする（Ｓ１３０６）。次に、ホスト２８あるいはストレージ装置２１が、Ｓ１３０５で読み出した送信キューアドレスで送信キューを特定し、送信キュー情報テーブルの最後尾レコードの次に、順序制御タグ、タスクタグ、コマンドアドレスからなるレコードを追加する（Ｓ１３０７）。ホスト２８あるいはストレージ装置２１は、Ｓ１３０５からＳ１３０７の処理をＳ１３０２の検索にヒットした全てのレコードについて実行し（Ｓ１３０８）、本処理を終了する。
【０１２６】
図３１および図３２における送信キュー制御処理（Ｓ３１０４，３１１３，３２１０）は、ホスト２８のＣＰＵ１７５あるいはストレージ装置２１のＣＰＵ１５９で、送信制御プログラム２５９あるいは２５２が実行されることにより、ホスト２８あるはストレージ装置２１により実行される。この送信キュー制御処理は、図１４を用いて説明した第１実施形態における送信キュー制御処理と基本的に同じであるので、この動作説明を省略する。
【０１２７】
次に、図３１および図３２におけるｉＳＣＳＩカプセル化処理（Ｓ３１０５，３１１４，３２１１）について、第１実施形態の説明でも用いた図１５に示すフローチャートに従って説明する。本実施形態のｉＳＣＳＩカプセル化処理は、第１実施形態におけるｉＳＣＳＩカプセル化処理と基本的に同じである。但し、図１５中の、“マスタ”を“ホスト”に、“リモート”を“ストレージ”に、それぞれ読み替える必要がある。このため、図１５を用いて、改めて本実施形態のｉＳＣＳＩカプセル化処理について説明する。
【０１２８】
本処理は、ホスト２８のＣＰＵ１７５あるいはストレージ装置２１のＣＰＵ１５９でｉＳＣＳＩ処理プログラム２６０あるいは２５３が実行されることにより、ホスト２８あるいはストレージ装置２1が実行する。本処理では、最初に、ホスト２８あるいはストレージ装置２１が、受信したレコードからコマンドアドレスを読み出し（Ｓ１５０１）、そのコマンドアドレスでキャッシュメモリ上のコマンドを特定し（Ｓ１５０２）、特定したコマンドからセッションＩＤを読み出して、そのセッションＩＤをキーとしてセッション情報テーブル３０２を検索する（Ｓ１５０３）。次に、Ｓ１５０３の結果ヒットしたレコードから、ホストＩＰアドレス、ホストポート番号、ストレージＩＰアドレスおよびストレージポート番号を読み出す（Ｓ１５０４）。次に、ホスト２８あるいはストレージ装置２１が、Ｓ１５０４で読み出した情報によりＴＣＰコネクションを特定し、そのＴＣＰコネクションの送信可否状態を取得する（Ｓ１５０５）。最後に、Ｓ１５０５で取得したＴＣＰコネクションの送信可否状態が、送信可能であるか否かで処理を分岐する（Ｓ１５０６）。ＴＣＰコネクションの送信可否状態が送信可能状態であった場合、ホスト２８あるいはストレージ装置２１が、Ｓ１５０２で特定したコマンドにｉＳＣＳＩ  ＰＤＵヘッダを付与してｉＳＣＳＩ  ＰＤＵを生成し、それをＳ１５０５で特定したＴＣＰコネクションへ送信して（Ｓ１５０８）、その後、送信制御プログラム２０２へ送信成功通知を送信し（Ｓ１５０９）、本処理を終了する。一方、ＴＣＰコネクションの送信可否状態が送信不能状態であった場合、ホスト２８あるいはストレージ装置２１が、送信制御プログラム２０２へ送信失敗通知を送信し（Ｓ１５０９）、本処理を終了する。
【０１２９】
次に、通信可能状態通知処理について、第１実施形態でも用いた図１６（１）に示すフローチャートに従って説明する。本実施形態の通信可能状態通知処理は、第１実施形態における通信可能状態通知処理と基本的に同じである。但し、図１６（１）中の、“マスタ”を“ホスト”に、“リモート”を“ストレージ”に、“キャッシュメモリ”を“メモリあるいはキャッシュメモリ”に、それぞれ読み替える必要がある。このため、図１６（１）を用いて、改めて本実施形態の通信可能状態通知処理について説明する。
【０１３０】
本処理は、ホスト２８のＣＰＵ１７５あるいはストレージ装置２１のＣＰＵ１５９でｉＳＣＳＩ処理プログラム２６０あるいは２５３が実行されることにより、ホスト２８あるいはストレージ装置２1が実行する。本処理では、最初に、ストレージ装置が、受信した送信可能状態通知要求からコマンドアドレスを読み出し（Ｓ１６０１）、そのコマンドアドレスでメモリ１７０あるいはキャッシュメモリ３５０上のコマンドを特定し（Ｓ１６０２）、特定したコマンドからセッションＩＤを読み出して、そのセッションＩＤをキーとしてセッション情報テーブル３０２を検索する（Ｓ１６０３）。次に、Ｓ１６０３の結果ヒットしたレコードから、ホストＩＰアドレス、ホストポート番号、ストレージＩＰアドレスおよびストレージポート番号を読み出す（Ｓ１６０４）。次に、ホスト２８あるいはストレージ装置２１が、Ｓ１６０４で読み出した情報によりＴＣＰコネクションを特定し、そのＴＣＰコネクションから送信可否状態を取得できるまで待つ（Ｓ１６０５）。その後、ホスト２８あるいはストレージ装置２１が、ＴＣＰコネクションから送信可能状態を取得できると、送信可能状態通知を送信制御プログラムへ送信する（Ｓ１６０６）。
【０１３１】
図３１および図３２における脱ｉＳＣＳＩカプセル化処理（Ｓ３１０８，３２０１，３２０５，３２１４，３２１９）は、ホスト２８のＣＰＵ１７５あるいはストレージ装置２１のＣＰＵ１５９でｉＳＣＳＩ処理プログラム２６０あるいは２５３が実行されることにより、ホスト２８あるいはストレージ装置２1により実行される。この脱ｉＳＣＳＩカプセル化処理は、図１６（２）を用いて説明した第１実施形態の脱ｉＳＣＳＩカプセル化処理と基本的に同じであるので、この説明を省略する。
【０１３２】
次に、図３１および図３２における冗長コマンド受信処理（Ｓ３１０９，３２０２，３２０６，３２１５，３２２０，３２２３）について、第１実施形態の説明でも用いた図１７および図１８に従って説明する。但し、図１７および図１８中の、“マスタ” および“マスタノード”を“ホスト”に、“リモート”および“リモートノード”を“ストレージ”に、それぞれ読み替える必要がある。このため、図１７および図１８を用いて、改めて本実施形態の冗長コマンド受信処理について説明する。
【０１３３】
本処理は、ホスト２８のＣＰＵ１７５あるいはストレージ装置２１のＣＰＵ１５９で冗長受信制御プログラム２５８あるいは２５１が実行されることにより、ホスト２８あるいはストレージ装置２1で実行される。本処理では、最初に、ホスト２８あるいはストレージ装置２１が、コマンドから順序制御タグを読み出し、それをキーとして受信履歴情報テーブル３５６あるいは３５１を検索する（Ｓ１７０１）。次に、Ｓ１７０１の検索の結果によって処理を分岐する（Ｓ１７０２）。Ｓ１７０１の検索にレコードがヒットした場合、まず、ホスト２８あるいはストレージ装置２１が、コマンドを廃棄し（Ｓ１７１０）、ヒットしたレコードの履歴保持カウンタ３００５の値をデクリメントする（Ｓ１７１１）。次に、Ｓ１７１１の処理の結果、履歴保持カウンタ３００５の値が０になったら、ホスト２８あるいはストレージ装置２１が、当該レコードをテーブルから削除し（Ｓ１７１２、Ｓ１７１３）、本処理を終了する。一方、Ｓ１７０１の検索にいずれのレコードもヒットしなかった場合、さらにコマンドが要求か応答かによって処理を分岐する（Ｓ１７０３）。コマンドが要求の場合、ホスト２８あるいはストレージ装置２１が、コマンドから要求タグを読み出し、以降タスクタグとし（Ｓ１７０４）、コマンドが応答の場合、ホスト２８あるいはストレージ装置２１が、コマンドから応答タグを読み出し、以降タスクタグとする（Ｓ１７０５）。次に、ホスト２８あるいはストレージ装置２１が、コマンドから、ホストＩＰアドレス、ホストポート番号、ストレージＩＰアドレス、ストレージポート番号および同時送信数を読み出す（Ｓ１６０６）。次に、ホスト２８あるいはストレージ装置２１が、ホストＩＰアドレス、ホストポート番号、ストレージＩＰアドレスおよびストレージポート番号の組をキーに、セッション情報テーブル３５８あるいは３５１を検索する（Ｓ１７０７）。次に、ホスト２８あるいはストレージ装置２１が、ヒットしたレコードからタイムアウト値３５２９を読み出し、履歴保持タイムアウトとする（Ｓ１７０８）。
次に、ホスト２８あるいはストレージ装置２１が、順序制御タグ、タスクタグ、返信フラグ(初期値：０))、履歴保持カウンタ（初期値：同時送信数−１）および履歴保持タイムアウトから成るレコードを受信履歴情報テーブル３５６あるいは３５１に追加する（Ｓ１７０９）。
【０１３４】
次に、再度、コマンドが要求か応答かによって処理を分岐する（Ｓ１８０１）。コマンドが要求の場合、Ｓ１８０７以降の処理を行う。一方、コマンドが応答の場合は、まず、ホスト２８あるいはストレージ装置２１が、コマンドからホスト名とストレージ名を読み出し、これらの組をキーとして、セッション情報テーブル３５８あるいは３５３を検索する（Ｓ１８０２）。次に、ホスト２８あるいはストレージ装置２１が、Ｓ１８０２の検索にヒットしたレコードのうちひとつを取り出す（Ｓ１８０３）。次に、ホスト２８あるいはストレージ装置２１が、取り出したレコードから送信キューアドレスを読み出し、それが指し示す送信キューを特定する（Ｓ１８０４）。そして、ホスト２８あるいはストレージ装置２１が、特定した送信キューの情報テーブル３５７あるいは３５２を順序制御タグで検索し、ヒットしたレコードをすべて削除する、つまり、応答に対する要求がいずれかの送信キューに残っている場合には、この要求を削除する（Ｓ１８０５）。ホスト２８あるいはストレージ装置２１は、Ｓ１８０３からＳ１８０５までの処理を、Ｓ１８０２の検索でヒットしたすべてのレコードに対して実行する（Ｓ１８０６）。最後に、ホスト２８あるいはストレージ装置２１が、コマンドから、順序制御タグ、同時送信数、ホストＩＰアドレス、ホストポート番号、ストレージＩＰアドレスおよびストレージポート番号を除去し、コマンドをＳＣＳＩ処理プログラム２６２あるいは２５５へ送信し（Ｓ１８０７）、本処理を終了する。
【０１３５】
図３１および図３２における受信履歴タイマ制御処理（Ｓ３２０３，３２０７，３２２１，３２２４）は、ホスト２８のＣＰＵ１７５あるいはストレージ装置２１のＣＰＵ１５９でタイマ制御プログラム２６３あるいは２５０が実行されることによって、ホスト２８あるいはストレージ装置２１に実行される。この受信履歴タイマ制御処理は、図１９を用いて説明した第１実施形態の受信履歴タイマ制御処理と基本的に同じであるので、この動作説明を省略する。
【０１３６】
図３５および図３６は、図３１および図３２におけるＳＣＳＩ  Ｒｅａｄ応答生成処理（Ｓ３１１１，３２０８）の動作手順を示すフローチャートである。本処理は、ストレージ装置２１のＣＰＵ１５９でＳＣＳＩ処理プログラム２５５が実行されることによって、ストレージ装置２１で実行される。本処理では、最初に、ストレージ装置２１が、受信したＳＣＳＩコマンドに、一意な応答タグを発行する（Ｓ３５０１）。次に、ストレージ装置２１が、ＳＣＳＩコマンドからストレージ論理デバイスＩＤを読み出し、論理デバイスＩＤとし（Ｓ３５０２）、さらにＳＣＳＩコマンドから論理ブロックアドレスおよびデータ長を読み出す（Ｓ３５０３）。そして、ストレージ装置２１は、Ｓ３５０１〜Ｓ３５０３の操作で得た、応答タグ、論理デバイスＩＤおよび論理ブロックアドレスと、処理済データ長（初期値を０とする）から成るレコードを、応答情報テーブル３５４に追加する（Ｓ３５０４）。次に、ストレージ装置２１が、ディスク管理プログラム２５７へ、読出し可能データ長通知要求を送信し（Ｓ３５０５）、読出し可能データ長通知を待つ。ストレージ装置２１が、ディスク管理プログラム２５７から読出し可能データ長通知を受けると、それから読出し可能データ長を読み出す（Ｓ３５０６）。次に、読出し可能データ長が、データ長から処理済みデータ長を減算した結果以上であれば（Ｓ３５０７）、データ長から処理済データ長を差し引いた値を送信データ長とし（Ｓ３５０８）、そうでなければ、読出し可能データ長を送信データ長とする（Ｓ３５０９）。次に、送信データ取得アドレスから送信データ長分のデータを送信データとする（Ｓ３５１０）。次に、ストレージ装置２１が、Ｓ３５０４で追加したレコードの処理済みデータサイズの値を、送信データ長分加算する（Ｓ３５１１）。次に、ストレージ装置２１が、コマンドから、ホスト名、ホスト論理デバイスＩＤ、ストレージ名、ストレージ論理デバイスＩＤ、要求タグ読み出す（Ｓ３６０１）。そして、ストレージ装置２１が、ホスト名、ホスト論理デバイスＩＤ、ストレージ名、ストレージ論理デバイスＩＤ、要求タグ、応答タグ、データ長、送信データ長および送信データからなるＳＣＳＩ ＤＡＴＡ＿Ｉｎ応答を組み立て、冗長化プログラムへ送信する（Ｓ３６０２）。次に、読出し可能データ長が、データ長から処理済みデータ長を減算した結果未満であれば、Ｓ３５０５からＳ３６０２までの処理をもう一度実行し（Ｓ３６０３）、そうでなければ、次に、ホスト名、ホスト論理デバイスＩＤ、ストレージ名、ストレージ論理デバイスＩＤ、要求タグおよび論理ブロックアドレスからなる、ＳＣＳＩ  ＲＳＰコマンドを生成し、冗長化プログラムへ送信する（Ｓ３６０４）。ストレージ装置２１は、最後に、Ｓ３５０４で追加したレコードを、応答情報テーブル３５４から削除し、本処理を終了する。
【０１３７】
図３７は、図３１および図３２におけるＳＣＳＩ  Ｒｅａｄ応答受信処理（Ｓ３２０４，３２１７）の動作手順を示すフローチャートである。本処理は、ホスト２８のＣＰＵ１７５でＳＣＳＩ処理プログラムが実行されることによって、ホスト２８が実行する。本処理では、最初に、受信したコマンドがＤａｔａ＿Ｉｎ応答かＲＳＰ応答かによって処理を分岐する（Ｓ３７０１）。ＲＳＰ応答の場合、ホスト２８が、コマンドから、ホスト名、ホスト論理デバイスＩＤ、論理ブロックアドレスおよび要求タグを読み出し（Ｓ３７０２）、それらから成るＲｅａｄ応答を生成して（Ｓ３７０３）オペレーティングシステムプログラム２６６へ送信し（Ｓ３７０４）、本処理を終了する。一方、Ｄａｔａ＿Ｉｎ応答の場合、ホスト２８が、コマンドから要求タグを読出し、それをキーとして要求情報テーブルを検索する（Ｓ３７０５）。次に、ホスト２８が、Ｓ３７０５の検索にヒットしたレコードから、先頭メモリアドレスおよび所リズムデータ長を読み出し（Ｓ３７０６）、先頭メモリアドレスに処理済データ長を加えたアドレスを読み出しデータ記憶アドレスとする(Ｓ３７０７)。次に、ホスト２８が、コマンドから送信データを読み出し、読出しデータ記憶アドレスに書き込む（Ｓ３７０８）。次に、ホスト２８が、コマンドから送信データ長を読み出し（Ｓ３７０９）、Ｓ３７０５の検索にヒットしたレコートの処理済データ長の値を、送信データ長分加算して（Ｓ３７１０）、本処理を終了する。
【０１３８】
図３８は、図３１および図３２におけるデータ読出し応答送信処理（Ｓ３２１８）の動作手順を示すフローチャートである。本処理は、ホスト２８のＣＰＵ１７５でオペレーティングシステムプログラム２６６が実行されることによって、ホスト２８で実行される。本処理では、最初に、ホスト２８が、Ｒｅａｄ応答を受信すると、そのＲｅａｄ応答から要求タグを読み出し、それをキーとして要求情報テーブル３５９を検索する（Ｓ３８０１）。次に、ホスト２８が、Ｓ３８０１の検索でヒットしたレコードから先頭メモリアドレスおよびデータ長を読み出す（Ｓ３８０２）。次に、ホスト２８が、メモリ１７０上の先頭メモリアドレスからデータ長分のデータを読出し、読出しデータとする（Ｓ３８０３）。次に、Ｒｅａｄ応答から、ホスト名、ホスト論理デバイスＩＤおよび論理ブロックアドレスを読み出す（Ｓ３８０４）。次に、ホスト２８が、ホスト名、ホスト論理デバイスＩＤ、論理ブロックアドレス、データ長、読出しデータマスタノード名、マスタ論理デバイスＩＤ、論理ブロックアドレス、データ長、および読出しデータからなるデータ読出し応答を、アプリケーションプログラム２６７へ送信する（Ｓ３８０５）。次に、ホスト２８が、ヒットしたレコードを、要求情報テーブル３５９から削除する（Ｓ３８０６）。最後に、ホスト２８が、先頭メモリアドレスで確保済みメモリ領域を特定して解放し（Ｓ３８０７）、本処理を終了する。
【０１３９】
以上、本実施形態においても、ｉＳＣＳＩを用いたストレージアクセスを行う場合、複数の通信経路間で送信レートの差が大きくなったときに、ある通信経路で送信が完了し応答が帰ってきた要求を、その他の通信経路の送信待ち要求の中から検索し、発見すれば削除する。これにより、ＴＣＰ／ＩＰの特性により複数の通信経路間の送信レートに大きな差が生じた場合に、送信レートの低いネットワークの送信待ち要求が、送信レートの高い通信経路の送信待ち要求よりも非常に多くなることを防ぎ、複数の通信経路間の応答時間差の増大を防止できる。その結果として、送信レートの高い通信経路が故障した場合のホストのストレージアクセスの滞留を防ぎ、データベース等のホストアプリケーションの停止を防止することができる。さらに、無駄なデータ送信を削減し、通信経路の帯域の浪費を減らすことができる。
【０１４０】
なお、以上の各実施形態では、いずれも２つの通信経路Ａ，Ｂを有するものであるが、本発明は、これに限定されるものではなく、３以上の通信経路を有するものに適用してもよい。また、以上の実施形態では、各通信経路毎に、物理的に独立した送受信ポートを設けているが、複数の通信経路に対して、送受信ポートは１つであってよい。この場合、ポートから先で、ルータ等により複数の通信経路に分岐することになる。
【０１４１】
また、以上の実施形態は、いずれもＴＣＰ／ＩＰを用いて通信を行うものであるが、本発明は、これに限定されるものではなく、送信元からのデータ送信に対して、送信先側から応答があるように通信形態であれば、如何なる通信形態に適用してもよい。
【０１４２】
さらに、以上の実施形態は、ストレージ装置相互間での通信や、ホストとストレージ装置との通信に、本発明を適用した例であるが、本発明は、これに限定されるものではなく、複数の通信経路により互いに接続されている通信装置であれば、如何なるものに適用してもよいことは言うまでもない。
【図面の簡単な説明】
【０１４３】
【図１】第１実施形態におけるストレージシステムの構成例を示す説明図である。
【図２】第１実施形態における各種テーブルの構成を示す説明図で、同（１）はリモートコピー情報テーブルの構成を示す図、同（２）は要求情報テーブルの構成を示す図、同（３）は応答情報テーブルの構成を示す図、同（４）はセッション情報テーブルの構成を示す図、同（５）は送信キュー情報テーブルの構成を示す図、同（６）は受信履歴情報テーブルの構成を示す図である。
【図３】第１実施形態におけるリモートコピー情報入力画面の表示例を示す説明図である。
【図４】第１実施形態におけるリモートコピー開始指示画面の表示例を示す説明図である。
【図５】第１実施形態における、リモートコピー開始に関する通信シーケンス図である。
【図６】第１実施形態における情報登録処理の動作を示すフローチャートである。
【図７】第１実施形態におけるリモートコピー処理の通信シーケンス図（その１）である。
【図８】第１実施形態におけるリモートコピー処理の通信シーケンス図（その２）である。
【図９】第１実施形態におけるリモートコピー処理の通信シーケンス図（その３）である。
【図１０】第１実施形態におけるデータ更新通知受信処理の動作を示すフローチャートである。
【図１１】第１実施形態におけるＳＣＳＩ  Ｗｒｉｔｅ要求生成処理の動作を示すフローチャートである。
【図１２】第１実施形態におけるコマンド冗長化処理の動作を示すフローチャート（その１）である。
【図１３】第１実施形態におけるコマンド冗長化処理の動作を示すフローチャート（その２）である。
【図１４】第１実施形態における送信キュー制御処理の動作を示すフローチャートである。
【図１５】第１実施形態におけるｉＳＣＳＩカプセル化処理の動作を示すフローチャートである。
【図１６】第１実施形態における各処理のフローチャートで、同（１）は送信可能状態通知処理の動作を示すフローチャート、同（２）はｉＳＣＳＩカプセル開放処理の動作を示すフローチャートである。
【図１７】第１実施形態における冗長コマンド受信処理の動作を示すフローチャート（その１）である。
【図１８】第１実施形態における冗長コマンド受信処理の動作を示すフローチャート（その２）である。
【図１９】第１実施形態における受信履歴タイマ制御処理の動作を示すフローチャートである。
【図２０】第１実施形態におけるＳＣＳＩ応答生成処理の動作を示すフローチャート（その１）である。
【図２１】第１実施形態におけるＳＣＳＩ応答生成処理の動作を示すフローチャート（その２）である。
【図２２】第１実施形態におけるＳＣＳＩＸＦＲ＿ＲＤＹ生成処理の動作を示すフローチャートである。
【図２３】第１実施形態におけるＳＣＳＩ応答受信処理の動作を示すフローチャート（その１）である。
【図２４】第１実施形態におけるＳＣＳＩ応答受信処理の動作を示すフローチャート（その２）である。
【図２５】第１実施形態における完了応答送信処理の動作を示すフローチャートである。
【図２６】第２実施形態におけるストレージシステムの構成例を示す説明図である。
【図２７】第２実施形態における各テーブルの構成を示す説明図で、同（１）はストレージアクセス情報テーブルの構成を示す図で、同（２）はセッション情報テーブルの構成を示す図である。
【図２８】第２実施形態におけるストレージアクセス情報入力画面の表示例を示す図である。
【図２９】第２実施形態における、ストレージアクセスに必要な情報の入力処理に関わる通信シーケンス図である。
【図３０】第２実施形態における情報登録処理の動作を示すフローチャートである。
【図３１】第２実施形態における、ホストがストレージに対してＲｅａｄ要求を送信してアクセスする時の通信シーケンス図（その１）である。
【図３２】第２実施形態における、ホストがストレージに対してＲｅａｄ要求を送信してアクセスする時の通信シーケンス図（その２）である。
【図３３】第２実施形態におけるデータ読出し要求受信処理の動作を示すフローチャートである。
【図３４】第２実施形態におけるＳＣＳＩ  Ｒｅａｄ要求生成処理の動作を示すフローチャートである。
【図３５】第２実施形態におけるＳＣＳＩ  Ｒｅａｄ応答生成処理の動作を示すフローチャート（その１）である。
【図３６】第２実施形態におけるＳＣＳＩ  Ｒｅａｄ応答生成処理の動作を示すフローチャート（その２）である。
【図３７】第２実施形態におけるＳＣＳＩ  Ｒｅａｄ応答受信処理の動作を示すフローチャートである。
【図３８】第２実施形態におけるデータ読出し応答送信処理の動作を示すフローチャートである。
【図３９】第１実施形態の概要を示す図で、同（１）は同実施形態におけるストレージシステムの構成の概要を示す説明図、同（２）は同実施形態における概略通信シーケンス図である。
【符号の説明】
【０１４４】
１…マスタストレージ装置、２…リモートストレージ装置、３…ＬＡＮ、４…ＬＡＮ、５…ルータ、６…ＷＡＮ、７…ルータ、８…ルータ、９…ＷＡＮ、１０…ルータ、１１…マスタホスト、１２…リモートホスト、１３…ストレージ管理装置、２１…ストレージ装置、２８…ホスト、３０６ａ，３０６ｂ，３５０ａ，３５０ｂ，３７０ａ，３７０ｂ…送信キュー。
【図１】
2005318073.tif 000003
【図２】
2005318073.tif 000004
【図３】
2005318073.tif 000005
【図４】
2005318073.tif 000006
【図５】
2005318073.tif 000007
【図６】
2005318073.tif 000008
【図７】
2005318073.tif 000009
【図８】
2005318073.tif 000010
【図９】
2005318073.tif 000011
【図１０】
2005318073.tif 000012
【図１１】
2005318073.tif 000013
【図１２】
2005318073.tif 000014
【図１３】
2005318073.tif 000015
【図１４】
2005318073.tif 000016
【図１５】
2005318073.tif 000017
【図１６】
2005318073.tif 000018
【図１７】
2005318073.tif 000019
【図１８】
2005318073.tif 000020
【図１９】
2005318073.tif 000021
【図２０】
2005318073.tif 000022
【図２１】
2005318073.tif 000023
【図２２】
2005318073.tif 000024
【図２３】
2005318073.tif 000025
【図２４】
2005318073.tif 000026
【図２５】
2005318073.tif 000027
【図２６】
2005318073.tif 000028
【図２７】
2005318073.tif 000029
【図２８】
2005318073.tif 000030
【図２９】
2005318073.tif 000031
【図３０】
2005318073.tif 000032
【図３１】
2005318073.tif 000033
【図３２】
2005318073.tif 000034
【図３３】
2005318073.tif 000035
【図３４】
2005318073.tif 000036
【図３５】
2005318073.tif 000037
【図３６】
2005318073.tif 000038
【図３７】
2005318073.tif 000039
【図３８】
2005318073.tif 000040
【図３９】
2005318073.tif 000041