説明

記憶装置、制御装置および記憶装置の制御方法

【課題】災害耐性の高い、順序性を保証したバックアップが可能な記憶装置、制御装置、及び記憶装置の制御方法を提供する。
【解決手段】記憶装置に、第1の記憶手段に記憶した第1のデータを第2の記憶手段に記憶するデータ記憶手段と、前記第2の記憶手段の使用状況に応じて、前記データ群を前記第2の記憶手段から読み出して第3の記憶手段に退避する退避手段と、前記第2の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力するデータ群出力手段と、使用していない、複数の前記第2の記憶手段に、前記第3の記憶手段に退避された前記データ群を記憶する復旧手段と、サスペンドの指示を受けると、既に前記第2の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力し、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させるサスペンド手段と、を備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、順序性を保証したコピー機能を有する記憶装置、制御装置および記憶装置の制御方法に関する。
【背景技術】
【0002】
従来、分散キャッシュメモリ型のストレージシステムを採用するRAID(Redundant Arrays of Inexpensive Disks)装置では、性能や信頼性の向上のために、ストレージに対するデータの入出力を制御する制御モジュールを複数備える冗長構成が採用されている。そして、制御モジュール毎に、論理ボリュームに対するデータのRead/Write処理が実行される。
【0003】
このようなRAID装置は、信頼性等の向上のために、順序性を保証したコピー機能を備える。
例えば、RAID装置は、上位装置からのライト命令により更新されたデータのコピーを、複数のキャッシュバッファに記憶すると、順序性を保証するために、複数のキャッシュバッファに記憶されたデータをバッファセットと呼ばれる単位でコピー先装置に送信している。
【0004】
上記技術に関連して、書き込みデータを記憶する書き込みバッファの使用状況を監視し、バッファの空き容量が少なるとバッファ内のデータを、RAID0や0+1などのディスクシステムに書き出し、使用状況が好転すると待避したデータをバッファに書き戻すバックアップ装置について知られている。
【0005】
また、複数のリモートコピーがそれぞれ非同期で実行される場合でも、ボリューム間の記憶内容を整合させるストレージシステムについて知られている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2006−268420号公報
【特許文献2】特開2007−264946号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかし、場合によっては、上述したキャッシュバッファが枯渇してしまう場合が考えられる。例えば、装置間を接続する回線能力が低い場合、装置間を接続する回線が不安定である場合、上位装置からのライト命令によるデータの更新量がキャッシュバッファの容量を超える場合などである。
【0008】
キャッシュバッファが枯渇してしまうと、順序性を保証したコピーを継続することができなくなってしまう可能性がある。
この場合、キャッシュバッファの枯渇を回避して順序性を保証したコピーを継続するために、別途磁気ディスク装置などの記憶装置上に退避用バッファを設けることが考えられる。キャッシュバッファの使用状況に応じて、キャッシュバッファ上のデータを退避用バッファに一時的に退避し、コピー先装置へ送信する時に退避用バッファからキャッシュバッファ上へデータを戻してから送信することで、キャッシュバッファの枯渇を回避できるからである。
【0009】
一方、順序性を保証したコピー中のセッションをサスペンド状態にする機能がある。従来、RAID装置は、順序性を保証したコピー中のセッションに対するサスペンドの指示を受けると、サスペンド対象のセッションのコピーデータを全てコピー先装置に反映し、コピー先装置と等価状態になってからサスペンド状態に移行していた。コピーデータの順序性を保証するためである。そのため、RAID装置は、サスペンド対象のセッションのコピーデータがコピー先装置と等価状態となるまで、サスペンド状態に移行することができなかった。コピーデータを全てコピー先装置に反映して等価状態にしてからサスペンド状態に移行する処理を「等価サスペンド処理」という。
【0010】
上述のように、RAID装置がコピー先装置と等価状態になるには、RAID装置のキャッシュバッファに記憶されている、サスペンド対象のセッションのコピーデータが、全てコピー先装置に反映される必要がある。
【0011】
そのため、RAID装置は、上位装置からサスペンドコマンドを受けると、キャッシュバッファ上の、サスペンド対象のセッションのコピーデータを監視し、サスペンド対象のセッションのコピーデータを全てコピー先装置に送信した時点でサスペンド状態に移行していた。
【0012】
しかし、大容量の退避用バッファを使用する場合、キャッシュバッファに記憶されているコピーデータだけでなく、退避用バッファに記憶されているコピーデータも、コピー先装置に反映する必要がある。そのため、上位装置からサスペンドコマンドを受けてから、サスペンド状態に移行するまでに、膨大な時間を要していた。
【0013】
例えば、図1に示すストレージシステム100の運用を考える。
図1に示すストレージシステム100は、東京に配置されたRAID装置110と、名古屋に配置されたRAID装置120と、大阪に配置されたRAID装置130と、を備える。そして、RAID装置110とRAID装置120とはネットワーク140を介して通信可能に接続している。また、RAID装置120とRAID装置130とはネットワーク150を介して通信可能に接続している。
【0014】
図2は、ストレージシステム100のバックアップ処理の運用例を示す図である。
セッションAは、RAID装置110からRAID装置120への、順序性を保証した非同期コピーを実行するセッションである。また、セッションBは、RAID装置120からRAID装置130へのリモートコピーを実行するセッションである。
【0015】
例えば、23日の0:00に等価サスペンドの指示を受けると、RAID装置110は、セッションAにおいて、等価サスペンド処理の実行を開始する。そして、例えば、23日の3:00に等価サスペンド処理が完了すると、サスペンド対象のセッションAのコピーデータが全てRAID装置120に反映される。すなわち、RAID装置120は、23日の0:00時点のRAID装置110と等価状態となる。
【0016】
また、セッションBでは、23日の3:00から、RAID装置120は、前回からの変更内容をRAID装置130にリモートコピーを開始する。このリモートコピーが完了すると、RAID130は、23日の0:00時点のRAID装置110と等価状態となる。
【0017】
以上の処理が完了すると、RAID120および130は、23日の0:00時点のRAID装置110と等価状態となる。
しかし、上述したように、退避用バッファを使用したRAID装置110では、等価サスペンド処理に非常に時間がかかる。そのため、等価サスペンド処理を実行中に、ストレージシステム100が被災する確率も高くなってしまうという問題がある。
【0018】
例えば、図2に示す23日の0:00〜3:10までの間に、東京に配置したRAID装置110と、名古屋に配置したRAID装置120と、がともに被災した場合、22日の業務データが全て失われる場合も考えられる。
【0019】
本記憶装置は、上述した問題に鑑みてなされたものであり、その解決しようとする課題は、災害耐性が高いバックアップが可能な記憶装置、制御装置および記憶装置の制御方法を提供することである。
【課題を解決するための手段】
【0020】
本記憶装置の1つの観点によれば、本記憶装置は、上位装置から送信される第1のデータを記憶する第1の記憶手段と前記第1のデータを一時的に記憶する複数の第2の記憶手段とを有する記憶装置において、以下の構成要素を備える。
【0021】
データ記憶手段は、前記第1の記憶手段に記憶した前記第1のデータを前記第2の記憶手段に記憶する。
第3の記憶手段は、複数の前記第2の記憶手段それぞれに記憶された第2のデータを含むデータ群の退避に使用する記憶手段である。
【0022】
退避手段は、前記第2の記憶手段の使用状況に応じて、前記データ群を前記第2の記憶手段から読み出して前記第3の記憶手段に退避する。
データ群出力手段は、前記第2の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力する。
【0023】
復旧手段は、使用していない、複数の前記第2の記憶手段に、前記第3の記憶手段に退避された前記データ群を記憶する。
サスペンド手段は、サスペンドの指示を受けると、前記データ群出力手段に、既に前記第2の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力させる。その後、サスペンド手段は、前記データ群出力手段による、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させる。
【発明の効果】
【0024】
本記憶装置によると、災害耐性が高いバックアップが可能な記憶装置、制御装置および記憶装置の制御方法を提供することができる。
【図面の簡単な説明】
【0025】
【図1】ストレージシステムを示す図である。
【図2】ストレージシステムのバックアップ処理の運用例を示す図である。
【図3】第1の実施例に係る記憶装置を使用したストレージシステムの構成例を示す図である。
【図4】第2の実施例に係るRAID装置を使用したストレージシステムの構成例を示す図である。
【図5】第2の実施例に係るセッション管理テーブルの例を示す図である。
【図6】第2の実施例に係るバッファ管理テーブルの例を示す図である。
【図7】第2の実施例に係るバッファセットテーブルの例を示す図である。
【図8】第2の実施例に係る未転送サスペンドコマンド受信処理を示すフローチャートである。
【図9】第2の実施例に係る未転送サスペンドコマンドデキュー監視設定の処理を示すフローチャートである。
【図10】第2の実施例に係るI/O処理を示すフローチャートである。
【図11】第2の実施例に係る非同期コピーの概要を示すフローチャートである。
【図12】第2の実施例に係るステージングを示すフローチャートである。
【図13】第2の実施例に係る送信処理を示すフローチャートである。
【図14】第2の実施例に係る未転送サスペンドコマンドデキュー監視処理を示すフローチャートである。
【図15】第2の実施例に係るサスペンド移行処理を示すフローチャートである。
【図16】第2の実施例に係る未転送サスペンド監視処理を示すフローチャートである。
【図17】第2の実施例に係るレジュームコマンド処理を示すフローチャートである。
【図18】第2の実施例に係る非同期コピーを示すフローチャートである。
【図19】第2の実施例に係るプライマリ装置に備わる制御モジュールの具体的な構成例を示す図である。
【図20】第2の実施例に係るストレージシステムを用いたバックアップシステムの構成例を示す図である。
【図21】第2の実施例に係るバックアップシステムによるバックアップ処理の運用例を示す図である。
【発明を実施するための形態】
【0026】
以下、本実施形態の一例について、図3〜図21に基づいて説明する。なお、以下に説明する実施形態はあくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図ではない。すなわち、本実施形態は、その趣旨を逸脱しない範囲で、各実施例を組み合わせるなど種々変形して実施することができる。
【実施例1】
【0027】
図3は、本実施例に係る記憶装置を使用したストレージシステム300の構成例を示す図である。
ストレージシステム300は、本実施例に係る記憶装置であるプライマリ装置310と、プライマリ装置310のバックアップ用に使用する記憶装置のセカンダリ装置320と、を備える。そして、プライマリ装置310と、セカンダリ装置320とは、ネットワークや専用線、無線などにより互いに通信可能に接続している。
【0028】
プライマリ装置310は、第1の記憶手段311、複数の第2の記憶手段312、データ記憶手段313、第3の記憶手段314、退避手段315、データ群出力手段316、復旧手段317およびサスペンド手段318を備える。プライマリ装置310は、複数の第2の記憶手段312を備える分散キャッシュメモリ型のRAID装置である。
【0029】
第1の記憶手段311は、上位装置330から送信される第1のデータ、例えば、Write命令などのI/O命令で書込みを指示されたWriteデータを記憶する記憶手段である。第1の記憶手段311には、例えば、複数の磁気ディスク装置を用いたディスクアレイなどを使用できる。
【0030】
第2の記憶手段312は、第1のデータを一時的に記憶する記憶手段である。第1のデータは、第2の記憶手段312に記憶される。第2の記憶手段312には、例えば、RAM(Random Access Memory)などの不揮発性メモリを用いることができる。
【0031】
データ記憶手段313は、上位装置330から第1のデータを受信すると、第1のデータを第1の記憶手段311に記憶するとともに、第1のデータを第2の記憶手段312に記憶する。
【0032】
第3の記憶手段314は、複数の第2の記憶手段312それぞれに記憶された第2のデータを含むデータ群を、一時的に退避するために使用する記憶手段である。第3の記憶手段314には、第1の記憶手段311と同様に、例えば、複数の磁気ディスク装置を用いたディスクアレイなどを使用できる。
【0033】
退避手段315は、第2の記憶手段312の使用状況に応じて、例えば、第2の記憶手段312の使用率が閾値を超えると、データ群を第2の記憶手段312から読み出して第3の記憶手段314に退避する。このとき、退避手段315は、例えば、第2の記憶手段312に記憶されているデータ群のうち、最も新しいものから第3の記憶手段314に退避することができる。
【0034】
データ群出力手段316は、順序性を保証するために、第2の記憶手段312に記憶されたデータをデータ群単位でセカンダリ装置320に出力する。一方、セカンダリ装置320は、プライマリ装置310から送信されたデータ群を受信すると、受信したデータ群を自装置に備わる記憶手段に反映する。プライマリ装置310−セカンダリ装置320間で、順序性を保証した、データ群のコピー処理が行われる。このコピー処理は、非同期で行うことができる。
【0035】
復旧手段317は、使用していない、複数の第2の記憶手段312に、第3の記憶手段314に退避されたデータ群を、例えば、最も古いものから順に記憶する。この「使用していない、複数の第2の記憶手段312」には、データ群のセカンダリ装置320への出力が完了して使用しなくなった第2の記憶手段312や、第2の記憶手段312の使用率が閾値以下になった場合の、使用していない第2の記憶手段312、を含むことができる。
【0036】
サスペンド手段318は、サスペンドの指示を受けると、データ群出力手段316に、既に第2の記憶手段312に記憶されているデータ群を全てセカンダリ装置320に出力させる。その後、サスペンド手段318は、データ群出力手段316による、データ群のセカンダリ装置320への出力処理をサスペンド状態に移行させる。「サスペンド状態」とは、プライマリ装置310からセカンダリ装置320へのデータ群のコピー処理を一時中断した状態をいう。
【0037】
以上のように、プライマリ装置310は、例えば、上位装置330からサスペンドの指示を受けると、既に第2の記憶手段312に記憶されているデータ群を全てセカンダリ装置320に出力する。これにより、サスペンドの指示を受けた時点で、第2の記憶手段312に記憶されている全てのデータ群は、順序性が保証されたままセカンダリ装置320に反映される。
【0038】
また、プライマリ装置310は、第2の記憶手段312に記憶されているデータ群のみをセカンダリ装置320に出力してサスペンド状態に移行するので、サスペンドの指示を受けてから短時間でサスペンド状態に移行することができる。
【0039】
その結果、サスペンドの指示を受けてから短時間で、プライマリ装置310の更新内容を、順序性を保証しつつセカンダリ装置320にバックアップすることが可能となる。さらに、セカンダリ装置320のバックアップも速やかに行うことが可能となる。
【0040】
また、サスペンドの指示からサスペンド状態に移行するまでに被災する確率を低く抑えることができるので、災害耐性が高いバックアップを行うことが可能となる。
【実施例2】
【0041】
図4は、本実施例に係るRAID装置を使用したストレージシステム400の構成例を示す図である。
ストレージシステム400は、本実施例に係るRAID装置であるプライマリ装置410と、プライマリ装置410のバックアップ用に使用するRAID装置のセカンダリ装置450と、を備える。プライマリ装置410と、セカンダリ装置450と、はネットワーク470を介して互いに通信可能に接続している。
【0042】
プライマリ装置410は、制御モジュール#00と、制御モジュール#01と、プライマリボリューム420と、退避用ボリューム430と、コピービットマップ用ボリューム440と、を備える分散キャッシュメモリ型のRAID装置である。
【0043】
制御モジュール#00は、キャッシュバッファ411と、後述するセッション管理テーブル500、バッファ管理テーブル600およびバッファセットテーブル700などを記憶するメモリ412と、を備える。
【0044】
キャッシュバッファ411とメモリ412には、例えば、RAMなどの不揮発性メモリを用いることができる。キャッシュバッファ411は、送信データバッファ411aと、管理データバッファ411bと、をそれぞれ8個ずつ備える。
【0045】
送信データバッファ411aには、送信データ、すなわち、セカンダリ装置450に送信するバッファセットデータの一部が記憶される。また、管理データバッファ411bには、送信データの記憶場所など、送信データを管理するための情報である管理データが記憶される。
【0046】
制御モジュール#00は、ホストコンピュータ480から指示されるI/O命令を実行する。また、制御モジュール#00は、メモリ412に記憶されているバッファ管理テーブル600およびバッファセットテーブル700などを使用して、順序性を保証した非同期コピーを実行する。なお、本実施例では、非同期に行うコピー処理の場合を例に説明するが、非同期に行う場合に限定する趣旨ではない。
【0047】
また、制御モジュール#00は、セッション管理テーブル500、バッファ管理テーブル600およびバッファセットテーブル700などを使用して、実行中の非同期コピーをサスペンド状態に移行させる。
【0048】
本実施例では、非同期コピーをサスペンド状態に移行することを「サスペンド処理」という。特に、退避用バッファ431に退避されたバッファセットデータを転送することなくサスペンド状態に移行するサスペンド処理を「未転送サスペンド処理」という。未転送サスペンド処理は、セッション毎に行われる。
【0049】
制御モジュール#01は、キャッシュバッファ413と、後述するセッション管理テーブル500、バッファ管理テーブル600およびバッファセットテーブル700などを記憶するメモリ414と、を備える。
【0050】
キャッシュバッファ413とメモリ414には、例えば、RAMなどの不揮発性メモリを用いることができる。キャッシュバッファ413は、送信データバッファ413aと、管理データバッファ413bと、をそれぞれ8個ずつ備える。
【0051】
送信データバッファ413aには、送信データ、すなわち、セカンダリ装置450に送信するバッファセットデータの一部が記憶される。また、管理データバッファ413bには、送信データの記憶場所など、送信データを管理するための情報である管理データが記憶される。
【0052】
制御モジュール#01は、メモリ412に記憶されているバッファ管理テーブル600およびバッファセットテーブル700などを使用して、順序性を保証した非同期コピーを実行する。また、制御モジュール#01は、セッション管理テーブル500、バッファ管理テーブル600およびバッファセットテーブル700などを使用して、実行中の非同期コピーをサスペンド状態に移行させる。
【0053】
なお、プライマリ装置410では、制御モジュール#00が、マスタ制御モジュールとして動作するものとする。制御モジュール#01は、制御モジュール#00の指示にしたがって、順序性を保証した非同期コピーや未転送サスペンド処理などを実行する。説明を簡単にするために、本実施例では、制御モジュール#00と制御モジュール#01とが連携して動作する処理の主体を「制御モジュール#00」として説明する。
【0054】
プライマリボリューム420、退避用ボリューム430およびコピービットマップ用ボリューム440は、例えば、複数の磁気ディスク装置を含むディスクアレイなどで実現される記憶ユニットである。
【0055】
プライマリボリューム420は、ホストコンピュータ480からのI/O命令で指定されるWriteデータを記憶する記憶ユニットである。本実施例に係るプライマリボリューム420は、2つの論理ボリュームを備える。そして、各論理ボリュームは、それぞれ制御モジュール#00、制御モジュール#01と対応付けられている。
【0056】
退避用ボリューム430は、退避用バッファ431を備える記憶ユニットである。退避用バッファ431は、バッファセットデータを退避するために確保された記憶領域である。
【0057】
コピービットマップ用ボリューム440は、コピービットマップ441を備える記憶ユニットである。コピービットマップ441は、セッション毎に確保されるビットマップテーブルである。
【0058】
コピービットマップ441に含まれるビットは、プライマリボリューム420に含まれる所定のサイズの記憶領域の位置と、対応付けられている。そして、例えば、Writeデータによって変更された、プライマリボリューム420に含まれる記憶領域、の位置に対応付けられたビットには、「1」が設定される。これにより、コピービットマップ441には、Writeデータの内容が書き込まれたプライマリボリューム420の記憶領域の位置、すなわち、ホストコンピュータ480から受信したWriteデータの内容、がビットマップ形式で記憶される。
【0059】
セカンダリ装置450は、制御モジュール#10と、制御モジュール#11と、セカンダリボリューム460と、を備える分散キャッシュメモリ型のRAID装置である。
制御モジュール#10は、キャッシュバッファ451と、後述するセッション管理テーブル500、バッファ管理テーブル600およびバッファセットテーブル700などを記憶するメモリ452と、を備える。
【0060】
キャッシュバッファ451とメモリ452には、例えば、RAMなどの不揮発メモリを用いることができる。キャッシュバッファ451は、受信データバッファ451aと、管理データバッファ451bと、をそれぞれ8個ずつ備える。
【0061】
受信データバッファ451aには、受信データ、すなわち、プライマリ装置410から受信したバッファセットデータの一部が記憶される。また、管理データバッファ451bには、受信データの記憶場所など、受信データを管理するための情報である管理データが記憶される。
【0062】
制御モジュール#10は、メモリ452に記憶されているバッファ管理テーブル600およびバッファセットテーブル700などを使用して、順序性を保証した非同期コピーを実行する。
【0063】
制御モジュール#11は、キャッシュバッファ453と、後述するセッション管理テーブル500、バッファ管理テーブル600およびバッファセットテーブル700などを記憶するメモリ454と、を備える。
【0064】
キャッシュバッファ453とメモリ454には、例えば、RAMなどの不揮発メモリを用いることができる。キャッシュバッファ453は、受信データバッファ453aと、管理データバッファ453bと、をそれぞれ8個ずつ備える。
【0065】
受信データバッファ453aには、受信データ、すなわち、プライマリ装置410から受信するバッファセットデータの一部が記憶される。また、管理データバッファ453bには、受信データの記憶場所など、受信データを管理するための情報である管理データが記憶される。
【0066】
制御モジュール#11は、メモリ454に記憶されているバッファ管理テーブル600およびバッファセットテーブル700などを使用して、順序性を保証した非同期コピーを実行する。
【0067】
なお、セカンダリ装置450では、制御モジュール#10が、マスタ制御モジュールとして動作するものとする。制御モジュール#11は、制御モジュール#10の指示にしたがって、順序性を保証した非同期コピーなどを実行する。説明を簡単にするために、本実施例では、制御モジュール#10と制御モジュール#11とが連携して動作する処理の主体を「制御モジュール#10」として説明する。
【0068】
セカンダリボリューム460は、例えば、複数の磁気ディスク装置を含むディスクアレイなどで実現される記憶ユニットである。セカンダリボリューム460は、プライマリ装置410から送られるバッファセットデータを記憶するユニットである。
【0069】
以下に、ストレージシステム400の動作の概要を説明する。なお、以下の(1)〜(7)は、図4に示す(1)〜(7)に対応している。ただし、ストレージシステム400の動作の順番を限定する趣旨ではない。
【0070】
(1)ホストコンピュータ480からプライマリ装置410に対して、I/O命令、例えばWrite命令が発行されると、制御モジュール#00は、I/O命令にしたがって、Writeデータをプライマリボリューム420に書き込む。
【0071】
(2)制御モジュール#00は、プライマリボリューム420に書き込んだWriteデータを、キャッシュバッファ411の送信データバッファ411aと、キャッシュバッファ413の送信データバッファ413aと、に分散して記憶する。
【0072】
なお、「分散して記憶する」とは、場合によって、キャッシュバッファ411の送信データバッファ411aに記憶し、または、キャッシュバッファ413の送信データバッファ413aに記憶する、という意味である。
【0073】
本実施例では、プライマリボリューム420に備わる論理ボリュームのうち、制御モジュール#00に対応付けられた論理ボリュームに書き込まれたWriteデータは、制御モジュール#00が、キャッシュバッファ411の送信データバッファ411aにWriteデータを記憶する。また、プライマリボリューム420に備わる論理ボリュームのうち、制御モジュール#01に対応付けられた論理ボリュームに書き込まれたWriteデータは、制御モジュール#01が、キャッシュバッファ413の送信データバッファ413aにWriteデータを記憶する。
【0074】
送信データバッファ411aと送信データバッファ413aとに分散して記憶されたデータは、送信データバッファ411aと送信データバッファ413aとの組み合わせ、すなわち、バッファセット毎に管理される。バッファセットに記憶されるバッファセットデータには、バッファセットに記憶された順に、識別番号として世代番号が割当てられる。したがって、世代番号が大きいほど古いデータとなる。
【0075】
図4の例では、キャッシュバッファ411およびキャッシュバッファ413に、8個の送信データバッファがあるので、8個のバッファセットが備わっていることになる。本実施例では、各バッファセットに、識別番号として、00〜07までのバッファセット番号を割当てている。例えば、図4のキャッシュバッファ411および413や、キャッシュバッファ451および453に記載の00〜07は、バッファセット番号を示している。
【0076】
(3)キャッシュバッファ411および413の使用率が閾値を超えると、制御モジュール#00は、例えば、バッファセットに記憶されるバッファセットデータのうち、最も新しい世代を退避用バッファ431に退避するライトバックを行う。図4では、バッファセット番号05のバッファセットaに記憶されているバッファセットデータが、退避用バッファ431にライトバックされた例を示している。
【0077】
(4)制御モジュール#00は、マッチング処理を行った後、バッファセットに記憶されているバッファセットデータを、例えば、最も古い世代から順に、セカンダリ装置450に送信する。このマッチング処理では、送信しようとしているバッファセットデータが記憶されている、プライマリ装置410側のバッファセットと、送信しようとしているバッファセットデータを記憶する、セカンダリ装置450側のバッファセットと、の組み合わが決定される。
【0078】
(5)一方、セカンダリ装置450では、制御モジュール#10が、プライマリ装置410から受信したバッファセットデータを、マッチング処理で決定したバッファセットに記憶していく。そして、プライマリ装置410から受信したバッファセットデータを全てバッファセットに記憶すると、制御モジュール#10は、バッファセットデータをセカンダリボリューム460に展開する。以上のように、プライマリ装置410からセカンダリ装置450には、バッファセット毎にデータの送信が行われるので、順序性を保証した非同期コピーを行うことができる。
【0079】
(6)プライマリ装置410では、送信したバッファセットデータのセカンダリボリューム460への展開が完了した旨の通知を、セカンダリ装置450から受けると、制御モジュール#00は、送信したバッファセットデータが記憶されていたバッファセットを解放する。そして、退避用バッファ431に退避されたバッファセットデータがあれば、例えば、退避用バッファ431に退避されているバッファセットデータのうち最も古い世代を、解放されたバッファセットに記憶するステージングを行う。図4では、退避用バッファ431に記憶されていたバッファセットデータが、バッファセット番号03のバッファセットbにステージングされた例を示している。
【0080】
(7)非同期コピーを実行中に、ホストコンピュータ480がプライマリ装置410に対して未転送サスペンドコマンドを発行すると、制御モジュール#00は、キャッシュバッファ411および413に記憶されている全てのバッファセットデータを、セカンダリ装置450に送信する。この「全てのバッファセットデータ」とは、未転送サスペンドコマンドで指定されたセッションで使用している「全てのバッファセットデータ」である。
【0081】
キャッシュバッファ411および413に記憶されている全てのバッファセットデータをセカンダリ装置450に出力すると、制御モジュール#00は、未転送サスペンドコマンドで指定されたセッションをサスペンド状態に移行する。
【0082】
サスペンド状態に移行すると、制御モジュール#00は、退避用バッファ431に記憶されているバッファセットデータをステージングし、ステージングしたバッファセットデータの内容が書き込まれたプライマリボリューム420の記憶領域の位置をコピービットマップ441に記憶する。また、サスペンド状態の間、制御モジュール#00は、ホストコンピュータ480からI/O命令を受信すると、I/O命令にしたがって、Writeデータをプライマリボリューム420に書き込む。そして、制御モジュール#00は、Writeデータの内容が書き込まれたプライマリボリューム420の記憶領域の位置を、コピービットマップ441に記憶する。レジュームコマンドを受信したときに、未転送サスペンドコマンド受信時に退避用バッファ431に記憶されていたバッファセットデータの内容と、未転送サスペンドコマンド受信後の、プライマリボリューム420の変更内容を、セカンダリ装置450に反映させるためである。
【0083】
なお、図4では、プライマリ装置410−セカンダリ装置450間をネットワーク470で接続した場合を示したが、専用線や無線などを用いて互いに通信可能に接続してもよい。
【0084】
また、図4では、プライマリ装置410とセカンダリ装置450が、制御モジュールを2つ備えるRAID装置である場合を示したが、制御モジュールの数を限定する趣旨ではない。プライマリ装置410とセカンダリ装置450は、分散キャッシュメモリ型のRAID装置であればよく、制御モジュールの数やキャッシュバッファの数を限定する趣旨ではない。
【0085】
また、図4では、理解を容易にするために、例えば、キャッシュメモリ411と、メモリ412と、を独立した記憶ユニットとして示しているが、キャッシュメモリ411と、メモリ412と、は1つの記憶ユニットの一部の記憶領域を使用してもよいのは当然である。
【0086】
また、図4では、理解を容易にするために、例えば、プライマリボリューム420と、退避用バッファ431と、コピービットマップ441と、を独立した記憶ユニットとして示しているが、1または2以上の記憶ユニットを用いて実現してもよい。
【0087】
また、図4では、例えば、キャッシュバッファ411および413に、8個のバッファセットを確保した場合の例を示したが、バッファセットの数を限定する趣旨でないのは当然である。
【0088】
図4に説明した構成において、「データ記憶手段」、「退避する退避手段」、「データ群出力手段」、「復旧手段」および「サスペンド手段」は、制御モジュール#00および制御モジュール#01が、所定のプログラムを実行することによって実現することができる。
【0089】
また、「第1の記憶手段」は、プライマリボリューム420を用いて実現することができる。「第2の記憶手段」は、送信データバッファ411aや送信データバッファ413aを用いて実現することができる。「第3の記憶手段」は、退避用バッファ431を用いて実現することができる。「第4の記憶手段」は、コピービットマップ441を用いて実現することができる。「データ群」は、バッファセットデータを用いて実現することができる。
【0090】
図5は、本実施例に係るセッション管理テーブル500の例を示す図である。
セッション管理テーブル500には、セッションステータスと、セッション番号と、が含まれる。さらに、セッション管理テーブル500には、未転送サスペンドコマンドデキュー監視世代番号と、未転送監視世代番号と、未転送サスペンド処理フラグと、未転送サスペンドキューnextと、未転送サスペンドキューprevと、が含まれる。
【0091】
セッションステータスは、セッションの状態を示す情報である。セッションステータスには、「アクティブ」、「コピー中」または「サスペンド」のいずれかが設定される。「アクティブ」は、セッションが実行されている状態を示す。「コピー中」は、アクティブにはできない状態を示す。例えば、「コピー中」は、レジューム処理時に設定される。「サスペンド」は、セッションがサスペンド状態であることを示す。
【0092】
セッション番号は、セッション毎に割当てられる識別番号である。
未転送サスペンドコマンドデキュー監視世代番号は、未転送サスペンドコマンド受信時に、ステージングに使用されているバッファセットに記憶されているバッファセットデータのうち、最も古いバッファセットデータの世代番号を示す情報である。対象となるバッファセットデータが存在しない場合、例えば、「0xFFFF」などを設定することができる。
【0093】
未転送監視世代番号は、未転送サスペンドコマンド受信時に、バッファセットに記憶されているバッファセットデータのうち、最も新しいバッファセットデータの世代番号を示す情報である。対象となるバッファセットデータが存在しない場合、例えば、「0xFFFF」などを設定することができる。
【0094】
未転送サスペンド処理フラグは、セッションが、未転送サスペンド処理の対象か否かを示す情報である。未転送サスペンド処理フラグが「オン」の場合、セッションが、未転送サスペンド処理の対象であることを示し、未転送サスペンド処理フラグが「オフ」の場合、セッションが、未転送サスペンド処理の対象でないことを示す。
【0095】
未転送サスペンドコマンドキューnextは、現在のセッションの次に、未転送サスペンドコマンドによる処理の対象のセッションを示す情報である。未転送サスペンドコマンドキューprevは、現在のセッションの前に、未転送サスペンドコマンドによる処理の対象のセッションを示す情報である。対象となるセッションが存在しない場合、未転送サスペンドコマンドキューnextおよび未転送サスペンドコマンドキューprevには、例えば、「0xFFFF」などを設定することができる。
なお、図5には、セッション番号が0のセッション管理テーブル501と、セッション番号が1のセッション管理テーブル502を例示している。
【0096】
図6は、本実施例に係るバッファ管理テーブル600の例を示す図である。
バッファ管理テーブル600には、未転送サスペンドコマンドキューtopと、未転送サスペンドコマンドキューbtmと、が含まれる。また、バッファ管理テーブル600には、ライトバックバッファセットtopと、ライトバックバッファセットbtmと、が含まれる。また、バッファ管理テーブル600には、ステージングバッファセットtopと、ステージングバッファセットbtmと、が含まれる。また、バッファ管理テーブル600には、ライトバックポインタと、ステージングポインタと、が含まれる。
【0097】
未転送サスペンドコマンドキューtopは、未転送サスペンドコマンドによる処理の対象のセッションのうち先頭のセッションを示す。また、未転送サスペンドコマンドキューbtmは、未転送サスペンドコマンドによる処理の対象のセッションのうち最後尾のセッションを示す。
【0098】
未転送サスペンドコマンドによる処理の対象のセッションは、未転送サスペンドコマンドキューtop、未転送サスペンドコマンドキューbtm、未転送サスペンドコマンドキューnext、および未転送サスペンドコマンドキューprevを使用したキュー制御で管理される。
【0099】
未転送サスペンドコマンドキューtopと未転送サスペンドコマンドキューbtmには、セッション番号が設定される。対象のセッションがない場合、例えば、0xFFFFを設定することができる。
【0100】
ライトバックバッファセットtopとライトバックバッファセットbtmは、連続する1または2以上のライトバックに使用するバッファセットを管理するための情報である。ライトバックバッファセットtopは、ライトバックに使用するバッファセットのうち、先頭のバッファセットを示す。また、ライトバックバッファセットbtmは、ライトバックに使用するバッファセットのうち、最後尾のバッファセットを示す。
ライトバックバッファセットtopとライトバックバッファセットbtmには、バッファセット番号が設定される。
【0101】
図6の例には、バッファセット番号2からバッファセット番号3までのバッファセットを、ライトバックに使用している場合の例を示している。ただし、ライトバックに使用するバッファセットは、バッファセットの使用状況に応じて変動させることができる。
【0102】
ステージングバッファセットtopとステージングバッファセットbtmは、連続する1または2以上のステージングに使用するバッファセットを管理するための情報である。ステージングバッファセットtopは、ステージングに使用するバッファセットのうち、先頭のバッファセットを示す。また、ステージングバッファセットbtmは、ステージングに使用するバッファセットのうち、最後のバッファセットを示す。
ステージングバッファセットtopとステージングバッファセットbtmには、バッファセット番号が設定される。
【0103】
図6の例には、バッファセット番号0からバッファセット番号1までのバッファセットを、ステージングに使用している場合の例を示している。ただし、ステージングに使用するバッファセットは、バッファセットの使用状況に応じて変動させることができる。
【0104】
ライトバックポインタは、ライトバックの対象となるバッファセットデータの世代番号を保持する情報である。また、ステージングポインタは、最後にステージングが行われたバッファセットデータの世代番号を保持する情報である。
【0105】
図7は、本実施例に係るバッファセットテーブル700の例を示す図である。
バッファセットテーブル700には、バッファセット番号と、世代番号と、バッファセットリンクprevと、バッファセットリンクnextと、が含まれる。
【0106】
バッファセット番号は、バッファセット毎に割当てられる識別番号である。
世代番号は、バッファセットデータ毎に割当てられる識別番号である。例えば、最初にバッファセットに記憶される際に、バッファセットデータに割当てられる。
【0107】
バッファセットリンクprevは、現在のバッファセットの前にキューされているバッファセットのバッファセット番号を示す情報である。また、バッファセットリンクnextは、現在のバッファセットの次にキューされているバッファセットのバッファセット番号を示す情報である。バッファセットは、バッファセットリンクprevとバッファセットリンクnextとを使用したキュー制御により管理される。バッファセット単位で非同期コピーを行うことにより、順序性を保証したコピーを行うことができる。
なお、図7には、バッファセット番号00〜03までのバッファセットについての、バッファセットテーブル701〜704を例示している。
【0108】
図8および図9は、本実施例に係る未転送サスペンドコマンド受信処理を示すフローチャートである。
ステップS801において、未転送サスペンドコマンドを受信すると、制御モジュール#00は、以下の処理を開始する。
【0109】
ステップS802において、制御モジュール#00は、未転送サスペンド処理を予約する。例えば、制御モジュール#00は、未転送サスペンドコマンド実行時に指定されたセッションのセッション管理テーブル500を参照し、未転送サスペンド処理フラグを「オン」に設定する。このように、未転送サスペンド処理フラグを「オン」に設定することにより、未転送サスペンド処理が予約される。
【0110】
なお、本実施例では、未転送サスペンドコマンドを非同期で実行することができるようにするため、未転送サスペンドコマンド受信時には、未転送サスペンド処理の予約を行っている。
【0111】
未転送サスペンド処理が予約されたセッションは、後述するステップS803で特定される、キャッシュバッファ411および413に記憶されているバッファセットデータ、に書き込まれた記憶領域の位置がコピービットマップ441に記憶されるまで、図14等で後述する未転送サスペンドコマンドデキュー監視が行われる。そして、未転送サスペンドコマンドデキュー監視が終了すると、未転送サスペンド処理が予約されたセッションは、図15で後述するサスペンド移行処理によりサスペンド状態に移行する。
【0112】
ステップS803において、制御モジュール#00は、未転送サスペンドコマンドデキュー監視設定を行う。ステップS803では、サスペンド状態に移行する前に、セカンダリ装置450に送信するバッファセットデータの範囲を特定する。このバッファセットデータの範囲は、図9に示す処理によって設定される未転送サスペンドコマンドデキュー監視世代番号と未転送監視世代番号とで決まる。
【0113】
ステップS804において、制御モジュール#00は、未転送サスペンド処理の対象のセッションを、未転送サスペンドコマンドキューにつなぐ。例えば、制御モジュール#00は、未転送サスペンド処理の対象のセッションのセッション管理テーブル500を参照し、未転送サスペンドコマンドキューprevに、バッファ管理テーブル600の未転送サスペンドコマンドキューbtmの値を設定する。さらに、制御モジュール#00は、バッファ管理テーブル600の未転送サスペンドコマンドキューbtmを、未転送サスペンド処理の対象のセッションのセッション番号に変更する。
【0114】
ステップS805において、制御モジュール#00は、未転送サスペンドコマンドデキュー監視設定がされているか否かを判別する。本実施例では、未転送サスペンドコマンドキューにつながれたセッションがある場合、未転送サスペンドコマンドデキュー監視を行う。したがって、例えば、制御モジュール#00は、バッファ管理テーブル600の未転送サスペンドコマンドキューtopおよび未転送サスペンドコマンドキューbtmを参照し、セッションが設定されていれば、未転送サスペンドコマンドデキュー監視設定がされていると判別できる。
【0115】
未転送サスペンドコマンドデキュー監視設定がされている場合(ステップS805 YES)、制御モジュール#00は、未転送サスペンドコマンド受信処理を終了する(ステップS807)。また、未転送サスペンドコマンドデキュー監視設定がされていない場合(ステップS805 NO)、制御モジュール#00は、未転送サスペンドコマンドの実行が完了した旨のコマンド応答を行う(ステップS806)。そして、制御モジュール#00は、未転送サスペンドコマンド受信処理を終了する(ステップS807)。
【0116】
図9は、本実施例に係る未転送サスペンドコマンドデキュー監視設定の処理(ステップS803)を示すフローチャートである。
制御モジュール#00は、図8に示したステップS803に処理を移行すると、以下の処理を開始する(ステップS900)。
【0117】
ステップS901において、制御モジュール#00は、ステージングに使用しているバッファセットがあるか否かを判別する。例えば、制御モジュール#00は、バッファ管理テーブル600を参照し、ステージングバッファセットtopおよびステージングバッファセットbtmにバッファセット番号が設定されていれば、ステージングに使用しているバッファセットがあると判別することができる。
【0118】
ステージングに使用しているバッファセットがある場合(ステップS901 YES)、制御モジュール#00は、処理をステップS902に移行する。この場合、制御モジュール#00は、ステージングに使用しているバッファセットに記憶されているバッファセットデータの中で、最も古い世代のバッファセットデータを未転送サスペンドコマンドデキュー監視の対象に設定する(ステップS902)。
【0119】
ステップS902では、例えば、以下のように制御モジュール#00は動作する。
まず、制御モジュール#00は、バッファ管理テーブル600を参照する。そして、制御モジュール#00は、ステージングバッファセットbtmに記憶されているバッファセット番号のバッファセットテーブル700を参照する。図6のバッファ管理テーブル600では、ステージングバッファセットbtmにバッファセット番号1が記憶されているので、この場合、制御モジュール#00は、図7のバッファセットテーブル702を参照する。
【0120】
そして、制御モジュール#00は、バッファセットテーブル700に記憶されている世代番号を、未転送サスペンド処理の対象のセッションのセッション管理テーブル500にある未転送サスペンドコマンドデキュー監視世代番号に設定する。図7のバッファセットテーブル702では、世代番号に16が記憶されているので、この場合、制御モジュール#00は、世代番号16を、未転送サスペンド処理の対象のセッションのセッション管理テーブル500にある未転送サスペンドコマンドデキュー監視世代番号に設定する。そして、制御モジュール#00は、処理をステップS903に移行する。
【0121】
また、ステージングに使用しているバッファセットがない場合(ステップS901 NO)、制御モジュール#00は、処理をステップS903に移行する。
ステップS903において、制御モジュール#00は、バッファセットに記憶されているバッファセットデータの中で、最も新しい世代のバッファセットデータを未転送監視の対象に設定する。
【0122】
ステップS903では、例えば、以下のように制御モジュール#00は動作する。
まず、制御モジュール#00は、バッファ管理テーブル600を参照する。そして、制御モジュール#00は、ライトバックバッファセットbtmに記憶されているバッファセット番号のバッファセットテーブル700を参照する。図6のバッファ管理テーブル600では、ライトバックバッファセットbtmにバッファセット番号3が記憶されているので、この場合、制御モジュール#00は、図7のバッファセットテーブル704を参照する。
【0123】
そして、制御モジュール#00は、バッファセットテーブル700に記憶されている世代番号を、未転送サスペンド処理の対象のセッションのセッション管理テーブル500にある未転送監視世代番号に設定する。図7のバッファセットテーブル704では、世代番号に32が記憶されているので、この場合、制御モジュール#00は、世代番号32を、未転送サスペンド処理の対象のセッションのセッション管理テーブル500にある未転送監視世代番号に設定する。
以上の処理が終了すると、制御モジュール#00は、未転送サスペンドコマンドデキュー監視設定の処理を終了し、図8に示したステップS804に移行する。
【0124】
図10は、本実施例に係るI/O処理を示すフローチャートである。
上位装置からWrite命令などのI/O命令を受信すると、制御モジュール#00は、以下の処理を開始する(ステップS1000)。
【0125】
ステップS1001において、制御モジュール#00は、受信したI/O命令の属するセッションがサスペンド状態か否かを判別する。以下、受信したI/O命令の属するセッションを「対象セッション」という。
【0126】
例えば、制御モジュール#00は、対象セッションのセッション管理テーブル500を参照する。そして、セッションステータスに「サスペンド」が設定されている場合、制御モジュール#00は、対象セッションがサスペンド状態であると判別することができる。
【0127】
対象セッションがサスペンド状態である場合(ステップS1001 YES)、制御モジュール#00は、処理をステップS1002に移行する。この場合、制御モジュール#00は、受信したWriteデータの内容が書き込まれたプライマリボリューム420の記憶領域の位置をコピービットマップ441に記憶する(ステップS1002)。具体的には、プライマリボリューム420に含まれる所定のサイズの記憶領域の位置毎に、コピービットマップ441に含まれるビットを1つずつ対応付けておき、Writeデータによって変更された記憶領域の位置に対応付けられたビットに「1」を設定する。
【0128】
ステップS1003において、制御モジュール#00は、受信したI/O命令に対するI/O応答をホストコンピュータ480に対して行う。そして、ステップS1004において、制御モジュール#00は、受信したWriteデータをプライマリボリューム420に反映する。
【0129】
一方、対象セッションがサスペンド状態でない場合(ステップS1001 NO)、制御モジュール#00は、処理をステップS1005に移行する。この場合、制御モジュール#00は、対象セッションに、未転送サスペンド処理が予約されているか否かを判別する(ステップS1005)。例えば、対象セッションのセッション管理テーブル500の未転送サスペンド処理フラグが「オン」に設定されている場合、制御モジュール#00は、対象セッションに、未転送サスペンド処理が予約されていると判別することができる。
【0130】
対象セッションに未転送サスペンド処理が予約されている場合(ステップS1005 YES)、制御モジュール#00は、処理をステップS1002に移行する。この場合、上述したステップS1002〜S1004の処理が実行される。
【0131】
対象セッションに未転送サスペンド処理が予約されていない場合(ステップS1005 NO)、制御モジュール#00は、処理をステップS1006に移行する。この場合、制御モジュール#00は、受信したI/O命令に対するI/O応答を行う(ステップS1006)。そして、ステップS1007において、制御モジュール#00は、受信したWriteデータをプライマリボリューム420に反映する。
【0132】
ステップS1008において、制御モジュール#00は、受信したWriteデータをバッファセット、すなわち、キャッシュバッファ411の送信データバッファ411aと、キャッシュバッファ413の送信データバッファ413aと、に分散して記憶する。
【0133】
このとき、制御モジュール#00は、Writeデータを記憶したバッファセットのバッファセットテーブル700に、新たな世代番号を設定するとともに、他のバッファセットテーブルとのリンクを更新する。例えば、制御モジュール#00は、Writeデータを記憶したバッファセットのバッファセットテーブル700のバッファセットリンクnextに、今まで先頭であったバッファセットのバッファセット番号を設定し、バッファセットリンクprevに「なし」を設定する。また、制御モジュール#00は、今まで先頭であったバッファセットのバッファセットテーブル700のバッファセットリンクprevに、上述の新たな世代番号を設定する。
【0134】
キャッシュバッファの使用率が閾値以上の場合(ステップS1009 YES)、制御モジュール#00は、処理をステップS1010に移行する。この場合、制御モジュール#00は、バッファセットに記憶されているバッファセットデータのうち、最も新しいバッファセットデータについて、以下のようにライトバックを実行する(ステップS1010)。
【0135】
まず、制御モジュール#00は、退避用バッファ431における、ライトバック対象のバッファセットデータを記憶する退避用バッファセットのアドレスを算出する。そして、制御モジュール#00は、算出したアドレスに、ライトバック対象のバッファセットデータを記憶する。このときのバッファセットデータには、例えば、バッファセットテーブル700の情報、例えば、世代番号やバッファセットリンクprev、バッファセットリンクnextなどの情報を含めることができる。バッファセットデータの順序性を保証するためである。
【0136】
なお、退避用バッファセットの先頭アドレスは、退避用バッファ431が連続したアドレス空間である場合、あらかじめ決められた「先頭アドレス」に、「(ライトバックポインタ−1)×退避用バッファセットのサイズ」を加えることにより求めることができる。
【0137】
ライトバックが完了すると、制御モジュール#00は、バッファ管理テーブル600のライトバックポインタに、ライトバックが完了したバッファセットデータの世代番号を設定する。そして、制御モジュール#00は、ライトバックが完了したバッファセットを解放する(ステップS1011)。
【0138】
また、キャッシュバッファの使用率が閾値より小さい場合(ステップS1009 NO)、制御モジュール#00は、処理をステップS1012に移行する。
以上の処理が終了すると、制御モジュール#00は、I/O処理を終了する(ステップS1012)。
【0139】
図11〜図16は、本実施例に係る非同期コピーを示すフローチャートである。
図11は、本実施例に係る非同期コピーの概要を示すフローチャートである。図11には、プライマリ装置410からセカンダリ装置450への非同期コピーの概要を示している。
【0140】
ステップS1101aにおいて、制御モジュール#00は、退避用バッファ431を使用しているか判別する。例えば、制御モジュール#00は、退避用バッファ431にバッファセットデータが記憶されていれば、退避用バッファ431を使用していると判別できる。
【0141】
制御モジュール#00は、以下に示す(a)〜(d)の処理により、退避用バッファ431に退避したバッファセットデータの有無を知ることができる。
(a)制御モジュール#00は、バッファ管理テーブル600を参照し、ライトバックポインタとステージングポインタを取得する。
(b)制御モジュール#00は、ステージポインタに1を加えた世代番号のバッファセットテーブル700から、昇順にバッファセットテーブル700をたどり、欠落している世代を検索する。
【0142】
例えば、図6に示したバッファ管理テーブル600には、ステージングポインタとして世代番号14が設定されている。そして、制御モジュール#00は、世代番号14に1を加えた世代番号15が記憶されているバッファセットのバッファセットテーブル701から昇順にバッファセットテーブル700をたどる。すると、制御モジュール#00は、世代番号17のバッファセットテーブル700が欠落していることを検出する。
【0143】
(c)制御モジュール#00は、ライトバックポインタから1を引いた世代番号のバッファセットテーブル700から、降順にバッファセットテーブル700をたどり、欠落している世代を検索する。
【0144】
例えば、図6に示したバッファ管理テーブル600には、ライトバックポインタとして世代番号33が設定されている。そして、制御モジュール#00は、世代番号33から1を引いた世代番号32が記憶されているバッファセットのバッファセットテーブル704から降順にバッファセットテーブル700をたどる。すると、制御モジュール#00は、世代番号30のバッファセットテーブル700が欠落していることを検出する。
【0145】
(d)以上の処理によって検出した世代番号17から30のバッファセットデータが、退避用バッファ118に退避されていることがわかる。
退避用バッファ431を使用している場合(ステップS1101a YES)、制御モジュール#00は、処理をステップS1102aに移行する。そして、制御モジュール#00は、解放されたバッファセットがあれば、退避用バッファ431に記憶されているバッファセットデータのうち、最も古い世代のバッファセットデータを、解放されたバッファセットに記憶するステージングを実行する(ステップS1102a)。
【0146】
ステージングが完了すると、制御モジュール#00は、バッファ管理テーブル600のステージングポインタに、ステージングを行ったバッファセットデータの世代番号を設定する。また、制御モジュール#00は、バッファセットデータを記憶したバッファセットのバッファセットテーブル700を更新する。この更新は、ライトバック時にバッファセットデータとともに退避用バッファセットに記憶した、バッファセットテーブル700の情報、例えば、世代番号やバッファセットリンクprev、バッファセットリンクnextなどの情報により行うことができる。
【0147】
ステージングが完了すると、制御モジュール#00は、処理をステップS1103aに移行する。また、ディスクバッファを使用していない場合も(ステップS1101a NO)、制御モジュール#00は、処理をステップS1103aに移行する。
【0148】
ステップS1103aにおいて、制御モジュール#00は、マッチング処理を行った後、バッファセットに記憶されているバッファセットデータのうち、最も古い世代のバッファセットデータから順に、セカンダリ装置450に送信する。
【0149】
一方、ステップS1101bにおいて、プライマリ装置410からバッファセットデータを受信すると、制御モジュール#10は、受信したバッファセットデータを、マッチング処理により決定したバッファセットに記憶する。そして、ステップS1102bにおいて、制御モジュール#10は、バッファセットに記憶したバッファセットデータを、セカンダリボリューム460に展開する。セカンダリボリューム460へのバッファセットデータの展開が完了すると、制御モジュール#10は、プライマリ装置410に対して、セカンダリボリューム460へのバッファセットデータの展開が完了した旨を通知する。ステップS1103bにおいて、制御モジュール#10は、セカンダリボリューム460への展開が完了したバッファセットデータが記憶されていたバッファセットを解放する。そして、制御モジュール#10は、非同期コピーを終了する(ステップS1104b)。
【0150】
一方、ステップS1104aにおいて、制御モジュール#00は、セカンダリ装置450から、セカンダリボリューム460へのバッファセットデータの展開が完了した旨の通知を受ける。すると、制御モジュール#00は、セカンダリボリューム460への展開が完了したバッファセットデータが記憶されていたバッファセットを解放する。そして、制御モジュール#00は、非同期コピーを終了する(ステップS1105a)。
【0151】
図12は、本実施例に係るステージング(ステップS1102a)を示すフローチャートである。
制御モジュール#00は、図11に示したステップS1102aに処理を移行すると、以下の処理を開始する(ステップS1200)。
【0152】
ステップS1201において、制御モジュール#00は、送信対象のバッファセットデータについて、未転送サスペンド処理が予約されているか否かを判別する。例えば、ステージング対象のバッファセットデータの世代番号が、対象セッションのセッション管理テーブル500の未転送サスペンドコマンドデキュー監視世代番号より大きい場合、制御モジュール#00は、未転送サスペンド処理が予約されていると判別できる。
【0153】
また、ステージング対象のバッファセットデータの世代番号が、対象セッションのセッション管理テーブル500の未転送監視世代番号より大きい場合、制御モジュール#00は、未転送サスペンド処理が予約されていないと判別できる。対象セッションのセッション管理テーブル500の未転送サスペンドコマンドデキュー監視世代番号や未転送監視世代番号に0xFFFFが設定されている場合も、制御モジュール#00は、未転送サスペンド処理が予約されていないと判別できる。
【0154】
送信対象のバッファセットデータに未転送サスペンド処理が予約されている場合(ステップS1201 YES)、制御モジュール#00は、ステージングを抑止する(ステップS1202)。そして、制御モジュール#00は、ステージングを実行することなく処理を終了する(ステップS1204)。
【0155】
また、送信対象のバッファセットデータに未転送サスペンド処理が予約されていない場合(ステップS1201 NO)、制御モジュール#00は、処理をステップS1203に移行する。この場合、制御モジュール#00は、退避用バッファ431に記憶されているバッファセットデータのうち、最も古い世代のバッファセットデータに対して、以下のようにステージングを実行する(ステップS1203)。
【0156】
まず、制御モジュール#00は、ステージング対象のバッファセットデータが記憶されている退避用バッファセットのアドレスを算出する。そして、制御モジュール#00は、算出したアドレスから読み出したバッファセットデータを、解放されたバッファセットに記憶する。このバッファセットデータには、ライトバック時にバッファセットデータとともに退避用バッファセットに記憶したバッファセットテーブル700の情報、例えば、世代番号やバッファセットリンクprev、バッファセットリンクnextなどの情報を含めることができる。
【0157】
なお、退避用バッファセットの先頭アドレスは、退避用バッファ431が連続したアドレス空間である場合、あらかじめ決められた「先頭アドレス」に、「(ステージングポインタ−1)×退避用バッファセットのサイズ」を加えることにより求めることができる。
【0158】
ステージングが完了すると、制御モジュール#00は、バッファ管理テーブル600のステージングポインタに、ステージングが完了したバッファセットデータの世代番号を設定する。以上の処理が終了すると(ステップS1204)、制御モジュール#00は、図11に示した1103aに処理を移行する。
【0159】
図13は、本実施例に係る送信処理(ステップS1103a)の示すフローチャートである。
制御モジュール#00は、図11に示したステップS1103aに処理を移行すると、以下の処理を開始する(ステップS1300)。
【0160】
ステップS1301において、制御モジュール#00は、対象セッションがサスペンド状態か否かを判別する。例えば、対象セッションのセッション管理テーブル500を参照し、セッションステータスに「サスペンド」が設定されている場合、制御モジュール#00は、対象セッションがサスペンド状態であると判別することができる。
【0161】
対象セッションがサスペンド状態である場合(ステップS1301 YES)、制御モジュール#00は、処理をステップS1302に移行する。この場合、制御モジュール#00は、セカンダリ装置450に送信すべきバッファセットデータの対象セッションの内容が書き込まれているプライマリボリューム420の記憶領域の位置をコピービットマップ441に記憶する(ステップS1302)。
【0162】
一方、対象セッションがサスペンド状態でない場合(ステップS1301 NO)、制御モジュール#00は、処理をステップS1303に移行する。この場合、制御モジュール#00は、送信対象のバッファセットデータが、未転送サスペンド監視中か否かを判別する(ステップS1303)。例えば、送信対象のバッファセットデータの世代番号が、対象セッションのセッション管理テーブル500の未転送サスペンドコマンドデキュー監視世代番号より大きく、かつ、未転送監視世代番号以下の場合、送信対象のバッファセットデータが、未転送サスペンド監視中と判別できる。
【0163】
送信対象のバッファセットデータが未転送サスペンド監視中である場合(ステップS1303 YES)、制御モジュール#00は、ステップS1302の処理を実行する。
また、送信対象のバッファセットデータが未転送サスペンド監視中でない場合(ステップS1303 NO)、制御モジュール#00は、処理をステップS1304に移行する。この場合、制御モジュール#00は、送信対象のバッファセットデータを、セカンダリ装置450に送信する(ステップS1304)。
以上の処理が終了すると、制御モジュール#00は、図11に示したステップS1104aに移行する。
【0164】
図14は、本実施例に係る未転送サスペンドコマンドデキュー監視処理を示すフローチャートである。
制御モジュール#00は、図11に示したステップS1104aの処理が完了すると、以下の処理を開始する(ステップS1400)。
【0165】
ステップS1401において、制御モジュール#00は、未転送サスペンドコマンドキューにキューされている未転送サスペンドコマンドはあるか判別する。バッファセット管理テーブル600の未転送サスペンドコマンドキューtopと未転送サスペンドコマンドキューbtmにセッション番号が設定されていれば、制御モジュール#00は、未転送サスペンドコマンドキューにキューされている未転送サスペンドコマンドがあると判別できる。
【0166】
未転送サスペンドコマンドキューにキューされている未転送サスペンドコマンドがない場合(ステップS1401 NO)、制御モジュール#00は、未転送サスペンドコマンドデキュー監視処理を終了する(ステップS1407)。
【0167】
未転送サスペンドコマンドキューにキューされている未転送サスペンドコマンドがある場合(ステップS1401 YES)、制御モジュール#00は、処理をステップS1402に移行する。この場合、制御モジュール#00は、未転送サスペンドコマンドキューにキューされているセッションを1つ選択する(ステップS1402)。本実施例では、バッファセット管理テーブル600の未転送サスペンドコマンドキューtopが示すセッション番号から順にセッションを選択する。
【0168】
ステップS1403において、制御モジュール#00は、ステップS1402で選択したセッションにおいて、未転送サスペンドコマンドデキュー監視がされているか否かを判別する。例えば、セッション管理テーブル500の未転送サスペンドコマンドデキュー監視世代番号にバッファセットの世代番号が設定さている場合、ステップS1402で選択されたセッション番号のセッションにおいて、未転送サスペンドコマンドデキュー監視がされていると判別できる。
【0169】
ステップS1402で選択されたセッションにおいて、未転送サスペンドコマンドデキュー監視がされている場合(ステップS1403 YES)、制御モジュール#00は、処理をステップS1404に移行する。この場合、制御モジュール#00は、送信対象のバッファセットデータが、未転送サスペンド可能な世代か否かを判別する(ステップS1404)。
【0170】
例えば、送信対象のバッファセットデータの世代番号が、ステップS1402で選択されたセッションのセッション管理テーブル500の未転送サスペンドコマンドデキュー監視世代番号以上の場合、送信対象のバッファセットデータが、未転送サスペンド可能な世代と判別できる。
【0171】
送信対象のバッファセットデータが、未転送サスペンド可能な世代でない場合(ステップS1404 NO)、制御モジュール#00は、処理をステップS1402に移行して次のセッションを選択する。
【0172】
送信対象のバッファセットデータが、未転送サスペンド可能な世代である場合(ステップS1404 YES)、制御モジュール#00は、処理をステップS1405に移行する。この場合、制御モジュール#00は、ステップS1402で選択したセッションを、未転送サスペンドコマンドキューからデキューする。デキューは、例えば、以下のように行われる。
【0173】
制御モジュール#00は、バッファ管理テーブル600の未転送サスペンドコマンドキューtopに設定されているセッション番号が示すセッション管理テーブル500を参照し、未転送サスペンドコマンドキューnextに設定されたセッション番号を取得する。そして、制御モジュール#00は、取得したセッション番号を、バッファ管理テーブル600の未転送サスペンドコマンドキューtopに設定する。未転送サスペンドコマンドキューnextにセッション番号がなければ、制御モジュール#00は、未転送サスペンドコマンドキューnextおよび未転送サスペンドコマンドキューprevに、0xFFFFを設定する。
【0174】
なお、ステップS1405において、未転送サスペンドコマンドキューからデキューされたセッションは、図15で後述する処理によって、サスペンド移行処理が行われることになる。
【0175】
以上の処理が終了すると、制御モジュール#00は、未転送サスペンドコマンドの実行が完了した旨のコマンド応答を行う(ステップS1406)。また、ステップS1402で選択したセッションにおいて、未転送サスペンドコマンドデキュー監視がされていない場合も(ステップS1403 NO)、制御モジュール#00は、未転送サスペンドコマンドの実行が完了した旨のコマンド応答を行う(ステップS1406)。そして、制御モジュール#00は、未転送サスペンドコマンドデキュー監視処理を終了する(ステップS1407)。
【0176】
図15は、本実施例に係るサスペンド移行処理を示すフローチャートである。
制御モジュール#00は、一定時間毎に以下の処理を実行する(ステップS1500)。
【0177】
ステップS1501において、制御モジュール#00は、未転送サスペンド処理が予約されているセッションがあるか否かをチェックする。このとき、制御モジュール#00は、セッション管理テーブル500を参照し、未転送サスペンド処理フラグが「オン」に設定されているセッションを検索する。そして、セッション管理テーブル500の未転送サスペンド処理フラグに「オン」と設定されているセッションを、少なくとも1つ以上検出した場合、制御モジュール#00は、未転送サスペンド処理が予約されているセッションがあると判別する。
【0178】
未転送サスペンド処理が予約されているセッションがない場合(ステップS1501 NO)、制御モジュール#00は、サスペンド移行処理を終了する(ステップS1506)。また、未転送サスペンド処理が予約されているセッションがある場合(ステップS1501 YES)、制御モジュール#00は、処理をステップS1502に移行する。
【0179】
ステップS1502において、制御モジュール#00は、未転送サスペンド処理が予約されているセッションのうち、未転送サスペンドコマンドデキュー監視されていないセッションがあるか否かを判別する。このとき、制御モジュール#00は、バッファ管理テーブル600から、未転送サスペンドコマンドキューtopおよび未転送サスペンドコマンドキューbtmを取得する。そして、制御モジュール#00は、未転送サスペンドコマンドキューtopから未転送サスペンドコマンドキューbtmまで未転送サスペンドコマンドキューをたどる。そして、制御モジュール#00は、未転送サスペンド処理が予約されているセッションが、未転送サスペンドコマンドキューにキューされているか判別する。未転送サスペンド処理が予約されているセッションが、未転送サスペンドコマンドキューにキューされている場合、制御モジュール#00は、未転送サスペンド処理が予約されているセッションが、未転送サスペンドコマンドデキュー監視されていると判別できる。
【0180】
未転送サスペンド処理が予約されているセッションの全てが、未転送サスペンドコマンドデキュー監視されている場合(ステップS1502 NO)、制御モジュール#00は、サスペンド移行処理を終了する(ステップS1506)。また、未転送サスペンド処理が予約されているセッションのうち、未転送サスペンドコマンドデキュー監視されていないセッションがある場合(ステップS1502 YES)、制御モジュール#00は、処理をステップS1503に移行する。この場合、制御モジュール#00は、未転送サスペンド処理が予約されているセッションであって、未転送サスペンドコマンドデキュー監視されていないセッションのセッション管理テーブル500のセッションステータスを「サスペンド」に設定する(ステップS1503)。
【0181】
ステップS1504において、制御モジュール#00は、ステップS1503でセッションステータスが変更されたセッションのセッション状態を、セカンダリ装置450に通知する。このとき、例えば、制御モジュール#00は、ステップS1503でセッションステータスが変更されたセッションのセッション管理テーブル500を、セカンダリ装置450に送信する。セカンダリ装置450では、プライマリ装置410から送信されたセッション管理テーブル500の内容を、セカンダリ装置450に備わる図示しないセッション管理テーブル500’に反映する。
【0182】
以上の処理が終了すると、制御モジュール#00は、処理をステップS1505に移行する。そして、制御モジュール#00は、ステップS1503でセッションステータスを「サスペンド」に変更したセッションの、未転送サスペンド処理の予約を解除する。
【0183】
このとき、例えば、制御モジュール#00は、ステップS1503でセッションステータスを「サスペンド」に変更したセッションのセッション管理テーブル500を参照し、未転送サスペンド処理フラグを「オフ」に設定する。
以上の処理が終了すると、制御モジュール#00は、サスペンド移行処理を終了する(ステップS1506)。
【0184】
図16は、本実施例に係る未転送サスペンド監視処理を示すフローチャートである。
制御モジュール#00は、図11に示したステップS1104aの処理が完了すると、以下の処理を開始する(ステップS1600)。
【0185】
全てのセッションについて、ステップS1601〜S1606の処理が完了すると(ステップS1601 YES)、制御モジュール#00は、未転送サスペンド監視処理を終了する(ステップS1606)。
【0186】
ステップS1601〜S1606の処理を行っていないセッションがある場合(ステップS1601 NO)、制御モジュール#00は、ステップS1601〜S1606の処理を行っていないセッションを1つ選択する(ステップS1602)。
【0187】
ステップS1603において、制御モジュール#00は、ステップS1602で選択したセッションが未転送サスペンド監視されているか否か判別する。このとき、例えば、制御モジュール#00は、ステップS1602で選択したセッションのセッション管理テーブル500を参照する。そして、バッファセットの世代番号が未転送監視世代番号に設定されていれば、制御モジュール#00は、ステップS1602で選択したセッションが未転送サスペンド監視されていると判別できる。
【0188】
ステップS1602で選択したセッションが未転送サスペンド監視されている場合(ステップS1603 YES)、制御モジュール#00は、ステップS1602で選択したセッションで処理中のバッファセットデータの世代番号が未転送監視世代番号に到達しているかを判別する(ステップS1604)。
【0189】
ステップS1602で選択したセッションで処理中のバッファセットデータの世代番号が未転送監視世代番号に到達している場合(ステップS1604 YES)、制御モジュール#00は、ステップS1602で選択したセッションの未転送サスペンド監視を解除する(ステップS1605)。このとき、例えば、制御モジュール#00は、ステップS1602で選択したセッションのセッション管理テーブル500を参照する。そして、制御モジュール#00は、未転送サスペンドコマンドデキュー監視世代番号や未転送監視世代番号に、未転送サスペンド監視の解除を示す値、例えば、0xFFFFを設定する。そして、制御モジュール#00は、処理をステップS1601に移行する。
【0190】
また、ステップS1602で選択したセッションが未転送サスペンド監視されていない場合(ステップS1603 NO)も、制御モジュール#00は、処理をステップS1601に移行する。また、ステップS1602で選択したセッションで処理中のバッファセットデータの世代番号が未転送監視世代番号に到達していない場合(ステップS1604 NO)も、制御モジュール#00は、処理をステップS1601に移行する。 以上の処理が終了すると、制御モジュール#00は、未転送サスペンド監視処理を終了する(ステップS1606)。
【0191】
図17は、本実施例に係るレジュームコマンド処理を示すフローチャートである。
上位装置などからレジュームコマンドを受信すると、制御モジュール#00は、以下の処理を開始する(ステップS1701)。
【0192】
ステップS1702において、制御モジュール#00は、レジュームコマンド発行時に指定されたセッションのセッションステータスを「コピー中」に変更する。このとき、例えば、制御モジュール#00は、レジュームコマンド発行時に指定されたセッションのセッション管理テーブル500を参照し、セッションステータスを「コピー中」に変更する。
【0193】
なお、ステップS1702において、セッションステータスが「コピー中」に設定されたセッションは、図18で後述する非同期コピーが行われることになる。
セッションステータスを「コピー中」に変更すると、制御モジュール#00は、ステップS1701で受信したレジュームコマンドに対するコマンド応答を、上位装置などに送信する(ステップS1703)。
以上の処理が終了すると、制御モジュール#00は、レジュームコマンド処理を終了する(ステップS1704)。
【0194】
図18は、本実施例に係る非同期コピーを示すフローチャートである。
制御モジュール#00は、一定時間毎に以下の処理を実行する(ステップS1800)。
【0195】
ステップS1801において、制御モジュール#00は、セッションステータスが「コピー中」のセッションがあるか否かを判別する。このとき、例えば、制御モジュール#00は、全てのセッションセッション管理テーブル500を参照し、セッションステータスに「コピー中」が設定されているセッションを検索する。セッションステータスに「コピー中」と設定されているセッション管理テーブル500があれば、制御モジュール#00は、セッションステータスが「コピー中」のセッションがあると判別することができる。
【0196】
セッションステータスが「コピー中」のセッションがない場合(ステップS1801 NO)、制御モジュール#00は、非同期コピーを終了する(ステップS1805)。セッションステータスが「コピー中」のセッションがある場合(ステップS1801 YES)、制御モジュール#00は、処理をステップS1802に移行する。この場合、制御モジュール#00は、セッションステータスが「コピー中」のセッションのうち、未転送サスペンド監視中のセッションがあるか否かを判別する(ステップS1802)。このとき、例えば、制御モジュール#00は、セッション管理テーブル500の未転送監視世代番号に、未転送サスペンド監視が解除された状態であることを示す値、例えば、0xFFFFが設定されている場合、そのセッションは、未転送サスペンド監視中でないと判別できる。したがって、セッション管理テーブル500の未転送監視世代番号に、有効なセッション番号が設定されている場合、そのセッションは、未転送サスペンド監視中であると判別できる。
【0197】
未転送サスペンド監視中でないセッションがある場合(ステップS1802 YES)、制御モジュール#00は、コピービットマップ441を元に、プライマリ装置410のプライマリボリューム420の変更内容を、セカンダリ装置450に送信する(ステップS1803)。
【0198】
一方、プライマリ装置410からプライマリボリューム420の変更内容を受信すると、セカンダリ装置450は、セカンダリ装置450に備わるセカンダリボリューム460に、プライマリボリューム420の変更内容を反映する。
【0199】
ステップS1804において、制御モジュール#00は、ステップS1803の処理が完了したセッションのセッション管理テーブル500を参照し、セッションステータスを「アクティブ」に変更する。
【0200】
以上の処理が終了すると、制御モジュール#00は、非同期コピーを終了する(ステップS1805)。また、セッションステータスが「コピー中」のセッションがない場合(ステップS1801 NO)や、全て未転送サスペンド監視中のセッションである場合(ステップS1802 NO)も、制御モジュール#00は、非同期コピーを終了する(ステップS1805)。
【0201】
図19は、本実施例に係るプライマリ装置410に備わる制御モジュールの具体的な構成例を示す図である。なお、制御モジュール#00と制御モジュール#01は、同じ構成要素を用いて実現できるので、図19には、制御モジュール#00のみの構成例を示す。
【0202】
図19に示す制御モジュール#00は、CPU1901と、メモリ1902と、入力装置1903と、出力装置1904と、外部記憶ユニット1905と、媒体駆動装置1906と、ネットワーク接続装置1908と、を備える。そして、これらの装置がバスに接続されて相互にデータの受け渡しが行える構成となっている。
【0203】
CPU1901は、周辺機器や各種ソフトウェアを実行する他に本実施例に係る非同期コピーや未転送サスペンド処理などを実現するプログラムを実行する演算装置である。
メモリ1902は、プログラムを実行するために使用される揮発性の記憶ユニットである。メモリ1902には、例えば、RAMなどを使用することができる。メモリ1902は、キャッシュバッファ411に使用することができる。
【0204】
入力装置1903は、外部からのデータ入力手段である。入力装置1903には、例えば、キーボードやマウスなどを使用することができる。
出力装置1904は、データ等を表示装置等に出力する装置である。なお、出力装置1904には、表示装置を含むこともできる。
【0205】
外部記憶ユニット1905は、制御モジュール#00が動作するために必要なプログラムやデータの他に本実施例に係る非同期コピーや未転送サスペンド処理などを実現するプログラムを記憶する不揮発性の記憶ユニットである。外部記憶ユニット1905には、例えば、磁気ディスク記憶ユニットなどを使用することができる。
【0206】
媒体駆動装置1906は、メモリ1902や外部記憶ユニット1905のデータを可搬記憶媒体1907、例えば、フロッピイディスクやMOディスク、CD−RやDVD−Rなどに出力し、または可搬記憶媒体1907からプログラムやデータ等を読み出す装置である。
ネットワーク接続装置1908は、ネットワーク1909に接続する装置である。
【0207】
なお、メモリ1902、外部記憶ユニット1905および可搬記憶媒体1907などの情報処理装置に読取り可能な記憶媒体は、非一時的(non−transitory)な媒体である。
【0208】
図19に示した制御モジュール#00の構成例は、一つの例示であって、図19に示す構成要素の全てが必須の構成要素であることに限定する趣旨ではない。
以上に説明したストレージシステム400を用いたバックアップシステムの運用を考える。
【0209】
図20に示すバックアップシステム2000は、東京に配置されたプライマリ装置410と、名古屋に配置されたセカンダリ装置450と、大阪に配置されたセカンダリ装置2010と、を備える。なお、セカンダリ装置2010は、セカンダリ装置450と同じ構成のRAID装置を用いることができる。セカンダリ装置2010は、セカンダリボリューム2020を備える。
【0210】
プライマリ装置410とセカンダリ装置450とはネットワーク2030を介して互いに通信可能に接続している。また、セカンダリ装置450とセカンダリ装置2010とはネットワーク2040を介して互いに通信可能に接続している。
【0211】
図21は、本実施例に係るバックアップシステム2000によるバックアップ処理の運用例を示す図である。なお、図21に示す時刻は、例示であって、各処理の開始時間や、各処理に要する時間を限定する趣旨ではない。
【0212】
セッションAは、プライマリ装置410からセカンダリ装置450への、順序性を保証した非同期コピーを実行するセッションである。また、セッションBおよびCは、セカンダリ装置450からセカンダリ装置2010へのリモートコピーを実行するセッションである。
【0213】
23日の0:00に、プライマリ装置410は、未転送サスペンドコマンドを受信して未転送サスペンドコマンド処理を開始する。このとき、プライマリ装置410は、キャッシュバッファ411および413上のバッファセットに記憶されたバッファセットデータだけを全てセカンダリボリューム460に送信する(ステップS1303 NO、S1304)。そして、プライマリ装置410は、順序性を保証した非同期コピーをサスペンド状態に移行する(S1503)。
【0214】
23日の0:01の時点で、未転送サスペンドコマンド受信時にプライマリ装置410のバッファセットに記憶されていたバッファセットデータは、順序性が保証されたままセカンダリ装置450に反映される。この状態で、セッションBのリモートコピーが実行されると、セカンダリ装置450での更新内容がセカンダリ装置2010に反映される。
【0215】
23日の0:11の時点で、未転送サスペンドコマンド受信時にプライマリ装置410のバッファセットに記憶されていたバッファセットデータの内容は、セカンダリ装置450と、セカンダリ装置2010と、に順序性が保証された状態でバックアップされる。
【0216】
キャッシュバッファ411および413に記憶されているデータのみを、セカンダリ装置450と、セカンダリ装置2010と、に反映するため、未転送サスペンドコマンドを受信してからバックアップが完了するまでを短時間で行うことができる。
【0217】
ここで、プライマリ装置410は、非同期コピーがサスペンド状態に移行すると、未転送サスペンドコマンド受信時に退避用バッファ431に記憶されていたバッファセットデータの内容が書き込まれたプライマリボリューム420の記憶領域の位置をコピービットマップ441に記憶する(ステップS1201 NO、S1203、S1301 YES、S1302)。
【0218】
また、プライマリ装置410は、未転送サスペンドコマンドを受信してからレジューム処理完了までの間に受信するI/O命令で指定されるWriteデータの内容が書き込まれたプライマリボリューム420の記憶領域の位置も、コピービットマップ441に記憶する(ステップS1001 YES、S1005 YES、S1002)。
【0219】
23日の3:00に、プライマリ装置410は、レジュームコマンドを受信して未転送サスペンドに対するレジューム処理を開始する。このとき、プライマリ装置410は、コピービットマップ441を元に、プライマリ装置410のプライマリボリューム420の変更内容を、セカンダリ装置450に転送する(ステップS1803)。そして、プライマリ装置410は、サスペンド状態を解除する(ステップS1804)。
【0220】
コピービットマップ441に記憶された、プライマリボリューム420の変更内容、をセカンダリ装置450に反映するだけでレジューム処理が完了するため、未転送サスペンドに対するレジューム処理を短時間で行うことができる。
【0221】
23日の3:10の時点で、未転送サスペンドコマンド受信時に退避用バッファ431に記憶されていたバッファセットデータの内容と、未転送サスペンドコマンド受信からレジューム処理完了までの間に受信したI/O命令で指定されたWriteデータの内容は、セカンダリ装置450に反映される。23日の3:10の時点で、プライマリ装置410とセカンダリ装置450は等価となる。
【0222】
23日の3:10に、プライマリ装置410は、等価サスペンドコマンドを受信して等価サスペンド処理を開始する。等価サスペンド処理とは、例えば、プライマリ装置410−セカンダリ装置450間の等価状態を一時中断した状態、すなわち、サスペンド状態に移行する処理である。この等価サスペンド処理は、公知の技術であるが、より具体的には、例えば、以下の様な処理が行われる。
【0223】
等価サスペンドコマンドを受信すると、プライマリ装置410は、非同期コピーをサスペンド状態に移行する。同時に、プライマリ装置410は、キャッシュバッファ411および413上のバッファセットに記憶されたバッファセットデータと、退避用バッファ431に記憶されたバッファセットデータと、を全てセカンダリ装置450に送信する。また、プライマリ装置410は、等価サスペンドコマンドを受信してからレジューム処理完了までの間に受信したI/O命令で指定されるWriteデータの内容が書き込まれたプライマリボリューム420の記憶領域の位置を、コピービットマップ441に記憶する。
【0224】
なお、未転送サスペンドに対するレジューム処理が完了した直後なので、プライマリ装置410からセカンダリ装置450に送信すべきデータはほとんど存在しない。その結果、等価サスペンド処理は、短時間で完了する。
【0225】
23日の3:11に、セッションCのリモートコピーが実行されると、セカンダリ装置450での更新内容がセカンダリ装置2010に反映される。
23日の3:21の時点で、未転送サスペンドコマンド受信時に退避用バッファ431に記憶されていたバッファセットデータの内容と、未転送サスペンドコマンド受信からレジューム処理完了までの間に受信したI/O命令で指定されたWriteデータの内容が、セカンダリ装置450と、セカンダリ装置2010と、にバックアップされる。
【0226】
一方、23日の3:11に、プライマリ装置410は、レジュームコマンドを受信して等価サスペンドに対するレジューム処理を開始する。このとき、プライマリ装置410は、コピービットマップ441を元に、プライマリ装置410のプライマリボリューム420の変更内容を、セカンダリ装置450に転送する。そして、プライマリ装置410は、サスペンド状態を解除する。3:21からまた非同期コピーが再開される。
【0227】
コピービットマップ441に記憶された、プライマリボリューム420の変更内容、をセカンダリ装置450に反映するだけの処理のため、等価サスペンドに対するレジューム処理も短時間で行うことができる。
【0228】
以上のように、プライマリ装置410は、未転送サスペンドコマンドを受信すると、キャッシュバッファ411および413上のバッファセットデータのみを、セカンダリ装置450に送信して、即座にサスペンド状態に移行する。そのため、未転送サスペンドコマンドを受信してから短時間で、プライマリ装置410の更新内容の、順序性を保証したバックアップを行うことができる。
【0229】
また、未転送サスペンドコマンド受信後、プライマリ装置410は、退避用バッファ431に記憶されているバッファセットデータや、ホストコンピュータ480から受信したI/O命令で指定されるWriteデータの内容が書き込まれたプライマリボリューム420の記憶領域の位置を、コピービットマップ441に保持する。そのため、プライマリ装置410は、未転送サスペンドに対するレジューム処理を、短時間で行うことができる。また、その後に行う等価サスペンドも、プライマリ装置410からセカンダリ装置450に送信すべきデータがほとんど存在しないので、短時間で行うことができる。その結果、プライマリ装置410の更新内容の、順序性を保証したバックアップを短時間で行うことができる。
【0230】
さらに、プライマリ装置410の内容がセカンダリ装置450やセカンダリ装置2010にバックアップされるまでの時間が短時間で済むので、バックアップ中に被災に合う確率を低くすることができる。すなわち、災害耐性が高いバックアップが可能となる。
【0231】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
上位装置から送信される第1のデータを記憶する第1の記憶手段と前記第1のデータを一時的に記憶する複数の第2の記憶手段とを有する記憶装置において、
前記第1の記憶手段に記憶した前記第1のデータを前記第2の記憶手段に記憶するデータ記憶手段と、
複数の前記第2の記憶手段それぞれに記憶された第2のデータを含むデータ群の退避に使用する第3の記憶手段と、
前記第2の記憶手段の使用状況に応じて、前記データ群を前記第2の記憶手段から読み出して前記第3の記憶手段に退避する退避手段と、
前記第2の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力するデータ群出力手段と、
使用していない、複数の前記第2の記憶手段に、前記第3の記憶手段に退避された前記データ群を記憶する復旧手段と、
サスペンドの指示を受けると、前記データ群出力手段に、既に前記第2の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力させた後、前記データ群出力手段による、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させるサスペンド手段と、
を備える記憶装置。
(付記2)
前記サスペンド手段は、前記サスペンドの指示を受けると、前記サスペンド状態に移行するまで、前記復旧手段の処理を抑止する、
ことを特徴とする付記1に記載の記憶装置。
(付記3)
前記データ群出力手段は、前記サスペンド状態に移行すると、前記サスペンド状態が解除されるまで、新たに前記第2の記憶手段に記憶される前記データ群の内容を、第4の記憶手段に記憶する、
ことを特徴とする付記2に記載の記憶装置。
(付記4)
前記サスペンド手段は、前記サスペンドの指示を受けると、サスペンド状態が解除されるまで、前記退避手段の処理を抑止する、
ことを特徴とする付記1に記載の記憶装置。
(付記5)
前記データ記憶手段は、前記サスペンドの指示を受けると、サスペンド状態が解除されるまで、前記上位装置から新たに受信する前記第1のデータの内容を、第4の記憶手段に記憶する、
ことを特徴とする付記1に記載の記憶装置。
(付記6)
レジュームの指示を受けると、前記第4の記憶手段に記憶した内容を前記コピー先装置に出力後、前記サスペンド状態を解除するレジューム手段、
をさらに備える付記3または5に記載の記憶装置。
(付記7)
上位装置から送信される第1のデータを記憶する第1の記憶手段と前記第1のデータを一時的に記憶する複数の第2の記憶手段とを有する記憶装置を制御する制御装置において、
前記第1の記憶手段に記憶した前記第1のデータを前記第2の記憶手段に記憶するデータ記憶手段と、
前記第2の記憶手段の使用状況に応じて、複数の前記第2の記憶手段それぞれに記憶された第2のデータを含むデータ群を前記第2の記憶手段から読み出し、前記データ群の退避に使用する第3の記憶手段に退避する退避手段と、
前記第2の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力するデータ群出力手段と、
使用していない、複数の前記第2の記憶手段に、前記第3の記憶手段に退避された前記データ群を記憶する復旧手段と、
サスペンドの指示を受けると、前記データ群出力手段に、既に前記第2の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力させた後、前記データ群出力手段による、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させるサスペンド手段と、
を備える制御装置。
(付記8)
上位装置から送信される第1のデータを記憶する第1の記憶手段と前記第1のデータを一時的に記憶する複数の第2の記憶手段とを有する記憶装置の制御方法において、
前記第1の記憶手段に記憶した前記第1のデータを前記第2の記憶手段に記憶し、
前記第2の記憶手段の使用状況に応じて、複数の前記第2の記憶手段それぞれに記憶された第2のデータを含むデータ群を前記第2の記憶手段から読み出し、前記データ群の退避に使用する第3の記憶手段に退避し、
前記第2の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力し、
使用していない、複数の前記第2の記憶手段に、前記第3の記憶手段に退避された前記データ群を記憶し、
サスペンドの指示を受けると、既に前記第2の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力した後、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させる、制御方法。
(付記9)
上位装置から送信される第1のデータを記憶する第1の記憶手段と前記第1のデータを一時的に記憶する複数の第2の記憶手段とを有する記憶装置を制御する制御装置に実行させるプログラムにおいて、
前記第1の記憶手段に記憶した前記第1のデータを前記第2の記憶手段に記憶するデータ記憶処理と、
前記第2の記憶手段の使用状況に応じて、複数の前記第2の記憶手段それぞれに記憶された第2のデータを含むデータ群を前記第2の記憶手段から読み出し、前記データ群の退避に使用する第3の記憶手段に退避する退避処理と、
前記第2の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力するデータ群出力処理と、
使用していない、複数の前記第2の記憶手段に、前記第3の記憶手段に退避された前記データ群を記憶する復旧処理と、
サスペンドの指示を受けると、前記データ群出力処理で、既に前記第2の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力させた後、前記データ群出力処理による、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させるサスペンド処理と、
を前記制御装置に実行させるプログラム。
【符号の説明】
【0232】
310 プライマリ装置
311 第1の記憶手段
312 第2の記憶手段
313 データ記憶手段
314 第3の記憶手段
315 退避手段
316 データ群出力手段
317 復旧手段
318 サスペンド手段
410 プライマリ装置
411 キャッシュバッファ
411a 送信データバッファ
411b 管理データバッファ
412 メモリ
413 キャッシュバッファ
413a 送信データバッファ
413b 管理データバッファ
414 メモリ
420 プライマリボリューム
430 退避用ボリューム
431 退避用バッファ

