図1は、本発明の第一の実施形態に係る計算機システムの構成を示す。
第一のネットワーク121に、一以上のホスト計算機101及び第一のストレージシステム125が接続されている。第二のネットワーク123に、第一及び第二のストレージシステム125及び161が接続されている。第三のネットワーク108に、一以上のホスト計算機101、管理サーバ111、第一及び第二のストレージシステム125及び161が接続されている。ネットワーク121、123及び108は、それぞれ、任意の種類のネットワークを採用することができる。例えば、第一及び第二のネットワーク121及び123は、SAN(Storage Area Network)であって、第三のネットワーク108は、LAN(Local Area Network)である。また、例えば、ストレージシステム125及び161同士は、第二のネットワーク123に代えて専用線で接続されても良い。また、第二ストレージシステム161は、外部接続先のストレージシステムであっても良いし、リモートコピー先のストレージシステムであっても良い。
ホスト計算機101は、第一のストレージシステム125から提供される論理ボリュームにアクセスする計算機である。ホスト計算機101は、CPU(Central Processing Unit)103、メモリ106、補助記憶デバイス104、入力装置(例えばキーボード及びポインティングデバイス)102、出力装置(例えば表示装置)105、第一のネットワーク121に接続されるストレージアダプタ(例えばホストバスアダプタ)109、及び、第三のネットワーク108に接続されるネットワークアダプタ107を備えている。CPU103は、ストレージアダプタ109を介して、アドレスを指定したI/Oコマンド(ライトコマンド又はリードコマンド)を送信する。
管理サーバ111は、第三のネットワーク108に接続されている機器101、111、125及び161を管理する計算機である。管理サーバ111は、CPU(Central Processing Unit)113、メモリ116、補助記憶デバイス114、入力装置(例えばキーボード及びポインティングデバイス)112、出力装置(例えば表示装置)115、及び、第三のネットワーク108に接続されるネットワークアダプタ117を備えている。CPU113は、ネットワークアダプタ117を介して、コマンドを、第三のネットワーク108に接続されている機器101、111、125又は161に送信する。
第一ストレージシステム125は、コントローラと記憶デバイス群とを有する。コントローラは、例えば、複数のフロントエンドインタフェース127と、複数のバックエンドインタフェース137と、第一の内部ネットワーク156と、一以上のキャッシュメモリ147と、一以上の制御メモリ145と、一以上のプロセッサ143とを備える。記憶デバイス群は、複数の物理記憶デバイス(以下、「PDEV」と言う)151で構成されている。
フロントエンドインタフェース127は、第一ストレージシステム125の外部の機器101又は161と通信するためのインタフェース回路である。従って、フロントエンドインタフェース127としては、第一のネットワーク121に接続されるインタフェースと、第二のネットワーク123に接続されるインタフェースがある。フロントエンドインタフェース127は、例えば、ネットワーク121又は123に接続されるポート129と、メモリ131と、ローカルルータ(以下、「LR」と略記する)133とを有する。LR133に、ポート129及びメモリ131が接続されている。LR133は、ポート129を介して受けたデータを任意のプロセッサ143で処理するための振り分けを行う。具体的には、例えば、プロセッサ143から、或るアドレスを指定するI/Oコマンドをそのプロセッサ143で行うようにLR133に対して設定され、その設定に従って、LR133が、I/Oコマンドやデータを振り分ける。
バックエンドインタフェース137は、PDEV151と通信するためのインタフェース回路である。バックエンドインタフェース137は、例えば、PDEV151に接続されるディスクインタフェース141と、メモリ135と、LR139とを有する。LR139に、ディスクインタフェース141及びメモリ135が接続されている。
第一の内部ネットワーク156は、例えば、スイッチ(一例としてクロスバスイッチ)或いはバスで構成される。第一の内部ネットワーク156に、複数のフロントエンドインタフェース127、複数のバックエンドインタフェース137、一以上のキャッシュメモリ147、一以上の制御メモリ145及び一以上のプロセッサ143が接続されている。これらの要素間の通信は、第一の内部ネットワーク156を介して行われる。
キャッシュメモリ147は、ホスト計算機101からのI/Oコマンドに従って読み出される又は書き込まれるデータを一時記憶するメモリである。
制御メモリ145は、種々のコンピュータプログラム及び/又は情報(例えば図4に示すコンピュータプログラム及び情報)を記憶するメモリである。例えば、制御メモリ145には、どのP−VOL(プライマリの論理ボリューム)がどのホスト計算機からアクセスされるVOLであるかを表す情報や、どのP−VOLがどのS−VOL(セカンダリの論理ボリューム)とペアを構成するかを表す情報や、どのP−VOLがどのR−VOL(リストアされた論理ボリューム)に関連するかを表す情報が記憶されている。これらの情報から、どのS−VOL及びR−VOLがどのホスト計算機に関わる論理ボリュームであるかを特定することが可能である。後述するように、或るホスト計算機についてのホストライトサイズを第一のストレージシステム125が受領した場合、制御プロセッサ143は、その或るホスト計算機に関わるP−VOL、S−VOL及びR−VOLを、制御メモリ145に記憶されている情報を参照することで特定し、特定されたP−VOL、S−VOL及びR−VOLについて、ホストライトサイズを設定することができる。
プロセッサ143は、制御メモリ145に記憶されている種々のコンピュータプログラムを実行することで、後述する処理を行う。
PDEV151は、不揮発性の記憶デバイスであり、例えば、ハードディスクドライブ或いはフラッシュメモリデバイスである。二以上のPDEV151で、RAIDの規則に従うPDEVグループであるRAID(Redundant Array of Independent Disks)グループが構成される。
コントローラの各構成要素127、137、147、145及び143に、第二の内部ネットワーク(例えばLAN)155が接続されており、その第二の内部ネットワーク155に、保守管理端末153が接続されている。保守管理端末153は、第三のネットワーク108にも接続されており、第一のストレージシステム125を保守又は管理する計算機である。第一のストレージシステム125の保守員は、例えば、保守管理端末153(又は、その端末153と通信可能な管理サーバ111)を操作して、制御メモリ145に記憶される種々の情報を定義することができる。
第二のストレージシステム161は、コントローラ165とPDEV163群とを有する。コントローラ165は、例えば、ホストアダプタ164と、ネットワークアダプタ162と、制御メモリ171と、キャッシュメモリ172と、プロセッサ167と、ストレージアダプタ169とを有する。ホストアダプタ164、ネットワークアダプタ162、制御メモリ171、キャッシュメモリ172、プロセッサ167及びストレージアダプタ169の機能は、それぞれ、フロントエンドインタフェース127、ネットワークアダプタ162、制御メモリ145、キャッシュメモリ147、プロセッサ167及びバックエンドインタフェース137の機能とそれぞれ実質的に同じである。
図2は、第一のストレージシステム125における記憶領域構成の概要を示す。
論理的な記憶階層として、下位から上位にかけて順に、VDEV層185、ストレージプール189A及び189B、及びLDEV層183がある。
VDEV層185には、一以上の仮想的なデバイス(VDEV)がある。VDEVは、所定のアドレス範囲が設定された記憶空間である。その記憶空間を構成する複数の記憶空間部分が、それぞれ、論理ボリュームである。
図2の例では、第一のVDEV193Aは、一つのRAIDグループ195が提供する実体的な記憶空間である。第一VDEV193Aは、例えば、第一実VOL187A、プールVOL191A及び191Bの基になっている。従って、これらの論理ボリューム187A、191A及び191Bに書き込まれるデータは、実際には、第一VDEV193Aの基になっているRAIDグループ195に書き込まれる。
一方、第二のVDEV193Bは、仮想的な記憶空間である。第二のVDEV193Bは、第二実VOL187C、プールVOL191C及び191Dの基になっている。従って、これらの論理ボリューム187C、191C及び191Dに書き込まれるデータは、実際には、第二VDEV193Bの基になっている、第二ストレージシステム161内の記憶資源(例えばRAIDグループ)に書き込まれる。具体的には、例えば、第二実VOL187Cに対応した記憶空間部分が、第二ストレージシステム161内のターゲットデバイス181Dに割り当てられており、この場合、仮想VOL187Cに書き込まれるデータは、実際には、第二のストレージシステム161に転送され、ターゲットデバイス181Dに割り当てられている論理ボリュームに書き込まれる。
ストレージプールは、一以上のプールVOLの集合である。図2の例では、第一ストレージプール189Aは、プールVOL191A及び191Cの集合であり、第二ストレージプール189Bは、プールVOL191B及び191Dの集合である。プールVOL191A〜191Dは、ターゲットデバイス181A〜181Cに関連付けられない論理ボリューム(すなわちホスト計算機101に提供されない論理ボリューム)である。なお、第一ストレージシステム125内の全てのプールVOLが、第一ストレージシステム125内のRAIDグループに基づくVDEVを基に形成されていても良いし、反対に、第二ストレージシステム161内の記憶資源に基づくVDEVを基に形成されていても良い。
LDEV層183には、複数の論理ボリューム187A〜187Cと、JNL関連エリア188とがある(“JNL”はジャーナルの略語である)。論理ボリューム187A〜187Cは、いずれも、プールVOLと違って、ホスト計算機101に認識され得る論理ボリュームである。図2の例によれば、論理ボリューム187Aは、実体的な記憶領域が第一ストレージシステム125内にある論理ボリューム(以下、「第一実VOL」と言う)である。論理ボリューム187Bは、ストレージプール189Bに関連付けられている仮想的な論理ボリューム(以下、「仮想VOL」と言う)である。例えば、仮想VOL187Bは、複数の仮想領域で構成されており、ストレージプール189Bが、複数のプール領域で構成されている。仮想VOL187B内の仮想領域にデータが書き込まれることに起因して、その仮想領域にプール領域がストレージプール189Bから割り当てられ、書込み対象のデータが、そのプール領域に書き込まれる。そのプール領域がプールVOL191Bに属していれば、データは第一ストレージシステム125内に保存され、そのプール領域がプールVOL191Dに属していれば、そのデータは第二ストレージシステム161内に保存される。
JNL関連エリア188は、ホスト計算機101に非提供の記憶領域である。このエリア188は、例えば、第一ストレージプール189内に存在する。このエリア188は、後述のJNCBエリアとJNLエリアで構成されている。「JNCB」とは、後述の第二のJNL管理テーブルを意味する文字列である。
ターゲットデバイス181A〜181Cは、ホスト計算機101から見える論理的なデバイスであり、具体的には、例えば、オープンシステムでは“LUN”(Logical Unit Number)であり、メインフレームシステムでは“デバイス”である。ターゲットデバイス181A〜181Cは、ポート129と、LDEV層181における論理ボリューム187A〜187Cとに関連付けられている。図2の例によれば、I/Oコマンドにおいて、ターゲットデバイス181Aが指定されていると、そのデバイス181Aに関連付けられている第一実VOL187AにI/O(ライト又はリード)が発生し、ターゲットデバイス181Bが指定されていると、そのデバイス181Bに関連付けられている仮想VOL187BにI/Oが発生し、ターゲットデバイス181Cが指定されていると、そのデバイス181Cに関連付けられている第二実VOL187CにI/Oが発生する。
図3は、JNLデータ要素の格納の概要を示す。なお、図3では、ライトという言葉を「WR」と略記しており、他の図でも、ライトという言葉をそのように略記することがある。
第一ストレージシステム125に、P−VOL187A及びS−VOL187Sがある。また、R−VOL187Rの構築が可能であるP−VOL187P及びS−VOL187Sは、例えば、前述した第一又は第二実VOL187A又は187Cであり、R−VOL187Rは、前述した仮想VOL187Bである。
P−VOL187Pは、プライマリの論理ボリューム(オンラインの論理ボリューム)である。ホスト計算機101Aからライトデータが書き込まれることで、P−VOL187Pは更新される。
S−VOL187Sは、P−VOL187Pとペアにされたセカンダリの論理ボリュームであり、P−VOL187Pと同じ記憶容量を有する。
R−VOL187Rは、指定された世代のP−VOL187Pの内容を有する論理ボリュームである。R−VOL187Rは、前述したように仮想ボリュームであり、後に説明するように、ユーザ或いは管理者からの要求に応答して作成される。
JNL関連エリア188は、前述したように、JNCBエリア501と、JNLエリア503とで構成されている。JNCBエリア501には、図3に示すように、未確定世代に対応した差分BM(BMは“ビットマップ”の略語である)と、確定した世代毎に対応した差分BMとが格納される。JNLエリア503には、未確定世代に対応したオンライン更新差分データと、確定した世代毎に対応した世代間差分データとが格納される。
ここで、「世代」とは、P−VOL187Pについての或る時点のことである。例えば、世代(N)とは、世代(N−1)を過ぎてP−VOL187Pについて所定の世代確定イベントが発生した時(本実施形態では、ホスト計算機101から後述のマーカを受領した時)のことである。なお、図3の例では、確定している最新の世代が世代(N)のため、未確定世代は、世代(N+1)である。マーカを受領した時のP−VOL187Pのイメージが第一のストレージシステム125で取得されるので、マーカは、スナップショット取得要求と言うこともできる。
「オンライン更新差分データ」とは、オンライン更新差分データ要素の集合である。「オンライン更新差分データ要素」は、P−VOL187PについてのJNLデータ要素である。「JNLデータ要素」とは、P−VOL187Pについての単位記憶領域のサイズ(後述のホストライトサイズ)分のJNLデータのことである。JNLデータ要素は、アフターJNLデータ要素であっても良いしビフォアJNLデータ要素であっても良い。「アフターJNLデータ要素」とは、P−VOL187Pに書き込まれるライトデータ要素である。「ビフォアJNLデータ要素」とは、P−VOL187Pにライトデータ要素が書き込まれることに起因したCOW(Copy On Write)でP−VOL187Pから退避されたデータ要素(ライトデータ要素のライト先記憶領域に記憶されているデータ要素)である。以下の説明では、論理ボリューム内のデータ要素が記憶されている単位記憶領域(後述のホストライトサイズ単位で管理されている単位記憶領域)を、便宜上「ブロック」と言い、JNLエリア503内のデータ要素が記憶されている記憶領域を、便宜上「セグメント」と言うことがある。また、以下の説明では、オンライン更新差分データ要素はアフターJNLデータ要素であるとする。
なお、オンライン更新差分データの最大サイズは、そのデータに対応するP−VOLのサイズと同じである。なぜなら、対応するP−VOLにおける同一のブロックに対応したオンライン更新差分データ要素は、JNLエリア503内で上書きされるからである。従って、後述の世代間差分データの最大サイズも、そのデータに対応するP−VOLのサイズと同じである。言い換えれば、オンライン更新差分データ要素の書込み先のJNLサブエリアのサイズは、最大で、P−VOLと同じサイズとすれば良い(この点は、世代間差分データ及び後述のマージ差分データについても同様である)。
「世代間差分データ」とは、世代間差分データ要素の集合である。「世代間差分データ要素」とは、S−VOL187Sにオンライン更新差分データ要素が書き込まれることに起因したCOWが発生することによりS−VOL187Sから退避されたデータ要素である。具体的には、例えば、未確定世代が世代(N)の場合、第一ストレージシステム125がホスト計算機101からマーカ(特定の電子データ)を受領した時に、世代(N)が確定し、未確定世代が(N+1)となる。その場合、JNLエリア503に蓄積されているオンライン更新差分データ(つまり、世代(N)のP−VOL187Pと世代(N−1)のP−VOL187Pとの差分に相当するデータ)が、S−VOL187Sに書き込まれる。オンライン更新差分データ要素が書き込まれる都度に、COWで、S−VOL187Sからデータ要素が世代間差分データ要素としてJNLエリア503に退避される。これにより、S−VOL187Sは、世代(N)のP−VOL187Pの複製となり、JNLエリア503には、世代(N−1)に対応した世代間差分データ(すなわち、世代(N−1)のS−VOL187Sと世代(N−2)のS−VOL187Sとの差分に相当するデータ)が蓄積される。このため、S−VOL187Sの世代は、P−VOL187Pの世代の一つ前の世代である。
「差分BM」とは、論理ボリュームの世代間での差分を表すビットマップである。具体的には、例えば、図3の例において、世代(N)に対応した差分BMは、世代(N)のP−VOL187Pと世代(N−1)のP−VOL187Pとの差分を表すビットマップである。P−VOL187P内の或るブロックに、世代(N−1)より後の或る時点で初めてライトデータ要素が書き込まれた場合、その或るブロックに対応したビット(世代(N)に対応した差分BM内のビット)が、オンにされ(すなわち、ライト発生を表す値(例えば“1”)に更新され)、そのライトデータ要素に対応するオンライン更新差分データ要素が、JNLエリア503に格納される。なお、差分BMを構成する各ビットは、P−VOL187Pの各ブロックに対応している。各ブロックのサイズは、図7を参照して説明するフォーマット処理によってホストライトサイズとなっている。「ホストライトサイズ」とは、ホスト計算機101から書き込まれるデータの単位サイズ(ライトデータ要素のサイズ)である。
なお、後に図11及び図12を参照して説明するように、複数の世代分の世代間差分データ及び差分BMのマージが可能である。これにより、消費される記憶容量を削減することができる。以下、マージ後の世代間差分データを「マージ差分データ」と言う。
また、図3には、ソート処理と、リストア処理とが示される。各処理の概要は、以下の通りである。
<ソート処理>JNLエリア503には、オンライン更新差分データ要素は、時系列で(すなわち、JNLエリア503に書き込まれた順序で)、並んでいる(敷き詰められている)。JNLエリア503からオンライン更新差分データが読み出されてS−VOL187Sに書き込まれる場合、オンライン更新差分データ要素は、時系列ではなくP−VOL187Pのアドレス順(アドレスの昇順又は降順)に読み出される。このため、S−VOL187Sには、アドレス順にオンライン更新差分データ要素が書き込まれ、故に、COWでS−VOL187SからJNLエリア503に書き込まれた世代間差分データ要素はP−VOL187Pのアドレス順に並ぶことになる(敷き詰められることになる)。このように、時系列に並んでいるオンライン更新差分データ要素をアドレス順でS−VOL187Sに反映することで世代間差分データがアドレス順でJNLエリア503に並ぶようにする処理が、「ソート処理」である。なお、後述の第三の実施形態のように、オンライン更新差分データが無いケースでのソート処理は、世代間差分データがアドレス順でJNLエリア503に並ぶようにする処理である。
<リストア処理>「リストア処理」は、ユーザ又は管理者からの要求に応答してR−VOL187Rを作成する処理である。R−VOL187Rからのリードが可能である。また、それに限らずR−VOL187Rに対するライトも可能であるR−VOL187Rについてのリード及びライトの処理は、後に、図14及び図15を参照して説明する。
図4は、制御メモリ145に記憶されているコンピュータプログラム及び情報を示す。以下の説明において、プログラムが主語になる処理は、実際には、そのプログラムを実行するプロセッサ143が行う処理である。
制御メモリ145には、構成管理テーブル201、JNLエリア管理テーブル203、バックアップ世代管理テーブル205、第一のJNL管理テーブル207、R−VOLアクセス管理テーブル209、R/Wプログラム213、ライトサイズ管理プログラム215、JNLソートプログラム217、JNLマージプログラム219、リストアプログラム221及びマーカ処理プログラム223が記憶されている。また、制御メモリ145には、システム領域211がある。R/Wプログラム213は、ホスト計算機101からのI/Oコマンドに従うI/Oを制御する。ライトサイズ管理プログラム215は、ホストライトサイズの設定を行う。JNLソートプログラム217は、ソート処理を実行する。JNLマージプログラム219は、複数の世代の世代間差分データをマージする。リストアプログラム221はR−VOL187Rを作成する。マーカ処理プログラム223は、ホスト計算機101からのマーカを処理する。制御メモリ145に記憶されている各種プログラム及び情報の詳細は、後に説明する。また、以下の説明では、論理ボリュームを「VOL」と略記することがある。
図5は、図4に示した構成管理テーブル201、JNLエリア管理テーブル203、バックアップ世代管理テーブル205及び第一のJNL管理テーブル207の例を示す。なお、図5には、図4に示されていない第二のJNL管理テーブル(JNCB)307と、JNCB307で管理されているJNLデータとが示されているが、JNCB307及びJNLデータは、制御メモリ145には記憶されず、PDEV群(前述の例ではストレージプール)に記憶される。
構成管理テーブル201は、P−VOL毎に用意されるテーブルであって、P−VOL及びそれに関したS−VOL及びR−VOLを管理するためのテーブルである。構成管理テーブル201には、例えばP−VOLと、それに関連したS−VOL及びP−VOLとのそれぞれのVOLについて、[ポート#](VOLに対応したターゲットデバイスに割り当てられているポートの番号)、[ターゲットデバイス#](VOLに対応したターゲットデバイスの番号)、[LDEV#](VOLを同定するための番号)、[JNLエリア#](複数のJNLエリアのうちVOLに対応付けられたJNLエリアの番号)、[状態](VOLの状態、例えば、R/W不可、Rのみ可といったアクセス制限状態)、[容量](VOLの容量)、[I/Oサイズ](前述したホストライトサイズ)、及び[プール#](VOLに割り当てられているストレージプールの番号)が記録される。
JNLエリア管理テーブル203は、P−VOL毎に用意されP−VOLに対応するオンライン更新差分データ、世代間差分データ及びマージ差分データの在り処を管理するためのテーブルである。具体的には、オンライン更新差分データ、世代間差分データ及びマージ差分データのそれぞれについて、[JNLサブエリア先頭アドレス](JNLサブエリアの先頭を表すアドレス)、[容量](データに対応したJNLサブエリアの容量)、[使用容量](データが占める容量)、[状態](例えば、JNLサブエアリアが普通に使える状態であれば“ノーマル”、JNLサブエリアが何らかの理由で使えなければ“閉塞”、JNLの空き容量(容量と使用容量との差分)が所定の閾値より少なければ“容量不足”など)、[JNCB先頭アドレス](JNCBの先頭を表すアドレス)、[容量](JNCBの容量)、及び、[使用容量](JNCB群が占める容量)がある。なお、「JNLサブエリア」とは、JNLエリア503の一部分である。また、世代間差分データ及びマージ差分データについては、世代毎に、[JNLサブエリア先頭アドレス]、[容量]、[使用容量]、[状態]、[JNCB先頭アドレス]、[容量]及び[使用容量]が登録される。
バックアップ世代管理テーブル205は、P−VOL毎に用意されており、P−VOLに関するバックアップデータを管理するためのテーブルである。バックアップ世代管理テーブル205には、例えば、[P−VOL#](P−VOLの番号)、[世代#](最新世代を表す番号)、[S−VOL#](P−VOLとペアを構成するS−VOLの番号)、[世代#](S−VOLの最新世代を表す番号)、[取得世代数](P−VOLについてのバックアップの世代の個数)、[バックアップ期間]及び[マージ世代数](何世代分の世代間差分データが溜まったときにマージ処理を実行するか)が記録される。また、バックアップ世代管理テーブル205には、P−VOLについての世代毎に、[世代#](世代を表す番号)、[バックアップ取得時間](いつバックアップが取得されたか(言い換えれば、その世代の確定の原因となったマーカ受領の日時))、[ユーザコメント](ユーザがバックアップを管理するためのユーザ任意の情報)、バックアップの[状態](例えば、バックアップに成功又は失敗した等)がある。
第一のJNL管理テーブル207は、P−VOL毎に用意され、P−VOLに対応したオンライン更新差分データ、世代間差分データ及びマージ差分データを管理するためのテーブルである。オンライン更新差分データについては、例えば、[先頭アドレス](JNCBの先頭アドレス)、[長さ](オンライン更新差分データのサイズ、例えば、オンライン更新差分データ要素の数)、[作成時刻](オンライン更新差分データ要素を記憶することになった時刻(例えば、最新世代の確定の原因となったマーカの受領時刻))が記録される。また、世代間差分データについては、[先頭アドレス]、[長さ]及び[作成時刻]が、世代毎に記録される。なお、ここでの[作成時刻]は、対応する世代間差分データがJNLサブエリアに格納された時刻である。同様に、マージ差分データについても、世代毎に、[先頭アドレス]、[長さ]及び[作成時刻]が、世代毎に記録される。なお、ここでの「世代」は、マージ差分データに対応する複数世代のうちの或る世代(例えば、最新又は最古の世代)であり、[作成時刻]は、対応するマージ差分データがJNLサブエリアに格納された時刻である。オンライン更新差分データなどのJNLデータに対応した[先頭アドレス]を参照することで、そのJNLデータに対応したJNCBを参照することが可能となる。
JNCB307は、世代間差分データ及びマージ差分データのそれぞれについて、世代毎に存在する。JNCB307は、世代に対応した差分BMとデータ要素の在り処とを管理するためのテーブルである。具体的には、例えば、JNCBテーブル307には、[デバイス#](対応するP−VOLの番号)、[長さ](対応するJNLデータ(オンライン更新差分データ、世代間差分データ又はマージ差分データ)の長さ)、差分BM(世代に対応した差分BM)、及び、対応するJNLデータを構成する各JNLデータ要素に対応したデータ格納アドレスが記録される。
図6は、オンライン更新差分データ、世代間差分データ及びマージ差分データのうちの世代間差分データを例に採ったデータ管理方式を示す。
図6に示すように、JNCBエリア501には、複数の世代に対応した複数のJNCBが記憶され、JNLエリア503には、それら複数の世代に対応した複数のJNLサブエリアが存在する。
指定された世代(例えば世代(i))に対応したJNCB307内の差分BMから、その世代のP−VOLのどこに更新があったかを知ることができる。また、その世代に対応したJNCB307に記録されている各データ格納アドレスを参照することで、その世代に対応した世代間差分データを構成する各データ要素がJNLエリア503内のどこに存在するのかを知ることができる。
図7は、ホストライトサイズ設定処理のフローを示す。
管理サーバ111が、ホスト計算機101に、ホストライトサイズの問合せを発行する(ステップ7001)。ホスト計算機101内の所定のコンピュータプログラム(上記問合せに応答してホストライトサイズを回答する機能を有したコンピュータプログラム)がCPU103で実行されることで、ホスト計算機101からホストライトサイズが回答される(ステップ7002)。その所定のコンピュータプログラムとしては、例えば、ファイルシステム或いはデータベース管理システム(DBMS)がある。
管理サーバ111は、回答されたホストライトサイズと、そのホストライトサイズに対応したホスト識別子(又はP−VOLの番号など)とを、第一ストレージシステム125(及び第二ストレージシステム161)に送信する。
ライトサイズ管理プログラム215(図4参照)が、管理サーバ111からのホスト識別子(又はP−VOLの番号)に対応した各P−VOLを特定し、その各P−VOLに対応した構成管理テーブル201に、管理サーバ111からのホストライトサイズを、I/Oサイズとして設定する(ステップ7004)。
そして、ライトサイズ管理プログラム215は、そのホストライトサイズを基に、フォーマット処理を実行する(ステップ7005)。フォーマット処理では、例えば、上記特定された各P−VOLに対応したJNLエリア管理テーブル203、バックアップ世代管理テーブル205、第一JNL管理テーブル207及びJNCB307が作成される。具体的には、例えば、P−VOLを構成するブロックのサイズや、JNLエリア503を構成するセグメントのサイズが、ホストライトサイズと同じサイズとして管理される。従って、JNCB307内の差分BMを構成するビットの数は、P−VOLがホストライトサイズで区切られることにより得られたブロックの数となる。これにより、例えば、オンライン更新差分データ要素のサイズ、S−VOLから退避されるデータ要素のサイズ、或いは、P−VOLからS−VOLへとコピーされるデータ要素のサイズは、それぞれ、ホストライトサイズとなる。
なお、I/Oサイズとしてホストライトサイズが設定されない場合、作成されるJNLデータ要素のサイズは、I/Oサイズの初期値(例えば、キャッシュメモリ147の単位管理サイズ、或いは、ファイルシステムの単位管理ブロックサイズ)である。また、ライトサイズ管理プログラム215が、ホスト計算機101からホストライトサイズを受けても良い。また、P−VOL毎に、ブロックのサイズや、P−VOLとペアを構成するS−VOLのブロックのサイズや、P−VOLに関わるJNLサブエリアのセグメントのサイズが異なることがある。なぜなら、P−VOLを使用するホスト計算機101(又はオペレーティングシステム)が異なれば、ホストライトサイズも異なることがあるためである。具体的には、例えば、第一種のホスト計算機からアクセスされるP−VOLのブロックのサイズは、その第一種のホスト計算機に対応した第一のホストライトサイズであり、第二種のホスト計算機からアクセスされるP−VOLのブロックのサイズは、その第二種のホスト計算機に対応した、第一のホストライトサイズとは異なる第二のホストライトサイズとなることがある。
図8は、P−VOLにライトデータ要素を書き込むライト処理のフローを示す。以下、ライトコマンドで指定されているP−VOLを、それぞれ、図8の説明において「対象P−VOL」と言う。また、以下の説明では、説明が冗長になるのを防ぐ観点から、世代Kに対応した対象のことを、その対象の名称の後に(K)を付けて表すことがある。具体的には、例えば、世代(j)に対応したJNCBを「JNCB(j)」と表し、世代(j−1)に対応したS−VOLのことを「S−VOL(j−1)」と表すことがある。
フロントエンドインタフェース127が、ホスト計算機101から、ライトコマンド及びライトデータ要素を受信し、メモリ137でライトデータ要素を記憶する(ステップ8001)。ライトコマンドは、プロセッサ143に転送される。
R/Wプログラム213(図4参照)が、ライトコマンドの受領に応答して、キャッシュメモリ147から第一のスロットを確保する(ステップ8002)。なお、「スロット」とは、キャッシュメモリ147の単位管理領域である。スロットのサイズは、例えば、ホストライトサイズよりも大きい。ホストライトサイズが未設定の場合には、初期値として例えばスロットのサイズでJNLデータ要素が作成される。
R/Wプログラム213が、対象P−VOL187Sの未確定時点に対応する差分BM(最新の差分BM)における、ライトコマンドで指定されているライト先ブロックに対応したビットを参照する(ステップ8003)。
もし、そのビットが更新済みを表していれば、R/Wプログラム213は、そのビットに対応したデータ格納アドレスを参照し、そのアドレスが表すセグメントを特定する(ステップ8004)。
一方、ステップ8003で参照したビットが未更新を表していれば、R/Wプログラム213は、対象P−VOL187Pに対応するJNLエリア管理テーブル203を参照することで、対象P−VOL187Pについてのオンライン更新差分データに対応するJNLサブエリア内の空きセグメントを特定する(ステップ8005)。なお、もし、空きセグメントが無ければ、新たにJNLサブエリアを確保することが可能である。
R/Wプログラム213が、キャッシュメモリ147から、第二のスロットを確保する(ステップ8006)。
R/Wプログラム213が、ライトコマンド完了を、ライトコマンドの送信元のホスト計算機101に報告する(ステップ8007)。それに応答して、ライトデータ要素がホスト計算機101から送られて来て、フロントエンドインタフェース127内のメモリ131に記憶される。
R/Wプログラム213が、フロントエンドインタフェース127内のメモリ131に記憶されたライトデータ要素を、第一及び第二のスロットにそれぞれ書き込む(ステップ8008)。
R/Wプログラム213が、対象P−VOL187Pのオンライン更新差分データに対応したJNCB307を更新する(ステップ8009)。具体的には、例えば、ライトデータ要素がオンライン更新差分データ要素として書き込まれる先のセグメント(図8の説明で「JNL先セグメント」と言う)に対応したデータ格納アドレスが追加される。また、例えば、ライト先ブロックが未更新であったならば、ライト先ブロックに対応したビット(差分BM内のビット)が、オン(更新済みを表す値)に更新される。
R/Wプログラム213が、第一のスロット内のライトデータ要素を、対象P−VOL187P内のライト先ブロックに書き込み、第二のスロット内のライトデータ要素を、上記JNL先セグメント(ステップ8004又は8005で特定されたセグメント)に書き込む(ステップ8010)。第一及び第二のスロット内のライトデータ要素は、同じタイミングで書き込まれてもよいし、異なるタイミングで書き込まれてもよい。
図9は、マーカ受領及びマーカ受領に応答して行われる処理のフローを示す。なお、図9及び次の図10の説明では、マーカで指定されているP−VOLを「対象P−VOL」と言い、対象P−VOLとペアを構成するS−VOLを「対象S−VOL」と言う。
フロントエンドインタフェース127が、ホスト計算機101からマーカを受領する(ステップ9001)。受領したマーカは、プロセッサ143に転送される。
マーカ処理プログラム223は、マーカの受領に応答して、対象P−VOL187P及び対象S−VOL187Sの世代をそれぞれ1インクリメントする(ステップ9002)。例えば、対象P−VOL187Pの世代が、jからj+1に更新され、対象S−VOL187Sの世代が、j−1からjに更新される。具体的には、例えば、バックアップ世代管理テーブル205において、対象P−VOL及び対象S−VOLのそれぞれの世代#が更新される。すなわち、対象P−VOL187Pの世代(j)が確定し、世代(j+1)は、未確定の世代である。
マーカ処理プログラム223は、第一のJNL管理テーブル207に、オンライン更新差分データ(j+1)に対応した[先頭アドレス]、[長さ]及び[作成時刻]を追加する(ステップ9003)。すなわち、オンライン更新差分データ(j+1)が格納されるJNLサブエリアが用意される。これにより、マーカ受領直のオンライン更新差分データ(j)が、オンライン更新差分データ(j+1)で上書きされないようにすることができる。
マーカ処理プログラム223は、バックアップ世代管理テーブル205に、確定した世代(j)の行を追加し、その行に、バックアップ取得時間(マーカ受領時刻)や、マーカ受領時に同時に受領したユーザコメントなどを登録する(ステップ9004)。
マーカ処理プログラム223は、第一のJNL管理テーブル207に、世代間差分データについて世代(j−1)の行を追加する(ステップ9005)。その際、S−VOLの[I/Oサイズ](つまりホストライトサイズ)に基づいて、JNCB(j−1)が作成される(具体的には、例えば、差分BM(j−1)を構成するビットの数が、その[I/Oサイズ]のブロックの数とされる)。追加された行には、JNCB(j−1)の先頭位置を[先頭アドレス]が書かれる。JNCB(j−1)は、ソート処理に基づき更新される。そのソート処理を、図10を参照して説明する。
図10は、ソート処理のフローを示す。なお、図10に示すオンライン更新差分データ及びそれに対応する差分BMは、世代(j)に対応している。
マーカ受領に応答して、JNLソートプログラム217(図4参照)が起動する。JNLソートプログラム217が、図10に示す流れで、ソート処理を実行する。
すなわち、JNLソートプログラム217は、対象P−VOL187Pに対応した差分BM(j)におけるビットを、先頭ビットから順次参照する(ステップ10001)。参照したビットがオンであれば(更新済みを表していれば)、そのビットについて、ステップ10003が行われ、参照したビットがオフであれば(未更新を表していれば)、次のビットが参照される(ステップ10002)。
JNLソートプログラム217は、差分BM(j)におけるオンのビットに対応した、差分BM(j−1)におけるビットをオンにする(ステップ10003)。
JNLソートプログラム217は、JNCB(j−1)内に、ステップ10003でオンにしたビットに対応するデータ格納アドレスを追加する(ステップ10004)。そのデータ格納アドレスは、ステップ10005での退避先のセグメント(JNLサブエリア(j−1)内のセグメント)を表す。その退避先のセグメントは、直前回の退避先セグメントの次のセグメントである。これにより、対象S−VOL(j)から退避された各データ要素がJNLサブエリア(j−1)内の連続したセグメントに書き込まれることになる。
JNLソートプログラム217は、差分BM(j−1)におけるオンにされたビットに対応したブロック(対象S−VOL187S内のブロック)に記憶されているデータ要素“A”を、そのブロックから上記退避先のセグメントに退避する(ステップ10005)。
JNLソートプログラム217は、退避元のブロック(対象S−VOL(j)内のブロック)に、差分BM(j)におけるオンのビットに対応したデータ格納アドレスが表すセグメント(JNLサブエリア(j)内のセグメント)に記憶されているデータ要素“B”を書き込む(ステップ10006)。
以上のステップ10005及び10006により、オンライン更新差分データ要素“B”が対象S−VOL(j)内のブロックに書き込まれることに起因したCOWで、そのブロックに記憶されているデータ要素“A”がJNLサブエリア(j−1)内のセグメントに退避され、オンライン更新差分データ要素“B”が、対象S−VOL(j)内のブロックに書き込まれる。
以上のように、差分BM(j)を構成するビットが、ブロックのアドレス順に参照され、オンのビットが検出される都度に、ステップ10003乃至10006が行われることで、JNLデータ要素がソートされる。すなわち、JNLサブエリア(j)に時系列に連続していたオンライン更新差分データ要素が、ブロックのアドレス順に対象S−VOLに反映されることで、JNLサブエリア(j−1)に、世代間差分データ要素がブロックのアドレス順に連続することになる。
なお、以上のソート処理が終了した後、オンライン更新差分データに対応した差分BMを構成する全てのビットがオフとされる(オンライン更新差分データ要素がS−VOLに書き込まれる都度に、そのデータ要素に対応したビットがオフとされても良い)。
図11は、世代間差分データのマージ処理のフローである。図12は、そのマージ処理に関するデータ要素の動きを示す。以下、図11及び図12を参照して、マージ処理を説明する。
図12に示すように、JNLマージプログラム219(図4参照)は、或る世代数分(例えば(m+1)世代(世代(N)〜世代(N+m))の世代間差分データが溜まっていることを検出したときに、(m+1)世代分の世代間差分データをマージ差分データに変換するマージ処理を開始する。なお、マージ処理の開始の契機として、(m+1)世代分の世代間差分データが溜まっていることが検出されたということは一例にすぎず、他の契機、例えば、直前回のマージ処理から所定期間が経過したであっても良い。
JNLマージプログラム219は、バックアップ世代管理テーブル205でマージ対象の世代(N)〜世代(N+m)の[状態]を“マージ中”にする。そして、JNLマージプログラム219は、マージ対象の最古の世代(N)の世代間差分データを、対象として選択する(ステップ11001)。
JNLマージプログラム219は、対象の世代間差分データに対応した差分BM(N)の先頭ビットを参照位置として決定する(ステップ11002)。
JNLマージプログラム219は、差分BM(N)について参照位置とされているビットがオンであれば、ステップ11004を実行し、そのビットがオフであれば、ステップ11009を実行する。以下、図11及び図12の説明において、その参照位置とされているビットを「対象ビット」と言い、そのビットがオンであれば「対象オンビット」と言い、そのビットがオフであれば「対象オフビット」と言う。
JNLマージプログラム219は、今回作成するマージ差分データに対応した差分BM(以下、図11及び図12の説明において、「マージ差分BM」と言う)について、上記対象ビットと同じ位置にあるビットがオフであれば、ステップ11005を実行し、そのビットがオンであれば、ステップ11009を実行する。
JNLマージプログラム219は、差分BM(N)における対象オンビットに対応したデータ格納アドレスを探し(ステップ11005)、そのアドレスを特定する(ステップ11006)。そして、JNLマージプログラム219は、そのアドレスが示すセグメントに記憶されている世代間差分データ要素を、そのセグメントから、今回作成されるマージ差分データに対応したJNLサブエリア内のセグメント(直前回のコピー先のセグメントの次のセグメント)にコピーする(ステップ11007)。そして、JNLマージプログラム219は、マージ差分BMにおける、上記対象ビットと同じ位置にあるビットを、オンにする(ステップ11008)。
JNLマージプログラム219は、差分BM(N)において、これまでの参照位置の次の位置に未参照のビットがあれば(ステップ11009でY)、次のビットを参照位置として(ステップ11010)、ステップ11003を実行する。次の位置に未参照のビットが無ければ(ステップ11009でN)、その世代(N)についての処理が終了となり(ステップ11011)、次の世代があれば(ステップ11012でY)、次の世代(N+1)について、ステップ11001が行われる。もし、次の世代が無ければ(すなわち、直前回に処理された世代が(N+m)であれば(ステップ11012でN)、マージ処理の終了となる。
以上の流れによれば、図12に示すように、マージ対象の世代(N)〜(N+m)のうちの古い世代に対応した世代間差分データから先に処理される。世代間差分データに対応した差分BMではオンビットであって、マージ差分BMにおいて、そのオンビットに対応したビットがオフであれば、そのオンビットに対応した世代間差分データ要素が、マージ差分データに対応したJNLサブエリアにコピーされる。一方、世代間差分データに対応した差分BMではオンビットであり、マージ差分BMにおいても、そのオンビットに対応したビットがオンであれば、世代間差分データに対応した差分BM内のオンビットに対応したデータ要素はコピーされない。
要するに、古い世代に対応した世代間差分データ要素ほど、優先的に、マージ差分データに対応したJNLサブエリアにコピーされる。具体的には、例えば、図12によれば、世代(N)と世代(N+m)の2つの世代について、P−VOLの先頭ブロックに対応した世代間差分データ要素“A”及び“G”が存在している。この場合、前述したように、古い世代に対応した世代間差分データ要素ほど優先されるので、世代(N)についてのデータ要素“A”は、マージ差分データに対応したJNLサブエントリにコピーされるが、その世代(N)よりも新しい世代についてのデータ要素“G”は、そのJNLサブエントリにはコピーされない。
なお、このマージ処理では、古い世代から先に処理されるが、新しい世代から先に処理されても良い。但し、この場合、世代間差分データに対応した差分BMではオンビットであり、マージ差分BMにおいても、そのオンビットに対応したビットがオンであれば、世代間差分データに対応した差分BM内のオンビットに対応したデータ要素が、マージ差分データに対応したJNLサブエリアに記憶されている、オンビットに対応したマージ差分データ要素に上書きされても良い。また、マージ差分データが作成された場合、そのマージ差分データの基になった複数世代分の世代間差分データは、マージ差分データの作成完了の直後に、又は計算機(例えば、ホスト計算機101又は管理サーバ111)からの指示に応答して、削除されても良い。
また、世代間差分データやマージ差分データが古い世代から削除されて良い。この場合、例えば、図示しないJNL削除プログラムが、削除対象の世代に対応したJNCB及びJNLデータを解放し空きの領域として管理する。また、JNL削除プログラムは、第一のJNL管理テーブル207及びバックアップ世代管理テーブル205から、削除対象の世代に対応したエントリを削除する。
図13は、リストア処理のフローを示す。
ユーザによって指定されたリストア対象世代を有するリストア要求を、リストアプログラム221(図4参照)が、ホスト計算機101又は管理サーバ111から受領する。具体的には、例えば、リストアプログラム221が、ホスト計算機101又は管理サーバ111からの要求に応答して、バックアップ世代管理テーブル205などの情報を、ホスト計算機101又は管理サーバ111に送信する。ユーザは、そのテーブル205などにある[世代#]、[バックアップ取得時間]及び[ユーザコメント]などを参照して、リストア対象世代を決定し、決定したリストア対象世代をホスト計算機101又は管理サーバ111に指定する。その指定されたリストア対象世代(N)を有するリストア要求が、ホスト計算機101又は管理サーバ111からリストアプログラム221に送られる。
リストアプログラム221は、リストア要求に応答して、リストア処理を実行する。リストア処理では、R−VOLアクセス管理テーブル209が作成されるR−VOLアクセス管理テーブル209は、複数のアドレスレコードで構成される。各アドレスレコードはR−VOLを構成する各ブロック(仮想的なブロック)に対応し、故に、差分BMにおける各ビットに対応する。
リストアプログラム221は、リストア要求に応答して、世代間差分データ(もしくはマージ差分データ)の差分BMを、リストア対象世代(N)から順次新しい世代(N+1)、(N+2)へと参照する(ステップ12001)。以下、参照先の差分BMがリストア対象世代(N)である場合を例に採り説明する。
リストアプログラム221は、差分BM(N)の先頭ビットから、オンかオフかの判定を行う(ステップ12002)。参照したビットがオンだった場合、リストアプログラム221は、そのオンビットに対応したアドレスレコードを参照する(ステップ12003)。そのレコードに無効なアドレス(例えばNull)があれば、リストアプログラム221は、参照したオンビットに対応するデータ格納アドレスを、JNCB(N)内から読み出して(ステップ12004)、そのレコードに登録し(ステップ12005)、一方、そのレコードに有効なアドレスが登録済みであれば、次のビットを参照する(ステップ12006)。
以上のステップ12002乃至12006が、リストア対象世代(N)だけでなく、それよりも新しい世代(N+1)及び(N+2)についても行われることでR−VOLアクセス管理テーブル209が完成する。すなわち、例えば、ステップ12006において、参照先となる次のビットが無ければ、リストア対象世代(N)の次の世代(N+1)について、ステップ12002乃至12006が行われる。
以上のようにしてR−VOLアクセス管理テーブル209が作成されたならばR−VOLへのリード処理(及びライト処理)が可能になる。この場合、構成管理テーブル201において、R−VOLに対応した[状態]が“ノーマル”(つまりR/W可)となる(それ以前は、その[状態]は、“R/W不可”である)。
ちなみに、R−VOLアクセス管理テーブル209を作成することに代えて、実VOLとしてのR−VOLが用意されても良い。この場合は、例えば、R−VOLアクセス管理テーブル209を作成する方法と同じ方法でデータ格納アドレスが特定され、特定されたアドレスが表すセグメントから、R−VOL(実VOL)内の、そのアドレスが対応するビットに対応したブロックに、データ要素がコピーされても良い。
図14は、R−VOL管理テーブル209を利用したリード処理のフローを示す。
R/Wプログラム213(図4参照)が、ホスト計算機101から、図13に示すR−VOL187Rを指定したリードコマンドを受信する(ステップ14001)。
R/Wプログラム213は、そのリードコマンドで指定されているリード元ブロックに対応したレコード(R−VOLアクセス管理テーブル209内のレコード)を参照する(ステップ14002)。
ステップ14002の結果、参照先のレコードに有効なアドレスが登録されていれば、R/Wプログラム213は、そのアドレスが表すセグメントからデータ要素を読出し、そのデータ要素をホスト計算機101に送信する(ステップ14003)。
一方、ステップ14003の結果、参照先のレコードに無効なアドレスが登録されていれば、R/Wプログラム213は、R−VOLに対応するS−VOL(フルバックアップボリューム)内の、上記リード元ブロックと同じアドレスのブロックから、データ要素を読出し、そのデータ要素をホスト計算機101に送信する(ステップ14004)。
図15は、R−VOL管理テーブル209を利用したライト処理のフローを示す。
R/Wプログラム213が、ホスト計算機101から、図13に示すR−VOL187Rを指定したライトコマンドを受信する(ステップ15001)。R/Wプログラム213は、そのライトコマンドで指定されているライト先ブロックに対応したレコード(R−VOLアクセス管理テーブル209内のレコード)を参照する。
参照先のレコードに有効なアドレス“アドレス3”が登録されていれば、R/Wプログラム213は、ストレージプール189A又は189Bから、ホストライトサイズ分の領域を確保し(ステップ15002)、上記の有効なアドレス“アドレス3”を、その確保された領域を表すアドレス“アドレスP1”に変更する(ステップ15003)。そして、R/Wプログラム213は、その確保されている領域に、ライトデータ要素を書き込む(ステップ15004)。
なお、参照先のレコードに無効なアドレスが登録されていれば、その無効なアドレスが、ストレージプール189A又は189B内の確保された領域を表すアドレスに変更される。
図20は、R−VOL有りでのソート処理のフローを示す。
マーカを受領すると、オンライン更新差分データがS−VOLにコピーされることで、S−VOLに格納されていたデータ要素が退避される。このため、R−VOLが有る状態でマーカが受領されると、R−VOLアクセス管理テーブルに格納されている各アドレスと各データ要素との対応関係が変わってしまうおそれがある。具体的には、例えば、R−VOLアクセス管理テーブルにおける参照先レコードに無効なアドレスが登録されているが故に、その参照先レコードに対応したブロック(S−VOL内のブロック)に記憶されているデータ要素のリードが期待できるが、上記マーカ受領によりそのブロックにオンライン更新差分データ要素がコピーされることになると、そのデータ要素がJNLサブエリアに退避されるため、期待されるデータ要素をS−VOLから取得できなくなる。
そのため、図20を参照して説明する処理が行われる。
まず、ステップ10001〜10002が行われる(ステップ20001)。
次に、JNLソートプログラム217は、R−VOLにアクセスがあった場合に、対応するS−VOLにアクセスすることになるかどうかを判断する(ステップ20002)。具体的には、JNLソートプログラム217は、R−VOLアクセス管理テーブル209に、無効なアドレスが登録されているか否かを判断する。
その結果、無効なアドレスが見つかれば、JNLソートプログラム217は、無効なアドレスが登録されているレコードに対応したブロックを特定し、特定したブロックに対応するデータ各要素アドレス(差分BM(j−1)内のビットに対応したデータ格納アドレス)“アドレス3”を参照する。そして、JNLソートプログラム217は、そのアドレス“アドレス3”が表すセグメントに、無効なアドレスが登録されているレコードに対応したブロック(S−VOL内のブロック)に記憶されているデータ要素“A”を退避する(ステップ20003)。JNLソートプログラム217は、R−VOLアクセス管理テーブル209において、無効なアドレス“Null”を、データ要素“A”の退避先セグメントを表すアドレス“アドレスP1”に変更する(ステップ20004)。そして、JNLソートプログラム217は、退避元のブロックに、そのブロックに対応したオンライン更新差分データ要素“B”を書き込む(ステップ20005)。
以上の処理により、R−VOL有りの状態でマーカを受領しても、R−VOL内の各ブロックと各データ要素との対応関係を維持したソート処理を行うことができる。