(57)【要約】【課題】  コンピュータの記憶装置間のデータ伝送を短時間に安全に行う。【解決手段】  復旧データを記憶することは、大量のデータ・セットを遠隔宛先に提供することであって、各大量のデータ・セットが、第１の時刻前で、かつ、第２の時刻後に書き込まれたデータを表し、特定のデータ・セットの１つの第２の時刻が、当該特定のデータ・セットの次のものの第１の時刻に対応する、大量のデータ・セットを遠隔宛先に提供すること、ローカル宛先へ同期データを提供すること、および遠隔宛先に記憶する新たな大量のデータ・セットの作成に関連して、ローカル宛先へ指示子を提供すること、を含む。ローカル宛先は、複数のマップを保持することができる。これらマップのそれぞれは、マップに提供される同期データを特定の大量のデータ・セットに関連付ける。新たな大量のデータ・セットの作成に関連した指示子を受信することに応答して、ローカル宛先は新たなマップを指し示すことができる。【選択図】    図１
2006107450.tif 000002
【特許請求の範囲】
【請求項１】
大量のデータ・セットを遠隔宛先に提供することであって、各大量のデータ・セットが、第１の時刻前で、かつ、第２の時刻後に書き込まれたデータを表し、特定のデータ・セットの１つの第２の時刻が、該特定のデータ・セットの次のものの第１の時刻に対応する、大量のデータ・セットを遠隔宛先に提供することと、
ローカル宛先へ同期データを提供することと、
前記遠隔宛先で記憶する新たな大量のデータ・セットの作成に関連して、前記ローカル宛先へ指示子を提供することと、
を含む、復旧データを記憶する方法。
【請求項２】
前記ローカル宛先は複数のマップを保持し、同マップのそれぞれは、同マップに提供される同期データを特定の大量のデータ・セットに関連付ける、請求項１に記載の復旧データを記憶する方法。
【請求項３】
新たな大量のデータ・セットの作成に関連した指示子を受信することに応答して、前記ローカル宛先は新たなマップを指し示す、請求項２に記載の復旧データを記憶する方法。
【請求項４】
前記ローカル宛先が同ローカル宛先に提供された同期データに肯定応答しないことに応答して、前記遠隔宛先が同遠隔宛先に書き込まれたデータのマップを維持すること、
をさらに含む、請求項１に記載の復旧データを記憶する方法。
【請求項５】
ホストプロセッサがローカル記憶装置へデータを書き込むことと、
前記ホストプロセッサが、前記ローカル記憶装置に、該ホストプロセッサによる書き込みに対応した大量のデータ・セットを蓄積させることと、であって、
各大量のデータ・セットが、第１の時刻の前で、かつ、第２の時刻の後に書き込まれたデータを表し、特定の大量のデータ・セットの１つの前記第２の時刻が、該特定の大量のデータ・セットの次のものの第１の時刻に対応する、前記ホストプロセッサが、前記ローカル記憶装置に、該ホストプロセッサによる書き込みに対応した大量のデータ・セットを蓄積させることと、
前記ローカル記憶装置から遠隔宛先へ前記大量のデータ・セットを送信することと、
前記ローカル記憶装置からローカル宛先へ同期データを提供することと、
前記ホストプロセッサが、前記遠隔宛先に記憶する新たな大量のデータ・セットの作成に関連して、前記ローカル宛先へ指示子を提供することと、
を含む、復旧データを記憶する方法。
【請求項６】
前記ローカル宛先は複数のマップを保持し、同マップのそれぞれは、同マップに提供される同期データを特定の大量のデータ・セットに関連付ける、請求項５に記載の復旧データを記憶する方法。
【請求項７】
新たな大量のデータ・セットの作成に関連した指示子の受信に応答して、前記ローカル宛先は新たなマップを指し示す、請求項６に記載の復旧データを記憶する方法。
【請求項８】
大量のデータ・セットを遠隔宛先に提供することであって、各大量のデータ・セットが、第１の時刻前で、かつ、第２の時刻後に書き込まれたデータを表し、特定のデータ・セットの１つの該第２の時刻が、該特定のデータ・セットの次のものの第１の時刻に対応する、大量のデータ・セットを遠隔宛先に提供することと、
前記大量のデータ・セットに対応する同期データを最小記憶ローカル宛先へ提供することであって、同最小記憶ローカル宛先が前記遠隔宛先に記憶されないデータを含み、該遠隔宛先が前記最小記憶ローカル宛先に記憶されないデータを含む、前記大量のデータ・セ
ットに対応する同期データを最小記憶ローカル宛先へ提供することと、
新たな大量のデータ・セットが提供される場合に、指示子を提供することと、
を含む、復旧データを記憶する方法。
【請求項９】
前記遠隔宛先に含まれるが、前記最小記憶ローカル宛先に含まれない前記データは、前記最小記憶ローカル宛先に含まれるが、前記遠隔宛先に含まれない前記データよりも古い、請求項８に記載の復旧データを記憶する方法。
【請求項１０】
前記最小記憶ローカル宛先にローカルなサイクル番号を設けることと、
新たな大量のデータ・セットが提供される指示子を受信することに応答して、該ローカル指示子を加算することと、
をさらに含む、請求項８に記載の復旧データを記憶する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この出願は、コンピュータの記憶装置に関し、より詳細には、記憶装置間のデータ転送の分野に関する。
【背景技術】
【０００２】
ホストプロセッサシステムは、複数のホストインターフェースユニット（ホストアダプタ）と、ディスクドライブと、ディスクインターフェースユニット（ディスクアダプタ）とを含んだ記憶装置を使用してデータの記憶および取り出しを行うことができる。このような記憶装置は、例えば、マサチューセッツ州ホプキントンのＥＭＣ社によって提供され、ヤナイ（Yanai ）等に付与された米国特許第５，２０６，９３９号、ガルツール（Galtzur ）等に付与された米国特許第５，７７８，３９４号、ヴィシュリツキィ（Vishlitzky）等に付与された米国特許第５，８４５，１４７号、およびオフェク（Ofek）に付与された米国特許第５，８５７，２０８号に開示されている。ホストシステムは、記憶装置と共に設けられた複数のチャネルを介して記憶装置にアクセスする。ホストシステムは、チャネルを介して記憶装置へデータを提供し、かつ、制御情報にアクセスし、記憶装置も、チャネルを介してホストシステムへデータを提供する。ホストシステムは、記憶装置のディスクドライブを直接アドレス指定するのではなく、ホストシステムにとって複数の論理ディスクユニットとして見えるものにアクセスする。この論理ディスクユニットは、実際のディスクドライブに対応することもあるし、対応しないこともある。複数のホストシステムが単一の記憶装置にアクセスすることを許容にすることによって、ホストシステムは単一の記憶装置に記憶されたデータを共有することが可能になる。
【０００３】
場合によっては、或る記憶装置から別の記憶装置へデータをコピーすることが望ましい場合がある。例えば、或るホストが第１の記憶装置へデータを書き込む場合、第１の記憶装置を動作不能にする災害が発生した場合に、そのホスト（または別のホスト）が、異なる場所に設けられた第２の記憶装置のデータを使用して動作を再開できるように、第２の記憶装置へそのデータをコピーすることが望ましい場合がある。このような能力は、例えば、マサチューセッツ州ホプキントンのＥＭＣ社によって提供された遠隔データ機構（ＲＤＦ（Remote Data Facility））製品により提供される。ＲＤＦでは、第１の記憶装置は、「１次記憶装置」（または「Ｒ１」）と表記され、ホストに接続される。１つ以上の他の記憶装置は、「２次記憶装置」（または「Ｒ２」）と呼ばれ、ホストが１次記憶装置に書き込んだデータのコピーを受信する。ホストは、１次記憶装置と直接相互作用するが、１次記憶装置に対して行われたあらゆるデータの変更は、ＲＤＦを使用して１つ以上の２次記憶装置へ自動的に提供される。１次記憶装置および２次記憶装置はデータリンクによって接続することができる。このデータリンクは、ＥＳＣＯＮリンク、ファイバチャネルリンクおよび／またはギガビットイーサネットリンク等である。ＲＤＦの機能は、記憶装置のそれぞれに設けられたＲＤＦアダプタ（ＲＡ）によって円滑にすることができる。
【０００４】
ＲＤＦによって、同期データ転送が可能になる。この同期データ転送では、ホストから１次記憶装置へ書き込まれたデータが、ＲＤＦを使用して１次記憶装置から２次記憶装置へ転送された後、受信したことが、２次記憶装置によって１次記憶装置へ肯定応答され、次いで、１次記憶装置は、書き込み肯定応答をホストに提供して戻す。このように、同期モードでは、２次記憶装置へのＲＤＦ転送が完了して、２次記憶装置によって肯定応答されるまで、ホストは、１次記憶装置から書き込み肯定応答を受信しない。
【０００５】
同期ＲＤＦシステムの欠点は、書き込み動作のそれぞれの待ち時間が、ＲＤＦ転送の肯定応答を待つことによって増加することである。この問題は、１次記憶装置と２次記憶装
置との間の距離が長いと、伝送遅延、ＲＤＦ転送を行うのに必要な時間遅延、さらに、転送完了後に戻される肯定応答を待つことによって悪化し、これは受け入れることができない場合がある。
【０００６】
また、準同期モードでＲＤＦを使用することも可能である。この場合、データは、ホストから１次記憶装置へ書き込まれ、１次記憶装置は、直ちに書き込みに肯定応答し、そして、同時に、２次記憶装置へデータを転送するプロセスを開始する。したがって、データの単一の転送では、この方式は、同期モードでＲＤＦを使用する欠点のいくつかを克服する。しかしながら、データの完全性のために、準同期転送モードによると、前の転送が２次記憶装置によって肯定応答されるまで、１次記憶装置は２次記憶装置へデータを転送することができない。このように、前のデータの転送が２次記憶装置によって肯定応答されるまで、２番目のデータ量の転送を行うことができないので、同期モードでＲＤＦを使用することに関連したボトルネックは、単に１回の繰り返し分が遅延されるにすぎない。
【０００７】
別の可能なものとして、ホストに１次記憶装置へ非同期モードでデータを書き込ませ、１次記憶装置にバックグラウンドでデータを２次記憶装置へコピーさせるものがある。このバックグラウンドコピーは、１次記憶装置のトラックのそれぞれを順次循環することを含み、特定のブロックが、最後にコピーされた時から変更されたと判断されると、そのブロックは、１次記憶装置から２次記憶装置へ転送される。このメカニズムは、同期データ転送モードおよび準同期データ転送モードに関連した待ち時間の問題を小さくすることができるが、１次記憶装置と２次記憶装置との間のデータ一貫性を保証できないので、難点は依然として存在する。１次システムの故障等の問題が存在する場合、２次システムは、最終的には、データを使用不能にする異常な変更が行われることがある。
【０００８】
この問題に対して提案された解決法は、シンメトリックス自動複製（ＳＡＲ（Symmetrix Automated Replication ））プロセスである。このＳＡＲプロセスは、係属中の米国特許出願第１０／２２４，９１８号および第１０／２２５，０２１号に記載されている。これらの米国特許出願は、共に、２００２年８月２１日に出願されたものである。ＳＡＲは、標準論理デバイスをミラー（ｍｉｒｒｏｒ）リングできるデバイス（ＢＣＶ）を使用する。また、ＢＣＶデバイスは、ミラーリングされた後、当該ＢＣＶデバイスの標準論理デバイスからスプリットすることもでき、また、スプリットされた後、標準論理デバイスへ再同期（すなわち、ミラーとして再確立）することができる。これに加えて、ＢＣＶは、ＲＤＦを使用して遠隔でミラーリングすることもできる。この場合、ＢＣＶは、対応する標準論理デバイスからスプリットされると、（当該ＢＣＶがミラーとして動作している間に）当該ＢＣＶになされたデータの変更をＢＣＶ遠隔ミラーへ伝搬することができる。
【０００９】
しかしながら、ＳＡＲプロセスを使用するには、ＢＣＶを連続的にスプリットして再同期する大きなオーバーヘッドが必要となる。また、ＳＡＲプロセスは、ホストの制御および管理にも使用する。このホストの制御および管理は、動作中のホストの制御に依拠する。これに加えて、ＳＡＲプロセスの実際の実施態様のサイクル時間は、約２０分から３０分程度であり、したがって、ＲＤＦリンクおよび／または１次デバイスが故障した場合に失われることのあるデータ量は、２０分から３０分に値するデータになる可能性がある。
【特許文献１】米国特許第５，２０６，９３９号、
【特許文献２】米国特許第５，７７８，３９４号、
【特許文献３】米国特許第５，８４５，１４７号、
【特許文献４】米国特許第５，８５７，２０８号
【特許文献５】米国特許出願第１０／２２４，９１８号
【特許文献６】米国特許出願第１０／２２５，０２１号
【特許文献７】米国特許第５，５３７，５６８号
【特許文献８】米国特許第６，５９４，７４２号
【発明の開示】
【発明が解決しようとする課題】
【００１０】
したがって、上述した種々の技法のそれぞれの有利な特性のいくつかを示すと同時に、課題を削減するＲＤＦシステムを有することが望ましい。このようなシステムは、１次デバイスと２次デバイスとの間の距離にかかわらず、ホストの各書き込みについて小さな待ち時間を示し、故障の場合に２次デバイスの一貫性（復旧可能性）を提供する。
【００１１】
また、ソースデバイスに（地理的に）比較的近いＪ０遠隔デバイス上に最新のバックアップデータを設けることができると同時に、ソースデバイスから比較的遠いバックアップデバイスへバックアップデータを提供することもできるように、同期ＲＤＦ転送および非同期ＲＤＦ転送から得られた利点を結合できることも望ましい。また、このようなシステムがバックアップデバイス間で適切なデータ復旧をできることも望ましい。
【課題を解決するための手段】
【００１２】
上記問題点を解決するために、請求項１に記載の発明は、大量のデータ・セットを遠隔宛先に提供することであって、各大量のデータ・セットが、第１の時刻前で、かつ、第２の時刻後に書き込まれたデータを表し、特定のデータ・セット（チャンク  ｃｈｕｎｋ）の１つの第２の時刻が、該特定のデータ・セットの次のものの第１の時刻に対応する、大量のデータ・セットを遠隔宛先に提供することと、ローカル宛先へ同期データを提供することと、前記遠隔宛先で記憶する新たな大量のデータ・セットの作成に関連して、前記ローカル宛先へ指示子を提供することと、を含む、復旧データを記憶することを要旨とする。
【００１３】
請求項２に記載の発明は、請求項１に記載の復旧データを記憶する方法において、前記ローカル宛先は複数のマップを保持し、同マップのそれぞれは、同マップに提供される同期データを特定の大量のデータ・セットに関連付ける、ことを要旨とする。
【００１４】
請求項３に記載の発明は、請求項２に記載の復旧データを記憶する方法において、新たな大量のデータ・セットの作成に関連した指示子を受信することに応答して、前記ローカル宛先は新たなマップを指し示す、ことを要旨とする。
【００１５】
請求項４に記載の発明は、請求項１に記載の復旧データを記憶する方法において、前記ローカル宛先が同ローカル宛先に提供された同期データに肯定応答しないことに応答して、前記遠隔宛先が同遠隔宛先に書き込まれたデータのマップを維持すること、をさらに含む、ことを要旨とする。
【００１６】
請求項５に記載の発明は、ホストプロセッサがローカル記憶装置へデータを書き込むことと、前記ホストプロセッサが、前記ローカル記憶装置に、該ホストプロセッサによる書き込みに対応した大量のデータ・セットを蓄積させることと、であって、各大量のデータ・セットが、第１の時刻の前で、かつ、第２の時刻の後に書き込まれたデータを表し、特定の大量のデータ・セットの１つの前記第２の時刻が、該特定の大量のデータ・セットの次のものの第１の時刻に対応する、前記ホストプロセッサが、前記ローカル記憶装置に、該ホストプロセッサによる書き込みに対応した大量のデータ・セットを蓄積させることと、前記ローカル記憶装置から遠隔宛先へ前記大量のデータ・セットを送信することと、前記ローカル記憶装置からローカル宛先へ同期データを提供することと、前記ホストプロセッサが、前記遠隔宛先に記憶する新たな大量のデータ・セットの作成に関連して、前記ローカル宛先へ指示子を提供することと、を含む、復旧データを記憶することを要旨とする。
【００１７】
請求項６に記載の発明は、請求項５に記載の復旧データを記憶する方法において、前記ローカル宛先は複数のマップを保持し、同マップのそれぞれは、同マップに提供される同期データを特定の大量のデータ・セットに関連付ける、ことを要旨とする。
【００１８】
請求項７に記載の発明は、請求項６に記載の復旧データを記憶する方法において、新たな大量のデータ・セットの作成に関連した指示子の受信に応答して、前記ローカル宛先は新たなマップを指し示す、ことを要旨とする。
【００１９】
請求項８に記載の発明は、大量のデータ・セットを遠隔宛先に提供することであって、各大量のデータ・セットが、第１の時刻前で、かつ、第２の時刻後に書き込まれたデータを表し、特定のデータ・セットの１つの該第２の時刻が、該特定のデータ・セットの次のものの第１の時刻に対応する、大量のデータ・セットを遠隔宛先に提供することと、前記大量のデータ・セットに対応する同期データを最小記憶ローカル宛先へ提供することであって、同最小記憶ローカル宛先が前記遠隔宛先に記憶されないデータを含み、該遠隔宛先が前記最小記憶ローカル宛先に記憶されないデータを含む、前記大量のデータ・セットに対応する同期データを最小記憶ローカル宛先へ提供することと、新たな大量のデータ・セットが提供される場合に、指示子を提供することと、を含む、復旧データを記憶することを要旨とする。
【００２０】
請求項９に記載の発明は、請求項８に記載の復旧データを記憶する方法において、前記遠隔宛先に含まれるが、前記最小記憶ローカル宛先に含まれない前記データは、前記最小記憶ローカル宛先に含まれるが、前記遠隔宛先に含まれない前記データよりも古い、ことを要旨とする。
【００２１】
請求項１０に記載の発明は、請求項７に記載の復旧データを記憶する方法において、前記最小記憶ローカル宛先にローカルなサイクル番号を設けることと、新たな大量のデータ・セットが提供される指示子を受信することに応答して、該ローカル指示子を加算することと、をさらに含む、ことを要旨とする。
【００２２】
本発明によると、復旧データを記憶することは、大量のデータ・セット（ｄａｔａ  ｃｈｕｎｋ）を遠隔宛先へ提供することであって、各大量のデータ・セットが、第１の時刻前で、かつ、第２の時刻後に書き込まれたデータを表し、特定のデータ・セット（ｃｈｕｎｋ）の１つの第２の時刻が、当該特定のデータ・セットの次のものの第１の時刻に対応する、大量のデータ・セットを遠隔宛先へ提供すること、大量のデータ・セットに対応する同期データを最小記憶ローカル宛先へ提供することであって、当該最小記憶ローカル宛先が遠隔宛先に記憶されないデータを含み、遠隔宛先が最小記憶ローカル宛先に記憶されないデータを含む、大量のデータ・セットに対応する同期データを最小記憶ローカル宛先へ提供すること、および新たな大量のデータ・セットが提供される場合に指示子を提供すること、を含む。遠隔宛先に含まれるが、最小記憶ローカル宛先には含まれないデータは、最小記憶ローカル宛先に含まれるが、遠隔宛先に含まれないデータよりも古いものとすることができる。最小記憶ローカル宛先によって受信された同期データは、リンクリストの要素に記憶することができる。要素は、そのデータの送信元記憶装置のロケーションに従って記憶することができる。要素は、最小記憶ローカル宛先におけるデータの受信順序に従って記憶することができる。要素のそれぞれは、要素のそれぞれの同期データに対応する大量のデータ・セットの特定の１つについての識別子を含むことができる。また、復旧データを記憶することは、最小ストレージ遠隔宛先にローカルなサイクル番号を設けること、および新たな大量のデータ・セットが提供される指示子を受信することに応答して、ローカル指示子を加算すること、を含むこともできる。最小記憶ローカル宛先によって受信された同期データは、リンクリストの要素に記憶することができる。要素のそれぞれは、要素のそれぞれの同期データに対応する大量のデータ・セットの特定の１つについて
の識別子を含むことができ、この識別子は、ローカルなサイクル番号に対応することができる。
【００２３】
さらに本発明によると、復旧データを記憶する、コンピュータ可読媒体に設けられたコンピュータソフトウェアは、大量のデータ・セットを遠隔宛先へ提供する実行可能コードであって、各大量のデータ・セットが、第１の時刻前で、かつ、第２の時刻後に書き込まれたデータを表し、特定のデータ・セットの１つの第２の時刻が、当該特定のデータ・セットの次のものの第１の時刻に対応する、大量のデータ・セットを遠隔宛先へ提供する実行可能コードと、大量のデータ・セットに対応する同期データを最小記憶ローカル宛先へ提供する実行可能コードであって、当該最小記憶ローカル宛先が遠隔宛先に記憶されないデータを含み、遠隔宛先が最小記憶ローカル宛先に記憶されないデータを含む、大量のデータ・セットに対応する同期データを最小記憶ローカル宛先へ提供する実行可能コードと、新たな大量のデータ・セットが提供される場合に指示子を提供する実行可能コードと、を含む。遠隔宛先に含まれるが、最小記憶ローカル宛先には含まれないデータは、最小記憶ローカル宛先に含まれるが、遠隔宛先に含まれないデータよりも古いものとすることができる。最小記憶ローカル宛先によって受信された同期データは、リンクリストの要素に記憶することができる。要素は、そのデータの送信元記憶装置のロケーションに従って記憶することができる。要素は、最小記憶ローカル宛先におけるデータの受信順序に従って記憶することができる。要素のそれぞれは、要素のそれぞれの同期データに対応する大量のデータ・セットの特定の１つについての識別子を含むことができる。また、このコンピュータソフトウェアは、最小ストレージ遠隔宛先にローカルなサイクル番号を設ける実行可能コードと、新たな大量のデータ・セットが提供される指示子を受信することに応答して、ローカル指示子をインクリメントする実行可能コードと、を含むこともできる。最小記憶ローカル宛先によって受信された同期データは、リンクリストの要素に記憶することができる。要素のそれぞれは、要素のそれぞれの同期データに対応する大量のデータ・セットの特定の１つについての識別子を含むことができ、この識別子は、ローカルなサイクル番号に対応する。
【００２４】
さらに本発明によると、復旧データを記憶するシステムは、送信元グループと、送信元グループに接続されて、送信元グループから大量のデータ・セットを受信する遠隔宛先であって、各大量のデータ・セットが、第１の時刻前で、かつ、第２の時刻後に書き込まれたデータを表し、特定のデータ・セットの１つの第２の時刻が、当該特定のデータ・セットの次のものの第１の時刻に対応する、遠隔宛先と、送信元グループに接続されて、送信元グループから同期データを受信する最小記憶ローカル宛先であって、当該最小記憶ローカル宛先が遠隔宛先に記憶されないデータを含み、遠隔宛先が最小記憶ローカル宛先に記憶されないデータを含み、新たな大量のデータ・セットが提供される場合に、送信元グループが指示子を提供する、最小記憶ローカル宛先と、を含む。遠隔宛先に含まれるが、最小記憶ローカル宛先に含まれないデータは、最小記憶ローカル宛先に含まれるが、遠隔宛先に含まれないデータよりも古いものとすることができる。
【００２５】
さらに本発明によると、復旧データを記憶することは、大量のデータ・セットを遠隔宛先へ提供することであって、各大量のデータ・セットが、第１の時刻前で、かつ、第２の時刻後に書き込まれたデータを表し、特定のデータ・セットの１つの第２の時刻が、当該特定のデータ・セットの次のものの第１の時刻に対応する、大量のデータ・セットを遠隔宛先へ提供すること、ローカル宛先へ同期データを提供すること、および遠隔宛先に記憶する新たな大量のデータ・セットの作成に関連して、ローカル宛先へ指示子を提供すること、を含む。ローカル宛先は、複数のマップを保持することができる。これらマップのそれぞれは、当該マップに提供される同期データを特定の大量のデータ・セットに関連付ける。新たな大量のデータ・セットの作成に関連した指示子を受信することに応答して、ローカル宛先は新たなマップを指し示すことができる。マップは２つであってもよいし、３
つ以上であってもよい。ローカル宛先が、当該ローカル宛先に提供された同期データに肯定応答しないことに応答して、遠隔宛先は、当該遠隔宛先に書き込まれたデータのマップを保持することができる。復旧データを記憶することは、ローカル宛先が当該ローカル宛先に提供された同期データに肯定応答しないことに応答して、遠隔宛先が新たな大量のデータ・セットの作成回数のカウントを保持すること、を含むことができる。
【００２６】
さらに本発明によると、ローカル宛先および遠隔宛先に記憶されたデータを復旧することは、ローカル宛先および遠隔宛先のいずれが最も最新のデータを有するかを判断すること、遠隔宛先が最も最新のデータを有する場合に、遠隔宛先からローカル宛先へデータをコピーすること、およびローカル宛先が最も最新のデータを有する場合に、ローカル宛先から遠隔宛先へデータをコピーすること、を含む。ローカル宛先および遠隔宛先のいずれが最も最新のデータを有するかを判断することは、遠隔宛先によって提供されるトークンであって、遠隔宛先に記憶されているがローカル宛先に記憶されていない新たなデータの量を示すトークンを調べることを含むことができる。このトークンは、ローカル記憶装置が当該ローカル記憶装置に提供されたデータに肯定応答しなかった後に遠隔記憶装置へ提供された新たな大量のデータ・セットの個数を示すことができる。ここで、各大量のデータ・セットは、第１の時刻前で、かつ、第２の時刻後に書き込まれたデータを表し、特定のデータ・セットの１つの第２の時刻は、当該特定のデータ・セットの次のものの第１の時刻に対応する。遠隔宛先からローカル宛先へデータをコピーすることは、遠隔宛先に書き込まれたデータであって、ローカル宛先へ書き込まれたものとして肯定応答されないデータ、に対応するマップにより示されたデータをコピーすることを含むことができる。ローカル宛先から遠隔宛先へデータをコピーすることは、ローカル宛先に書き込まれたデータであって、遠隔宛先へ書き込まれたものとして肯定応答されないデータ、に対応する複数のマップにより示されたデータをコピーすることを含むことができる。マップは２つであってもよいし、３つ以上であってもよい。
【００２７】
さらに本発明によると、復旧データを記憶するソフトウェアは、大量のデータ・セットを遠隔宛先に提供する実行可能コードであって、各大量のデータ・セットが、第１の時刻前で、かつ、第２の時刻後に書き込まれたデータを表し、特定のデータ・セットの１つの第２の時刻が、当該特定のデータ・セットの次のものの第１の時刻に対応する、大量のデータ・セットを遠隔宛先に提供する実行可能コードと、ローカル宛先へ同期データを提供する実行可能コードと、遠隔宛先に記憶する新たな大量のデータ・セットの作成に関連して、ローカル宛先へ指示子を提供する実行可能コードと、を含む。ローカル宛先は、複数のマップを保持する実行可能コードを含むことができる。これらマップのそれぞれは、当該マップに提供される同期データを特定の大量のデータ・セットに関連付ける。新たな大量のデータ・セットの作成に関連した指示子を受信することに応答して、ローカル宛先は新たなマップを指し示すことができる。マップは２つであってもよいし、３つ以上であってもよい。このソフトウェアは、ローカル宛先が当該ローカル宛先に提供された同期データに肯定応答しないことに応答して、当該遠隔宛先に提供されたデータのマップを保持する実行可能コードを遠隔宛先において含むことができる。このソフトウェアは、ローカル宛先が当該ローカル宛先に提供された同期データに肯定応答しないことに応答して、新たな大量のデータ・セットの作成回数のカウントを保持する実行可能コードを遠隔宛先において含むことができる。
【００２８】
さらに本発明によると、ローカル宛先および遠隔宛先に記憶されたデータを復旧するソフトウェアは、ローカル宛先および遠隔宛先のいずれが最も最新のデータを有するかを判断する実行可能コードと、遠隔宛先が最も最新のデータを有する場合に、遠隔宛先からローカル宛先へデータをコピーする実行可能コードと、ローカル宛先が最も最新のデータを有する場合に、ローカル宛先から遠隔宛先へデータをコピーする実行可能コードと、を含む。ローカル宛先および遠隔宛先のいずれが最も最新のデータを有するかを判断する実行
可能コードは、遠隔宛先によって提供されたトークンであって、遠隔宛先に記憶されているがローカル宛先に記憶されていない新たなデータの量を示すトークンを調べる実行可能コードを含むことができる。このトークンは、ローカル記憶装置が当該ローカル記憶装置に提供されたデータに肯定応答しなかった後に遠隔記憶装置へ提供された新たな大量のデータ・セットの個数を示すことができる。ここで、各大量のデータ・セットは、第１の時刻前で、かつ、第２の時刻後に書き込まれたデータを表し、特定のデータ・セットの１つの第２の時刻は、当該特定のデータ・セットの次のものの第１の時刻に対応する。遠隔宛先からローカル宛先へデータをコピーする実行可能コードは、遠隔宛先に書き込まれたデータであって、ローカル宛先へ書き込まれたものとして肯定応答されないデータ、に対応するマップにより示されたデータをコピーする実行可能コードを含むことができる。ローカル宛先から遠隔宛先へデータをコピーする実行可能コードは、ローカル宛先に書き込まれたデータであって、遠隔宛先へ書き込まれたものとして肯定応答されないデータ、に対応する複数のマップにより示されたデータをコピーする実行可能コードを含むことができる。マップは２つであってもよいし、３つ以上であってもよい。
【００２９】
さらに本発明によると、復旧データを記憶するシステムは、送信元グループと、送信元グループに接続されて、送信元グループから大量のデータ・セットを受信する遠隔宛先であって、各大量のデータ・セットが、第１の時刻前で、かつ、第２の時刻後に書き込まれたデータを表し、特定のデータ・セットの１つの第２の時刻が、当該特定のデータ・セットの次のものの第１の時刻に対応する、遠隔宛先と、送信元グループに接続されて、送信元グループから同期データを受信するローカル宛先であって、送信元グループが、遠隔宛先に記憶する新たな大量のデータ・セットの作成に関連して当該ローカル宛先へ指示子を提供する、ローカル宛先と、を含む。
【００３０】
さらに本発明によると、復旧データを記憶するシステムは、データを生成する送信元グループと、送信元グループに接続されて、送信元グループから同期データを受信するローカル宛先と、送信元グループに接続されて、送信元グループから非同期データを受信する遠隔宛先と、ローカル宛先および遠隔宛先のいずれが最も最新のデータを有するかを判断する手段と、遠隔宛先が最も最新のデータを有する場合に、遠隔宛先からローカル宛先へデータをコピーする手段と、ローカル宛先が最も最新のデータを有する場合に、ローカル宛先から遠隔宛先へデータをコピーする手段と、を含む。
【００３１】
さらに本発明によると、復旧データを記憶することは、ホストプロセッサがローカル記憶装置へデータを書き込むこと、ホストプロセッサが、ローカル記憶装置に、当該ホストプロセッサによる書き込みに対応した大量のデータ・セットを蓄積させることであって、各大量のデータ・セットが、第１の時刻の前で、かつ、第２の時刻の後に書き込まれたデータを表し、特定の大量のデータ・セットの１つの第２の時刻が、その特定の大量のデータ・セットの次のものの第１の時刻に対応する、ホストプロセッサが、ローカル記憶装置に、当該ホストプロセッサによる書き込みに対応した大量のデータ・セットを蓄積させること、ローカル記憶装置から遠隔宛先へ大量のデータ・セットを送信すること、ローカル記憶装置からローカル宛先へ同期データを提供すること、およびホストプロセッサが、遠隔宛先に記憶する新たな大量のデータ・セットの作成に関連して、ローカル宛先へ指示子を提供することを引き起こすこと、を含む。ローカル宛先は複数のマップを保持することができ、当該マップのそれぞれは、当該マップに提供される同期データを特定の大量のデータ・セットに関連付ける。新たな大量のデータ・セットの作成に関連した指示子を受信することに応答して、ローカル宛先は新たなマップを指し示すことができる。マップは２つであってもよいし、３つ以上であってもよい。ローカル宛先が当該ローカル宛先に提供された同期データに肯定応答しないことに応答して、遠隔宛先は、当該遠隔宛先に書き込まれたデータのマップを保持することができる。復旧データを記憶することは、ローカル宛先が当該ローカル宛先に提供された同期データに肯定応答しないことに応答して、遠隔
宛先が新たな大量のデータ・セットの作成回数のカウントを保持すること、を含むことができる。ホストプロセッサは、２つ以上のローカル宛先へデータを同期して転送する２つ以上のローカル記憶装置へデータを書き込むことができる。
【００３２】
さらに本発明によると、ローカル宛先および遠隔宛先に記憶されたデータを復旧することは、ホストに、ローカル宛先および遠隔宛先の一方にローカルにアクセスさせること、ホストが、ローカル宛先および遠隔宛先のいずれが最も最新のデータを有するかを判断すること、遠隔宛先が最も最新のデータを有する場合に、ホストが、遠隔宛先からローカル宛先へのデータのコピーを引き起こすこと、およびローカル宛先が最も最新のデータを有する場合に、ホストが、ローカル宛先から遠隔宛先へのデータのコピーを引き起こすこと、を含む。ホストが、ローカル宛先および遠隔宛先のいずれが最も最新のデータを有するかを判断することは、遠隔宛先によって提供されたトークンであって、遠隔宛先に記憶されているがローカル宛先に記憶されていない新たなデータの量を示すトークンをホストが調べることを含むことができる。このトークンは、ローカル記憶装置が当該ローカル記憶装置に提供されたデータに肯定応答しなかった後に遠隔記憶装置へ提供された新たな大量のデータ・セットの個数を示すことができる。ここで、各大量のデータ・セットは、第１の時刻前で、かつ、第２の時刻後に書き込まれたデータを表し、特定のデータ・セットの１つの第２の時刻は、当該特定のデータ・セットの次のものの第１の時刻に対応する。ホストが遠隔宛先からローカル宛先へデータをコピーすることは、遠隔宛先に書き込まれたデータであって、ローカル宛先へ書き込まれたものとして肯定応答されないデータ、に対応するマップにより示されたデータをホストがコピーすることを含むことができる。ホストがローカル宛先から遠隔宛先へデータをコピーすることは、ローカル宛先に書き込まれたデータであって、遠隔宛先へ書き込まれたものとして肯定応答されないデータ、に対応する複数のマップにより示されたデータをホストがコピーすることを含むことができる。マップの個数は２つであってもよいし、３つ以上であってもよい。
【発明の効果】
【００３３】
大量のデータ・セットを遠隔宛先に提供し、ローカル宛先へ同期データを提供し、かつ、遠隔宛先で記憶する新たな大量のデータ・セットの作成に関連して、ローカル宛先へ指示子を提供して、復旧データを記憶することができる。
【発明を実施するための最良の形態】
【００３４】
図１を参照して、略図２０は、ホスト２２とローカル記憶装置２４と遠隔記憶装置２６との間の関係を示している。ホスト２２は、ホストアダプタ（ＨＡ）２８を介してローカル記憶装置２４からデータを読み出し、ローカル記憶装置２４へデータを書き込む。ホストアダプタ２８は、ホスト２２とローカル記憶装置２４との間のインターフェースを円滑にする。略図２０は、１つのホスト２２および１つのＨＡ２８のみを示しているが、複数のＨＡを使用でき、１つ以上のＨＡに１つ以上のホストを接続できることが当業者には理解されよう。
【００３５】
ローカル記憶装置２４からのデータは、ＲＤＦリンク２９を介して遠隔記憶装置２６へコピーされ、それによって、遠隔記憶装置２６のデータは、ローカル記憶装置２４のデータと同一になる。１つのリンク２９のみが示されているが、記憶装置２４、２６の間に追加リンクを有することができ、記憶装置２４、２６の一方または双方と他の記憶装置（図示せず）との間にリンクを有することができる。これに加えて、リンク２９は、直接接続（有線、無線、またはそれらの或る組み合わせ）を使用して提供することもできるし、ネットワーク（インターネット等）を使用して提供することもできるし、データを搬送する他の任意の適切な手段を使用して提供することもできる。ローカル記憶装置２４から遠隔記憶装置２６へのデータの転送の間、時間遅延が存在することがあり、その結果、遠隔記憶装置２６は、一定の時点で、ローカル記憶装置２４のデータと同一でないデータを含む
ことがあることに留意されたい。ＲＤＦを使用した通信は、例えば、米国特許第５，７４２，７９２号に記載されている。この米国特許は、参照により本明細書に援用される。
【００３６】
ローカル記憶装置２４は、第１の複数のＲＤＦアダプタユニット（ＲＡ）３０ａ、３０ｂ、３０ｃを含み、遠隔記憶装置２６は、第２の複数のＲＡ３２ａ〜３２ｃを含む。ＲＡ３０ａ〜３０ｃ、３２ａ〜３２ｃは、ＲＤＦリンク２９に接続され、ホストアダプタ２８と同様のものであるが、記憶装置２４、２６間でデータを転送するのに使用される。ＲＡ３０ａ〜３０ｃ、３２ａ〜３２ｃに関連して使用されるソフトウェアについては、以下でさらに詳細に説明する。
【００３７】
記憶装置２４、２６は、１つ以上のディスクを含むことができる。各ディスクは、記憶装置２４、２６のそれぞれに記憶されたデータの異なる部分を含む。図１は、複数のディスク３３ａ、３３ｂ、３３ｃを含む記憶装置２４、および、複数のディスク３４ａ、３４ｂ、３４ｃを含む記憶装置２６を示している。本明細書で説明するＲＤＦの機能は、ローカル記憶装置２４のディスク３３ａ〜３３ｃの少なくとも一部のデータが、ＲＤＦを使用して、遠隔記憶装置２６のディスク３４ａ〜３４ｃの少なくとも一部へコピーされるように適用することができる。記憶装置２４、２６のそれ以外のデータは、記憶装置２４、２６間でコピーされず、したがって、同一でないようにすることが可能である。
【００３８】
ディスク３３ａ〜３３ｃのそれぞれは、対応するディスクアダプタユニット（ＤＡ）３５ａ、３５ｂ、３５ｃに接続される。このＤＡ３５ａ、３５ｂ、３５ｃは、ディスク３３ａ〜３３ｃの対応するものへデータを提供し、ディスク３３ａ〜３３ｃの対応するものからデータを受信する。同様に、遠隔記憶装置２６の複数のＤＡ３６ａ、３６ｂ、３６ｃも、ディスク３４ａ〜３４ｃの対応するものへデータを提供し、ディスク３４ａ〜３４ｃの対応するものからデータを受信するのに使用される。ローカル記憶装置２４のＤＡ３５ａ〜３５ｃとＨＡ２８とＲＡ３０ａ〜３０ｃとの間には、内部データパスが存在する。同様に、遠隔記憶装置２６のＤＡ３６ａ〜３６ｃとＲＡ３２ａ〜３２ｃとの間にも、内部データパスが存在する。他の実施の形態では、２つ以上のディスクが１つのＤＡによってサービスの提供を受けることが可能であり、２つ以上のＤＡが１つのディスクにサービスを提供することが可能であることに留意されたい。
【００３９】
また、ローカル記憶装置２４は、ＤＡ３５ａ〜３５ｃとＨＡ２８とＲＡ３０ａ〜３０ｃとの間で転送されるデータを円滑にするのに使用できるグローバルメモリ３７も含む。このメモリ３７は、ＤＡ３５ａ〜３５ｃ、ＨＡ２８、およびＲＡ３０ａ〜３０ｃの１つ以上によって実行されるタスクと、ディスク３３ａ〜３３ｃの１つ以上からフェッチされたデータ用のキャッシュとを含むことができる。同様に、遠隔記憶装置２６も、ＤＡ３６ａ〜３６ｃおよびＲＡ３２ａ〜３２ｃの１つ以上によって実行されるタスクと、ディスク３４ａ〜３４ｃの１つ以上からフェッチされたデータ用のキャッシュとを含むことができるグローバルメモリ３８を含む。メモリ３７、３８の使用については、以下でさらに詳細に説明する。
【００４０】
ディスク３３ａ〜３３ｃに対応するローカル記憶装置２４のストレージ空間は、複数のボリュームまたは論理デバイスに細分することができる。これらの論理デバイスは、ディスク３３ａ〜３３ｃの物理ストレージ空間に対応することもあるし、対応しないこともある。したがって、例えば、ディスク３３ａが、複数の論理デバイスを含むこともあるし、あるいは、単一の論理デバイスが、ディスク３３ａ、３３ｂの双方にまたがることもできる。同様に、ディスク３４ａ〜３４ｃを備える遠隔記憶装置２６の記憶空間も、複数のボリュームまたは論理デバイスに細分することができ、これら論理デバイスのそれぞれは、ディスク３４ａ〜３４ｃの１つ以上に対応することもあるし、対応しないこともある。
【００４１】
ローカル記憶装置２４の一部と遠隔記憶装置２６の一部との間のＲＤＦマッピングを提供するには、ローカル記憶装置２４の論理デバイスの遠隔ミラーである遠隔記憶装置２６の論理デバイスをセットアップすることが必要である。ホスト２２は、ローカル記憶装置２４の論理デバイスからデータを読み出し、この論理デバイスへデータを書き込み、ＲＤＦマッピングによって、変更されたデータをローカル記憶装置２４から遠隔記憶装置２６へ、ＲＡ３０ａ〜３０ｃ、３２ａ〜３２ｃ、およびＲＤＦリンク２９を使用して転送させる。定常状態の動作時には、遠隔記憶装置２６の論理デバイスは、ローカル記憶装置２４の論理デバイスのデータと同一のデータを含む。ホスト２２がアクセスするローカル記憶装置２４の論理デバイスは、「Ｒ１ボリューム」（または単に「Ｒ１」）と呼ばれる一方、Ｒ１ボリュームのデータのコピーを含む遠隔記憶装置２６の論理デバイスは、「Ｒ２ボリューム」（または単に「Ｒ２」）と呼ばれる。したがって、ホストは、Ｒ１ボリュームからデータを読み出し、Ｒ１ボリュームへデータを書き込み、ＲＤＦは、Ｒ１ボリュームからＲ２ボリュームへのデータの自動的なコピーおよび更新をハンドリングする。本明細書で説明するシステムは、ソフトウェア、ハードウェア、ならびに／または、ソフトウェアおよびハードウェアの組み合わせを使用して実施することができる。ソフトウェアおよびハードウェアの組み合わせにおいては、ソフトウェアは、適切な記憶媒体に記憶することができ、１つ以上のプロセッサによって実行することができる。
【００４２】
図２を参照して、ホスト２２からローカル記憶装置２４および遠隔記憶装置２６へのデータのパスが示されている。ホスト２２からローカル記憶装置２４へ書き込まれたデータは、ローカル記憶装置２４のデータ要素５１によって示すように、ローカルに記憶される。また、ホスト２２がローカル記憶装置２４に書き込むデータは、ローカル記憶装置２４がリンク２９を介して遠隔記憶装置２６へ送信することに関連して、ローカル記憶装置２４によって保持される。
【００４３】
本明細書で説明するシステムでは、ホスト２２による（例えば、１つのレコード、複数のレコード、トラック等の）各データ書き込みにシーケンス番号が割り当てられる。このシーケンス番号は、書き込みに関連した適切なデータフィールドに設けることができる。図２では、ホスト２２による書き込みは、シーケンス番号Ｎが割り当てられたものとして示されている。ホスト２２が実行する、シーケンス番号Ｎが割り当てられた書き込みのすべては、単一の大量のデータ・セット５２に収集される。このデータ・セット５２は、ホスト２２によりほぼ同時に行われた複数の個別の書き込みを表す。
【００４４】
一般に、ローカル記憶装置２４は、或るシーケンス番号のデータ・セットを蓄積すると同時に、前に蓄積されたデータ・セット（前のシーケンス番号を有する）を遠隔記憶装置２６に送信する。このように、ローカル記憶装置２４が、ホスト２２からのシーケンス番号Ｎが割り当てられた書き込みを蓄積している間、前のシーケンス番号（Ｎ−１）の間に行われた書き込みが、ローカル記憶装置２４によりリンク２９を介して遠隔記憶装置２６へ送信される。データ・セット５４は、ホスト２２からのシーケンス番号Ｎ−１が割り当てられた書き込みを表している。これらの書き込みは、遠隔記憶装置２６へまだ送信されていない。
【００４５】
遠隔記憶装置２６は、シーケンス番号Ｎ−１が割り当てられた書き込みに対応するデータ・セット５４からデータを受信し、シーケンス番号Ｎ−１を有するホスト書き込みの新たなデータ・セット５６を作成する。データは、リンク２９を横断して送信されたデータに肯定応答する適切なＲＤＦプロトコルを使用して送信することができる。遠隔記憶装置２６がデータ・セット５４からデータのすべてを受信すると、ローカル記憶装置２４は、コミットメッセージを遠隔記憶装置２６へ送信して、データ・セット５６に対応するシーケンス番号Ｎ−１が割り当てられたすべてのデータをコミットする。一般に、特定のシーケンス番号に対応するデータ・セットがコミットされると、そのデータ・セットを論理記
憶装置に書き込むことができる。このことは、図２では、シーケンス番号Ｎ−２（すなわち、現在のシーケンス番号が、ホスト２２によるローカル記憶装置２４への書き込みに関連して使用される２つ前）が割り当てられた書き込みに対応するデータ・セット５８で示されている。図２では、データ・セット５８は、遠隔記憶装置２６のディスクストレージを表すデータ要素６２に書き込まれるものとして示されている。このように、前のシーケンス番号（Ｎ−２）に対応するデータ・セット５８が、データ要素６２によって示される遠隔記憶装置２６のディスクストレージに書き込まれている間、遠隔記憶装置２６は、シーケンス番号Ｎ−１に対応するデータ・セット５６を受信して蓄積している。いくつかの実施の形態では、データ・セット５８のデータは書き込み用のマークを付けられる（ただし、必ずしも直ちに書き込まれるとは限らない）一方、データ・セット５６のデータはそうではない。
【００４６】
このように、動作時に、ホスト２２は、データ要素５１にローカルに記憶されてデータ・セット５２に蓄積されるデータをローカル記憶装置２４へ書き込む。特定のシーケンス番号のデータのすべてが蓄積されると（本明細書の他の箇所で説明）、ローカル記憶装置２４はシーケンス番号をインクリメントする。現在のシーケンス番号よりも１つ小さいシーケンス番号に対応するデータ・セット５４からのデータは、ローカル記憶装置２４から遠隔記憶装置２６へリンク２９を介して転送される。データ・セット５８は、ローカル記憶装置２４が遠隔記憶装置２６へメッセージを送信することによってコミットされたシーケンス番号のデータに対応する。データ・セット５８からのデータは、遠隔記憶装置２６のディスクストレージへ書き込まれる。
【００４７】
データ・セット５２、５４、５６、５８の特定の１つのデータ・セット内での書き込みは、必ずしも順序付けられていないことに留意されたい。しかしながら、本明細書の他の箇所でさらに詳細に説明するように、シーケンス番号Ｎ−２に対応するデータ・セット５８のあらゆる書き込みは、シーケンス番号Ｎ−１に対応するデータ・セット５４、５６の書き込みのいずれの開始よりも前に開始されている。これに加えて、シーケンス番号Ｎ−１に対応するデータ・セット５４、５６のあらゆる書き込みは、シーケンス番号Ｎに対応するデータ・セット５２の書き込みのいずれの開始よりも前に開始されている。したがって、ローカル記憶装置２４と遠隔記憶装置２６との間の通信障害の場合に、遠隔記憶装置２６は、最後にコミットされた大量のデータ・セット（図２の例ではデータ・セット５８）の書き込みを単に終了するだけでよく、データ要素６２が一定の時点よりも前に開始された書き込みのすべてを含み、その時点よりも後に開始された書き込みを含まないという意味で、遠隔記憶装置２６におけるデータの状態が順序付けられることを遠隔記憶装置２６に保証することができる。したがって、Ｒ２は、常に、Ｒ１の或る時点のコピーを含み、Ｒ２デバイスからの一貫したイメージを再確立することが可能である。
【００４８】
図３を参照して、略図７０は、データ・セット５２、５４を作成および保持するのに使用される項目を示している。標準論理デバイス７２は、ホスト２２によって書き込まれたデータを含み、図２のデータ要素５１および図１のディスク３３ａ〜３３ｃに対応するものである。標準論理デバイス７２は、ホスト２２によってローカル記憶装置２４へ書き込まれたデータを含む。
【００４９】
ポインタの２つのリンクリスト７４、７６は、標準論理デバイス７２に関連して使用される。これらのリンクリスト７４、７６は、例えば、ローカル記憶装置２４のメモリ３７に記憶できるデータに対応する。リンクリスト７４は、複数のポインタ８１〜８５を含み、これらのポインタのそれぞれは、ローカル記憶装置２４に関連して使用されるキャッシュ８８のスロットを指し示す。同様に、リンクリスト７６は、複数のポインタ９１〜９５を含み、これらのポインタのそれぞれは、キャッシュ８８のスロットを指し示す。いくつかの実施の形態では、キャッシュ８８は、ローカル記憶装置２４のメモリ３７に設けるこ
とができる。キャッシュ８８は、複数のキャッシュスロット１０２〜１０４を含む。これらのキャッシュスロット１０２〜１０４は、標準論理デバイス７２への書き込みに関連して使用することができ、同時に、リンクリスト７４、７６に関連して使用することができる。
【００５０】
例えば、リンクリスト７４はシーケンス番号Ｎの大量のデータ・セット５２に対応できる一方、リンクリスト７６はシーケンス番号Ｎ−１の大量のデータ・セット５４に対応できるように、リンクリスト７４、７６のそれぞれは、大量のデータ・セット５２、５４の一方に使用することができる。したがって、データがホスト２２によってローカル記憶装置２４へ書き込まれると、そのデータは、キャッシュ８８に提供され、場合によっては（本明細書の他の箇所で説明）、リンクリスト７４の適切なポインタが作成される。本明細書の他の箇所で説明するように、このデータは、標準論理デバイス７２へデステージされて、また、リンクリスト７４のポインタ８１〜８５の１つによってもはや指し示されなくなるまで、キャッシュ８８から削除されないことに留意されたい。
【００５１】
本明細書の一実施の形態では、リンクリスト７４、７６の一方は「アクティブ」とみなされる一方、他方は「非アクティブ」とみなされる。したがって、例えば、シーケンス番号Ｎが偶数である場合、リンクリスト７４はアクティブとすることができる一方、リンクリスト７６は非アクティブである。リンクリスト７４、７６のうちアクティブなものは、ホスト２２からの書き込みをハンドリングする一方、リンクリスト７４、７６のうち非アクティブなものは、ローカル記憶装置２４から遠隔記憶装置２６へ送信されているデータに対応する。
【００５２】
ホスト２２によって書き込まれるデータが、（シーケンス番号Ｎについて）リンクリスト７４、７６のうちアクティブなものを使用して蓄積されている間、（前のシーケンス番号Ｎ−１について）リンクリスト７４、７６のうち非アクティブなものに対応するデータは、ローカル記憶装置２４から遠隔記憶装置２６へ送信される。ＲＡ３０ａ〜３０ｃは、リンクリスト７４、７６を使用して、ローカル記憶装置２４から遠隔記憶装置２６へ送信するデータを決定する。
【００５３】
リンクリスト７４、７６の一方のポインタのうち特定の１つに対応するデータが遠隔記憶装置２６へ送信されると、ポインタのうちその特定の１つは、リンクリスト７４、７６の適切な一方から削除することができる。これに加えて、スロットのデータがそれ以外に別の目的（例えば、標準論理デバイス７２へデステージされる）で必要とされないという条件で、キャッシュ８８から削除するためのマークをそのデータに付けることもできる（すなわち、そのスロットを後の関係しない使用のためにスロットのプールに戻すことができる）。すべてのデバイスがもはやデータを使用していない状態になるまで、当該データをキャッシュ８８から削除しないことを保証するメカニズムを使用することができる。このようなメカニズムは、例えば、１９９６年７月１６日に発行された米国特許第５，５３７，５６８号および２００３年７月１５日に発行された米国特許第６，５９４，７４２号に記載されている。これらの米国特許の双方は、参照により本明細書に援用される。
【００５４】
図４を参照して、キャッシュ８８のスロット１０２〜１０４の１つと同様のスロット１２０は、ヘッダ１２２およびデータ１２４を含む。ヘッダ１２２は、システムがスロット１２０を管理するのに使用するオーバーヘッド情報に対応する。データ１２４は、スロット１２０に（一時的に）記憶されているディスクからの対応するデータである。ヘッダ１２２の情報は、ディスクへ戻るポインタ、タイムスタンプ（単数または複数）等を含む。
【００５５】
また、ヘッダ１２２は、本明細書で説明するシステムに関連して使用されるキャッシュスタンプ１２６も含む。本明細書の一実施の形態では、このキャッシュスタンプ１２６は
８バイトである。これらバイトのうちの２バイトは、スロット１２０が、本明細書で説明するシステムによって使用されているかどうかを示す「パスワード」である。他の実施の形態では、このパスワードは１バイトとすることができる一方、その次のバイトはパッドに使用される。本明細書の他の箇所で説明するように、２バイトのパスワード（または、場合によっては１バイト）が特定の値に等しいということは、スロット１２０がリンクリスト７４、７６の少なくとも１つのエントリによって指し示されていることを示す。パスワードが特定の値に等しくないということは、スロット１２０がリンクリスト７４、７６のエントリによって指し示されていないことを示す。パスワードの使用については、本明細書の他の箇所で説明する。
【００５６】
また、キャッシュスタンプ１２６は、スロット１２０のデータ１２４のシーケンス番号（例えば、Ｎ、Ｎ−１、Ｎ−２等）を示す２バイトのフィールドも含む。本明細書の他の箇所で説明するように、キャッシュスタンプ１２６のシーケンス番号フィールドは、本明細書で説明する処理を円滑にするのに使用することができる。キャッシュスタンプ１２６の残りの４バイトは、本明細書の他の箇所で説明するように、ポインタに使用することができる。もちろん、２バイトのシーケンス番号および４バイトのポインタは、スロット１２０がリスト７４、７６の一方の少なくとも１つのエントリによって指し示されることを示す特定の値にパスワードが等しい場合にのみ有効である。
【００５７】
図５を参照して、フローチャート１４０は、ホスト２２が書き込みオペレーションを実行することに関連してＨＡ２８により実行されるステップを示している。もちろん、ホスト２２が書き込みを実行する時、データがＲ１／Ｒ２  ＲＤＦグループの一部であるかどうかにかかわらず、通常の方法で書き込みをハンドリングする処理が行われる。例えば、ホスト２２がディスクの一部にデータを書き込む時、その書き込みは、最終的にはディスクへデステージされるキャッシュスロットに対して行われる。このキャッシュスロットは、新たなキャッシュスロットとすることもできるし、同じトラックへの前の読み出しオペレーションおよび／または書き込みオペレーションに関連して作成された既存のキャッシュスロットとすることもできる。
【００５８】
処理は最初のステップ１４２で開始する。このステップ１４２では、書き込みに対応するスロットがロックされる。本明細書の一実施の形態では、キャッシュ８８のスロット１０２〜１０４のそれぞれは、標準論理デバイス７２のデータのトラックに対応する。ステップ１４２でスロットをロックすることによって、別のプロセスが、フローチャート１４０のステップに対応する、ＨＡ２８によって実行される処理の期間中に、該当するスロットに対して処理を行うことが防止される。
【００５９】
ステップ１４２に続いてステップ１４４では、シーケンス番号Ｎの値が設定される。本明細書の他の箇所で説明するように、ＨＡ２８によって実行される書き込みオペレーション全体の期間中、ステップ１４４で得られたシーケンス番号の値は維持されると同時に、スロットはロックされる。本明細書の他の箇所で説明するように、シーケンス番号は各書き込みに割り当てられ、その書き込みが属する大量のデータ・セット５２、５４の一方を設定する。ホスト２２によって実行された書き込みには、現在のシーケンス番号が割り当てられる。単一の書き込みオペレーションは、終始同じシーケンス番号を保持することが有益である。
【００６０】
ステップ１４４に続いて、テストステップ１４６は、キャッシュスロットのパスワードフィールドが有効かどうかを判断する。上述したように、本明細書で説明するシステムは、パスワードフィールドを、そのキャッシュスロットがポインタのリンクリスト７４、７６の一方にすでにあることを示す所定の値に設定する。テストステップ１４６において、パスワードフィールドが有効でない（スロットが新しく、リスト７４、７６からのポイン
タがそのスロットを指し示していないことを示す）と判断されると、制御はステップ１４６からステップ１４８へ渡される。ステップ１４８では、パスワードを所定の値に設定し、シーケンス番号フィールドをＮに設定し、かつ、ポインタフィールドをＮｕｌｌ（ヌル）に設定することによって、新たなスロットのキャッシュスタンプが設定される。他の実施の形態では、ポインタフィールドは、そのスロット自身を指し示すように設定することができる。
【００６１】
ステップ１４８に続いてステップ１５２では、新たなスロットへのポインタが、ポインタリスト７４、７６のうちアクティブのものに追加される。本明細書の一実施の形態では、リスト７４、７６は循環２重リンクリストであり、新たなポインタは、従来通りの方法で循環２重リンクリストに追加される。もちろん、他の適切なデータ構造体を使用して、リスト７４、７６を管理することもできる。ステップ１５２に続いてステップ１５４では、フラグが設定される。ステップ１５４では、ＲＤＦ＿ＷＰフラグ（ＲＤＦ書き込み保留フラグ）が、ＲＤＦを使用してスロットを遠隔記憶装置２６へ送信する必要があることを示すように設定される。これに加えて、ステップ１５４では、ＩＮ＿ＣＡＣＨＥフラグが、スロットを標準論理デバイス７２へデステージする必要があることを示すように設定される。ステップ１５４に続いてステップ１５６では、ホスト２２およびＨＡ２８によって書き込まれているデータがスロットへ書き込まれる。ステップ１５６に続いてステップ１５８では、スロットのロックが解除される。ステップ１５８に続いて、処理は完了する。
【００６２】
テストステップ１４６において、スロットのパスワードフィールドが有効である（そのスロットがリスト７４、７６の少なくとも１つのポインタによってすでに指し示されていることを示す）と判断されると、制御はステップ１４６からテストステップ１６２へ移る。ステップ１６２では、スロットのシーケンス番号フィールドが現在のシーケンス番号Ｎに等しいかどうかが判断される。有効なパスワードを有するスロットのシーケンス番号フィールドについて、２つの有効な可能性があることに留意されたい。シーケンス番号フィールドが現在のシーケンス番号Ｎに等しい可能性がある。これは、スロットが、シーケンス番号Ｎを有する前の書き込みに対応する場合に起こる。他の可能性は、シーケンス番号フィールドがＮ−１に等しくなることである。これは、スロットが、シーケンス番号Ｎ−１を有する前の書き込みに対応する場合に起こる。シーケンス番号フィールドがそれ以外のどの値であっても、それは無効である。したがって、いくつかの実施の形態に対して、ステップ１６２のエラー／有効性チェックを含めること、または、場合により、個々のステップのエラー／有効性チェックを行うことが可能な場合がある。このようなエラーは、任意の適切な方法でハンドリングすることができる。この方法には、ユーザにメッセージを提供することが含まれ得る。
【００６３】
ステップ１６２において、スロットのシーケンス番号フィールドの値が現在のシーケンス番号Ｎに等しいと判断されると、特別な処理は必要なく、制御は、上述したようにステップ１６２からステップ１５６へ移り、ステップ１５６で、データがスロットに書き込まれる。そうでなく、シーケンス番号フィールドの値がＮ−１（他の唯一の有効な値）であると、制御はステップ１６２からステップ１６４へ移り、ステップ１６４で、新たなスロットが取得される。ステップ１６４で取得された新たなスロットは、書き込み中のデータを記憶するのに使用することができる。
【００６４】
ステップ１６４に続いてステップ１６６では、旧スロットからのデータが、ステップ１６４で取得された新たなスロットへコピーされる。このコピーされたデータはＲＤＦ＿ＷＰフラグを含むことに留意されたい。このフラグは、そのスロットが最初に作成された時の前の書き込みの際に、ステップ１５４で設定されているはずである。ステップ１６６に続いてステップ１６８では、新たなスロットのキャッシュスタンプが設定される。この設定は、パスワードフィールドを適切な値に設定し、シーケンス番号フィールドを現在のシ
ーケンス番号Ｎに設定し、かつ、ポインタフィールドを旧スロットを指し示すように設定することによって行われる。ステップ１６８に続いてステップ１７２では、新たなスロットへのポインタがリンクリスト７４、７６のうちアクティブなものに追加される。ステップ１７２に続いてステップ１５６では、上述したように、データがスロットへ書き込まれる。このスロットは、この場合、新たなスロットである。
【００６５】
図６を参照して、フローチャート２００は、ＲＡ３０ａ〜３０ｃがリスト７２、７４のうち非アクティブなものをスキャンして、ローカル記憶装置２４から遠隔記憶装置２６へＲＤＦデータを送信することに関連して実行されるステップを示している。上述したように、Ｎサイクルが、リスト７２、７４のうちアクティブなものを使用してホストによりＲ１デバイスへ書き込まれている時、リスト７２、７４のうち非アクティブなものは、Ｒ１デバイスのＮ−１サイクルに対応するスロットを指し示す。
【００６６】
処理は最初のステップ２０２で開始する。ステップ２０２では、リスト７２、７４のうち非アクティブなものにエントリがあるかどうかが判断される。データが送信されると、その対応するエントリは、リスト７２、７４のうち非アクティブなものから削除される。これに加えて、新たな書き込みが、リスト７２、７４のうちアクティブなものへ提供され、一般に、リスト７２、７４のうち非アクティブなものへは提供されない。したがって、リスト７２、７４のうち非アクティブなものは、一定の時期にデータを含まない可能性がある（また、本明細書の他の箇所で説明するように、含まないことが望ましい）。ステップ２０２において、送信されるデータがないと判断されると、リスト７２、７４のうち非アクティブなものは、データが利用可能となるまで、継続的にポーリングされる。リスト７２、７４のうち非アクティブなものがリスト７２、７４のうちアクティブなものになるサイクルスイッチ（本明細書の他の箇所で説明）に関連して、送信用データは利用可能になる。この逆もまた同様である。
【００６７】
ステップ２０２において、送信に利用可能なデータがあると判断されると、制御はステップ２０２からステップ２０４へ移る。ステップ２０４では、スロットが正しいことが検証される。スロット２０４で実行された処理は、オプションの「健全性チェック」である。この健全性チェックは、パスワードフィールドが正しいことの検証、および、シーケンス番号フィールドが正しいことの検証を含むことができる。正しくない（予期しない）データがスロットにあると、エラー処理を実行することができる。このエラー処理は、エラーをユーザに通知すること、および、場合により、エラー復旧処理を含んでもよい。
【００６８】
ステップ２０４に続いてステップ２１２では、データが、従来通りの方法でＲＤＦを介して送信される。本明細書の一実施の形態では、スロット全体が送信されるのではない。逆に、適切なミラービット（レコードが変更されたことを示す）が設定された、スロット内のレコードのみが遠隔記憶装置２６へ送信される。一方、他の実施の形態において、遠隔記憶装置２６が、適切なミラービットが設定されたレコードに対応するデータのみを書き込み、かつ、トラックの他のデータを無視するという条件で、スロット全体を送信することが可能な場合がある。他のデータは、有効な場合もあるし、有効でない場合もある。ステップ２１２に続いてテストステップ２１４では、送信されたデータがＲ２デバイスによって肯定応答されたかどうかが判断される。肯定応答されていない場合には、ステップ２１４からステップ２１２へ戻るフローによって示すように、データは再送される。他の実施の形態では、さらに必要とされる異なる処理を使用して、データを送信し、その受信に肯定応答することができる。このような処理は、エラー報告、および、一定の回数のデータ送信の試みが失敗した後に実行される代替的な処理を含むことができる。
【００６９】
テストステップ２１４において、データの送信が成功したと判断されると、制御はステップ２１４からステップ２１６へ渡り、ＲＤＦ＿ＷＰフラグがクリアされる（データはＲ
ＤＦを介して送信に成功しているので）。ステップ２１６に続いてステップ２１８では、スロットが複製スロットであるかどうかが判断される。この複製スロットは、リスト７２、７４のうち非アクティブなものの既存のエントリをすでに有するスロットへの書き込みに関連して作成されたものである。この可能性については、ステップ１６２、１６４、１６６、１６８、１７２に関連して上述している。ステップ２１８において、スロットが複製スロットであると判断されると、制御はステップ２１８からステップ２２２へ渡り、ステップ２２２では、スロットが、（再利用される）利用可能なスロットのプールに戻される。これに加えて、スロットに設けられたデータは他のどの目的にも有効でないので、スロットは、エージングされて（または他の或る適切なメカニズムが適用されて）、他のスロットよりも先に即座の再利用に備えることができる。ステップ２２２に続いて、または、スロットが複製スロットでない場合のステップ２１８に続いて、ステップ２２４では、スロットが再利用される場合に、図５のステップ１４６のテストがそのスロットを新たなスロットとして適切に分類するように、スロットヘッダのパスワードフィールドがクリアされる。
【００７０】
ステップ２２４に続いてステップ２２６では、リスト７２、７４のうち非アクティブなもののエントリが削除される。ステップ２２６に続いて、制御が上述したステップ２０２に戻り、ステップ２０２では、リスト７２、７４のうち非アクティブなものに、転送する必要のあるデータに対応したエントリがさらにあるかどうかが判断される。
【００７１】
図７を参照して、略図２４０は、遠隔記憶装置２６によって使用されるデータ・セット５６、５８の作成および操作を示している。遠隔記憶装置２６がリンク２９を介して受信したデータは、遠隔記憶装置２６のキャッシュ２４２へ提供される。キャッシュ２４２は、例えば、遠隔記憶装置２６のメモリ３８に設けることができる。キャッシュ２４２は、複数のキャッシュスロット２４４〜２４６を含む。これらキャッシュスロットのそれぞれは、標準論理記憶装置２５２のトラックにマッピングすることができる。キャッシュ２４２は、図３のキャッシュ８８と同様のものであり、遠隔記憶装置２６の標準論理記憶装置２５２へデステージできるデータを含むことができる。標準論理記憶装置２５２は、図２に示すデータ要素６２および図１に示すディスク３４ａ〜３４ｃに対応する。
【００７２】
また、遠隔記憶装置２６は、１対のキャッシュオンリー仮想デバイス（cache only virtual device ）２５４、２５６も含む。これらのキャッシュオンリー仮想デバイス２５４、２５６は、例えば、遠隔記憶装置２６のメモリ３８に記憶できるデバイステーブルに対応する。キャッシュオンリー仮想デバイス２５４、２５６のそれぞれのテーブルの各トラックエントリは、標準論理デバイス２５２のトラックを指し示すか、または、キャッシュ２４２のスロットを指し示す。キャッシュオンリー仮想デバイスは、２００３年３月２５日に出願されてシリアル番号１０／３９６，８００号を有する「CACHE-ONLY VIRTUAL DEVICES」という発明の名称の同時係属中の米国特許出願に記載されている。この米国特許出願は、参照により本明細書に援用される。
【００７３】
複数のキャッシュスロット２４４〜２４６は、標準論理デバイス２５２への書き込みに関連して使用することができ、同時に、キャッシュオンリー仮想デバイス２５４、２５６に関連して使用することができる。本明細書の一実施の形態では、キャッシュオンリー仮想デバイス２５４、２５６のトラックテーブルエントリのそれぞれは、そのトラックのデータが、標準論理デバイス２５２の対応するトラックに記憶されていることを示すヌルを含む。そうでない場合、キャッシュオンリー仮想デバイス２５４、２５６のそれぞれについてのトラックテーブルのエントリは、キャッシュ２４２のスロット２４４〜２４６の１つへのポインタを含む。
【００７４】
キャッシュオンリー仮想デバイス２５４、２５６のそれぞれは、大量のデータ・セット
５６、５８の１つに対応する。したがって、例えば、キャッシュオンリー仮想デバイス２５４は大量のデータ・セット５６に対応することができる一方、キャッシュオンリー仮想デバイス２５６は大量のデータ・セット５８に対応することができる。本明細書の一実施の形態では、キャッシュオンリー仮想デバイス２５４、２５６の一方は「アクティブ」とみなすことができる一方、キャッシュオンリー仮想デバイス２５４、２５６の他方は「非アクティブ」とみなすことができる。キャッシュオンリー仮想デバイス２５４、２５６のうち非アクティブなものは、ローカル記憶装置２４（すなわち、データ・セット５６）から受信されているデータに対応することができる一方、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものは、標準論理デバイス２５２へリストアされている（書き込まれている）データに対応する。
【００７５】
ローカル記憶装置２４からリスト２９を介して受信されたデータは、キャッシュ２４２のスロット２４４〜２４６の１つに配置することができる。キャッシュオンリー仮想デバイス２５４、２５６のうち非アクティブなものの対応するポインタは、受信したデータを指し示すように設定することができる。同じシーケンス番号を有する後続のデータも同様にして処理することができる。或る時点において、ローカル記憶装置２４は、同じシーケンス番号を使用する送信データのすべてをコミットするメッセージを提供する。特定のシーケンス番号のデータがコミットされると、キャッシュオンリー仮想デバイス２５４、２５６のうち非アクティブなものがアクティブになり、アクティブなものが非アクティブになる。その時点で、キャッシュオンリー仮想デバイス２５４、２５６のうち現在アクティブなものからのデータが、標準論理デバイス２５２へコピーされる一方、キャッシュオンリー仮想デバイス２５４、２５６のうち非アクティブなものは、ローカル記憶装置２４から遠隔記憶装置２６へ送信された新たなデータ（新たなシーケンス番号を有する）を受信するのに使用される。
【００７６】
キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものからデータが削除されると（本明細書の他の箇所で説明）、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものの対応するエントリをヌルに設定することができる。これに加えて、スロットのデータが、それ以外に、別の目的（例えば、標準論理デバイス２５２へデステージされる）で必要とされないという条件で、キャッシュ２４４からもそのデータを削除することができる（すなわち、スロットは、後の使用のためフリースロットのプールに戻される）。すべてのミラー（キャッシュオンリー仮想デバイス２５４、２５６を含む）がもはやデータを使用していない状態になるまで、当該データをキャッシュ２４２から削除しないことを保証するメカニズムを使用することができる。このようなメカニズムは、例えば、１９９６年７月１６日に発行された米国特許第５，５３７，５６８号および２００３年７月１５日に発行された米国特許第６，５９４，７４２号に記載されている。これらの米国特許の双方は、参照により本明細書に援用される。
【００７７】
本明細書の他の箇所で説明する或る実施の形態では、遠隔記憶装置２６は、ローカル記憶装置２４によって使用されるリスト７４、７６と同様のリンクリスト２５８、２６２を保持することができる。リスト２５８、２６２の一方がキャッシュオンリー仮想デバイス２５４、２５６の一方に対応し、リスト２５８、２６２の他方がキャッシュオンリー仮想デバイス２５４、２５６の他方に対応する場合に、これらのリスト２５８、２６２は、変更された対応するキャッシュオンリー仮想デバイス２５４、２５６のスロットを特定する情報を含むことができる。本明細書の他の箇所で説明するように、リスト２５８、２６２を使用して、キャッシュオンリー仮想デバイス２５４、２５６から標準論理デバイス２５２へデータをリストアすることを円滑にすることができる。
【００７８】
図８を参照して、フローチャート２７０は、ローカル記憶装置２４によって遠隔記憶装置２６へ送信されたシーケンス番号コミットのデータの処理に関連して、遠隔記憶装置２
６によって実行されるステップを示している。本明細書の他の箇所で説明するように、ローカル記憶装置２４は、シーケンス番号を定期的にインクリメントする。これが行われると、ローカル記憶装置２４は、前のシーケンス番号のデータのすべての送信を終了し、次に、前のシーケンス番号のコミットメッセージを送信する。
【００７９】
処理は最初のステップ２７２で開始する。ステップ２７２では、コミットが受信される。ステップ２７２に続いて、テストステップ２７４では、遠隔記憶装置２６のキャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものが空であるかどうかを判断する。本明細書の他の箇所で説明するように、遠隔記憶装置２６のキャッシュオンリー仮想デバイス２５４、２５６のうち非アクティブなものは、ＲＤＦを使用して送信されたローカル記憶装置２４からのデータを蓄積するのに使用される一方、キャッシュオンリー仮想デバイス２５４、２５６のうち非アクティブなものは、標準論理デバイス２５２へリストアされる。
【００８０】
テストステップ２７４において、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものが空でないと判断されると、制御はテストステップ２７４からステップ２７６へ移り、ステップ２７６で、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなもののリストアが、さらに処理が実行される前に完了される。キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものからのデータのリストアについては、本明細書の他の箇所でさらに詳細に説明する。キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものが、コミットのハンドリングおよび次のシーケンス番号のデータのリストアの開始に先立って空になることは有益である。
【００８１】
ステップ２７６に続いて、または、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものが空であると判断された場合のステップ２７４に続いて、ステップ２７８では、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものが非アクティブにされる。ステップ２７８に続いてステップ２８２では、キャッシュオンリー仮想デバイス２５４、２５６のうち前に非アクティブであったもの（すなわち、ステップ２７８の実行前に非アクティブであったもの）はアクティブにされる。ステップ２７８、２８２においてアクティブおよび非アクティブなキャッシュオンリー仮想デバイス２５４、２５６を交換することによって、キャッシュオンリー仮想デバイス２５４、２５６のうち現在非アクティブ（および空）なものは、次のシーケンス番号についてローカル記憶装置２４からのデータの受信を開始する準備を行う。
【００８２】
ステップ２８２に続いてステップ２８４では、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものが、遠隔記憶装置２６の標準論理デバイス２５２へリストアされる。キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものを標準論理デバイス２５２へリストアすることについては、以下でさらに詳細に説明する。しかしながら、いくつかの実施の形態では、リストアプロセスは開始されるが、必ずしもステップ２８４で完了しないことに留意されない。ステップ２８４に続いてステップ２８６では、ローカル記憶装置２４から遠隔記憶装置２６へ送信されたコミットが、ローカル記憶装置２４へ肯定応答され、その結果、コミットの成功がローカル記憶装置２４に通知される。ステップ２８６に続いて、処理は完了する。
【００８３】
図９を参照して、フローチャート３００は、図８のステップ２７６、２８４をさらに詳細に示している。これらのステップ２７６、２８４では、遠隔記憶装置２６が、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものをリストアする。処理は最初のステップ３０２で開始する。ステップ３０２では、ポインタが、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものの最初のスロットを指し示すように設定される。このポインタは、キャッシュオンリー仮想デバイス２５４、２５６のうち
アクティブなものの各トラックテーブルエントリにわたって繰り返すのに使用される。このトラックテーブルエントリのそれぞれは個別に処理される。ステップ３０２に続いてテストステップ３０４では、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものの処理中のトラックが、標準論理デバイス２５２を指し示すかどうかが判断される。指し示す場合、リストアするものはない。そうでない場合、制御はステップ３０４からステップ３０６へ移り、ステップ３０６で、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものの対応するスロットがロックされる。
【００８４】
ステップ３０６に続いて、テストステップ３０８は、標準論理デバイス２５２の対応するスロットが、遠隔記憶装置２６のキャッシュにすでにあるかどうかを判断する。すでにある場合には、制御はテストステップ３０８からステップ３１２へ移り、ステップ３１２で、標準論理デバイスのスロットがロックされる。ステップ３１２に続いてステップ３１４では、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものからのデータが、標準論理デバイス２５２のキャッシュのデータとマージされる。ステップ３１４におけるデータのマージには、標準論理デバイスのデータを、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものの新たなデータで上書きすることが必要である。レコードレベルフラグを提供する実施の形態では、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものからの新たなレコードを、キャッシュの標準論理デバイス２５２のレコードと単にＯＲ演算することが可能な場合がある。すなわち、レコードがインターリーブされる場合、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものからの、変更されたレコードを使用すること、および、標準論理デバイス２５２のキャッシュスロットへレコードを提供することのみが必要である。ステップ３１４に続いてステップ３１６では、標準論理デバイス２５２のスロットのロックが解除される。ステップ３１６に続いてステップ３１８では、処理中のキャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなもののスロットのロックも解除される。
【００８５】
テストステップ３０８において、標準論理デバイス２５２の対応するスロットがキャッシュにないと判断されると、制御はテストステップ３０８からステップ３２２へ移る。ステップ３２２では、標準論理デバイス２５２のスロットがキャッシュにあり（例えば、ＩＮ＿ＣＡＣＨＥフラグが設定されることがある）、デステージされる必要があることを示すように、標準論理デバイス２５２のスロットのトラックエントリが変更される。本明細書の他の箇所で説明するように、いくつかの実施の形態では、適切なミラービットが設定されたトラックのレコードのみをデステージすることが必要な場合がある。ステップ３２２に続いてステップ３２４では、トラックのフラグを、そのトラックのデータがキャッシュにあることを示すように設定することができる。
【００８６】
ステップ３２４に続いてステップ３２６では、標準論理デバイス２５２のスロットポインタが、キャッシュのスロットを指し示すように変更される。ステップ３２６に続いて、テストステップ３２８は、ステップ３２２、３２４、３２６で実行されたオペレーションが成功したかどうかを判断する。場合によっては、「比較および交換」オペレーションと呼ばれる単一のオペレーションを使用して、ステップ３２２、３２４、３２６を実行することができる。これらのオペレーションがいかなる理由があるにせよ成功しない場合には、制御はステップ３２８からステップ３０８へ戻り、標準論理デバイス２５２の対応するトラックがキャッシュにあるかどうかが再検査される。そうでなく、テストステップ３２８において、前のオペレーションが成功したと判断されると、制御はテストステップ３２８から上述したステップ３１８へ移る。
【００８７】
ステップ３１８に続いて、テストステップ３３２は、（リストアされている）キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなもののキャッシュスロットがまだ使用されているかどうかを判断する。場合によっては、キャッシュオンリー仮想デバ
イス２５４、２５６のうちアクティブなもののスロットは別のミラーによってまだ使用されている可能性がある。テストステップ３３２において、キャッシュオンリー仮想デバイスのスロットが別のミラーによって使用されていないと判断されると、制御はテストステップ３３２からステップ３３４へ移る。ステップ３３４では、そのスロットは、他のプロセスによる使用のために解放される（例えば、本明細書の他の箇所で説明するように、利用可能なスロットのプールへリストアされる）。ステップ３３４に続いてステップ３３６では、次のスロットが指し示され、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものの次のスロットが処理される。テストステップ３３２において、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものが別のミラーによってまだ使用されていると判断された場合に、当該テストステップ３３２からもステップ３３６に到達することに留意されたい。また、テストステップ３０４において、処理されているスロットについて、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものが標準論理デバイス２５２を指し示すと判断された場合に、当該テストステップ３０４からステップ３３６に到達することにも留意されたい。ステップ３３６に続いて、テストステップ３３８では、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものの処理されるスロットがさらにあるかどうかを判断する。ない場合には、処理は完了する。さらにある場合には、制御はテストステップ３３８からステップ３０４へ戻る。
【００８８】
別の実施の形態では、遠隔記憶装置２６のＮ−１サイクルに対応する受信した大量のデータ・セット５６の修正スロットのリストを作成することができる。このリストは、図７に示すリスト２５８、２６２等である。データが受信されると、遠隔記憶装置２６は、修正スロットのリンクリストを作成する。作成されるリストは、循環とすることもできるし、直線（ＮＵＬＬ終端を有する）とすることもできるし、他の任意の適切な設計とすることもできる。このリストは、次に、キャッシュオンリー仮想デバイス２５４、２５６のうちアクティブなものをリストアするのに使用することができる。
【００８９】
図９のフローチャート３００は、２つの代替的なパス３４２、３４４を示している。これらのパスは、修正スロットのリストが使用される実施の形態のオペレーションを示している。ステップ３０２では、リストの最初の要素を指し示すポインタ（修正スロットのリストにわたって繰り返すのに使用される）が作成される。ステップ３０２に続いて、ステップ３０６には、代替的なパス３４２が到達する。修正スロットのリストを使用する実施の形態では、リストのスロットは、標準論理デバイス２５２を指し示すはずはないので、テストステップ３０４は必要とされない。
【００９０】
ステップ３０６に続いて、処理は、ステップ３３６がＣＯＶＤの次のスロットを指し示すのではなく、修正スロットのリストをトラバースすることに関連していることを除き、前の実施の形態で上述したように続く。同様に、ステップ３３８のテストは、ポインタがリストの最後（または、循環リンクリストの場合には始点に戻っている）にあるかどうかを判断する。また、ステップ３３８において、処理するスロットがさらにあると判断されると、代替的なパス３４４によって示すように、制御はステップ３３８からステップ３０６へ移る。上述したように、修正スロットのリストを使用する実施の形態では、ステップ３０４を省略することができる。
【００９１】
図１０を参照して、フローチャート３５０は、ローカル記憶装置２４がシーケンス番号を増加させることに関連して実行されるステップを示している。処理は最初のステップ３５２で開始する。ステップ３５２では、ローカル記憶装置２４が、シーケンス番号を増加させる前に少なくともＭ秒待つ。本明細書の一実施の形態では、Ｍは３０であるが、もちろん、Ｍは任意の数とすることができる。Ｍの値が大きくなると、記憶装置２４、２６間の通信が不通になった場合に失われるおそれのあるデータ量が増加する。一方、Ｍの値が
小さくなると、シーケンス番号をより高い頻度でインクリメントすることによって引き起こされるオーバーヘッドの総量が増加する。
【００９２】
ステップ３５２に続いて、テストステップ３５４では、ＨＡが前のシーケンス番号のＩ／Ｏのすべてを完了したことを示すビットを、ローカル記憶装置２４のＨＡのすべてが設定したかどうかを判断する。シーケンス番号が変化すると、ＨＡのそれぞれは、その変化を通知し、前のシーケンス番号のすべてのＩ／Ｏが完了したことを示すビットを設定する。例えば、シーケンス番号がＮ−１からＮに変化すると、ＨＡは、シーケンス番号Ｎ−１のすべてのＩ／Ｏを完了した時にビットを設定する。場合によっては、ＨＡの単一のＩ／Ｏが長い時間を要する場合があり、シーケンス番号が変化した後であってもまだ実行中の場合があることに留意されたい。また、いくつかのシステムでは、異なるメカニズムを使用して、ＨＡのすべてがＨＡのＮ−１のＩ／Ｏを完了したかどうかを判断することができることにも留意されたい。この異なるメカニズムには、メモリ３７のデバイステーブルを調べることが含まれ得る。
【００９３】
テストステップ３５４において、前のシーケンス番号からのＩ／Ｏが完了したと判断されると、制御はステップ３５４からテストステップ３５６へ移る。テストステップ３５６は、リスト７４、７６のうち非アクティブなものが空であるかどうかを判断する。リスト７４、７６のうち非アクティブなものに対応するデータのすべてが、ＲＤＦプロトコルを使用してローカル記憶装置２４から遠隔記憶装置２６へ完全に送信されるまで、シーケンス番号の切り換えは行われないようにすることができる。リスト７４、７６のうち非アクティブなものが空であると判断されると、制御はステップ３５６からステップ３５８へ移る。ステップ３５８では、前のシーケンス番号のコミットが、ローカル記憶装置２４から遠隔記憶装置２６へ送信される。上述したように、遠隔記憶装置２６は、特定のシーケンス番号のコミットメッセージを受信することによって、そのシーケンス番号に対応するデータのリストアを開始する。
【００９４】
ステップ３５８に続いてステップ３６２では、リスト７４、７６のうち非アクティブなもののデータのコピーが一時中断される。本明細書の他の箇所で説明するように、リストのうち非アクティブなものは、スキャンされて、ローカル記憶装置２４から遠隔記憶装置２６へ対応するデータが送信される。シーケンス番号の切り換えが完了するまで、データのコピーを一時中断することは有益である。本明細書の一実施の形態では、この一時中断は、ＲＡ３０ａ〜３０ｃへメッセージを送信することによって提供される。しかしながら、本明細書で説明するシステムを使用してデータの送信を円滑にするために他のコンポーネントを使用する実施の形態では、適切なメッセージ／コマンドを当該他のコンポーネントへ送信することによって、コピーの一時中断を提供できることが、当業者には理解されよう。
【００９５】
ステップ３６２に続いてステップ３６４では、シーケンス番号がインクリメントされる。ステップ３６４に続いてステップ３６６では、テストステップ３５４で使用されたＨＡのビットがすべてクリアされ、それらのビットは、シーケンス番号のインクリメントに関連して再び設定できるようにされる。ステップ３６６に続いて、テストステップ３７２は、遠隔記憶装置２６が、ステップ３５８で送信されたコミットメッセージに肯定応答したかどうかを判断する。コミットメッセージに肯定応答することについては、図８に関連して上述している。遠隔記憶装置２６が、ステップ３５８で送信されたコミットメッセージに肯定応答したと判断されると、制御はステップ３７２からステップ３７４へ移る。ステップ３７４では、ステップ３６２で提供されたコピーの一時停止がクリアされ、その結果、コピーを再開することができる。ステップ３７４に続いて、処理は完了する。ステップ３７４からステップ３５２へ戻って、新たなサイクルを開始し、シーケンス番号を引き続きインクリメントすることが可能であることに留意されたい。
【００９６】
Ｒ１デバイスのＣＯＶＤを使用して、アクティブな大量のデータ・セットおよび非アクティブな大量のデータ・セットに関連したスロットを収集することも可能である。その場合、Ｒ２デバイスと同様に、或るＣＯＶＤを非アクティブなシーケンス番号に関連付けることができ、別のＣＯＶＤをアクティブなシーケンス番号に関連付けることができる。これについては以下で説明する。
【００９７】
図１１を参照して、略図４００は、データ・セット５２、５４の作成および保持に使用される項目を示している。標準論理デバイス４０２は、ホスト２２によって書き込まれたデータを含み、図２のデータ要素５１および図１のディスク３３ａ〜３３ｃに対応する。標準論理デバイス４０２は、ホスト２２によってローカル記憶装置２４へ書き込まれたデータを保持する。
【００９８】
２つのキャッシュオンリー仮想デバイス４０４、４０６は、標準論理デバイス４０２に関連して使用される。これらのキャッシュオンリー仮想デバイス４０４、４０６は、例えば、ローカル記憶装置２４のメモリ３７に記憶できるデバイステーブルに対応する。キャッシュオンリー仮想デバイス４０４、４０６のそれぞれのテーブルの各トラックエントリは、標準論理デバイス４０２のトラック、または、ローカル記憶装置２４に関連して使用されるキャッシュ４０８のスロットのいずれかを指し示す。いくつかの実施の形態では、キャッシュ４０８は、ローカル記憶装置２４のメモリ３７に設けることができる。
【００９９】
キャッシュ４０８は、複数のキャッシュスロット４１２〜４１４を含む。これらのキャッシュスロット４１２〜４１４は、標準論理デバイス４０２への書き込みに関連して使用することができ、同時に、キャッシュオンリー仮想デバイス４０４、４０６に関連して使用することができる。本明細書の一実施の形態では、キャッシュオンリー仮想デバイス４０４、４０６の各トラックテーブルエントリは、標準論理デバイス４０２の対応するトラックを指し示すヌルを含む。別の状況では、キャッシュオンリー仮想デバイス４０４、４０６のそれぞれについてのトラックテーブルのエントリは、キャッシュ４０８のスロット４１２〜４１４の１つへのポインタを含む。
【０１００】
例えば、キャッシュオンリー仮想デバイス４０４がシーケンス番号Ｎの大量のデータ・セット５２に対応できる一方、キャッシュオンリー仮想デバイス４０６がシーケンス番号Ｎ−１の大量のデータ・セット５４に対応できるように、キャッシュオンリー仮想デバイス４０４、４０６のそれぞれは、大量のデータ・セット５２、５４の一方に使用することができる。したがって、データがホスト２２によってローカル記憶装置２４に書き込まれると、そのデータは、キャッシュ４０８に提供され、キャッシュオンリー仮想デバイス４０４の適切なポインタが調整される。本明細書の他の箇所で説明するように、このデータは、標準論理デバイス４０２へデステージされるまでキャッシュ４０８から削除されず、また、キャッシュオンリー仮想デバイス４０４によってのみ解放されることに留意されたい。
【０１０１】
本明細書の一実施の形態では、キャッシュオンリー仮想デバイス４０４、４０６の一方は「アクティブ」とみなされる一方、他方は「非アクティブ」とみなされる。したがって、例えば、シーケンス番号Ｎが偶数である場合、キャッシュオンリー仮想デバイス４０４はアクティブとすることができる一方、キャッシュオンリー仮想デバイス４０６は非アクティブである。キャッシュオンリー仮想デバイス４０４、４０６のうちアクティブなものは、ホスト２２からの書き込みをハンドリングする一方、キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなものは、ローカル記憶装置２４から遠隔記憶装置２６へ送信されているデータに対応する。
【０１０２】
ホスト２２によって書き込まれるデータが、（シーケンス番号Ｎについて）キャッシュオンリー仮想デバイス４０４、４０６のうちアクティブなものを使用して蓄積されている間、（前のシーケンス番号Ｎ−１について）キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなものに対応するデータは、ローカル記憶装置２４から遠隔記憶装置２６へ送信される。この実施の形態および関連した実施の形態の場合、ローカル記憶装置のＤＡ３５ａ〜３５ｃは、キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなものをスキャンして、ＲＡ３０ａ〜３０ｃの１つ以上へコピー要求を送信することをハンドリングして、ローカル記憶装置２４から遠隔記憶装置２６へデータを送信する。したがって、コピーの一時停止および再開に関連して上述したステップ３６２、３７４は、ＤＡ３５ａ〜３５ｃへメッセージ／コマンドを提供することを含むことができる。
【０１０３】
データが遠隔記憶装置２６へ送信されると、キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなものにおける対応するエントリをヌルに設定することができる。これに加えて、スロットのデータがそれ以外に別の目的（例えば、標準論理デバイス４０２へデステージされる）で必要とされない場合には、データをキャッシュ４０８から削除することもできる（すなわち、そのスロットを後の使用のためにスロットのプールに戻すことができる）。すべてのミラー（キャッシュオンリー仮想デバイス４０４、４０６を含む）がもはやデータを使用していない状態になるまで、当該データをキャッシュ４０８から削除しないことを保証するメカニズムを使用することができる。このようなメカニズムは、例えば、１９９６年７月１６日に発行された米国特許第５，５３７，５６８号および２００３年７月１５日に発行された米国特許第６，５９４，７４２号に記載されている。これらの米国特許の双方は、参照により本明細書に援用される。
【０１０４】
図１２を参照して、フローチャート４４０は、２つのＣＯＶＤがＲ１デバイスによって使用されて本明細書で説明するシステムを提供する実施の形態について、ホスト２２が書き込みオペレーションを実行することに関連してＨＡ２８により実行されるステップを示している。処理は最初のステップ４４２で開始する。このステップ４４２では、書き込みに対応するスロットがロックされる。本明細書の一実施の形態では、キャッシュ４０８のスロット４１２〜４１４のそれぞれは、標準論理デバイス４０２のデータのトラックに対応する。ステップ４４２でスロットをロックすることによって、別のプロセスが、フローチャート４４０のステップに対応する、ＨＡ２８によって実行される処理の期間中に、該当するスロットに対して処理を行うことが防止される。
【０１０５】
ステップ４４２に続いてステップ４４４では、シーケンス番号Ｎの値が設定される。Ｒ１側のＣＯＶＤ以外のリストを使用する実施の形態と同様に、ＨＡ２８によって実行される書き込みオペレーション全体の期間中、ステップ４４４で得られたシーケンス番号の値は維持されると同時に、スロットはロックされる。本明細書の他の箇所で説明するように、シーケンス番号は各書き込みに割り当てられ、その書き込みが属する大量のデータ・セット５２、５４の一方を設定する。ホスト２２によって実行された書き込みには、現在のシーケンス番号が割り当てられる。単一の書き込みオペレーションは、終始同じシーケンス番号を保持することが有益である。
【０１０６】
ステップ４４４に続いて、テストステップ４４６は、キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなものが、ステップ４４２でロックされたスロット（処理されているスロット）をすでに指し示しているかどうかを判断する。これは、シーケンス番号が現在のシーケンス番号よりも１つ小さい場合において、同じスロットへの書き込みが提供された場合に生じることがある。前のシーケンス番号の書き込みに対応するデータは、遠隔記憶装置２６へまだ送信されていない場合がある。
【０１０７】
テストステップ４４６において、キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなものがスロットを指し示さないと判断されると、制御はテストステップ４４６から別のテストステップ４４８へ移る。ステップ４４８では、キャッシュオンリー仮想デバイス４０４、４０６のうちアクティブなものがスロットを指し示すかどうかが判断される。シーケンス番号が現在のシーケンス番号と同じであった期間中にスロットへの前の書き込みが行われていた場合に、キャッシュオンリー仮想デバイス４０４、４０６のうちアクティブなものは、スロットを指し示すことが可能である。テストステップ４４８において、キャッシュオンリー仮想デバイス４０４、４０６のうちアクティブなものがスロットを指し示さないと判断されると、制御はテストステップ４４８からステップ４５２へ移る。ステップ４５２では、新たなスロットがデータ用に取得される。ステップ４５２に続いてステップ４５４では、キャッシュオンリー仮想デバイス４０４、４０６のうちアクティブなものが、スロットを指し示すようにされる。
【０１０８】
ステップ４５４に続いて、または、キャッシュオンリー仮想デバイス４０４、４０６のうちアクティブなものがスロットを指し示す場合のステップ４４８に続いて、ステップ４５６では、フラグが設定される。ステップ４５６では、ＲＤＦ＿ＷＰフラグ（ＲＤＦ書き込み保留フラグ）が、ＲＤＦを使用してスロットを遠隔記憶装置２６へ送信する必要があることを示すように設定される。これに加えて、ステップ４５６では、ＩＮ＿ＣＡＣＨＥフラグが、スロットを標準論理デバイス４０２へデステージする必要があることを示すように設定される。場合によって、キャッシュオンリー仮想デバイス４０４、４０６のうちアクティブなものがスロットをすでに指し示している場合（ステップ４４８で判断される）、ＲＤＦ＿ＷＰフラグおよびＩＮ＿ＣＡＣＨＥフラグは、ステップ４５６の実行前にすでに設定されていた可能性があることに留意されたい。一方、ステップ４５６でのフラグの設定によって、たとえ前の状態が何であっても、フラグを適切に設定することが保証される。
【０１０９】
ステップ４５６に続いてステップ４５８では、スロットを指し示すトラックテーブルの間接フラグがクリアされ、該当するデータはそのスロットに設けられており、間接的に示される異なるスロットには設けられていないことが示される。ステップ４５８に続いてステップ４６２では、ホスト２２およびＨＡ２８によって書き込まれているデータがスロットへ書き込まれる。ステップ４６２に続いてステップ４６４では、スロットのロックが解除される。ステップ４６４に続いて、処理は完了する。
【０１１０】
ステップ４４６において、キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなものがスロットを指し示すと判断されると、制御はステップ４４６からステップ４７２へ移り、ステップ４７２で、新たなスロットが取得される。上述したように、ステップ４７２で取得された新たなスロットは、キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなものに使用してＲＤＦ転送を行うことができる一方、旧スロットは、キャッシュオンリー仮想デバイス４０４、４０６のうちアクティブなものに関連付けることができる。
【０１１１】
ステップ４７２に続いてステップ４７４では、旧スロットからのデータが、ステップ４７２で取得された新たなスロットへコピーされる。ステップ４７４に続いてステップ４７６では、キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなものについてのトラックテーブルエントリは、旧スロットを指し示すが、データは、旧スロットによって指し示される新たなスロットにあることを示すように、間接フラグ（上述）が設定される。したがって、ステップ４７６で間接フラグを設定することによって、キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなもののトラックテーブルが影響を受け、それによって、トラックテーブルエントリは、データが新たなスロットにあることを示す。
【０１１２】
ステップ４７６に続いてステップ４７８では、新たなスロットのレコードのミラービットが調整される。新たなスロットの目的は、キャッシュオンリー仮想デバイスのうち非アクティブなもののＲＤＦ転送を単に行うためであるので、データがステップ４７４で旧スロットから新たなスロットへコピーされた時にコピーされたどのローカルミラービットもクリアされる。旧スロットは、あらゆるローカルミラーをハンドリングするのに使用されることになる。ステップ４７８に続いてステップ４６２では、データがスロットに書き込まれる。ステップ４６２に続いてステップ４６４では、スロットのロックが解除される。ステップ４６４に続いて、処理は完了する。
【０１１３】
図１３を参照して、フローチャート５００は、ローカル記憶装置２４が遠隔記憶装置２６へ大量のデータ・セット５４を送信することに関連して実行されるステップを示している。この送信は、基本的に、キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなものがアクティブであった時の前の繰り返しの間に書き込まれたトラックを得るために、キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなものをスキャンすることを含む。この実施の形態では、ローカル記憶装置２４のＤＡ３５ａ〜３５ｃが、キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなものをスキャンし、ＲＤＦプロトコルを使用してＲＡ３０ａ〜３０ｃの１つ以上により遠隔記憶装置２６へ送信用データをコピーする。
【０１１４】
処理は最初のステップ５０２で開始する。ステップ５０２では、キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなものの最初のトラックが、トラックのすべてにわたって繰り返すプロセスを開始するために指し示される。最初のステップ５０２に続いて、テストステップ５０４では、ＲＤＦ＿ＷＰフラグが設定されているかどうかが判断される。本明細書の他の箇所で説明するように、ＲＤＦ＿ＷＰフラグは、スロット（トラック）が、ＲＤＦリンクを介して送信する必要のあるデータを含むことを示すのに使用される。ＲＤＦ＿ＷＰフラグが設定されていることは、スロット（トラック）の少なくともいくつかのデータが、ＲＤＦを使用して送信されることを示す。本明細書の一実施の形態では、スロット全体が送信されるのではない。逆に、適切なミラービット（レコードが変更されたことを示す）が設定された、スロット内のレコードのみが遠隔記憶装置２６へ送信される。一方、他の実施の形態において、遠隔記憶装置２６が、適切なミラービットが設定されたレコードに対応するデータのみを書き込み、かつ、トラックの他のデータを無視するという条件で、スロット全体を送信することが可能な場合がある。他のデータは、有効な場合もあるし、有効でない場合もある。
【０１１５】
テストステップ５０４において、処理されているキャッシュスロットのＲＤＦ＿ＷＰフラグが設定されていると判断されると、制御はステップ５０４からテストステップ５０５へ移る。ステップ５０５では、スロットがデータを含むかどうか、または、スロットが、該当するデータを含んだ別のスロットを指し示す間接スロットであるかどうかが判断される。場合によって、スロットは、スロットに対応するディスクの一部のデータを含まないことがある。その代わり、そのスロットは、そのデータを含んだ別のスロットを指し示す間接スロットである場合がある。ステップ５０５において、スロットが間接スロットであると判断されると、制御はステップ５０５からステップ５０６へ移る。ステップ５０６では、データが（間接スロットによって指し示されたスロットから）取得される。このように、スロットが直接スロットである場合には、ＲＤＦによって送信されるデータがスロットに記憶される一方、スロットが間接スロットである場合には、ＲＤＦによって送信されるデータは、間接スロットによって指し示された別のスロットにある。
【０１１６】
ステップ５０６に続いて、または、スロットが直接スロットである場合のステップ５０５に続いて、ステップ５０７では、（スロットから直接的または間接的に）送信されてい
るデータが、ＲＤＦプロトコルを使用してローカル記憶装置２４から遠隔記憶装置２６へ送信されるＤＡ３５ａ〜３５ｃの１つによってコピーされる。ステップ５０７に続いてテストステップ５０８では、遠隔記憶装置２６がデータの受信に対して肯定応答したかどうかが判断される。肯定応答していない場合、制御はステップ５０８からステップ５０７へ戻り、データが再送される。他の実施の形態では、さらに必要な異なる処理を使用して、データを送信し、その受信に肯定応答することができる。このような処理は、エラー報告、および、一定の回数のデータ送信の試みが失敗した後に実行される代替的な処理を含むことができる。
【０１１７】
テストステップ５０８において、データの送信が成功したと判断されると、制御はステップ５０８からステップ５１２へ渡り、ＲＤＦ＿ＷＰフラグがクリアされる（データはＲＤＦを介して送信に成功しているので）。ステップ５１２に続いてステップ５１４では、適切なミラーフラグがクリアされて、少なくともＲＤＦミラー（Ｒ２）がもはやデータを必要としていないことが示される。本明細書の一実施の形態では、スロット（トラック）の一部である各レコードは、どのミラーが特定のレコードを使用するかを示す個別のミラーフラグを有する。Ｒ２デバイスは、レコードのそれぞれについてのこれらミラーの１つであり、このミラーの１つは、ステップ５１４でクリアされるＲ２デバイスに対応したフラグである。
【０１１８】
ステップ５１４に続いて、テストステップ５１６では、処理されているトラックのレコードのいずれかに、（他のミラーデバイス用の）他の何らかのミラーフラグが設定されているかどうかを判断する。設定されていない場合、制御はステップ５１６からステップ５１８へ移る。ステップ５１８では、スロットが解放される（すなわち、もはや使用されない）。いくつかの実施の形態では、未使用のスロットは、使用するのに利用可能なスロットのプールに保持される。スロットのレコードのいくつかについて、さらに別のフラグがまだ設定されている場合、それは、レコードを標準論理デバイス４０２へデステージする必要があることを意味するか、または、レコードが他の或るミラー（別のＲ２デバイスを含む）によって使用されていることを意味することがあることに留意されたい。ステップ５１８に続いて、または、ミラーフラグがさらに存在する場合のステップ５１６に続いて、ステップ５２２では、キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなものの各トラックエントリにわたって繰り返すのに使用されるポインタが、次のトラックを指し示すようにされる。ステップ５２２に続いて、テストステップ５２４では、キャッシュオンリー仮想デバイス４０４、４０６のうち非アクティブなものの処理されるトラックがさらにあるかどうかを判断する。ない場合には、処理は完了する。ある場合には、制御は、上述したテストステップ５０４へ戻る。ＲＤＦ＿ＷＰフラグが、処理されているトラックについて設定されていないと判断された場合、テストステップ５０４からもステップ５２２に到達することに留意されたい。
【０１１９】
図１４を参照して、略図７００は、複数のローカル記憶装置７０３〜７０５に接続されたホスト７０２を示している。また、この略図７００は、複数の遠隔記憶装置７０６〜７０８も示している。略図７００には、３つのローカル記憶装置７０３〜７０５および３つの遠隔記憶装置７０６〜７０８のみを示しているが、本明細書で説明するシステムは、任意の個数のローカル記憶装置および遠隔記憶装置を使用するように拡張することができる。
【０１２０】
ローカル記憶装置７０３〜７０５のぞれぞれは、遠隔記憶装置７０６〜７０８の対応する１つに接続され、そこで、例えば、ローカル記憶装置７０３が遠隔記憶装置７０６に接続され、ローカル記憶装置７０４が遠隔記憶装置７０７に接続され、ローカル記憶装置７０５が遠隔記憶装置７０８に接続される。ローカル記憶装置７０３〜７０５および遠隔記憶装置７０６〜７０８は、本明細書で説明する順序書き込みメカニズム（ordered writes
mechanism）を使用して接続することができ、そこで、例えば、ローカル記憶装置７０３は、順序書き込みメカニズムを使用して遠隔記憶装置７０６へ接続することができる。本明細書の他の箇所で説明するように、順序書き込みメカニズムによって、ローカル記憶装置および／またはホストが作業を停止し、かつ／もしくは、データを失う場合に、遠隔記憶装置を使用したデータの復旧が可能になる。
【０１２１】
場合により、ホスト７０２は、ローカル記憶装置７０３〜７０５の２つ以上を同時に使用する単一のアプリケーションを実行することができる。このような場合、ホスト７０２がいかなる時点で作業を中止しても、かつ／または、ローカル記憶装置７０３〜７０５の１つが故障しても、ローカル記憶装置７０３〜７０５においてアプリケーションデータが一貫性を有する（復旧可能である）ことを保証するようにアプリケーションを構成することができる。しかしながら、ローカル記憶装置７０３〜７０５と遠隔記憶装置７０６〜７０８との間の順序書き込み接続のそれぞれが他の接続と非同期であるので、アプリケーションのデータが、遠隔記憶装置７０６〜７０８において一貫性を有する（したがって、復旧可能である）保証はない。すなわち、例えば、ローカル記憶装置７０３と遠隔記憶装置７０６（第１のローカル／遠隔対）との間のデータ接続が一貫性を有し、かつ、ローカル記憶装置７０４と遠隔記憶装置７０７（第２のローカル／遠隔対）との間のデータ接続が一貫性を有する場合であっても、第１のローカル／遠隔対と第２のローカル／遠隔対との間が同期していないときは、遠隔記憶装置７０６、７０７のデータが常に一貫性を有するとは限らない。
【０１２２】
複数のローカル記憶装置７０３〜７０５を同時に使用するホスト７０２のアプリケーションの場合、遠隔記憶装置７０６〜７０８においてデータを一貫性をあるものとし、かつ、復旧可能なものとすることが望ましい。これは、ホスト７０２で実行されているアプリケーションからのデータが、遠隔記憶装置７０６〜７０８において一貫性を有し、かつ、復旧可能であるように、ホスト７０２がローカル記憶装置７０３〜７０５のそれぞれにおけるサイクル切り換えを制御するメカニズムによって提供することができる。この機能は、以下でさらに詳細に説明するように、複数のローカル記憶装置７０３〜７０５をマルチボックスモードに切り換える、ホスト７０２で実行される特別なアプリケーションによって提供される。
【０１２３】
図１５を参照して、テーブル７３０は、複数のエントリ７３２〜７３４を有する。エントリ７３２〜７３４のそれぞれは、記憶装置の単一のローカル／遠隔対に対応し、それで、例えば、エントリ７３２は、ローカル記憶装置７０３および遠隔記憶装置７０６の対に対応することができ、エントリ７３３は、ローカル記憶装置７０４および遠隔記憶装置７０７の対に対応することができ、エントリ７３４は、ローカル記憶装置７０５および遠隔記憶装置７０８の対に対応することができる。エントリ７３２〜７３４のそれぞれは複数のフィールドを有する。これらのフィールドにおいて、第１のフィールド７３６ａ〜７３６ｃは、対応するローカル記憶装置のシリアル番号を表し、第２のフィールド７３８ａ〜７３８ｃは、マルチボックスグループによって使用されるセッション番号を表し、第３のフィールド７４２ａ〜７４２ｃは、ローカル／遠隔対の対応する遠隔記憶装置のシリアル番号を表し、第４のフィールド７４４ａ〜７４４ｃは、マルチボックスグループのセッション番号を表す。テーブル７３０は、マルチボックスモードでの動作に関連してホスト７０２により作成されて保持される。これに加えて、テーブル７３０は、マルチボックスグループの一部であるローカル記憶装置および遠隔記憶装置のそれぞれへ伝えられる。以下でさらに詳細に説明するように、テーブル７３０を使用して、復旧を円滑にすることができる。
【０１２４】
異なるローカル／遠隔対は、いつどのような順序でも独立してマルチボックスモードに入出することができる。ホスト７０２は、ローカル記憶装置／遠隔記憶装置の対のマルチ
ボックスモードへの入出を管理する。これについては、以下でさらに詳細に説明する。
【０１２５】
図１６を参照して、フローチャート７５０は、ローカル／遠隔対のマルチボックスモードへの入出に関連してホスト７０２により実行されるステップを示している。処理は最初のステップ７５２で開始する。ステップ７５２では、マルチボックスモードオペレーションが一時的に中断される。ステップ７５２でマルチボックスオペレーションを一時的に中断することは、遠隔／ローカル対のマルチボックスモードへの入出に関連して行われる変更を円滑にするのに有益である。ステップ７５２に続いてステップ７５４では、図１５のテーブル７３０と同様のテーブルが、適宜、エントリを追加または削除するように変更される。ステップ７５４に続いてステップ７５６では、変更されたテーブルが、マルチボックスグループのローカル記憶装置および遠隔記憶装置へ伝えられる。本明細書の他の箇所でさらに詳細に説明するように、ステップ７５６でテーブルを伝えることによって、復旧が円滑になる。
【０１２６】
ステップ７５６に続いてステップ７５８では、メッセージが、影響を受けるローカル記憶装置へ送信され、変更が提供される。本明細書の他の箇所でさらに詳細に説明するように、ローカル記憶装置は、マルチボックスモードで実行するようにローカル記憶装置を構成することもできるし、当該モードで実行しないようにローカル記憶装置を構成することもできる。以下でさらに詳細に説明するように、順序書き込みをハンドリングするローカル記憶装置は、マルチボックスグループの一部として動作しているか否かに応じて、異なって動作する。ローカル記憶装置がマルチボックスグループに追加される予定である場合、ステップ７５８で送信されたメッセージは、ローカル記憶装置がマルチボックスグループに追加される予定であり、それで、ローカル記憶装置がマルチボックスモードで実行するようにローカル記憶装置を構成すべきであることを、当該ローカル記憶装置へ示す。あるいは、ローカル記憶装置がマルチボックスグループから削除される予定である場合には、ステップ７５８で送信されたメッセージは、ローカル記憶装置がマルチボックスグループから削除される予定であり、それで、ローカル記憶装置がマルチボックスモードで動作しないようにローカル記憶装置を構成すべきであることを、当該ローカル記憶装置へ示す。
【０１２７】
ステップ７５８に続いてテストステップ７６２では、ローカル／遠隔対がマルチボックスグループへ追加される予定である（削除される予定ではなく）かどうかが判断される。追加される予定である場合、制御はテストステップ７６２からステップ７６４へ移る。ステップ７６４では、タグ値が、追加される予定のローカル記憶装置へ送信される。このタグ値は、データでシーケンス番号を提供するのと同様の方法で、ローカル記憶装置から遠隔記憶装置へ送信されるデータで提供される。タグ値は、ホストによって制御され、ローカル／遠隔対のすべてが、同じサイクルの間、同じタグ値を有するデータを送信するように設定される。このタグ値の使用については、以下でさらに詳細に説明する。ステップ７６４に続いて、または、新たなローカル／遠隔対が追加される予定でない場合のステップ７６２に続いて、ステップ７６６では、マルチボックスオペレーションが再開される。ステップ７６６に続いて、処理は完了する。
【０１２８】
図１７を参照して、フローチャート７８０は、ホストがマルチボックスモードのグループとして実行されている複数のローカル／遠隔対のサイクル切り換えを管理することに関連して実行されるステップを示している。本明細書の他の箇所で説明するように、マルチボックスモードは、ホストに２つ以上の遠隔／ローカル対のサイクル切り換えを同期させて遠隔記憶装置間のデータ一貫性を維持することを含む。サイクル切り換えは、ローカル記憶装置によって内部で生成されるのはなく、ホストによって調整される。これについては、以下でさらに詳細に説明する。
【０１２９】
フローチャート７８０の処理はテストステップ７８２で開始する。テストステップ７８２は、Ｍ秒が経過したかどうかを判断する。非マルチボックスオペレーションと同様に、サイクルの切り換えは、Ｍ秒ごとに直ちに行われる。ここで、Ｍは、さまざまな性能パラメータを最適にするように選ばれた数である。数Ｍが増加すると、切り換えに関連したオーバーヘッド量が減少する。一方、Ｍが増加すると、故障に関連して失われる可能性のあるデータ量も増加する。本明細書の一実施の形態では、Ｍは、３０秒となるように選ばれる。ただし、Ｍについて他の値を使用できることも明らかである。
【０１３０】
テストステップ７８２において、Ｍ秒が経過していないと判断されると、制御はステップ７８２に戻って、Ｍ秒が経過するまで待ち続ける。テストステップ７８２において、Ｍ秒が経過したと判断されると、制御はステップ７８２からステップ７８４へ移る。ステップ７８４において、ホストは、ローカル／遠隔対のすべてが切り換わる準備ができているかどうかを判断するために、マルチボックスグループのローカル記憶装置のすべてに問い合わせを行う。ローカル／遠隔対が切り換わる準備ができていることについては、以下でさらに詳細に説明する。
【０１３１】
ステップ７８４に続いて、テストステップ７８６は、ローカル／遠隔対のすべてが切り換わる準備ができているかどうかを判断する。できていないと判断されると、制御はステップ７８４に戻り、問い合わせを再開する。本明細書の一実施の形態では、その後の問い合わせは、前の問い合わせの際に切り換わる準備ができていなかったローカル／遠隔対にのみ行う必要があり、或るローカル／遠隔対が一旦切り換わる準備ができると、その対は、切り換えが行われるまでその状態を維持する。
【０１３２】
テストステップ７８６において、マルチボックスグループのローカル／遠隔対のすべてが切り換わる準備ができていると判断されると、制御はステップ７８６からステップ７８８へ移る。ステップ７８８では、インデックス変数Ｎが１に等しく設定される。このインデックス変数Ｎは、すべてのローカル／遠隔対（すなわち、図１５のテーブル７３０のエントリ７３２〜７３４のすべて）にわたって繰り返すのに使用される。ステップ７８８に続いて、テストステップ７９２は、インデックス変数Ｎがマルチボックスグループのローカル／遠隔対の個数よりも大きいかどうかを判断する。大きくない場合には、制御はステップ７９２からステップ７９４へ移る。ステップ７９４では、ホストがコマンド（例えば、適切なシステムコマンド）をＮ番目のローカル記憶装置へ送信することによって、Ｎ番目の対のＮ番目のローカル記憶装置について、ウィンドウオープンが実行される。ステップ７９４においてＮ番目のローカル記憶装置のウィンドウをオープンすることにより、ウィンドウがクローズされるまで、ステップ７９４のウィンドウのオープン前に開始されていないホストによるあらゆる書き込みが完了しないように、Ｎ番目のローカル記憶装置は書き込みを一時中断する（以下で説明）。書き込みオペレーションを完了しないことによって、第２の依存した書き込みが、サイクルの切り換えの完了前に行われることが防止される。ウィンドウをオープンする前に開始された進行中のどの書き込みも、ウィンドウがクローズされる前に完了することができる。
【０１３３】
ステップ７９４に続いてステップ７９６では、Ｎ番目のローカル記憶装置について、サイクルの切り換えが実行される。ステップ７９６でサイクルの切り換えを実行するには、ホスト７０２からＮ番目のローカル記憶装置へコマンドを送信する必要がある。Ｎ番目のローカル記憶装置によるホストからのコマンドの処理については、以下でさらに詳細に説明する。ステップ７９６で実行される処理の一部は、データに割り当てられるタグの新たな値をホストに提供させることを含むことができる。タグについては、本明細書の他の箇所でさらに詳細に説明する。代替的な一実施の形態では、ステップ７９４、７９６で実行されるオペレーションを単一の統合ステップ７９７として実行することもできる。このステップ７９７は、ステップ７９４、７９６の周囲に描いたボックスによって示されている
。
【０１３４】
ステップ７９６に続いてステップ７９８では、インデックス変数Ｎがインクリメントされる。ステップ７９８に続いて、制御はテストステップ７９２に戻り、インデックス変数Ｎがローカル／遠隔対の個数よりも大きいかどうかが判断される。
【０１３５】
テストステップ７９２において、インデックス変数Ｎがローカル／遠隔対の個数よりも大きいと判断されると、制御はテストステップ７９２からステップ８０２へ移る。ステップ８０２では、インデックス変数Ｎが１に等しく設定される。ステップ８０２に続いて、テストステップ８０４は、インデックス変数Ｎがローカル／遠隔対の個数よりも大きいかどうかを判断する。大きくない場合には、制御はステップ８０４からステップ８０６へ移る。ステップ８０６では、Ｎ番目のローカル記憶装置のウィンドウがクローズされる。ステップ８０６のウィンドウのクローズは、ホストが、Ｎ番目のローカル記憶装置に書き込みオペレーションを再開させるコマンドを当該Ｎ番目のローカル記憶装置へ送信することによって行われる。したがって、ステップ７９４のウィンドウのオープンによって一時中断された処理中のあらゆる書き込みを、今度は、ステップ８０６の実行後に完了することができる。ステップ８０６に続いて、制御はステップ８０８へ移る。ステップ８０８では、インデックス変数Ｎがインクリメントされる。ステップ８０８に続いて、制御はテストステップ８０４へ戻り、インデックス変数Ｎがローカル／遠隔対の個数よりも大きいかどうかが判断される。大きい場合には、制御はテストステップ８０４からステップ７８２へ戻り、次のサイクル切り換え処理が開始される。
【０１３６】
図１８を参照して、フローチャート８３０は、サイクル切り換えに関連してローカル記憶装置により実行されるステップを示している。図１８のフローチャート８３０は、ローカル記憶装置がマルチボックスモードおよび非マルチボックスモードの双方をサポートする場合において、図１０のフローチャート３５０を取り替えたものである。すなわち、フローチャート８３０は、非マルチボックスモードをサポートする図１０のフローチャート３５０のステップと同様に実行されるステップを示すことに加えて、マルチボックスモードをサポートするステップをも含む。
【０１３７】
処理は最初のテストステップ８３２で開始する。テストステップ８３２では、ローカル記憶装置がマルチボックスモードで動作しているかどうかを判断する。図１６のフローチャート７５０は、ホストがローカル記憶装置へメッセージを送信するステップ７５８を示していることに留意されたい。ステップ７５８で送信されたメッセージは、ローカル記憶装置がマルチボックスモードで動作しているかどうかを当該ローカル記憶装置へ示す。ステップ７５８でホストによって送信されたメッセージを受信すると、ローカル記憶装置は、ローカル記憶装置がマルチボックスモードで動作しているかどうかを示すように内部変数を設定する。この内部変数は、テストステップ８３２で調べることができる。
【０１３８】
テストステップ８３２において、ローカル記憶装置がマルチボックスモードにないと判断されると、制御はテストステップ８３２からステップ８３４へ移り、サイクル切り換えのためＭ秒間待機する。ローカル記憶装置がマルチボックスモードで動作していない場合には、当該ローカル記憶装置は、ローカル記憶装置のサイクル切り換えを制御し、したがって、ステップ８３４を実行して、次のサイクル切り換えを開始する前にＭ秒間待機する。
【０１３９】
ステップ８３４に続いて、または、ローカル記憶装置がマルチボックスモードにある場合のステップ８３２に続いて、テストステップ８３６では、ローカル記憶装置のＨＡのすべてが、当該ＨＡが前のシーケンス番号のＩ／Ｏのすべてを完了したことを示すビットを設定したかどうかを判断する。シーケンス番号が変化すると、ＨＡのそれぞれは、その変
化を通知し、前のシーケンス番号のすべてのＩ／Ｏが完了したことを示すビットを設定する。例えば、シーケンス番号がＮ−１からＮへ変化すると、ＨＡは、ＨＡがシーケンス番号Ｎ−１のすべてのＩ／Ｏを完了した時にビットを設定する。場合によって、ＨＡの単一のＩ／Ｏが長い時間を要することがあり、シーケンス番号が変化した後であっても依然として実行中の場合があることに留意されたい。また、いくつかのシステムでは、異なるメカニズムを使用して、すべてのＨＡがＨＡのＮ−１のＩ／Ｏを完了したかどうかを判断することができることにも留意されたい。この異なるメカニズムには、デバイステーブルを調べることが含まれ得る。テストステップ８３６において、すべてのＨＡが適切なビットを設定したと判断されると、制御はテストステップ８３６からステップ８８８へ移る。ステップ８８８は、ローカル記憶装置の非アクティブのデータ・セットが空であるかどうかを判断する。テストステップ８８８において、非アクティブのデータ・セットが空であると判断されると、制御はステップ８８８からステップ８９９へ移る。ステップ８９９では、ローカル記憶装置から遠隔記憶装置へのデータのコピーが一時中断される。シーケンス番号の切り換えが完了するまでデータのコピーを一時中断することは有益である。
【０１４０】
ステップ８９９に続いて、テストステップ８９２では、ローカル記憶装置がマルチボックスモードにあるかどうかを判断する。テストステップ８９２において、ローカル記憶装置がマルチボックスモードにあると判断されると、制御はテストステップ８９２からテストステップ８９４へ移る。テストステップ８９４では、対応する遠隔記憶装置のアクティブなデータ・セットが空であるかどうかを判断する。以下でさらに詳細に説明するように、遠隔記憶装置は、遠隔記憶装置のアクティブなデータ・セットを空にすると、ローカル記憶装置へメッセージを送信する。このメッセージに応答して、ローカル記憶装置は、テストステップ８９４で調べられる内部変数を設定する。
【０１４１】
テストステップ８９４において、遠隔記憶装置のアクティブなデータ・セットが空であると判断されると、制御はテストステップ８９４からステップ８９６へ移る。ステップ８９６では、ローカル記憶装置において、当該ローカル記憶装置がサイクルを切り換える準備ができていることを示す内部変数が設定される。図１７のフローチャート７８０に関連して上述したように、ホストは、ローカル記憶装置のそれぞれが切り換わる準備ができているかどうかを判断するために、ローカル記憶装置のそれぞれに問い合わせを行う。ホストが提供したこの問い合わせに応答して、ローカル記憶装置は、ステップ８９６で設定された内部変数を調べ、その結果をホストへ返す。
【０１４２】
ステップ８９６に続いて、テストステップ８９８では、ローカル記憶装置が、サイクル切り換えを実行するコマンドを待ち、それをホストから受信する。図１７のフローチャート７８０に関連して上述したように、ローカル記憶装置がマルチボックスモードで動作している場合に、ホストは、サイクルを切り換えるコマンドをローカル記憶装置へ提供する。したがって、ローカル記憶装置は、ステップ８９８でコマンドを待つ。ローカル記憶装置がマルチボックスモードで動作している場合にのみステップ８９８に到達する。
【０１４３】
ローカル記憶装置がホストから切り換えコマンドを受信すると、制御はステップ８９８からステップ９０２へ移り、コミットメッセージが遠隔記憶装置へ送信される。テストステップ８９２において、ローカル記憶装置がマルチボックスモードにないと判断されると、テストステップ８９２からもステップ９０２に到達することに留意されたい。ステップ９０２では、ローカル記憶装置が、コミットメッセージを遠隔記憶装置へ送信する。遠隔記憶装置は、特定のシーケンス番号のコミットメッセージの受信に応答して、上述したように、そのシーケンス番号に対応するデータのリストアを開始する。
【０１４４】
ステップ９０２に続いてステップ９０６では、シーケンス番号がインクリメントされ、（ホストからの）タグの新たな値が記憶される。シーケンス番号は上述した通りである。
タグは、上述したように、ステップ７６４およびステップ７９６においてローカル記憶装置へ提供されたタグである。タグは、本明細書の他の箇所で説明するように、データ復旧を円滑にするのに使用される。
【０１４５】
ステップ９０６に続いてステップ９０７では、サイクル切り換えの完了が、ローカル記憶装置からホストへメッセージを送信することによって、ローカル記憶装置からホストへ確認される。いくつかの実施の形態では、ローカル記憶装置がマルチボックスモードにない場合に、ホストは必ずしもサイクル切り換えが行われる時に関心を持つとは限らないので、ローカル記憶装置がマルチボックスモードにあるかどうかを、ステップ９０７を実行することの条件とすることができる。
【０１４６】
ステップ９０７に続いてステップ９０８では、テストステップ８３６で使用されるＨＡのビットをシーケンス番号のインクリメントに関連して再び設定できるように、当該ビットがすべてクリアされる。ステップ９０８に続いて、テストステップ９１２では、遠隔記憶装置がコミットメッセージに肯定応答したかどうかを判断する。ローカル／遠隔対がマルチボックスモードで動作しており、かつ、遠隔記憶装置のアクティブなデータ・セットがステップ８９４で空であると判断された場合に、そのアクティブなデータ・セットがすでに空であるので、遠隔記憶装置は、サイクル切り換えの準備を直ちに行ってから、そのほぼ直後に、コミットメッセージに肯定応答すべきであることに留意されたい。
【０１４７】
テストステップ９１２において、コミットメッセージが遠隔記憶装置によって肯定応答されたと判断されると、制御はステップ９１２からステップ９１４へ移る。ステップ９１４では、ローカル記憶装置から遠隔記憶装置へのコピーが再開できるように、ステップ８９９で提供されたコピーの一時中断がクリアされる。ステップ９１４に続いて、処理は完了する。
【０１４８】
図１９を参照して、フローチャート９４０は、ＲＡが非アクティブなバッファをスキャンして、ローカル記憶装置から遠隔記憶装置へＲＤＦデータを送信することに関連して実行されるステップを示している。図１９のフローチャート９４０は、図６のフローチャート２００と類似しており、類似したステップには、同じ参照番号が与えられている。一方、フローチャート９４０は、追加された２つのステップ９４２、９４４を含む。これらのステップ９４２、９４４は、図６のフローチャート２００には見られない。追加されたステップ９４２、９４４は、マルチボックス処理を円滑にするのに使用される。データがステップ２１２で送信された後、制御はステップ２１２からテストステップ９４２へ移る。テストステップ９４２は、送信されているデータが、ローカル記憶装置の非アクティブのデータ・セットにおける最後のデータであるかどうかを判断する。最後のデータでない場合、制御はステップ９４２からステップ２１４へ移り、処理は、図６のフローチャート２００に関連して上述したように続く。そうではなく、テストステップ９４２において、送信されているデータがデータ・セットの最後のデータであると判断されると、制御はステップ９４２からステップ９４４へ移り、最後のデータが送信されたことを示す特別なメッセージがローカル記憶装置から遠隔記憶装置へ送信される。ステップ９４４に続いて、制御はステップ２１４へ移り、処理は、図６のフローチャート２００に関連して上述したように続く。いくつかの実施の形態では、ステップ９４２、９４４は、データを転送するプロセスおよび／またはハードウェアデバイスとは異なる別個のプロセス（および／または別個のハードウェアデバイス）によって実行することができる。
【０１４９】
図２０を参照して、フローチャート９５０は、ＲＡが非アクティブなバッファをスキャンして、ローカル記憶装置から遠隔記憶装置へＲＤＦデータを送信することに関連して実行されるステップを示している。図２０のフローチャート９５０は、図１３のフローチャート５００と類似しており、類似したステップには、同じ参照番号が与えられている。一
方、フローチャート９５０は、追加されたステップ９５２を含む。このステップ９５２は、図１３のフローチャート５００には見られない。追加されたステップ９５２は、マルチボックス処理を円滑にするのに使用され、図１９のフローチャート９４０の追加されたステップ９４４と同様である。テストステップ５２４において、ローカル記憶装置から遠隔記憶装置へ送信されるスロットがそれ以上残っていないと判断された後、制御は、ステップ５２４からステップ９５２へ移り、データ・セットの最後のデータが送信されたことを示す特別なメッセージがローカル記憶装置から遠隔記憶装置へ送信される。ステップ９５２に続いて、処理は完了する。
【０１５０】
図２１を参照して、フローチャート９６０は、遠隔記憶装置のアクティブなデータ・セットが空であることの表示を提供することに関連して、遠隔記憶装置で実行されるステップを示している。フローチャート９６０は、新たなステップ９６２を示すことを除いて、図９のフローチャート３００と同様である。この新たなステップ９６２は、遠隔記憶装置のアクティブなデータ・セットがリストアされた後に実行される。ステップ９６２では、遠隔記憶装置が、遠隔記憶装置のアクティブなデータ・セットが空であることを示すメッセージをローカル記憶装置へ送信する。ローカル記憶装置は、ステップ９６２で送信されたメッセージを受信すると、遠隔記憶装置の非アクティブなバッファが空であることを示す内部変数を設定する。このローカル変数は、上述した図１８のフローチャート８３０のテストステップ８９４に関連して調べられる。
【０１５１】
図２２を参照して、略図９８０は、ホスト７０２、ローカル記憶装置７０３〜７０５、および遠隔記憶装置７０６〜７０８を示している。これらは、図１４の略図７００に示したものである。また、略図９８０は、ホスト７０２およびローカル記憶装置７０３〜７０５に接続された第１の代替ホスト９８２も含む。また、略図９８０は、遠隔記憶装置７０６〜７０８に接続された第２の代替ホスト９８４も含む。これらの代替ホスト９８２、９８４は、以下でさらに詳細に説明するように、データ復旧に使用することができる。
【０１５２】
遠隔側でのデータの復旧が必要な場合に、その復旧は、ローカル記憶装置７０３〜７０５と遠隔記憶装置７０６〜７０８との間のリンクが依然として動作しているという条件では、ホスト７０２またはホスト９８２によって行うことができる。これらのリンクが動作していない場合、データ復旧は、遠隔記憶装置７０６〜７０８に接続された第２の代替ホスト９８４によって実行することができる。第２の代替ホスト９８４は、遠隔記憶装置７０６〜７０８の１つ以上と同じロケーションに設けることができる。あるいは、第２の代替ホスト９８４は、遠隔記憶装置７０６〜７０８のすべてから遠隔にすることもできる。システム全体にわたって伝達されるテーブル７３０は、データ復旧に関連してアクセスされ、マルチボックスグループのメンバが決定される。
【０１５３】
図２３を参照して、フローチャート１０００は、データ復旧オペレーションに関連して、遠隔記憶装置７０６〜７０８のそれぞれにより実行されるステップを示している。フローチャート１０００のステップは、データ復旧が必要であることを示す信号またはメッセージの受信時に、遠隔記憶装置７０６〜７０８のそれぞれによって実行することができる。いくつかの実施の形態では、遠隔記憶装置は、例えば、最後の書き込みからの時間の長さ等の従来通りの判定基準を使用して、データ復旧が必要であることを自動的に検知することが可能な場合がある。
【０１５４】
処理は最初のステップ１００２で開始する。ステップ１００２では、遠隔記憶装置は、本明細書の他の箇所で説明する方法で、アクティブなデータ・セットをリストアすることを終了する。ステップ１００２に続いて、テストステップ１００４では、遠隔記憶装置の非アクティブのデータ・セットが完全である（すなわち、データのすべてがそこに書き込まれている）かどうかを判断する。遠隔記憶装置は、上述したステップ９４４、９５２で
ローカル記憶装置によって送信されたメッセージを使用して、非アクティブのデータ・セットが完全であるかどうかを判断できることに留意されたい。すなわち、ローカル記憶装置は、ステップ９４４またはステップ９５２でメッセージを送信した場合、そのメッセージの受信を使用して、非アクティブのデータ・セットが完全であることを確認することができる。
【０１５５】
テストステップ１００４において、遠隔記憶装置の非アクティブのデータ・セットが完全でないと判断されると、制御はテストステップ１００４からステップ１００６へ移る。ステップ１００６では、非アクティブのデータ・セットからのデータが廃棄される。不完全な非アクティブのデータ・セットのデータは、対応するアクティブなデータ・セットと矛盾する場合があるので、不完全な非アクティブのデータ・セットを使用してデータ復旧は実行されない。したがって、データ復旧は、アクティブなデータ・セットを使用して実行され、場合により、完全である非アクティブのデータ・セットを使用して実行される。ステップ１００６に続いて、処理は完了する。
【０１５６】
テストステップ１００４において、非アクティブのデータ・セットが完全であると判断されると、制御はステップ１００４からステップ１００８へ移る。ステップ１００８では、遠隔記憶装置がホストによる介入を待つ。非アクティブのデータ・セットにおいて、ホスト７０２、９８２、９８４の１つは、適宜、マルチボックスグループの遠隔記憶装置のすべての状態を調べて、復旧を実行する方法を決定する必要がある。これについては、以下でさらに詳細に説明する。
【０１５７】
ステップ１００８に続いてテストステップ１０１２では、ホストが、非アクティブのデータ・セットを廃棄するコマンドをすべての記憶装置へ提供したかどうかが判断される。提供した場合、制御はステップ１０１２からステップ１００６へ移り、非アクティブのデータ・セットが廃棄される。ステップ１００６に続いて、処理は完了する。
【０１５８】
テストステップ１００２において、ホストが完全な非アクティブのデータ・セットをリストアするコマンドを提供したと判断されると、制御はステップ１０１２からステップ１０１４へ移る。ステップ１０１４では、非アクティブのデータ・セットが遠隔記憶装置へリストアされる。非アクティブのデータ・セットを遠隔記憶装置にリストアすることには、本明細書の他の箇所で説明するように、非アクティブのデータ・セットをアクティブなデータ・セットにし、次いで、そのアクティブなデータ・セットをディスクへ書き込むことが必要とされる。ステップ１０１４に続いて、処理は完了する。
【０１５９】
図２４を参照して、フローチャート１０３０は、ホスト７０２、９８２、９８４の１つが、遠隔記憶装置のそれぞれの非アクティブのデータ・セットのそれぞれを廃棄するのか、それともリストアするのかを判断することに関連して実行されるステップを示している。リストアを実行しているホスト７０２、９８２、９８４の１つは、本明細書の他の箇所で説明したように、ホストに割り当てられたタグを使用して、遠隔記憶装置７０６〜７０８と通信し、それら遠隔記憶装置へコマンドを提供し、それら遠隔記憶装置から情報を受信する。
【０１６０】
処理は最初のステップ１０３２で開始する。ステップ１０３２では、遠隔記憶装置のいずれかが完全な非アクティブのデータ・セットを有するかどうかが判断される。有しない場合、それ以上、処理は実行されず、上述したように、遠隔記憶装置は、ホストの介入なしに、遠隔記憶装置の不完全なデータ・セットを廃棄する。有する場合、制御はテストステップ１０３２からテストステップ１０３４へ移る。テストステップ１０３４では、ホストが、遠隔記憶装置のすべてが完全な非アクティブのデータ・セットを有するかどうかを判断する。有する場合、制御はテストステップ１０３４からテストステップ１０３６へ移
る。テストステップ１０３６では、遠隔記憶装置のすべての完全な非アクティブのデータ・セットのすべてが同じタグ番号を有するかどうかが判断される。本明細書の他の箇所で説明するように、タグは、ホストによって制御されて同じサイクルの間同じ値を有することを除いて、シーケンス番号と類似の方法で、ホストによって割り当てられ、システムによって使用されてデータが特定される。
【０１６１】
テストステップ１０３６において、遠隔記憶装置のすべてが、非アクティブのデータ・セットについて同じタグを有すると判断されると、制御はステップ１０３６からステップ１０３８へ移る。ステップ１０３８では、非アクティブのデータ・セットのすべてがリストアされる。ステップ１０３８を実行することによって、遠隔記憶装置のすべてが同じサイクルからのデータを有することが保証される。ステップ１０３８に続いて、処理は完了する。
【０１６２】
テストステップ１０３４において、非アクティブのデータ・セットのすべてが完全でないと判断されるか、または、ステップ１０３６において、完全な非アクティブのデータ・セットのすべてが同じタグを有しないと判断されると、制御はステップ１０４２に移る。ステップ１０４２において、ホストは、小さい方のタグ番号を有する完全な非アクティブのデータ・セットをリストアするコマンドを遠隔記憶装置へ提供する。説明の目的で、タグ番号がインクリメントされ、その結果、タグ番号が小さいほど、古いデータを表すものと仮定する。例として、第１の遠隔記憶装置が、タグ値３を備えた完全な非アクティブのデータ・セットを有し、第２の遠隔記憶装置が、タグ値４を備えた完全な非アクティブのデータ・セットを有する場合、ステップ１０４２によって、第１の遠隔記憶装置（第２ではない）は、第１の遠隔記憶装置の非アクティブのデータ・セットをリストアする。ステップ１０４２に続いて、ステップ１０４４では、ホストは、大きい方のタグ番号（例えば、上記例の第２の遠隔記憶装置）を有する完全な非アクティブなバッファを廃棄するコマンドを遠隔記憶装置へ提供する。ステップ１０４４に続いて、処理は完了する。
【０１６３】
ステップ１０４４の実行に続いて、遠隔記憶装置のそれぞれは、当該遠隔記憶装置の他のもののデータと同じタグ値に関連付けられたデータを含む。したがって、遠隔記憶装置７０６〜７０８における復旧されたデータは一貫性を有するはずである。
【０１６４】
図２５を参照して、略図１１２０は、記憶装置１１２４が、メモリ１１２６に接続された複数のディレクタ１１５２ａ〜１１５２ｃを含む一実施の形態を示している。記憶装置１１２４は、記憶装置２４および／または記憶装置２６と同様のものである。メモリ１１２６は、記憶装置２４、２６のメモリ３７および／またはメモリ３８と同様のものである。ディレクタ１１５２ａ〜１１５２ｃのそれぞれは、ＨＡ、ＤＡ、および／またはＲＡを表す。ＨＡは、記憶装置のＨＡ２８と同様のものであり、ＤＡは、記憶装置のＤＡ３５ａ〜３５ｃ、３６ａ〜３６ｃと同様のものであり、かつ／またはＲＡは、記憶装置のＲＡ３０ａ〜３０ｃ、３２ａ〜３２ｃと同様のものである。本明細書に開示する一実施の形態では、最大１６個までのディレクタをメモリ１１２６に接続することができる。もちろん、他の実施の形態の場合、より大きな最大数またはより小さな最大数のディレクタを使用することができる。
【０１６５】
また、略図１１２０は、オプションの通信モジュール（ＣＭ）１１５４も示している。このＣＭ１１５４は、ディレクタ１１５２ａ〜１１５２ｃ間の代替的な通信パスを提供する。ディレクタ１１５２ａ〜１１５２ｃのそれぞれは、ＣＭ１１５４に接続することができ、その結果、ディレクタ１１５２ａ〜１１５２ｃのどの１つも、メモリ１１２６を通過する必要なく、ディレクタ１１５２ａ〜１１５２ｃの他のどの１つにもメッセージおよび／またはデータを送信することができる。ディレクタ１１５２ａ〜１１５２ｃのうちの送信ディレクタが適切なアドレスを提供し、それによって、ディレクタ１１５２ａ〜１１５
２ｃのうちの目的の受信ディレクタにメッセージおよび／またはデータを受信させる従来のＭＵＸ／ルータ技術を使用して、ＣＭ１１５４を実施することができる。これに加えて、ディレクタ１１５２ａ〜１１５２ｃのうちの送信ディレクタは、同時に、他のディレクタ１１５２ａ〜１１５２ｃのすべてへメッセージをブロードキャストできる場合がある。
【０１６６】
図２６を参照して、略図１２００は、送信元グループ１２０２、ローカル宛先１２０４、および遠隔宛先１２０６を含むシステムを示している。送信元グループ１２０２は、ローカル宛先１２０４および遠隔宛先１２０６の双方と通信する。送信元グループ１２０２は、単一の記憶装置、複数の記憶装置、単一のホストを有する単一もしくは複数の記憶装置、または、複数のホストを有する単一もしくは複数の記憶装置を表すことができる。データが、送信元グループ１２０２で生成され、送信元グループ１２０２で記憶され、そして、ローカル宛先１２０４および遠隔宛先１２０６へ送信される。いくつかの実施の形態では、ローカルグループは、図１４に関連して上述した実施の形態に関連して上述したようないくつかの方法で動作することができる。
【０１６７】
本明細書の一実施の形態では、ローカル宛先１２０４は、送信元グループ１２０２に比較的近接した単一または複数の記憶装置を表し、それによって、送信元グループ１２０２からローカル宛先１２０４へ同期データミラーリングすることが可能になる。本明細書の一実施の形態では、ローカル宛先１２０４は、送信元グループ１２０２と同じ建物、同じ施設、および／または同じ企業ロケーションに位置する。したがって、例えば、ローカル宛先１２０４は、送信元グループ１２０２を管理する同じ一群の個人によって管理されるバックアップ記憶装置（単数または複数）を表すことができる。
【０１６８】
遠隔宛先１２０６は、送信元グループ１２０２から地理的に遠いロケーションの１つの記憶装置および／または複数の記憶装置を表す。例えば、遠隔宛先１２０６は、米国の西海岸の１つの記憶装置または１群の記憶装置を表すことがある一方、送信元グループ１２０２は、米国の東海岸に位置する。送信元グループ１２０２と遠隔宛先１２０６との間の地理的距離が比較的大きいため、同期データ転送モードまたは準同期データ転送モードを使用して、遠隔宛先１２０６におけるデータを送信元グループ１２０２からミラーリングすることは実際的でない場合がある。すなわち、送信元グループ１２０２から遠隔宛先１２０６へ、および、戻りの送信元グループ１２０２へのラウンドトリップ時間が長いため、ローカルグループ１２０２のホストへの書き込みに肯定応答する前に、遠隔宛先１２０６においてデータの肯定応答を提供する同期データミラーリングまたは準同期データミラーリングを使用することが実現できない場合がある。このような場合、送信元グループ１２０２と遠隔宛先１２０６との間で順序書き込みを使用できる場合があり、その結果、遠隔宛先１２０６は、幾分時間は遅延するが、送信元グループ１２０２の一貫性のあるミラーとなる。
【０１６９】
ローカル宛先１２０４と遠隔宛先１２０６との間にも、通信パス１２０８が存在することがある。送信元グループ１２０２が動作している間、通信パス１２０８を使用することはできない。一方、本明細書の他の箇所でさらに詳細に説明するように、送信元グループ１２０２が動作しなくなった場合、ならびに／または、送信元グループ１２０２と、ローカル宛先１２０４および遠隔宛先１２０６の一方または双方との間の通信リンクが動作しなくなった場合、通信パス１２０８を使用して、ローカル宛先１２０４と遠隔宛先１２０６との間でデータを同期させることができる。これに加えて、本明細書の他の箇所でさらに詳細に説明するように、ローカル宛先１２０４または遠隔宛先１２０６の一方へホストを提供して、同期後にシステムのオペレーションを再開することもできる。ホストがローカル宛先１２０４に接続された状態で、オペレーションが再開されると、遠隔宛先１２０６がローカル宛先１２０４のミラーとなるように通信リンク１２０８を使用することができることに留意されたい。逆に、ホストを遠隔宛先１２０６に提供することによって、オ
ペレーションが再開されると、ローカル宛先１２０４が遠隔宛先１２０６のミラーとなるように通信リンク１２０８を使用することができる。
【０１７０】
図２７を参照して、フローチャート１２３０は、ローカル宛先１２０４におけるパラメータを初期化して、本明細書で説明する復旧メカニズムを提供することに関連して実行されるステップを示している。本明細書で説明する復旧メカニズムは、シンメトリックスディファレンシャルデータファシリティ（ＳＤＤＦ（Symmetrix Differential Data Facility））を使用する。このＳＤＤＦは複数のセッションを考慮する。各セッションは各セッションに関連付けられたビットマップを有し、このビットマップは、特定の期間中、対応するデータロケーションへ書き込みが行われるたびに１に設定されるビットを有する。特定のロケーションに対する書き込みが行われない場合、対応するビットはクリアされた状態を維持する（すなわち、０を維持する）。本明細書の一実施の形態では、各ビットはデータのトラックに対応することができる。しかしながら、他の実施の形態の場合、各ビットをデータのより大きなインクリメントまたはより小さなインクリメントに対応させることが可能であり、また、異なるビットおよび／または異なる数組のビットが、異なる量のデータに対応することも可能である。
【０１７１】
ＳＤＤＦセッションに関連したオペレーションは、ＳＤＤＦセッションを作成すること、ＳＤＤＦセッションをアクティブにすること、ＳＤＤＦセッションのビットマップのビットをクリアすること、ＳＤＤＦセッションを非アクティブにすること、およびＳＤＤＦセッションを終了することを含む。ＳＤＤＦセッションを作成すること、ＳＤＤＦセッションのビットをクリアすること、およびＳＤＤＦセッションを終了することは、全く説明を要しない。ＳＤＤＦセッションをアクティブにすることによって、ＳＤＤＦセッションのビットマップのビットは、対応するトラック（または、他の適切なデータインクリメント）が書き込まれるたびに設定される。ＳＤＤＦセッションを非アクティブにすることによって、ビットの設定が一時中断される。本明細書で説明するＳＤＤＦメカニズムは、米国特許第６，３６６，９８６号に提供された説明を使用して実施することができる。この米国特許は、参照により本明細書に援用される。
【０１７２】
フローチャート１２３０の処理は最初のステップ１２３２で開始する。ステップ１２３２では、第１のＳＤＤＦセッションＳＤＤＦ＿１が作成される。本明細書で説明する一実施の形態では、ＳＤＤＦセッションの作成により、そのセッションは自動的にアクティブにはならない。ステップ１２３２に続いてステップ１２３４では、ステップ１２３２で作成されたＳＤＤＦセッションのビットマップのビットがクリアされる。ステップ１２３４に続いてステップ１２３６では、第２のＳＤＤＦセッションＳＤＤＦ＿２が作成される。ステップ１２３６に続いてステップ１２３８では、ステップ１２３６で作成されたＳＤＤＦセッションのビットマップのビットがクリアされる。
【０１７３】
ステップ１２３８に続いてステップ１２４２では、状態が初期化される。ステップ１２４２で初期化された状態は、ＳＤＤＦセッションＳＤＤＦ＿１またはＳＤＤＦ＿２のいずれをアクティブにするかを決定するのに使用することができる。本明細書の他の箇所でさらに詳細に説明するように、２つの可能な状態があり得、ステップ１２４２で設定される状態はトグルさせることができ、それによって、ＳＤＤＦ＿１セッションおよびＳＤＤＦ＿２セッションを交互にアクティブにすることができる。他の実施の形態では、トークンまたは他の或るタイプの変数を使用して、ＳＤＤＦ＿１またはＳＤＤＦ＿２のいずれを選択するかを示すことができる。ステップ１２４２に続いてステップ１２４４では、ＳＤＤＦ＿１がアクティブにされる。ステップ１２４４でＳＤＤＦ＿１をアクティブにすることによって、ローカル宛先１２０４のトラック（または他のデータインクリメント）が変更されるたびに、ＳＤＤＦ＿１セッションのビットマップのビットが設定される。
【０１７４】
ＳＤＤＦ＿１セッションおよびＳＤＤＦ＿２セッションは、送信元グループ１２０２による遠隔宛先１２０６への順序書き込みに関連して、ローカル宛先１２０４が送信元グループ１２０２により使用されるアクティブなバッファおよび非アクティブなバッファの経過を追跡するのに使用される。本明細書の他の箇所でさらに詳細に説明するように、送信元グループ１２０２は、送信元グループ１２０２から遠隔宛先１２０６への順序書き込みに関連してサイクル切り換えを行うごとに、サイクル切り換えが実行されたことを示すメッセージをローカル宛先１２０４へ送信し、その結果、ローカル宛先１２０４は（上述したステップ１２４２で初期化された）状態をトグルさせることができる。ローカル宛先１２０４によるサイクル切り換え情報の使用については、本明細書の他の箇所でさらに詳細に説明する。
【０１７５】
図２８Ａを参照して、フローチャート１２５０は、通常（すなわち非故障）動作中の送信元グループ１２０２からのＩ／Ｏの受信に関連してローカル宛先１２０４により実行されるステップを示している。処理は最初のステップ１２５２で開始する。ステップ１２５２では、Ｉ／Ｏがローカル宛先１２０４によって受信される。ステップ１２５２に続いて、テストステップ１２５４では、ローカルグループ１２０２が、当該ローカルグループ１２０２と遠隔宛先１２０６との間の順序書き込みに関連して切り換わる準備ができていることを、送信元グループ１２０２から受信されたＩ／Ｏが示しているかどうかを判断する。ローカルグループ１２０２が切り換わる準備ができていることについては、本明細書の他の箇所でさらに詳細に説明する。
【０１７６】
ローカルグループ１２０２が切り換わる準備ができていることを、受信されたデータが示している場合、制御はステップ１２５４からステップ１２５６へ移る。ステップ１２５６では、ＳＤＤＦセッションのうち非アクティブのもの（ＳＤＤＦ＿１またはＳＤＤＦ＿２）がクリアであるかどうかが判断される。いくつかの実施の形態では、ステップ１２５６でＳＤＤＦセッションをクリアすることができる。他の場合には、ステップ１２５６でＳＤＤＦセッションをクリアするのに必要な時間量を許容することができず、この場合、３つ以上のＳＤＤＦセッションをＳＤＤＦ＿１およびＳＤＤＦ＿２に使用することができ、まさにアクティブにされようとしているＳＤＤＦセッションが非同期で常にクリアされるように回転させることができる。いずれにしても、ステップ１２５６で実行される処理は、ＳＤＤＦ＿１およびＳＤＤＦ＿２のうち非アクティブのものをクリアすることに関係し、その結果、ステップ１２５６の実行後、非アクティブなセッションはクリアになっている。
【０１７７】
ステップ１２５６に続いてステップ１２５８では、ＳＤＤＦセッションのうち非アクティブのものがアクティブにされ、その結果、ＳＤＤＦ＿１およびＳＤＤＦ＿２の双方が、ステップ１２５８の処理の実行後、アクティブにされる。したがって、その後の書き込みは、ＳＤＤＦ＿１およびＳＤＤＦ＿２の双方のビットマップに反映される。ステップ１２５８に続いて、処理は完了する。
【０１７８】
ステップ１２５４において、受信されたデータが信号の切り換えの準備に対応したものでないと判断されると、制御はステップ１２５４からテストステップ１２６２へ移る。ステップ１２６２では、受信されたデータが、サイクル切り換えが実行されることに対応したものであるかどうかが判断される。対応したものである場合、制御はステップ１２６２からステップ１２６４へ移る。ステップ１２６４では、図２７のフローチャート１２３０のステップ１２４２で初期化された状態がトグルされる。本明細書の他の箇所で説明するように、状態は、ＳＤＤＦ＿１およびＳＤＤＦ＿２のいずれをアクティブにし、いずれを非アクティブにするかを決定するのに使用される。ステップ１２６４に続いてステップ１２６６では、ＳＤＤＦセッションＳＤＤＦ＿１またはＳＤＤＦ＿２の一方が、ステップ１２６４で設定された状態の特定の値に応じて非アクティブにされる。ＳＤＤＦセッション
がステップ１２６６で非アクティブにされても、そのＳＤＤＦセッションは、信号の切り換えの次の準備が受信されるまでクリアされない。もちろん、上述したように、３つ以上のＳＤＤＦセッションが、ＳＤＤＦ＿１およびＳＤＤＦ＿２に使用される場合には、ステップ１２６６で非アクティブにされたＳＤＤＦセッションを維持できる一方、別のＳＤＤＦセッションは、上述したステップ１２５８において、アクティブにする準備のためクリアされる。
【０１７９】
ステップ１２６２において、受信されたデータがサイクル切り換えに対応しないものであると判断されると、制御はテストステップ１２６２からステップ１２６８へ移る。ステップ１２６８では、Ｉ／Ｏが実行される。例えば、Ｉ／Ｏが書き込みオペレーションである場合、ステップ１２６８では、データがローカル宛先１２０４のストレージ領域へ書き込まれる。ステップ１２６８に続いてステップ１２７２では、Ｉ／Ｏオペレーションが書き込みオペレーションであるかどうかが判断される。書き込みオペレーションでない（例えば、Ｉ／Ｏオペレーションが読み出しオペレーションである）場合、処理は完了する。書き込みオペレーションである場合、制御はステップ１２７２からステップ１２７４へ移る。ステップ１２７４では、ＳＤＤＦセッションのいずれがアクティブにされるかに応じて、ＳＤＤＦセッションＳＤＤＦ＿１、ＳＤＤＦ＿２の適切な一方または双方のビットが設定される。ステップ１２７４に続いて、処理は完了する。
【０１８０】
場合によっては、ＳＤＤＦビットマップを、同じＳＤＤＦビットマップを指し示す直前にクリアするのを待つことが望ましくない場合がある。そのような場合、３つ以上のＳＤＤＦビットマップを有することが有益な場合がある。この場合、ＳＤＤＦ＿１およびＳＤＤＦ＿２のような２つが同時に使用される一方、ＳＤＤＦビットマップの残りのものはすでにクリアであり、使用されるのを待っているか、または、バックグラウンドプロセスを使用してクリアされていることになる。例えば、３つのビットマップＳＤＤＦ＿Ａ、ＳＤＤＦ＿Ｂ、およびＳＤＤＦ＿Ｃを使用すると、ＳＤＤＦ＿１はＳＤＤＦ＿Ａに対応することができる一方、ＳＤＤＦ＿２はＳＤＤＦ＿Ｃに対応することができる。このような場合、ＳＤＤＦ＿ＡおよびＳＤＤＦ＿Ｃに対して処理が実行されている間、ＳＤＤＦ＿Ｂをクリアすることができる。サイクルが切り換わる時、ＳＤＤＦ＿Ｂ（すでにクリアである）を使用できる一方、ＳＤＤＦ＿Ｃは、サイクル切り換えが完了した後であっても実行できるバックグラウンドプロセスを使用してクリアされ、新たなデータがＳＤＤＦ＿Ｂにログ記録されている。
【０１８１】
図２８Ｂを参照して、フローチャート１２８０は、複数のＳＤＤＦビットマップＳＤＤＦ［０］、ＳＤＤＦ［１］、…ＳＤＤＦ［ＮＭＡＰＳ−１］を使用する代替的な一実施の形態を示している。ここで、ＮＭＡＰＳはＳＤＤＦマップの個数である。本明細書の一実施の形態では、ＮＭＡＰＳは２より大きい（例えば、３）。フローチャート１２８０のステップの多くは、図２８Ａのフローチャート１２５０のステップと同様である。
【０１８２】
処理は最初のステップ１２８２で開始する。ステップ１２８２では、Ｉ／Ｏがローカル宛先１２０４によって受信される。ステップ１２８２に続いて、テストステップ１２８３では、ローカルグループ１２０２が、当該ローカルグループ１２０２と遠隔宛先１２０６との間の順序書き込みに関連して切り換わる準備ができていることを、送信元グループ１２０２から受信されたＩ／Ｏが示しているかどうかを判断する。ローカルグループ１２０２が切り換わる準備ができていることについては、本明細書の他の箇所でさらに詳細に説明する。
【０１８３】
ローカルグループ１２０２が切り換わる準備ができていることを、受信されたデータが示している場合、制御はステップ１２８３からステップ１２８４へ移る。ステップ１２８４では、インデックスＫがインクリメントされ、その結果がモジュロＮＭＡＰＳに設定さ
れる。ステップ１２８４に続いてステップ１２８５では、ＳＤＤＦ［Ｋ］がクリアであることが確認される。ステップ１２８５に続いてステップ１２８６では、ＳＤＤＦ［Ｋ］がアクティブにされ、その結果、ステップ１２８６の処理の実行後、ＳＤＤＦ［Ｋ］およびＳＤＤＦ［Ｋ−１］の双方がアクティブにされる。したがって、その後の書き込みは、ＳＤＤＦ［Ｋ］およびＳＤＤＦ［Ｋ−１］の双方のビットマップに反映される。ステップ１２８６に続いて、処理は完了する。Ｋが０である場合、ＳＤＤＦ［Ｋ−１］は実際にはＳＤＤＦ［ＮＭＡＰＳ−１］を指すことに留意されたい。
【０１８４】
ステップ１２８３において、受信されたデータが信号の切り換えの準備に対応したものでないと判断されると、制御はステップ１２８３からテストステップ１２８７へ移る。ステップ１２８７では、受信されたデータがサイクル切り換えに対応したものであるかどうかが判断される。ステップ１２８７において、受信されたデータがサイクル切り換えに対応したものであると判断されると（図２８Ａのフローチャート１２５０に関連した上記説明を参照）、制御はステップ１２８７からステップ１２８８へ移る。ステップ１２８８では、状態（上述）がトグルされる。ステップ１２８８に続いてステップ１２８９では、変数Ｊが、モジュロＮＭＡＰＳ（Ｋ−２）に等しく設定される。Ｋは、最も近時にアクティブにされたＳＤＤＦビットマップの経過を追跡するのに使用されるインデックス変数であるので、ステップ１２８９でＪを設定することによって、Ｊは、３番目の最も近時にアクティブにされたＳＤＤＦビットマップを指し示す。ステップ１２８９に続いてステップ１２９２では、ＳＤＤＦ［Ｊ］ビットマップをクリアするプロセスが開始される。本明細書の他の箇所で説明するように、サイクル切り換えを完了して、新たなデータの蓄積を開始するために、ステップ１２９２で開始されたプロセスは完了する必要はない。
【０１８５】
ステップ１２９２に続いてステップ１２９４では、変数Ｊが、モジュロＮＭＡＰＳ（Ｋ−１）に等しく設定される。Ｋは最も近時にアクティブにされたＳＤＤＦビットマップの経過を追跡するのに使用されるインデックス変数であるので、ステップ１２９４でＪを設定することによって、Ｊは、２番目の最も近時にアクティブにされたＳＤＤＦビットマップを指し示す。ステップ１２９４に続いてステップ１２９６では、ＳＤＤＦ［Ｊ］が非アクティブにされる。しかしながら、ＳＤＤＦ［Ｊ］がステップ１２９６で非アクティブにされても、データは、次のサイクル切り換えまでリストアのために保持される。ステップ１２９６に続いて、処理は完了する。
【０１８６】
図２８Ｃを参照して、フローチャート１３００は、ローカル宛先１２０４が通常（すなわち非故障）動作中に送信元グループ１２０２からＩ／Ｏを受信することに関連した処理のさらに別の実施の形態を示している。処理は最初のステップ１３０２で開始する。ステップ１３０２では、Ｉ／Ｏがローカル宛先１２０４によって受信される。ステップ１３０２に続いて、テストステップ１３０４では、受信されたデータが、サイクル切り換えが実行されていることに対応するものであるかどうかが判断される。対応するものである場合、制御はステップ１３０４からテストステップ１３０６へ移る。ステップ１３０６では、状態が最後にトグルされてから、２つまたは３つ以上のサイクル切り換えが行われたかどうかが判断される。行われていない場合、処理は完了する。行われた場合、制御はステップ１３０６からステップ１３０７へ移る。ステップ１３０７では、現在非アクティブなＳＤＤＦセッションＳＤＤＦ＿Ｘがクリアであるかどうかが判断される。クリアである場合、制御はステップ１３０７からステップ１３０８へ移る。ステップ１３０８では、図２７のフローチャート１２３０のステップ１２４２で初期化された状態がトグルされる。本明細書の他の箇所で説明するように、状態を使用して、ＳＤＤＦ＿１およびＳＤＤＦ＿２のいずれがアクティブにされ、いずれが非アクティブにされるかが判断される。
【０１８７】
ステップ１３０８に続いてステップ１３０９では、ＳＤＤＦセッションＳＤＤＦ＿１またはＳＤＤＦ＿２の一方が、その状態によって示されるように、アクティブにされる。ス
テップ１３０９に続いてステップ１３１２では、ＳＤＤＦセッションの他方が非アクティブにされる。ステップ１３１２に続いて、処理は完了する。
【０１８８】
テストステップ１３０７において、ＳＤＤＦ＿Ｘがクリアでないと判断されると、制御はステップ１３０７からステップ１３１３へ移る。ステップ１３１３では、ＳＤＤＦ＿Ｘをクリアにすることがすでに（すなわち、前の繰り返しで）開始されたかどうかが判断される。すでに開始された場合には、処理は完了する。開始されていない場合には、制御はステップ１３１３からステップ１３１４へ移る。ステップ１３１４では、ＳＤＤＦ＿Ｘをクリアするプロセスが開始される。ステップ１３１４に続いて、処理は完了する。
【０１８９】
ステップ１３０４において、受信されたデータがサイクル切り換えに対応するものでないと判断されると、制御はテストステップ１３０４からステップ１３１６へ移る。ステップ１３１６では、Ｉ／Ｏが実行される。例えば、Ｉ／Ｏが書き込みオペレーションである場合、ステップ１３１６では、データがローカル宛先１２０４のストレージ領域へ書き込まれる。ステップ１３１６に続いてステップ１３１７では、Ｉ／Ｏオペレーションが書き込みオペレーションであるかどうかが判断される。書き込みオペレーションでない（例えば、Ｉ／Ｏオペレーションが読み出しオペレーションである）場合、処理は完了する。書き込みオペレーションである場合、制御はステップ１３１７からステップ１３１８へ移る。ステップ１３１８では、ＳＤＤＦセッションのいずれがアクティブにされるかに応じて、ＳＤＤＦセッションＳＤＤＦ＿１またはＳＤＤＦ＿２（ＳＤＤＦ＿ＸまたはＳＤＤＦ＿Ｙ）の適切な一方のビットが設定される。ステップ１３１８に続いて、処理は完了する。
【０１９０】
図２９を参照して、フローチャート１３２０は、遠隔宛先１２０６における復旧データの収集に関連して実行されるステップを示している。定常状態のオペレーション中、常に復旧データを収集しているローカル宛先１２０４と異なり、遠隔宛先１２０６は、復旧データを収集する信号を受信するまで、復旧データを収集することができない。本明細書の一実施の形態では、例えば、送信元グループ１２０２とローカル宛先１２０４との間のリンク（単数または複数）が機能していないことを送信元グループ１２０２が検出した時、および／または、ローカル宛先１２０４がデータの適切な受信も処理も行っていないことを送信元グループ１２０２が検出した時、送信元グループ１２０２は、遠隔宛先１２０６へこのような信号を提供することができる。他の実施の形態または他の状況では、遠隔宛先１２０６は、送信元グループ１２０２以外のロケーションまたは要素から適切な信号を受信することができる。
【０１９１】
処理は最初のステップ１３２２で開始する。ステップ１３２２では、第３のＳＤＤＦセッションＳＤＤＦ＿３が作成される。ステップ１３２２に続いて、ステップ１３２４では、ステップ１３２２で作成されたＳＤＤＦセッションのビットマップがクリアされる。ステップ１３２４に続いてステップ１３２６では、トークン値（本明細書の他の箇所でさらに詳細に説明）が０に設定される。ステップ１３２６に続いて、処理は完了する。
【０１９２】
図３０を参照して、フローチャート１３３０は、復旧データの収集に関連して遠隔宛先１２０６により実行されるステップを示している。処理は最初のステップ１３３１で開始する。ステップ１３３１では、遠隔宛先１２０６が、送信元グループ１２０２からの、または、適宜、他の或る送信元からの故障メッセージを待つ。故障メッセージが受信されると、制御は、ステップ１３３１からステップ１３３２へ移る。ステップ１３３２では、ＳＤＤＦ＿３セッションがアクティブにされて、書き込みが実行された遠隔宛先１２０６のトラック（または、他の適切なデータインクリメント）に関するデータの収集が開始される。しかしながら、ＳＤＤＦ＿３は、コミットされた書き込み（すなわち、受信されている現在のサイクルに遅れたサイクルの書き込み）を反映することに留意されたい。
【０１９３】
ステップ１３３２に続いてステップ１３３３では、トークン値（後述）が０に初期化される。ステップ１３３３に続いてステップ１３３４では、遠隔宛先１２０６が送信元グループ１２０２からＩ／Ｏを受信する。ステップ１３３４で受信されたＩ／Ｏは、ローカルグループ１２０２が非障害モードで遠隔宛先１２０６へ送信した順序書き込みデータを表すことができることに留意されたい。
【０１９４】
ステップ１３３４に続いて、テストステップ１３３６では、ステップ１３３４で送信元グループ１２０２から受信されたＩ／Ｏが、送信元グループ１２０２によるサイクル切り換えを示しているかどうかを判断する。示していない（すなわち、データは、遠隔宛先１２０６へ書き込まれる従来の順序書き込みデータまたは他の或るタイプのデータである）場合、制御はテストステップ１３３６からステップ１３３４へ戻り、次のＩ／Ｏが受信される。
【０１９５】
テストステップ１３３６において、送信元グループ１２０２からのデータがサイクル切り換えを示していると判断されると、制御はテストステップ１３３６からステップ１３３８へ移り、トークンがインクリメントされる。トークンは、復旧データの収集を開始してからのサイクル切り換えの回数の経過を追跡するものである。ステップ１３３８に続いてステップ１３４２では、ＳＤＤＦ＿３のビットマップが、書き込みが行われた、コミットされたサイクルのデータを反映するように設定される。ステップ１３４２の処理は、アクティブにされたＳＤＤＦセッションのオペレーションに関連して自動的に実行できることに留意されたい。この場合、ステップ１３４２を、図３０に示す復旧プロセスの一部とすることが必要でないことがある。
【０１９６】
コミットされたサイクルは、サイクル切り換え前にデータを収集するのに使用されるサイクルであることに留意されたい。ステップ１３４２に続いて、テストステップ１３４４では、処理が完了した（すなわち、エラー復旧データの収集が完了した）かどうかを判断する。エラー状況（例えば、ローカルグループ１２０２からローカル宛先１２０４へのリンクの故障）が修正された場合、または、例えば、ローカル宛先１２０４および遠隔宛先１２０６が同期している（後述）場合、処理は完了することができる。ステップ１３４４において、処理が完了していないと判断されると、制御はテストステップ１３４４からステップ１３３４へ戻り、別のＩ／Ｏが受信される。処理が完了していると判断されると、制御はステップ１３４４からステップ１３３１へ戻り、新たな故障メッセージを待つ。以下でさらに詳細に説明するように、いくつかの実施の形態では、ステップ１３４４で完了する処理は、一定の復旧パラメータのリセットも引き起こすことができることに留意されたい。
【０１９７】
図３１を参照して、フローチャート１３６０は、ローカル宛先１２０４および遠隔宛先１２０６を同期させることに関連して実行されるステップを示している。上述したように、ローカル宛先１２０４および遠隔宛先１２０６は、通信リンク１２０８を使用してそれらの間でデータを転送することによって同期させることができる。同期後、ローカル宛先１２０４において、または、遠隔宛先１２０６において、ミラーとしての他方を使用してシステムを再起動することができる。
【０１９８】
同期に関連して、ローカル宛先１２０４および遠隔宛先１２０６のいずれが最後（すなわち、最も最新）のデータを有するかを決定し、そのデータが遠隔宛先１２０６およびローカル宛先１２０４のうち、最も最新のデータを有する一方から他方へ転送されるようにすることは有益な場合がある。
【０１９９】
フローチャート１３６０の処理は、最初のステップ１３６２で開始する。ステップ１３６２では、送信元グループ１２０２とローカル宛先１２０４との間のリンクがドロップさ
れ、送信元グループ１２０２と遠隔宛先１２０６との間のリンクがドロップされる。ステップ１３６２におけるリンクのドロップによって、同期プロセスを損なわないことを保証することが援助される。ステップ１３６２に続いてステップ１３６４では、復旧情報が収集されている間に作成されたＳＤＤＦマップが保存される。ステップ１３６４に続いてステップ１３６６では、ステップ１３６２でリンクをドロップしたのと同様の理由で、送信元グループ１２０２とローカル宛先１２０４との間の順序書き込みが終了される。
【０２００】
ステップ１３６６に続いてテストステップ１３６８では、トークン値（上述）が所定の値Ｎよりも大きいかどうかが判断される。トークン値は、エラー復旧データの収集が遠隔宛先１２０６で開始されてから行われたサイクル切り換えの回数を示すことに留意されたい。送信元グループ１２０２とローカル宛先１２０４との間のリンクが機能しておらず、遠隔宛先１２０６が復旧データの収集を開始している場合、遠隔宛先１２０６は、ローカル宛先１２０４よりも最新のデータを含むことがある。これは、トークンの値を調べることによって判断される。このトークンの値は、遠隔宛先１２０６が復旧データの収集を開始する信号を受信してから行われたサイクル切り換えの回数を示している。したがって、テストステップ１３６８において、トークンが或る所定の値Ｎ（例えば２）よりも大きいと判断されると、制御はテストステップ１３６８からステップ１３７１へ移る。ステップ１３７１では、ＳＤＤＦセッション（ＳＤＤＦ＿１、ＳＤＤＦ＿２、およびＳＤＤＦ＿３）のすべてのビットマップが（包含的論理和を使用して）ＯＲ演算され、遠隔宛先１２０６のトラック（または他のデータ量）、および場合によりローカル宛先１２０４のトラック（または他のデータ量）が決定される。これらのトラック（または他のデータ量）は、送信元グループの故障の前に送信元グループ１２０２と遠隔宛先１２０６との間で送信された、または、移動中のアクティブなバッファおよび非アクティブなバッファのデータに対応するものであると共に、場合によっては、ローカル宛先１２０４において相違することがあるデータに対応するものである。
【０２０１】
ステップ１３７１に続いてステップ１３７２では、遠隔宛先１２０６が、ＳＤＤＦ＿１、ＳＤＤＦ＿２、およびＳＤＤＦ＿３の３つのビットマップのＯＲ演算の結果であるビットマップの設定されたビットに対応するトラックからのデータを送信する。これらのトラックからのデータは、遠隔宛先１２０６およびローカル宛先１２０４を同期させることができるように、ローカル宛先１２０４へコピーすることができる。ステップ１３７２に続いて、処理は完了する。本明細書の一実施の形態では、Ｎは２よりも小さくならないように設定することができる。また、ステップ１３７６またはステップ１３７２で開始されたコピーの完了前に、ローカル宛先１２０４または遠隔宛先１２０６の適切な一方に接続されたホストによってオペレーションを再開することも可能な場合があることに留意されたい。
【０２０２】
テストステップ１３６８において、トークンがＮよりも大きな値を有しない（例えば、トークンが０である）と判断されると、制御はテストステップ１３６８からステップ１３７４へ移る。ステップ１３７４では、ＳＤＤＦセッション（ＳＤＤＦ＿１、ＳＤＤＦ＿２、および、存在するならばＳＤＤＦ＿３）のすべてのビットマップが（包含的論理和を使用して）ＯＲ演算され、ローカル宛先１２０４のトラック（または他のデータ量）が決定される。これらのトラック（または他のデータ量）は、送信元グループ１２０２の故障の前に送信元グループ１２０２と遠隔宛先１２０６との間で送信された、または、移動中のアクティブなバッファおよび非アクティブなバッファのデータに対応するものである。ステップ１３７４に続いてステップ１３７６では、ビットマップのＯＲ演算に対応するデータが、通信リンク１２０８を介してローカル宛先１２０４から遠隔宛先１２０６へ送信される。このデータがローカル宛先１２０４から遠隔宛先１２０６へ送信されると、ローカル宛先１２０４および遠隔宛先１２０６は同期される。ステップ１３７６に続いて、処理は完了する。
【０２０３】
ステップ１３７２、１３７４、１３７６は、任意の個数の適切な技法を使用して達成することができる。例えば、バックグラウンドコピーは、ＳＤＤＦセッションのビットマップをＯＲ演算した結果により示されるビットを使用してデータをコピーするように開始することができる。本明細書の一実施の形態では、ステップ１３７２、１３７４、１３７６は、ＲＤＦを使用して実行される。この場合、Ｒ１／Ｒ２対は、まず、例えば米国特許出願第０９／９９７，８１０号に開示された動的ＲＤＦメカニズムを使用して確立される。この米国特許出願は、参照により本明細書に援用される。その後、ビットマップを使用して、ローカル宛先１２０４および遠隔宛先１２０６の一方または双方のデバイステーブルマップを変更し、ＲＤＦメカニズムにバックグラウンドコピーを実行させることができる。
【０２０４】
図３２を参照して、フローチャート１３８０は、図３１のフローチャート１３６０の順序書き込みの終了ステップ１３６６に関連して実行されるステップをさらに詳細に示している。図３２の処理は、送信元グループ１２０２が単一の記憶装置を使用する場合のクリーンアップを示している。送信元グループ１２０２が２つ以上の記憶装置を含む場合、図２３が示す処理を代わりに使用することができる。
【０２０５】
処理は最初のテストステップ１３８２で開始する。テストステップ１３８２では、遠隔宛先１２０６が送信元グループ１２０２から受信した順序書き込みデータのすべてが、完全に処理された（遠隔宛先によって保存された）かどうかが判断される。すなわち、テストステップ１３８２では、遠隔宛先１２０６のディスクスペースにも少なくともキャッシュにも記憶されておらず、そのディスクスペースへの書き込み用のマークが付けられた順序書き込みサイクルに対応するデータが、遠隔宛先１２０６にあるかどうかが判断される。テストステップ１３８２において、すべての順序書き込みデータが遠隔宛先１２０６で処理されたと判断されると、処理は完了する。
【０２０６】
テストステップ１３８２において、送信元グループ１２０２からの順序書き込みデータのいくつかが処理されていないと判断されると、制御はテストステップ１３８２からテストステップ１３８４へ移る。テストステップ１３８４では、遠隔宛先１２０６において受信されたが処理されてない順序書き込みデータが、完了した順序書き込みサイクルに対応するかどうかを判断する。送信元グループ１２０２が、特定のサイクルに対応するデータを遠隔宛先１２０６へ送信すると、遠隔宛先１２０６のサイクルは、コミットメッセージが送信元グループ１２０２から遠隔宛先１２０６へ送信されるまで完了しないことに留意されたい。テストステップ１３８４において、未処理のデータが、完了した順序書き込みサイクルに対応すると判断されると、制御はテストステップ１３８４からステップ１３８５へ移る。ステップ１３８５では、そのサイクルのデータを遠隔宛先１２０６のディスクへ保存し、かつ／または、遠隔記憶装置１２０６のキャッシュのデータをそのディスクへの書き込み用にマークを付けることによって、当該データは記憶される。ステップ１３８５に続いて、処理は完了する。
【０２０７】
テストステップ１３８４において、送信元グループ１２０２からの未処理の順序書き込みデータが、完了したサイクルに対応しないと判断されると、制御はテストステップ１３８４からステップ１３８６へ移る。ステップ１３８６では、無効なビットが遠隔宛先１２０６のデバイステーブルに設定される。ステップ１３８６で設定された無効なビットは、遠隔宛先１２０６のトラック（または他の或るデータインクリメント）が、無効なデータを含み、したがって、最新のものにするために別のデバイスからコピーを行う必要があることを示す。この場合、この別のデバイスは、ローカル宛先１２０４および遠隔宛先１２０６のいずれが最も最新の情報を含むかに応じてローカル宛先１２０４とすることができる。遠隔宛先１２０６のデバイステーブルで無効に設定された特定のトラック（または他
のデータ要素）は、送信元グループ１２０２から受信された未処理の順序書き込みデータによって示されたトラックに対応する。ステップ１３８６に続いてステップ１３８７では、未完了のサイクルの未処理の順序書き込みデータが廃棄される。ステップ１３８７に続いて、処理は完了する。
【０２０８】
図３３を参照して、フローチャート１３９０は、ローカル宛先１２０４から遠隔宛先１２０６へデータがコピーされるステップ１３７６、または、遠隔宛先１２０６からローカル宛先１２０４へデータがコピーされるステップ１３７２に関連して実行されるステップをさらに詳細に示している。処理は最初のステップ１３９２で開始する。ステップ１３９２では、ローカル宛先１２０４および遠隔宛先１２０６のいずれが復旧後のＲ１デバイスであろうとも、（ステップ１３７４からの）ＳＤＤＦ＿１、ＳＤＤＦ＿２、およびＳＤＤＦ＿３のＯＲ演算を使用して、デバイステーブルが設定される。データがＲ１デバイスからＲ２デバイスへコピーされる場合、遠隔トラックに対応するデバイステーブルのロケーションが、ステップ１３９２で設定される。そうではなく、データがＲ２デバイスからＲ１デバイスへコピーされる場合、ローカルトラックに対応するデバイステーブルのロケーションが、ステップ１３９２で設定される。多くの場合、ステップ１３９２におけるテーブルの変更に対応するトラックは、同じであるか、または、上述したステップ１３８６からのテーブルに対する変更の上位セットである。
【０２０９】
ステップ１３９２に続いてステップ１３９６では、バックグラウンドコピープロセスが開始される。ステップ１３９６で開始されたバックグラウンドコピープロセスによって、データはバックグラウンドプロセスでコピーされる。ステップ１３９６に続いて、処理は完了する。
【０２１０】
図３４を参照して、フローチャート１４５０は、送信元グループ１２０２と、ローカル宛先１２０４と、遠隔宛先１２０６との間で通常オペレーションがリストアされた時に復旧パラメータを再初期化することに関連して実行されるステップを示している。処理は最初のステップ１４５２で開始する。ステップ１４５２では、ＳＤＤＦセッションＳＤＤＦ＿１およびＳＤＤＦ＿２の双方が非アクティブにされる。ステップ１４５２に続いてステップ１４５４では、ＳＤＤＦ＿１がクリアされる。ステップ１４５４に続いてステップ１４５６では、ＳＤＤＦ＿２がクリアされる。ステップ１４５６に続いてステップ１４５８では、ＳＤＤＦセッションの１つを指し示すポインタがＳＤＤＦ＿１を指し示すようにされる。ステップ１４５８に続いてステップ１４６２では、ＳＤＤＦ＿１がアクティブにされる。ステップ１４６２に続いて、処理は完了する。
【０２１１】
図３５を参照して、フローチャート１４７０は、遠隔宛先１２０６によって使用された復旧パラメータをリセットすることに関連して実行されるステップを示している。処理は最初のステップ１４７２で開始する。ステップ１４７２では、ＳＤＤＦ＿３が非アクティブにされる。ステップ１４７２に続いてステップ１４７４では、ＳＤＤＦ＿３がクリアされる。ステップ１４７４に続いてステップ１４７６では、遠隔宛先１２０６によって使用されたトークンがクリアされる（０に設定される）。ステップ１４７６に続いて、処理は完了する。いくつかの実施の形態では、上述した図２９のフローチャート１３２０のステップ１３２２でＳＤＤＦ＿３を再び作成できるように、ステップ１４７２において、または、ステップ１４７２の後にＳＤＤＦ＿３を終了させることも可能であることに留意されたい。
【０２１２】
図３６を参照して、略図は、送信元グループ１２０２の可能な構成を示している。図３６の略図では、送信元グループ１２０２は、単一のローカル記憶装置１５０４に接続されたホスト１５０２を含む。ローカル記憶装置１２０２は、ローカル宛先１２０４および遠隔宛先１２０６の双方に接続されている。図３６に示す構成では、本明細書で説明する処
理のすべては、ローカル記憶装置１５０４によって実行することもできるし、あるいは、処理の一部は、適宜、ホスト１５０２によって実行することもできる。
【０２１３】
図３７を参照して、略図は、ホスト１５１２が複数のローカル記憶装置１５１４〜１５１６に接続されている送信元グループ１２０２の別の構成を示している。ローカル記憶装置１５１４〜１５１６のそれぞれは、ローカル宛先１２０４および遠隔宛先１２０６の双方に接続されている。図３７に示す構成では、ホスト１５１２は、本明細書で説明する処理の一部をハンドリングすることができ、例えば、順序書き込みに関連したローカル記憶装置１５１４〜１５１６のすべてのサイクル切り換え等をハンドリングすることができる。
【０２１４】
場合によっては、送信元グループ１２０２とローカル宛先１２０４との間のデータ転送が困難な場合、サイクル切り換えを防止することが望ましい場合がある。もちろん、ローカル宛先１２０４の完全な故障、または、送信元グループ１２０２とローカル宛先１２０４との間のリンクの完全な故障の場合、システムは作業を完全に停止することができ、復旧が上述したように進むことになる。一方、断続的な故障（例えば、送信元グループ１２０２とローカル宛先１２０４との間のリンクの一時的な接続損失）が存在し得る他の場合には、対応するデータがまず送信元グループ１２０２からローカル宛先１２０４への転送に成功するまで、送信元グループ１２０２と遠隔宛先１２０６との間の通信に関連して単に送信元グループ１２０２でサイクル切り換えをしないことが望ましい場合がある。この強化については以下で説明する。
【０２１５】
図３８を参照して、フローチャート２００’は、図６のフローチャート２００の変更部分を示している。この変更部分は、リスト７２、７４（図３に示す）のうち非アクティブなものから別の記憶装置へのデータの転送に関連して実行されるステップを示している。フローチャート２００’は、ステップ２０４およびステップ２１２を示している。これらのステップは、フローチャート２００にもあり、図６を説明する本文に関連して上述している。一方、以下でさらに詳細に説明するように、フローチャート２００’は、図６のフローチャート２００には設けられていない追加された新たなステップを含んでいる。
【０２１６】
ステップ２０４に続いて、テストステップ１６０２は、別の記憶装置へ転送されているデータが特別なデータであるかどうかを判断する。フローチャート２００’に関連して使用されるように、ステップ１６０２の特別なデータは、送信元グループ１２０２から、ローカル宛先１２０４および遠隔宛先１２０６の双方へ送信される予定のデータを指す。本明細書の一実施の形態では、特別なデータは、当該データがローカル宛先１２０４および遠隔宛先１２０６の双方への転送用キューに入れられるかどうかを判断する組み込みメカニズムを使用して特定することができる。もちろん、特別なデータを特定してテストする他のメカニズムを使用することもできる。
【０２１７】
テストステップ１６０２において、データが特別なデータでないと判断されると、制御はステップ１６０２からステップ２１２へ移り、図６のフローチャート２００に関連して上述したようにデータが送信される。ステップ２１２に続いて、処理は、図６のフローチャート２００に示し、かつ、本明細書の他の箇所で説明したように続く。テストステップ１６０２において、送信予定のデータが（送信元グループ１２０２からローカル記憶装置１２０４および遠隔記憶装置１２０６の双方へ転送される予定の）特別なデータであると判断されると、制御はテストステップ１６０２からテストステップ１６０４へ移る。テストステップ１６０４では、調べられる特定の転送が、送信元グループ１２０２から遠隔宛先１２０６への特別なデータの転送であるかどうかが判断される。本明細書の他の箇所で説明するように、まず、送信元グループ１２０２からローカル宛先１２０４へのデータの転送が成功するまで、送信元グループ１２０２から遠隔宛先１２０６へのデータの送信を
回避することが望ましい。したがって、ステップ１６０４のテストは、調べられる特定のデータ転送が、送信元グループ１２０２から遠隔宛先１２０６への転送であるかどうかを判断する。そのような転送でない場合、制御はテストステップ１６０４からステップ２１２へ移り、本明細書の他の箇所で説明したように処理が続けられる。そうではなく、テストステップ１６０４において、調べられるデータが、送信元グループ１２０２から遠隔宛先１２０６への転送に対応する場合、制御はテストステップ１６０４からテストステップ１６０６へ移る。テストステップ１６０６では、送信元グループ１２０２からローカル宛先１２０４へのデータの対応する転送が、先に完了に成功していたかどうかを判断する。すなわち、所与のスロットまたはデータの一部が遠隔宛先１２０６およびローカル宛先１２０４の双方へ転送される場合、ステップ１６０６のテストは、送信元グループ１２０２からローカル宛先１２０４への転送の実行が成功したかどうかを判断する。成功しなかった場合、制御はテストステップ１６０６からステップ１６０７へ移り、ステップ１６０７では、エラー処理／テストが実行される。
【０２１８】
場合によっては、送信元グループ１２０２からローカル宛先１２０４へのデータの転送ができないことにより、システムは、遠隔宛先１２０６にデータの蓄積を開始する。このデータの蓄積の開始は、例えば、システムが遠隔宛先へ故障メッセージを送信して（図３０のフローチャート１３３０および対応する説明を参照）、図３８のフローチャート２００’によって示す処理から抜け出ることによって行われる。その結果、送信元グループ１２０２からローカル宛先１２０４へのデータの送信に常に成功していたかどうかに関係なく、データが送信元グループ１２０２から遠隔宛先１２０６へ送信される。他の処理も行うことができ、例えば、送信元グループ１２０２からローカル宛先１２０４へ転送されないデータについてデバイステーブルに無効ビットを設定すること等の処理を行うことができる。送信元グループ１２０２とローカル宛先１２０４との間の接続が再確立されると、遠隔宛先１２０４を同期させ、次いで、本明細書で説明したような定常状態のオペレーション（例えば、フローチャート２００’のステップ）を再開することが可能であることに留意されたい。
【０２１９】
上述したエラー処理を実行するかどうかを判断する判定基準は、当業者が識別できるいくつかの機能的要因に従って設定することができる。本明細書の一実施の形態では、この判定基準は、送信元グループ１２０２とローカル宛先１２０４との間のリンクの故障、および／または、ローカル宛先１２０４の故障が起こる尤度に従って設定される。例えば、ステップ１６０７のエラー処理は、送信元グループ１２０２からローカル宛先１２０４へのデータの転送が成功することなく一定の時間が経過した場合に故障が発生したと判断することができる。ステップ１６０７のエラー処理が、故障が発生していない（したがって、処理を継続すべきである）と判断すると、制御はステップ１６０７からテストステップ１６０８へ移る。テストステップ１６０８では、送信元グループ１２０２から遠隔宛先１２０６へ送信される非アクティブなデータがさらにあるかどうかを判断する。当該非アクティブなデータがさらにある場合、制御はテストステップ１６０８からステップ１６１２へ移る。ステップ１６１２では、データにわたって繰り返す（例えば、リスト７４、７６のうち非アクティブなものの要素にわたって繰り返す）ポインタが、送信されるデータの次の非アクティブなブロックを指し示すように調整される。ステップ１６１２に続いて、制御はステップ２０４へ戻り、本明細書の他の箇所で説明したような処理が継続される。
【０２２０】
テストステップ１６０８において、送信される非アクティブなデータがそれ以上ないと判断されると、制御はテストステップ１６０８からステップ１６１４へ移る。ステップ１６１４では、プロセスは待機状態になる。データの送信が、送信元グループ１２０２から遠隔宛先１２０６への転送に対応するとすでに判断されており（テストステップ１６０４において）、かつ、送信元グループ１２０２からローカル宛先１２０４への対応する転送がまだ完了していないことが確認されている（ステップ１６０６のテストに従って）。し
たがって、テストステップ１６０８において、送信されるデータがそれ以上ないと判断されると、より多くの非アクティブなデータを送信に利用可能にするようにステップ１６１４で待つか、または、別のプロセスが、送信元グループ１２０２からローカル宛先１２０４への対応するデータの転送に成功するまでステップ１６１４で待ち、したがって、次の繰り返しでは、テストステップ１６０６の結果を変更させることが適切である。ステップ１６１４に続いて、制御はステップ２０４へ戻り、本明細書の他の箇所で説明したような処理が継続される。
【０２２１】
テストステップ１６０６において、ローカル宛先１２０４への対応する転送が事前に完了に成功していたと判断されると、制御はテストステップ１６０６から別のテストステップ１６１６へ移り、転送予定のデータが、その転送に関連して、当該データに関連付けられた２つ以上のスロット（例えば、アクティブなスロットおよび非アクティブなスロット）を有するかどうかが判断される。本明細書の他の箇所で説明するように、一定の条件の下、通常は単一のスロットであるものに２つ以上のスロットを関連付けることができる。例えば、図１２のフローチャート４４０およびステップ４４６、４７２、４７４、４７６、４７８に関連した上記説明を参照されたい。したがって、テストステップ１６１６において、２つ以上のスロットが存在しないと判断されると、制御はテストステップ１６１６からステップ２１２へ移り、本明細書の他の箇所で説明したような処理が継続される。そうではなく、テストステップ１６１６において、２つ以上の対応するスロットが存在すると判断されると、制御はテストステップ１６１６からテストステップ１６１８へ移る。テストステップ１６１８では、ステップ１６０６におけるスロットのテストと同様に、ローカル記憶装置１２０４への他のスロットの転送が成功していたかどうかを判断する。テストステップ１６１８において、他の対応するスロットのすべてがローカル記憶装置１２０４へ適切に転送されたと判断されると、制御はテストステップ１６１８からステップ２１２へ移り、本明細書の他の箇所で説明したような処理が継続される。適切に転送されなかったと判断されると、制御はテストステップ１６１８からステップ１６０８へ移る。これについても本明細書の他の箇所で説明した。
【０２２２】
本明細書で説明したシステムの別の実施の形態では、図７の略図２４０に示したものと同様のＲ２デバイスのＣＯＶＤを使用しないことが可能である。すなわち、Ｒ２デバイスにおいてＣＯＶＤを使用することなくＲ２が非同期データを受信することを実施することができる。
【０２２３】
図３９を参照して、略図１６４０は、データを受信する遠隔記憶装置２６に設けられるキャッシュ１６４２を示している。キャッシュ１６４２は、ローカル記憶装置２４から受信された非同期データが置かれる複数のスロット１６５２〜１６５４を含む。また、第１の循環リンクリスト１６７４および第２の循環リンクリスト１６７６も示されている。これら第１の循環リンクリスト１６７４および第２の循環リンクリスト１６７６は、キャッシュ１６４２のスロット１６５２〜１６５４へのポインタを含む。したがって、例えば、循環リンクリスト１６７４は、複数のポインタ１６８１〜１６８５を含む。これらのポインタのそれぞれは、キャッシュ１６４２のスロット１６５２〜１６５４の１つを指し示す。同様に、循環リンクリスト１６７６も、複数のポインタ１６９１〜１６９５を含む。これらのポインタのそれぞれは、キャッシュ１６４２のスロット１６５２〜１６５４の１つを指し示す。また、標準論理デバイス１６９８も、キャッシュ１６４２の一部にマッピングされる。
【０２２４】
本明細書の一実施の形態では、リスト１６７４、１６７６の一方が、（例えば、図２に示すデータ・セット５６のような）非アクティブな大量のデータ・セットに対応する一方、リスト１６７４、１６７６の他方が、（例えば、図２のデータ・セット５８のような）アクティブな大量のデータ・セットに対応する。図７の略図２４０およびその対応する本
文に関連して本明細書の他の箇所で説明したように、受信されたデータは、大量のデータ・セットのうち非アクティブなものを使用して蓄積される一方、大量のデータ・セットのうちアクティブなものは、標準論理デバイス１６９８においてデータを記憶するのに使用される。したがって、新たなデータが到着すると、そのデータはキャッシュ１６４２に置かれ、循環リンクリスト１６７４、１６７６の一方が対応する新たなポインタが、データの受信時に非アクティブな大量のデータ・セットへ追加される。
【０２２５】
場合によっては、標準論理デバイス１６９８（または、他の任意の論理デバイス）の一部が、受信されたデータに対応する、当該標準論理デバイス１６９８に関連したスロットをキャッシュ１６４２に有するかどうかを判断できることが有益な場合がある。もちろん、リスト１６７４、１６７６の双方をトラバースして、対応するスロットがキャッシュ１６４２にあるかどうかを判断することは常に可能である。しかしながら、論理デバイスの特定のデバイス値、シリンダ値、およびヘッド値を使用して、デバイスへデステージされるのを待機しているスロット１６５２〜１６５４の対応するものがキャッシュ１６４２にあるかどうかを判断する方法があると、より有益であろう。
【０２２６】
図４０を参照して、略図１７００は、複数のエントリ１７０４〜１７０６を含むハッシュテーブル１７０２を示している。本明細書の一実施の形態では、エントリ１７０４〜１７０６のそれぞれは、ヌルポインタを含むか、または、受信されたが標準論理デバイス１６９８（または、別の標準論理デバイス）にまだ記憶されていないデータに対応するキャッシュスロット１６５２〜１６５４の１つを指し示す。テーブル１７０２は、ハッシュ関数を使用してインデックスされる。このハッシュ関数は、対応するエントリを見つけるために、デバイス、シリンダ、およびヘッドの特定の値を使用して数学的オペレーションを実行し、テーブル１７０２内へのインデックスを生成するものである。したがって、データがＲ２デバイスによって受信されると、このハッシュ関数が、デバイス、シリンダ、およびヘッドに適用されて、テーブル１７０２内へのＲ２デバイスのインデックス値が求められ、次いで、キャッシュ１６４２の特定のスロット１６５２〜１６５４を指し示すポインタが、エントリ１７０４〜１７０６の対応するものへ書き込まれる。受信されたデータが、標準論理デバイス１６９８（または別のデバイス）へ適切にデステージされると、エントリ１７０４〜１７０６の対応するものはヌルに設定される。このように、ハッシュテーブル１７０２によって、標準論理デバイスの特定の部分が、まだデステージされていない受信されたデータに対応するかどうかを素早く判断することが可能になる。本明細書に説明するシステムでは、テーブル１７０２内へのインデックスを生成するのに、任意の適切なハッシュ関数を使用することができる。
【０２２７】
場合によっては、或る特定のデバイス値、シリンダ値、およびヘッド値が生成したテーブル１７０２内へのインデックスが、そのデバイス、シリンダ、およびヘッドの異なる値によって生成されたインデックスと同じである可能性がある。これは、「コリジョン」と呼ばれる。コリジョンが発生した場合、その同じインデックスに対応するテーブル１７０２内への第２のエントリが設けられ、特定のインデックスが２つ以上のエントリに対応するように、この第２のエントリが第１のエントリへリンクされる。これは、テーブル１７０２の要素１７０５へリンクされた要素１７０８によって示されている。したがって、第１のデバイス、シリンダ、およびヘッドがハッシュされて、エントリ１７０５へのインデックスが生成される一方、異なるデバイス、シリンダ、およびヘッドがハッシュ関数に入力されて、そのインデックスの同じ値が生成される。本明細書の一実施の形態では、エントリ１７０５は、第１のデバイス、シリンダ、およびヘッドに対応するキャッシュ１６４２のデータを指し示すのに使用される一方、エントリ１７０８は、第２のデバイス、シリンダ、およびヘッドに対応するキャッシュ１６４２のデータを指し示すのに使用される。もちろん、データが適切なデバイスへデステージされると、エントリ１７０５、１７０８の対応するものは、テーブル１７０２から削除することができる。
【０２２８】
任意の個数のエントリが単一のインデックスに対応することができ、その結果、例えば、デバイス、シリンダ、およびヘッドの３つの別個の組の値が同じインデックスを生成するコリジョンが発生すると、テーブル１７０２内への特定のインデックスにおいて３つの（または４つ以上の）エントリが互いにリンクされることに留意されたい。また、他の適切な技法を使用して、コリジョンをハンドリングできることにも留意されたい。この技法には、追加テーブル（例えば、第２のテーブル、第３のテーブル、第４のテーブル等）を設けることが含まれる。
【０２２９】
図４１を参照して、略図１７２０は、代替的な一実施の形態のハッシュテーブル１７２２を示している。このハッシュテーブル１７２２は、複数のエントリ１７２４〜１７２６を含む。図４１の実施の形態は、本明細書で説明するように、いくつかの相違を有するが、図４０の実施の形態と同様である。エントリ１７２４〜１７２６のそれぞれは、ヌルポインタを含むか、または、略図１７２０に示すキャッシュスロット１７２８、１７３２、１７３４の１つを指し示す。キャッシュスロット１７２８、１７３２、１７３４は、受信されたが標準論理デバイス１６９８（または別の標準論理デバイス）にまだ記憶されていないデータに対応する。テーブル１７２２は、ハッシュ関数を使用してインデックスされる。このハッシュ関数は、デバイス、シリンダ、およびヘッドの特定の値を使用して数学的オペレーションを実行し、対応するエントリを見つけるための、テーブル１７２２内へのインデックスを生成するものである。したがって、データがＲ２デバイスによって受信されると、ハッシュ関数が、デバイス、シリンダ、およびヘッドに適用されて、テーブル１７２２内へのそのインデックス値が求められ、次いで、特定のスロット１７２８、１７３２、１７３４を指し示すポインタが、エントリ１７２４〜１７２６の対応するものへ書き込まれる。受信されたデータが、標準論理デバイス１６９８（または別のデバイス）へ適切にデステージされると、エントリ１７２４〜１７２６の対応するものは適切に調整される。このように、ハッシュテーブル１７２２によって、標準論理デバイスの特定の部分が、まだデステージされていない受信されたデータに対応するかどうかを素早く判断することが可能になる。本明細書に説明するシステムでは、テーブル１７２２内へのインデックスを生成するのに、任意の適切なハッシュ関数を使用することができる。
【０２３０】
図４１に示す実施の形態では、コリジョンが発生した場合、テーブルエントリによって指し示される第１のスロットは、コリジョンを引き起こした第２のスロットを指し示す。したがって、例えば、スロット１７３２およびスロット１７３６がテーブルエントリ１７２５でコリジョンを引き起こすと、テーブルエントリ１７２５はスロット１７３２を指し示す一方、スロット１７３２はスロット１７３６を指し示す。したがって、次のスロットが追加されても、次のスロットの追加には、単に前のスロットのポインタ値の変更が必要となるだけであるので、コリジョンは、テーブル１７２２の変更を引き起こすことはない。もちろん、任意の個数のスロットが単一のテーブルエントリに対応することができる。
【０２３１】
任意の個数のエントリが単一のインデックスに対応することができ、その結果、例えば、デバイス、シリンダ、およびヘッドの３つの別個の組の値が同じインデックスを生成するコリジョンが発生すると、テーブル１７２２への特定のインデックスにおいて３つ（または４つ以上）のエントリが共にリンクされることに留意されたい。また、他の適切な技法を使用して、コリジョンをハンドリングできることにも留意されたい。この技法には、追加テーブル（例えば、第２のテーブル、第３のテーブル、第４のテーブル等）を設けることが含まれる。
【０２３２】
場合によっては、図２６の略図１２００に示すローカル宛先１２０４以外のものを使用できることが有利な場合がある。もちろん、ローカル宛先１２０４が送信元グループの完全ミラーでない場合、復旧は遠隔宛先１２０６で実行されることになる。一方、遠隔宛先
１２０６は、送信元グループ１２０２からローカル宛先１２０４へ同期して書き込まれたデータと同程度に最新であるデータを含まないことがある。したがって、遠隔宛先１２０６において復旧することが可能であるが、しかし、送信元グループ１２０２からローカル宛先１２０４へ同期して書き込まれたデータと同程度に最新のデータを有することが可能であることが望ましい。
【０２３３】
図４２を参照して、略図１７８０は、図２６の略図１２００の送信元グループ１２０２と同様の送信元グループ１７８２を含むシステムを示している。また、この略図１７８０は、図２６の略図１２００の遠隔宛先１２０６と同様の遠隔宛先１７８６も示している。
【０２３４】
また、略図１７８０は、最小記憶ローカル宛先１７８８も示している。この最小記憶ローカル宛先１７８８は、送信元グループ１７８２から同期データ書き込みを受信するのに使用される。本明細書の一実施の形態では、最小記憶ローカル宛先１７８８は、送信元グループ１７８２には、図２６の略図１２００のローカル宛先１２０４と同様の記憶装置のように見える。しかしながら、本明細書の一実施の形態では、最小記憶ローカル宛先１７８８は、送信元グループ１７８２のミラーではない。その代わり、最小記憶ローカル宛先１７８８は、復旧が必要となった場合に遠隔宛先１７８６へ転送されるデータを記憶するのに使用される。本明細書の一実施の形態では、すべての復旧は遠隔宛先１７８６で実行される。他の実施の形態では、送信元グループ１７８２は、送信元グループ１７８２が最小記憶ローカル宛先１７８８に接続されていることを知ることが可能である。
【０２３５】
送信元グループ１７８２は、図２６の略図１２００の送信元グループ１２０２と同様に動作することができる。したがって、送信元グループ１７８２は、最小記憶ローカル宛先１７８８へ同期書き込みを提供し、遠隔宛先１７８６へ順序書き込みを提供する。最小記憶ローカル宛先１７８８は、送信元グループ１７８２のミラーとなるのではなく、送信元グループ１７８２からの最も近時の同期書き込みのみを記憶する。その結果、復旧が必要となった場合、最小記憶ローカル宛先１７８８は、最も近時の書き込みを遠隔宛先１７８６へ転送することができる。送信元グループ１７８２から遠隔宛先１７８６へデータが転送されると、対応するデータが最小記憶ローカル宛先１７８８から削除され、その結果、例えば、２つの最も近時のサイクルよりも古いどのサイクルも、遠隔記憶装置１７８６にすでに記憶されているので、最小記憶ローカル宛先１７８８は、２つの最も近時のサイクルの順序書き込みデータのみを保持する。
【０２３６】
図４３を参照して、データ構造体１８００は、最小記憶ローカル宛先１７８８におけるデータのストレージを示している。本明細書の一実施の形態では、このデータ構造体１８００は、複数の要素１８０２〜１８０５を有するリンクリストである。リストトップポインタは第１の要素１８０２を指し示す。この第１の要素は第２の要素１８０３を指し示し、第２の要素は第３の要素１８０４を指し示す。以下、同様である。また、リンクリスト１８００は最後の要素１８０５も有する。この最後の要素１８０５は、リストの終点を示すために、次の要素としてヌルポインタを指し示す。もちろん、他の適切なデータ構造体を使用することもできる。
【０２３７】
本明細書の一実施の形態では、例えば、要素１８０２が標準論理デバイスの一連の要素における最初の要素となり、第２の要素１８０３が第１の要素１８０２に続き、以下、同様になるように、リスト１８００は、標準論理デバイスのトラックおよびヘッドのロケーションに従って分類される。別の実施の形態では、リスト１８００は、送信元グループ１７８２から最小記憶ローカル宛先１７８８へデータ書き込みが提供された順序に従って分類される。双方の実施の形態については、以下でさらに詳細に説明する。
【０２３８】
図４４を参照して、略図は、リンクリスト１８００のデータ要素１８２０をさらに詳細
に示している。データ要素１８２０は、ＴＲＡＣＫ（トラック）フィールド１８２２を含む。このＴＲＡＣＫフィールド１８２２は、対応する標準論理デバイスにデータを記憶するのに使用されるトラック番号を示す。セクタ番号、標準論理デバイスの始点からのオフセット、または他の任意の適切な指示子等の他のデータストレージロケーションをトラック番号の代わりに使用することもできる。
【０２３９】
また、データ要素１８２０は、サイクル番号１８２４（ＣＹＣＮＯ）も含む。このサイクル番号１８２４は、本明細書の他の箇所で説明したように、送信元グループ１７８２から遠隔宛先１７８６へのデータの転送に使用されるサイクルを示す。本明細書の他の箇所でさらに詳細に説明するように、データが送信元グループ１７８２から最小記憶ローカル宛先１７８８へ転送されると、最小記憶ローカル宛先１７８８は、送信元グループ１７８２と遠隔宛先１７８６との間の転送に対応するサイクルの変化の経過を追跡し、適切なサイクル番号をデータ要素１８２０に割り当てる。
【０２４０】
また、データ要素１８２０は、データフィールド１８２６（ＤＡＴＡ）も含む。このデータフィールド１８２６は、送信元グループ１７８２から最小記憶ローカル宛先１７８８へ転送されたデータに対応する。また、データ要素１８２０は、次フィールド１８２８（ＮＥＸＴ）も含む。この次フィールド１８２８は、リンクリスト１８００の次のデータ要素を指し示すのに使用される。
【０２４１】
図４５を参照して、フローチャート１８５０は、送信元グループ１７８２が最小記憶ローカル宛先１７８８へ提供するデータの受信に関連して最小記憶ローカル宛先１７８８により実行されるステップを示している。本明細書の他の箇所で説明するように、最小記憶ローカル宛先１７８８は、送信元グループ１７８２には、送信元グループ１７８２のミラーのように見えることがある。しかしながら、本明細書で説明したように、最小記憶ローカル宛先１７８８は、必ずしも、送信元グループ１７８２のミラーではなく、その代わり、送信元グループ１７８２からの最も近時のデータを含む。復旧が必要になると、最小記憶ローカル宛先１７８８は、自身に記憶されたデータを遠隔宛先１７８６へ転送して、復旧を円滑にする。
【０２４２】
フローチャート１８５０の処理はステップ１８５２で開始する。ステップ１８５２では、ローカルサイクル番号ＣＹＣＮＯが０に設定される。ステップ１８５２で設定されたローカルサイクル番号は、送信元グループ１７８２におけるサイクルの変化の経過を追跡するのに使用される。ローカルサイクル番号は、送信元グループ１７８２で使用される特定のサイクル番号に正確に対応する必要はないことに留意されたい。むしろ、ステップ１８５２で設定されたサイクル番号は、送信元グループ１７８２によるサイクル切り換えの経過を追跡することで足りる。
【０２４３】
ステップ１８５２に続いてステップ１８５４では、データが送信元グループ１７８２から受信される。ステップ１８５４に続いて、テストステップ１８５６は、受信されたデータが、送信元グループ１７８２によって提供されたサイクル切り換えに対応するかどうかを判断する。テストステップ１８５６は、上述した図２８Ａのテストステップ１２６２と同様である。
【０２４４】
テストステップ１８５６において、受信されたデータがサイクル切り換えに対応していないと判断されると、制御はテストステップ１８５６からステップ１８５８へ移る。ステップ１８５８では、受信されたデータが最小記憶ローカル宛先１７８８のストレージに追加される。ステップ１８５８で最小記憶ローカル宛先１７８８のストレージにデータを追加することについては、本明細書の他の箇所でさらに詳細に説明する。ステップ１８５８に続いてステップ１８６２では、最小記憶ローカル宛先１７８８によって、受信されたデ
ータの肯定応答が送信元グループ１７８２へ返される。ステップ１８６２におけるデータの肯定応答は、送信元グループ１７８２に対して最小記憶ローカル宛先１７８８を完全な同期ミラーとして演じさせるのに使用することができる（すなわち、ステップ１８６２で提供される肯定応答は、完全な同期ミラーによって提供されるのと同じ肯定応答である）。ステップ１８６２に続いて、制御はステップ１８５４へ戻り、さらにデータが受信される。
【０２４５】
テストステップ１８５６において、ステップ１８５４で受信されたデータが、サイクル切り換えに対応すると判断されると、制御はステップ１８５６からステップ１８６４へ移る。ステップ１８６４では、最小記憶ローカル宛先１７８８と共に使用される内部サイクル番号ＣＹＣＮＯがインクリメントされる。本明細書の一実施の形態では、最大サイクル番号ＭＡＸＣＹＣＮＯが設けられ、そして、内部サイクル番号ＣＹＣＮＯは、ステップ１８６４において、当該ＣＹＣＮＯに１を加え、次いで、その結果のモジュロＭＡＸＣＹＣＮＯを取ることによってインクリメントされる。
【０２４６】
ステップ１８６４に続いてステップ１８６６では、前のサイクル番号に対応するデータが廃棄される。本明細書の他の箇所で説明したように、最小記憶ローカル宛先１７８８は、２つの最も近時のサイクル番号に対応するデータを記憶する。２つのサイクル番号よりも古いどのデータも、すでに、送信元グループ１７８２から遠隔宛先１７８６への転送に成功しているはずである。したがって、復旧は、遠隔宛先１７８６で提供されるので、最小記憶ローカル宛先１７８８は、現在のサイクル番号に対応するデータ、および、その１つ前のサイクル番号に対応するデータのみを記憶するだけでよい。他の実施の形態では、異なるデータ（例えば、３つまたは４つの最も近時のサイクル）を保持することが可能な場合がある。ステップ１８６６でデータを廃棄することについては、本明細書の他の箇所でさらに詳細に説明する。ステップ１８６６に続いて、制御は、上述したステップ１８５４へ戻り、さらにデータが受信される。
【０２４７】
図４６を参照して、フローチャート１９００は、受信されたデータを最小記憶ローカル宛先１７８８で記憶されたデータに追加するステップ１８５８に関連して、最小記憶ローカル宛先１７８８により実行されるステップをさらに詳細に示している。処理は最初のステップ１９０２で開始する。ステップ１９０２では、一時変数Ｐ１がリストトップに等しく設定される。このリストトップは、最小記憶ローカル宛先１７８８で記憶されたデータのリンクリスト１８００を指し示すポインタである
ステップ１９０２に続いて、テストステップ１９０４では、一時変数Ｐ１がヌルに等しいかどうかが判断される。ヌルに等しい場合には、リンクリスト１８００に記憶されたデータは存在せず、フローチャート１９００のステップによって記憶されるデータは、最小記憶ローカル宛先１７８８で記憶される最初のデータに対応する。テストステップ１９０４において、Ｐ１がヌルに等しいと判断されると、制御はテストステップ１９０４からステップ１９０６へ移る。ステップ１９０６では、データを一時的に記憶するのに使用される一時変数Ｔ用に、ｍａｌｌｏｃコマンド（または適した類似のもの）を使用して、メモリがヒープ（または適した類似のもの）から取得される。ステップ１９０６に続いてステップ１９０８では、データレコードＴのトラック番号フィールド（Ｔ．ＴＲＡＣＫ）が、送信元グループ１７８２でデータを記憶する標準論理デバイスのトラックに等しく設定される。ステップ１９０８に続いてステップ１９１２では、Ｔ．ＣＹＣＮＯが、最小記憶ローカル宛先１７７８における現在のローカルサイクル番号に等しく設定される。
【０２４８】
ステップ１９１２に続いてステップ１９１４では、受信されたデータがＴのデータフィールド（すなわち、Ｔ．ＤＡＴＡ）へコピーされる。ステップ１９１４に続いてステップ１９１６では、次のフィールド（Ｔ．ＮＥＸＴ）がヌルに等しく設定される。ステップ１９１６に続いてステップ１９１８では、リストトップがＴに等しく設定される。ステップ
１９１８に続いて、処理は完了する。
【０２４９】
テストステップ１９０４において、変数Ｐ１がヌルに等しくないと判断されると、制御はテストステップ１９０４からテストステップ１９２２へ移る。テストステップ１９２２では、受信されたデータに対応するトラック番号が、Ｐ１が指し示すデータ要素のトラック番号に等しいかどうかが判断される。等しい場合には、制御はテストステップ１９２２からステップ１９２４へ移る。ステップ１９２４では、受信されたデータがＰ１．ＤＡＴＡのデータフィールドに書き込まれる（おそらく、既存のデータを上書きする）。ステップ１９２４に続いてステップ１９２６では、Ｐ１が指し示す要素のサイクル番号フィールド（Ｐ１．ＣＹＣＮＯ）が、最小記憶ローカル宛先１７７８に記憶された現在のローカルサイクル番号（ＣＹＣＮＯ）で上書きされる。ステップ１９２６に続いて、処理は完了する。
【０２５０】
テストステップ１９２２において、Ｐ１が指し示す要素のトラック番号が、受信されたデータに対応するトラック番号に等しくないと判断されると、制御はテストステップ１９２２からステップ１９２８へ移る。ステップ１９２８では、別の一時変数Ｐ２がＰ１．ＮＥＸＴに等しく設定される。ステップ１９２８に続いてテストステップ１９３２では、Ｐ２がヌルに等しい（すなわち、Ｐ１がリンクリスト１８００の最後の要素を指し示す）かどうかが判断される。等しくない場合には、制御はテストステップ１９３２からテストステップ１９３４へ移る。テストステップ１９３４では、Ｐ２が指し示す要素に対応するトラック番号が、受信されたデータに対応するトラック番号よりも小さいかどうかが判断される。ステップ１９３４のテストは、受信されたデータが、Ｐ１とＰ２との間に挿入される新たな要素となるかどうかを判断する。テストステップ１９３４において、Ｐ２が指し示す要素のトラック番号が、受信されたデータに対応するトラック番号よりも小さくないと判断されると、制御はテストステップ１９３４からステップ１９３６へ移る。ステップ１９３６では、次の繰り返しの準備をするために、一時変数Ｐ１がＰ２に等しく設定される。ステップ１９３６に続いて、制御は、上述した１９２２のテストへ戻る。
【０２５１】
テストステップ１９３２において、Ｐ２がヌルを指し示すと判断されるか、または、テストステップ１９３４において、Ｐ２が指し示すデータ要素のトラック番号が、受信されたデータに対応するトラック番号よりも小さいと判断されると、制御はステップ１９３８へ移る。ステップ１９３８では、（リスト１８００の）新たな要素が、一時変数Ｔを使用して割り当てられる。ステップ１９３８に続いてステップ１９４２では、Ｔのトラック番号（Ｔ．ＴＲＡＣＫ）が、受信されたデータに対応するトラック番号に等しく設定される。ステップ１９４２に続いてステップ１９４４では、Ｔのサイクル番号フィールド（Ｔ．ＣＹＣＮＯ）が、最小記憶ローカル宛先１７８８におけるローカルサイクル番号に等しく設定される。
【０２５２】
ステップ１９４４に続いてステップ１９４６では、受信されたデータが一時ストレージ領域のデータフィールド（Ｔ．ＤＡＴＡ）へ書き込まれる。ステップ１９４６に続いてステップ１９４８では、Ｔの次のフィールド（Ｔ．ＮＥＸＴ）がＰ２に等しく設定される。ステップ１９４８に続いてステップ１９５２では、Ｐ１が指し示す要素の次のフィールド（Ｐ１．ＮＥＸＴ）が、Ｔを指し示すように設定される。ステップ１９５２に続いて、処理は完了する。
【０２５３】
図４６のフローチャート１９００は、最小記憶ローカル宛先１７８８におけるリンクリスト１８００が、受信されたデータに対応するトラック番号に従って記憶される一実施の形態を示している。受信されたデータは、最小記憶ローカル宛先１７８８におけるデータの受信順序に従ってソートすることもできる。
【０２５４】
図４７を参照して、フローチャート２０００は、データが追加されるステップ１８５８において、最小記憶ローカル宛先１７８８により実行されるステップを示している。フローチャート２０００が示す代替的な実施の形態では、リンクリスト１８００のデータは、最小記憶ローカル宛先１７８８におけるデータの受信順序に従って記憶される。
【０２５５】
処理は最初のステップ２００２で開始する。ステップ２００２では、新たなデータ要素Ｔが割り当てられる。ステップ２００２に続いてステップ２００４では、割り当てられた要素のトラック番号フィールド（Ｔ．ＴＲＡＣＫ）が、受信されたデータに対応するトラック番号に等しく設定される。ステップ２００４に続いてステップ２００６では、割り当てられた要素のサイクル番号フィールド（Ｔ．ＣＹＣＮＯ）が、最小記憶ローカル宛先１７８８で提供されたローカルサイクル番号（ＣＹＣＮＯ）に等しく設定される。
【０２５６】
ステップ２００６に続いてステップ２００８では、受信されたデータが、割り当てられた要素のデータフィールド（Ｔ．ＤＡＴＡ）へ書き込まれる。ステップ２００８に続いてステップ２０１２では、割り当てられた要素の次のフィールド（Ｔ．ＮＥＸＴ）がヌルに等しく設定される。本明細書の一実施の形態では、最も近時に受信されたデータが、リンクリスト１８００の終点に追加される。ステップ２０１２に続いて、テストステップ２０１４は、リストトップ（リンクリスト１８００の先頭へのポインタ）がヌルに等しいかどうかを判断する。第１のデータがリンクリスト１８００へ書き込まれた場合、または、すべてのデータがリスト１８００から削除された場合、リストトップはヌルに等しくなることができることに留意されたい。テストステップ２０１４において、リストトップがヌルに等しいと判断されると、制御はテストステップ２０１４からステップ２０１６へ移る。ステップ２０１６では、リストトップが、新たに割り当てられたデータ要素Ｔを指し示すように設定される。ステップ２０１６に続いて、ステップ２０１８では、リスト１８００の終点の経過を追跡するリストエンド要素ＬＥも、新たに割り当てられたデータ要素Ｔを指し示すように設定される。ステップ２０１８に続いて、処理は完了する。
【０２５７】
テストステップ２０１４において、リストトップがヌルに等しくないと判断されると、制御はテストステップ２０１４からステップ２０２２へ移る。ステップ２０２２では、リストエンドポインタが指し示すデータ要素の次のフィールド（ＬＥ．ＮＥＸＴ）が、新たに割り当てられたデータ要素Ｔを指し示すように設定される。ステップ２０２２に続いてステップ２０２４では、リストエンドポインタＬＥが、新たに割り当てられたデータ要素Ｔに等しく設定される。ステップ２０２４に続いて、処理は完了する。
【０２５８】
図４８を参照して、フローチャート２０５０は、図４５のフローチャート１８５０の廃棄ステップ１８６６に関連して、最小記憶ローカル宛先１７８８により実行されるステップを示している。本明細書の一実施の形態では、データが、トラック番号（図４６の実施の形態）に従ってリンクリスト１８００に記憶されているのか、それとも受信順序（図４７の実施の形態）に従ってリンクリスト１８００に記憶されているのかにかかわらず、廃棄について同じ処理を使用することができる。データを廃棄するのに使用される技法は、データを追加するのに使用される技法から独立したものとすることができることに留意されたい。
【０２５９】
フローチャート２０５０の処理は最初のステップ２０５２で開始する。ステップ２０５２では、一時変数Ｐ１が、リンクリスト１８００の最初の要素を指し示すリストトップ変数に等しく設定される。ステップ２０５２に続いてテストステップ２０５４では、Ｐ１がヌルに等しいかどうかが判断される。等しい場合、処理は完了する。等しくない場合、制御はテストステップ２０５４からステップ２０５６へ移る。ステップ２０５６では、別の一時変数Ｐ２が、Ｐ１が指し示すデータ要素の次のフィールドに等しく設定される（すなわち、Ｐ１．ＮＥＸＴに等しく設定される）。ステップ２０５６に続いてテストステップ
２０５８では、Ｐ２がヌルを指し示すかどうかが判断される。指し示す場合、処理は完了する。指し示さない場合、制御はテストステップ２０５８からテストステップ２０６２へ移る。テストステップ２０６２は、Ｐ２が指し示すデータ要素のフィールドのサイクル番号（Ｐ２．ＣＹＣＮＯ）が、廃棄されるデータのサイクル番号（例えば、ＭＡＸＣＹＣＮＯを法とする（ＣＹＣＮＯ−２））に等しいかどうかを判断する。等しい場合、制御はテストステップ２０６２からステップ２０６４へ移る。ステップ２０６４では、Ｐ１が指し示す要素の次のフィールド（Ｐ１．ＮＥＸＴ）が、Ｐ２が指し示す要素の次のフィールド（Ｐ２．ＮＥＸＴ）に等しく設定される。したがって、Ｐ２が指し示す要素は、リンクリスト１８００から削除される。ステップ２０６４に続いてステップ２０６６では、Ｐ２が指し示す要素が解放される（すなわち、ヒープに戻される）。ステップ２０６６に続いてステップ２０６８では、Ｐ１が、当該Ｐ１が指し示す次のフィールドに等しく設定される（すなわち、Ｐ１＝Ｐ１．ＮＥＸＴ）。ステップ２０６８に続いて、制御はステップ２０５６へ戻って、次の繰り返しが行われる。テストステップ２０６２において、Ｐ１が指し示す要素のサイクル番号フィールドが、廃棄されるデータのサイクル番号に等しくないと判断されると、制御はテストステップ２０６２から、上述したステップ２０６８へ移ることに留意されたい。
【０２６０】
図４２〜図４８に関連して説明した実施の形態では、復旧は常に遠隔宛先１７８６で実行され、記憶されたデータのすべては最小記憶ローカル宛先１７８８から遠隔宛先１７８６復旧へ転送されるので、ＳＤＤＦマップを保持する必要はないことに留意されたい。したがって、転送する必要のある特定のデータの経過を追跡する必要はない。これに加えて、遠隔宛先１７８６が、図４２〜図４８の実施の形態に関連して、常に復旧に使用されるので、どのデバイスが復旧に使用されるかの経過を追跡するトークンも、他のどのメカニズムも有する必要はない。さらに、トークンもＳＤＤＦマップも存在しないので、図２９および図３０の処理を遠隔宛先で実行する必要はない。
【０２６１】
図４９を参照して、フローチャート２１００は、例えば、送信元グループ１７８２が動作状態を停止した時に、遠隔宛先１７８６における復旧に関連して実行されるステップを示している。処理は最初のステップ２１０２で開始する。最初のステップ２１０２では、送信元グループ１７８２と遠隔宛先１７８６と最小記憶ローカル宛先１７８８との間のリンクがドロップされる。ステップ２１０２におけるリンクのドロップは、図３１のフローチャート１３６０のステップ１３６２におけるリンクのドロップと同様である。ステップ２１０２に続いてステップ２１０４では、順序書き込みが終了する。ステップ２１０４における順序書き込みの終了は、図３１のフローチャート１３６０のステップ１３６６における順序書き込みの終了と同様である。
【０２６２】
ステップ２１０４に続いてステップ２１０６では、すべてのデータが、最小記憶ローカル宛先１７８８から遠隔宛先１７８６へ転送される。このデータは、リンクリスト１８００のデータ要素の順序に従って転送することができる。したがって、例えば、リンクリスト１８００が、最小記憶ローカル宛先１７８８への書き込みの時系列に従って記憶される場合（図４７に示す実施の形態）、データは、書き込みの時系列に従って、最小記憶ローカル宛先１７８８から遠隔宛先１７８６へ転送される。あるいは、データが、対応する標準論理デバイスにストレージロケーションの順序でリンクリスト１８００に記憶される場合（図４６の実施の形態）、データは、その順序で、最小記憶ローカル宛先１７８８から遠隔宛先１７８６へ転送することができる。ステップ２１０６に続いて、処理は完了し、オペレーションは、最も最新のデータを有する遠隔記憶装置１７８６を使用して再開することができる。
【０２６３】
図５０を参照して、略図２１２０は資源の共有を示している。この略図２１２０は、図４２の送信元グループ１７８２および遠隔宛先１７８６と同様の送信元グループ２１２２
および遠隔宛先２１２６を含む。また、略図２１２０は、最小記憶ローカル宛先２１２８も示している。この最小記憶ローカル宛先２１２８は、無関係なストレージシステムによって共有可能である点を除いて、図４２の最小記憶ローカル宛先１７８８と同様のものである。最小記憶ローカル宛先２１２８は、任意のタイプの記憶装置とすることができることに留意されたい。この任意のタイプの記憶装置には、ＥＭＣ社が提供するシンメトリックスデバイス、パーソナルコンピュータ、またはデータを記憶できて本明細書で説明した機能を提供できる他の任意のデバイスが含まれることに留意されたい。
【０２６４】
また、この略図は、第２の送信元グループ２１２６’および第２の遠隔宛先２１２２’も示している。一方、送信元グループ２１２２’は、送信元グループ２１２２によっても使用される最小記憶ローカル宛先２１２８へデータを転送する。復旧が送信元グループ２１２２、２１２２’の一方または双方に必要になると、復旧データは、最小記憶ローカル宛先２１２８によって、遠隔宛先２１２６、２１２６’の一方または双方へ提供される。本明細書の一実施の形態では、最小記憶ローカル宛先２１２８は、送信元グループ２１２２’用に記憶されたデータとは別のロケーションに、送信元グループ２１２２からのデータを記憶する。
【０２６５】
また、略図２１２０は、第３の送信元グループ２１２２”および第３の遠隔宛先２１２６”も示している。第３の送信元グループ２１２２”も、最小記憶ローカル宛先２１２８へデータを転送する。これに加えて、復旧が必要になると、最小記憶ローカル宛先２１２８は、復旧データを遠隔宛先２１２６”へ転送することもできる。
【０２６６】
最小記憶ローカル宛先に接続される送信元グループおよび遠隔宛先の個数は、最小記憶ローカル宛先の記憶容量および処理能力によって制限することができる。また、単一の記憶装置を複数の送信元グループ用の遠隔宛先として使用できることにも留意されたい。
【０２６７】
本発明をさまざまな実施の形態に関連して開示してきたが、本発明に対する変更は当業者には容易に明らかとなろう。したがって、本発明の精神および範囲は添付した特許請求の範囲において述べられる。
【図面の簡単な説明】
【０２６８】
【図１】本明細書で説明するシステムに関連して使用されるホスト、ローカル記憶装置、および遠隔データ記憶装置を示す概略図。
【図２】本明細書で説明するシステムに関連して使用されるホストとローカル記憶装置と遠隔データ記憶装置との間のデータのフローを示す概略図。
【図３】本明細書で説明するシステムによるローカル記憶装置の大量のデータ・セットの作成および操作を行う項目を示す概略図。
【図４】本明細書で説明するシステムに関連して使用されるスロットのデータ構造体を示す略図。
【図５】本明細書で説明するシステムによる、ホストによる書き込みに応答したホストアダプタ（ＨＡ）のオペレーションを示すフローチャート。
【図６】本明細書で説明するシステムによるローカル記憶装置から遠隔記憶装置へのデータの転送を示すフローチャート。
【図７】本明細書で説明するシステムによる遠隔記憶装置の大量のデータ・セットの作成および操作を行う項目を示す概略図。
【図８】本明細書で説明するシステムによるローカル記憶装置から１ａコミット指示子を受信することに関連して遠隔記憶装置により実行されるステップを示すフローチャート。
【図９】本明細書で説明するシステムによる遠隔記憶装置における送信データの記憶を示すフローチャート。
【図１０】本明細書で説明するシステムによるローカル記憶装置がシーケンス番号をインクリメントすることに関連して実行されるステップを示すフローチャート。
【図１１】本明細書で説明するシステムの代替的な一実施の形態によるローカル記憶装置の大量のデータ・セットの作成および操作の項目を示す概略図。
【図１２】本明細書で説明するシステムの代替的な一実施の形態による、ホストによる書き込みに応答したホストアダプタ（ＨＡ）のオペレーションを示すフローチャート。
【図１３】本明細書で説明するシステムの代替的な一実施の形態によるローカル記憶装置から遠隔記憶装置へのデータの転送を示すフローチャート。
【図１４】本明細書で説明するシステムによる、複数のローカル記憶装置および複数の遠隔記憶装置をホストと共に示す概略図。
【図１５】本明細書で説明するシステムに関連して使用されるマルチボックスモードテーブルを示す略図。
【図１６】本明細書で説明するシステムによるマルチボックスモードテーブルの変更を示すフローチャート。
【図１７】本明細書で説明するシステムによる、ホストによるサイクル切り換えを示すフローチャート。
【図１８】本明細書で説明するシステムによるローカル記憶装置がシーケンス番号をインクリメントすることに関連して実行されるステップを示すフローチャート。
【図１９】本明細書で説明するシステムによるローカル記憶装置から遠隔記憶装置へのデータの転送を示すフローチャート。
【図２０】本明細書で説明するシステムの代替的な一実施の形態によるローカル記憶装置から遠隔記憶装置へのデータの転送を示すフローチャート。
【図２１】本明細書で説明するシステムによる遠隔記憶装置から対応するローカル記憶装置へのアクティブな空指示子メッセージの提供を示すフローチャート。
【図２２】本明細書で説明するシステムによる複数のホストを有する複数のローカル記憶装置および複数の遠隔記憶装置を示す概略図。
【図２３】本明細書で説明するシステムによるデータ復旧に関連して遠隔記憶装置により実行される処理を示すフローチャート。
【図２４】本明細書で説明するシステムによるデータ復旧に関連してホストにより実行される処理を示すフローチャート。
【図２５】本明細書で説明するシステムによる記憶装置、メモリ、複数のディレクタ、および通信モジュールを示す概略図。
【図２６】本明細書で説明するシステムによる送信元グループ、ローカル宛先、および遠隔宛先を示す概略図。
【図２７】本明細書で説明するシステムによるデータ復旧パラメータを初期化するためにローカル宛先によって実行されるプロセスを示すフローチャート。
【図２８Ａ】本明細書で説明するシステムによる非故障モードの期間中のデータの受信に関連してローカル宛先が実行するプロセスを示すフローチャート。
【図２８Ｂ】本明細書で説明するシステムによる非故障モードの期間中のデータの受信に関連してローカル宛先が実行できる代替的なプロセスを示すフローチャート。
【図２８Ｃ】本明細書で説明するシステムによる非故障モードの期間中のデータの受信に関連してローカル宛先が実行できる代替的なプロセスを示すフローチャート。
【図２９】本明細書で説明するシステムによるデータ復旧パラメータを初期化するためにローカル宛先によって実行されるプロセスを示すフローチャート。
【図３０】本明細書で説明するシステムによる故障復旧データの収集に関連して遠隔宛先により実行されるプロセスを示すフローチャート。
【図３１】本明細書で説明するシステムによる故障復旧に関連して実行されるプロセスを示すフローチャート。
【図３２】本明細書で説明するシステムによる順序書き込みの終了に関連して実行される処理を示すフローチャート。
【図３３】本明細書で説明するシステムによるローカル宛先から遠隔宛先へのデータの送信に関連して実行される処理を示すフローチャート。
【図３４】本明細書で説明するシステムによるエラー復旧パラメータのリセットに関連してローカル宛先により実行されるプロセスを示すフローチャート。
【図３５】本明細書で説明するシステムによるエラー復旧パラメータのリセットに関連して遠隔宛先により実行されるプロセスを示すフローチャート。
【図３６】本明細書で説明するシステムによる送信元グループの構成を示す略図。
【図３７】本明細書で説明するシステムによる送信元グループの別の構成を示す略図。
【図３８】本明細書で説明するシステムによるローカル記憶装置から遠隔記憶装置へデータを転送する代替的な一実施の形態を示すフローチャート。
【図３９】本明細書で説明するシステムによる遠隔記憶装置上で大量のデータ・セットを作成して操作する項目を示す概略図。
【図４０】本明細書で説明するシステムによる遠隔記憶装置によって受信されたデータを含むスロットへ論理デバイスのロケーションをマッピングするのに使用されるテーブルを示す略図。
【図４１】本明細書で説明するシステムによる遠隔記憶装置によって受信されたデータを含むスロットへ論理デバイスのロケーションをマッピングするのに使用されるテーブルの別の実施の形態を示す略図。
【図４２】本明細書で説明するシステムの一実施の形態による送信元グループ、最小記憶ローカル宛先、および遠隔宛先を示す概略図。
【図４３】本明細書で説明するシステムの一実施の形態による最小記憶ローカル宛先におけるデータストレージを示す概略図。
【図４４】本明細書で説明するシステムの一実施の形態による最小記憶ローカル宛先におけるデータストレージに使用されるデータ要素を示す略図。
【図４５】本明細書で説明するシステムの一実施の形態による最小記憶ローカル宛先がデータを受信することに関連して実行されるステップを示すフローチャート。
【図４６】本明細書で説明するシステムの一実施の形態による最小記憶ローカル宛先がデータを追加することに関連して実行されるステップを示すフローチャート。
【図４７】本明細書で説明するシステムの別の実施の形態による最小記憶ローカル宛先がデータを追加することに関連して実行されるステップを示すフローチャート。
【図４８】本明細書で説明するシステムの一実施の形態による最小記憶ローカル宛先がデータを削除することに関連して実行されるステップを示すフローチャート。
【図４９】本明細書で説明するシステムの一実施の形態によるデータ復旧に関連して実行されるステップを示すフローチャート。
【図５０】本明細書で説明するシステムの別の実施の形態による最小記憶ローカル宛先に接続された複数の送信元グループおよび遠隔宛先を示す概略図。
【符号の説明】
【０２６９】
２２・・・ホストプロセッサ。２４、７０３，７０４、７０５・・・ローカル記憶装置。２６、７０６，７０７，７０８・・・遠隔記憶装置。５２、５４・・・データ・セット。
１２０４・・・ローカル宛先。１２０６・・・遠隔宛先。２１２８・・・最小記憶ローカル宛先。
【図１】
2006107450.tif 000003
【図２】
2006107450.tif 000004
【図３】
2006107450.tif 000005
【図４】
2006107450.tif 000006
【図５】
2006107450.tif 000007
【図６】
2006107450.tif 000008
【図７】
2006107450.tif 000009
【図８】
2006107450.tif 000010
【図９】
2006107450.tif 000011
【図１０】
2006107450.tif 000012
【図１１】
2006107450.tif 000013
【図１２】
2006107450.tif 000014
【図１３】
2006107450.tif 000015
【図１４】
2006107450.tif 000016
【図１５】
2006107450.tif 000017
【図１６】
2006107450.tif 000018
【図１７】
2006107450.tif 000019
【図１８】
2006107450.tif 000020
【図１９】
2006107450.tif 000021
【図２０】
2006107450.tif 000022
【図２１】
2006107450.tif 000023
【図２２】
2006107450.tif 000024
【図２３】
2006107450.tif 000025
【図２４】
2006107450.tif 000026
【図２５】
2006107450.tif 000027
【図２６】
2006107450.tif 000028
【図２７】
2006107450.tif 000029
【図２８Ａ】
2006107450.tif 000030
【図２８Ｂ】
2006107450.tif 000031
【図２８Ｃ】
2006107450.tif 000032
【図２９】
2006107450.tif 000033
【図３０】
2006107450.tif 000034
【図３１】
2006107450.tif 000035
【図３２】
2006107450.tif 000036
【図３３】
2006107450.tif 000037
【図３４】
2006107450.tif 000038
【図３５】
2006107450.tif 000039
【図３６】
2006107450.tif 000040
【図３７】
2006107450.tif 000041
【図３８】
2006107450.tif 000042
【図３９】
2006107450.tif 000043
【図４０】
2006107450.tif 000044
【図４１】
2006107450.tif 000045
【図４２】
2006107450.tif 000046
【図４３】
2006107450.tif 000047
【図４４】
2006107450.tif 000048
【図４５】
2006107450.tif 000049
【図４６】
2006107450.tif 000050
【図４７】
2006107450.tif 000051
【図４８】
2006107450.tif 000052
【図４９】
2006107450.tif 000053
【図５０】
2006107450.tif 000054