【特許請求の範囲】
【請求項1】
上位装置から送信される第1のデータを記憶する第1の記憶手段と前記第1のデータを一時的に記憶する複数の第2の記憶手段とを有する記憶装置において、
前記第1の記憶手段に記憶した前記第1のデータを前記第2の記憶手段に記憶するデータ記憶手段と、
複数の前記第2の記憶手段それぞれに記憶された第2のデータを含むデータ群の退避に使用する第3の記憶手段と、
前記第2の記憶手段の使用状況に応じて、前記データ群を前記第2の記憶手段から読み出して前記第3の記憶手段に退避する退避手段と、
前記第2の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力するデータ群出力手段と、
使用していない、複数の前記第2の記憶手段に、前記第3の記憶手段に退避された前記データ群を記憶する復旧手段と、
サスペンドの指示を受けると、前記データ群出力手段に、既に前記第2の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力させた後、前記データ群出力手段による、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させるサスペンド手段と、
を備える記憶装置。
【請求項2】
前記サスペンド手段は、前記サスペンドの指示を受けると、前記サスペンド状態に移行するまで、前記復旧手段の処理を抑止する、
ことを特徴とする請求項1に記載の記憶装置。
【請求項3】
前記データ群出力手段は、前記サスペンド状態に移行すると、前記サスペンド状態が解除されるまで、新たに前記第2の記憶手段に記憶される前記データ群の内容を、第4の記憶手段に記憶する、
ことを特徴とする請求項2に記載の記憶装置。
【請求項4】
上位装置から送信される第1のデータを記憶する第1の記憶手段と前記第1のデータを一時的に記憶する複数の第2の記憶手段とを有する記憶装置を制御する制御装置において、
前記第1の記憶手段に記憶した前記第1のデータを前記第2の記憶手段に記憶するデータ記憶手段と、
前記第2の記憶手段の使用状況に応じて、複数の前記第2の記憶手段それぞれに記憶された第2のデータを含むデータ群を前記第2の記憶手段から読み出し、前記データ群の退避に使用する第3の記憶手段に退避する退避手段と、
前記第2の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力するデータ群出力手段と、
使用していない、複数の前記第2の記憶手段に、前記第3の記憶手段に退避された前記データ群を記憶する復旧手段と、
サスペンドの指示を受けると、前記データ群出力手段に、既に前記第2の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力させた後、前記データ群出力手段による、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させるサスペンド手段と、
を備える制御装置。
【請求項5】
上位装置から送信される第1のデータを記憶する第1の記憶手段と前記第1のデータを一時的に記憶する複数の第2の記憶手段とを有する記憶装置の制御方法において、
前記第1の記憶手段に記憶した前記第1のデータを前記第2の記憶手段に記憶し、
前記第2の記憶手段の使用状況に応じて、複数の前記第2の記憶手段それぞれに記憶された第2のデータを含むデータ群を前記第2の記憶手段から読み出し、前記データ群の退避に使用する第3の記憶手段に退避し、
前記第2の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力し、
使用していない、複数の前記第2の記憶手段に、前記第3の記憶手段に退避された前記データ群を記憶し、
サスペンドの指示を受けると、既に前記第2の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力した後、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させる制御方法。

【図3】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図1】
image rotate

【図2】
image rotate

【図4】
image rotate

【図20】
image rotate

【図21】
image rotate


【公開番号】特開2012−3600(P2012−3600A)
【公開日】平成24年1月5日(2012.1.5)
【国際特許分類】
【出願番号】特願2010−139499(P2010−139499)
【出願日】平成22年6月18日(2010.6.18)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】