JP5544897B2 - 記憶装置、制御装置および記憶装置の制御方法 - Google Patents

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

Info

Publication number
JP5544897B2
JP5544897B2 JP2010012345A JP2010012345A JP5544897B2 JP 5544897 B2 JP5544897 B2 JP 5544897B2 JP 2010012345 A JP2010012345 A JP 2010012345A JP 2010012345 A JP2010012345 A JP 2010012345A JP 5544897 B2 JP5544897 B2 JP 5544897B2
Authority
JP
Japan
Prior art keywords
storage
data
buffer
data group
storage area
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010012345A
Other languages
English (en)
Other versions
JP2011150602A (ja
Inventor
中中 閔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2010012345A priority Critical patent/JP5544897B2/ja
Priority to US13/006,700 priority patent/US20110185222A1/en
Publication of JP2011150602A publication Critical patent/JP2011150602A/ja
Application granted granted Critical
Publication of JP5544897B2 publication Critical patent/JP5544897B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2056Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
    • G06F11/2064Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring while ensuring consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2056Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
    • G06F11/2071Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring using a plurality of controllers
    • G06F11/2074Asynchronous techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、順序性を保証した非同期のコピー機能を有する記憶装置、制御装置および記憶装置の制御方法に関する。
従来、分散キャッシュメモリ型のストレージシステムを採用するRAID(Redundant Arrays of Inexpensive Disks)装置では、性能や信頼性の向上のために、ストレージに対するデータの入出力を制御する制御モジュールを複数備える冗長構成が採用されている。そして、制御モジュール毎に、論理ボリュームに対するデータのRead/Write処理が実行される。
このようなRAID装置は、信頼性等の向上のために、アドバンスト・コピーといわれる順序性を保証したリモートコピー機能を備える。
図38は、順序性を保証したリモートコピー機能を備えるRAID装置を説明する図である。図38に示すストレージシステムは、制御モジュール#00および#01を有するRAID装置3801と、制御モジュール#10および#11を有するRAID装置3802と、を備える。
以下、RAID装置3801からRAID装置3802にリモートコピーを行なう場合について説明する。RAID装置3801を「コピー元装置」、RAID装置3802を「コピー先装置」という。
各RAID装置は、バッファおよびBIT(Buffer Index Table)記憶部を有する記録専用バッファと、バッファセットに関する情報を記憶するバッファセット情報記憶部と、データを記憶する記憶媒体と、を備える。
バッファは、一定サイズの複数の領域に分割されている。分割されたバッファの各領域には、それぞれバッファIDが割り当てられる。そして、領域毎に、記憶媒体に記憶した、または記憶媒体に記憶するデータが一時的に記憶される。また、BIT記憶部は、バッファに記憶したデータの記憶場所、図38ではバッファIDなどを含む情報であるBITを記憶する。
なお、図38のバッファに記載されている(0000)は、バッファIDが0000のバッファに記憶されたバッファデータを表している。また、BIT記憶部に記載されている0000は、バッファデータを記憶するバッファのバッファIDを表している。
バッファセット情報記憶部は、各制御モジュールのバッファに記憶されたバッファデータの組合わせ、例えば、コピー元装置3801の横長に点線で囲われたバッファデータ(0000)と(0100)との組合わせであるバッファセットに関する情報を記憶する。
このバッファセットに関する情報には、コピー元装置3801が記憶する各バッファデータと、各バッファデータを記憶するコピー先装置3802のバッファとの関連付け情報が含まれる。例えば、制御モジュール#00のバッファセット情報記憶部で、バッファIDが0000のバッファに記憶されているバッファデータと、そのバッファデータを記憶するバッファIDが1000のバッファと、が関連付けられている。
以上の構成において、(a)制御モジュール#00および#01は、ホストコンピュータ等からWrite I/O命令を受付けると、そのWrite I/O命令にしたがってWriteデータを記憶媒体に記憶する。同時に、(b)制御モジュール#00および#01は、記憶媒体に記憶したWriteデータを制御モジュール#00および#01それぞれに備わるバッファに記憶する。この時、Writeデータは、バッファセット単位で管理される。
そして、(c)バッファへのWriteデータの書込みが完了すると、制御モジュール#00および#01は、バッファに書き込んだWriteデータについて、バッファセット単位でデータ転送、すなわち、リモートコピーを開始する。
(d)リモートコピーによってコピー元装置3801から送られたWriteデータは、バッファセット情報にしたがって、コピー先装置3802の制御モジュール#10および#11に備わるバッファに記憶される。すると、制御モジュール#10および#11は、バッファに記憶されたWriteデータを記憶媒体に記憶する。
以上の処理が完了すると、(e)コピー元装置3801およびコピー先装置3802の各制御モジュールは、バッファなどを解放する。
以上のように、記録専用バッファを使用したまとめ方式によるデータ送信を行なって、バッファセットを一括制御し、コピー先装置3802においてバッファセット単位でデータを記憶媒体に展開することで、順序性が保証される。
図38では、RAID装置3801からRAID装置3802へのリモートコピーについて説明したが、RAID装置3802からRAID装置3801へのリモートコピーでも同様の処理が行なわれる。この場合、RAID装置3802がコピー元装置、RAID装置3801がコピー先装置となる。
上記技術に関連して、書込みデータを一時的に記憶するバッファの使用状況を監視し、バッファの空き容量が少なくなるとバッファ内の情報を高速ディスクシステムに書き出し、使用状況が好転した場合に再びバッファに書き戻すバックアップ装置が知られている。
また、第1の系に障害が生じた場合には、第1の系から第2の系への切り替えを行うとともに、第2の系に第2のDBMが稼動する第2の計算機を加えてから、サブセットで回復または回復中の副DBを第2の計算機へ引き継ぐデータベースのリカバリ方法が知られている。
特開2006−268420号公報 特開2006−004147号公報
しかし、図39に示すように、コピー元装置3801では、転送済みのWriteデータを記憶するバッファやBITは、コピー先装置3802でWriteデータが記憶媒体に展開されるまで解放されずに記憶する情報が保持される。
このため、(f)コピー先装置3802においてWriteデータを記憶媒体に展開する処理が遅延している場合、コピー元装置3801−コピー先装置3802間の回線能力が低いまたは不均一である場合などには、Writeデータの転送処理に遅延が発生する。
例えば、コピー元装置3801−コピー先装置3802間の回線帯域の低さや不安定などによりWriteデータの転送処理に遅延が発生すると、その分コピー元装置3801やコピー先装置3802のバッファやBITを使用する時間が長くなるので、その間バッファの解放ができなくなる。
(g)このような状態でホストコンピュータ等から新たにWrite I/O命令を受けると、コピー元装置3801は、そのWrite I/O命令を受ける度に、Writeデータをバッファに記憶する。その結果、コピー元装置3801のバッファは次々と消費されていく。
(h)この状態が続くと、コピー元装置3801ではWriteデータを記憶可能なバッファを確保できなくなり、コピー元装置3801のバッファ枯渇が発生してしまう。また、設定されているバッファの大きさ以上に大きいWriteデータを処理する場合も、同様にコピー元装置3801でのバッファ枯渇が発生してしまう。
バッファ枯渇の状態では、ホストコンピュータ等からのWrite I/O命令をコピー元装置3801が処理せずにデータ転送が止まっている状態であるため、この状態を長く継続することはできない。
そのため、(i)一時的にWrite I/O命令の処理を停止し、かつ、一定時間経過してもバッファ枯渇状態が解消されない場合は、バッファの内容をクリアするバッファHalt処理が行なわれる。なお、記録専用バッファやバッファセット情報記憶部に記憶された一部または全部のデータをバッファHalt処理の対象にすることができる。コピー元装置3801およびコピー先装置3802は、バッファHalt処理を行なって、バッファをクリアするとともにWrite I/O命令の処理を再開する。
この時、コピー元装置3801は、バッファ内のWriteデータ等の情報を専用のビットマップに書き戻す。そして、コピー元装置3801は、バッファHalt処理を実行後にそのビットマップにしたがって順序性を保証しないリモートコピー転送を行なう。この場合、順序性を保証したリモートコピーが中断されてしまう、という問題がある。
本記憶装置は、上述した問題に鑑みてなされたものであり、その解決しようとする課題は、データの転送処理に遅延が生じる場合でも、順序性を保証したリモートコピーを行なうことができる記憶装置、制御装置および記憶装置の制御方法を提供することである。
本記憶装置の1つの観点によれば、本記憶装置は、以下の構成要素を備える。
第1の記憶手段は、上位装置から送信されるデータを記憶する記憶領域を有する記憶手段である。また、第2の記憶手段は、データを一時的に記憶する記憶手段である。
受信処理手段は、前記上位装置から送信されるデータを受信する。
第1の記憶処理手段は、前記上位装置から受信したデータを前記第1の記憶手段に記憶するとともに、前記上位装置から受信したデータを前記第2の記憶手段に分散して受信順に記憶する。
データ群出力手段は、複数の前記第2の記憶手段それぞれに記憶された前記データを含むデータ群を一括して出力する。
データ群記憶領域確保手段は、前記データ群出力手段による出力処理に異常を検出すると、前記第1の記憶手段に備わる複数の記憶領域から、更新頻度および空き容量に基づいて記憶領域を選択することによって、前記データ群を記憶するデータ群記憶領域を確保する。
若しくは、データ群記憶領域確保手段は、前記データ群出力手段による出力処理に異常を検出すると、前記第1の記憶手段に備わる複数の記憶領域のうち、更新頻度が所定頻度よりも低い記憶領域であって、前記データ群出力手段の出力先に保持されているデータと同じデータが記憶されている記憶領域を選択することによって、前記データ群を記憶するデータ群記憶領域を確保する。
退避処理手段は、前記第2の記憶手段の使用状況に応じて、前記データ群を複数の前記第2の記憶手段から読み出して前記データ群記憶領域に退避する。
第2の記憶処理手段は、前記データ群出力手段による出力処理が完了して未使用となった前記第2の記憶手段の記憶領域それぞれに、前記データ群記憶領域に退避した前記データ群を分散して記憶する。
本記憶装置によると、データの転送処理に遅延が生じる場合でも、順序性を保証したリモートコピーを行なうことができる記憶装置、制御装置および記憶装置の制御方法を提供することができる。
本実施例に係るストレージの構成の概要を示す図である。 本実施例に係る制御モジュールが備えるメモリの具体的な構成例を示す図である。 本実施例に係るバッファ管理テーブルの構成例を示す図である。 本実施例に係るバッファセット管理テーブルの構成例を示す図である。 本実施例に係る退避用バッファ管理テーブルの構成例を示す図である。 本実施例に係るディスク装置管理テーブルの構成例を示す図である。 本実施例に係るSnapOPC+の概要を説明する図である。 本実施例に係るSnapOPC+用Pool管理テーブルの構成例を示す図である。 本実施例に係るThin Provisioningの概要を説明する図である。 本実施例に係るThin Provisioning用Pool管理テーブルの構成例を示す図である。 本実施例に係るディスク装置ビットマップの構成例を示す図である。 本実施例に係る退避用バッファビットマップの構成例を示す図である。 本実施例に係る更新履歴情報の構成例を示す図である。 本実施例に係る退避用バッファの構成例を示す図である。 本実施例に係る退避用バッファの構成例を示す図である。 本実施例に係る退避用バッファの構成例を示す図である。 本実施例に係るバッファ退避処理を説明する図である。 本実施例に係るバッファ退避処理を説明する図である。 本実施例に係るストレージシステムの処理の概要を示すフローチャートである。 本実施例に係る順方向のリモートコピー(ステップS1901〜S1902)の概要を示すフローチャートである。 本実施例に係る順方向のリモートコピー(ステップS1901〜S1902)の概要を示すフローチャートである。 本実施例に係る退避用バッファの領域を生成する処理を示すフローチャートである。 本実施例に係る退避用バッファの制御モジュールへの割り当て(ステップS2107)の具体的な処理を示すフローチャートである。 本実施例に係る個別バッファへの格納処理(ステップS2005a)の概要を示す図である。 本実施例に係る個別バッファへの格納処理(ステップS2005a)を示すフローチャートである。 本実施例に係るバッファセットの切替え処理を示すフローチャートである。 本実施例に係るバッファ退避処理におけるライトバックポインタ情報・ステージポインタ情報を説明する図である。 本実施例に係るライトバックポインタ情報の更新処理を示すフローチャートである。 本実施例に係るステージポインタ情報の更新処理を示すフローチャートである。 本実施例に係るライトバックを示すフローチャートである。 本実施例に係るライトバックの具体例を示す図である。 本実施例に係るライトバックの具体例を示す図である。 本実施例に係るステージングを示すフローチャートである。 本実施例に係るステージングを示すフローチャートである。 図20Bに示したマッチング処理(ステップS2012a)の具体的な処理を示すフローチャートである。 本実施例に係る逆方向のリモートコピー時にセカンダリ装置が退避用バッファを確保する処理(ステップS1908)を示すフローチャートである。 本実施例に係るセカンダリ装置のリード処理を示すフローチャートである。 本実施例に係るセカンダリ装置のライト処理の概要を示す図である。 本実施例に係るセカンダリ装置のライト処理を示すフローチャートである。 順序性を保証したリモートコピー機能を備えるRAID装置の従来例を示す図である。 順序性を保証したリモートコピー機能を備えるRAID装置の従来例を示す図である。
以下、本実施形態の一例について、図1〜図37に基づいて説明する。
図1は、本実施例に係るストレージシステム100の構成の概要を示す図である。
図1に示すストレージシステム100は、RAID装置110と、RAID装置110とネットワークまたは専用線160を介して通信可能に接続するRAID装置120と、を備える。
RAID装置110は、キャッシュメモリ等に使用されるメモリを有する制御モジュール#00〜#03と、磁気ディスク装置などの記憶装置で構成されるディスク装置117と、退避用バッファ118と、を備える分散キャッシュメモリ型のRAID装置である。
制御モジュール#00〜#03は、ディスク装置117および退避用バッファ118と接続する。
例えば、制御モジュール#00は、CPU(Central Processing Unit)111aと、メモリ112aと、CA(Channel Adapter)113aと、RA(Remote Adapter)114aと、FC(Fibre Channel)115aおよび116aと、を備える。
なお、本実施例では、制御モジュール#01、#02および#03も、制御モジュール#00と同様の構成を有するものとする。制御モジュール#01は、CPU111b、メモリ112b、CA113b、RA114b、FC115bおよび116bを備える。また、制御モジュール#02は、CPU111c、メモリ112c、CA113c、RA114c、FC115cおよび116cを備える。そして、制御モジュール#03は、CPU111d、メモリ112d、CA113d、RA114d、FC115dおよび116dを備える。以下では、代表して制御モジュール#00の構成について説明する。
CPU111aは、所定のプログラム命令を実行して制御モジュール#00を動作させ、本実施例に係る順序性を保証したリモートコピーを実現する。
メモリ112aは、キャッシュメモリに使用される他に、後述する記録専用バッファ201やバッファセット情報記憶部202などに使用されるメモリである。
CA113aは、RAID装置110と接続するホストコンピュータであるホスト150に対するインターフェース制御部である。また、RA114aは、ネットワークまたは専用線160を介して接続される他のRAID装置等に対するインターフェース制御部である。
FC115aおよび116aは、ディスク装置117や退避用バッファ118とのインターフェース制御部である。本実施例では、FC115aはディスク装置117と接続し、FC116aは退避用バッファ118と接続する。
ディスク装置117および退避用バッファ118は、1または2以上の記憶装置、例えば、磁気ディスク装置などを備える記憶装置である。
RAID装置120は、キャッシュメモリ等に使用されるメモリを有する制御モジュール#10〜#13と、磁気ディスク装置などの記憶装置で構成されるディスク装置127と、を備える分散キャッシュメモリ型のRAID装置である。
RAID装置120に備わる制御モジュール#10〜#13は、RAID装置110に備わる制御モジュール#00〜#03と同様の構成である。
ディスク装置127は、1または2以上の記憶装置、例えば、磁気ディスク装置などを備える記憶装置である。なお、必要に応じて、ディスク装置127を仮想的に実現してもよい。この場合、仮想的に実現したディスク装置127に仮想的な記憶領域を提供するディスク装置用プールが別途必要となる。ディスク装置用プールとして、例えば、後述するThin Provisioning用PoolやSnapOPC+用Poolを使用することができる。
また、ディスク装置127には、必要に応じて、退避用バッファ130を含むことができる。この場合、ディスク装置127に備わる記憶装置の一部を利用して退避用バッファ130を構築すればよい。なお、退避用バッファ130は、退避用バッファ118と同様に、ディスク装置127と独立した装置であってもよい。
以上の構成において、「データ群」として、バッファセットデータを用いることができる。
また、「第1の記憶手段」は、1または2以上の磁気ディスク装置等で構成されるディスク装置117や127の一部または全部を用いて実現することができる。「第2の記憶手段」は、メモリ112a〜112dや122a〜122dの一部の領域を用いて実現することができる。「データ群記憶領域」は、退避用バッファ118やディスク装置127の一部または全部を用いて実現することができる。
また、「受信処理手段」は、例えば、CPU111aなどがメモリ112a上などに展開されたプログラム命令を実行することにより、または、CPU121aなどがメモリ122a上などに展開されたプログラム命令を実行することにより実現することができる。「第1の記憶処理手段」、「データ群出力手段」、「データ群記憶領域確保手段」、「退避処理手段」および「第2の記憶処理手段」なども、CPU111aなどがプログラム命令を実行することにより実現することができる。
なお、図1では、RAID装置110および120が4つの制御モジュールを備える場合について示しているが、これに限定する趣旨ではない。RAID装置110および120は、分散キャッシュメモリ型のRAID装置であればよい。CPU、CA、RAおよびDAの数についても、図1に示す数に限定する趣旨ではない。
以下の説明では、RAID装置110を「プライマリ装置110」といい、RAID装置120を「セカンダリ装置120」という。
図2は、本実施例に係る制御モジュールが備えるメモリ200、例えば、図1に示したRAID装置110の制御モジュール#00に備わるメモリ112aの構成例を示す図である。
なお、RAID装置110の各制御モジュール#01〜#03に備わるメモリ112b、112cおよび112d、RAID装置120の各制御モジュール#10〜#13に備わるメモリ122a、122b、122cおよび122dも、図2と同様の構成でよい。
図2に示すメモリ200は、記録専用バッファ201と、バッファセット情報記憶部202と、を備える。また、メモリ200は、バッファ管理テーブル記憶部203と、バッファセット管理テーブル記憶部204と、退避用バッファ管理テーブル記憶部205と、未使用バッファID記憶部206と、を備える。さらに、メモリ200は、ディスク装置管理テーブル記憶部207と、ディスク装置ビットマップ記憶部208と、退避用バッファビットマップ記憶部209と、更新履歴情報記憶部210と、を備える。
記録専用バッファ201は、バッファ201aとBIT記憶部201bとを備える。
バッファ201aは、ディスク装置117などに記憶するもしくは記憶したデータ、例えば後述するWriteデータなどを一時的に記憶する。本実施例に係るバッファ201aは、一定のサイズを有する8つの領域に区分されている。この区分された領域毎に固有の識別情報が割り当てられる。なお、本実施例ではバッファ201aが8つの領域に区分される場合を例に説明するが、バッファ201aが8つの領域に区分される構成に限定する趣旨でないのは当然である。
以下、この区分された領域を「個別バッファ」という。また、個別バッファに割り当てられる識別情報を「バッファID」という。そして、個別バッファに記憶されたデータを「バッファデータ」という。
例えば、図2のバッファ201a内に記載の(0000)、(0001)、(0002)、・・・に関し、括弧内の数字0000、0001、0002、・・・は、個別バッファ毎に割当てられたバッファIDを示す。括弧付きの数字(0000)、(0001)、(0002)、・・・は、それぞれ括弧内のバッファIDが示す個別バッファに記憶されたバッファデータを意味している。
BIT記憶部201bは、バッファ201a内の個別バッファに記憶されているバッファデータが展開されているLU(Logical Unit)やLBA(Logical Block Address)、データサイズ、コピーセッションの番号などを含むBITを記憶する。
BIT記憶部201bに記載の0000、0001、0002、・・・はバッファ201a内の各個別バッファに割当てられたバッファIDを示している。例えば、BIT記憶部201b内の0000は、バッファIDが0000の個別バッファに記憶されているバッファデータが展開されているLUやLBA、データサイズ、コピーセッションの番号などを含むBITを記憶している。
バッファセット情報記憶部202は、同一RAID装置内の各制御モジュールの個別バッファの組み合わせであるバッファセットを示す識別情報、すなわち、後述するバッファセットIDを記憶する。
以下、バッファセットに関する情報を「バッファセット情報」という。さらに、バッファセットに記憶されるバッファデータを総じて「バッファセットデータ」という。
本実施例では、各制御モジュールのバッファ201aに8個の個別バッファが備わっているので、バッファセットも8個となる。説明を簡単にするために、バッファセットIDは、後述するマスタ制御モジュールの個別バッファのバッファIDと同一であるとする。
バッファセット情報には、RAID装置間でリモートコピーを行なう場合の、プライマリ装置110に実装されている制御モジュールに備わる個別バッファと、セカンダリ装置120に実装されている制御モジュールに備わる個別バッファとを関連付ける情報も含まれる。この関連付ける情報をバッファセット情報に含める処理を「マッチング処理」という。
以下、プライマリ装置110からセカンダリ装置120へのリモートコピーの場合、プライマリ装置110に実装されている制御モジュールに備わる個別バッファのバッファIDを、「コピー元ID」という。そして、セカンダリ装置120に実装されている制御モジュールに備わる個別バッファのバッファIDを、「コピー先ID」という。
セカンダリ装置120からプライマリ装置110へのリモートコピーの場合、セカンダリ装置120に実装されている制御モジュールに備わる個別バッファのバッファIDが、「コピー元ID」となる。そして、プライマリ装置110に実装されている制御モジュールに備わる個別バッファのバッファIDが、「コピー先ID」となる。
例えば、RAID装置110は、分散キャッシュメモリ型のRAID装置なので、Writeデータ等のデータを、各制御モジュールの個別バッファ、図2の例ではバッファIDが0000、0100、0200および0300の個別バッファに分散して記憶する。
この場合、バッファセット情報記憶部202には、バッファIDが0000、0100、0200および0300の個別バッファを含むバッファセットを表すバッファセット情報が記憶される。
そして、バッファセット情報には、例えば、コピー元IDとコピー先IDが、それぞれ0000と1000、0100と1100、0200と1200、0300と1300であるという組み合わせ情報が含まれる。
なお、バッファセット情報記憶部202に示すバッファID0000、0100、0200および0300は、それぞれプライマリ装置110に実装されている制御モジュール#00、#01、#02および#03に備わる個別バッファの例示である。同様に、バッファセット情報記憶部202に示すバッファID1000、1100、1200および1300は、それぞれセカンダリ装置120に実装されている制御モジュール#10、#11、#12および#13に備わる個別バッファの例示である。
本実施例に係るリモートコピーは、バッファセット単位で行なわれる。バッファセット単位のコピー対象データには、記録専用バッファ201に記憶されているBITおよびバッファデータと、バッファセット情報記憶部202に記憶されているバッファセット情報と、が含まれる。
本実施例では、バッファセット単位のコピー対象データを、1つの「世代」として管理する。世代の具体例は、図16に示される。
バッファ管理テーブル記憶部203は、記録専用バッファ201等の管理に使用するバッファ管理テーブル300(図3図示)を記憶する。バッファ管理テーブル300については後述する。
バッファセット管理テーブル記憶部204は、バッファセットの使用状態の管理に使用するバッファセット管理テーブル400(図4図示)を記憶する。バッファセット管理テーブル400については後述する。
退避用バッファ管理テーブル記憶部205は、退避用バッファ118の管理に使用する退避用バッファ管理テーブル500(図5図示)を記憶する。退避用バッファ管理テーブル500については後述する。
未使用バッファID記憶部206は、コピー先、例えば、プライマリ装置110からセカンダリ装置120にリモートコピーを行なう場合にはセカンダリ装置120に備わる未使用の個別バッファのバッファIDを記憶する。以下、未使用の個別バッファのバッファIDを「未使用バッファID」という。例えば、プライマリ装置110からセカンダリ装置120にリモートコピーを行なう場合、プライマリ装置110は、セカンダリ装置120から未使用バッファIDの通知を受けると、通知された未使用バッファIDを未使用バッファID記憶部206に記憶する。
ディスク装置管理テーブル記憶部207は、自装置のディスク装置117または127に備わる各記憶装置の使用状況の管理に使用するディスク装置管理テーブル600(図6図示)を記憶する。ディスク装置117または127を仮想的に実現する場合、ディスク装置管理テーブル記憶部207は、SnapOPC(One Point Copy)+用Pool管理テーブル800(図8図示)やThin Provisioning用Pool管理テーブル1000(図10図示)などを記憶する。ディスク装置管理テーブル600、SnapOPC+用Pool管理テーブル800およびThin Provisioning用Pool管理テーブル1000については後述する。
ディスク装置ビットマップ記憶部208は、自装置のディスク装置117または127に備わる記憶領域の使用状況の管理に使用するディスク装置ビットマップ1100(図11図示)を記憶する。ディスク装置ビットマップ1100については後述する。
退避用バッファビットマップ記憶部209は、退避用バッファ118やディスク装置127に確保される退避用バッファ130に備わる記憶領域の使用状況の管理に使用する退避用バッファビットマップ1200(図12図示)を記憶する。退避用バッファビットマップ1200については後述する。
更新履歴情報記憶部210は、自装置のディスク装置117または127に備わる記憶領域に記憶されるデータの更新履歴情報1300(図13図示)を記憶する。更新履歴情報1300については後述する。
以上の構成において、プライマリ装置110からセカンダリ装置120にリモートコピーを行なう場合を考える。この場合、プライマリ装置110は、Writeデータの記録専用バッファ201への格納やWriteデータのセカンダリ装置120への転送などを、バッファセット単位で一括して行なう。そして、セカンダリ装置120は、プライマリ装置110から転送されたWriteデータをディスク装置127に展開する処理などを、バッファセット単位で一括して行う。その結果、順序性を保証したリモートコピーが実現される。
なお、バッファセットを用いて順序性を保証するリモートコピーは公知の技術であり、例えば、特開2006−260292号公報などに開示されている。また、SnapOPC+については、例えば、特開2009−146228号公報などに開示されている公知の技術である。同様に、Thin Provisioningも公知の技術である。
図3は、本実施例に係るバッファ管理テーブル300の構成例を示す図である。
バッファ管理テーブル300は、対象バッファセットIDと、ライトバックポインタ情報と、ステージポインタ情報と、バッファ閾値と、を対応付けて記憶する。
対象バッファセットIDは、現在使用しているバッファセットのバッファセットIDを示す情報である。ライトバックポインタ情報は、図29に示すライトバックの対象となる世代を示す情報である。ステージポインタ情報は、図32Aおよび図32Bに示すステージングが行なわれた世代を示す情報である。バッファ閾値は、後述のライトバックを実行するか否かを判断する基準として使用する情報である。
図4は、本実施例に係るバッファセット管理テーブル400の構成例を示す図である。
バッファセット管理テーブル400は、バッファセットIDと、使用目的と、対象世代と、格納I/O数と、を対応付けて記憶する。
使用目的は、バッファセットIDが示すバッファセット毎にあらかじめ設定される、バッファセットの使用目的を示す情報である。例えば、バッファセットを、ステージングに使用する場合には「ステージング」が設定され、ライトバックに使用する場合には「ライトバック」が設定される。また、Writeデータのコピーデータを単にバッファセットに記憶する場合には「記憶」が設定され、バッファセットに記憶されたコピーデータをセカンダリ装置120に転送する場合には「転送」が設定される。
対象世代は、使用目的に設定された処理を行なう対象の世代である。格納I/O数は、バッファセットに記憶されているI/Oの数である。対象世代および格納I/O数は、例えば、Writeデータをバッファセットに記憶する毎に、プライマリ装置110によって更新される。
なお、図4に示す「−」は、未使用を設定する場合の例を示している。
図5は、本実施例に係る退避用バッファ管理テーブル500の構成例を示す図である。
退避用バッファ管理テーブル500は、退避用バッファ118に記憶可能なコピー対象データの最大世代数と、退避用バッファ118内の記憶領域であって制御モジュール毎に割り当てられた記憶領域の先頭アドレスを定義した退避位置と、を対応付けて記憶する。
最大世代数は、退避用バッファ118の初期化時などに決定される。
以下、退避用バッファ118内に制御モジュール毎に割り当てられた記憶領域であって1世代分の記憶領域を「個別退避用バッファ」という。例えば、図14に記載されているLU#0において、3つに分けられた記憶領域それぞれが個別退避用バッファである。
図6は、本実施例に係るディスク装置管理テーブル600の構成例を示す図である。
ディスク装置管理テーブル600は、装置番号と、装置番号が示す記憶装置の状態情報と、を対応付けて記憶する。
装置番号は、ディスク装置117やディスク装置127に備わる記憶装置に割当てられる識別番号である。また、状態情報は、装置番号が示す記憶装置が使用されているか否かを示す情報である。装置番号が示す記憶装置が使用中の場合には状態情報に「使用」と設定され、記憶装置が使用していない場合には状態情報に「未使用」と設定される。
ここで、例えば、図7に示すように、ディスク装置127を仮想化してSnapOPC+を実現する場合を考える。
図7には、プライマリ装置110に備わるディスク装置117、セカンダリ装置120に備わる仮想化されたディスク装置127およびSnapOPC+用Pool128のみを簡略化して記載している。
仮想化されたディスク装置127は、例えば、曜日毎に、ディスク装置127a、127b、127c、・・・および127eを備える。そして、例えば、月曜日にプライマリ装置110から送られるデータは、仮想化されたディスク装置127aに格納され、火曜日にプライマリ装置110から送られるデータは、ディスク装置127bに格納される。同様に、金曜日にプライマリ装置110から送られるデータは、ディスク装置127eに格納される。
SnapOPC+用Pool128は、1または2以上の記憶装置、例えば、磁気ディスク装置などを備える記憶装置である。SnapOPC+用Pool128の記憶領域は、必要に応じて、仮想ディスク装置127に設定されたディスク装置127a、127b、127c、・・・および127eにブロック単位で割当てられる。SnapOPC+用Pool128の記憶領域は、図8に示すSnapOPC+用Pool管理テーブル800によって管理される。
図8は、本実施例に係るSnapOPC+用Pool管理テーブル800の構成例を示す図である。
SnapOPC+用Pool管理テーブル800は、割当て先と、Pool領域数と、論理アドレスと、物理アドレスと、を対応付けて記憶する。
割当て先は、SnapOPC+用Pool128の記憶領域の割当て先を示す情報であり、例えば、図7に示した月曜日用のディスク装置127a、火曜日用のディスク装置127b、水曜日用のディスク装置127cなどである。一部の記憶領域を退避用バッファとして使用する場合、割当て先に退避用バッファが登録される。
Pool領域数は、割当てに使用したSnapOPC+用Pool128の記憶領域の数である。
論理アドレスは、割当てに使用したSnapOPC+用Pool128の記憶領域の割当て先の論理アドレスである。
物理アドレスは、割当てに使用したSnapOPC+用Pool128の記憶領域のSnapOPC+用Pool128における物理アドレスである。
ここで、例えば、図9に示すように、ディスク装置127を仮想化してThin Provisioningを実現した場合を考える。
図9には、プライマリ装置110に備わるディスク装置117、セカンダリ装置120に備わる仮想化されたディスク装置127およびThin Provisioning用Pool129のみを簡略化して記載している。
仮想化されたディスク装置127は、各記憶領域に、必要に応じて、Thin Provisioning用Pool129の記憶領域が割当てられている。
Thin Provisioning用Pool129は、1または2以上の記憶装置、例えば、磁気ディスク装置などを備える記憶装置である。Thin Provisioning用Pool129の記憶領域は、必要に応じて、仮想化されたディスク装置127にブロック単位で割当てられる。Thin Provisioning用Pool129の記憶領域は、図10に示すThin Provisioning用Pool管理テーブル1000によって管理される。
図10は、本実施例に係るThin Provisioning用Pool管理テーブル1000の構成例を示す図である。
Thin Provisioning用Pool管理テーブル1000は、割当て先と、Pool番号と、Pool領域数と、論理アドレスと、物理アドレスと、を対応付けて記憶する。
割当て先は、Thin Provisioning用Pool129の記憶領域の割当て先のボリュームである。Thin Provisioning用Pool129の一部の記憶領域を退避用バッファとして使用する場合、割当て先に退避用バッファが登録される。
Pool番号は、Thin Provisioning用Pool129に備わる複数のボリュームのうち、割当てに使用するボリュームの番号である。
Pool領域数は、割当てに使用したThin Provisioning用Pool129の記憶領域の数である。
論理アドレスは、割当てに使用したThin Provisioning用Pool129の記憶領域の割当て先の論理アドレスである。
物理アドレスは、割当てに使用したThin Provisioning用Pool129における物理アドレスである。
図11は、本実施例に係るディスク装置ビットマップ1100の構成例を示す図である。
ディスク装置ビットマップ1100は、ディスク装置117やディスク装置127に含まれるRAID毎に、論理アドレスと、論理アドレスが示す1ブロックの記憶領域の状態情報と、を対応付けて記憶する。
状態情報とは、論理アドレスが示す記憶領域の使用状態を示す情報である。論理アドレスが示す記憶領域が使用中の場合には状態情報に「使用」と設定され、未使用の場合には状態情報に「未使用」と設定される。
図12は、本実施例に係る退避用バッファビットマップ1200の構成例を示す図である。
退避用バッファビットマップ1200は、退避用バッファ118に含まれるRAID毎に、論理アドレスと、論理アドレスが示す1ブロックの記憶領域の状態情報と、を対応付けて記憶する。
状態情報とは、論理アドレスが示す記憶領域の使用状態を示す情報である。論理アドレスが示す記憶領域が使用中の場合には状態情報に「使用」と設定され、未使用の場合には状態情報に「未使用」と設定される。
SnapOPC+用Pool128やThin Provisioning用Pool129の一部の記憶領域を退避用バッファとして使用する場合も、退避用バッファビットマップ1200を使用することができる。
図13は、本実施例に係る更新履歴情報1300の構成例を示す図である。
更新履歴情報1300は、コピー範囲と、時刻と、バックアップ状況と、を備える。
コピー範囲は、実行されたリモートコピーの範囲である。また、時刻は、リモートコピーが実行された時刻である。
バックアップ状況は、リモートコピーにより、プライマリ装置110のディスク装置117とセカンダリ装置120のディスク装置127とに同じデータが展開されているか否かを示す情報である。
例えば、リモートコピーにより、プライマリ装置110のディスク装置117とセカンダリ装置120のディスク装置127とに同じデータが展開されている場合、バックアップ状況に「済」が設定される。また、リモートコピーを未実行、または、リモートコピーにより、プライマリ装置110のディスク装置117とセカンダリ装置120のディスク装置127とに同じデータが展開されていない場合などは、バックアップ状況に「未」が設定される。
図14および図15は、本実施例に係る退避用バッファ118の構成例を示す図である。
なお、図14および図15には、退避用バッファ118の構成例を示すが、退避用バッファ130の場合も同様の構成とすることができる。この場合、退避用バッファ130は、退避用バッファ127の一部または全部の記憶装置を用いて実現できる。また、図14および図15には、制御モジュール#00〜#03を、記録専用バッファ201のバッファ201aのみを示す簡略化した模式図で示しているが、図14および図15に示す構成に限定する趣旨ではない。
図14および図15では、制御モジュール#00〜#03をまたぐ点線は、1世代分のバッファセットを示している。
図14は、退避用バッファ118を1つのRAIDで構成する場合の構成例を示す図である。
図14に示す退避用バッファ118として用いられるRAIDグループ1400は、論理ユニットLU#0〜LU#Fを有する。また、横長に点線で囲まれたLU#0−LU#3と、LU#4−LU#7と、LU#8−LU#Bと、LU#C−LU#Fと、がそれぞれ1つのボリュームグループを構成する。
RAIDグループ1400は、ボリュームグループ単位で使用される。また、制御モジュール毎に、記録専用バッファに対するボリュームグループが割り当てられている。
例えば、図14に示すRAIDグループ1400では、制御モジュール#00の記録専用バッファに、論理ユニットLU#0、#4、#8および#Cが割り当てられている。また、制御モジュール#01の記録専用バッファに、論理ユニットLU#1、#5、#9および#Dが割り当てられている。
同様に、制御モジュール#02の記録専用バッファに、論理ユニットLU#2、#6、#Aおよび#Eが割り当てられている。そして、制御モジュール#03の記録専用バッファに、論理ユニットLU#3、#7、#Bおよび#Fが割り当てられている。
ボリュームグループを構成する論理ユニットの数が実装制御モジュールの数を上回る場合は、1つの制御モジュールに対して複数の論理ユニットを割り当ててもよい。また、各ボリュームグループを構成する論理ユニットは、図16で示すように、バッファデータを記憶する個別バッファ単位で、BITおよびバッファセット情報が含まれるサイズで分割されている。この分割された領域が前述の「個別退避用バッファ」である。
各制御モジュールの個別バッファに記憶されているバッファデータは、例えば、図14に示される矢印が示すように、各制御モジュールに割り当てられたボリュームグループの個別退避用バッファに世代順に記憶される。
図15は、本実施例に係る退避用バッファ118を2つのRAIDグループで構成する場合の構成例を示す図である。
図15に示す退避用バッファ118として用いられるRAIDグループ1500は、論理ユニットLU#0〜LU#Fを備えるRAIDグループ1501と、論理ユニットLU#10〜LU#1Fを備えるRAIDグループ1502と、で構成される。
例えば、論理ユニットLU#0、LU#2、LU#10およびLU#12がボリュームグループを構成する。また、論理ユニットLU#1、LU#3、LU#11およびLU#13がボリュームグループを構成する。
同様に、論理ユニットLU#4、LU#6、LU#14およびLU#16がボリュームグループを構成し、論理ユニットLU#5、LU#7、LU#15およびLU#17がボリュームグループを構成する。また、論理ユニットLU#8、LU#A、LU#18およびLU#1Aがボリュームグループを構成し、論理ユニットLU#9、LUB#B、LU#19およびLU#1Bがボリュームグループを構成する。さらに、論理ユニットLU#C、LU#E、LU#1CおよびLU#1Eがボリュームグループを構成し、論理ユニットLU#D、LU#F、LU#1DおよびLU#1Fがボリュームグループを構成する。
そして、RAIDグループ1500は、制御モジュール毎に、記録専用バッファに対してボリュームグループ内の論理ユニットが割り当てられている。
例えば、図15に示すRAIDグループ1500では、制御モジュール#00の記録専用バッファに、論理ユニットLU#0、LU#1、LU#4、LU#5、LU#8、LU#9、LU#CおよびLU#Dが割り当てられている。また、制御モジュール#01の記録専用バッファに、論理ユニットLU#2、LU#3、LU#6、LU#7、LU#A、LU#B、LU#EおよびLU#Fが割り当てられている。
同様に、制御モジュール#02の記録専用バッファに、論理ユニットLU#10、LU#11、LU#14、LU#15、LU#18、LU#19、LU#1CおよびLU#1Dが割り当てられている。また、制御モジュール#03の記録専用バッファには、論理ユニットLU#12、LU#13、LU#16、LU#17、LU#1A、LU#1B、LU#1EおよびLU#1Fが割り当てられている。
各ボリュームグループを構成する論理ユニットは、個別バッファと同じサイズで分割されている。そして、各制御モジュールの個別バッファに記憶されているバッファデータは、例えば、図15に示される矢印が示すように、各制御モジュールに割り当てられたボリュームグループの個別退避用バッファ世代順に記憶される。
図15に示したように、制御モジュールに備わる記録専用バッファを2以上のRAIDグループに割り当てると、各RAIDグループの負荷を分散する効果が得られる。なお、図15には、2つのRAIDグループを使用した場合を示したが、2以上のRAIDグループを使用しても同様の効果を得ることができるのは当然である。
上述のように、本実施例に係る退避用バッファ118、例えば図14に示したLU#0〜LU#Fや図15に示したLU#0〜LU#FおよびLU#10〜LU#1Fは、個別バッファ、BITおよびバッファセット情報を含むサイズの個別退避用バッファに分割して使用される。図16にその概要を示す。退避用バッファ118の各個別退避用バッファには、1世代分のコピー対象データ、すなわちバッファセット情報、BITおよびバッファデータが世代順で記憶される。
図17および図18は、本実施例に係るバッファ退避処理を説明する図である。
なお、図17および図18では、プライマリ装置110からセカンダリ装置120にリモートコピーを実施する場合のプライマリ装置110の動作を示している。セカンダリ装置120からプライマリ装置110にリモートコピーを実施する場合のセカンダリ装置120も、図17および図18に示した動作と同様の動作を行なうことができる。
また、図17および図18は、理解を容易にするために、プライマリ装置110の構成を簡略化して記載してある。例えば、制御モジュールは、#00と#01のみを記載しているが、プライマリ装置110を図17および図18に示す構成に限定する趣旨ではない。また、制御モジュール毎にディスク装置117を記載しているが、説明のし易さのためであって、プライマリ装置110を図17および図18に示す構成に限定する趣旨ではない。
図17は、バッファセット1−4が、転送中またはセカンダリ装置120における展開処理待ちのため使用中となっている状態で、Write I/O命令を受付けた場合のバッファ退避処理を説明する図である。以下、バッファセット1−4に記憶されているバッファセットデータがそれぞれ世代1、世代2、世代3および世代4であるものとする。また、プライマリ装置110に備わる全制御モジュールを総じて「制御モジュール」という。
(a)Write I/O命令を受付けると、制御モジュールは、自身のディスク装置117にWriteデータを記憶するとともに、(b)Writeデータのコピーデータをバッファセット5に記憶する。バッファセット5に記憶されたバッファセットデータは世代5となる。
ここで、例えば、使用中のバッファセット数がバッファ閾値を超えると、(c)制御モジュールは、次にセカンダリ装置120に転送予定のバッファデータ、例えばバッファセット5に記憶されている世代5のバッファセットデータを退避用バッファ118に退避する。
また、バッファセットデータを退避用バッファ118に退避すると、制御モジュールは、新たなWriteデータ等の記憶先をバッファセット5からバッファセット6に切り替える。
(d)新たなWrite I/O命令を受付けると、制御モジュールは、Writeデータをディスク装置に記憶するとともに、Writeデータのコピーデータをバッファセット6に記憶する。バッファセット6に記憶されたバッファセットデータは世代6となる。
この時、バッファセット6の世代6よりも古い世代、例えば図17では世代5が退避用バッファ118に退避されているので、(e)制御モジュールは、バッファセット6のバッファセットデータを退避用バッファ118に退避する。
使用中の状態にあったバッファセット1が解放されると、(f)制御モジュールは、退避用バッファ118に記憶されている世代5のバッファセットデータを読み出して、バッファセット1に記憶する。なお、本実施例で「解放」とは、バッファセットを未使用の状態に置くことをいう。
図19は、本実施例に係るストレージシステム100の処理の概要を示すフローチャートである。
ステップS1901において、ホスト150からWrite I/O命令を受けると、プライマリ装置110は、Writeデータをディスク装置117に書き込む。同時に、プライマリ装置110は、Writeデータをセカンダリ装置120に送信し、リモートコピーを行なう。このとき、セカンダリ装置120は、プライマリ装置110に異常がないかを監視している。
以下、プライマリ装置110からセカンダリ装置120へのリモートコピーを、「順方向」のリモートコピーという。
プライマリ装置110に異常がなければ(ステップS1902 NO)、プライマリ装置110からセカンダリ装置120への順方向のリモートコピーが継続する。プライマリ装置110に異常を検出すると(ステップS1902 YES)、セカンダリ装置120では、リモートコピーを停止する(ステップS1903)。この場合、プライマリ装置110は、復旧のため保守作業が行なわれる。
ステップS1904において、セカンダリ装置120は、セカンダリ装置120のみで運用を開始する。例えば、ホスト150からからWrite I/O命令を受けると、セカンダリ装置120は、Writeデータをディスク装置127に書き込む。
プライマリ装置110の復旧を検出するまで、セカンダリ装置120は単独での運用を継続する(ステップS1905 NO)。プライマリ装置110が復旧したことを検出すると(ステップS1905 YES)、セカンダリ装置120は、セカンダリ装置120からプライマリ装置110へのリモートコピーを開始する(ステップS1906)。
以下、セカンダリ装置120からプライマリ装置110へのリモートコピーを、「逆方向」のリモートコピーという。
プライマリ装置110との通信に遅延等の通信異常を検出すると(ステップS1907 YES)、セカンダリ装置120は、ディスク装置127に退避用バッファ130を確保する(ステップS1908)。その後、セカンダリ装置120は、処理をステップS1906に移行し、プライマリ装置110へのリモートコピーを継続する。ただし、既に退避用バッファ130が確保されている場合、ステップS1908の処理はスキップすることができる。
セカンダリ装置120は、プライマリ装置110との通信に異常を検出しなければ(ステップS1907 NO)、ユーザからの終了指示の有無を確認する(ステップS1909)。ユーザかの終了指示がない場合(ステップS1909 NO)、セカンダリ装置120は、プライマリ装置110へのリモートコピーを継続する(ステップS1906)。ユーザから終了指示がある場合(ステップS1909 YES)、プライマリ装置110およびセカンダリ装置120は、リモートコピーを終了する(ステップS1910)。
図20Aおよび図20Bは、本実施例に係る順方向のリモートコピー(ステップS1901〜S1902)の概要を示すフローチャートである。以下、図20Aおよび図20Bに基づいて、本実施例に係る順方向のリモートコピーの概要を説明する。
プライマリ装置110は、起動すると、バッファ初期構成処理を行なう。例えば、プライマリ装置110は、あらかじめ設定された構成情報にしたがって、各制御モジュールに備わるメモリ200に、図2に示した構成の領域を確保し、各領域について初期化を行なう。
また、プライマリ装置110は、制御モジュール毎に、記録専用バッファに対するボリュームグループを割り当てる。具体的な処理は、図21および図22で説明する。
また、プライマリ装置110は、バッファセットを生成し、生成したバッファセットについて初期作成処理を行う。例えば、プライマリ装置110は、各制御モジュールの個別バッファを組み合わせてバッファセットを生成する。そして、プライマリ装置110は、生成したバッファセットをバッファセット情報としてバッファセット情報記憶部202に記憶する。
以上の処理をセカンダリ装置120も行なう。
プライマリ装置110は、さらに、バッファ管理テーブル300やバッファセット管理テーブル400、退避用バッファ管理テーブル500などについて初期化を行なう。
以上の処理により、プライマリ装置110−セカンダリ装置120間でリモートコピーを行なう準備が完了する。そして、ホスト150からWrite I/O命令を受け付ける準備が完了すると、リモートコピーが開始する(ステップS2000a、S2000b)。
ステップS2001bにおいて、セカンダリ装置120は、プライマリ装置110に対して筐体接続状態の確認を行なう。例えば、セカンダリ装置120は、プライマリ装置110に対して、筐体接続状態確認のための応答要求を行なう。
一方、ステップS2001aにおいて、セカンダリ装置120から応答要求を受けると、プライマリ装置110は、セカンダリ装置120に対して筐体接続状態が正常である旨の応答を行なう。
ステップS2002bにおいて、セカンダリ装置120は、決まった時間内にプライマリ装置110から正常応答が返ってきているかを監視する。そして、決まった時間内にプライマリ装置110から正常応答が返ってきたことを確認すると(ステップS2002b YES)、セカンダリ装置120は、処理をステップS2003bに移行する。また、決まった時間内にプライマリ装置110から正常応答が返ってきていない場合(ステップS2002b NO)、セカンダリ装置120は、処理をステップS2015bに移行する。
なお、ステップS2001a、S2001b〜S2002bおよびS2015b〜S2016bに示した処理は、理解を容易にするために、図20Aのフローチャートの中に記載したが、フローチャートに示した処理と独立に処理を行なってもよい。以下に記載するステップS2013a、S2005b〜S2006bおよびS2015b〜S2016bに示した処理についても、フローチャートに示した処理と独立に処理を行なってもよい。
ステップS2002aにおいて、プライマリ装置110は、セカンダリ装置120に対して、未使用の個別バッファの通知を要求するために、未使用バッファ通知要求コマンドを発行する。
一方、セカンダリ装置120は、ステップS2003bに処理を移行し、プライマリ装置110からの未使用バッファ通知要求コマンドを受けるまで、未使用バッファ通知要求コマンドを監視する(S2003b NO)。
ステップS2003bにおいて、セカンダリ装置120は、プライマリ装置110からの未使用バッファ通知要求コマンドを検出すると(S2003b YES)、処理をステップS2004bに移行する。
ステップS2004bにおいて、セカンダリ装置120は、既に領域が解放された未使用となっている個別バッファを検索する。既に領域が解放されて未使用となっている個別バッファを検出すると、セカンダリ装置120は、検出した個別バッファのバッファIDを未使用バッファIDとしてプライマリ装置110に通知する。
一方、プライマリ装置110は、セカンダリ装置120から未使用バッファIDの通知を受けると、通知された未使用バッファIDを、未使用バッファID記憶部206に記憶する。
ステップS2003aにおいて、プライマリ装置110は、Writeデータを格納する対象のバッファセットを取得する。このWriteデータを格納する対象のバッファセットを「格納対象バッファセット」という。
例えば、プライマリ装置110は、バッファセット管理テーブル400を参照し、未使用に設定されているバッファセットIDを取得する。そして、プライマリ装置110は、その取得したバッファセットIDを、バッファ管理テーブル300の対象バッファセットIDに設定する。
プライマリ装置110は、バッファ管理テーブル300の対象バッファセットIDに設定したバッファセットIDが示すバッファセットを、「格納対象バッファセット」として以下の処理を行なう。
なお、プライマリ装置110は、ステップS2003aでは、マッチング処理を行なわない。プライマリ装置110は、マッチング処理を、後述するステップS2012a、すなわち、バッファセットデータの送信処理前に行なう。
ステップS2004aにおいて、プライマリ装置110は、バッファ管理テーブル300のライトバックポインタ情報に設定されている世代を1だけインクリメントした値に更新する。
ステップS2005aにおいて、プライマリ装置110は、格納対象バッファセットの個別バッファへのWriteデータの格納処理を行なう。
例えば、プライマリ装置110が、ホスト150からWrite I/O命令を受付けたとする。すると、プライマリ装置110は、そのWrite I/O命令とともに受信したWriteデータを、バッファ管理テーブル300の現在使用している対象バッファセットIDが示す格納対象バッファセット、すなわち、各制御モジュールの個別バッファに分散して記憶する。
ステップS2006aにおいて、プライマリ装置110は、格納対象バッファセットにデータを格納する格納領域が残っているか否かを判別する。格納対象バッファセットに格納領域が残っていないと判断した場合(ステップS2006a NO)、プライマリ装置110は、処理をステップS2008aに移行する。
また、ステップS2006aにおいて、格納対象バッファセットに格納領域が残っていると判断した場合(ステップS2006a YES)、プライマリ装置110は、処理をステップS2007aに移行する。この場合、プライマリ装置110は、格納対象バッファセット取得から一定時間経過したか否かを判別する(ステップS2007a)。
そして、格納対象バッファセット取得から一定時間経過していないと判断した場合(ステップS2007a NO)、プライマリ装置110は、処理をステップS2005aに移行する。また、格納対象バッファセット取得から一定時間経過したと判断した場合(ステップS2007a YES)、プライマリ装置110は、処理をステップS2008aに移行する。
ステップS2008aにおいて、プライマリ装置110は、ステップS2003aと同様の処理により、格納対象バッファセットを新たに取得する。そして、ステップS2009aにおいて、プライマリ装置110は、格納対象バッファセットを、ステップS2008aで取得した新たな格納対象バッファセットに切り替える。
以下では、切り替え前の格納対象バッファセットを、ステップS2011aの処理では「ライトバック対象バッファセット」といい、ステップS2014a以降の処理では「転送対象バッファセット」という。
ステップS2010aにおいて、プライマリ装置110は、ステップS2004aと同様の処理により、ライトバックポインタ情報を更新する。そして、ステップS2011aにおいて、プライマリ装置110は、ライトバックを行なう。すると、プライマリ装置110は、処理をステップS2012aに移行する。
ステップS2012aにおいて、プライマリ装置110は、マッチング処理を行なう。例えば、プライマリ装置110は、未使用バッファID記憶部206から未使用バッファIDを取得する。そして、プライマリ装置110は、取得した未使用バッファIDを転送対象バッファセットのコピー先IDに割り当てることにより、転送対象バッファセットのコピー元IDとコピー先IDとの関連付けを行なう。
一方、ステップS2005bにおいて、セカンダリ装置120は、プライマリ装置110との筐体接続状態の確認を行なうために、プライマリ装置110に対して、筐体接続状態確認のための応答要求を行なう。
ステップS2013aにおいて、セカンダリ装置120から応答要求を受けると、プライマリ装置110は、セカンダリ装置120に対して筐体接続状態が正常である旨の応答を行なう。
ステップS2006bにおいて、セカンダリ装置120は、決まった時間内にプライマリ装置110から正常応答が返ってきているかを監視する。そして、決まった時間内にプライマリ装置110から正常応答が返ってきたことを確認すると(ステップS2006b YES)、セカンダリ装置120は、処理をステップS2007bに移行する。また、決まった時間内にプライマリ装置110から正常応答が返ってきていない場合(ステップS2006b NO)、セカンダリ装置120は、処理をステップS2015bに移行する。
ステップS2014aにおいて、プライマリ装置110は、転送対象バッファセットに記憶されたバッファセットデータをセカンダリ装置120に送信する。このバッファセットデータには、各制御モジュールの、バッファ201aに記憶されているバッファデータと、BIT記憶部201bに記憶されているBITと、バッファセット情報記憶部202に記憶されているバッファセット情報と、が含まれる。
一方、ステップS2007bにおいて、セカンダリ装置120は、バッファセットデータの受信処理を行なう。例えば、セカンダリ装置120は、受信したバッファセットデータのうち、バッファデータをバッファ201aに、BITをBIT記憶部201bに、バッファセット情報をバッファセット情報記憶部202に、それぞれ記憶する。
ステップS2008bにおいて、セカンダリ装置120は、全てのバッファセットデータを受信したか否かを判別する。そして、まだ、全てのバッファセットデータを受信していないと判断すると(S2008b NO)、セカンダリ装置120は、処理をステップS2007bに移行し、ステップS2007b〜S2008bの処理を繰返す。
ステップS2008bにおいて、全てのバッファセットデータを受信したと判断すると(S2008b YES)、セカンダリ装置120は、処理をステップS2009bに移行する。
ステップS2009bにおいて、セカンダリ装置120は、ステップS2007bで取得したバッファセットデータが、自身に備わる記憶装置のディスク装置127に展開可能か否かを判断する。取得したバッファセットデータを展開可能と判断すると(S2009b YES)、セカンダリ装置120は、処理をステップS2010bに移行する。
ステップS2010bにおいて、セカンダリ装置120は、ステップS2007bで取得したバッファセットデータを、自身に備わるディスク装置127に展開する。この展開が終了すると、セカンダリ装置120は、処理をステップS2011bに移行し、バッファセットデータの展開が完了した旨をプライマリ装置110に通知する。以下、この通知を「バッファセットデータ展開完了通知」という。
バッファセットデータのディスク装置127への展開が終了すると、ステップS2012bにおいて、セカンダリ装置120は、バッファセットの解放処理を行なう。例えば、セカンダリ装置120は、バッファセットデータのディスク装置127への展開が完了したバッファセットを未使用に設定する。
ステップS2013bにおいて、セカンダリ装置120は、解放した領域に新たにバッファセット情報記憶部202および記録専用バッファ201の領域を確保して、例えば、図2に示した構成を構築する。
以上の処理が終了すると、セカンダリ装置120は、処理をステップS2014bに移行し、ステップS2012b〜S2013bの処理によって新たに使用可能となったバッファの未使用バッファIDをプライマリ装置110に通知する(ステップS2014b)。プライマリ装置110は、未使用バッファIDを通知されると、通知された未使用バッファIDを未使用バッファID記憶部206に記憶する。
一方、ステップS2015aにおいて、プライマリ装置110は、セカンダリ装置120からバッファセットデータ展開完了通知を受信したか否かを判断する。そして、バッファセットデータ展開完了通知を受信しない場合(S2015a NO)、ステップS2015aの処理を繰り返す。また、セカンダリ装置120からバッファセットデータ完了通知を受信すると(S2015a YES)、プライマリ装置110は、処理をステップS2016aに移行する。
ステップS2016aにおいて、プライマリ装置110は、ステップS2014aによってバッファセットデータ送信処理が行なわれた転送対象バッファセットについて、ステップS2012bと同様に、バッファセットの解放処理を行なう。すなわち、プライマリ装置110は、バッファセット管理テーブル400を参照し、データの転送が完了した転送対象バッファセットを未使用に設定する。
ステップS2017aにおいて、プライマリ装置110は、バッファ管理テーブル300を参照し、ステージポインタ情報に設定されている世代を1だけインクリメントした値に更新する。そして、ステップS2018aにおいて、プライマリ装置110は、未使用となったバッファセットの領域について初期化を行なうなどしてバッファの再構築処理を行なう。
ステップS2019aにおいて、プライマリ装置110は、ステージングが必要か否かを判別する。例えば、プライマリ装置110は、退避用バッファ118に退避した世代があるか否かによりステージングが必要か否かを判別する。
プライマリ装置110は、以下に示す(a)〜(d)の処理により、退避用バッファ118に退避した世代の有無を知ることができる。
(a)プライマリ装置110は、バッファ管理テーブル300を参照し、ライトバックポインタ情報とステージポインタ情報を取得する。
(b)プライマリ装置110は、バッファセット管理テーブル400を参照し、ステージポインタ情報に1を加えた世代から昇順に世代をたどり、バッファセット管理テーブル400に欠落している世代を検索する。
例えば、図3に示したバッファ管理テーブル300には、ステージポインタ情報として世代2が設定されている。そこで、プライマリ装置110は、図4に示したバッファセット管理テーブル400を参照し、世代2に1を加えた世代3から世代4、5、・・・と昇順に世代をたどる。すると、プライマリ装置110は、バッファセット管理テーブル400に欠落している世代7を検出する。
(c)プライマリ装置110は、バッファセット管理テーブル400を参照し、ライトバックポインタ情報の世代から降順に世代をたどり、バッファセット管理テーブル400に欠落している世代を検索する。
例えば、図3に示したバッファ管理テーブル300には、ライトバックポインタ情報として世代15が設定されている。そこで、プライマリ装置110は、図4に示したバッファセット管理テーブル400を参照し、世代15から世代14、13、・・・と降順に世代をたどる。すると、プライマリ装置110は、バッファセット管理テーブル400に欠落している世代12を検出する。
(d)以上の処理によって検出した世代7から世代12が、退避用バッファ118に退避されている世代であることがわかる。
ステップS2019aにおいて、退避用バッファ118に退避した世代が存在すると判断した場合(ステップS2019a YES)、プライマリ装置110は、処理をステップS2020aに移行する。また、退避用バッファ118に退避した世代が存在しないと判断した場合(ステップS2019a NO)、プライマリ装置110は、処理をステップS2022aに移行する。
ステップS2020aにおいて、プライマリ装置110は、ステージングに使用するバッファセット、すなわちステージング用バッファセットを取得する。
例えば、プライマリ装置110は、バッファセット管理テーブル400を参照し、未使用に設定されているバッファセットIDを「ステージング対象バッファセットID」として取得する。
また、プライマリ装置110は、バッファセット管理テーブル400を参照し、ステージング対象バッファセットIDと一致するバッファセットIDの対象世代に、後述するステージング対象世代を設定する。
また、プライマリ装置110は、バッファセット管理テーブル400を参照し、ステージング対象バッファセットIDと一致するバッファセットIDの使用目的を「ステージング」に設定する。
ステップS2021aにおいて、プライマリ装置110は、ステージングを実行する。そして、ステージングが完了すると、プライマリ装置110は、処理をステップS2012aに移行する。
以上の処理が終了すると、プライマリ装置110は、リモートコピーを終了、または、ステップS2005aに処理を移行してリモートコピーを継続する。また、ホスト150から新たにWrite I/O命令を受付けると、プライマリ装置110は、S2005a等に処理を移行して、リモートコピーを継続する。
また、セカンダリ装置120は、上述の処理が終了すると、リモートコピーを終了する、または、ステップS2007bに処理を移行してリモートコピーを継続する。
以上に、本実施例に係る順方向のリモートコピー(ステップS1901〜S1902)について説明した。本実施例に係る逆方向のリモートコピーでは、図20Aおよび図20Bに示したプライマリ装置110の処理をセカンダリ装置120に実行させ、図20Aおよび図20Bに示したセカンダリ装置120の処理をプライマリ装置110に実行させればよい。
以下、本実施例に係るリモートコピーについて具体的に説明する。
図21は、本実施例に係る退避用バッファ118の領域を生成する処理を示すフローチャートである。図21に示す処理は、例えば、プライマリ装置110の保守作業時に実行できる。
ステップS2101において、プライマリ装置110は、ユーザからの入力に応じて退避用バッファ118を設定すべき領域を記録専用バッファ201のバッファ201aから選択する。そして、プライマリ装置110は、処理をステップS2102に移行し、ユーザからの入力に応じてRAIDを構成するためのディスク装置を選択する。
ステップS2103において、プライマリ装置110は、ステップS2102で選択したディスク装置はRAIDを構成する条件を満たすか否かをチェックする。条件を満たさない場合(S2103 NO)、プライマリ装置110は、例えば、他のディスク装置を指定すべき旨を表示装置等に表示して、処理をステップS2102に移行する。
ステップS2103において、RAIDを構成する条件を満たす場合(S2103 YES)、プライマリ装置110は、処理をステップS2104に移行する。
ステップS2104において、プライマリ装置110は、ステップS2102で選択されたディスク装置で構成されるRAIDグループを生成し、プライマリ装置110の装置構成などを保持する構成情報にその情報を反映する。
ステップS2105において、プライマリ装置110は、ステップS2104で作成したRAIDグループ内に複数のボリュームを作成する。プライマリ装置110は、処理をステップS2106に移行し、ステップS2105で作成した論理ユニットの構成を構成情報に反映する。
ステップS2107において、プライマリ装置110は、図22で示す処理によって、各制御モジュールで使用するボリュームを決定する。以下、各制御モジュールで使用するボリュームを、必要に応じて「担当ボリューム」という。各制御モジュールは、この決定したボリュームを退避用バッファ118の領域として使用する。
以上の処理が終了すると、プライマリ装置110は、ステップS2108に移行して退避用バッファ118の領域を生成する処理を終了する。
図22は、本実施例に係る退避用バッファ118の制御モジュールへの割り当て(ステップS2107)の具体的な処理を示すフローチャートである。図22に示す処理は、プライマリ装置110の起動時の他に、保守作業時にも実行できる。
ステップS2201において、プライマリ装置110は、構成情報を参照し、退避用バッファ118として割り当てるRAIDグループの数(A)を取得する。
さらに、プライマリ装置110は、処理をステップS2202に移行し、構成情報からプライマリ装置に実装されている制御モジュールの数(B)を取得する。
ステップS2203において、プライマリ装置110は、RAIDグループあたりの制御モジュールの数(C)=(B)/(A)を算出する。そして、処理をステップS2204に移行し、各RAIDグループに対して(C)個の制御モジュールを割り当てる。
ステップS2205において、プライマリ装置110は、各RAIDグループのボリュームの数を(C)で除算し、担当ボリュームの数(D)を算出する。そして、プライマリ装置110は、処理をステップS2206に移行し、ステップS2205の算出結果から、RAIDグループ毎に割り当てた制御モジュールに対して担当ボリュームを(D)個を割り当てる。
ステップS2207において、プライマリ装置110は、以上の処理によって決定した構成を構成情報に反映するとともに、各制御モジュールが備える設定情報にも反映し、処理を終了する(ステップS2208)。
図23は、本実施例に係る個別バッファへの格納処理(ステップS2005a)の概要を示す図である。
なお、図23は、理解を容易にするために、順方向のリモートコピーの場合のプライマリ装置110におけるディスク装置117と個別バッファとの関係のみに簡略化した図となっている。しかし、ディスク装置117や個別バッファなど本実施例に係るストレージシステム100の構成を限定する趣旨ではない。また、逆方向のリモートコピーの場合のセカンダリ装置120においても、図23に示す個別バッファへの格納処理を行なうことができるのは当然である。
例えば、プライマリ装置110が、ホスト150からWrite I/O命令を受付けたとする。すると、プライマリ装置110は、受け付けたWrite I/O命令とともに受信したWriteデータを、バッファ管理テーブル300に記録された現在使用している対象バッファセットIDが示す格納対象バッファセット、すなわち、各制御モジュールの個別バッファに分散して記憶する。
ここで、ホスト150から連続してWrite I/O命令を受けて、ディスク装置117に、WriteデータA、B、a、C、bの順にWriteデータが書き込まれる場合を考える。ただし、WriteデータAとaは同じWriteアドレスを指定されたデータであるとする。また、WriteデータBとbは同じWriteアドレスを指定されたデータであるとする。なお、Write I/O命令の要求にしたがってWriteデータを格納する記憶領域の先頭アドレスを「Writeアドレス」という。
(1)プライマリ装置110は、ホスト150からWrite I/O命令を受付けると、受け付けたWrite I/O命令とともに受信したWriteデータと同じWriteアドレスのデータが個別バッファに既に格納されているかをBITなどを参照して確認する。
そして、Writeデータと同じWriteアドレスのデータが個別バッファに格納されていなければ、バッファ管理テーブル300の現在使用している対象バッファセットIDが示す格納対象バッファセットの個別バッファにWriteデータを記憶する。図23の例では、WriteデータAとBが、それぞれバッファID「0000」、「0001」の個別バッファに順番に格納される例を示している。なお、図23では、理解を容易にするために、1つの個別バッファには1つのデータだけが記憶される場合について示しているが、これに限定する趣旨ではない。
(2)ホスト150からWriteデータaについてのWrite I/O命令を受けると、Writeデータaと同じWriteアドレスのデータAが個別バッファに格納されているので、プライマリ装置110は、WriteデータAをWriteデータaに更新する。なお、WriteデータaのデータサイズがWriteデータAのデータサイズよりも大きいため、WriteデータAが格納された個別バッファにWriteデータaを格納できない場合が考えられる。この場合、プライマリ装置110は、WriteデータAをWriteデータaに更新することなく、他の個別バッファにWriteデータaを格納することができる。
(3)ホスト150からWriteデータCについてのWrite I/O命令を受けると、WriteデータCと同じWriteアドレスのデータが個別バッファに格納されていないので、プライマリ装置110は、バッファID「0002」にWriteデータCを格納する。
ホスト150からWriteデータbについてのWrite I/O命令を受けると、Writeデータbと同じWriteアドレスのデータBが個別バッファに格納されているので、プライマリ装置110は、WriteデータBをWriteデータbに更新する。
図24は、本実施例に係る個別バッファへの格納処理(ステップS2005a)を示すフローチャートである。
ステップS2401において、プライマリ装置110は、ディスク装置117に格納されたWriteデータのうち、セカンダリ装置120に転送するデータをディスク装置117から読み出す。
ステップS2402において、プライマリ装置110は、記録専用バッファ201を参照し、Writeデータと同じWriteアドレスのデータを検索する。
Writeデータと同じWriteアドレスのデータを検出すると(ステップS2403 YES)、プライマリ装置110は、検出したデータが格納されている個別バッファにWriteデータを上書きする(ステップS2404)。
また、Writeデータと同じWriteアドレスのデータを検出しない場合(ステップS2403 NO)、プライマリ装置110は、Writeデータを格納対象バッファセットの個別バッファへ格納する(ステップS2405)。
以上の処理が終了すると、プライマリ装置110は、個別バッファへの格納処理を終了する(ステップS2406)。
図25は、本実施例に係るバッファセットの切替え処理を示すフローチャートである。図25の処理は、図20Aに示したステップS2009aの具体的な処理を示している。
例えば、Write I/O延長で行なわれる格納処理でバッファセット内の個別バッファに空きがなくなる、または、バッファセットの切替え処理が行なわれてから一定時間経過すると、プライマリ装置110は、バッファセットの切替え処理を開始する(ステップS2500)。
ステップS2501において、プライマリ装置110は、空きバッファセット、すなわち、バッファセット管理テーブル400に未使用と設定されているバッファセットがあるか否かを判別する。
ステップS2501において、空きバッファセットがない場合(ステップS2501 NO)、プライマリ装置110は、処理をステップS2502に移行し、バッファHalt処理待ちの状態となる(ステップS2502)。その後、バッファHalt処理が実行されてバッファ枯渇状態が解消すると、プライマリ装置110は、Write I/O命令の処理を再開する。バッファHalt処理では、記録専用バッファやバッファセット情報記憶部など、図2に示した記憶部に記憶されたデータの一部または全部をクリアすることができる。
この場合、プライマリ装置110は、バッファセットに記憶されているWriteデータ等の情報、例えばWriteデータやそのBITなどを専用のビットマップに書き戻し、バッファHalt処理の実行後にそのビットマップにしたがって順序性を保証しないリモートコピー転送を行なう。
ステップS2501において、空きバッファセットがある場合(ステップS2501 YES)、プライマリ装置110は、処理をステップS2503に移行する。すると、プライマリ装置110は、空きバッファセットを1つ選択し、選択したバッファセットを使用中、すなわち、必要に応じてバッファセット管理テーブル400の使用目的欄に、ステージング、ライトバックまたは記憶を設定する(ステップS2503)。
ステップS2504において、プライマリ装置110は、使用するバッファセットを、ステップS2503で選択したバッファセットに切り替える。すると、プライマリ装置110は、Write I/O命令を管理する待ち行列等を参照し、待ち状態のWrite I/Oについて処理を再開する(ステップS2505)。
以上の処理が終了すると、プライマリ装置110は、バッファセットを切り替える処理を終了する(ステップS2506)。
本実施例に係るバッファ退避処理では、ライトバックポインタ情報とステージポインタ情報の2つの情報により、退避用バッファ118や130に記憶するデータの書き込み位置(世代)と退避用バッファ118や130から読み出すデータの読み出し位置(世代)とを管理する。
図26は、本実施例に係るバッファ退避処理におけるライトバックポインタ情報・ステージポインタ情報を説明する図である。なお、図26に示す2601は、退避用バッファ118を簡略化して示したものである。同様に、図26に示す2602および2603は、バッファセットを簡略化して示したものである。
例えば、制御モジュールにおいてx回目のバッファセット切り替えが行なわれた場合を考える。この場合、ステージポインタ情報は、最後にステージングが行なわれたバッファセットの世代を保持する。ライトバックポインタ情報は、退避用バッファ2601の世代xを情報として保持する。
また、制御モジュールにおいてx+1回目のバッファセット切り替え時に、世代xのバッファセットデータがすぐにセカンダリ装置120に転送された場合を考える。この場合、世代xに記憶されているバッファセットデータが退避用バッファ118からプライマリ装置110のバッファセットにステージングされる。そして、プライマリ装置110からセカンダリ装置120へのバッファセットデータの転送処理が完了すると、ステージポインタ情報は、世代xから世代x+1に更新される。ライトバックポインタ情報は、退避用バッファ2601の世代x+1を情報として保持する。
また、制御モジュールにおいてx+2回目のバッファセット切り替え時に、世代x+1が退避用バッファ2601にライトバックされた場合を考える。この場合、ステージポインタ情報が保持する退避用バッファ2601の世代が世代xであれば、次のステージング対象は世代x+1となる。ライトバックポインタ情報は、ボリュームグループの世代x+2を保持する。
以上のように、ライトバックポインタ情報は、バッファセットが生成される毎に生成されたバッファセットの次の世代を情報として保持する。また、切り替えられた旧世代のバッファセットの処理が完了する毎に、例えば、プライマリ装置110でバッファセットデータの転送が完了しかつセカンダリ装置120でデータの展開が完了する毎に、ステージポインタ情報が更新される。
なお、退避用バッファ2601として割当てたボリュームグループが複数ある場合、ボリュームグループは、ボリュームグループに割り当てられた番号の小さい順に使用される。そして、ボリュームグループを最後まで使用した場合、最初にもどりサイクリックにボリュームグループを使用する。
以下、図27および図28にライトバックポインタ情報およびステージポインタ情報の具体的な更新処理を説明する。
図27は、本実施例に係るライトバックポインタ情報の更新処理を示すフローチャートである。
ステップS2700aにおいて、プライマリ装置110に備わる制御モジュールを代表するマスタ制御モジュールは、バッファセットの切替え処理が行なわれると、処理をステップS2701aに移行する。
ステップS2701aにおいて、マスタ制御モジュールは、現在保持しているライトバックポインタ情報を1つ進める。例えば、マスタ制御モジュールは、バッファ管理テーブル300のライトバックポインタ情報に保持されている世代を1だけインクリメントする。
ステップS2702aにおいて、マスタ制御モジュールは、ステップS2701aで求めたライトバックポインタ情報に、自身が保持するバッファ管理テーブル300中のライトバックポインタ情報を更新する。さらに、マスタ制御モジュールは、プライマリ装置110に備わる他の制御モジュールに対して、ステップS2702aと同様の処理を依頼する。
一方、ステップS2701bにおいて、各制御モジュールは、ステップS2701aで求められたライトバックポインタ情報に、各自が保持するバッファ管理テーブル300中のライトバックポインタ情報を更新する。そして、各制御モジュールは、バッファ管理テーブル300の更新が完了すると、その旨をマスタ制御モジュールに通知する。
ステップS2703aにおいて、マスタ制御モジュールは、依頼した全ての制御モジュールから応答を受信したか否かをチェックし、応答を受信していない制御モジュールがある場合には(S2703a NO)、ステップS2703aの処理を繰り返す。
ステップS2703aにおいて、依頼した全ての制御モジュールから応答を受信したと判断すると(S2703a YES)、マスタ制御モジュールは、処理をステップS2704aに移行する。一方、セカンダリ装置120は、ステップS2701bの処理の後、処理をステップS2702bに移行する。そして、ライトバックポインタ情報の更新処理が終了する。
図28は、本実施例に係るステージポインタ情報の更新処理を示すフローチャートである。
ステップS2800aにおいて、プライマリ装置110のマスタ制御モジュールは、バッファセットの解放処理を開始すると、処理をステップS2801aに移行する。
ステップS2801aにおいて、マスタ制御モジュールは、解放対象のバッファセットがあるか否かを判別する。解放対象となるバッファセットがない場合(S2801a NO)、マスタ制御モジュールは、ステップS2804aに移行し、処理を終了する。
なお、本実施例では、セカンダリ装置120へのバッファセットデータの転送が完了し、かつ、セカンダリ装置120から転送したバッファセットデータのディスク装置への展開が完了した旨の通知を受けたバッファセットを、領域解放の対象と判断する。この通知は、例えば、セカンダリ装置のマスタ制御モジュールからプライマリ装置110のマスタ制御モジュールに送られる。
ステップS2801aにおいて、解放対象となるバッファセットがある場合(S2801a YES)、マスタ制御モジュールは、処理をステップS2802aに移行する。
ステップS2802aにおいて、マスタ制御モジュールは、解放対象となるバッファセットの個別バッファ、BITおよびバッファセット情報を解放するとともに、ステージポインタ情報を更新する。例えば、マスタ制御モジュールは、バッファ管理テーブルのステージポインタ情報に保持されている世代を次の世代に更新する。
また、マスタ制御モジュールは、プライマリ装置110に備わる他の制御モジュールに対して、ステップS2802aと同様の更新を依頼する。
ステップS2801bにおいて、各制御モジュールは、マスタ制御モジュールから更新依頼を受けると、解放対象のバッファセットの個別バッファ、BITおよびバッファセット情報を解放するとともに、ステージポインタ情報を更新する。処理が完了すると、各制御モジュールは、マスタ制御モジュールに対して完了通知を行なう。
ステップS2803aにおいて、マスタ制御モジュールは、依頼した制御モジュールからの応答、すなわち完了通知を確認し、全ての制御モジュールから応答を受信したか否かを判別する。そして、応答を受信していない制御モジュールがある場合(S2803a NO)、ステップS1903の処理を繰返す。
また、ステップS2803aにおいて、全ての制御モジュールから応答を受信したと判断した場合(S2803a YES)、マスタ制御モジュールは、処理をステップS2804aに移行する。また、他の制御モジュールは、ステップS2801bの処理の後、処理をステップS2802bに移行する。そして、ステージポインタ情報の更新処理が終了する。
図29は、本実施例に係るライトバックを示すフローチャートである。
ステップS2900aにおいて、例えば、Writeデータのバッファセットへの記憶処理が完了すると、プライマリ装置110におけるマスタ制御モジュールは、処理をステップS2901aに移行する。
ステップS2901aにおいて、マスタ制御モジュールは、ステージング・転送で使用中のバッファセット数を取得する。そして、マスタ制御モジュールは、ステージング・転送で使用中のバッファセット数とバッファ閾値とを比較し、使用中のバッファセット数がバッファ閾値以上ではない場合(S2901a NO)、処理をステップS2905aに移行する。また、マスタ制御モジュールは、ステージング・転送で使用中のバッファセット数がバッファ閾値以上であった場合(S2901a YES)、処理をステップS2902aに移行する。
ステップS2902aにおいて、マスタ制御モジュールは、以下のようにライトバックを行なう。なお、ライトバックの対象となるバッファセットを「ライトバック対象世代」という。
まず、マスタ制御モジュールは、退避用バッファ管理テーブル500から、ライトバック対象世代を記憶すべき個別退避用バッファのアドレスを算出する。そして、マスタ制御モジュールは、算出したアドレスに、図20AのステップS2009aで説明したライトバック対象バッファセットのうちマスタ制御モジュールに備わる個別バッファに記憶されているバッファデータ、そのBITおよびバッファセット情報を記憶する。
なお、個別退避用バッファの先頭アドレスは、制御モジュールに割り当てられた退避用バッファが連続したアドレス空間である場合、退避用バッファ管理テーブル500に設定されている「退避データの記憶先頭アドレス」に、「(ライトバック対象世代−1)×個別退避用バッファサイズ」を加えることにより求めることができる。
ライトバックが完了すると、マスタ制御モジュールは、プライマリ装置110に備わる他の制御モジュールに対して、ステップS2902aと同様の処理を依頼する。
ステップS2901bにおいて、各制御モジュールは、マスタ制御モジュールから依頼のあったバッファセットのうち各制御モジュールに備わる個別バッファに記憶されているバッファデータ、そのBITおよびバッファセット情報を、自身のBIT記憶部201b等から取得する。そして、各制御モジュールは、取得したBITおよびバッファセット情報を、各制御モジュールに割当てられた個別退避用バッファに退避する。
なお、各制御モジュールに割り当てられた個別退避用バッファも、制御モジュールに割り当てられた退避用バッファが連続したアドレス空間とした場合、退避用バッファ管理テーブル500に設定されている「退避データの記憶先頭アドレス」に、「(ライトバック対象世代−1)×個別退避用バッファサイズ」を加えることにより求めることができる。
ステップS2902bにおいて、各制御モジュールは、マスタ制御モジュールから依頼のあったバッファセットのうち各制御モジュールに備わる個別バッファに、Writeデータ等のバッファデータが記憶されているか否かをチェックする。
そして、Writeデータ等のバッファデータが個別バッファにない場合(S2902b NO)、各制御モジュールは、ステップS2903bをスキップする。また、Writeデータ等のバッファデータが個別バッファにある場合(S2902b YES)、各制御モジュールは、処理をステップS2903bに移行する。
ステップS2903bにおいて、各制御モジュールは、個別バッファに記憶されているWriteデータ等のバッファデータを、各制御モジュールに割当てられた退避用バッファ118の個別退避用バッファに退避する。そして、マスタ制御モジュールに依頼された処理の完了を通知する。
一方、ステップS2903aにおいて、マスタ制御モジュールは、依頼した全ての制御モジュールから応答を受信したか否かをチェックし、応答を受信していない制御モジュールがある場合には(S2903a NO)、ステップS2903aの処理を繰返す。
全ての制御モジュールから応答を受信した場合(S2903a YES)、マスタ制御モジュールは、ライトバック対象バッファセットのバッファセット情報等を解放する(ステップS2904a)。また、制御モジュールは、バッファセット管理テーブル400を参照しライトバック対象バッファセットのバッファセットIDと一致するバッファセットIDを未使用に設定する。
以上の処理を終了すると、マスタ制御モジュールは、処理をステップS2905aに移行してバッファ退避処理を終了する。他の制御モジュールは、S2902bあるいはS2903bの処理の後、処理をステップS2904bに移行してバッファ退避処理を終了する。
図30および図31は、本実施例に係るライトバックの具体例を示す図である。なお、図30および図31に示す3001は、退避用バッファ118を簡略化して示したものである。同様に、図30および図31に示す3002〜3004は、バッファセットを簡略化して示したものである。
図30および図31は、プライマリ装置110が制御モジュール#00〜#03を備え、各制御モジュールに8つの個別バッファを備えるプライマリ装置110において、バッファ閾値が4の場合のライトバックを説明する図である。
(a)バッファセット1〜4が、転送中、転送完了待ち、解放待ちのいずれかの状態、かつ、(b)バッファセット5がライトバック中の場合を考える。この場合、(c)Writeデータを記憶するのはバッファセット6となる。
図31に示すように、(d)バッファセット1が使用していた領域の解放時に、マスタ制御モジュールは、ステージポインタ情報を更新する。
バッファセット5のライトバックが処理中の場合、(e)記録専用バッファ201等上にデータがあるので、バッファセット5のライトバックを中断し、バッファセット5のバッファセットデータをセカンダリ装置120に転送する処理を開始する。
また、バッファセット5のライトバックが完了している場合、退避用バッファ118からからバッファセット5のバッファセットデータを読み出してバッファセット1に記憶するステージングを行なう。
図32Aおよび図32Bは、本実施例に係るステージングを示すフローチャートである。図32Aおよび図32Bに示す処理は、図20Bに示したステップS2019a〜S2021aの処理を具体的に示している。
ステップS3200aにおいて、旧世代の解放処理が完了すると、プライマリ装置110におけるマスタ制御モジュールは、処理をステップS3201aに移行する。
ステップS3201aにおいて、マスタ制御モジュールは、ステージング対象となる世代を決定する。例えば、マスタ制御モジュールは、ステージポインタ情報を参照し、ステージポインタ情報に記憶されている世代を1だけインクリメントし、インクリメントした世代を新たにステージング対象の世代に決定する。このステージング対象の世代を「ステージング対象世代」という。また、図32Aおよび図32Bの処理では、必要に応じて、図20BのステップS2015aの処理で取得しステージングに使用するバッファセットを「ステージング先」と略す。
ステップS3202aにおいて、マスタ制御モジュールは、ステージング対象世代のステージング先の領域は解放処理待ちか否かをチェックする。ステージング先の領域が解放待ちの場合(S3202a YES)、マスタ制御モジュールは、処理をステップS3203aに移行する。
ステップS3203aにおいて、マスタ制御モジュールは、ステージング対象世代に1を加算した世代を新たなステージング対象世代に設定する。そして、マスタ制御モジュールは、処理をステップS3202aに移行する。
一方、ステップS3202aにおいて、ステージング先の領域が解放待ちでない場合(S3202a NO)、マスタ制御モジュールは、処理をステップS3204aに移行する。
ステップS3204aにおいて、マスタ制御モジュールは、ステージング先が転送中か否かをチェックする。ステージング先が転送中の場合(S3204a YES)、マスタ制御モジュールは、処理をステップS3203aに移行する。
一方、ステップS3204aにおいて、ステージング先が転送中でない場合(S3204a NO)、マスタ制御モジュールは、処理をステップS3205aに移行する。
ステップS3205aにおいて、マスタ制御モジュールは、ステージング対象世代がステージング中か否かをチェックする。ステージング対象世代がステージング中の場合(S3205a YES)、マスタ制御モジュールは、処理をステップS3203aに移行する。
一方、ステップS3205aにおいて、ステージング対象世代がステージング中でない場合(S3205a NO)、マスタ制御モジュールは、処理をステップS3206aに移行する。
ステップS3206aにおいて、マスタ制御モジュールは、ステージング対象世代がライトバック中か否かをチェックする。ステージング対象世代がライトバック中の場合(S3206a YES)、マスタ制御モジュールは、処理をステップS3207aに移行する。
ステップS3207aにおいて、マスタ制御モジュールは、自身のライトバックを中断するとともに、プライマリ装置110に備わる他の制御モジュールに対して、ライトバックの中断を依頼する。
ステップS3201bにおいて、各制御モジュールは、マスタ制御モジュールからのライトバックの中断を依頼を受けると、処理中のライトバックを中断する。そして、マスタ制御モジュールに対して、ライトバックを中断した旨を通知する。
ステップS3208aにおいて、マスタ制御モジュールは、ライトバックの中断を依頼した全ての制御モジュールから応答を受信したか否かをチェックし、応答を受信していない制御モジュールがある場合には(S3208a NO)、ステップS3208aの処理を繰り返す。
ステップS3208aにおいて、ライトバックの中断を依頼した全ての制御モジュールから応答を受信したと判断すると(S3208a YES)、マスタ制御モジュールは、処理をステップS3209aに移行し、ステージングを終了する。
一方、ステップS3206aにおいて、ステージング対象世代がライトバック中でないと判断した場合(S3206a NO)、マスタ制御モジュールは、処理をステップS3210aに移行する。
ステップS3210aにおいて、マスタ制御モジュールは、ステージング先が、Writeデータ等の記憶処理中か否かをチェックする。ステージング先が記憶処理中と判断した場合(S3210a YES)、マスタ制御モジュールは、処理をステップS3211aに移行し、ステージングを終了する。
ステップS3210aにおいて、ステージング先がWriteデータ等の記憶処理中でないと判断した場合(S3210a NO)、マスタ制御モジュールは、処理をステップS3212aに移行する。
ステップS3212aにおいて、マスタ制御モジュールは、図20BのステップS2015aの処理で取得したステージング先に既にステージング対象世代が記憶されているか否かをチェックする。
ステージング先にステージング対象世代が記憶されている場合(S3212a YES)、マスタ制御モジュールは、ステップS3217aに移行してステージングを終了する。また、ステージング先にステージング対象世代が記憶されていない場合(S3212a NO)、マスタ制御モジュールは、処理をステップS3213aに移行する。
ステップS3213aにおいて、マスタ制御モジュールは、ステージング・転送で使用中のバッファセット数を取得する。そして、マスタ制御モジュールは、ステージング・転送で使用中のバッファセット数とバッファ閾値とを比較し、使用中のバッファセット数がバッファ閾値以上であった場合(S3213a YES)、処理をステップS3217aに移行してステージングを終了する。また、マスタ制御モジュールは、ステージング・転送で使用中のバッファセット数がバッファ閾値以上でなかった場合(S3213a NO)、処理をステップS3214aに移行する。
ステップS3214aにおいて、マスタ制御モジュールは、以下のようにステージング対象の世代に対してステージングを行なう。
マスタ制御モジュールは、退避用バッファ管理テーブル500から、ステージング対象世代が記憶されている個別退避用バッファのアドレスを算出する。そして、マスタ制御モジュールは、算出したアドレスからバッファデータ、BITおよびバッファセット情報を取得する。
そして、マスタ制御モジュールは、取得したバッファデータ、BITおよびバッファセット情報を、ステージング対象バッファセットIDが示すバッファセットのバッファ201a、BIT記憶部201bおよびバッファセット情報記憶部202に記憶する。同様の処理が、プライマリ装置110内の制御モジュール毎に行なわれる。
なお、個別退避用バッファのアドレスは、制御モジュールに割り当てられた退避用バッファが連続したアドレス空間とした場合、退避用バッファ管理テーブル500に設定されている「退避データの記憶先頭アドレス」に、「(ステージング対象世代−1)×個別退避用バッファサイズ」を加えることにより求めることができる。
ステップS3215aにおいて、マスタ制御モジュールは、各制御モジュールに対して、ステップS3214aと同様に、退避用バッファ118からステージング対象世代を取得してステージングを行うように依頼する。
ステップS3202bにおいて、各制御モジュールは、以下のようにバッファセット情報およびBITに対してステージングを行なう。
ステージング依頼を受けた各制御モジュールは、自身に割り当てられた退避用バッファ118の個別退避用バッファから、マスタ制御モジュールから依頼のあったステージング対象世代のBITおよびバッファセット情報を取得する。
そして、各制御モジュールは、退避用バッファ118の個別退避用バッファから取得したBITおよびバッファセット情報を、各制御モジュールに備わるBIT記憶部201bおよびバッファセット情報記憶部202に記憶する。
ステップS3203bにおいて、各制御モジュールは、自身に割り当てられた退避用バッファ118の個別退避用バッファを参照し、ステージング対象世代のバッファデータがあるか否かを判別する。そして、ステージング対象世代のバッファデータが退避用バッファ118の個別退避用バッファにある場合(S3203b YES)、各制御モジュールは、そのバッファデータに対してステージングを行なう(S3204b)。ステージングが完了すると、各制御モジュールは、マスタ制御モジュールに対して完了通知を行なう。
また、ステップS3203bにおいて、ステージング対象世代のバッファデータが退避用バッファ118の個別退避用バッファにない場合(S3203b NO)、各制御モジュールは、マスタ制御モジュールに対して完了通知を行う。
ステップS3216aにおいて、マスタ制御モジュールは、依頼した全ての制御モジュールから応答を受信するまで完了通知を監視する。そして、依頼した全ての制御モジュールから応答を受信すると(S3216a YES)、マスタ制御モジュールは、処理をステップS3217aに移行してステージングを終了する。
図33は、図20Bに示したマッチング処理(ステップS2012a)の具体的な処理を示すフローチャートである。なお、図33では、プライマリ装置110に備わるマスタ制御モジュールと、その他の制御モジュールと、についての具体的な処理を示す。
ステップS3301aにおいて、マスタ制御モジュールは、未使用バッファID記憶部206を参照する。そして、未使用バッファID記憶部206に記憶されている未使用バッファIDの数が、バッファセット情報記憶部202に記憶されているバッファセット情報に含まれるコピー元IDとのマッチングに必要な数だけあるか否かを確認する。
そして、ステップS3301aにおいて、必要な数の未使用バッファIDがあることを確認できない場合(S3301a NO)、マスタ制御モジュールは、処理をステップS3302aに移行する。そして、マスタ制御モジュールは、S3302aにてセカンダリ装置120からの未使用バッファ通知を待ち、未使用バッファ通知を受付けると、処理をステップS3301aに移行する。
また、ステップS3301aにおいて、必要な数の未使用バッファIDがあることを確認すると(S3301a YES)、マスタ制御モジュールは、処理をステップS3303aに移行する。
ステップS3303aにおいて、マスタ制御モジュールは、未使用バッファID記憶部206から必要な数の未使用バッファIDを取得する。そして、マスタ制御モジュールは、既にバッファセット情報記憶部202に記憶されているバッファセット情報に含まれるコピー先IDと、取得した未使用バッファIDとを関連付け、すなわち、コピー元バッファとコピー先バッファとのマッチングを行なう。
このマッチング処理が終了すると、マスタ制御モジュールは、他の制御モジュールに対して、バッファセット情報の多重化依頼を通知する(ステップS3304a)。
一方、ステップS3301bにおいて、マスタ制御モジュールからバッファセット情報の多重化依頼の通知を受けると、各制御モジュールは、バッファセット情報の多重化処理を行なう。ここで、バッファセット情報の多重化処理とは、プライマリ装置110またはセカンダリ装置120に備わる全ての制御モジュールに同一のバッファセット情報を保持させる処理である。
例えば、マスタ制御モジュールから、ステップS3303aのマッチング処理が行なわれたバッファセット情報を取得する。そして、自身に備わるバッファセット情報記憶部202に取得したバッファセット情報を反映する。
そして、S3301bにおけるバッファセット情報の多重化処理が終了すると、各制御モジュールは、バッファセット情報の多重化処理の完了をマスタ制御モジュールに通知する。
ステップS3305aにおいて、マスタ制御モジュールは、バッファセット情報の多重化処理の依頼をした制御モジュールの全てから応答を受信したか否かを確認する。そして、当該応答を全ての制御モジュールから受信したと判断すると(S3305a YES)、コピー先バッファ割り当て処理を終了し(ステップS3306a)、図20Bに示したステップS2013aの処理に移行する。
図34は、本実施例に係る逆方向のリモートコピー時にセカンダリ装置120が退避用バッファを確保する処理(ステップS1908)を示すフローチャートである。なお、図34に示す処理は、セカンダリ装置120のようにあらかじめ退避用バッファ118を備えていない場合に退避用バッファを確保するための処理である。したがって、退避用バッファ確保の処理を実行するのは、逆方向のリモートコピー時に限られない。また、例えば、プライマリ装置110に退避用バッファ118が備わっていない場合、プライマリ装置110においても適用可能な処理であることは当然である。
例えば、セカンダリ装置120−プライマリ装置110間の通信で遅延等が発生すると、セカンダリ装置120は、退避用バッファ130を確保する処理を開始する(ステップS3400)。
ステップS3401において、セカンダリ装置120は、SnapOPC+を使用しているか否かを確認する。SnapOPC+の使用の有無は、例えば、セカンダリ装置120の構成を定義する構成定義情報や、SnapOPC+用Pool管理テーブル800の有無などから判別することができる。
SnapOPC+を使用している場合(ステップS3401 YES)、セカンダリ装置120は、退避用バッファの確保先にSnapOPC+用Pool128を選択する(ステップS3402)。このとき、セカンダリ装置120は、退避用バッファとして使用する記憶領域をSnapOPC+用Pool管理テーブル800に登録する。
また、SnapOPC+を使用していない場合(ステップS3401 NO)、セカンダリ装置120は、Thin Provisioningを使用しているか否かを確認する(ステップS3403)。Thin Provisioningの使用の有無は、例えば、セカンダリ装置120の構成を定義する構成定義情報や、Thin Provisioning用管理テーブル1000の有無などから判別することができる。
Thin Provisioningを使用している場合(ステップS3403 YES)、セカンダリ装置120は、退避用バッファの確保先にThin Provisioning用Pool129を選択する(ステップS3404)。このとき、セカンダリ装置120は、退避用バッファとして使用する記憶領域をThin Provisioning用管理テーブル1000に登録する。
また、Thin Provisioningを使用していない場合(ステップS3403 NO)、セカンダリ装置120は、ディスク装置127に空き記憶装置があるか否かを確認する(ステップS3405)。例えば、セカンダリ装置120は、ディスク装置管理テーブル600を参照し、未使用に設定されている記憶装置の有無を確認する。
ここで、空き記憶装置とは、ディスク装置127に備わる磁気ディスク装置などの記憶装置のうち使用可能な状態にない記憶装置、例えば、セカンダリ装置120のシステムに組み込まれていない状態の記憶装置である。なお、空き記憶装置には、セカンダリ装置120に組み込まれていても読み書きの準備ができていない状態の記憶装置も含むことができる。また、空き記憶装置には、セカンダリ装置120にあらかじめ予備として備えられた磁気ディスク装置などの記憶装置を含むことができる。
空き記憶装置がある場合(ステップS3405 YES)、セカンダリ装置120は、退避用バッファの確保先に空き記憶装置を選択する(ステップS3406)。なお、空き記憶装置が複数ある場合、必要に応じて、任意の1つを選択してもよいし、容量の大きいものやあらかじめ決められた優先順位が高いものを選択してもよい。
ステップS3407において、セカンダリ装置120は、ステップS3402、S3404またはS3406の処理で選択した記憶装置に退避用バッファ130を構築する。なお、ステップS3407および後述するS3411における処理は、図21および図22に示したとおりである。
一方、空き記憶装置がない場合(ステップS3405 NO)、セカンダリ装置120は、ディスク装置127に含まれる使用中のRAIDグループうち更新頻度が低くかつ所定の空き容量を確保可能なRAIDグループがあるか否かを確認する(ステップS3408)。
なお、「使用中のRAIDグループ」とは、ディスク装置127に含まれるRAIDグループのうち、ユーザが読み書き可能な状態または実際に読み書きが行なわれている状態のRAIDグループをいう。この状態のRAIDグループの記憶領域を「ユーザ領域」という。
ステップS3408において、セカンダリ装置120は、「ディスク装置127に含まれる使用中のRAIDグループうち更新頻度が低くかつ所定の空き容量を確保可能なRAIDグループ」があるか否かを確認する。以下、「ディスク装置127に含まれる使用中のRAIDグループうち更新頻度が低くかつ所定の空き容量を確保可能なRAIDグループ」という条件を「第1の条件」という。
例えば、セカンダリ装置120は、第1の条件を満たすRAIDグループを以下のようにして抽出することができる。
セカンダリ装置120は、更新履歴情報1300を参照し、所定の更新時刻より古い更新時刻のコピー範囲を確認する。そして、セカンダリ装置120は、所定の更新時刻より古い更新時刻のコピー範囲を一定割合以上含むRAIDグループを、更新頻度が低いRAIDグループとして抽出する。この場合、より古い更新時刻のコピー範囲を一定割合以上含むRAIDグループを抽出することが望ましい。
セカンダリ装置120は、抽出したRAIDグループに所定の空き容量があれば、その抽出したRAIDグループを退避用バッファの確保先に選択する。 上述のように、第1の条件を満たすRAIDグループがある場合(ステップS3408 YES)、セカンダリ装置120は、第1の条件を満たすRAIDグループを退避用バッファに選択する(ステップS3409)。また、第1の条件を満たすRAIDグループがない場合(ステップS3408 NO)、セカンダリ装置120は、処理をステップS3410に移行する。
ステップS3410において、セカンダリ装置120は、ディスク装置127に含まれる使用中のRAIDグループのうち、プライマリ装置110と同じデータを格納し更新時刻が最も古い記憶領域を含むRAIDグループを退避用バッファの確保先に選択する。以下、「ディスク装置127に含まれる使用中のRAIDグループのうち、プライマリ装置110と同じデータを格納し更新時刻が最も古い記憶領域を含むRAIDグループ」を「第2の条件」という。なお、「使用中のRAIDグループ」とは、実際にデータの読み書きが行なわれている状態、または読み書きを行なうことが可能な状態にあるRAIDグループのことをいう。
例えば、セカンダリ装置120は、更新履歴情報1300を参照し、バックアップ状況を確認する。そして、セカンダリ装置120は、更新履歴情報1300にバックアップ済みと設定されているコピー範囲の中から、所定の更新時刻より古い更新時刻のコピー範囲を抽出する。そして、セカンダリ装置120は、抽出したコピー範囲を一定割合以上含むRAIDグループを退避用バッファの確保先に選択する。
ステップS3411において、セカンダリ装置120は、ステップS3409またはS3410の処理で選択した記憶装置に退避用バッファ130を構築する。この退避用バッファ130の構築処理については、図21および図22に示したとおりである。
ステップS3412において、セカンダリ装置120は、退避用バッファビットマップ1200を参照し、退避用バッファ130として使用する記憶領域の状態を「使用」に設定する。同時に、セカンダリ装置120は、ディスク装置ビットマップ1100を参照し、退避用バッファ130として使用することになった記憶領域の状態を「未使用」に設定する。退避用バッファ130として使用することになった記憶領域は、ユーザ領域として使用しなくなるからである。
以上の処理が終了すると、セカンダリ装置120は、図19に示した逆方向のリモートコピー時にセカンダリ装置120が退避用バッファを確保する処理を終了する(ステップS3413)。
図35は、本実施例に係るセカンダリ装置120のリード処理を示すフローチャートである。
ホスト150からRead I/O命令を受けると、セカンダリ装置120は、処理をステップS3501に移行してリード処理を開始する。なお、以下の説明では、Read I/O命令で要求されたデータを「Readデータ」という。また、Readデータが格納されている記憶領域の先頭アドレスを「Readアドレス」という。
ステップS3501において、セカンダリ装置120は、Readアドレスの記憶領域が、ユーザ領域に退避用バッファ130として確保された記憶領域であるか否かを確認する。ユーザ領域に退避用バッファ130が確保された記憶領域に記憶されていたReadデータは退避されたデータで上書きされている可能性があるからである。
ステップS3501において、例えば、セカンダリ装置120は、退避用バッファビットマップ1200を参照し、Readアドレスの記憶領域が「使用」となっていれば、ユーザ領域に退避用バッファ130として確保された記憶領域であると判別できる。
Readアドレスの記憶領域が、ユーザ領域に退避用バッファ130として確保された記憶領域の場合(ステップS3502 YES)、セカンダリ装置120は、処理をステップS3503に移行する。そして、セカンダリ装置120は、プライマリ装置110に対して、Readデータを要求する(ステップS3503)。セカンダリ装置120にリモートコピーされたユーザ領域のデータは、プライマリ装置110にも保持されているからである。
プライマリ装置110からReadデータが送信されると、セカンダリ装置120は、Readデータを受信し(ステップS3504)、受信したReadデータをホスト150に送信する(ステップS3506)。
一方、Readアドレスの記憶領域が、ユーザ領域に退避用バッファ130として確保された記憶領域でない場合(ステップS3502 NO)、セカンダリ装置120は、ディスク装置127からReadデータを取得する(ステップS3505)。そして、セカンダリ装置120は、取得したReadデータをホスト150に送信する(ステップS3506)。
以上の処理を終了すると、セカンダリ装置120は、リード処理を終了する(ステップS3507)。
図36は、本実施例に係るセカンダリ装置120のライト処理の概要を示す図である。
なお、図36では、ディスク装置127が2つのRAIDグループR1およびR2を備える場合を例にしてライト処理の概要を説明する。図36に示すセカンダリ装置120は、説明の理解を容易にするために簡略化した構成を示しているが、図36に示す構成にセカンダリ装置120を限定する趣旨ではない。同様に、説明の理解を容易にするためにRAIDグループ毎に退避用バッファビットマップ1201および1202を示しているが、退避用バッファビットマップは、図12に示したようにセカンダリ装置120全体で1つだけでもよいのは当然である。
以下に示す(1)〜(8)は、図36に記載の(1)〜(8)に対応する。
(1)RAIDグループR1はユーザ領域のみを含み、RAIDグループR2は、ユーザ領域と、図34に示した処理によってユーザ領域に確保された退避用バッファ130とを含んでいるものとする。このとき、退避用バッファビットマップ1202には、退避用バッファ130として使用している記憶領域が使用中であることを示す「1」が設定されている。
(2)セカンダリ装置120は、ホスト150からI/O命令を受信する。場合により、セカンダリ装置120は、RAIDグループR2に格納されている退避用バッファ130へのWrite I/O命令を受信する。
(3)Write I/O命令を受信すると、セカンダリ装置120は、バッファ退避処理を停止する。
(4)そして、セカンダリ装置120は、RAIDグループR2のユーザ領域に確保された退避用バッファ130を、RAIDグループR1のユーザ領域にコピーする。
(5)退避用バッファ130のコピーが完了すると、セカンダリ装置120は、退避用バッファビットマップ1202の、退避用バッファ130として使用していた記憶領域が未使用であることを示す「0」を設定する。そして、セカンダリ装置120は、WriteデータをRAIDグループR1に書き込む。
(6)また、セカンダリ装置120は、退避用バッファビットマップ1201の、RAIDグループR1にコピーされた退避用バッファ130の記憶領域が使用中であることを示す「1」を設定する。
(7)以上のようにして、退避用バッファ130のRAIDグループR2からRAIDグループR1への移動が完了すると、セカンダリ装置120は、バッファ退避処理を再開する。
(8)そして、セカンダリ装置120は、退避用バッファ130の移動があった旨のメールを、退避用バッファ130の移動先の記憶領域などの情報とともにホスト150に送信する。
図37は、本実施例に係るセカンダリ装置120のライト処理を示すフローチャートである。
ホスト150からWrite I/O命令を受けると、セカンダリ装置120は、処理をステップS3701に移行してライト処理を開始する。
ステップS3701において、セカンダリ装置120は、Writeアドレスの記憶領域が、ユーザ領域に退避用バッファ130として確保された記憶領域であるか否かを確認する。例えば、セカンダリ装置120は、退避用バッファビットマップ1200を参照し、Writeアドレスの記憶領域が使用中に設定されていれば、ユーザ領域に退避用バッファ130として確保された記憶領域であると判別できる。
Writeアドレスの記憶領域が、ユーザ領域に退避用バッファ130として確保された記憶領域の場合(ステップS3702 YES)、セカンダリ装置120は、バッファ退避処理を停止する(ステップS3703)。
ステップS3704において、セカンダリ装置120は、ユーザ領域の一部に確保された、退避用バッファ130の代替領域を検索する。本実施例では、現在退避用バッファ130として使用中のRAIDグループ以外のRAIDグループのうち図34に示した第2の条件を満たす領域を検索して代替領域として使用する。
ただし、現在退避用バッファ130として使用中のRAIDグループ以外のRAIDグループのうち、図34に示した第1の条件を満たす領域を代替領域として使用してもよい。
ステップS3705において、セカンダリ装置120は、退避用バッファ130の内容を検索された代替領域にコピーする。このとき、セカンダリ装置120は、退避用バッファビットマップ1200について、退避用バッファ130として使用中であった記憶領域のアドレスを未使用に設定する。また、セカンダリ装置120は、退避用バッファビットマップ1200について、代替領域で使用中の記憶領域のアドレスを使用中に設定する。
ステップS3706において、代替領域へのコピーが完了すると、セカンダリ装置120は、WriteデータをWriteアドレスが示す退避用バッファの領域に記憶する。このとき、セカンダリ装置120は、ディスク装置ビットマップ1100のWriteアドレスを使用中に設定する。
ステップS3707において、セカンダリ装置120は、バッファ退避処理を再開する。そして、セカンダリ装置120は、電子メール等を利用して、退避用バッファ130の代替処理が行なわれたことを管理者に通知する。
一方、Writeアドレスの記憶領域が、ユーザ領域に退避用バッファ130として確保された記憶領域でない場合(ステップS3702 NO)、セカンダリ装置120は、WriteデータをWriteアドレスが示す記憶領域に記憶する。このとき、セカンダリ装置120は、ディスク装置ビットマップ1100のWriteアドレスを使用中に設定する。
以上の処理が終了すると、セカンダリ装置120は、ライト処理を終了する。
上述のように、本実施例に係るプライマリ装置110は、退避用バッファ118を備える。そして、順方向のリモートコピーにおいて、転送・ステージングで使用中のバッファセット数がバッファ閾値を超えると、プライマリ装置110は、バッファセットデータを、退避用バッファ118に退避するライトバックを行なう。
例えば、プライマリ装置110−セカンダリ装置120間の回線能力が低い場合にホスト150から次々にWrite I/O命令を受けても、プライマリ装置110は、使用中のバッファセット数がバッファ閾値を超えると、バッファセットデータを退避用バッファ118に退避する。
一方、プライマリ装置110は、バッファセットデータのセカンダリ装置120への転送と展開処理が完了すると、そのバッファセットデータが記憶されていた領域を解放し、解放した領域に、退避用バッファ118に退避していたバッファセットデータをステージングする。そして、プライマリ装置110は、そのバッファデータをセカンダリ装置120に転送する。
このように、本実施例に係るプライマリ装置110によると、プライマリ装置110−セカンダリ装置120間の回線能力が低い場合など、データの転送処理に遅延が生じる場合であっても、バッファセットの枯渇を抑止することができる。したがって、プライマリ装置110は、バッファセットの枯渇時に行なうバッファHalt処理を抑止することができる。すなわち、プライマリ装置110は、バッファHalt処理によりバッファセットの内容がクリアされ、順序性を保証したリモートコピーが中断されることを抑止することができる。その結果、プライマリ装置110は、データの転送処理に遅延が生じる場合でも、順序性を保証したリモートコピーを行なうことが可能となる。
さらに、回線能力が均一でなく不安定である場合やWrite I/O等によるデータ更新量がプライマリ装置110に備わる記録専用バッファ201の容量を超える場合などによってデータの転送処理に遅延が生じる場合も同様の効果を奏する。
本実施例に係るセカンダリ装置120は、逆方向のリモートコピーを実行中にセカンダリ装置120−プライマリ装置110間の通信で遅延等が発生すると、退避用バッファ130を生成する。そして、逆方向のリモートコピーにおいて、転送・ステージングで使用中のバッファセット数がバッファ閾値を超えると、セカンダリ装置120は、バッファセットデータを、退避用バッファ130に退避するライトバックを行なう。
一方、セカンダリ装置120は、バッファセットデータのプライマリ装置110への転送と展開処理が完了すると、そのバッファセットデータが記憶されていた領域を解放し、解放した領域に、退避用バッファ130に退避していたバッファセットデータをステージングする。そして、セカンダリ装置120は、そのバッファデータをプライマリ装置110に転送する。
したがって、セカンダリ装置120も、プライマリ装置110と同様に、データの転送処理に遅延が生じる場合でも、順序性を保証したリモートコピーを行なうことが可能となる。さらに、回線能力が均一でなく不安定である場合やWrite I/O等によるデータ更新量がセカンダリ装置120に備わる記録専用バッファ201の容量を超える場合などによってデータの転送処理に遅延が生じる場合も同様の効果を奏する。
さらに、セカンダリ装置120は、プライマリ装置110のように専用の退避用バッファを備えていないので、セカンダリ装置120に備わる使用可能な記憶装置の記憶領域を退避用バッファ130として使用する。
セカンダリ装置120は、SnapOPC+やThin Provisioningなどを利用する場合、SnapOPC+用Pool128やThin Provisioning用管理テーブル1000の一部を退避用バッファ130に使用する。
また、空き記憶装置がある場合、セカンダリ装置120は、空き記憶装置の一部または全部を退避用バッファ130に使用する。
さらに、SnapOPC+用Pool128やThin Provisioning用管理テーブル1000、空き記憶装置などがなければ、セカンダリ装置120は、第1の条件を満たすRAIDグループの一部または全部を退避用バッファ130に使用する。
そして、第1の条件を満たすRAIDグループもなければ、第2の条件を満たすRAIDグループの一部または全部を退避用バッファ130に使用する。
このように、あらかじめ専用の退避用バッファを備えなくても、必要に応じて退避用バッファ130を確保することで、データの転送処理に遅延が生じる場合でも、より確実に順序性を保証したリモートコピーを行なうことが可能となる。さらに、回線能力が均一でなく不安定である場合やWrite I/O等によるデータ更新量がセカンダリ装置120に備わる記録専用バッファ201の容量を超える場合などによってデータの転送処理に遅延が生じる場合も同様の効果を奏する。
記憶専用バッファ201などに使用するメモリの記憶容量を増やすよりも、退避用バッファ130の記憶容量を増やすことで、より低コストでリモートコピーの順序性を保証することができる。
また、図23にも示したとおり、リモートコピーを行なうに際して、個別バッファにWriteデータを格納するとき、同じWriteアドレスのデータが既に転送待ちのいずれかの個別バッファに存在する場合には、Writeデータを上書きする。これにより、順序性を崩すことなく個別バッファへの格納処理を効率的に行なうことができる。その結果、プライマリ装置110−セカンダリ装置120間を転送させるデータ量を抑えることができるので、リモートコピー時のデータの転送性能が向上する効果を奏する。
また、従来の順方向のリモートコピーでは、バッファセット情報の作成時に、コピー元IDとコピー先IDとのマッチング処理を行なっていた。しかし、本実施例に係るリモートコピー処理では、ステップS2003aのタイミングでは行わず、バッファへの格納処理が完了して転送処理を行う直前(ステップS2012a)で行う。
そのため、転送処理に関するバッファ以外に対して、転送処理と並行してデータの記憶処理を行うことができるので、プライマリ装置110に備わる記録専用バッファ201およびバッファセット情報記憶部202を含むバッファ全てを効率的に使用することが可能となる。例えば、ホスト150からのWrite I/Oに係るデータを、プライマリ装置110に備わるバッファの容量がなくなるまで格納することが可能となる。
その結果、順序性を保証した順方向のリモートコピーに使用するバッファに関し、セカンダリ装置120に備わるバッファが、プライマリ装置110に備わるバッファより少ない場合でも、プライマリ装置が有するバッファを有効に使用できる。
同様の理由から、順序性を保証した逆方向のリモートコピーに使用するバッファに関し、プライマリ装置110に備わるバッファが、セカンダリ装置120に備わるバッファより少ない場合でも、セカンダリ装置120が有するバッファを有効に使用できる。
また、プライマリ装置110−セカンダリ装置120間のネットワークに何らかのトラブルが生じる等して経路閉塞状態となった場合でも、退避用バッファに容量が許す限りWriteデータを退避することができる。そのため、バッファが枯渇するまでに経路閉塞状態を解消すれば、順序性を保証したリモートコピー処理を中断する必要がなくなるという効果を奏する。その結果、リモートコピー処理の信頼性・安定性を向上するという効果を奏する。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
上位装置から送信されるデータを記憶する記憶領域を有する第1の記憶手段と、
データを一時的に記憶する複数の第2の記憶手段と、
前記上位装置から送信されるデータを受信する受信処理手段と、
前記上位装置から受信したデータを前記第1の記憶手段に記憶するとともに、前記上位装置から受信したデータを前記第2の記憶手段に分散して受信順に記憶する第1の記憶処理手段と、
複数の前記第2の記憶手段それぞれに記憶されたデータを含むデータ群を一括して出力するデータ群出力手段と、
前記データ群出力手段による出力処理に異常を検出すると、前記第1の記憶手段または第3の記憶手段に、前記データ群を記憶するデータ群記憶領域を確保するデータ群記憶領域確保手段と、
前記第2の記憶手段の使用状況に応じて、前記データ群を複数の前記第2の記憶手段から読み出して前記データ群記憶領域に退避する退避処理手段と、
前記データ群出力手段による出力処理が完了して未使用となった前記第2の記憶手段の記憶領域それぞれに、前記データ群記憶領域に退避した前記データ群を分散して記憶する第2の記憶処理手段と、
を備える記憶装置。(請求項1;ステップS1906〜S1908)
(付記2)
前記データ群記憶領域確保手段は、前記第1の記憶手段に仮想的な記憶領域を提供する第4の記憶手段の記憶領域のうち、前記第1の記憶手段として使用していない記憶領域を選択して前記データ群記憶領域を確保する、
ことを特徴とする付記1に記載の記憶装置。(請求項2;ステップS3402、S3404)
(付記3)
前記データ群記憶領域確保手段は、前記第3の記憶手段を選択して前記データ群記憶領域を確保する、
ことを特徴とする付記1に記載の記憶装置。(請求項3ステップS3406)
(付記4)
前記データ群記憶領域確保手段は、前記第1の記憶手段に備わる1または2以上の記憶領域から、更新頻度および空き容量に基づいて前記記憶領域を選択して前記データ群記憶領域を確保する、
ことを特徴とする付記1に記載の記憶装置。(ステップS3409)
(付記5)
前記データ群記憶領域確保手段は、前記第1の記憶手段に備わる1または2以上の記憶領域のうち、更新頻度の低い記憶領域であって、前記データ群出力手段の出力先に保持されているデータと同じデータが記憶されている記憶領域を選択して前記データ群記憶領域を確保する、
ことを特徴とする付記1に記載の記憶装置。(ステップS3410)
(付記6)
第1のデータ群記憶領域に対する書き込み処理が発生すると、前記第1のデータ群記憶領域以外の第2のデータ群記憶領域を前記第1の記憶手段に確保し、前記第2のデータ群記憶領域にデータ群記憶領域を移動するデータ群記憶領域移動手段、
をさらに備える付記4または5に記載の記憶装置。(ステップS3705)
(付記7)
前記第1の記憶処理手段は、前記第2の記憶手段に分散して記憶されたデータのうち、出力先において第1のデータと同じ記憶位置に記憶させる第2のデータを検索し、前記第2のデータを検出すると、前記第2のデータを前記第1のデータに更新する、
ことを特徴とする付記1に記載の記憶装置。(ステップS2404)
(付記8)
上位装置から送信されるデータを記憶する記憶手段として一部または全部の記憶領域を使用する第1の記憶手段と前記データを一時的に記憶する複数の第2の記憶手段とを有し前記データを前記第2の記憶手段に分散して記憶する記憶装置において、前記第2の記憶手段毎に有する制御装置であって、
前記上位装置から送信されるデータを受信する受信処理手段と、
前記上位装置から受信したデータを前記第1の記憶手段に記憶するとともに、前記上位装置から受信したデータを前記第2の記憶手段に分散して受信順に記憶する第1の記憶処理手段と、
複数の前記第2の記憶手段それぞれに記憶されたデータを含むデータ群を一括して出力するデータ群出力手段と、
前記データ群出力手段による出力処理に異常を検出すると、前記第1の記憶手段または第3の記憶手段に、前記データ群を記憶するデータ群記憶領域を確保するデータ群記憶領域確保手段と、
前記第2の記憶手段の使用状況に応じて、前記データ群を複数の前記第2の記憶手段から読み出して前記データ群記憶領域に退避する退避処理手段と、
前記データ群出力手段による出力処理が完了して未使用となった前記第2の記憶手段の記憶領域それぞれに、前記データ群記憶領域に退避した前記データ群を分散して記憶する第2の記憶処理手段と、
を備える制御装置。(請求項4)
(付記9)
上位装置から送信されるデータを記憶する記憶手段として一部または全部の記憶領域を使用する第1の記憶手段と前記データを一時的に記憶する複数の第2の記憶手段とを有する記憶装置を制御する制御方法において、
前記上位装置から送信されるデータを受信し、
前記上位装置から受信したデータを前記第1の記憶手段に記憶するとともに、前記上位装置から受信したデータを前記第2の記憶手段に分散して受信順に記憶し、
複数の前記第2の記憶手段それぞれに記憶されたデータを含むデータ群を一括して出力し、
前記出力時に異常を検出すると、前記第1の記憶手段または第3の記憶手段に、前記データ群を記憶するデータ群記憶領域を確保し、
前記第2の記憶手段の使用状況に応じて、前記データ群を複数の前記第2の記憶手段から読み出して前記データ群記憶領域に退避し、
前記出力処理が完了して未使用となった前記第2の記憶手段の記憶領域それぞれに、前記データ群記憶領域に退避した前記データ群を分散して記憶する、
ことを特徴とする制御方法。(請求項5)
(付記10)
上位装置から送信されるデータを記憶する他の記憶装置から送信される前記データを記憶する記憶手段として一部または全部の記憶領域を使用する第1の記憶手段と、
前記上位装置から送信されるデータを受信する受信処理手段と、
前記他の記憶装置から受信したデータを前記第1の記憶手段に記憶する第1の記憶処理手段と、
前記他の記憶装置に異常を検出すると、前記上位装置から送信されるデータを受信し、該受信したデータを前記第1の記憶手段に記憶する第2の記憶処理手段と、
データを一時的に記憶する複数の第2の記憶手段と、
前記他の記憶装置の復旧を検出すると、前記上位装置から受信したデータを前記第1の記憶手段に記憶するとともに、前記上位装置から受信したデータを前記第2の記憶手段に分散して受信順に記憶する第3の記憶処理手段と、
複数の前記第2の記憶手段それぞれに記憶されたデータを含むデータ群を一括して出力するデータ群出力手段と、
前記データ群出力手段による出力処理に異常を検出すると、前記第1の記憶手段または第3の記憶手段に、前記データ群を記憶するデータ群記憶領域を確保するデータ群記憶領域確保手段と、
前記第2の記憶手段の使用状況に応じて、前記データ群を複数の前記第2の記憶手段から読み出して前記データ群記憶領域に退避する退避処理手段と、
前記データ群出力手段による出力処理が完了して未使用となった前記第2の記憶手段の記憶領域それぞれに、前記データ群記憶領域に退避した前記データ群を分散して記憶する第4の記憶処理手段と、
を備える記憶装置。
(付記11)
上位装置または前記上位装置から送信されるデータを記憶する他の記憶装置から送信される前記データを記憶する記憶手段として一部または全部の記憶領域を使用する第1の記憶手段と前記データを一時的に記憶する複数の第2の記憶手段とを有し前記データを前記第2の記憶手段に分散して記憶する記憶装置において、前記第2の記憶手段毎に有する制御装置であって、
前記上位装置から送信されるデータを受信する受信処理手段と、
前記他の記憶装置から受信したデータを前記第1の記憶手段に記憶する第1の記憶処理手段と、
前記他の記憶装置に異常を検出すると、前記上位装置から送信されるデータを受信し、該受信したデータを前記第1の記憶手段に記憶する第2の記憶処理手段と、
前記他の記憶装置の復旧を検出すると、前記上位装置から受信したデータを前記第1の記憶手段に記憶するとともに、前記上位装置から受信したデータを前記第2の記憶手段に分散して受信順に記憶する第3の記憶処理手段と、
複数の前記第2の記憶手段それぞれに記憶されたデータを含むデータ群を一括して出力するデータ群出力手段と、
前記データ群出力手段による出力処理に異常を検出すると、前記第1の記憶手段または第3の記憶手段に、前記データ群を記憶するデータ群記憶領域を確保するデータ群記憶領域確保手段と、
前記第2の記憶手段の使用状況に応じて、前記データ群を複数の前記第2の記憶手段から読み出して前記データ群記憶領域に退避する退避処理手段と、
前記データ群出力手段による出力処理が完了して未使用となった前記第2の記憶手段の記憶領域それぞれに、前記データ群記憶領域に退避した前記データ群を分散して記憶する第4の記憶処理手段と、
を備える制御装置。
(付記12)
上位装置または前記上位装置から送信されるデータを記憶する他の記憶装置から送信される前記データを記憶する記憶手段として一部または全部の記憶領域を使用する第1の記憶手段と前記データを一時的に記憶する複数の第2の記憶手段とを有し前記データを前記第2の記憶手段に分散して記憶する記憶装置を制御する制御方法において、
前記上位装置から送信されるデータを受信し、
前記他の記憶装置から受信したデータを前記第1の記憶手段に記憶し、
前記他の記憶装置に異常を検出すると、前記上位装置から送信されるデータを受信し、該受信したデータを前記第1の記憶手段に記憶し、
前記他の記憶装置の復旧を検出すると、前記上位装置から受信したデータを前記第1の記憶手段に記憶するとともに、前記上位装置から受信したデータを前記第2の記憶手段に分散して受信順に記憶し、
複数の前記第2の記憶手段それぞれに記憶されたデータを含むデータ群を一括して出力し、
前記出力処理に異常を検出すると、前記第1の記憶手段または第3の記憶手段に、前記データ群を記憶するデータ群記憶領域を確保し、
前記第2の記憶手段の使用状況に応じて、前記データ群を複数の前記第2の記憶手段から読み出して前記データ群記憶領域に退避し、
前記出力処理が完了して未使用となった前記第2の記憶手段の記憶領域それぞれに、前記データ群記憶領域に退避した前記データ群を分散して記憶する、
ことを特徴とする制御方法。
100 ストレージシステム
110 プライマリ装置
117 ディスク装置
118 退避用バッファ
120 セカンダリ装置
127 ディスク装置
130 退避用バッファ
201 記録専用バッファ
201a バッファ
201b BIT記憶部
202 バッファセット情報記憶部
300 バッファ管理テーブル

Claims (6)

  1. 上位装置から送信されるデータを記憶する記憶領域を有する第1の記憶手段と、
    データを一時的に記憶する複数の第2の記憶手段と、
    前記上位装置から送信されるデータを受信する受信処理手段と、
    前記上位装置から受信したデータを前記第1の記憶手段に記憶するとともに、前記上位装置から受信したデータを前記第2の記憶手段に分散して受信順に記憶する第1の記憶処理手段と、
    複数の前記第2の記憶手段それぞれに記憶されたデータを含むデータ群を一括して出力するデータ群出力手段と、
    前記データ群出力手段による出力処理に異常を検出すると、前記第1の記憶手段に備わる複数の記憶領域から、更新頻度および空き容量に基づいて記憶領域を選択することによって、前記データ群を記憶するデータ群記憶領域を確保するデータ群記憶領域確保手段と、
    前記第2の記憶手段の使用状況に応じて、前記データ群を複数の前記第2の記憶手段から読み出して前記データ群記憶領域に退避する退避処理手段と、
    前記データ群出力手段による出力処理が完了して未使用となった前記第2の記憶手段の記憶領域それぞれに、前記データ群記憶領域に退避した前記データ群を分散して記憶する第2の記憶処理手段と、
    を備える記憶装置。
  2. 上位装置から送信されるデータを記憶する記憶領域を有する第1の記憶手段と、
    データを一時的に記憶する複数の第2の記憶手段と、
    前記上位装置から送信されるデータを受信する受信処理手段と、
    前記上位装置から受信したデータを前記第1の記憶手段に記憶するとともに、前記上位装置から受信したデータを前記第2の記憶手段に分散して受信順に記憶する第1の記憶処理手段と、
    複数の前記第2の記憶手段それぞれに記憶されたデータを含むデータ群を一括して出力するデータ群出力手段と、
    前記データ群出力手段による出力処理に異常を検出すると、前記第1の記憶手段に備わる複数の記憶領域のうち、更新頻度が所定頻度よりも低い記憶領域であって、前記データ群出力手段の出力先に保持されているデータと同じデータが記憶されている記憶領域を選択することによって、前記データ群を記憶するデータ群記憶領域を確保するデータ群記憶領域確保手段と、
    前記第2の記憶手段の使用状況に応じて、前記データ群を複数の前記第2の記憶手段から読み出して前記データ群記憶領域に退避する退避処理手段と、
    前記データ群出力手段による出力処理が完了して未使用となった前記第2の記憶手段の記憶領域それぞれに、前記データ群記憶領域に退避した前記データ群を分散して記憶する第2の記憶処理手段と、
    を備える記憶装置。
  3. 上位装置から送信されるデータを記憶する記憶手段として一部または全部の記憶領域を使用する第1の記憶手段と前記データを一時的に記憶する複数の第2の記憶手段とを有し前記データを前記第2の記憶手段に分散して記憶する記憶装置において、前記第2の記憶手段毎に有する制御装置であって、
    前記上位装置から送信されるデータを受信する受信処理手段と、
    前記上位装置から受信したデータを前記第1の記憶手段に記憶するとともに、前記上位装置から受信したデータを前記第2の記憶手段に分散して受信順に記憶する第1の記憶処理手段と、
    複数の前記第2の記憶手段それぞれに記憶されたデータを含むデータ群を一括して出力するデータ群出力手段と、
    前記データ群出力手段による出力処理に異常を検出すると、前記第1の記憶手段に備わる複数の記憶領域から、更新頻度および空き容量に基づいて記憶領域を選択することによって、前記データ群を記憶するデータ群記憶領域を確保するデータ群記憶領域確保手段と、
    前記第2の記憶手段の使用状況に応じて、前記データ群を複数の前記第2の記憶手段から読み出して前記データ群記憶領域に退避する退避処理手段と、
    前記データ群出力手段による出力処理が完了して未使用となった前記第2の記憶手段の記憶領域それぞれに、前記データ群記憶領域に退避した前記データ群を分散して記憶する第2の記憶処理手段と、
    を備える制御装置。
  4. 上位装置から送信されるデータを記憶する記憶手段として一部または全部の記憶領域を使用する第1の記憶手段と前記データを一時的に記憶する複数の第2の記憶手段とを有し前記データを前記第2の記憶手段に分散して記憶する記憶装置において、前記第2の記憶手段毎に有する制御装置であって、
    前記上位装置から送信されるデータを受信する受信処理手段と、
    前記上位装置から受信したデータを前記第1の記憶手段に記憶するとともに、前記上位装置から受信したデータを前記第2の記憶手段に分散して受信順に記憶する第1の記憶処理手段と、
    複数の前記第2の記憶手段それぞれに記憶されたデータを含むデータ群を一括して出力するデータ群出力手段と、
    前記データ群出力手段による出力処理に異常を検出すると、前記第1の記憶手段に備わる複数の記憶領域のうち、更新頻度が所定頻度よりも低い記憶領域であって、前記データ群出力手段の出力先に保持されているデータと同じデータが記憶されている記憶領域を選択することによって、前記データ群を記憶するデータ群記憶領域を確保するデータ群記憶領域確保手段と、
    前記第2の記憶手段の使用状況に応じて、前記データ群を複数の前記第2の記憶手段から読み出して前記データ群記憶領域に退避する退避処理手段と、
    前記データ群出力手段による出力処理が完了して未使用となった前記第2の記憶手段の記憶領域それぞれに、前記データ群記憶領域に退避した前記データ群を分散して記憶する第2の記憶処理手段と、
    を備える制御装置。
  5. 上位装置から送信されるデータを記憶する記憶手段として一部または全部の記憶領域を使用する第1の記憶手段と前記データを一時的に記憶する複数の第2の記憶手段とを有する記憶装置を制御する制御方法において、
    前記上位装置から送信されるデータを受信し、
    前記上位装置から受信したデータを前記第1の記憶手段に記憶するとともに、前記上位装置から受信したデータを前記第2の記憶手段に分散して受信順に記憶し、
    複数の前記第2の記憶手段それぞれに記憶されたデータを含むデータ群を一括して出力し、
    前記出力時に異常を検出すると、前記第1の記憶手段に備わる複数の記憶領域から、更新頻度および空き容量に基づいて記憶領域を選択することによって、前記データ群を記憶するデータ群記憶領域を確保し、
    前記第2の記憶手段の使用状況に応じて、前記データ群を複数の前記第2の記憶手段から読み出して前記データ群記憶領域に退避し、
    前記出力処理が完了して未使用となった前記第2の記憶手段の記憶領域それぞれに、前記データ群記憶領域に退避した前記データ群を分散して記憶する、
    ことを特徴とする制御方法。
  6. 上位装置から送信されるデータを記憶する記憶手段として一部または全部の記憶領域を使用する第1の記憶手段と前記データを一時的に記憶する複数の第2の記憶手段とを有する記憶装置を制御する制御方法において、
    前記上位装置から送信されるデータを受信し、
    前記上位装置から受信したデータを前記第1の記憶手段に記憶するとともに、前記上位装置から受信したデータを前記第2の記憶手段に分散して受信順に記憶し、
    複数の前記第2の記憶手段それぞれに記憶されたデータを含むデータ群を一括して出力し、
    前記出力時に異常を検出すると、前記第1の記憶手段に備わる複数の記憶領域のうち、更新頻度が所定頻度よりも低い記憶領域であって、前記データ群の出力先に保持されているデータと同じデータが記憶されている記憶領域を選択することによって、前記データ群を記憶するデータ群記憶領域を確保し、
    前記第2の記憶手段の使用状況に応じて、前記データ群を複数の前記第2の記憶手段から読み出して前記データ群記憶領域に退避し、
    前記出力処理が完了して未使用となった前記第2の記憶手段の記憶領域それぞれに、前記データ群記憶領域に退避した前記データ群を分散して記憶する、
    ことを特徴とする制御方法。
JP2010012345A 2010-01-22 2010-01-22 記憶装置、制御装置および記憶装置の制御方法 Expired - Fee Related JP5544897B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010012345A JP5544897B2 (ja) 2010-01-22 2010-01-22 記憶装置、制御装置および記憶装置の制御方法
US13/006,700 US20110185222A1 (en) 2010-01-22 2011-01-14 Storage device, control device, and control method for storage device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010012345A JP5544897B2 (ja) 2010-01-22 2010-01-22 記憶装置、制御装置および記憶装置の制御方法

Publications (2)

Publication Number Publication Date
JP2011150602A JP2011150602A (ja) 2011-08-04
JP5544897B2 true JP5544897B2 (ja) 2014-07-09

Family

ID=44309889

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010012345A Expired - Fee Related JP5544897B2 (ja) 2010-01-22 2010-01-22 記憶装置、制御装置および記憶装置の制御方法

Country Status (2)

Country Link
US (1) US20110185222A1 (ja)
JP (1) JP5544897B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013029911A (ja) * 2011-07-27 2013-02-07 Fujitsu Ltd 制御装置、制御方法およびストレージ装置
WO2014019133A1 (en) * 2012-07-31 2014-02-06 Empire Technology Development Llc Parting data to improve system performance
JP6350090B2 (ja) 2014-08-06 2018-07-04 富士通株式会社 ストレージ制御装置、コピー制御プログラム、およびコピー制御方法

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5544347A (en) * 1990-09-24 1996-08-06 Emc Corporation Data storage system controlled remote data mirroring with respectively maintained data indices
US6904498B2 (en) * 2002-10-08 2005-06-07 Netcell Corp. Raid controller disk write mask
US7913148B2 (en) * 2004-03-12 2011-03-22 Nvidia Corporation Disk controller methods and apparatus with improved striping, redundancy operations and interfaces
JP4519563B2 (ja) * 2004-08-04 2010-08-04 株式会社日立製作所 記憶システム及びデータ処理システム
JP4355674B2 (ja) * 2005-03-17 2009-11-04 富士通株式会社 リモートコピー方法及びストレージシステム
JP2006268420A (ja) * 2005-03-24 2006-10-05 Nec Corp ディスクアレイ装置、ストレージシステムおよび制御方法
JP4839133B2 (ja) * 2006-05-22 2011-12-21 株式会社日立製作所 ストレージ装置のデータ管理方法及び計算機システム
US7664915B2 (en) * 2006-12-19 2010-02-16 Intel Corporation High performance raid-6 system architecture with pattern matching
JP4935901B2 (ja) * 2007-05-01 2012-05-23 富士通株式会社 ストレージシステム、ストレージ装置、リモートコピー方法
WO2008152691A1 (ja) * 2007-06-12 2008-12-18 Fujitsu Limited リモートコピー方法及びストレージシステム
US7788541B2 (en) * 2008-04-15 2010-08-31 Dot Hill Systems Corporation Apparatus and method for identifying disk drives with unreported data corruption
JP4774085B2 (ja) * 2008-07-31 2011-09-14 富士通株式会社 ストレージシステム
JP5387315B2 (ja) * 2009-10-13 2014-01-15 富士通株式会社 記憶装置、制御装置および記憶装置の制御方法
JP5397148B2 (ja) * 2009-10-16 2014-01-22 富士通株式会社 記憶装置、制御装置および記憶装置の制御方法

Also Published As

Publication number Publication date
JP2011150602A (ja) 2011-08-04
US20110185222A1 (en) 2011-07-28

Similar Documents

Publication Publication Date Title
JP4774085B2 (ja) ストレージシステム
JP5397148B2 (ja) 記憶装置、制御装置および記憶装置の制御方法
US7454583B2 (en) Storage controller and control method for dynamically accomodating increases and decreases in difference data
JP5387315B2 (ja) 記憶装置、制御装置および記憶装置の制御方法
JP5593792B2 (ja) Raid装置、記憶制御方法、および、記憶制御プログラム
JP5052376B2 (ja) ストレージシステム及びストレージシステムにおける論理ユニットの引継方法
US8943353B2 (en) Assigning nodes to jobs based on reliability factors
US8078815B2 (en) Power-saving-backup management method
JP2009157785A (ja) 待機系計算機の追加方法、計算機及び計算機システム
US20120185433A1 (en) Priority-based asynchronous data replication
WO2014080492A1 (ja) 計算機システム、クラスタ管理方法、及び管理計算機
JP5544897B2 (ja) 記憶装置、制御装置および記憶装置の制御方法
JP2015052844A (ja) コピー制御装置,コピー制御方法及びコピー制御プログラム
JP6019940B2 (ja) 情報処理装置、コピー制御プログラム、およびコピー制御方法
JP5263237B2 (ja) ストレージシステム
WO2017098591A1 (ja) 計算機及びストレージ装置を有するシステム、及びシステムの制御方法
JP6273732B2 (ja) 情報処理引き継ぎ制御装置、情報処理引き継ぎ制御方法、及び、情報処理引き継ぎ制御プログラム
JP2005301880A (ja) 計算機システムにおけるデータ入出力処理方法、ストレージ装置、ホスト計算機、および計算機システム、
RU2810634C2 (ru) Способ повышения надежности систем хранения данных и соответствующее устройство
JP2019174875A (ja) 記憶システム及び記憶制御方法
JP5867215B2 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
JP2019164510A (ja) ストレージシステム及びio処理の制御方法
JP6213169B2 (ja) ジョブ管理プログラム、ジョブ管理方法及びジョブ管理装置
CN116225306A (zh) 存储系统以及存储程序更新方法
JP4435143B2 (ja) クラスタシステム及び同期化方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121005

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130911

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130917

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140415

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140428

R150 Certificate of patent or registration of utility model

Ref document number: 5544897

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees