ストレージシステム及びその制御方法
【課題】システム障害時における記憶制御装置の正副切り替え処理を適切に行う。
【解決手段】副記憶制御装置(50)は、副ホストシステム(110)から正副切り替えコマンドを受信すると、正記憶制御装置(20)から副記憶制御装置(50)にリモートコピーされていない未転送データが存在するか否かを正記憶制御装置(20)に問い合せ、未転送データが存在する場合に、正記憶制御装置(20)から未転送データを受信し、セカンダリVOL(700)を更新する。正記憶制御装置(20)は、副記憶制御装置(50)が正副切り替えコマンドを受信した時点以降における、プライマリVOL(600)へのホストアクセスによるプライマリVOL(600)の更新位置を差分ビットマップテーブル(310)により管理する。
【解決手段】副記憶制御装置(50)は、副ホストシステム(110)から正副切り替えコマンドを受信すると、正記憶制御装置(20)から副記憶制御装置(50)にリモートコピーされていない未転送データが存在するか否かを正記憶制御装置(20)に問い合せ、未転送データが存在する場合に、正記憶制御装置(20)から未転送データを受信し、セカンダリVOL(700)を更新する。正記憶制御装置(20)は、副記憶制御装置(50)が正副切り替えコマンドを受信した時点以降における、プライマリVOL(600)へのホストアクセスによるプライマリVOL(600)の更新位置を差分ビットマップテーブル(310)により管理する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はストレージシステム及びその制御方法に関する。
【背景技術】
【0002】
データセンタのような大規模なデータを取り扱うデータベースシステムでは、ホストシステムとは別に構成されたストレージシステムを用いてデータを管理する。このようなストレージシステムとして、例えば、ディスクアレイシステムが知られている。ディスクアレイシステムは、アレイ状に配列された多数のディスクドライブをRAID(Redundant Array of Independent Inexpensive Disks)管理する。多数のディスクドライブが提供する物理的な記憶領域上には、少なくとも1つ以上の論理ユニットが形成され、この論理ユニットがホストシステムに提供される。ホストシステムは、論理ユニットを一つの物理的なデバイスとして認識し、論理ユニットへのデータアクセスを行う。
【0003】
この種のストレージシステムでは、災害等に備えてデータを確実に保護するための措置が講じられている。例えば、特開2005−293469号公報には、正記憶制御装置に書き込まれるデータを副記憶制御装置にリモートコピーし、データを二重化することで、耐障害性を高めるシステムが開示されている。
【特許文献1】特開2005−293469号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
ところで、正記憶制御装置へのデータ入出力を要求するホストシステムに障害が生じたり、或いは正記憶制御装置とホストシステムの両方に障害が生じたりすると、記憶制御装置の正副を切り替えて、運用を継続する必要がある。非同期リモートコピーにより、正記憶制御装置から副記憶制御装置にデータが転送される場合には、正副切り替え時点で、正記憶制御装置から副記憶制御装置に未だ転送されていない未転送データが存在する場合も想定されるので、副記憶制御装置のデータをできるだけ新しいものにするには、未転送データを適切に処理する必要がある。更に、ホストシステムに障害が生じると、正副切り替え処理の最中にも正記憶制御装置にライトアクセスが要求される場合も想定されるので、このようなライトアクセスを適切に処理する必要もある。
【0005】
そこで、本発明は、システム障害時における記憶制御装置の正副切り替え処理を適切に行うことを課題とする。本発明の更なる目的は、後述する実施の形態の記載から明らかになるであろう。
【課題を解決するための手段】
【0006】
上記の課題を解決するため、本発明のストレージシステムは、第一の論理ボリュームを有する正記憶制御装置と、第一の論理ボリュームとコピーペアを形成可能な第二の論理ボリュームを有する副記憶制御装置とを備える。
【0007】
正記憶制御装置は、ホストアクセスによる第一の論理ボリュームの更新位置を管理する第一の差分ビットマップテーブルと、第一の論理ボリュームのデータイメージを論理的に復元するための第一のスナップショット管理情報と、ホストアクセスによって更新される前のデータであって、且つ第一の論理ボリュームに書かれていたデータである更新前データを格納する第一のプール領域と、所定のタイミング以降に第一の論理ボリュームが更新されるときに更新前データを第一のプール領域に書き込む第一の書き込み手段と、所定のタイミング以降に第一の論理ボリュームが更新されると、第一のスナップショット管理情報を所定のタイミングの時点における第一の論理ボリュームのデータイメージを論理的に復元するための情報に更新する第一のスナップショット更新手段と、第一の論理ボリュームの更新データが第二の論理ボリュームにリモートコピーされたか否かを管理する第一の転送差分ビットマップテーブルと、第一の差分ビットマップテーブルのビット情報を第一の転送差分ビットマップテーブルにマージすることにより第一の転送差分ビットマップテーブルを更新する転送ビットマップテーブル更新手段と、更新された第一の転送差分ビットマップテーブルに基づいて、所定のタイミングの時点における第一の論理ボリュームのデータイメージを構成する各データが第一の論理ボリュームと第一のプール領域の何れに存在するのかを判別し、判別された方からデータを取得して第二の論理ボリュームに送信するリモートコピー手段と、を備える。
【0008】
副記憶制御装置は、リモートコピーによる第二の論理ボリュームの更新位置を管理する第二の転送差分ビットマップテーブルと、第二の論理ボリュームのデータイメージを論理的に復元するための第二のスナップショット管理情報と、リモートコピーによって更新される前のデータであって、且つ第二の論理ボリュームに書かれていたデータである更新前データを格納する第二のプール領域と、リモートコピーによって第二の論理ボリュームが更新されるときに更新前データを前記プール領域に書き込む第二の書き込み手段と、第二の論理ボリュームが更新されると第二のスナップショット管理情報を所定のタイミングの時点における第二の論理ボリュームのデータイメージを論理的に復元する情報に更新する第二のスナップショット更新手段と、を備える。
【0009】
副記憶制御装置は、ホストシステムから正副切り替えコマンドを受信すると、正記憶制御装置から副記憶制御装置にリモートコピーされていない未転送データが存在するか否かを正記憶制御装置に問い合せ、未転送データが存在する場合に、正記憶制御装置から未転送データを受信し、第二の論理ボリュームを更新する。
【0010】
正記憶制御装置は、副記憶制御装置が正副切り替えコマンドを受信した時点以降における、第一の論理ボリュームへのホストアクセスによる第一の論理ボリュームの更新位置を第一の差分ビットマップテーブルにより管理する。
【0011】
副記憶制御装置は、未転送データの問い合わせに対する正記憶制御装置からの応答がない場合には、第二のスナップショット管理情報に基づいて、過去のある時点における第二の論理ボリュームのデータイメージを復元する。
【発明の効果】
【0012】
本発明によれば、システム障害時における記憶制御装置の正副切り替え処理を適切に行うことができる。
【発明を実施するための最良の形態】
【0013】
以下、各図を参照しながら本発明の実施形態について説明する。
図1は本実施形態に係るストレージシステム10のシステム構成を示す。ストレージシステム10は、ローカルサイトに設置されている正記憶制御装置20と、リモートサイトに設置されている副記憶制御装置50とを備える。正記憶制御装置20、副記憶制御装置50、正ホストシステム100、及び副ホストシステム110は、SAN(Storage Area Network)120を介して相互に接続されている。
【0014】
正ホストシステム100は、常用系のホストシステムであり、主として、システムが正常なときに、正記憶制御装置20にI/O処理を要求する。副ホストシステム110は、待機系のホストシステムであり、主として、システムに障害が発生したときに、副記憶制御装置50にI/O処理を要求し、障害発生時に正ホストシステム100が行っていた処理を引き継ぐ。正ホストシステム100、及び副ホストシステム110は、例えば、パーソナルコンピュータ、ワークステーション、メインフレームコンピュータ等である。
【0015】
ストレージシステム10は、正記憶制御装置20に書き込まれたデータが副記憶制御装置50にリモートコピーされるように構成されている。副記憶制御装置50は、正記憶制御装置20が過去に保持していたデータイメージと同一のデータイメージを保持する。これにより、正記憶制御装置20に障害が生じた場合でも、副記憶制御装置50を用いて、システムを稼動させることができる。リモートコピー方式としては、正記憶制御装置20と副記憶制御装置50との両方にデータを書き込んだことを条件として、正ホストシステム100にライト完了を報告する同期コピーでもよく、或いは正記憶制御装置20にデータが書き込まれた段階で、正ホストシステム100にライト完了を報告し、適当な時期にそのデータを副記憶制御装置50に転送する非同期コピーでもよい。以下の説明では、正記憶制御装置20を稼働系の正記憶制御装置として運用し、副記憶制御装置50を待機系の副記憶制御装置として運用する例を示す。
【0016】
正記憶制御装置20は、主に、コントローラ30と、記憶装置40とを備える。
【0017】
コントローラ30は、LAN(Local Area Network)インターフェース31、フロントエンドインターフェース32、CPU33、データ転送コントローラ34、キャッシュメモリ35、ローカルメモリ36、及びバックエンドインターフェース37を備える。
【0018】
コントローラ30は、複数のディスクドライブ41をいわゆるRAID方式に規定されるRAIDレベル(例えば、0,1,5)で制御することができる。RAID方式においては、複数のディスクドライブ41が一つのRAIDグループとして管理される。RAIDグループ上には、正ホストシステム100からのアクセス単位である複数の論理ボリューム42が定義されている。それぞれの論理ボリューム42には、LUN(Logical Unit Number)がアサインされる。
【0019】
CPU33は、正ホストシステム100からのデータ入出力要求に応答して、複数のディスクドライブ41へのI/O処理(ライトアクセス、又はリードアクセス)を制御するプロセッサである。
【0020】
ローカルメモリ36には、各種マイクロプログラム、及びボリューム管理テーブルなどが格納されている。各種マイクロプログラム、及びボリューム管理テーブルの詳細については、後述する。
【0021】
キャッシュメモリ35は、ディスクドライブ41に書き込むためのライトデータ、又はディスクドライブ41から読み出したリードデータを一時的に格納するバッファメモリである。キャッシュメモリ35は、電源バックアップされており、正記憶制御装置20に電源障害が発生した場合でも、キャッシュデータのロストを防ぐ不揮発性メモリとして構成されている。
【0022】
データ転送コントローラ34は、キャッシュメモリ35、フロントエンドインターフェース32、バックエンドインターフェース37、及びCPU33を相互に接続し、正ホストシステム100とディスクドライブ41との間のデータ転送を制御する。正ホストシステム100からのライトアクセスが要求されると、データ転送コントローラ34は、フロントエンドインターフェース32を介して正ホストシステム100から受け取ったデータをキャッシュメモリ35に書き込み、その後、そのライトデータをディスクドライブ41へ非同期書き込みすることを目的として、そのライトデータをバックエンドインターフェース37へ転送する。また、正ホストシステム100からのリードアクセスが要求されると、バックエンドインターフェース37を介してディスクドライブ41から読みとったリードデータをキャッシュメモリ35に書き込むとともに、フロントエンドインターフェース32にそのリードデータを転送する。
【0023】
フロントエンドインターフェース32は、正ホストシステム100とのインターフェースを制御するコントローラであり、例えば、ファイバチャネルプロトコルに基づく正ホストシステム100からのブロックアクセス要求を受信する機能を有する。
【0024】
バックエンドインターフェース37は、ディスクドライブ41とのインターフェースを制御するコントローラであり、例えば、ディスクドライブ41を制御するプロトコルに基づくディスクドライブ41へのデータ入出力要求を制御する機能を有する。
【0025】
LANインターフェース31は、LAN90に接続するインターフェースであり、TCP/IPに基づいて管理端末80との間でデータ及び制御信号の送受信を制御する。
【0026】
記憶装置40は、複数のディスクドライブ41を備える。ディスクドライブ41は、FC(Fibre Channel)ディスクドライブ、SATA(Serial Advanced Technology Attachment)ディスクドライブ、PATA(Parallel Advanced Technology Attachment)ディスクドライブ、FATA(Fibre Attached Technology Adapted)ディスクドライブ、SAS(Serial Attached SCSI)ディスクドライブ或いはSCSI(Small Computer System Interface)ディスクドライブ等のストレージデバイスである。
【0027】
正記憶制御装置20は、LAN(Local Area Network)90を介して管理端末80に接続されている。管理端末80は、例えば、CPU、メモリ及びディスプレイ等のハードウェア資源を備えるコンピュータシステムである。システム管理者は、管理端末80を入力操作することにより、正記憶制御装置20を管理するためのコマンドを正記憶制御装置20に送信する。正記憶制御装置20を管理するためのコマンドとして、例えば、ディスクドライブ41の増設或いは減設、又はRAID構成の変更を指示するためのコマンド、正ホストシステム100と正記憶制御装置20との間の通信パスを設定するためのコマンド、CPU33のマイクロプログラムをメモリ26にインストールするためのコマンド、正記憶制御装置20の動作状態の確認や故障部位を特定するためのコマンド等がある。
【0028】
副記憶制御装置50は、主に、コントローラ60と、記憶装置70とを備える。
【0029】
コントローラ60の詳細構成は、上述したコントローラ30の詳細構成と同様である。記憶装置70は、複数のディスクドライブ71を備える。コントローラ60は、複数のディスクドライブ71をいわゆるRAID方式に規定されるRAIDレベル(例えば、0,1,5)で制御することができる。RAID方式においては、複数のディスクドライブ71が一つのRAIDグループとして管理される。RAIDグループ上には、副ホストシステム110からのアクセス単位である複数の論理ボリューム72が定義されている。それぞれの論理ボリューム72には、LUN(Logical Unit Number)がアサインされる。
【0030】
図2は各種マイクロプログラム及びボリューム管理テーブルを示す。
【0031】
ローカルメモリ36は、内部コピー実行プログラム200、リモートコピー実行プログラム210、制御プログラム220、及びボリューム管理テーブル230を格納する。内部コピー実行プログラム220は、内部コピー処理、及びスナップショット更新処理を実行する。リモートコピー実行プログラム210は、リモートコピーを実行する。制御プログラム220は、内部コピー実行プログラム200、及びリモートコピー実行プログラム210を制御する。ボリューム管理テーブル230は、複数の論理ボリューム42に関する情報を格納する。
【0032】
図3はボリューム管理テーブル230のテーブル構造を示す。
【0033】
ボリューム管理テーブル230には、複数の論理ボリューム42の各々について、論理ボリューム(以下、「VOL」と略記することがある。)を識別するためのVOL−IDと、その論理ボリュームへのアクセスパスを示すパス情報と、その論理ボリュームの種類(以下、「VOL種類」と記す。)と、その論理ボリュームがプールVOLであるか否かを示すフラグ(以下、「プールVOL」フラグと記す。)と、その論理ボリュームを含んだVOLペアに関する情報(以下、「ペア情報」と記す。)と、が対応付けられて格納される。ボリューム管理テーブル230に格納される情報のうちの少なくとも一つの情報要素(例えば、VOL−ID、VOL種類、プールVOLフラグ)は、管理端末80又は正ホストシステム100などから入力できる。
【0034】
VOL種類としては、例えば、「プライマリ」、「セカンダリ」、「プール」がある。「プライマリ」という種類のVOL(以下、「プライマリVOL」又は「PVOL」と記す。)は、コピー処理(例えば、リモートコピー処理)において、コピー元となるVOLである。「セカンダリ」という種類のVOL(以下、「セカンダリVOL」又は「SVOL」と記す。)は、コピー処理(例えば、リモートコピー処理)において、コピー先となるVOLである。セカンダリVOLは、少なくともプライマリVOLの容量以上の記憶容量を有する。プライマリVOLもセカンダリVOLも、パス情報は定義されている。但し、「プール」という種類のVOL(以下、「プールVOL」と記す。)は、パス情報が未定義である。プールVOLの詳細については、後述する。
【0035】
プールVOLフラグは、それに対応する論理ボリュームがプールVOLであるか否かを示す。具体的には、例えば、プールVOLフラグが「1」であれば、それに対応する論理ボリュームは、プールVOLであり、プールVOLフラグが「0」であれば、それに対応する論理ボリュームは、プールVOLでない。
【0036】
ペア情報には、例えば、ペア相手情報、及びペア状態が含まれている。ペア相手情報には、例えば、ペア相手となる論理ボリューム(以下、ペア相手VOL)に関する情報として、ペア相手VOLを有する記憶制御装置のID、ペア相手VOLのVOL−ID、及びパス情報などがある。ペア状態としては、例えば、「SMPL」、「COPY」、「PAIR」、「PSUS」、「SPLIT」、「SSWS」などがある。
【0037】
「SMPL」とは、ペア生成前の正副関係のない状態を示す。
【0038】
「COPY」は、プライマリVOLのデータをセカンダリVOLにコピーする形成コピー中の状態を示す。「COPY」では、セカンダリVOLへのライトは禁止される。
【0039】
「PAIR」は、プライマリVOLからセカンダリVOLへ非同期コピーを行っている状態を示す。「PAIR」では、セカンダリVOLへのライトは禁止される。
【0040】
「PSUS」は、プライマリVOLからセカンダリVOLへ非同期コピーを停止している状態を示す。「PSUS」では、セカンダリVOLへのリード/ライトは禁止される。
【0041】
「SPLIT」は、プライマリVOLとセカンダリVOLとを論理的に分離して、プライマリVOLの更新前後の差分データのみをセカンダリVOLにコピーする状態を示す。
【0042】
「SSWS」は、セカンダリVOLがリード/ライト可能な状態を示す。「SSWS」では、セカンダリVOLのデータは、前回の確定内容にリストアされ、プライマリVOLは、「PSUS」に遷移する。
【0043】
CPU33は、ボリューム管理テーブル230を参照することにより、アクセスすべき論理ボリューム42の種類、及びペア情報を特定することができる。また、CPU33は、プールVOLが後述のバーチャルVOLに割りアサインされた場合には、そのプールVOLへのパスを表す情報を定義し、定義されたパス情報をボリューム管理テーブル230に登録することができる。また、CPU33は、アサインされなくなったプールVOLについてのパス情報を消去することにより、プールVOLを未使用状態にすることができる。CPU33は、各プールVOLについて、パス情報が登録されているか否かにより、各プールVOLが使用中であるか、或いは未使用状態であるかを判別することができる。
【0044】
図4は正記憶制御装置20が実行する非同期リモートコピーの処理概要を示す。
【0045】
正記憶制御装置20は、CPU33、キャッシュメモリ35、プライマリVOL600、バーチャルVOL610、複数のプールVOL620、スナップショット管理情報300、及び転送差分ビットマップテーブル510を備える。
【0046】
プールVOL620は、プライマリVOL600とバーチャルVOL610とのペア状態がスプリットされた時点以降にプライマリVOL600のデータイメージが更新されたときに、更新前後の差分データを退避させるための論理ボリュームである。
【0047】
バーチャルVOL610は、ある時刻にプライマリVOL600に格納されているデータと、ある時刻以降にプライマリVOL600からプールVOL620に退避されたデータとから、ある時刻におけるプライマリVOL600のデータイメージを復元するための仮想的な論理ボリュームである。バーチャルVOL610は、プライマリVOL600のスナップショットを論理的に保持することができる。本明細書では、過去のある時点におけるプライマリVOL600のデータイメージを論理的にバーチャルVOL610上に復元する処理(即ち、スナップショットを作成する処理)を「内部コピー」と称する。バーチャルVOL610は、プライマリVOL600又はセカンダリVOL700とペアを形成することができる。本実施形態では、バーチャルVOL610は、キャッシュメモリ35の記憶領域に形成される場合を例示するが、ディスクドライブ41の記憶領域に形成されていてもよい。説明の便宜上、バーチャルVOL610をP_VVOLと略記する場合がある。
【0048】
CPU33は、バーチャルVOL610に、複数のプールVOL620の中から一以上のプールVOL620(例えば、どのVOLにも対応付けられていない未使用のプールVOL)を選択し、選択された一以上のプールVOL620をバーチャルVOL610にアサインできる。CPU33は、バーチャルVOL610にアサインされるプールVOL620の数を、記憶資源の消費状況に応じて、適宜に増減することができる。
【0049】
スナップショット管理情報300は、ある時刻におけるプライマリVOL600のデータイメージを、スナップショットを用いて復元するための情報である。CPU33は、スナップショット管理情報300を参照することにより、ある時刻におけるプライマリVOL600のデータイメージを構成する各データがプールVOL620に存在するのか、或いはプライマリVOL600に存在するのかを判別し、判別された方からデータを取得することにより、ある時刻におけるプライマリVOL600のデータイメージをバーチャルVOL610に復元できる。スナップショット管理情報300は、プライマリVOL600のデータ更新位置を示す差分ビットマップテーブル310を含む。
【0050】
転送差分ビットマップテーブル510は、プライマリVOL600とセカンダリVOL700とが同期した後において、プライマリVOL600のデータが更新されたときに、セカンダリVOL700にリモートコピーされるべき差分データの位置を示す。
【0051】
CPU33は、プライマリVOL600とバーチャルVOL610との間のペア状態をコピー状態にすることができる。ライマリVOL600とバーチャルVOL610との間のペア状態がコピー状態になっているときに、プライマリVOL600にデータが書き込まれると、CPU33は、そのデータをバーチャルVOL610又はプールVOL620に書き込む。
【0052】
CPU33は、プライマリVOL600とバーチャルVOL610との間のペア状態をスプリット状態にすることができる。ライマリVOL600とバーチャルVOL610との間のペア状態がスプリット状態になっているときに、プライマリVOL600にデータが書き込まれると、CPU33は、内部コピープログラム200を動作させて、内部コピー処理及びスナップショット更新処理を実行する。
【0053】
副記憶制御装置50は、CPU63、キャッシュメモリ65、セカンダリVOL700、複数のバーチャルVOL710A,710B、複数のプールVOL720、スナップショット管理情報400、及び転送差分ビットマップテーブル520を備える。
【0054】
プールVOL720は、セカンダリVOL700とバーチャルVOL710A又はバーチャルVOL710Bとのペア状態がスプリットされた時点以降にセカンダリVOL700のデータイメージが更新されたときに、更新前後の差分データを退避させるための論理ボリュームである。
【0055】
バーチャルVOL710A,710Bは、ある時刻にセカンダリVOL700に格納されているデータと、ある時刻以降にセカンダリVOL700からプールVOL720に退避されたデータとから、ある時刻におけるセカンダリVOL700のデータイメージを復元するための仮想的な論理ボリュームである。バーチャルVOL710A,710Bは、セカンダリVOL700のスナップショットを論理的に保持することができる。本実施形態では、バーチャルVOL710A,710Bは、キャッシュメモリ65の記憶領域に形成される場合を例示するが、ディスクドライブ71の記憶領域に形成されていてもよい。説明の便宜上、バーチャルVOL710A,710BをS_VVOLと略記する場合がある。
【0056】
スナップショット管理情報400は、ある時刻におけるセカンダリVOL700のデータイメージを、スナップショットを用いて復元するための情報である。CPU63は、スナップショット管理情報400を参照することにより、ある時刻におけるセカンダリVOL700のデータイメージを構成する各データがプールVOL720に存在するのか、或いはセカンダリVOL700に存在するのかを判別し、判別された方からデータを取得することにより、ある時刻におけるセカンダリVOL700のデータイメージをバーチャルVOL710A,710Bに復元できる。スナップショット管理情報400は、セカンダリVOL700のデータ更新位置を示す差分ビットマップテーブル410A,410Bを含む。
【0057】
転送差分ビットマップテーブル520は、プライマリVOL600とセカンダリVOL700とが同期した後において、プライマリVOL600のデータが更新されたときに、リモートコピーによりセカンダリVOL700のデータが更新された位置を示す。
【0058】
次に、内部コピー処理、スナップショット更新処理、及びリモートコピー処理の詳細について説明を加える。以降の説明では、プライマリVOL600とバーチャルVOL610との間のペア状態がスプリット状態にあることを前提とする。
【0059】
正記憶制御装置20は、正ホストシステム100からライトアクセス要求を受けると(S101)、ライトデータをキャッシュメモリ35に格納し(S102)、ライト完了を正ホストシステム100に報告する(S103)。
【0060】
CPU33は、キャッシュメモリ35に書き込まれたライトデータを読み出し、プライマリVOL600に書き込む(S104)。このとき、CPU33は、更新前データ(ライトデータによって更新(上書き)される前のデータであって、且つプライマリVOL600に書かれていた過去のデータ)をプライマリVOL600からプールVOL620に移動させる(S105)。
【0061】
プライマリVOL600とバーチャルVOL610との間のペア状態がスプリット状態にあるときに、内部コピーを実行すると、ある時刻におけるプライマリVOL600のデータイメージを構成する各データは、プライマリVOL600とプールVOL620とに分散される。
【0062】
次に、CPU33は、スナップショット管理情報300を、プライマリVOL600とバーチャルVOL610との間のペア状態がスプリットされた時点(以下、「スプリット時点」と称する。)にプライマリVOL600に格納されているデータと、そのスプリット時点以降にプライマリVOL600からプールVOL620に移動されたデータとから、そのスプリット時点におけるプライマリVOL600のデータイメージを復元するための情報に更新する(S106)。このスナップショット更新処理により、バーチャルVOL610は、ライマリVOL600のスナップショットを論理的に保持することができる。
【0063】
CPU33は、プライマリVOL600とバーチャルVOL610との間のペア状態がスプリット状態にあるときに、正ホストシステム100からライトアクセス要求を受ける都度に、上述したS102〜S106の処理を繰り返し実行する。
【0064】
CPU33は、スプリット時点から所定時間経過後にリモートコピー実行プログラム210を動作させ、リモートコピー処理を実行する。リモートコピー実行プログラム210は、差分ビットマップテーブル310を転送差分ビットマップテーブル510にマージする。そして、リモートコピー実行プログラム210は、転送差分ビットマップテーブル510に基づいて、スプリット時点におけるプライマリVOL600のデータイメージを復元するための各データがプライマリVOL600に存在するのか、或いはプールVOL620に存在するのかを判別し、判別された方からデータを取得してそのデータを副記憶制御装置50に転送する(S107)。このリモートコピー処理により、スプリット時点におけるプライマリVOL600のデータイメージがセカンダリVOL700に復元される。
【0065】
副記憶制御装置50は、正記憶制御装置20からデータを受信すると、正記憶制御装置20にライト完了を報告する(S108)。
【0066】
以後、CPU63は、正記憶制御装置20から受信したデータをセカンダリVOL700に書き込む際に、更新前データ(ライトデータによって更新(上書き)される前のデータであって、且つセカンダリVOL700に書かれていた過去のデータ)をセカンダリVOL700からプールVOL720に移動させる(S109)。
【0067】
更に、CPU63は、スナップショット管理情報400を、スプリット時点にセカンダリVOL700に格納されているデータと、スプリット時点以降にセカンダリVOL700からプールVOL720に移動されたデータとから、スプリット時点におけるセカンダリVOL700のデータイメージを復元するための情報に更新する(S110)。
【0068】
尚、CPU63は、バーチャルVOL710A,710Bを交互に切り替えて使用する。これにより、例えば、CPU63は、バーチャルVOL710AにセカンダリVOL700のスナップショットを論理的に作成しつつ、差分ビットマップテーブル410Bをクリアすることができる。差分ビットマップテーブル410A,410Bをクリアするには、長時間を要する。バーチャルVOL710A,710Bを交互に切り替えて使用することで、スナップショットの作成と、差分ビットマップテーブル410A,410Bのクリアを並行処理できるので、効率がよい。
【0069】
CPU33は、正記憶制御装置20を制御するための手段(例えば、プライマリVOL600の更新前データをプールVOL620に書き込むための書き込み手段、スナップショット管理情報300を更新するスナップショット更新手段、転送差分ビットマップテーブル510を更新する転送差分ビットマップテーブル更新手段、正記憶制御装置20から副記憶制御装置50へ未転送データをリモートコピーするリモートコピー手段など)として機能する。
【0070】
CPU63は、副記憶制御装置50を制御するための手段(例えば、セカンダリVOL700の更新前データをプールVOL720に書き込むための書き込み手段、スナップショット管理情報400を更新するスナップショット更新手段など)として機能する。
【0071】
図5は正記憶制御装置20において実行される非同期リモートコピーの処理シーケンスを示す。
【0072】
時刻t0は、プライマリVOL600とバーチャルVOL610との間のペア状態がスプリットされたスプリット時点を示す。この時刻t0におけるプライマリVOL600のデータイメージを「イメージT0」と称する。イメージT0は、プライマリVOL600の第一のブロック領域にデータブロックAが格納されているデータイメージとする。この時刻t0の時点では、プールVOL620に更新前データは格納されていない。スナップショット管理情報300は、イメージT0を復元するための情報になっている。
【0073】
時刻t1で(つまり、スプリット状態の期間中に)、プライマリVOL600の第一のブロック領域にデータブロックBが上書きされると、プライマリVOL600のデータイメージがイメージT0からイメージT1に変化する。このとき、内部コピー実行プログラム200は、データブロックA(更新前データ)をプライマリVOL600からバーチャルVOL620に書き込み、スナップショット管理情報300を、プライマリVOL600の第一のブロック領域に更新があり、且つその第一のブロック領域に存在していたデータブロックA(更新前データ)がバーチャルVOL620に格納されたことを示す情報に更新する。
【0074】
また、時刻t1で、制御プログラム220がリモートコピー処理の実行をリモートコピー実行プログラム210に命じる。リモートコピー実行プログラム210は、転送差分ビットマップテーブル510を参照することにより、イメージT0を構成するデータブロックAがバーチャルVOL610に存在することを特定し、バーチャルVOL610からデータブロックAを取得し、データブロックAを副記憶制御装置50に送信する。
【0075】
時刻t2は、リモートコピー処理が完了した時点である。この結果、時刻t0の時点でプライマリVOL600に形成されていたイメージT0が、セカンダリVOL700に複製される。
【0076】
また、時刻t2で(つまり、スプリット状態の期間中に)、プライマリVOL600の第二のブロック領域にデータブロックCが書かれると、プライマリVOL600のデータイメージがイメージT1からイメージT2に変化する。このとき、内部コピー実行プログラム200は、スナップショット管理情報300を、プライマリVOL600第二のブロック領域に更新があったことを示す情報に更新する。
【0077】
例えば、時刻t2の後であって時刻t3の前に、プライマリVOL600の第二のブロック領域にデータブロックDが上書きされると、プライマリVOL600のデータイメージがイメージT2からイメージT3(第一のブロック領域にデータブロックBが存在し、第二のブロック領域にデータブロックDが存在するデータイメージ)に変化する。このとき、内部コピー実行プログラム200は、データブロックC(更新前データ)をプライマリVOL600からプールVOL620に移動させ、スナップショット管理情報300を、プライマリVOL600の第二のブロック領域に更新があり、その第二のブロック領域に存在していたデータブロックCがプールVOL620に格納されたことを示す情報に更新する。
【0078】
その後、プライマリVOL600の更新が行われる前に、時刻t3で、再び、プライマリVOL600とバーチャルVOL610とがスプリット状態にされる。
【0079】
この時刻t3の時点で、換言すれば、スプリット状態にされた場合に、CPU33は、その時刻t3におけるプライマリVOL600のイメージT3をバーチャルVOL610に論理的に保持することを目的として、プールVOL620に格納されている全ての更新前データを消去する。
【0080】
また、CPU33は、スナップショット管理情報300を、イメージT0を復元するための情報からイメージT3を復元するための情報に更新する。具体的には、例えば、時刻t3の時点では、プライマリVOL600において、未だ更新が行われていない状態なので、CPU33は、スナップショット管理情報300を、プライマリVOL600で更新が行われていないことを示す情報に更新する。
【0081】
時刻t4の時点でプライマリVOL600の第二のブロック領域にデータブロックEが上書きされると、プライマリVOL600のデータイメージがイメージT3からイメージT4に変化する。このとき、内部コピー実行プログラム200は、データブロックD(更新前データ)をプライマリVOL600からバーチャルVOL610に書き込み、スナップショット管理情報300を、プライマリVOL600の第二のブロック領域で更新があり、且つその第二のブロック領域に存在していたデータブロックDがプールVOL620に移動したことを示す情報に更新する。
【0082】
時刻t4の時点でリモートコピー処理が行われる。リモートコピー実行プログラム210は、転送差分ビットマップテーブル510を参照することにより、プライマリVOL600の第一のブロック領域に更新が無いので、イメージT3を構成するデータブロックBがプライマリVOL600に存在することを把握し、更にプライマリVOL600の第二のブロック領域に更新があったので、イメージT3を構成する別のデータブロックDがプールVOL620に存在することを把握する。リモートコピー実行プログラ210は、プライマリVOL600からデータブロックBを取得し、更にプールVOL620からデータブロックDを取得し、データブロックB及びデータブロックDを副記憶制御装置50に転送する。
【0083】
時刻t5の時点は、リモートコピー処理が完了した時点である。この結果、セカンダリVOL700におけるイメージT0が、時刻t3におけるプライマリVOL600のイメージT3に更新される。つまり、セカンダリVOL700の第一ブロック領域のデータブロックAにデータブロックBが上書きされ、更にセカンダリVOL700の第二のブロック領域にデータブロックDが書き込まれる。
【0084】
尚、これ以降、副記憶制御装置50は、次のスプリット時点t6のイメージT6を構成するデータを受信するまでの期間、イメージT3を保存する。
【0085】
以後、時刻t3乃至時刻t5において実行された上述の処理が繰り返される。
【0086】
つまり、正記憶制御装置20では、定期的に又は不定期的に、プライマリVOL600とバーチャルVOL610とがスプリット状態にされる。そのスプリット状態にされている期間中であって、次にスプリット状態にされる時点までに(換言すれば、内部コピー処理及びスナップショット更新処理に並行して)、リモートコピー処理が実行される。そのリモートコピー処理が完了した時点以降に、再び、プライマリVOL600とバーチャルVOL610とがスプリット状態にされ、プールVOL620から更新前データが消去される。このような処理が繰り返されることにより、定期的に又は不定期的になされたスプリット時点におけるプライマリVOL600のデータイメージ(図5の例では、時刻t0におけるイメージT0、時刻t3におけるイメージT3、時刻t6におけるイメージT6)をバーチャルVOL610に論理的に保持し、そのデータイメージをセカンダリVOL700にコピーできる。
【0087】
図6は本実施形態に係るスナップショット更新処理の概要を示し、より詳細には、プライマリVOL600のデータイメージがイメージT3からイメージT4に変化し、バーチャルVOL610によってイメージT3が論理的に保持される様子を示す。
【0088】
スナップショット管理情報300は、差分ビットマップテーブル310、アドレステーブル320、及び差分データ制御ブロック(Differential Data Control Block)330を含む。
【0089】
差分ビットマップテーブル310は、プライマリVOL600内の複数のブロック領域(例えば、1ブロック領域は64Kバイト)にそれぞれ対応する複数のビットを有する。例えば、イメージT3からイメージT4に変わる場合、図6に示すように、プライマリVOL600の第一のブロック領域は、更新されないので、その第一のブロック領域に対応するビットは「0」のままであり、第二のブロック領域のデータブロックDにデータブロックDが上書きされるので、その第二のブロック領域に対応するビットが「0」から「1」に更新される。
【0090】
アドレステーブル320は、プライマリVOL600の複数のブロック領域にそれぞれ対応したアドレス領域を有する。あるブロック領域に対応する更新前データが存在していれば、そのあるブロック領域に対応するアドレス領域には、そのアドレス領域に対応するアドレスであって、差分データ制御ブロック330上のアドレスが格納される。
【0091】
差分データ制御ブロック330は、例えば、プールVOL620内の複数のブロック領域にそれぞれ対応する管理領域を有する。各管理領域には、プールVOL620内のブロック領域に対応する位置に格納された更新前データがどの世代のスナップショットのデータであるかが記録される。それぞれの差分データ制御ブロック330は、ポインタによって他の差分データ制御ブロック300に接続されている。本明細書では、差分データ制御ブロック330のキュー構造を「DDCBキュー」と称する。また、便宜上、差分データ制御ブロック330を「DDCB」と称する場合がある。CPU33は、管理領域を辿ることによって、複数世代の更新前データを取得することができる。
【0092】
尚、差分データ制御ブロック330の使用されていない領域は、空きキューとして管理される。空きキューは、空きキューカウンタ340によって管理される。
【0093】
上述の構成により、スナップショット作成時点におけるプライマリVOL600のデータイメージを論理的にバーチャルVOL610に複写できる。そして、バーチャルVOL610内のデータがどの世代の更新前データであるかは、差分データ制御ブロック330によって管理される。
【0094】
図7は差分ビットマップテーブル310の詳細構成を示す。
【0095】
差分ビットマップテーブル310は、ブロック情報テーブル311、ブロック管理詳細テーブル312、及びブロック管理テーブル313を含む。
【0096】
ブロック管理テーブル313は、プライマリVOL600内の各ブロック領域(以下、「BLK」と記す場合がある。)について、「BLK使用状態」、及び「初期化状態」を管理する。BLK使用状態には、「使用」、及び「未使用」がある。「使用」は、ブロック領域が何れかのコピー系で使用されていることを示す。「未使用」は、ブロック領域が何れかのコピー系で使用されていないことを示す。「初期化状態」には、「未使用」、「未初期化0」、「未初期化1」、及び「初期化済」がある。「未使用」は、ブロック領域が確保されていないことを示す。「未初期化0」は、ブロック領域が「0」に初期化されていないことを示す。「未初期化1」は、ブロック領域が「1」に初期化されていないことを示す。「初期化済」は、ブロック領域が「0」又は「1」に初期化されていることを示す。
【0097】
ブロック管理詳細テーブル312は、複数のブロック領域に関するブロック管理テーブル313を一纏めにしたものである。
【0098】
ブロック情報テーブル311は、複数のブロック管理詳細テーブル312を一纏めにしたものであり、プライマリVOL600内の各LU(Logical Unit)に属するブロック領域を管理する。
【0099】
差分マージ状態管理テーブル350は、差分ビットマップテーブル310から転送差分ビットマップテーブル510へのマージ処理の有無を管理する。マージ完了フラグは、マージ処理が「実施済み」であるか、或いは「未実施」であるかを示す。マージ処理の詳細については、後述する。
【0100】
図8は差分ビットマップテーブル310から転送差分ビットマップテーブル510へのマージ処理の概要を示す。これらのビットマップテーブル310,510の「黒」は、ビットが「1」であること、即ち、ビットオンであることを示し、「白」は、ビットが「0」であること、即ち、ビットオフであることを示す。
【0101】
図8(A)は、プライマリVOL600とセカンダリVOL700とがペア状態にあり、マージ完了フラグが「未実施」にあることを示す。
【0102】
図8(B)は、プライマリVOL600へのライトアクセス時におけるマージ処理を示す。プライマリVOL600へライトアクセスがあると、CPU33は、マージ完了フラグを参照し、差分ビットマップテーブル310から転送差分ビットマップテーブル510へのマージ処理の有無をチェックする。
【0103】
マージ完了フラグは、「未実施」を示しているため、CPU33は、ビットのマージ処理を行い、マージ完了フラグを「実施済み」に更新する。更に、CPU33は、差分ビットマップテーブル310のビットのうちマージ処理を行ったビットを「未初期化0」に更新するとともに、プライマリVOL600へライトアクセスがあった位置に対応するビットを「1」に更新する。
【0104】
図8(C)は、リモートコピー時におけるマージ処理を示す。CPU33は、リモートコピー実施時に差分ビットマップテーブル310から転送差分ビットマップテーブル510へのマージ処理を行い、マージ完了フラグを「実施済み」に更新する。更に、CPU33は、差分ビットマップテーブル310のビットのうちマージ処理を行ったビットを「未初期化0」に更新するとともに、転送差分ビットマップテーブル510のビットのうちセカンダリVOL700へリモートコピーされたデータの位置に対応するビットを「0」に更新する。
【0105】
図8(D)は、リモートコピー時における転送差分ビットマップテーブル510のビットオフ処理を示す。CPU33は、転送差分ビットマップテーブル510を参照しながら引き続きリモートコピーを実施し、転送差分ビットマップテーブル510のビットのうちセカンダリVOL700へリモートコピーされたデータの位置に対応するビットを「0」に更新する。尚、差分ビットマップテーブル310には、プライマリVOL600にライトアクセスがあるまで、ビット「1」は存在しない。
【0106】
尚、プールVOL620は、バーチャルVOL610からセカンダリVOL700へ更新前データをリモートコピーすることを前提に、更新前データを一時的に退避するものであるため、プールVOL620に退避する必要のある更新前データは、差分ビットマップテーブル310のビットのうちビット「1」を有し、且つ、転送差分ビットマップテーブル510に未だマージされていないビットに対応するブロック領域の更新前データである。プールVOL610に退避する更新前データをリモートコピーする必要のあるデータに限定することで、プールVOL610に格納されるデータ量の増加を抑制できる。
【0107】
一方、プールVOL720に保存される更新前データは、セカンダリVOL700のデータリカバリに用いられるものであるため、セカンダリVOL700の更新前データは、全てプールVOL720に保存しておく必要がある。
【0108】
図9は正記憶制御装置20において実行される非同期リモートコピーのフローチャートを示す。
【0109】
CPU33は、プライマリVOL600とバーチャルVOL610との間のペア状態をスプリット状態にし、ボリューム管理テーブル230を更新する(S201;YES)。
【0110】
プライマリVOL600へのライトアクセスにより、新たなデータがプライマリVOL600に書き込まれると(S202;YES)、CPU33は、上述した内部コピー処理、及びスナップショット更新処理を実行する(S203)。
【0111】
プライマリVOL600へのライトアクセスと、そのライトアクセスに伴う内部コピー処理及びスナップショット更新処理は、少なくとも、スプリット状態の期間中にリモートコピーが実施されるまで繰り返される(S204;NO)。
【0112】
スプリット状態の期間中にリモートコピー処理を実行することになると(S204;YES)、CPU33は、マージ完了フラグを参照し、差分ビットマップテーブル310から転送差分ビットマップテーブル510へのマージ処理が未実施であるか否かをチェックする(S205)。
【0113】
マージ処理が未実施の場合には(S205;YES)、CPU33は、差分ビットマップテーブル310から転送差分ビットマップテーブル510へのマージ処理を行い(S206)、転送差分ビットマップテーブル510を参照し(S207)、リモートコピーを実施する(S208)。
【0114】
マージ処理が実施済みの場合には(S205;NO)、CPU33は、転送差分ビットマップテーブル510を参照し(S207)、リモートコピーを実施する(S208)。
【0115】
リモートコピーが完了し、再度、スプリット状態に移行すると(S209;YES)、CPU33は、プールVOL620に格納されている全ての更新前データを消去するとともに、スナップショット管理情報300の更新情報も消去する(S210)。これにより、バーチャルVOL610もスナップショット管理情報300も、再びスプリット状態が開始された時点におけるプライマリVOL600のデータイメージを復元する情報に更新される。
【0116】
以後、S202乃至S210の処理が繰り返される。即ち、点線枠800に示されるループが形成される。このループにおいて、例えば、スプリット状態が解除された場合、CPU33は、このループから抜けてS201の処理を実行する。上述した図5の処理は、点線枠800に示されるループの処理の一例である。
【0117】
一方、スプリット状態が開始されておらず(S201;NO)、プライマリVOL600とバーチャルVOL610との間のペア状態がコピー状態であれば(S211;YES)、プライマリVOL600へのライトアクセスにより、新たなデータがプライマリVOL600に書き込まれると(S212;YES)、上述した通常コピー処理が実行される(S213)。
【0118】
プライマリVOL600とバーチャルVOL610とのペア状態がスプリット状態でもなく(S201;NO)、且つコピー状態でもない場合には(S211;NO)、そのときのペア状態に応じた処理が行われる(S214)。
【0119】
尚、上述の説明では、説明の便宜上、一つのPVOL600を一つのプールVOL620に対応付ける例を示したが、これに限られるものではない。正記憶制御装置20は、複数のPVOLと、複数のプールグループとを備え、ある一つのPVOLから退避される更新前データは、ある一つのプールグループにのみに格納されるように構成されてもよい。同様に、副記憶制御装置50は、複数のSVOLと、複数のプールグループとを備え、ある一つのSVOLから退避される更新前データは、ある一つのプールグループにのみに格納されるように構成されてもよい。プールグループは、一つ以上のLU(Logical Unit)から成る記憶領域である。プールグループは、プール領域と別称することもできる。
【0120】
図10はPVOLとプールグループとの対応関係を示す説明図である。同図に示すように、正記憶制御装置20は、複数のPVOL1,PVOL2,PVOL3と、複数のプールグループ1,2とを備える。PVOL1は、プールグループ1に対応付けられており、PVOL1からの退避データは、プールグループ1に格納される。プールグループ1は、LU1,LU2,LU3から成る記憶領域である。PVOL2及びPVOL3は、プールグループ2に対応付けられており、PVOL2又はPVOL3からの退避データは、プールグループ2に格納される。プールグループ2は、LU4,LU5,LU6から成る記憶領域である。
【0121】
図11はプールグループ−PVOL対応テーブル900を示す。プールグループ−PVOL対応テーブル900は、「プールグループ#」、「所属LU」、「PVOL#」をそれぞれ対応付けて格納する。「プールグループ#」は、プールグループの番号を示す。「所属LU」は、プールグループに所属しているLUの番号を示す。「PVOL#」は、PVOLの番号を示す。
【0122】
このように、ある一つのPVOLからの退避データを、ある一つのプールグループにのみ格納しておくことで、何れかのプールグループに障害(例えば、オーバーフローなど)が生じたとしても、他のプールグループに影響を与えることはない。
【0123】
次に、差分データ制御ブロック330のキュー管理について説明する。アドレステーブル320内の番号は、差分データ制御ブロック330の番号(以下、「DDCB番号」又は「DDCB#」と記す。)を示す。プールVOL620に格納されているデータが消去されると、その消去されたデータを管理していたDDCBキューを空きキューに遷移させる必要がある。DDCBを接続して空きキューを形成するには、以下のアルゴリズムを適用できる。
【0124】
(1)「新たに接続するDDCB」のDDCB#±1,DDCB#±2,…,又はDDCB#±NのDDCB#を有するDDCBが空きキューに存在するか否かをチェックする。
(2)「新たに接続するDDCB」のDDCB#+1,DDCB#+2,…,又はDDCB#+NのDDCB#を有するDDCBが複数存在する場合には、「新たに接続するDDCB」のDDCB#に一番近いDDCB#を有するDDCBの直前に「新たに接続するDDCB」を接続する。
(3)「新たに接続するDDCB」のDDCB#+1,DDCB#+2,…,又はDDCB#+NのDDCB#を有するDDCBが一つのみ存在する場合には、そのDDCBの直前に「新たに接続するDDCB」を接続する。
(4)「新たに接続するDDCB」のDDCB#−1,DDCB#−2,…,又はDDCB#−NのDDCB#を有するDDCBが複数存在する場合には、「新たに接続するDDCB」のDDCB#に一番近いDDCB#を有するDDCBの直後に「新たに接続するDDCB」を接続する。
(5)新たに接続するDDCBのDDCB#−1,DDCB#−2,…,又はDDCB#−NのDDCB#を有するDDCBが一つのみ存在する場合には、そのDDCBの直後に「新たに接続するDDCB」を接続する。
(6)「新たに接続するDDCB」のDDCB#±1,DDCB#±2,…,又はDDCB#±NのDDCB#を有するDDCBが存在しない場合には、空きキューの最後尾に「新たに接続するDDCB」を接続する。
【0125】
図12及び図13は、上述のアルゴリズムにおいて、N=1とした例を示す。
【0126】
図12(A)は、初期状態を示す。何れのDDCBキューも空きキューに遷移していない。
【0127】
図12(B)は、DDCB#10、DDCB#5、及びDDCB#3のDDCBキューが空きキューに遷移した状態を示す。
【0128】
DDCB#5のDDCBを空きキューに接続する前処理として、DDCB#4又はDDCB#6のDDCBをサーチする。空きキューには、DDCB#10のDDCBしか存在しないので、DDCB#5のDDCBを空きキューの最後尾に接続する。
【0129】
DDCB#3のDDCBを空きキューに接続する前処理として、DDCB#2又はDDCB#4のDDCBをサーチする。空きキューには、DDCB#10、及びDDCB#5しか存在しないので、DDC#3のDDCBを空きキューの最後尾に接続する。
【0130】
図12(C)は、更に、DDCB#11、及びDDCB#4のDDCBキューが空きキューに遷移した状態を示す。
【0131】
DDCB#11のDDCBを空きキューに接続する前処理として、DDCB#10又はDDCB#12のDDCBをサーチする。空きキューには、DDCB#10のDDCBが存在するので、DDCB#10のDDCBの直後にDDCB#11のDDCBを挿入して、空きキューを形成する。
【0132】
DDCB#4のDDCBを空きキューに接続する前処理として、DDCB#3又はDDCB#5のDDCBをサーチする。空きキューには、DDCB#3のDDCBが存在するので、DDCB#3のDDCBの直後にDDCB#4のDDCBを挿入して、空きキューを形成する。
【0133】
図13(A)は、更に、DDCB#30、DDCB#1、及びDDCB#21のDDCBキューが空きキューに遷移した状態を示す。
【0134】
DDCB#30のDDCBを空きキューに接続する前処理として、DDCB#29又はDDCB#31のDDCBをサーチする。空きキューには、DDCB#10、DDCB#5、DDCB#3、DDCB#11、DDCB#4のDDCBしか存在しないので、DDCB#30のDDCBを空きキューの最後尾に接続する。
【0135】
DDCB#1のDDCBを空きキューに接続する前処理として、DDCB#0又はDDCB#2のDDCBをサーチする。空きキューには、DDCB#10、DDCB#5、DDCB#3、DDCB#11、DDCB#4、DDCB#30のDDCBしか存在しないので、DDCB#1のDDCBを空きキューの最後尾に接続する。
【0136】
DDCB#21のDDCBを空きキューに接続する前処理として、DDCB#20又はDDCB#22のDDCBをサーチする。空きキューには、DDCB#10、DDCB#5、DDCB#3、DDCB#11、DDCB#4、DDCB#30、DDCB#1のDDCBしか存在しないので、DDCB#21のDDCBを空きキューの最後尾に接続する。
【0137】
図13(B)は、更に、DDCB#22、DDCB#23、DDCB#9、及びDDCB8#のDDCBキューが空きキューに遷移した状態を示す。
【0138】
DDCB#22のDDCBを空きキューに接続する前処理として、DDCB#21又はDDCB#23のDDCBをサーチする。空きキューには、DDCB#21のDDCBが存在するので、DDCB#21のDDCBの直後にDDCB#22のDDCBを接続して、空きキューを形成する。
【0139】
DDCB#23のDDCBを空きキューに接続する前処理として、DDCB#22又はDDCB#24のDDCBをサーチする。空きキューには、DDCB#22のDDCBが存在するので、DDCB#22のDDCBの直後にDDCB#23のDDCBを接続して、空きキューを形成する。
【0140】
DDCB#9のDDCBを空きキューに接続する前処理として、DDCB#8又はDDCB#10のDDCBをサーチする。空きキューには、DDCB#10のDDCBが存在するので、DDCB#10のDDCBの直前にDDCB#9のDDCBを接続して、空きキューを形成する。
【0141】
DDCB#8のDDCBを空きキューに接続する前処理として、DDCB#7又はDDCB#9のDDCBをサーチする。空きキューには、DDCB#9のDDCBが存在するので、DDCB#9のDDCBの直前にDDCB#8のDDCBを接続して、空きキューを形成する。
【0142】
図13(C)は、更に、DDCB#20、及びDDCB#19のDDCBキューが空きキューに遷移した状態を示す。
【0143】
DDCB#20のDDCBを空きキューに接続する前処理として、DDCB#19又はDDCB#21のDDCBをサーチする。空きキューには、DDCB#21のDDCBが存在するので、DDCB#21のDDCBの直前にDDCB#20のDDCBを接続して、空きキューを形成する。
【0144】
DDCB#19のDDCBを空きキューに接続する前処理として、DDCB#18又はDDCB#20のDDCBをサーチする。空きキューには、DDCB#20のDDCBが存在するので、DDCB#20のDDCBの直前にDDCB#19のDDCBを接続して、空きキューを形成する。
【0145】
図13(C)に示すように、空きキューを構成する複数のDDCBのうち一部のDDCBの並びはシーケンシャルになっている。複数のDDCBがシーケンシャルに連続していると、プールVOL620へのディスクアクセス時におけるシークタイムが短くなり、高速アクセスを実現できる。
【0146】
上述のアルゴリズムでは、空きキューの全てにおいて、DDCBの並びがシーケンシャルになるとは限らない。そこで、上述のアルゴリズムを適用せずに、空きキューの全てにおいて、DDCBの並びがシーケンシャルになるようなアルゴリズムを適用してもよい。
【0147】
上述の説明では、プールVOL620を管理するDDCBキューについて例示したが、プールVOL720を管理するDDCBキューについても同様に適用できる。特に、プールVOL620に退避されるデータは、スプリット時点におけるプライマリVOL600のデータを更新したデータであって、且つセカンダリVOL700へ転送されていないデータに制限できるものの、プールVOL720は、セカンダリVOL700をリストアするために使用されるものであるから、プールVOL720に退避されるデータに制限はない。しかも、プールVOL720は、データが書き込まれる順序とデータが削除される順序が異なるので、プールVOL720を管理するDDCBキューの並びが無秩序となる。そこで、プールVOL720を管理するDDCBキューのキュー管理方法として、上述の方法を適用すれば、プールVOL720にシーケンシャルアクセスできる。副記憶制御装置50がRAIDレベル5又は6でRAID管理している場合には、パリティ生成のオーバーヘッドが大幅に減るので、その効果は大きい。
【0148】
次に、図14乃至図17を参照しながら、正副を切り替える処理の流れについて説明する。正副切り替え処理は、例えば、正ホストシステム100又は正記憶制御装置20に障害が生じたことを契機として、実行される。正副切り替え処理は、副ホストシステム110から記憶制御装置30へ正副切り替えコマンドが送信されることにより、実行される。正副切り替えコマンドは、単一のコマンドによって構成することもできるが、本実施形態では、二つのコマンド(SVOL-takeoverコマンド、及びSwap-takeoverコマンド)によって構成される例を示す。SVOL-takeoverコマンドは、正副切り替えの前処理として、プライマリVOL600からセカンダリVOL700への未転送データを処理するためのコマンドである。Swap-takeoverコマンドは、旧プライマリVOLを新セカンダリVOLに、旧セカンダリVOLを新プライマリVOLに切り替えるためのコマンドである。
【0149】
尚、図14乃至図17において、「TCA」は、プライマリVOL600とセカンダリVOL700との間のペアを称する。「TCB」は、バーチャルVOL610とセカンダリVOL700との間のペアを称する。「QS」は、プライマリVOL600とバーチャルVOL610との間のペア、又はセカンダリVOL700とバーチャルVOL710との間のペアを称する。
【0150】
まず、図14及び図15を参照しながら、プライマリVOL600へのライトアクセスがない状態で正副を切り替える処理の流れについて説明する。
【0151】
図14(A)は、副記憶制御装置50が副ホストシステム110からSVOL-takeoverコマンドを受信した時点での各ボリュームのペア状態を示す。プライマリVOL600とセカンダリVOL700との間のペア状態は「PAIR」、バーチャルVOL610とセカンダリVOL700との間のペア状態は「PAIR」、プライマリVOL600とバーチャルVOL610との間のペア状態は「PSUS」、セカンダリVOL700とバーチャルVOL710との間のペア状態は「PSUS」である。
【0152】
図14(B)に示すように、副記憶制御装置50は、SVOL-takeoverコマンドを受信すると、正記憶制御装置20にSSWSコマンドを送信する。SSWSコマンドとは、プライマリVOL600からセカンダリVOL700への未転送データがあるか否かを正記憶制御装置20に問い合わせ、未転送データがある場合には、その未転送データを副記憶制御装置50に転送することを要求するコマンドである。各ボリューム間のペア状態に変化はない。
【0153】
図14(C)に示すように、正記憶制御装置20は、副記憶制御装置50からSSWSコマンドを受信すると、プライマリVOL600とバーチャルVOL610との間のペア状態を「PSUS」→「PAIR」→「PSUS」に変更するとともに、バーチャルVOL610とセカンダリVOL700との間のペア状態を「PAIR」→「PSUS」→「PAIR」に変更することにより、バーチャルVOL610内のデータがその時点(プライマリVOL600とバーチャルVOL610との間のペア状態が「PSUS」に変更された時点)のプライマリVOL600のデータで更新され、更新前後の差分データがバーチャルVOL610からセカンダリVOL700へ転送される。
【0154】
図14(D)に示すように、バーチャルVOL610からセカンダリVOL700への差分データ転送が完了すると、ストレージシステム10は、バーチャルVOL610とセカンダリVOL700との間のペア状態を「PAIR」から「SSWS」に変更するとともに、バーチャルVOL710のボリューム状態を「SMPL」に変更する。「SMPL」は、どのボリュームとも正副関係のない状態を示す。
【0155】
図14(E)に示すように、ストレージシステム10は、セカンダリVOL700の状態を「SSWS」に変更する。「SSWS」は、セカンダリVOL700がリード/ライト可能な状態を示す。この状態では、セカンダリVOL700のデータは、前回の確定内容にリストアされる。
【0156】
図15(A)に示すように、憶制御装置50が副ホストシステム110からSwap-takeoverコマンドを受信すると、副記憶制御装置50は、旧セカンダリVOL700を新プライマリVOL700Aに切り替えるとともに、旧プライマリVOL600を新セカンダリVOL600Aに切り替える処理(正副切り替え処理)を実行する。このとき、仮に正記憶制御装置20がバーチャルVOL610内のスナップショットを用いて、新プライマリVOL600Aのデータをリストアしている場合には、そのリストアが完了するのを持って、図15(B)の状態に遷移する。
【0157】
図15(B)に示すように、新セカンダリVOL600AとバーチャルVOL610との間のペア状態が「SMPL」に変更されるとともに、新プライマリVOL700AとバーチャルVOL610との間のペア状態が「SMPL」に変更される。
【0158】
図15(C)に示すように、正記憶制御装置20から副記憶制御装置50へ転送差分ビットマップテーブル510が転送され、転送差分ビットマップテーブル510が転送差分ビットマップテーブル520にマージされる。
【0159】
図15(D)に示すように、転送差分ビットマップテーブル520に基づいて、副記憶制御装置50が新セカンダリVOL600Aに差分データを書き込む処理(初期コピー)が実行される。
【0160】
図15(E)は、初期コピー完了後の各ボリュームのペア状態を示す。旧プライマリVOL600用のバーチャルVOL610は、新セカンダリVOL600A用のバーチャルVOL610Aに切り替えられとともに、旧セカンダリVOL700用のバーチャルVOL710は、新プライマリVOL700A用のバーチャルVOL710Aに切り替えられる。新プライマリVOL700Aと新セカンダリVOL600Aとの間のペア状態は「PAIR」になり、新セカンダリVOL600AとバーチャルVOL710Aとの間のペア状態は「PAIR」になる。副記憶制御装置50は、副ホストシステム110からのライトアクセスを受け付けることができる。
【0161】
次に、図16を参照しながら、プライマリVOL600へのライトアクセスがある状態で正副を切り替える処理の流れについて説明する。
【0162】
図16(A)は、副記憶制御装置50が副ホストシステム110からSVOL-takeoverコマンドを受信した時点での各ボリュームのペア状態を示す。プライマリVOL600とセカンダリVOL700との間のペア状態は「PAIR」、バーチャルVOL610とセカンダリVOL700との間のペア状態は「PAIR」、プライマリVOL600とバーチャルVOL610との間のペア状態は「PSUS」、セカンダリVOL700とバーチャルVOL710との間のペア状態は「PSUS」である。
【0163】
図16(B)に示すように、副記憶制御装置50は、SVOL-takeoverコマンドを受信すると、正記憶制御装置20にSSWSコマンドを送信する。各ボリューム間のペア状態に変化はない。
【0164】
図16(C)に示すように、正記憶制御装置20は、副記憶制御装置50からSSWSコマンドを受信すると、プライマリVOL600とバーチャルVOL610との間のペア状態を「PSUS」→「PAIR」→「PSUS」に変更するとともに、バーチャルVOL610とセカンダリVOL700との間のペア状態を「PAIR」→「PSUS」→「PAIR」に変更することにより、バーチャルVOL610内のデータがその時点(プライマリVOL600とバーチャルVOL610との間のペア状態が「PSUS」に変更された時点)のプライマリVOL600のデータで更新され、更新前後の差分データがバーチャルVOL610からセカンダリVOL700へ転送される。
【0165】
図16(D)に示すように、正記憶制御装置20は、正ホストシステム100からライトアクセスを受けると、PVOL600のデータ更新位置に対応する差分ビットマップテーブル310のビットをオンにする。プライマリVOL600とセカンダリVOL700との間のペア状態は「PSUS」である。正ホストシステム100からのライトアクセスによるプライマリVOL600のデータ更新については、正記憶制御装置20は、プライマリVOL600のデータ更新位置を差分ビットマップテーブル310で追跡するのみで、スナップショットの作成は行わない。
【0166】
図16(E)に示すように、バーチャルVOL610からセカンダリVOL700への差分データ転送が完了すると、ストレージシステム10は、バーチャルVOL610とセカンダリVOL700との間のペア状態を「PAIR」から「SSWS」に変更するとともに、バーチャルVOL710のボリューム状態を「SMPL」に変更する。
【0167】
図16(F)に示すように、ストレージシステム10は、セカンダリVOL700の状態を「SSWS」に変更する。「SSWS」は、セカンダリVOL700がリード/ライト可能な状態を示す。この状態では、セカンダリVOL700のデータは、前回の確定内容にリストアされる。
【0168】
その後、正副切り替え処理は、図15に示す処理に移行する。図15に示す処理の詳細については、既述してあるので、ここでの説明は省略する。
【0169】
次に、図17を参照しながら、正記憶制御装置20の状態が不明の状態で正副を切り替える処理の流れについて説明する。
【0170】
図17(A)は、副記憶制御装置50が副ホストシステム110からSVOL-takeoverコマンドを受信した時点での各ボリュームのペア状態を示す。
【0171】
図17(B)に示すように、副記憶制御装置50は、SVOL-takeoverコマンドを受信すると、正記憶制御装置20にSSWSコマンドを送信する。ところが、正記憶制御装置20は、障害等が生じているので、SSWSコマンドに対する応答が返ってこないまま、タイムアウトになる。
【0172】
図17(C)に示すように、副記憶制御装置50は、バーチャルVOL710に論理的に保持されているスナップショットを用いてセカンダリVOL700のデータをリストアする。セカンダリVOL700は、最新のスナップショットを取得した時刻におけるデータイメージにまで復元できる。副記憶制御装置50は、セカンダリVOL700の状態を「SSWS」に変更する。
【0173】
図17(D)に示すように、副記憶制御装置50は、バーチャルVOL710の状態を「SMPL」に変更する。
【0174】
正ホストシステム100又は正記憶制御装置20に障害が生じた場合に、上述した正副切り替え処理を実行することにより、副ホストシステム110及び副記憶制御装置50を稼働系システムとして運用することができる。
【図面の簡単な説明】
【0175】
【図1】本実施形態に係るストレージシステムのシステム構成図である。
【図2】各種マイクロプログラム及びボリューム管理テーブルの説明図である。
【図3】ボリューム管理テーブルの説明図である。
【図4】非同期リモートコピーの処理概要を示す説明図である。
【図5】非同期リモートコピーの処理シーケンスを示す説明図である。
【図6】スナップショット更新処理の概要を示す説明図である。
【図7】差分ビットマップテーブルの詳細構成図である。
【図8】マージ処理の概要を示す説明図である。
【図9】非同期リモートコピーのフローチャートを示す説明図である。
【図10】PVOLとプールグループとの対応関係を示す説明図である。
【図11】プールグループ−PVOL対応テーブルの説明図である。
【図12】差分データ制御ブロックのキュー管理の概要を示す説明図である。
【図13】差分データ制御ブロックのキュー管理の概要を示す説明図である。
【図14】プライマリVOLへのライトアクセスがない場合のSVOL-takeovber処理を示す説明図である。
【図15】Swap-Takeover処理を示す説明図である。
【図16】プライマリVOLへのライトアクセスがある場合のSVOL-takeovber処理を示す説明図である。
【図17】正記憶制御装置に障害が生じている場合のSVOL-takeovber処理を示す説明図である。
【符号の説明】
【0176】
10…ストレージシステム 20…正記憶制御装置 50…副記憶制御装置 300,400…スナップショット管理情報 310,410A、410B…差分ビットマップテーブル 510,520…転送差分ビットマップテーブル 600…PVOL 700…SVOL 610,710…バーチャルVOL 620,720…プールVOL
【技術分野】
【0001】
本発明はストレージシステム及びその制御方法に関する。
【背景技術】
【0002】
データセンタのような大規模なデータを取り扱うデータベースシステムでは、ホストシステムとは別に構成されたストレージシステムを用いてデータを管理する。このようなストレージシステムとして、例えば、ディスクアレイシステムが知られている。ディスクアレイシステムは、アレイ状に配列された多数のディスクドライブをRAID(Redundant Array of Independent Inexpensive Disks)管理する。多数のディスクドライブが提供する物理的な記憶領域上には、少なくとも1つ以上の論理ユニットが形成され、この論理ユニットがホストシステムに提供される。ホストシステムは、論理ユニットを一つの物理的なデバイスとして認識し、論理ユニットへのデータアクセスを行う。
【0003】
この種のストレージシステムでは、災害等に備えてデータを確実に保護するための措置が講じられている。例えば、特開2005−293469号公報には、正記憶制御装置に書き込まれるデータを副記憶制御装置にリモートコピーし、データを二重化することで、耐障害性を高めるシステムが開示されている。
【特許文献1】特開2005−293469号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
ところで、正記憶制御装置へのデータ入出力を要求するホストシステムに障害が生じたり、或いは正記憶制御装置とホストシステムの両方に障害が生じたりすると、記憶制御装置の正副を切り替えて、運用を継続する必要がある。非同期リモートコピーにより、正記憶制御装置から副記憶制御装置にデータが転送される場合には、正副切り替え時点で、正記憶制御装置から副記憶制御装置に未だ転送されていない未転送データが存在する場合も想定されるので、副記憶制御装置のデータをできるだけ新しいものにするには、未転送データを適切に処理する必要がある。更に、ホストシステムに障害が生じると、正副切り替え処理の最中にも正記憶制御装置にライトアクセスが要求される場合も想定されるので、このようなライトアクセスを適切に処理する必要もある。
【0005】
そこで、本発明は、システム障害時における記憶制御装置の正副切り替え処理を適切に行うことを課題とする。本発明の更なる目的は、後述する実施の形態の記載から明らかになるであろう。
【課題を解決するための手段】
【0006】
上記の課題を解決するため、本発明のストレージシステムは、第一の論理ボリュームを有する正記憶制御装置と、第一の論理ボリュームとコピーペアを形成可能な第二の論理ボリュームを有する副記憶制御装置とを備える。
【0007】
正記憶制御装置は、ホストアクセスによる第一の論理ボリュームの更新位置を管理する第一の差分ビットマップテーブルと、第一の論理ボリュームのデータイメージを論理的に復元するための第一のスナップショット管理情報と、ホストアクセスによって更新される前のデータであって、且つ第一の論理ボリュームに書かれていたデータである更新前データを格納する第一のプール領域と、所定のタイミング以降に第一の論理ボリュームが更新されるときに更新前データを第一のプール領域に書き込む第一の書き込み手段と、所定のタイミング以降に第一の論理ボリュームが更新されると、第一のスナップショット管理情報を所定のタイミングの時点における第一の論理ボリュームのデータイメージを論理的に復元するための情報に更新する第一のスナップショット更新手段と、第一の論理ボリュームの更新データが第二の論理ボリュームにリモートコピーされたか否かを管理する第一の転送差分ビットマップテーブルと、第一の差分ビットマップテーブルのビット情報を第一の転送差分ビットマップテーブルにマージすることにより第一の転送差分ビットマップテーブルを更新する転送ビットマップテーブル更新手段と、更新された第一の転送差分ビットマップテーブルに基づいて、所定のタイミングの時点における第一の論理ボリュームのデータイメージを構成する各データが第一の論理ボリュームと第一のプール領域の何れに存在するのかを判別し、判別された方からデータを取得して第二の論理ボリュームに送信するリモートコピー手段と、を備える。
【0008】
副記憶制御装置は、リモートコピーによる第二の論理ボリュームの更新位置を管理する第二の転送差分ビットマップテーブルと、第二の論理ボリュームのデータイメージを論理的に復元するための第二のスナップショット管理情報と、リモートコピーによって更新される前のデータであって、且つ第二の論理ボリュームに書かれていたデータである更新前データを格納する第二のプール領域と、リモートコピーによって第二の論理ボリュームが更新されるときに更新前データを前記プール領域に書き込む第二の書き込み手段と、第二の論理ボリュームが更新されると第二のスナップショット管理情報を所定のタイミングの時点における第二の論理ボリュームのデータイメージを論理的に復元する情報に更新する第二のスナップショット更新手段と、を備える。
【0009】
副記憶制御装置は、ホストシステムから正副切り替えコマンドを受信すると、正記憶制御装置から副記憶制御装置にリモートコピーされていない未転送データが存在するか否かを正記憶制御装置に問い合せ、未転送データが存在する場合に、正記憶制御装置から未転送データを受信し、第二の論理ボリュームを更新する。
【0010】
正記憶制御装置は、副記憶制御装置が正副切り替えコマンドを受信した時点以降における、第一の論理ボリュームへのホストアクセスによる第一の論理ボリュームの更新位置を第一の差分ビットマップテーブルにより管理する。
【0011】
副記憶制御装置は、未転送データの問い合わせに対する正記憶制御装置からの応答がない場合には、第二のスナップショット管理情報に基づいて、過去のある時点における第二の論理ボリュームのデータイメージを復元する。
【発明の効果】
【0012】
本発明によれば、システム障害時における記憶制御装置の正副切り替え処理を適切に行うことができる。
【発明を実施するための最良の形態】
【0013】
以下、各図を参照しながら本発明の実施形態について説明する。
図1は本実施形態に係るストレージシステム10のシステム構成を示す。ストレージシステム10は、ローカルサイトに設置されている正記憶制御装置20と、リモートサイトに設置されている副記憶制御装置50とを備える。正記憶制御装置20、副記憶制御装置50、正ホストシステム100、及び副ホストシステム110は、SAN(Storage Area Network)120を介して相互に接続されている。
【0014】
正ホストシステム100は、常用系のホストシステムであり、主として、システムが正常なときに、正記憶制御装置20にI/O処理を要求する。副ホストシステム110は、待機系のホストシステムであり、主として、システムに障害が発生したときに、副記憶制御装置50にI/O処理を要求し、障害発生時に正ホストシステム100が行っていた処理を引き継ぐ。正ホストシステム100、及び副ホストシステム110は、例えば、パーソナルコンピュータ、ワークステーション、メインフレームコンピュータ等である。
【0015】
ストレージシステム10は、正記憶制御装置20に書き込まれたデータが副記憶制御装置50にリモートコピーされるように構成されている。副記憶制御装置50は、正記憶制御装置20が過去に保持していたデータイメージと同一のデータイメージを保持する。これにより、正記憶制御装置20に障害が生じた場合でも、副記憶制御装置50を用いて、システムを稼動させることができる。リモートコピー方式としては、正記憶制御装置20と副記憶制御装置50との両方にデータを書き込んだことを条件として、正ホストシステム100にライト完了を報告する同期コピーでもよく、或いは正記憶制御装置20にデータが書き込まれた段階で、正ホストシステム100にライト完了を報告し、適当な時期にそのデータを副記憶制御装置50に転送する非同期コピーでもよい。以下の説明では、正記憶制御装置20を稼働系の正記憶制御装置として運用し、副記憶制御装置50を待機系の副記憶制御装置として運用する例を示す。
【0016】
正記憶制御装置20は、主に、コントローラ30と、記憶装置40とを備える。
【0017】
コントローラ30は、LAN(Local Area Network)インターフェース31、フロントエンドインターフェース32、CPU33、データ転送コントローラ34、キャッシュメモリ35、ローカルメモリ36、及びバックエンドインターフェース37を備える。
【0018】
コントローラ30は、複数のディスクドライブ41をいわゆるRAID方式に規定されるRAIDレベル(例えば、0,1,5)で制御することができる。RAID方式においては、複数のディスクドライブ41が一つのRAIDグループとして管理される。RAIDグループ上には、正ホストシステム100からのアクセス単位である複数の論理ボリューム42が定義されている。それぞれの論理ボリューム42には、LUN(Logical Unit Number)がアサインされる。
【0019】
CPU33は、正ホストシステム100からのデータ入出力要求に応答して、複数のディスクドライブ41へのI/O処理(ライトアクセス、又はリードアクセス)を制御するプロセッサである。
【0020】
ローカルメモリ36には、各種マイクロプログラム、及びボリューム管理テーブルなどが格納されている。各種マイクロプログラム、及びボリューム管理テーブルの詳細については、後述する。
【0021】
キャッシュメモリ35は、ディスクドライブ41に書き込むためのライトデータ、又はディスクドライブ41から読み出したリードデータを一時的に格納するバッファメモリである。キャッシュメモリ35は、電源バックアップされており、正記憶制御装置20に電源障害が発生した場合でも、キャッシュデータのロストを防ぐ不揮発性メモリとして構成されている。
【0022】
データ転送コントローラ34は、キャッシュメモリ35、フロントエンドインターフェース32、バックエンドインターフェース37、及びCPU33を相互に接続し、正ホストシステム100とディスクドライブ41との間のデータ転送を制御する。正ホストシステム100からのライトアクセスが要求されると、データ転送コントローラ34は、フロントエンドインターフェース32を介して正ホストシステム100から受け取ったデータをキャッシュメモリ35に書き込み、その後、そのライトデータをディスクドライブ41へ非同期書き込みすることを目的として、そのライトデータをバックエンドインターフェース37へ転送する。また、正ホストシステム100からのリードアクセスが要求されると、バックエンドインターフェース37を介してディスクドライブ41から読みとったリードデータをキャッシュメモリ35に書き込むとともに、フロントエンドインターフェース32にそのリードデータを転送する。
【0023】
フロントエンドインターフェース32は、正ホストシステム100とのインターフェースを制御するコントローラであり、例えば、ファイバチャネルプロトコルに基づく正ホストシステム100からのブロックアクセス要求を受信する機能を有する。
【0024】
バックエンドインターフェース37は、ディスクドライブ41とのインターフェースを制御するコントローラであり、例えば、ディスクドライブ41を制御するプロトコルに基づくディスクドライブ41へのデータ入出力要求を制御する機能を有する。
【0025】
LANインターフェース31は、LAN90に接続するインターフェースであり、TCP/IPに基づいて管理端末80との間でデータ及び制御信号の送受信を制御する。
【0026】
記憶装置40は、複数のディスクドライブ41を備える。ディスクドライブ41は、FC(Fibre Channel)ディスクドライブ、SATA(Serial Advanced Technology Attachment)ディスクドライブ、PATA(Parallel Advanced Technology Attachment)ディスクドライブ、FATA(Fibre Attached Technology Adapted)ディスクドライブ、SAS(Serial Attached SCSI)ディスクドライブ或いはSCSI(Small Computer System Interface)ディスクドライブ等のストレージデバイスである。
【0027】
正記憶制御装置20は、LAN(Local Area Network)90を介して管理端末80に接続されている。管理端末80は、例えば、CPU、メモリ及びディスプレイ等のハードウェア資源を備えるコンピュータシステムである。システム管理者は、管理端末80を入力操作することにより、正記憶制御装置20を管理するためのコマンドを正記憶制御装置20に送信する。正記憶制御装置20を管理するためのコマンドとして、例えば、ディスクドライブ41の増設或いは減設、又はRAID構成の変更を指示するためのコマンド、正ホストシステム100と正記憶制御装置20との間の通信パスを設定するためのコマンド、CPU33のマイクロプログラムをメモリ26にインストールするためのコマンド、正記憶制御装置20の動作状態の確認や故障部位を特定するためのコマンド等がある。
【0028】
副記憶制御装置50は、主に、コントローラ60と、記憶装置70とを備える。
【0029】
コントローラ60の詳細構成は、上述したコントローラ30の詳細構成と同様である。記憶装置70は、複数のディスクドライブ71を備える。コントローラ60は、複数のディスクドライブ71をいわゆるRAID方式に規定されるRAIDレベル(例えば、0,1,5)で制御することができる。RAID方式においては、複数のディスクドライブ71が一つのRAIDグループとして管理される。RAIDグループ上には、副ホストシステム110からのアクセス単位である複数の論理ボリューム72が定義されている。それぞれの論理ボリューム72には、LUN(Logical Unit Number)がアサインされる。
【0030】
図2は各種マイクロプログラム及びボリューム管理テーブルを示す。
【0031】
ローカルメモリ36は、内部コピー実行プログラム200、リモートコピー実行プログラム210、制御プログラム220、及びボリューム管理テーブル230を格納する。内部コピー実行プログラム220は、内部コピー処理、及びスナップショット更新処理を実行する。リモートコピー実行プログラム210は、リモートコピーを実行する。制御プログラム220は、内部コピー実行プログラム200、及びリモートコピー実行プログラム210を制御する。ボリューム管理テーブル230は、複数の論理ボリューム42に関する情報を格納する。
【0032】
図3はボリューム管理テーブル230のテーブル構造を示す。
【0033】
ボリューム管理テーブル230には、複数の論理ボリューム42の各々について、論理ボリューム(以下、「VOL」と略記することがある。)を識別するためのVOL−IDと、その論理ボリュームへのアクセスパスを示すパス情報と、その論理ボリュームの種類(以下、「VOL種類」と記す。)と、その論理ボリュームがプールVOLであるか否かを示すフラグ(以下、「プールVOL」フラグと記す。)と、その論理ボリュームを含んだVOLペアに関する情報(以下、「ペア情報」と記す。)と、が対応付けられて格納される。ボリューム管理テーブル230に格納される情報のうちの少なくとも一つの情報要素(例えば、VOL−ID、VOL種類、プールVOLフラグ)は、管理端末80又は正ホストシステム100などから入力できる。
【0034】
VOL種類としては、例えば、「プライマリ」、「セカンダリ」、「プール」がある。「プライマリ」という種類のVOL(以下、「プライマリVOL」又は「PVOL」と記す。)は、コピー処理(例えば、リモートコピー処理)において、コピー元となるVOLである。「セカンダリ」という種類のVOL(以下、「セカンダリVOL」又は「SVOL」と記す。)は、コピー処理(例えば、リモートコピー処理)において、コピー先となるVOLである。セカンダリVOLは、少なくともプライマリVOLの容量以上の記憶容量を有する。プライマリVOLもセカンダリVOLも、パス情報は定義されている。但し、「プール」という種類のVOL(以下、「プールVOL」と記す。)は、パス情報が未定義である。プールVOLの詳細については、後述する。
【0035】
プールVOLフラグは、それに対応する論理ボリュームがプールVOLであるか否かを示す。具体的には、例えば、プールVOLフラグが「1」であれば、それに対応する論理ボリュームは、プールVOLであり、プールVOLフラグが「0」であれば、それに対応する論理ボリュームは、プールVOLでない。
【0036】
ペア情報には、例えば、ペア相手情報、及びペア状態が含まれている。ペア相手情報には、例えば、ペア相手となる論理ボリューム(以下、ペア相手VOL)に関する情報として、ペア相手VOLを有する記憶制御装置のID、ペア相手VOLのVOL−ID、及びパス情報などがある。ペア状態としては、例えば、「SMPL」、「COPY」、「PAIR」、「PSUS」、「SPLIT」、「SSWS」などがある。
【0037】
「SMPL」とは、ペア生成前の正副関係のない状態を示す。
【0038】
「COPY」は、プライマリVOLのデータをセカンダリVOLにコピーする形成コピー中の状態を示す。「COPY」では、セカンダリVOLへのライトは禁止される。
【0039】
「PAIR」は、プライマリVOLからセカンダリVOLへ非同期コピーを行っている状態を示す。「PAIR」では、セカンダリVOLへのライトは禁止される。
【0040】
「PSUS」は、プライマリVOLからセカンダリVOLへ非同期コピーを停止している状態を示す。「PSUS」では、セカンダリVOLへのリード/ライトは禁止される。
【0041】
「SPLIT」は、プライマリVOLとセカンダリVOLとを論理的に分離して、プライマリVOLの更新前後の差分データのみをセカンダリVOLにコピーする状態を示す。
【0042】
「SSWS」は、セカンダリVOLがリード/ライト可能な状態を示す。「SSWS」では、セカンダリVOLのデータは、前回の確定内容にリストアされ、プライマリVOLは、「PSUS」に遷移する。
【0043】
CPU33は、ボリューム管理テーブル230を参照することにより、アクセスすべき論理ボリューム42の種類、及びペア情報を特定することができる。また、CPU33は、プールVOLが後述のバーチャルVOLに割りアサインされた場合には、そのプールVOLへのパスを表す情報を定義し、定義されたパス情報をボリューム管理テーブル230に登録することができる。また、CPU33は、アサインされなくなったプールVOLについてのパス情報を消去することにより、プールVOLを未使用状態にすることができる。CPU33は、各プールVOLについて、パス情報が登録されているか否かにより、各プールVOLが使用中であるか、或いは未使用状態であるかを判別することができる。
【0044】
図4は正記憶制御装置20が実行する非同期リモートコピーの処理概要を示す。
【0045】
正記憶制御装置20は、CPU33、キャッシュメモリ35、プライマリVOL600、バーチャルVOL610、複数のプールVOL620、スナップショット管理情報300、及び転送差分ビットマップテーブル510を備える。
【0046】
プールVOL620は、プライマリVOL600とバーチャルVOL610とのペア状態がスプリットされた時点以降にプライマリVOL600のデータイメージが更新されたときに、更新前後の差分データを退避させるための論理ボリュームである。
【0047】
バーチャルVOL610は、ある時刻にプライマリVOL600に格納されているデータと、ある時刻以降にプライマリVOL600からプールVOL620に退避されたデータとから、ある時刻におけるプライマリVOL600のデータイメージを復元するための仮想的な論理ボリュームである。バーチャルVOL610は、プライマリVOL600のスナップショットを論理的に保持することができる。本明細書では、過去のある時点におけるプライマリVOL600のデータイメージを論理的にバーチャルVOL610上に復元する処理(即ち、スナップショットを作成する処理)を「内部コピー」と称する。バーチャルVOL610は、プライマリVOL600又はセカンダリVOL700とペアを形成することができる。本実施形態では、バーチャルVOL610は、キャッシュメモリ35の記憶領域に形成される場合を例示するが、ディスクドライブ41の記憶領域に形成されていてもよい。説明の便宜上、バーチャルVOL610をP_VVOLと略記する場合がある。
【0048】
CPU33は、バーチャルVOL610に、複数のプールVOL620の中から一以上のプールVOL620(例えば、どのVOLにも対応付けられていない未使用のプールVOL)を選択し、選択された一以上のプールVOL620をバーチャルVOL610にアサインできる。CPU33は、バーチャルVOL610にアサインされるプールVOL620の数を、記憶資源の消費状況に応じて、適宜に増減することができる。
【0049】
スナップショット管理情報300は、ある時刻におけるプライマリVOL600のデータイメージを、スナップショットを用いて復元するための情報である。CPU33は、スナップショット管理情報300を参照することにより、ある時刻におけるプライマリVOL600のデータイメージを構成する各データがプールVOL620に存在するのか、或いはプライマリVOL600に存在するのかを判別し、判別された方からデータを取得することにより、ある時刻におけるプライマリVOL600のデータイメージをバーチャルVOL610に復元できる。スナップショット管理情報300は、プライマリVOL600のデータ更新位置を示す差分ビットマップテーブル310を含む。
【0050】
転送差分ビットマップテーブル510は、プライマリVOL600とセカンダリVOL700とが同期した後において、プライマリVOL600のデータが更新されたときに、セカンダリVOL700にリモートコピーされるべき差分データの位置を示す。
【0051】
CPU33は、プライマリVOL600とバーチャルVOL610との間のペア状態をコピー状態にすることができる。ライマリVOL600とバーチャルVOL610との間のペア状態がコピー状態になっているときに、プライマリVOL600にデータが書き込まれると、CPU33は、そのデータをバーチャルVOL610又はプールVOL620に書き込む。
【0052】
CPU33は、プライマリVOL600とバーチャルVOL610との間のペア状態をスプリット状態にすることができる。ライマリVOL600とバーチャルVOL610との間のペア状態がスプリット状態になっているときに、プライマリVOL600にデータが書き込まれると、CPU33は、内部コピープログラム200を動作させて、内部コピー処理及びスナップショット更新処理を実行する。
【0053】
副記憶制御装置50は、CPU63、キャッシュメモリ65、セカンダリVOL700、複数のバーチャルVOL710A,710B、複数のプールVOL720、スナップショット管理情報400、及び転送差分ビットマップテーブル520を備える。
【0054】
プールVOL720は、セカンダリVOL700とバーチャルVOL710A又はバーチャルVOL710Bとのペア状態がスプリットされた時点以降にセカンダリVOL700のデータイメージが更新されたときに、更新前後の差分データを退避させるための論理ボリュームである。
【0055】
バーチャルVOL710A,710Bは、ある時刻にセカンダリVOL700に格納されているデータと、ある時刻以降にセカンダリVOL700からプールVOL720に退避されたデータとから、ある時刻におけるセカンダリVOL700のデータイメージを復元するための仮想的な論理ボリュームである。バーチャルVOL710A,710Bは、セカンダリVOL700のスナップショットを論理的に保持することができる。本実施形態では、バーチャルVOL710A,710Bは、キャッシュメモリ65の記憶領域に形成される場合を例示するが、ディスクドライブ71の記憶領域に形成されていてもよい。説明の便宜上、バーチャルVOL710A,710BをS_VVOLと略記する場合がある。
【0056】
スナップショット管理情報400は、ある時刻におけるセカンダリVOL700のデータイメージを、スナップショットを用いて復元するための情報である。CPU63は、スナップショット管理情報400を参照することにより、ある時刻におけるセカンダリVOL700のデータイメージを構成する各データがプールVOL720に存在するのか、或いはセカンダリVOL700に存在するのかを判別し、判別された方からデータを取得することにより、ある時刻におけるセカンダリVOL700のデータイメージをバーチャルVOL710A,710Bに復元できる。スナップショット管理情報400は、セカンダリVOL700のデータ更新位置を示す差分ビットマップテーブル410A,410Bを含む。
【0057】
転送差分ビットマップテーブル520は、プライマリVOL600とセカンダリVOL700とが同期した後において、プライマリVOL600のデータが更新されたときに、リモートコピーによりセカンダリVOL700のデータが更新された位置を示す。
【0058】
次に、内部コピー処理、スナップショット更新処理、及びリモートコピー処理の詳細について説明を加える。以降の説明では、プライマリVOL600とバーチャルVOL610との間のペア状態がスプリット状態にあることを前提とする。
【0059】
正記憶制御装置20は、正ホストシステム100からライトアクセス要求を受けると(S101)、ライトデータをキャッシュメモリ35に格納し(S102)、ライト完了を正ホストシステム100に報告する(S103)。
【0060】
CPU33は、キャッシュメモリ35に書き込まれたライトデータを読み出し、プライマリVOL600に書き込む(S104)。このとき、CPU33は、更新前データ(ライトデータによって更新(上書き)される前のデータであって、且つプライマリVOL600に書かれていた過去のデータ)をプライマリVOL600からプールVOL620に移動させる(S105)。
【0061】
プライマリVOL600とバーチャルVOL610との間のペア状態がスプリット状態にあるときに、内部コピーを実行すると、ある時刻におけるプライマリVOL600のデータイメージを構成する各データは、プライマリVOL600とプールVOL620とに分散される。
【0062】
次に、CPU33は、スナップショット管理情報300を、プライマリVOL600とバーチャルVOL610との間のペア状態がスプリットされた時点(以下、「スプリット時点」と称する。)にプライマリVOL600に格納されているデータと、そのスプリット時点以降にプライマリVOL600からプールVOL620に移動されたデータとから、そのスプリット時点におけるプライマリVOL600のデータイメージを復元するための情報に更新する(S106)。このスナップショット更新処理により、バーチャルVOL610は、ライマリVOL600のスナップショットを論理的に保持することができる。
【0063】
CPU33は、プライマリVOL600とバーチャルVOL610との間のペア状態がスプリット状態にあるときに、正ホストシステム100からライトアクセス要求を受ける都度に、上述したS102〜S106の処理を繰り返し実行する。
【0064】
CPU33は、スプリット時点から所定時間経過後にリモートコピー実行プログラム210を動作させ、リモートコピー処理を実行する。リモートコピー実行プログラム210は、差分ビットマップテーブル310を転送差分ビットマップテーブル510にマージする。そして、リモートコピー実行プログラム210は、転送差分ビットマップテーブル510に基づいて、スプリット時点におけるプライマリVOL600のデータイメージを復元するための各データがプライマリVOL600に存在するのか、或いはプールVOL620に存在するのかを判別し、判別された方からデータを取得してそのデータを副記憶制御装置50に転送する(S107)。このリモートコピー処理により、スプリット時点におけるプライマリVOL600のデータイメージがセカンダリVOL700に復元される。
【0065】
副記憶制御装置50は、正記憶制御装置20からデータを受信すると、正記憶制御装置20にライト完了を報告する(S108)。
【0066】
以後、CPU63は、正記憶制御装置20から受信したデータをセカンダリVOL700に書き込む際に、更新前データ(ライトデータによって更新(上書き)される前のデータであって、且つセカンダリVOL700に書かれていた過去のデータ)をセカンダリVOL700からプールVOL720に移動させる(S109)。
【0067】
更に、CPU63は、スナップショット管理情報400を、スプリット時点にセカンダリVOL700に格納されているデータと、スプリット時点以降にセカンダリVOL700からプールVOL720に移動されたデータとから、スプリット時点におけるセカンダリVOL700のデータイメージを復元するための情報に更新する(S110)。
【0068】
尚、CPU63は、バーチャルVOL710A,710Bを交互に切り替えて使用する。これにより、例えば、CPU63は、バーチャルVOL710AにセカンダリVOL700のスナップショットを論理的に作成しつつ、差分ビットマップテーブル410Bをクリアすることができる。差分ビットマップテーブル410A,410Bをクリアするには、長時間を要する。バーチャルVOL710A,710Bを交互に切り替えて使用することで、スナップショットの作成と、差分ビットマップテーブル410A,410Bのクリアを並行処理できるので、効率がよい。
【0069】
CPU33は、正記憶制御装置20を制御するための手段(例えば、プライマリVOL600の更新前データをプールVOL620に書き込むための書き込み手段、スナップショット管理情報300を更新するスナップショット更新手段、転送差分ビットマップテーブル510を更新する転送差分ビットマップテーブル更新手段、正記憶制御装置20から副記憶制御装置50へ未転送データをリモートコピーするリモートコピー手段など)として機能する。
【0070】
CPU63は、副記憶制御装置50を制御するための手段(例えば、セカンダリVOL700の更新前データをプールVOL720に書き込むための書き込み手段、スナップショット管理情報400を更新するスナップショット更新手段など)として機能する。
【0071】
図5は正記憶制御装置20において実行される非同期リモートコピーの処理シーケンスを示す。
【0072】
時刻t0は、プライマリVOL600とバーチャルVOL610との間のペア状態がスプリットされたスプリット時点を示す。この時刻t0におけるプライマリVOL600のデータイメージを「イメージT0」と称する。イメージT0は、プライマリVOL600の第一のブロック領域にデータブロックAが格納されているデータイメージとする。この時刻t0の時点では、プールVOL620に更新前データは格納されていない。スナップショット管理情報300は、イメージT0を復元するための情報になっている。
【0073】
時刻t1で(つまり、スプリット状態の期間中に)、プライマリVOL600の第一のブロック領域にデータブロックBが上書きされると、プライマリVOL600のデータイメージがイメージT0からイメージT1に変化する。このとき、内部コピー実行プログラム200は、データブロックA(更新前データ)をプライマリVOL600からバーチャルVOL620に書き込み、スナップショット管理情報300を、プライマリVOL600の第一のブロック領域に更新があり、且つその第一のブロック領域に存在していたデータブロックA(更新前データ)がバーチャルVOL620に格納されたことを示す情報に更新する。
【0074】
また、時刻t1で、制御プログラム220がリモートコピー処理の実行をリモートコピー実行プログラム210に命じる。リモートコピー実行プログラム210は、転送差分ビットマップテーブル510を参照することにより、イメージT0を構成するデータブロックAがバーチャルVOL610に存在することを特定し、バーチャルVOL610からデータブロックAを取得し、データブロックAを副記憶制御装置50に送信する。
【0075】
時刻t2は、リモートコピー処理が完了した時点である。この結果、時刻t0の時点でプライマリVOL600に形成されていたイメージT0が、セカンダリVOL700に複製される。
【0076】
また、時刻t2で(つまり、スプリット状態の期間中に)、プライマリVOL600の第二のブロック領域にデータブロックCが書かれると、プライマリVOL600のデータイメージがイメージT1からイメージT2に変化する。このとき、内部コピー実行プログラム200は、スナップショット管理情報300を、プライマリVOL600第二のブロック領域に更新があったことを示す情報に更新する。
【0077】
例えば、時刻t2の後であって時刻t3の前に、プライマリVOL600の第二のブロック領域にデータブロックDが上書きされると、プライマリVOL600のデータイメージがイメージT2からイメージT3(第一のブロック領域にデータブロックBが存在し、第二のブロック領域にデータブロックDが存在するデータイメージ)に変化する。このとき、内部コピー実行プログラム200は、データブロックC(更新前データ)をプライマリVOL600からプールVOL620に移動させ、スナップショット管理情報300を、プライマリVOL600の第二のブロック領域に更新があり、その第二のブロック領域に存在していたデータブロックCがプールVOL620に格納されたことを示す情報に更新する。
【0078】
その後、プライマリVOL600の更新が行われる前に、時刻t3で、再び、プライマリVOL600とバーチャルVOL610とがスプリット状態にされる。
【0079】
この時刻t3の時点で、換言すれば、スプリット状態にされた場合に、CPU33は、その時刻t3におけるプライマリVOL600のイメージT3をバーチャルVOL610に論理的に保持することを目的として、プールVOL620に格納されている全ての更新前データを消去する。
【0080】
また、CPU33は、スナップショット管理情報300を、イメージT0を復元するための情報からイメージT3を復元するための情報に更新する。具体的には、例えば、時刻t3の時点では、プライマリVOL600において、未だ更新が行われていない状態なので、CPU33は、スナップショット管理情報300を、プライマリVOL600で更新が行われていないことを示す情報に更新する。
【0081】
時刻t4の時点でプライマリVOL600の第二のブロック領域にデータブロックEが上書きされると、プライマリVOL600のデータイメージがイメージT3からイメージT4に変化する。このとき、内部コピー実行プログラム200は、データブロックD(更新前データ)をプライマリVOL600からバーチャルVOL610に書き込み、スナップショット管理情報300を、プライマリVOL600の第二のブロック領域で更新があり、且つその第二のブロック領域に存在していたデータブロックDがプールVOL620に移動したことを示す情報に更新する。
【0082】
時刻t4の時点でリモートコピー処理が行われる。リモートコピー実行プログラム210は、転送差分ビットマップテーブル510を参照することにより、プライマリVOL600の第一のブロック領域に更新が無いので、イメージT3を構成するデータブロックBがプライマリVOL600に存在することを把握し、更にプライマリVOL600の第二のブロック領域に更新があったので、イメージT3を構成する別のデータブロックDがプールVOL620に存在することを把握する。リモートコピー実行プログラ210は、プライマリVOL600からデータブロックBを取得し、更にプールVOL620からデータブロックDを取得し、データブロックB及びデータブロックDを副記憶制御装置50に転送する。
【0083】
時刻t5の時点は、リモートコピー処理が完了した時点である。この結果、セカンダリVOL700におけるイメージT0が、時刻t3におけるプライマリVOL600のイメージT3に更新される。つまり、セカンダリVOL700の第一ブロック領域のデータブロックAにデータブロックBが上書きされ、更にセカンダリVOL700の第二のブロック領域にデータブロックDが書き込まれる。
【0084】
尚、これ以降、副記憶制御装置50は、次のスプリット時点t6のイメージT6を構成するデータを受信するまでの期間、イメージT3を保存する。
【0085】
以後、時刻t3乃至時刻t5において実行された上述の処理が繰り返される。
【0086】
つまり、正記憶制御装置20では、定期的に又は不定期的に、プライマリVOL600とバーチャルVOL610とがスプリット状態にされる。そのスプリット状態にされている期間中であって、次にスプリット状態にされる時点までに(換言すれば、内部コピー処理及びスナップショット更新処理に並行して)、リモートコピー処理が実行される。そのリモートコピー処理が完了した時点以降に、再び、プライマリVOL600とバーチャルVOL610とがスプリット状態にされ、プールVOL620から更新前データが消去される。このような処理が繰り返されることにより、定期的に又は不定期的になされたスプリット時点におけるプライマリVOL600のデータイメージ(図5の例では、時刻t0におけるイメージT0、時刻t3におけるイメージT3、時刻t6におけるイメージT6)をバーチャルVOL610に論理的に保持し、そのデータイメージをセカンダリVOL700にコピーできる。
【0087】
図6は本実施形態に係るスナップショット更新処理の概要を示し、より詳細には、プライマリVOL600のデータイメージがイメージT3からイメージT4に変化し、バーチャルVOL610によってイメージT3が論理的に保持される様子を示す。
【0088】
スナップショット管理情報300は、差分ビットマップテーブル310、アドレステーブル320、及び差分データ制御ブロック(Differential Data Control Block)330を含む。
【0089】
差分ビットマップテーブル310は、プライマリVOL600内の複数のブロック領域(例えば、1ブロック領域は64Kバイト)にそれぞれ対応する複数のビットを有する。例えば、イメージT3からイメージT4に変わる場合、図6に示すように、プライマリVOL600の第一のブロック領域は、更新されないので、その第一のブロック領域に対応するビットは「0」のままであり、第二のブロック領域のデータブロックDにデータブロックDが上書きされるので、その第二のブロック領域に対応するビットが「0」から「1」に更新される。
【0090】
アドレステーブル320は、プライマリVOL600の複数のブロック領域にそれぞれ対応したアドレス領域を有する。あるブロック領域に対応する更新前データが存在していれば、そのあるブロック領域に対応するアドレス領域には、そのアドレス領域に対応するアドレスであって、差分データ制御ブロック330上のアドレスが格納される。
【0091】
差分データ制御ブロック330は、例えば、プールVOL620内の複数のブロック領域にそれぞれ対応する管理領域を有する。各管理領域には、プールVOL620内のブロック領域に対応する位置に格納された更新前データがどの世代のスナップショットのデータであるかが記録される。それぞれの差分データ制御ブロック330は、ポインタによって他の差分データ制御ブロック300に接続されている。本明細書では、差分データ制御ブロック330のキュー構造を「DDCBキュー」と称する。また、便宜上、差分データ制御ブロック330を「DDCB」と称する場合がある。CPU33は、管理領域を辿ることによって、複数世代の更新前データを取得することができる。
【0092】
尚、差分データ制御ブロック330の使用されていない領域は、空きキューとして管理される。空きキューは、空きキューカウンタ340によって管理される。
【0093】
上述の構成により、スナップショット作成時点におけるプライマリVOL600のデータイメージを論理的にバーチャルVOL610に複写できる。そして、バーチャルVOL610内のデータがどの世代の更新前データであるかは、差分データ制御ブロック330によって管理される。
【0094】
図7は差分ビットマップテーブル310の詳細構成を示す。
【0095】
差分ビットマップテーブル310は、ブロック情報テーブル311、ブロック管理詳細テーブル312、及びブロック管理テーブル313を含む。
【0096】
ブロック管理テーブル313は、プライマリVOL600内の各ブロック領域(以下、「BLK」と記す場合がある。)について、「BLK使用状態」、及び「初期化状態」を管理する。BLK使用状態には、「使用」、及び「未使用」がある。「使用」は、ブロック領域が何れかのコピー系で使用されていることを示す。「未使用」は、ブロック領域が何れかのコピー系で使用されていないことを示す。「初期化状態」には、「未使用」、「未初期化0」、「未初期化1」、及び「初期化済」がある。「未使用」は、ブロック領域が確保されていないことを示す。「未初期化0」は、ブロック領域が「0」に初期化されていないことを示す。「未初期化1」は、ブロック領域が「1」に初期化されていないことを示す。「初期化済」は、ブロック領域が「0」又は「1」に初期化されていることを示す。
【0097】
ブロック管理詳細テーブル312は、複数のブロック領域に関するブロック管理テーブル313を一纏めにしたものである。
【0098】
ブロック情報テーブル311は、複数のブロック管理詳細テーブル312を一纏めにしたものであり、プライマリVOL600内の各LU(Logical Unit)に属するブロック領域を管理する。
【0099】
差分マージ状態管理テーブル350は、差分ビットマップテーブル310から転送差分ビットマップテーブル510へのマージ処理の有無を管理する。マージ完了フラグは、マージ処理が「実施済み」であるか、或いは「未実施」であるかを示す。マージ処理の詳細については、後述する。
【0100】
図8は差分ビットマップテーブル310から転送差分ビットマップテーブル510へのマージ処理の概要を示す。これらのビットマップテーブル310,510の「黒」は、ビットが「1」であること、即ち、ビットオンであることを示し、「白」は、ビットが「0」であること、即ち、ビットオフであることを示す。
【0101】
図8(A)は、プライマリVOL600とセカンダリVOL700とがペア状態にあり、マージ完了フラグが「未実施」にあることを示す。
【0102】
図8(B)は、プライマリVOL600へのライトアクセス時におけるマージ処理を示す。プライマリVOL600へライトアクセスがあると、CPU33は、マージ完了フラグを参照し、差分ビットマップテーブル310から転送差分ビットマップテーブル510へのマージ処理の有無をチェックする。
【0103】
マージ完了フラグは、「未実施」を示しているため、CPU33は、ビットのマージ処理を行い、マージ完了フラグを「実施済み」に更新する。更に、CPU33は、差分ビットマップテーブル310のビットのうちマージ処理を行ったビットを「未初期化0」に更新するとともに、プライマリVOL600へライトアクセスがあった位置に対応するビットを「1」に更新する。
【0104】
図8(C)は、リモートコピー時におけるマージ処理を示す。CPU33は、リモートコピー実施時に差分ビットマップテーブル310から転送差分ビットマップテーブル510へのマージ処理を行い、マージ完了フラグを「実施済み」に更新する。更に、CPU33は、差分ビットマップテーブル310のビットのうちマージ処理を行ったビットを「未初期化0」に更新するとともに、転送差分ビットマップテーブル510のビットのうちセカンダリVOL700へリモートコピーされたデータの位置に対応するビットを「0」に更新する。
【0105】
図8(D)は、リモートコピー時における転送差分ビットマップテーブル510のビットオフ処理を示す。CPU33は、転送差分ビットマップテーブル510を参照しながら引き続きリモートコピーを実施し、転送差分ビットマップテーブル510のビットのうちセカンダリVOL700へリモートコピーされたデータの位置に対応するビットを「0」に更新する。尚、差分ビットマップテーブル310には、プライマリVOL600にライトアクセスがあるまで、ビット「1」は存在しない。
【0106】
尚、プールVOL620は、バーチャルVOL610からセカンダリVOL700へ更新前データをリモートコピーすることを前提に、更新前データを一時的に退避するものであるため、プールVOL620に退避する必要のある更新前データは、差分ビットマップテーブル310のビットのうちビット「1」を有し、且つ、転送差分ビットマップテーブル510に未だマージされていないビットに対応するブロック領域の更新前データである。プールVOL610に退避する更新前データをリモートコピーする必要のあるデータに限定することで、プールVOL610に格納されるデータ量の増加を抑制できる。
【0107】
一方、プールVOL720に保存される更新前データは、セカンダリVOL700のデータリカバリに用いられるものであるため、セカンダリVOL700の更新前データは、全てプールVOL720に保存しておく必要がある。
【0108】
図9は正記憶制御装置20において実行される非同期リモートコピーのフローチャートを示す。
【0109】
CPU33は、プライマリVOL600とバーチャルVOL610との間のペア状態をスプリット状態にし、ボリューム管理テーブル230を更新する(S201;YES)。
【0110】
プライマリVOL600へのライトアクセスにより、新たなデータがプライマリVOL600に書き込まれると(S202;YES)、CPU33は、上述した内部コピー処理、及びスナップショット更新処理を実行する(S203)。
【0111】
プライマリVOL600へのライトアクセスと、そのライトアクセスに伴う内部コピー処理及びスナップショット更新処理は、少なくとも、スプリット状態の期間中にリモートコピーが実施されるまで繰り返される(S204;NO)。
【0112】
スプリット状態の期間中にリモートコピー処理を実行することになると(S204;YES)、CPU33は、マージ完了フラグを参照し、差分ビットマップテーブル310から転送差分ビットマップテーブル510へのマージ処理が未実施であるか否かをチェックする(S205)。
【0113】
マージ処理が未実施の場合には(S205;YES)、CPU33は、差分ビットマップテーブル310から転送差分ビットマップテーブル510へのマージ処理を行い(S206)、転送差分ビットマップテーブル510を参照し(S207)、リモートコピーを実施する(S208)。
【0114】
マージ処理が実施済みの場合には(S205;NO)、CPU33は、転送差分ビットマップテーブル510を参照し(S207)、リモートコピーを実施する(S208)。
【0115】
リモートコピーが完了し、再度、スプリット状態に移行すると(S209;YES)、CPU33は、プールVOL620に格納されている全ての更新前データを消去するとともに、スナップショット管理情報300の更新情報も消去する(S210)。これにより、バーチャルVOL610もスナップショット管理情報300も、再びスプリット状態が開始された時点におけるプライマリVOL600のデータイメージを復元する情報に更新される。
【0116】
以後、S202乃至S210の処理が繰り返される。即ち、点線枠800に示されるループが形成される。このループにおいて、例えば、スプリット状態が解除された場合、CPU33は、このループから抜けてS201の処理を実行する。上述した図5の処理は、点線枠800に示されるループの処理の一例である。
【0117】
一方、スプリット状態が開始されておらず(S201;NO)、プライマリVOL600とバーチャルVOL610との間のペア状態がコピー状態であれば(S211;YES)、プライマリVOL600へのライトアクセスにより、新たなデータがプライマリVOL600に書き込まれると(S212;YES)、上述した通常コピー処理が実行される(S213)。
【0118】
プライマリVOL600とバーチャルVOL610とのペア状態がスプリット状態でもなく(S201;NO)、且つコピー状態でもない場合には(S211;NO)、そのときのペア状態に応じた処理が行われる(S214)。
【0119】
尚、上述の説明では、説明の便宜上、一つのPVOL600を一つのプールVOL620に対応付ける例を示したが、これに限られるものではない。正記憶制御装置20は、複数のPVOLと、複数のプールグループとを備え、ある一つのPVOLから退避される更新前データは、ある一つのプールグループにのみに格納されるように構成されてもよい。同様に、副記憶制御装置50は、複数のSVOLと、複数のプールグループとを備え、ある一つのSVOLから退避される更新前データは、ある一つのプールグループにのみに格納されるように構成されてもよい。プールグループは、一つ以上のLU(Logical Unit)から成る記憶領域である。プールグループは、プール領域と別称することもできる。
【0120】
図10はPVOLとプールグループとの対応関係を示す説明図である。同図に示すように、正記憶制御装置20は、複数のPVOL1,PVOL2,PVOL3と、複数のプールグループ1,2とを備える。PVOL1は、プールグループ1に対応付けられており、PVOL1からの退避データは、プールグループ1に格納される。プールグループ1は、LU1,LU2,LU3から成る記憶領域である。PVOL2及びPVOL3は、プールグループ2に対応付けられており、PVOL2又はPVOL3からの退避データは、プールグループ2に格納される。プールグループ2は、LU4,LU5,LU6から成る記憶領域である。
【0121】
図11はプールグループ−PVOL対応テーブル900を示す。プールグループ−PVOL対応テーブル900は、「プールグループ#」、「所属LU」、「PVOL#」をそれぞれ対応付けて格納する。「プールグループ#」は、プールグループの番号を示す。「所属LU」は、プールグループに所属しているLUの番号を示す。「PVOL#」は、PVOLの番号を示す。
【0122】
このように、ある一つのPVOLからの退避データを、ある一つのプールグループにのみ格納しておくことで、何れかのプールグループに障害(例えば、オーバーフローなど)が生じたとしても、他のプールグループに影響を与えることはない。
【0123】
次に、差分データ制御ブロック330のキュー管理について説明する。アドレステーブル320内の番号は、差分データ制御ブロック330の番号(以下、「DDCB番号」又は「DDCB#」と記す。)を示す。プールVOL620に格納されているデータが消去されると、その消去されたデータを管理していたDDCBキューを空きキューに遷移させる必要がある。DDCBを接続して空きキューを形成するには、以下のアルゴリズムを適用できる。
【0124】
(1)「新たに接続するDDCB」のDDCB#±1,DDCB#±2,…,又はDDCB#±NのDDCB#を有するDDCBが空きキューに存在するか否かをチェックする。
(2)「新たに接続するDDCB」のDDCB#+1,DDCB#+2,…,又はDDCB#+NのDDCB#を有するDDCBが複数存在する場合には、「新たに接続するDDCB」のDDCB#に一番近いDDCB#を有するDDCBの直前に「新たに接続するDDCB」を接続する。
(3)「新たに接続するDDCB」のDDCB#+1,DDCB#+2,…,又はDDCB#+NのDDCB#を有するDDCBが一つのみ存在する場合には、そのDDCBの直前に「新たに接続するDDCB」を接続する。
(4)「新たに接続するDDCB」のDDCB#−1,DDCB#−2,…,又はDDCB#−NのDDCB#を有するDDCBが複数存在する場合には、「新たに接続するDDCB」のDDCB#に一番近いDDCB#を有するDDCBの直後に「新たに接続するDDCB」を接続する。
(5)新たに接続するDDCBのDDCB#−1,DDCB#−2,…,又はDDCB#−NのDDCB#を有するDDCBが一つのみ存在する場合には、そのDDCBの直後に「新たに接続するDDCB」を接続する。
(6)「新たに接続するDDCB」のDDCB#±1,DDCB#±2,…,又はDDCB#±NのDDCB#を有するDDCBが存在しない場合には、空きキューの最後尾に「新たに接続するDDCB」を接続する。
【0125】
図12及び図13は、上述のアルゴリズムにおいて、N=1とした例を示す。
【0126】
図12(A)は、初期状態を示す。何れのDDCBキューも空きキューに遷移していない。
【0127】
図12(B)は、DDCB#10、DDCB#5、及びDDCB#3のDDCBキューが空きキューに遷移した状態を示す。
【0128】
DDCB#5のDDCBを空きキューに接続する前処理として、DDCB#4又はDDCB#6のDDCBをサーチする。空きキューには、DDCB#10のDDCBしか存在しないので、DDCB#5のDDCBを空きキューの最後尾に接続する。
【0129】
DDCB#3のDDCBを空きキューに接続する前処理として、DDCB#2又はDDCB#4のDDCBをサーチする。空きキューには、DDCB#10、及びDDCB#5しか存在しないので、DDC#3のDDCBを空きキューの最後尾に接続する。
【0130】
図12(C)は、更に、DDCB#11、及びDDCB#4のDDCBキューが空きキューに遷移した状態を示す。
【0131】
DDCB#11のDDCBを空きキューに接続する前処理として、DDCB#10又はDDCB#12のDDCBをサーチする。空きキューには、DDCB#10のDDCBが存在するので、DDCB#10のDDCBの直後にDDCB#11のDDCBを挿入して、空きキューを形成する。
【0132】
DDCB#4のDDCBを空きキューに接続する前処理として、DDCB#3又はDDCB#5のDDCBをサーチする。空きキューには、DDCB#3のDDCBが存在するので、DDCB#3のDDCBの直後にDDCB#4のDDCBを挿入して、空きキューを形成する。
【0133】
図13(A)は、更に、DDCB#30、DDCB#1、及びDDCB#21のDDCBキューが空きキューに遷移した状態を示す。
【0134】
DDCB#30のDDCBを空きキューに接続する前処理として、DDCB#29又はDDCB#31のDDCBをサーチする。空きキューには、DDCB#10、DDCB#5、DDCB#3、DDCB#11、DDCB#4のDDCBしか存在しないので、DDCB#30のDDCBを空きキューの最後尾に接続する。
【0135】
DDCB#1のDDCBを空きキューに接続する前処理として、DDCB#0又はDDCB#2のDDCBをサーチする。空きキューには、DDCB#10、DDCB#5、DDCB#3、DDCB#11、DDCB#4、DDCB#30のDDCBしか存在しないので、DDCB#1のDDCBを空きキューの最後尾に接続する。
【0136】
DDCB#21のDDCBを空きキューに接続する前処理として、DDCB#20又はDDCB#22のDDCBをサーチする。空きキューには、DDCB#10、DDCB#5、DDCB#3、DDCB#11、DDCB#4、DDCB#30、DDCB#1のDDCBしか存在しないので、DDCB#21のDDCBを空きキューの最後尾に接続する。
【0137】
図13(B)は、更に、DDCB#22、DDCB#23、DDCB#9、及びDDCB8#のDDCBキューが空きキューに遷移した状態を示す。
【0138】
DDCB#22のDDCBを空きキューに接続する前処理として、DDCB#21又はDDCB#23のDDCBをサーチする。空きキューには、DDCB#21のDDCBが存在するので、DDCB#21のDDCBの直後にDDCB#22のDDCBを接続して、空きキューを形成する。
【0139】
DDCB#23のDDCBを空きキューに接続する前処理として、DDCB#22又はDDCB#24のDDCBをサーチする。空きキューには、DDCB#22のDDCBが存在するので、DDCB#22のDDCBの直後にDDCB#23のDDCBを接続して、空きキューを形成する。
【0140】
DDCB#9のDDCBを空きキューに接続する前処理として、DDCB#8又はDDCB#10のDDCBをサーチする。空きキューには、DDCB#10のDDCBが存在するので、DDCB#10のDDCBの直前にDDCB#9のDDCBを接続して、空きキューを形成する。
【0141】
DDCB#8のDDCBを空きキューに接続する前処理として、DDCB#7又はDDCB#9のDDCBをサーチする。空きキューには、DDCB#9のDDCBが存在するので、DDCB#9のDDCBの直前にDDCB#8のDDCBを接続して、空きキューを形成する。
【0142】
図13(C)は、更に、DDCB#20、及びDDCB#19のDDCBキューが空きキューに遷移した状態を示す。
【0143】
DDCB#20のDDCBを空きキューに接続する前処理として、DDCB#19又はDDCB#21のDDCBをサーチする。空きキューには、DDCB#21のDDCBが存在するので、DDCB#21のDDCBの直前にDDCB#20のDDCBを接続して、空きキューを形成する。
【0144】
DDCB#19のDDCBを空きキューに接続する前処理として、DDCB#18又はDDCB#20のDDCBをサーチする。空きキューには、DDCB#20のDDCBが存在するので、DDCB#20のDDCBの直前にDDCB#19のDDCBを接続して、空きキューを形成する。
【0145】
図13(C)に示すように、空きキューを構成する複数のDDCBのうち一部のDDCBの並びはシーケンシャルになっている。複数のDDCBがシーケンシャルに連続していると、プールVOL620へのディスクアクセス時におけるシークタイムが短くなり、高速アクセスを実現できる。
【0146】
上述のアルゴリズムでは、空きキューの全てにおいて、DDCBの並びがシーケンシャルになるとは限らない。そこで、上述のアルゴリズムを適用せずに、空きキューの全てにおいて、DDCBの並びがシーケンシャルになるようなアルゴリズムを適用してもよい。
【0147】
上述の説明では、プールVOL620を管理するDDCBキューについて例示したが、プールVOL720を管理するDDCBキューについても同様に適用できる。特に、プールVOL620に退避されるデータは、スプリット時点におけるプライマリVOL600のデータを更新したデータであって、且つセカンダリVOL700へ転送されていないデータに制限できるものの、プールVOL720は、セカンダリVOL700をリストアするために使用されるものであるから、プールVOL720に退避されるデータに制限はない。しかも、プールVOL720は、データが書き込まれる順序とデータが削除される順序が異なるので、プールVOL720を管理するDDCBキューの並びが無秩序となる。そこで、プールVOL720を管理するDDCBキューのキュー管理方法として、上述の方法を適用すれば、プールVOL720にシーケンシャルアクセスできる。副記憶制御装置50がRAIDレベル5又は6でRAID管理している場合には、パリティ生成のオーバーヘッドが大幅に減るので、その効果は大きい。
【0148】
次に、図14乃至図17を参照しながら、正副を切り替える処理の流れについて説明する。正副切り替え処理は、例えば、正ホストシステム100又は正記憶制御装置20に障害が生じたことを契機として、実行される。正副切り替え処理は、副ホストシステム110から記憶制御装置30へ正副切り替えコマンドが送信されることにより、実行される。正副切り替えコマンドは、単一のコマンドによって構成することもできるが、本実施形態では、二つのコマンド(SVOL-takeoverコマンド、及びSwap-takeoverコマンド)によって構成される例を示す。SVOL-takeoverコマンドは、正副切り替えの前処理として、プライマリVOL600からセカンダリVOL700への未転送データを処理するためのコマンドである。Swap-takeoverコマンドは、旧プライマリVOLを新セカンダリVOLに、旧セカンダリVOLを新プライマリVOLに切り替えるためのコマンドである。
【0149】
尚、図14乃至図17において、「TCA」は、プライマリVOL600とセカンダリVOL700との間のペアを称する。「TCB」は、バーチャルVOL610とセカンダリVOL700との間のペアを称する。「QS」は、プライマリVOL600とバーチャルVOL610との間のペア、又はセカンダリVOL700とバーチャルVOL710との間のペアを称する。
【0150】
まず、図14及び図15を参照しながら、プライマリVOL600へのライトアクセスがない状態で正副を切り替える処理の流れについて説明する。
【0151】
図14(A)は、副記憶制御装置50が副ホストシステム110からSVOL-takeoverコマンドを受信した時点での各ボリュームのペア状態を示す。プライマリVOL600とセカンダリVOL700との間のペア状態は「PAIR」、バーチャルVOL610とセカンダリVOL700との間のペア状態は「PAIR」、プライマリVOL600とバーチャルVOL610との間のペア状態は「PSUS」、セカンダリVOL700とバーチャルVOL710との間のペア状態は「PSUS」である。
【0152】
図14(B)に示すように、副記憶制御装置50は、SVOL-takeoverコマンドを受信すると、正記憶制御装置20にSSWSコマンドを送信する。SSWSコマンドとは、プライマリVOL600からセカンダリVOL700への未転送データがあるか否かを正記憶制御装置20に問い合わせ、未転送データがある場合には、その未転送データを副記憶制御装置50に転送することを要求するコマンドである。各ボリューム間のペア状態に変化はない。
【0153】
図14(C)に示すように、正記憶制御装置20は、副記憶制御装置50からSSWSコマンドを受信すると、プライマリVOL600とバーチャルVOL610との間のペア状態を「PSUS」→「PAIR」→「PSUS」に変更するとともに、バーチャルVOL610とセカンダリVOL700との間のペア状態を「PAIR」→「PSUS」→「PAIR」に変更することにより、バーチャルVOL610内のデータがその時点(プライマリVOL600とバーチャルVOL610との間のペア状態が「PSUS」に変更された時点)のプライマリVOL600のデータで更新され、更新前後の差分データがバーチャルVOL610からセカンダリVOL700へ転送される。
【0154】
図14(D)に示すように、バーチャルVOL610からセカンダリVOL700への差分データ転送が完了すると、ストレージシステム10は、バーチャルVOL610とセカンダリVOL700との間のペア状態を「PAIR」から「SSWS」に変更するとともに、バーチャルVOL710のボリューム状態を「SMPL」に変更する。「SMPL」は、どのボリュームとも正副関係のない状態を示す。
【0155】
図14(E)に示すように、ストレージシステム10は、セカンダリVOL700の状態を「SSWS」に変更する。「SSWS」は、セカンダリVOL700がリード/ライト可能な状態を示す。この状態では、セカンダリVOL700のデータは、前回の確定内容にリストアされる。
【0156】
図15(A)に示すように、憶制御装置50が副ホストシステム110からSwap-takeoverコマンドを受信すると、副記憶制御装置50は、旧セカンダリVOL700を新プライマリVOL700Aに切り替えるとともに、旧プライマリVOL600を新セカンダリVOL600Aに切り替える処理(正副切り替え処理)を実行する。このとき、仮に正記憶制御装置20がバーチャルVOL610内のスナップショットを用いて、新プライマリVOL600Aのデータをリストアしている場合には、そのリストアが完了するのを持って、図15(B)の状態に遷移する。
【0157】
図15(B)に示すように、新セカンダリVOL600AとバーチャルVOL610との間のペア状態が「SMPL」に変更されるとともに、新プライマリVOL700AとバーチャルVOL610との間のペア状態が「SMPL」に変更される。
【0158】
図15(C)に示すように、正記憶制御装置20から副記憶制御装置50へ転送差分ビットマップテーブル510が転送され、転送差分ビットマップテーブル510が転送差分ビットマップテーブル520にマージされる。
【0159】
図15(D)に示すように、転送差分ビットマップテーブル520に基づいて、副記憶制御装置50が新セカンダリVOL600Aに差分データを書き込む処理(初期コピー)が実行される。
【0160】
図15(E)は、初期コピー完了後の各ボリュームのペア状態を示す。旧プライマリVOL600用のバーチャルVOL610は、新セカンダリVOL600A用のバーチャルVOL610Aに切り替えられとともに、旧セカンダリVOL700用のバーチャルVOL710は、新プライマリVOL700A用のバーチャルVOL710Aに切り替えられる。新プライマリVOL700Aと新セカンダリVOL600Aとの間のペア状態は「PAIR」になり、新セカンダリVOL600AとバーチャルVOL710Aとの間のペア状態は「PAIR」になる。副記憶制御装置50は、副ホストシステム110からのライトアクセスを受け付けることができる。
【0161】
次に、図16を参照しながら、プライマリVOL600へのライトアクセスがある状態で正副を切り替える処理の流れについて説明する。
【0162】
図16(A)は、副記憶制御装置50が副ホストシステム110からSVOL-takeoverコマンドを受信した時点での各ボリュームのペア状態を示す。プライマリVOL600とセカンダリVOL700との間のペア状態は「PAIR」、バーチャルVOL610とセカンダリVOL700との間のペア状態は「PAIR」、プライマリVOL600とバーチャルVOL610との間のペア状態は「PSUS」、セカンダリVOL700とバーチャルVOL710との間のペア状態は「PSUS」である。
【0163】
図16(B)に示すように、副記憶制御装置50は、SVOL-takeoverコマンドを受信すると、正記憶制御装置20にSSWSコマンドを送信する。各ボリューム間のペア状態に変化はない。
【0164】
図16(C)に示すように、正記憶制御装置20は、副記憶制御装置50からSSWSコマンドを受信すると、プライマリVOL600とバーチャルVOL610との間のペア状態を「PSUS」→「PAIR」→「PSUS」に変更するとともに、バーチャルVOL610とセカンダリVOL700との間のペア状態を「PAIR」→「PSUS」→「PAIR」に変更することにより、バーチャルVOL610内のデータがその時点(プライマリVOL600とバーチャルVOL610との間のペア状態が「PSUS」に変更された時点)のプライマリVOL600のデータで更新され、更新前後の差分データがバーチャルVOL610からセカンダリVOL700へ転送される。
【0165】
図16(D)に示すように、正記憶制御装置20は、正ホストシステム100からライトアクセスを受けると、PVOL600のデータ更新位置に対応する差分ビットマップテーブル310のビットをオンにする。プライマリVOL600とセカンダリVOL700との間のペア状態は「PSUS」である。正ホストシステム100からのライトアクセスによるプライマリVOL600のデータ更新については、正記憶制御装置20は、プライマリVOL600のデータ更新位置を差分ビットマップテーブル310で追跡するのみで、スナップショットの作成は行わない。
【0166】
図16(E)に示すように、バーチャルVOL610からセカンダリVOL700への差分データ転送が完了すると、ストレージシステム10は、バーチャルVOL610とセカンダリVOL700との間のペア状態を「PAIR」から「SSWS」に変更するとともに、バーチャルVOL710のボリューム状態を「SMPL」に変更する。
【0167】
図16(F)に示すように、ストレージシステム10は、セカンダリVOL700の状態を「SSWS」に変更する。「SSWS」は、セカンダリVOL700がリード/ライト可能な状態を示す。この状態では、セカンダリVOL700のデータは、前回の確定内容にリストアされる。
【0168】
その後、正副切り替え処理は、図15に示す処理に移行する。図15に示す処理の詳細については、既述してあるので、ここでの説明は省略する。
【0169】
次に、図17を参照しながら、正記憶制御装置20の状態が不明の状態で正副を切り替える処理の流れについて説明する。
【0170】
図17(A)は、副記憶制御装置50が副ホストシステム110からSVOL-takeoverコマンドを受信した時点での各ボリュームのペア状態を示す。
【0171】
図17(B)に示すように、副記憶制御装置50は、SVOL-takeoverコマンドを受信すると、正記憶制御装置20にSSWSコマンドを送信する。ところが、正記憶制御装置20は、障害等が生じているので、SSWSコマンドに対する応答が返ってこないまま、タイムアウトになる。
【0172】
図17(C)に示すように、副記憶制御装置50は、バーチャルVOL710に論理的に保持されているスナップショットを用いてセカンダリVOL700のデータをリストアする。セカンダリVOL700は、最新のスナップショットを取得した時刻におけるデータイメージにまで復元できる。副記憶制御装置50は、セカンダリVOL700の状態を「SSWS」に変更する。
【0173】
図17(D)に示すように、副記憶制御装置50は、バーチャルVOL710の状態を「SMPL」に変更する。
【0174】
正ホストシステム100又は正記憶制御装置20に障害が生じた場合に、上述した正副切り替え処理を実行することにより、副ホストシステム110及び副記憶制御装置50を稼働系システムとして運用することができる。
【図面の簡単な説明】
【0175】
【図1】本実施形態に係るストレージシステムのシステム構成図である。
【図2】各種マイクロプログラム及びボリューム管理テーブルの説明図である。
【図3】ボリューム管理テーブルの説明図である。
【図4】非同期リモートコピーの処理概要を示す説明図である。
【図5】非同期リモートコピーの処理シーケンスを示す説明図である。
【図6】スナップショット更新処理の概要を示す説明図である。
【図7】差分ビットマップテーブルの詳細構成図である。
【図8】マージ処理の概要を示す説明図である。
【図9】非同期リモートコピーのフローチャートを示す説明図である。
【図10】PVOLとプールグループとの対応関係を示す説明図である。
【図11】プールグループ−PVOL対応テーブルの説明図である。
【図12】差分データ制御ブロックのキュー管理の概要を示す説明図である。
【図13】差分データ制御ブロックのキュー管理の概要を示す説明図である。
【図14】プライマリVOLへのライトアクセスがない場合のSVOL-takeovber処理を示す説明図である。
【図15】Swap-Takeover処理を示す説明図である。
【図16】プライマリVOLへのライトアクセスがある場合のSVOL-takeovber処理を示す説明図である。
【図17】正記憶制御装置に障害が生じている場合のSVOL-takeovber処理を示す説明図である。
【符号の説明】
【0176】
10…ストレージシステム 20…正記憶制御装置 50…副記憶制御装置 300,400…スナップショット管理情報 310,410A、410B…差分ビットマップテーブル 510,520…転送差分ビットマップテーブル 600…PVOL 700…SVOL 610,710…バーチャルVOL 620,720…プールVOL
【特許請求の範囲】
【請求項1】
第一の論理ボリュームを有する正記憶制御装置と、前記第一の論理ボリュームとコピーペアを形成可能な第二の論理ボリュームを有する副記憶制御装置とを備えるストレージシステムであって、
前記正記憶制御装置は、
ホストアクセスによる前記第一の論理ボリュームの更新位置を管理する第一の差分ビットマップテーブルと、
前記第一の論理ボリュームのデータイメージを論理的に復元するための第一のスナップショット管理情報と、
前記ホストアクセスによって更新される前のデータであって、且つ前記第一の論理ボリュームに書かれていたデータである更新前データを格納する第一のプール領域と、
所定のタイミング以降に前記第一の論理ボリュームが更新されるときに前記更新前データを前記第一のプール領域に書き込む第一の書き込み手段と、
前記所定のタイミング以降に前記第一の論理ボリュームが更新されると、前記第一のスナップショット管理情報を前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを論理的に復元するための情報に更新する第一のスナップショット更新手段と、
前記第一の論理ボリュームの更新データが前記第二の論理ボリュームにリモートコピーされたか否かを管理する第一の転送差分ビットマップテーブルと、
前記第一の差分ビットマップテーブルのビット情報を前記第一の転送差分ビットマップテーブルにマージすることにより前記第一の転送差分ビットマップテーブルを更新する転送ビットマップテーブル更新手段と、
更新された前記第一の転送差分ビットマップテーブルに基づいて、前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを構成する各データが前記第一の論理ボリュームと前記第一のプール領域の何れに存在するのかを判別し、判別された方からデータを取得して前記第二の論理ボリュームに送信するリモートコピー手段と、
を備え、
前記副記憶制御装置は、
前記リモートコピーによる前記第二の論理ボリュームの更新位置を管理する第二の転送差分ビットマップテーブルと、
前記第二の論理ボリュームのデータイメージを論理的に復元するための第二のスナップショット管理情報と、
前記リモートコピーによって更新される前のデータであって、且つ前記第二の論理ボリュームに書かれていたデータである更新前データを格納する第二のプール領域と、
前記リモートコピーによって前記第二の論理ボリュームが更新されるときに前記更新前データを前記プール領域に書き込む第二の書き込み手段と、
前記第二の論理ボリュームが更新されると、前記第二のスナップショット管理情報を所定のタイミングの時点における前記第二の論理ボリュームのデータイメージを論理的に復元する情報に更新する第二のスナップショット更新手段と、
を備える、ストレージシステム。
【請求項2】
請求項1に記載のストレージシステムであって、
前記副記憶制御装置は、
ホストシステムから正副切り替えコマンドを受信すると、前記正記憶制御装置から前記副記憶制御装置にリモートコピーされていない未転送データが存在するか否かを前記正記憶制御装置に問い合せる手段と、
前記未転送データが存在する場合に、前記正記憶制御装置から前記未転送データを受信し、前記第二の論理ボリュームを更新する手段と、
を更に備える、ストレージシステム。
【請求項3】
請求項2に記載のストレージシステムであって、
前記正記憶制御装置は、
前記副記憶制御装置が前記正副切り替えコマンドを受信した時点以降における、前記第一の論理ボリュームへのホストアクセスによる前記第一の論理ボリュームの更新位置を前記第一の差分ビットマップテーブルにより管理する手段を更に備える、ストレージシステム。
【請求項4】
請求項2に記載のストレージシステムであって、
前記副記憶制御装置は、
前記問い合わせに対する前記正記憶制御装置からの応答がない場合には、前記第二のスナップショット管理情報に基づいて、過去のある時点における前記第二の論理ボリュームのデータイメージを復元する手段を更に備える、ストレージシステム。
【請求項5】
請求項1に記載のストレージシステムであって、
前記第一の書き込み手段は、前記第一の差分ビットマップテーブルのうちデータ更新有りを示すビットであって、且つ前記第一の転送差分ビットマップテーブルに未だマージされていないビットに対応する前記第一の論理ボリュームの前記更新前データを前記第一のプール領域に書き込む、ストレージシステム。
【請求項6】
請求項1に記載のストレージシステムであって、
前記正記憶制御装置は、複数の第一の論理ボリュームと、複数の第一のプール領域とを備えており、
各々の第一の論理ボリュームは、何れかの第一のプール領域に対応けられており、
前記第一の書き込み手段は、前記第一の論理ボリュームに対応付けられている前記第一のプール領域に前記第一の論理ボリュームの更新前データを書き込む、ストレージシステム。
【請求項7】
請求項1に記載のストレージシステムであって、
前記副記憶制御装置は、複数の第二の論理ボリュームと、複数の第二のプール領域とを備えており、
各々の第二の論理ボリュームは、何れかの第二のプール領域に対応けられており、
前記第二の書き込み手段は、前記第二の論理ボリュームに対応付けられている前記第二のプール領域に前記第二の論理ボリュームの更新前データを書き込む、ストレージシステム。
【請求項8】
請求項1に記載のストレージシステムであって、
前記第一のスナップショット管理情報は、前記第一のプール領域の各ブロックに対応付けられた複数の差分データ制御ブロックを含み、
前記正記憶制御装置は、前記第一のプール領域に書き込まれた前記更新前データが消去されると、消去された前記更新前データを管理していた差分データ制御ブロックを空きキューに接続する空きキュー管理手段を更に備え、
前記空きキュー管理手段は、接続対象となる差分データ制御ブロックを前記空きキューに接続する際に、前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されているか否かをチェックし、前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックの直前に前記接続対象となる差分データ制御ブロックを接続し、前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックの直後に前記接続対象となる差分データ制御ブロックを接続し、前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されてない場合には、前記空きキューの最後尾に前記接続対象となる差分データ制御ブロックを接続する、ストレージシステム。
【請求項9】
請求項1に記載のストレージシステムであって、
前記第二のスナップショット管理情報は、前記第二のプール領域の各ブロックに対応付けられた複数の差分データ制御ブロックを含み、
前記副記憶制御装置は、前記第二のプール領域に書き込まれた前記更新前データが消去されると、消去された前記更新前データを管理していた差分データ制御ブロックを空きキューに接続する空きキュー管理手段を更に備え、
前記空きキュー管理手段は、接続対象となる差分データ制御ブロックを前記空きキューに接続する際に、前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されているか否かをチェックし、前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックの直前に前記接続対象となる差分データ制御ブロックを接続し、前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックの直後に前記接続対象となる差分データ制御ブロックを接続し、前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されてない場合には、前記空きキューの最後尾に前記接続対象となる差分データ制御ブロックを接続する、ストレージシステム。
【請求項10】
第一の論理ボリュームを有する正記憶制御装置へのホストアクセスを受け付けるステップと、
前記ホストアクセスによる前記第一の論理ボリュームの更新位置を第一の差分ビットマップテーブルにより管理するステップと、
所定のタイミング以降に前記第一の論理ボリュームが更新されるときに、前記ホストアクセスによって更新される前のデータであって、且つ前記第一の論理ボリュームに書かれていたデータである更新前データを第一のプール領域に書き込むステップと、
前記所定のタイミング以降に前記第一の論理ボリュームが更新されると、前記第一の論理ボリュームのデータイメージを論理的に復元するための第一のスナップショット管理情報を、前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを論理的に復元する情報に更新するステップと、
前記正記憶制御装置が有する前記第一の論理ボリュームの更新データが、副記憶制御装置が有する第二の論理ボリュームにリモートコピーされたか否かを管理する第一の差分ビットマップテーブルに前記第一の差分ビットマップテーブルのビット情報をマージするステップと、
更新された前記第一の転送差分ビットマップテーブルに基づいて、前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを構成する各データが前記第一の論理ボリュームと前記第一のプール領域の何れに存在するのかを判別し、判別された方からデータを取得して前記第二の論理ボリュームにリモートコピーするステップと、
前記リモートコピーによる前記第二の論理ボリュームの更新位置を第二の転送差分ビットマップテーブルにより管理するステップと、
前記リモートコピーによって更新される前のデータであって、且つ前記第二の論理ボリュームに書かれていたデータである更新前データを第二のプール領域に書き込むステップと、
前記第二の論理ボリュームが更新されると、前記第二の論理ボリュームのデータイメージを論理的に復元するための第二のスナップショット管理情報を、所定のタイミングの時点における前記第二の論理ボリュームのデータイメージを論理的に復元する情報に更新するステップと、
を備える、ストレージシステムの制御方法。
【請求項11】
請求項10に記載のストレージシステムの制御方法であって、
ホストシステムから正副切り替えコマンドを受信するステップと、
前記正記憶制御装置から前記副記憶制御装置にリモートコピーされていない未転送データが存在するか否かを前記正記憶制御装置に問い合せるステップと、
前記未転送データが存在する場合に、前記正記憶制御装置から前記未転送データを受信して前記第二の論理ボリュームを更新するステップと、
を更に備える、ストレージシステムの制御方法。
【請求項12】
請求項11に記載のストレージシステムの制御方法であって、
前記正副切り替えコマンドを受信した時点以降における、前記第一の論理ボリュームへのホストアクセスによる前記第一の論理ボリュームの更新位置を前記第一の差分ビットマップテーブルにより管理するステップを更に備える、ストレージシステムの制御方法。
【請求項13】
請求項11に記載のストレージシステムの制御方法であって、
前記問い合わせに対する前記正記憶制御装置からの応答がない場合には、前記第二のスナップショット管理情報に基づいて、過去のある時点における前記第二の論理ボリュームのデータイメージを復元するステップを更に備える、ストレージシステムの制御方法。
【請求項14】
請求項10に記載のストレージシステムの制御方法であって、
前記第一の差分ビットマップテーブルのうちデータ更新有りを示すビットであって、且つ前記第一の転送差分ビットマップテーブルに未だマージされていないビットに対応する前記第一の論理ボリュームの前記更新前データを前記第一のプール領域に書き込むステップを更に備える、ストレージシステムの制御方法。
【請求項15】
請求項10に記載のストレージシステムの制御方法であって、
前記正記憶制御装置は、複数の第一の論理ボリュームと、複数の第一のプール領域とを備えており、
各々の第一の論理ボリュームは、何れかの第一のプール領域に対応けられており、
前記第一の論理ボリュームに対応付けられている前記第一のプール領域に前記第一の論理ボリュームの更新前データを書き込むステップを更に備える、ストレージシステムの制御方法。
【請求項16】
請求項10に記載のストレージシステムの制御方法であって、
前記副記憶制御装置は、複数の第二の論理ボリュームと、複数の第二のプール領域とを備えており、
各々の第二の論理ボリュームは、何れかの第二のプール領域に対応けられており、
前記第二の論理ボリュームに対応付けられている前記第二のプール領域に前記第二の論理ボリュームの更新前データを書き込むステップを更に備える、ストレージシステムの制御方法。
【請求項17】
請求項10に記載のストレージシステムの制御方法であって、
前記第一のスナップショット管理情報は、前記第一のプール領域の各ブロックに対応付けられた複数の差分データ制御ブロックを含み、
前記正記憶制御装置は、前記第一のプール領域に書き込まれた前記更新前データが消去されると、消去された前記更新前データを管理していた差分データ制御ブロックを空きキューに接続する空きキュー管理手段を更に備え、
接続対象となる差分データ制御ブロックを前記空きキューに接続する際に、前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されているか否かをチェックするステップと、
前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックの直前に前記接続対象となる差分データ制御ブロックを接続するステップと、
前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックの直後に前記接続対象となる差分データ制御ブロックを接続するステップと、
前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されてない場合には、前記空きキューの最後尾に前記接続対象となる差分データ制御ブロックを接続するステップと、
を更に備える、ストレージシステムの制御方法。
【請求項18】
請求項10に記載のストレージシステムの制御方法であって、
前記第二のスナップショット管理情報は、前記第二のプール領域の各ブロックに対応付けられた複数の差分データ制御ブロックを含み、
前記副記憶制御装置は、前記第二のプール領域に書き込まれた前記更新前データが消去されると、消去された前記更新前データを管理していた差分データ制御ブロックを空きキューに接続する空きキュー管理手段を更に備え、
接続対象となる差分データ制御ブロックを前記空きキューに接続する際に、前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されているか否かをチェックするステップと、
前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックの直前に前記接続対象となる差分データ制御ブロックを接続するステップと、
前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックの直後に前記接続対象となる差分データ制御ブロックを接続するステップと、
前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されてない場合には、前記空きキューの最後尾に前記接続対象となる差分データ制御ブロックを接続するステップと、
を更に備える、ストレージシステムの制御方法。
【請求項1】
第一の論理ボリュームを有する正記憶制御装置と、前記第一の論理ボリュームとコピーペアを形成可能な第二の論理ボリュームを有する副記憶制御装置とを備えるストレージシステムであって、
前記正記憶制御装置は、
ホストアクセスによる前記第一の論理ボリュームの更新位置を管理する第一の差分ビットマップテーブルと、
前記第一の論理ボリュームのデータイメージを論理的に復元するための第一のスナップショット管理情報と、
前記ホストアクセスによって更新される前のデータであって、且つ前記第一の論理ボリュームに書かれていたデータである更新前データを格納する第一のプール領域と、
所定のタイミング以降に前記第一の論理ボリュームが更新されるときに前記更新前データを前記第一のプール領域に書き込む第一の書き込み手段と、
前記所定のタイミング以降に前記第一の論理ボリュームが更新されると、前記第一のスナップショット管理情報を前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを論理的に復元するための情報に更新する第一のスナップショット更新手段と、
前記第一の論理ボリュームの更新データが前記第二の論理ボリュームにリモートコピーされたか否かを管理する第一の転送差分ビットマップテーブルと、
前記第一の差分ビットマップテーブルのビット情報を前記第一の転送差分ビットマップテーブルにマージすることにより前記第一の転送差分ビットマップテーブルを更新する転送ビットマップテーブル更新手段と、
更新された前記第一の転送差分ビットマップテーブルに基づいて、前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを構成する各データが前記第一の論理ボリュームと前記第一のプール領域の何れに存在するのかを判別し、判別された方からデータを取得して前記第二の論理ボリュームに送信するリモートコピー手段と、
を備え、
前記副記憶制御装置は、
前記リモートコピーによる前記第二の論理ボリュームの更新位置を管理する第二の転送差分ビットマップテーブルと、
前記第二の論理ボリュームのデータイメージを論理的に復元するための第二のスナップショット管理情報と、
前記リモートコピーによって更新される前のデータであって、且つ前記第二の論理ボリュームに書かれていたデータである更新前データを格納する第二のプール領域と、
前記リモートコピーによって前記第二の論理ボリュームが更新されるときに前記更新前データを前記プール領域に書き込む第二の書き込み手段と、
前記第二の論理ボリュームが更新されると、前記第二のスナップショット管理情報を所定のタイミングの時点における前記第二の論理ボリュームのデータイメージを論理的に復元する情報に更新する第二のスナップショット更新手段と、
を備える、ストレージシステム。
【請求項2】
請求項1に記載のストレージシステムであって、
前記副記憶制御装置は、
ホストシステムから正副切り替えコマンドを受信すると、前記正記憶制御装置から前記副記憶制御装置にリモートコピーされていない未転送データが存在するか否かを前記正記憶制御装置に問い合せる手段と、
前記未転送データが存在する場合に、前記正記憶制御装置から前記未転送データを受信し、前記第二の論理ボリュームを更新する手段と、
を更に備える、ストレージシステム。
【請求項3】
請求項2に記載のストレージシステムであって、
前記正記憶制御装置は、
前記副記憶制御装置が前記正副切り替えコマンドを受信した時点以降における、前記第一の論理ボリュームへのホストアクセスによる前記第一の論理ボリュームの更新位置を前記第一の差分ビットマップテーブルにより管理する手段を更に備える、ストレージシステム。
【請求項4】
請求項2に記載のストレージシステムであって、
前記副記憶制御装置は、
前記問い合わせに対する前記正記憶制御装置からの応答がない場合には、前記第二のスナップショット管理情報に基づいて、過去のある時点における前記第二の論理ボリュームのデータイメージを復元する手段を更に備える、ストレージシステム。
【請求項5】
請求項1に記載のストレージシステムであって、
前記第一の書き込み手段は、前記第一の差分ビットマップテーブルのうちデータ更新有りを示すビットであって、且つ前記第一の転送差分ビットマップテーブルに未だマージされていないビットに対応する前記第一の論理ボリュームの前記更新前データを前記第一のプール領域に書き込む、ストレージシステム。
【請求項6】
請求項1に記載のストレージシステムであって、
前記正記憶制御装置は、複数の第一の論理ボリュームと、複数の第一のプール領域とを備えており、
各々の第一の論理ボリュームは、何れかの第一のプール領域に対応けられており、
前記第一の書き込み手段は、前記第一の論理ボリュームに対応付けられている前記第一のプール領域に前記第一の論理ボリュームの更新前データを書き込む、ストレージシステム。
【請求項7】
請求項1に記載のストレージシステムであって、
前記副記憶制御装置は、複数の第二の論理ボリュームと、複数の第二のプール領域とを備えており、
各々の第二の論理ボリュームは、何れかの第二のプール領域に対応けられており、
前記第二の書き込み手段は、前記第二の論理ボリュームに対応付けられている前記第二のプール領域に前記第二の論理ボリュームの更新前データを書き込む、ストレージシステム。
【請求項8】
請求項1に記載のストレージシステムであって、
前記第一のスナップショット管理情報は、前記第一のプール領域の各ブロックに対応付けられた複数の差分データ制御ブロックを含み、
前記正記憶制御装置は、前記第一のプール領域に書き込まれた前記更新前データが消去されると、消去された前記更新前データを管理していた差分データ制御ブロックを空きキューに接続する空きキュー管理手段を更に備え、
前記空きキュー管理手段は、接続対象となる差分データ制御ブロックを前記空きキューに接続する際に、前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されているか否かをチェックし、前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックの直前に前記接続対象となる差分データ制御ブロックを接続し、前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックの直後に前記接続対象となる差分データ制御ブロックを接続し、前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されてない場合には、前記空きキューの最後尾に前記接続対象となる差分データ制御ブロックを接続する、ストレージシステム。
【請求項9】
請求項1に記載のストレージシステムであって、
前記第二のスナップショット管理情報は、前記第二のプール領域の各ブロックに対応付けられた複数の差分データ制御ブロックを含み、
前記副記憶制御装置は、前記第二のプール領域に書き込まれた前記更新前データが消去されると、消去された前記更新前データを管理していた差分データ制御ブロックを空きキューに接続する空きキュー管理手段を更に備え、
前記空きキュー管理手段は、接続対象となる差分データ制御ブロックを前記空きキューに接続する際に、前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されているか否かをチェックし、前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックの直前に前記接続対象となる差分データ制御ブロックを接続し、前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックの直後に前記接続対象となる差分データ制御ブロックを接続し、前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されてない場合には、前記空きキューの最後尾に前記接続対象となる差分データ制御ブロックを接続する、ストレージシステム。
【請求項10】
第一の論理ボリュームを有する正記憶制御装置へのホストアクセスを受け付けるステップと、
前記ホストアクセスによる前記第一の論理ボリュームの更新位置を第一の差分ビットマップテーブルにより管理するステップと、
所定のタイミング以降に前記第一の論理ボリュームが更新されるときに、前記ホストアクセスによって更新される前のデータであって、且つ前記第一の論理ボリュームに書かれていたデータである更新前データを第一のプール領域に書き込むステップと、
前記所定のタイミング以降に前記第一の論理ボリュームが更新されると、前記第一の論理ボリュームのデータイメージを論理的に復元するための第一のスナップショット管理情報を、前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを論理的に復元する情報に更新するステップと、
前記正記憶制御装置が有する前記第一の論理ボリュームの更新データが、副記憶制御装置が有する第二の論理ボリュームにリモートコピーされたか否かを管理する第一の差分ビットマップテーブルに前記第一の差分ビットマップテーブルのビット情報をマージするステップと、
更新された前記第一の転送差分ビットマップテーブルに基づいて、前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを構成する各データが前記第一の論理ボリュームと前記第一のプール領域の何れに存在するのかを判別し、判別された方からデータを取得して前記第二の論理ボリュームにリモートコピーするステップと、
前記リモートコピーによる前記第二の論理ボリュームの更新位置を第二の転送差分ビットマップテーブルにより管理するステップと、
前記リモートコピーによって更新される前のデータであって、且つ前記第二の論理ボリュームに書かれていたデータである更新前データを第二のプール領域に書き込むステップと、
前記第二の論理ボリュームが更新されると、前記第二の論理ボリュームのデータイメージを論理的に復元するための第二のスナップショット管理情報を、所定のタイミングの時点における前記第二の論理ボリュームのデータイメージを論理的に復元する情報に更新するステップと、
を備える、ストレージシステムの制御方法。
【請求項11】
請求項10に記載のストレージシステムの制御方法であって、
ホストシステムから正副切り替えコマンドを受信するステップと、
前記正記憶制御装置から前記副記憶制御装置にリモートコピーされていない未転送データが存在するか否かを前記正記憶制御装置に問い合せるステップと、
前記未転送データが存在する場合に、前記正記憶制御装置から前記未転送データを受信して前記第二の論理ボリュームを更新するステップと、
を更に備える、ストレージシステムの制御方法。
【請求項12】
請求項11に記載のストレージシステムの制御方法であって、
前記正副切り替えコマンドを受信した時点以降における、前記第一の論理ボリュームへのホストアクセスによる前記第一の論理ボリュームの更新位置を前記第一の差分ビットマップテーブルにより管理するステップを更に備える、ストレージシステムの制御方法。
【請求項13】
請求項11に記載のストレージシステムの制御方法であって、
前記問い合わせに対する前記正記憶制御装置からの応答がない場合には、前記第二のスナップショット管理情報に基づいて、過去のある時点における前記第二の論理ボリュームのデータイメージを復元するステップを更に備える、ストレージシステムの制御方法。
【請求項14】
請求項10に記載のストレージシステムの制御方法であって、
前記第一の差分ビットマップテーブルのうちデータ更新有りを示すビットであって、且つ前記第一の転送差分ビットマップテーブルに未だマージされていないビットに対応する前記第一の論理ボリュームの前記更新前データを前記第一のプール領域に書き込むステップを更に備える、ストレージシステムの制御方法。
【請求項15】
請求項10に記載のストレージシステムの制御方法であって、
前記正記憶制御装置は、複数の第一の論理ボリュームと、複数の第一のプール領域とを備えており、
各々の第一の論理ボリュームは、何れかの第一のプール領域に対応けられており、
前記第一の論理ボリュームに対応付けられている前記第一のプール領域に前記第一の論理ボリュームの更新前データを書き込むステップを更に備える、ストレージシステムの制御方法。
【請求項16】
請求項10に記載のストレージシステムの制御方法であって、
前記副記憶制御装置は、複数の第二の論理ボリュームと、複数の第二のプール領域とを備えており、
各々の第二の論理ボリュームは、何れかの第二のプール領域に対応けられており、
前記第二の論理ボリュームに対応付けられている前記第二のプール領域に前記第二の論理ボリュームの更新前データを書き込むステップを更に備える、ストレージシステムの制御方法。
【請求項17】
請求項10に記載のストレージシステムの制御方法であって、
前記第一のスナップショット管理情報は、前記第一のプール領域の各ブロックに対応付けられた複数の差分データ制御ブロックを含み、
前記正記憶制御装置は、前記第一のプール領域に書き込まれた前記更新前データが消去されると、消去された前記更新前データを管理していた差分データ制御ブロックを空きキューに接続する空きキュー管理手段を更に備え、
接続対象となる差分データ制御ブロックを前記空きキューに接続する際に、前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されているか否かをチェックするステップと、
前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックの直前に前記接続対象となる差分データ制御ブロックを接続するステップと、
前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックの直後に前記接続対象となる差分データ制御ブロックを接続するステップと、
前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されてない場合には、前記空きキューの最後尾に前記接続対象となる差分データ制御ブロックを接続するステップと、
を更に備える、ストレージシステムの制御方法。
【請求項18】
請求項10に記載のストレージシステムの制御方法であって、
前記第二のスナップショット管理情報は、前記第二のプール領域の各ブロックに対応付けられた複数の差分データ制御ブロックを含み、
前記副記憶制御装置は、前記第二のプール領域に書き込まれた前記更新前データが消去されると、消去された前記更新前データを管理していた差分データ制御ブロックを空きキューに接続する空きキュー管理手段を更に備え、
接続対象となる差分データ制御ブロックを前記空きキューに接続する際に、前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されているか否かをチェックするステップと、
前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号+1の番号を有する差分データ制御ブロックの直前に前記接続対象となる差分データ制御ブロックを接続するステップと、
前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号−1の番号を有する差分データ制御ブロックの直後に前記接続対象となる差分データ制御ブロックを接続するステップと、
前記接続対象となる差分データ制御ブロックの番号±1の番号を有する差分データ制御ブロックが前記空きキューに接続されてない場合には、前記空きキューの最後尾に前記接続対象となる差分データ制御ブロックを接続するステップと、
を更に備える、ストレージシステムの制御方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公開番号】特開2007−213345(P2007−213345A)
【公開日】平成19年8月23日(2007.8.23)
【国際特許分類】
【出願番号】特願2006−32927(P2006−32927)
【出願日】平成18年2月9日(2006.2.9)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
【公開日】平成19年8月23日(2007.8.23)
【国際特許分類】
【出願日】平成18年2月9日(2006.2.9)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
[ Back to top ]