(57)【特許請求の範囲】
【請求項１】
複数の物理記憶デバイスと、
キャッシュメモリと、
それらに接続された制御デバイスと、
前記複数の物理記憶デバイスの少なくとも一部の記憶領域であるバッファと
を有し、
前記制御デバイスは、前記バッファへの新たな格納対象の対象データ要素が発生した場合に、
（ｘ１）転送済状態のバッファ領域が前記バッファにあるか否かを判断し、
（ｘ２）（ｘ１）の判断結果が否定の場合、前記バッファにおけるいずれかの未使用状態のバッファ領域の状態を使用中状態へ変更して、当該バッファ領域に前記キャッシュメモリ内のキャッシュ領域を割り当て、割り当てられたキャッシュ領域に前記格納対象の対象データ要素を格納し、
（ｘ３）（ｘ１）の判断結果が肯定の場合、前記転送済状態のバッファ領域の状態を使用中状態に変更した上で、既に割り当てられているキャッシュ領域に前記格納対象の対象データ要素を格納し、
前記制御デバイスは、使用中状態のバッファ領域に割り当てられる前記キャッシュ領域内の対象データ要素を所定の対象に転送し、その使用中状態のバッファ領域の状態を使用中状態から転送済状態に変更する、
ストレージシステム。
【請求項２】
前記バッファ領域は、複数のブロックに分割されており、
前記複数のブロックには、前記キャッシュメモリの記憶容量よりも小さい第１記憶容量である複数の小サイズブロックが含まれる
請求項１に記載のストレージシステム。
【請求項３】
前記複数のブロックには、前記第１記憶容量よりも大きい第２記憶容量の大サイズブロックが１以上含まれる
請求項２に記載のストレージシステム。
【請求項４】
前記小サイズブロックは、前記大サイズブロックよりも前記バッファの先頭側の記憶領域に割当てられている
請求項３に記載のストレージシステム。
【請求項５】
前記バッファは、ストレージシステム間のリモートコピーで転送されるデータであってコピー元又はコピー先のボリュームに格納されるデータを含んだジャーナルが格納されるジャーナルボリュームであり、
前記対象データ要素は、前記ジャーナル内の前記データである
請求項１乃至４のうちのいずれか１項に記載のストレージシステム。
【請求項６】
前記物理記憶デバイスに基づく複数の論理領域があり、
前記バッファは、仮想的な論理ボリュームである仮想ボリュームであり、
前記制御デバイスは、前記対象データ要素の格納先の領域であり前記仮想ボリュームにおける仮想領域に、前記複数の論理領域のいずれかを割り当てる、
請求項１乃至４のうちのいずれか１項に記載のストレージシステム。
【請求項７】
複数の物理記憶デバイスとキャッシュメモリとを有するストレージシステムでのデータ管理方法であって、
前記複数の物理記憶デバイスの少なくとも一部の記憶領域であるバッファへの新たな格納対象の対象データ要素が発生した場合に、
（ｘ１）転送済状態のバッファ領域が前記バッファにあるか否かを判断し、
（ｘ２）（ｘ１）の判断結果が否定の場合、前記バッファにおけるいずれかの未使用状態のバッファ領域の状態を使用中状態へ変更して、当該バッファ領域に前記キャッシュメモリ内のキャッシュ領域を割り当て、割り当てられたキャッシュ領域に前記格納対象の対象データ要素を格納し、
（ｘ３）（ｘ１）の判断結果が肯定の場合、前記転送済状態のバッファ領域の状態を使用中状態に変更した上で、既に割り当てられているキャッシュ領域に前記格納対象の対象データ要素を格納し、
使用中状態のバッファ領域に割り当てられる前記キャッシュ領域内の対象データ要素を所定の対象に転送し、その使用中状態のバッファ領域の状態を使用中状態から転送済状態に変更する、
データ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、物理記憶デバイスの少なくとも一部に基づく記憶領域に一時的にデータを格納する技術に関する。
【背景技術】
【０００２】
ストレージシステムにおいては、複数の不揮発性の物理記憶デバイス（例えばＨＤＤ（Hard Disk Drive））に基づく複数の論理記憶デバイスとして複数の論理ボリューム（以下、ボリューム）を有することができる。複数のボリュームに、バッファボリュームとして使用されるボリュームがある。バッファボリュームは、データが一時的に格納されるバッファのような、一時的な記憶領域として利用されるボリュームである（例えば、特許文献１参照）。
【０００３】
ストレージシステムは、物理記憶デバイスの他に、一般に、キャッシュメモリ（例えば揮発性のメモリ）を備える。ストレージシステムは、例えば、ホスト計算機からボリュームを指定したライト要求を受信し、ライト要求に従う書込み対象のデータ(ライトデータ)をキャッシュメモリに格納し、その後に、ホストへ応答を返す。以下、ホスト計算機からのＩ／Ｏ要求（ライト要求又はリード要求）で指定され得るボリュームを、バッファボリュームと区別するために、通常ボリュームと言う。ストレージシステムは、ホストへの応答後に、通常ボリュームの基になっている物理記憶デバイスにキャッシュメモリからライトデータを格納する。なお、応答は、キャッシュメモリから通常ボリューム（通常ボリュームの基になっている物理記憶デバイス）にライトデータが格納された後に、ホストへ返されても良い。
【０００４】
また、ストレージシステムは、通常ボリュームに限らず、バッファボリュームにデータを格納する場合にも、同様に、バッファボリュームに書き込まれるデータをキャッシュメモリに格納し、その後に、任意のタイミングで、そのデータをキャッシュメモリからバッファボリューム（バッファボリュームの基になっている物理記憶デバイス）に格納することができる。
【０００５】
バッファボリュームとしては、例えば、ジャーナルボリュームがある。リモートコピーは、正ストレージシステムのコピー元ボリューム（正ボリューム）の複製を副ストレージシステムのコピー先ボリューム（副ボリューム）へコピーすることである。リモートコピーでは、コピー元ボリュームのデータが、ジャーナルとして、ジャーナルボリュームに格納される。ジャーナルボリュームは、例えば、正ボリュームに対する書込みに対応するジャーナルが、先頭の領域から順次格納されていくように使用され、ジャーナルボリュームの末尾の領域まで格納された後は、再び先頭の領域から格納されるように利用される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許出願公開第２００７／００７９０８８号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ボリュームに格納されるデータをキャッシュメモリに格納するためには、データの書き込み先となるボリューム領域（ボリュームの一部分）について、キャッシュ領域（キャッシュメモリの一部分）が割り当てられる。キャッシュ領域の割り当ては、ストレージシステムが有する制御デバイス（典型的にはプロセッサ）によって行われる。
【０００８】
ボリュームにデータを格納することになる都度に、書込み先のボリューム領域について新規にキャッシュ領域が割り当てられるようになっている場合、ジャーナルボリュームにジャーナルを格納することになる都度に、ジャーナルの格納先のボリューム領域について新規にキャッシュ領域が割り当てられる。このため、制御デバイスへの負荷がかかる。
【０００９】
また、キャッシュメモリは有限であるため、新規にキャッシュ領域を割り当てるためには、適宜、転送済みのジャーナルが格納されている割当て済みのキャッシュ領域を解放する必要がある。これも、制御デバイスへの負荷の原因の１つである。
【課題を解決するための手段】
【００１０】
ストレージシステムは、複数の物理記憶デバイスと、キャッシュメモリと、それらに接続された制御デバイスと、バッファ部とを有する。バッファ部は、複数の物理記憶デバイスの少なくとも一部の記憶領域を用いて形成され、所定の対象に転送するための１以上の対象データ要素を一時的に格納するための記憶領域である。制御デバイスは、下記（Ａ）乃至（Ｃ）の処理、
（Ａ）前記バッファ部における、対象データ要素の書き込み先の記憶領域であるバッファ領域に割り当てられた、前記キャッシュメモリの一部分であるキャッシュ領域に、対象データ要素を格納する、
（Ｂ）対象データ要素をキャッシュメモリから送信する、
（Ｃ）新たな対象データ要素が発生した場合に、送信済みの対象データ要素が格納されておりキャッシュ領域が割当て済みであるバッファ領域に対して、前記新たな対象データ要素が格納される傾向が高くなるような制御を行う、
を行う。
【図面の簡単な説明】
【００１１】
【図１】図１は、従来例に係るジャーナルボリュームにおけるジャーナルの管理方法を説明する図である。
【図２】図２は、従来例に係るジャーナルボリュームにおけるジャーナルを管理する管理情報の一例を示す図である。
【図３】図３は、従来例における第１の課題を説明する図である。
【図４】図４は、従来例における第２の課題を説明する図である。
【図５】図５は、課題を解決する第１の解決方法を説明する図である。
【図６】図６は、課題を解決する第１の解決方法におけるキャッシュ部の状態を説明する図である。
【図７】図７は、課題を解決する第２の解決方法を説明する図である。
【図８】図８は、課題を解決する第２の解決方法におけるキャッシュ部の状態を説明する図である。
【図９】図９は、実施例１の概要を説明する図である。
【図１０】図１０は、実施例１におけるジャーナルボリュームの状態を説明する図である。
【図１１】図１１は、実施例１に係る計算機システムの全体構成図である。
【図１２】図１２は、実施例１に係るストレージシステムを中心とした計算機システムの一部の構成図である。
【図１３】図１３は、実施例１に係るボリュームのコピー及びジャーナルボリュームを説明する図である。
【図１４】図１４は、実施例１に係るデータライト時の動作の概要を説明する図である。
【図１５】図１５は、実施例１に係るメモリパッケージの詳細構成図である。
【図１６】図１６は、実施例１に係るシーケンス番号情報の一例を示す図である。
【図１７】図１７は、実施例１に係るブロック管理ビットマップの一例を示す図である。
【図１８】図１８は、実施例１に係るカレントブロック情報の一例を示す図である。
【図１９】図１９は、実施例１に係るカレントアドレス情報の一例を示す図である。
【図２０】図２０は、実施例１に係るブロック管理ビットマップ、カレントブロック、カレントアドレスを説明する図である。
【図２１】図２１は、実施例１に係るブロック内最大シーケンス番号情報の一例を示す図である。
【図２２】図２２は、実施例１に係るライト時処理のフローチャートである。
【図２３】図２３は、実施例１に係るＪＮＬデータ格納アドレス決定処理のフローチャートである。
【図２４】図２４は、実施例１に係るブロック解放処理のフローチャートである。
【図２５】図２５は、実施例１に係るＪＮＬリード処理のフローチャートである。
【図２６】図２６は、実施例１に係るリストア処理のフローチャートである。
【図２７】図２７は、実施例２に係る制御情報部の詳細図である。
【図２８】図２８は、実施例２に係るプログラム部の詳細図である。
【図２９】図２９は、実施例２に係るＪＮＣＢブロック管理情報の一例を示す図である。
【図３０】図３０は、実施例２に係るＪＮＣＢカレントライトブロック情報の一例を示す図である。
【図３１】図３１は、実施例２に係るＪＮＣＢカレントリードブロック情報の一例を示す図である。
【図３２】図３２は、実施例２に係るＪＮＣＢカレントライトアドレス情報の一例を示す図である。
【図３３】図３３は、実施例２に係るＪＮＣＢカレントリードアドレス情報の一例を示す図である。
【図３４】図３４は、実施例２に係るブロック及びアドレスを説明する図である。
【図３５】図３５は、実施例２に係るＪＮＣＢ格納アドレス決定処理のフローチャートである。
【図３６】図３６は、実施例２に係るＪＮＬリード処理のフローチャートである。
【図３７】図３７は、実施例２に係るリストア処理のフローチャートである。
【図３８】図３８は、実施例３の概要を説明する図である。
【図３９】図３９は、実施例３に係る制御情報部の詳細図である。
【図４０】図４０は、実施例３に係るＪＮＬデータ格納アドレス決定処理のフローチャートである。
【図４１】図４１は、実施例３に係る変形例を説明する図である。
【図４２】図４２は、実施例４に係る仮想ボリュームを説明する図である。
【図４３】図４３は、実施例４に係るプールテーブルの一例を示す図である。
【図４４】図４４は、実施例４に係る仮想ボリューム管理テーブルの一例を示す図である。
【図４５】図４５は、実施例４に係るブロック解放処理のフローチャートである。
【図４６】図４６は、実施例４に係るページ解放処理のフローチャートである。
【図４７】図４７は、実施例４に係るブロックとページの対応関係の一例を示す図である。
【図４８】図４８は、実施例４の変形例に係るページ解放処理のフローチャートである。
【図４９】図４９は、実施例４に係るジャーナルボリュームの拡張を説明する第１の図である。
【図５０】図５０は、実施例４に係るジャーナルボリュームの拡張を説明する第２の図である。
【図５１】図５１は、実施例５の概要を説明する図である。
【図５２】図５２は、実施例５に係る制御情報部の詳細図である。
【図５３】図５３は、実施例５に係るＪＮＬデータ格納アドレス決定処理のフローチャートである。
【図５４】図５４は、実施例５に係るＪＮＬリード処理のフローチャートである。
【図５５】図５５は、実施例５に係るリストア処理のフローチャートである。
【発明を実施するための形態】
【００１２】
以下、幾つかの実施例を、図面を参照して説明する。なお、以下に説明するいずれの実施例も請求の範囲にかかる発明を限定するものではなく、また実施例の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１３】
なお、以後の説明では「ａａａテーブル」等の表現にて情報を説明するが、これら情報は、テーブル等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「ａａａテーブル」等の情報を「ａａａ情報」と呼ぶことができる。
【００１４】
また、以後の説明では「プログラム」を主語として説明を行う場合があるが、プログラムはプロセッサによって実行されることで定められた処理を行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理は、そのプログラムを実行するプロセッサ又はそれを有する装置（例えば、制御デバイス、コントローラ、ストレージシステム）が行う処理としてもよい。また、プロセッサがプログラムを実行することにより行われる処理の一部または全ては、プロセッサに代えて又は加えてハードウェア回路によって行われても良い。また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディアによって各計算機にインストールされてもよい。
【実施例１】
【００１５】
まず、従来例における課題及び実施例１の概要を説明する。
【００１６】
図１は、従来例に係るジャーナルボリュームにおけるジャーナルの管理方法を説明する図である。
【００１７】
従来例に係るジャーナル管理方法においては、主ストレージシステム２００Ａでは、ＪＮＬ（Journal）を一時的に格納するためのバッファ領域として利用されるＪＶＯＬ（Journal Volume）２５２をラップアラウンド方法により利用する。すなわち、生成されたＪＮＬは、ＪＶＯＬ２５２の先頭のアドレスから順次格納され、ＪＮＬが最後のアドレスまで格納された後に、再び先頭のアドレスから格納される。一方、ＪＶＯＬ２５２の先頭のアドレスのＪＮＬから、順次取り出されて副ストレージシステム２００Ｂに送信される。
【００１８】
図２は、従来例に係るジャーナルボリュームにおけるジャーナルを管理する管理情報の一例を示す図である。
【００１９】
図１に示すジャーナル管理方法を実現するために、管理情報１０００が管理されている。管理情報１０００は、種別１０００ａと、ＪＶＯＬ番号（＃）１０００ｂと、アドレス１０００ｃとのフィールドを有するレコードを格納する。
【００２０】
種別１０００ａは、アドレスの種別を格納する。この例では、ＪＮＬを格納すべき空き領域の先頭のアドレスを示す先頭アドレスと、送信済みのＪＮＬが格納されている終端のアドレスを示す終端アドレスが格納される。ＪＶＯＬ＃１０００ｂは、ＪＶＯＬのボリューム番号を格納する。アドレス１０００ｃは、対応するアドレスを格納する。ボリューム番号とは、ストレージシステム２００内で、ボリュームを一意に識別するための番号である。
【００２１】
ジャーナル管理方法においては、先頭アドレス、終端アドレスを用いて、副ストレージシステム２００Ｂへ転送されていないＪＮＬが格納されている領域が上書きされないように管理される。
【００２２】
図３は、従来例における第１の課題を説明する図である。なお、同図においては、ボリューム２５２、キャッシュ部２２３内の矩形は、ＪＮＬが格納される領域を示し、ＪＮＬが実際に格納されている領域については、実線で示し、実際に格納されていない領域については、破線で示している。
【００２３】
図３の状態１に示すように、ＪＶＯＬ２５２の先頭に格納させるＪＮＬが発生すると、ＪＮＬは、ＪＶＯＬ２５２の対応するアドレスの領域に格納されずに、当該アドレスに割当てられたキャッシュ部２２３の領域に格納される。
【００２４】
ＪＮＬがキャッシュ部２２３に格納された後に、所定の時間が経過すると、状態２に示すように、キャッシュ部２２３のデータがＪＶＯＬ２５２に格納される、すなわち、デステージされる。
【００２５】
ここで、デステージされたＪＮＬが、既に副ストレージシステム２００Ｂに転送されている可能性がある。副ストレージシステム２００Ｂに転送されているＪＮＬは、ＪＶＯＬ２５２に格納させる必要のないデータであり、このようなデータについて、デステージする処理を行うことにより、デステージ処理に関わるプロセッサ資源やＨＤＤ２４０資源等を無駄にしてしまうこととなり、利用効率を低減させてしまうという課題(第１の課題)がある。
【００２６】
図４は、従来例における第２の課題を説明する図である。
【００２７】
図４の状態１に示すように、新たなＪＮＬが逐次発生すると、キャッシュ部２２３の全ての領域に対して、ＪＶＯＬ２５２の領域が割当てられるようになる。
【００２８】
この後、さらに新たなＪＮＬが発生すると、状態２に示すように、キャッシュ部２２３の領域が解放されて、当該領域が、ＪＶＯＬ２５２の新たな領域に割当てられて、当該領域に対してＪＮＬが格納される。この際に、キャッシュ部２２３の解放される領域に格納されているＪＮＬがダーティデータ（ＪＶＯＬ２５２にデステージされていないデータ）である場合には、ＪＮＬをＪＶＯＬ２５２にデステージした後に、当該領域が解放されて利用される一方、クリーンデータである場合には、当該領域が直ちに解放されて利用される。キャッシュ部２２３上のデータと、ＨＤＤ２４０に格納されているデータが同一である場合に、当該キャッシュ部２２３上のデータが、「クリーンデータ」である。また、未だＨＤＤ２４０に書き込まれていない、キャッシュ部２２３上のデータが、「ダーティデータ」である。
【００２９】
この場合においては、キャッシュ部２２３の領域の解放や、ＪＶＯＬ２５２の新たな領域に対するキャッシュ部２２３の領域の割当て処理が行われることとなり、これら処理を行うプロセッサ資源への負荷があり、プロセッサ資源の利用効率を低減させてしまうという課題（第２の課題）がある。
【００３０】
図５は、課題を解決する第１の解決方法を説明する図である。図６は、課題を解決する第１の解決方法におけるキャッシュ部の状態を説明する図である。
【００３１】
第１の解決方法においては、図５に示すように、例えば、プロセッサ２１１が、ＪＶＯＬ２５２に格納されたＪＮＬのうち、副ストレージシステム２００Ｂに転送したＪＮＬ、すなわち転送済のＪＮＬが格納されるＪＶＯＬ２５２の領域に割当てられているキャッシュ部２２３の領域を解放する。ここで、転送済のＪＮＬの格納されているＪＶＯＬ２５２の領域は、管理情報１０００の先頭アドレスと、終端アドレスとにより特定することができ、これらのデータを格納しているキャッシュ部２２３の領域は、ＪＶＯＬ２５２と、キャッシュ部２２３の領域との割当て関係に基づいて特定することができる。
【００３２】
この解決方法によると、図６の状態１に示すように、ＪＶＯＬ２５２の領域に、キャッシュ部２２３の領域が割当てられている場合において、転送済みとなったＪＮＬを格納するＪＶＯＬ２５２の領域に割当てられていたキャッシュ部２２３の領域が解放されて状態２に示すようになる。このように、転送済みのＪＮＬがキャッシュ部２２３の領域に存在しないこととなるので、当該ＪＮＬについてのデステージが行われなくなり、プロセッサ資源やＨＤＤ資源に対する無駄な負荷を軽減することができる。
【００３３】
図７は、課題を解決する第２の解決方法を説明する図である。図８は、課題を解決する第２の解決方法におけるキャッシュ部の状態を説明する図である。
【００３４】
ここで、第２の解決方法は、回線障害等が発生しない場合は、ＪＮＬを作成して、ＪＶＯＬ２５２（又はキャッシュ部２２３）に格納するとともに、ＪＶＯＬ２５２（又はキャッシュ部２２３）に格納されたＪＮＬを副ストレージシステム２００Ｂに送信するので、ＪＶＯＬ２５２の全容量に対して十分に小さい容量のみにしか、ＪＮＬが滞留していないことに着目してなされたものである。
【００３５】
すなわち、第２の解決方法は、図７に示すように、ＪＮＬを格納させるＪＶＯＬ２５２の領域として、次のアドレスの空き領域を逐次利用していくのではなく、転送済みの領域を利用するようにして、ＪＶＯＬ２５２において利用される領域を、比較的小さい容量とするようにしたものである。このように、比較的小さい容量とするので、これらＪＶＯＬ２５２の領域に、キャッシュ部２２３の領域が割当てられている可能性が高い。
【００３６】
この解決方法によると、図８の状態１に示すように、ＪＶＯＬ２５２の領域に、キャッシュ部２２３の領域が割当てられている場合において、新たに生成されたＪＮＬは、ＪＶＯＬ２５２の転送済みのＪＮＬが格納される領域に対して格納されることとなり、当該領域に対してキャッシュ部２２３の領域を新たに割当てるための処理をすることなく、当該ＪＮＬをキャッシュ部２２３に格納させることができる。このように、ＪＶＯＬ２５２に対して、キャッシュ部２２３の領域を割当てる処理を行う必要がなくなるので、プロセッサ資源に対する負荷を軽減することができる。この解決方法によると、キャッシュ部２２３に転送済みのＪＮＬが滞留してしまう可能性を低減することができるので、デステージの発生を低減でき、第１の課題についても解消できる。
【００３７】
図９は、実施例１の概要を説明する図である。図１０は、実施例１におけるジャーナルボリュームの状態を説明する図である。
【００３８】
実施例１においては、図９に示すように、ＪＮＬを格納させるＪＶＯＬ２５２の領域として、次のアドレスの空き領域を逐次利用していくのではなく、転送済みの領域を利用するようにして、ＪＶＯＬ２５２における利用される領域を、比較的小さい容量とするようにしている。このように、利用するＪＶＯＬ２５２の領域を、転送済みのＪＮＬが格納されていた比較的小さい容量となるようにできるので、ＪＶＯＬ２５２の領域に、キャッシュ部２２３の領域が割当てられている可能性が高く、キャッシュ部２２３の領域の割当てを実行しなくて済む可能性が高い。
【００３９】
ここで、例えば、図９に示す状態において、転送済みの領域にＪＮＬを格納させるようにしていくと、例えば、回線障害が発生すると、ＪＮＬを格納させる領域を示す先頭アドレスが、終端アドレスに追いついてしまい、ＪＮＬを格納する領域がなくなってしまうこととなる。そこで、実施例１では、このような場合であってもＪＶＯＬ２５２の領域を適切に使用できるようにしている。
【００４０】
本実施例では、図１０の状態１に示すように、ＪＶＯＬ２５２において、ＪＮＣＢ２５２３を格納するＪＮＣＢ領域２５２４については、固定の容量を割当て、ＪＮＬ中のＪＮＬデータ２５２４について、所定のサイズ（本例では、固定サイズ）の複数のブロックＢＫを用いて管理する。ＪＮＣＢ２５２３とは、ＪＮＬデータのＪＶＯＬ２５２における格納アドレスなどを管理する制御データである。ＪＮＬデータとＪＮＣＢ２５２３を合わせて単に「ＪＮＬ」と呼ぶ。当該ブロックＢＫには、一つ以上のＪＮＬデータ２５２４が格納できる。ここで、同図においては、ＪＮＣＢ２５２３を矩形で示し、その矩形中に当該ＪＮＣＢに対応するシーケンス番号を示し、ＪＮＬデータ２５２４を円形で示し、その円形中に当該ＪＮＬデータ２５２４に対応するシーケンス番号を示している。また、ブロックＢＫについては、破線の矩形で示し、その矩形中にブロック番号（例えば、（１））を示す。なお、他の同様な図においても同様に記載することとする。
【００４１】
まず、状態１に示すように、発生したＪＮＬデータ２５２４を、先頭のブロック（ブロック番号１）に、先頭から順次格納する。そして、先頭のブロックＢＫにＪＮＬデータ２５２４を書き込む空きがなくなった場合には、状態２に示すように、空いているブロックＢＫ（同図では、ブロック番号２のブロック）を探し、当該ブロックＢＫに対してＪＮＬデータ２５２４を書き込む。
【００４２】
一方、ブロックＢＫ内の全てのＪＮＬデータ２５２４が副ストレージシステム２００Ｂに転送された場合には、状態３に示すように、当該ブロックＢＫ（ここでは、ブロック番号１のブロック）を空きブロックとする。
【００４３】
そして、以降にＪＮＬデータ２５２４が発生した場合において、空ブロックを探す場合には、状態４に示すように、次のブロックＢＫ（ブロック番号３のブロック）ではなく、使用されていたブロックＢＫであって、最近空ブロックになったブロック（ブロック番号１のブロック）をＪＮＬデータ２５２４の格納先のブロックＢＫとして、ＪＮＬデータ２５２４を格納させる。ここで、最近空ブロックとなったブロックに対しては、キャッシュ部２２３の領域が割当てられている可能性が高いので、当該ブロックＢＫにＪＮＬデータ２５２４を格納する際に、当該ブロックＢＫに対してキャッシュ部２２３の領域を割当てる処理が必要なくなる可能性が高い。したがって、キャッシュ部２２３の領域が割当てられている記憶領域に対して、ＪＮＬデータ２５２４が格納される傾向が高くなる。したがって、プロセッサへの負荷を低減し、プロセッサの利用効率を向上することができる。
【００４４】
次に、実施例１に係る計算機システムについて詳細に説明する。
【００４５】
図１１は、実施例１に係る計算機システムの全体構成図である。
【００４６】
計算機システム１０は、正ホスト計算機（正ホスト）１００Ａと、正ストレージシステム２００Ａと、副ストレージシステム２００Ｂと、副ホスト計算機（副ホスト）１００Ｂとを有する。なお、正ストレージシステム２００Ａは、或るボリュームに対して正側（コピー元）となるストレージシステムであり、別のボリュームに対しては、副側（コピー先）のストレージシステムとなることもある。同様に、副ストレージシステム２００Ｂも、或るボリュームに対して副側のストレージシステムであるが、別のボリュームに対しては、正側のストレージシステムとなることもある。
【００４７】
正ホスト１００Ａと、正ストレージシステム２００Ａとは、ネットワークを介して接続されている。正ストレージシステム２００Ａと、副ストレージシステム２００Ｂとは、ネットワークを介して接続されている。副ストレージシステム２００Ｂと、副ホスト１００Ｂとはネットワークを介して接続されている。副ホスト１００Ｂは、必ずしも予め設置する必要はない。副ストレージシステム２００Ｂを用いて業務処理を実行するまでに、設置すればよい。
【００４８】
正ホスト１００Ａは、メモリ１０１と、ＣＰＵ（Central Processing Unit）１０２と、インターフェース（Ｉ／Ｆ）１０３とを有する。メモリ１０１には、業務処理を実行するソフトウェアであるアプリケーション（データベースアプリケーション等）１０４を格納する。アプリケーション１０４は、業務処理に利用するデータを、正ストレージシステム２００Ａに格納する。
【００４９】
副ストレージシステム２００Ｂは、例えば、ディザスタリカバリのために、正ストレージシステム２００Ａに格納されているデータの複製を記憶するために使用される。
【００５０】
副ホスト１００Ｂは、正ホスト１００Ａ、正ストレージシステム２００Ａに障害があった時に、副ストレージシステム２００Ｂのデータを用いて、業務処理の実行を行うホストであり、メモリ１０１と、ＣＰＵ（Central Processing Unit）１０２と、インターフェース（Ｉ／Ｆ）１０３とを有する。メモリ１０１には、業務処理を実行するソフトウェアであるアプリケーション１０４を格納する。アプリケーション１０４は、業務処理に利用するデータを、副ストレージシステム２００Ｂに格納する。
【００５１】
図１２は、実施例１に係るストレージシステムを中心とした計算機システムの一部の構成図である。
【００５２】
ストレージシステム２００（２００Ａ、２００Ｂ）は、１以上のマイクロプロセッサパッケージ（ＭＰＰＫ）２１０と、メモリパッケージ２２０と、バックエンドパッケージ（ＢＥパッケージ）２３０と、フロントエンドパッケージ（ＦＥパッケージ）２６０とを有する。ＭＰＰＫ２１０と、メモリパッケージ２２０と、ＢＥパッケージ２３０と、ＦＥパッケージ２６０とは、内部バス２８０を介して接続されている。
【００５３】
ＦＥパッケージ２６０は、ポート２６１と、メモリ２６２とを有する。ポート２６１は、ネットワーク１１０を介して、ホスト１００（１００Ａ、１００Ｂ）と接続され、ホスト１００との間の通信を仲介する。メモリ２６２は、ＦＥパッケージ２６０の処理に必要な各種データを記憶する。たとえば、メモリ２６２は、正ホスト１００Ａから転送されたデータや、正ホスト１００Ａへ転送するデータを一時的に格納するために使用される。
【００５４】
メモリパッケージ２２０は、例えば、１以上のメモリデバイスにより構成され、制御情報を記憶する制御情報部２２１と、プログラムを記憶するプログラム部２２２と、データをキャッシュするキャッシュメモリの一例としてのキャッシュ部２２３とを有する。なお、キャッシュ部２２３の容量は、一般的には、ボリューム２５０の容量よりも小さくなっている。
【００５５】
ＭＰＰＫ２１０は、プロセッサ２１１と、ローカルメモリ２１２と、保守ポート２１３とを有する。プロセッサ２１１と、ローカルメモリ２１２と、保守ポート２１３とは、内部バス２１４を介して接続されている。ローカルメモリ２１２は、ＭＰＰＫ２１０において必要な各種データを記憶する。保守ポート２１３は、保守端末２７０との通信を仲介する。プロセッサ２１１は、各種処理を実行する。プロセッサ２１１は、メモリパッケージ２２０のプログラム部２２２に格納された各種プログラムを実行することにより各種処理を実行する。また、プロセッサ２１１は、メモリパッケージ２２０の制御情報部２２１に格納されている各種情報を用いて各種処理を実行する。
【００５６】
ＢＥパッケージ２３０は、ポート２３１と、メモリ２３２とを有する。ポート２３１は、１以上の物理記憶デバイスの一例としてのＨＤＤ２４０と、バス２８３を介して接続されている。例えば、データを管理するボリューム２５０は、１以上のＨＤＤ２４０の記憶領域により構成される。なお、物理記憶デバイスとしては、ＨＤＤに限らず、例えば、ＳＳＤ（Solid State Drive）やＤＶＤなどであってもよい。また、１つ以上のＨＤＤ２４０をパリティグループという単位でまとめて、ＲＡＩＤ（Redundant Arrays of Independent Disks）のような高信頼化技術を使用してもよい。
【００５７】
ストレージシステム２００には、例えば、バス２８０を介して、ストレージシステム２００を保守するための保守端末２７０が接続される。保守端末２７０は、ＣＰＵ２７１と、メモリ２７２と、入出力部２７４と、保守ポート２７５とを有する。メモリ２７２は、保守用のプログラム（保守プログラム）２７３を記憶する。ＣＰＵ２７１は、保守プログラム２７３を実行して保守処理を実行する。入出力部２７４は、例えば、マウス、キーボード、ディスプレイ等により構成され、保守を行うオペレータによる各種指示入力を受け付けるとともに、各種情報をディスプレイに表示させる。保守ポート２７５は、ストレージステム２００との間の通信を仲介する。
【００５８】
図１３は、実施例１に係るボリュームのコピー及びジャーナルボリュームを説明する図である。
【００５９】
正ストレージシステム２００Ａには、正ホスト１００Ａによる業務処理に係る業務データを格納する記憶領域としてＰＶＯＬ（Primary Volume：正ボリューム）２５１が管理される。副ストレージシステム２００Ｂには、ＰＶＯＬ２５１に格納された業務データの複製を格納するためのＳＶＯＬ（Secondary Volume：副ボリューム）２５４が管理されている。ここで、ＰＶＯＬ２５１と、ＳＶＯＬ２５４とは、コピーペアと呼ばれる。
【００６０】
また、正ストレージシステム２００Ａには、ＰＶＯＬ２５１に対する書込みの履歴を示す１以上のＪＮＬ（Journal）を一時的に格納するためのバッファ領域（バッファ部）として利用されるＪＶＯＬ（Journal Volume）２５２を記憶する。ＪＮＬは、ＪＮＣＢ（journal Control Block）２５２３と、ＪＮＬデータ２５２４とを含む。ＪＮＣＢ２５２３は、ＪＮＬデータのＪＶＯＬ２５２における格納アドレス、ＰＶＯＬ２５１における書込みアドレス、当該ＪＮＬの発生順序、すなわち、ＰＶＯＬ２５１へのデータのライト順序を示すシーケンス番号等の制御情報を含む。ＪＮＬデータ２５２４は、正ホスト１００ＡからＰＶＯＬ２５１に書き込まれたデータ（ライトデータ）と同じデータである。
【００６１】
ＪＶＯＬ２５２は、ＪＮＢＣ２５２３を格納するＪＮＢＣ領域２５２１と、ＪＮＬデータ２５２４を格納するＪＮＬデータ領域２５２２とを有する。なお、ＪＶＯＬ２５２は、複数のボリュームにより構成されていてもよく、また、複数のＰＶＯＬ２５１に対するＪＮＬを格納するようにしてもよい。
【００６２】
副ストレージシステム２００Ｂは、正ストレージシステム２００ＡのＪＶＯＬ２５２に格納されるＪＮＬを、受信した際に一時的に格納するＪＶＯＬ２５３を記憶する。ＪＶＯＬ２５３の構成は、ＪＶＯＬ２５２と同様である。なお、正ストレージシステム２００ＡのＪＶＯＬ２５２と、副ストレージシステム２００ＢのＪＶＯＬ２５３との数は、異なっていてもよい。
【００６３】
計算機システム１０における非同期コピー処理の動作概要を説明する。
【００６４】
正ホスト１００ＡからＰＶＯＬ２５１に対するデータの書き込みが発生すると、正ストレージシステム２００Ａは、ＰＶＯＬ２５１に書き込まれたデータを格納するとともに、書き込みデータに関するＪＮＬを生成し、ＪＮＬをＪＶＯＬ２５２に格納する。
【００６５】
そして、以降において、正ストレージシステム２００Ａは、ＪＶＯＬ２５２からＪＮＬを取得し、副ストレージシステム２００Ｂに送信し、副ストレージシステム２００Ｂでは、受信したＪＮＬを、ＪＶＯＬ２５３に格納する。
【００６６】
次いで、副ストレージシステム２００Ｂは、正ホスト１００ＡからＰＶＯＬ２５１に書き込んだ順番に従って、ＪＶＯＬ２５３のＪＮＬ中のＪＮＬデータ２５２４を取得し、当該ＪＮＬデータ２５２４をＳＶＯＬ２５４へ書き込むことにより、ＰＶＯＬ２５１の複製をＳＶＯＬ２５４に生成する。ＰＶＯＬ２５１に書き込まれた順番は、シーケンス番号によって実現できる。
【００６７】
ここで、ＪＶＯＬ２５２の容量について説明する。例えば、正ストレージシステム２００Ａと、副ストレージシステム２００Ｂとの間で回線障害が発生すると、ＪＶＯＬ２５２には、ＪＮＬが滞留し始め、その後、回線障害が解消されると、ＪＶＯＬ２５２のＪＮＬが副ストレージシステム２００ＢのＪＶＯＬ２５３に送信されることとなる。したがって、ＪＶＯＬ２５２が生成されたＪＮＬを蓄積するために十分な容量を有していれば、リモートコピーを停止することなく継続しておくことができる。そこで、ＪＶＯＬ２５２の容量は、回線障害に対してどれだけの時間耐えるようにするかにより設計されることとなる。一般的には、ＪＶＯＬ２５２の容量は、大容量となり、例えば、メモリパッケージ２２０のキャッシュ部２２３の容量よりもかなり大きい容量となる。例えば、キャッシュ部２２３の容量を１ＴＢとした場合に、ＪＶＯＬ２５２の容量は、例えば、数十ＴＢである。
【００６８】
図１４は、実施例１に係るデータライト時の動作の概要を説明する図である。
【００６９】
ホスト１００Ａから正ストレージシステム２００Ａのボリューム２５０に対するライト要求が送信された場合には、正ストレージシステム２００Ａは、ホスト１００Ａからのライトデータをストレージシステム２００Ａのキャッシュ部２２３に格納する。その後、ストレージシステム２００Ａは、ライト要求と非同期で、キャッシュ部２２３のライトデータをボリューム２５０（ＰＶＯＬ２５１）へと格納する。なお、ＪＮＬについても、ホスト１００Ａから取得したデータと同様に、キャッシュ部２２３に格納され、その後、ボリューム（ＪＶＯＬ２５２）に格納される。
【００７０】
図１５は、実施例１に係るメモリパッケージの詳細構成図である。
【００７１】
メモリパッケージ２２０の制御情報部２２１は、シーケンス番号情報２２１０と、ＪＮＬポインタ情報２２１１と、ブロック管理ビットマップ２２１２と、カレントブロック情報２２１３と、カレントアドレス情報２２１４と、ブロック内最大シーケンス番号情報２２１５とを記憶する。
【００７２】
プログラム部２２２は、ライトプログラム２２２１と、ＪＮＬ作成プログラム２２２２と、ＪＮＬデータ格納アドレス決定プログラム２２２３と、ブロック解放プログラム（正）２２２４と、ブロック解放プログラム（副）２２２５と、ＪＮＬリードプログラム（正）２２２６と、ＪＮＬリードプログラム（副）２２２７と、リストアプログラム２２２８とを記憶する。なお、本実施例では、一つのストレージシステムが、正ストレージシステム２００Ａとして動作する場合と、副ストレージシステム２００Ｂとして動作する場合とを考慮して、一つのストレージシステムに、いずれとしても動作できるようにするために必要なプログラムを記憶している。なお、いずれか一方の動作しかしない場合であれば、全てのプログラムを備える必要はない。
【００７３】
図１６は、実施例１に係るシーケンス番号情報の一例を示す図である。
【００７４】
シーケンス番号情報２２１０は、正ホスト１００Ａからストレージシステム２００がライトを受領した順番を示すシーケンス番号を記憶する。このシーケンス番号は、例えば、最近に発生したＪＮＬのシーケンス番号である。図１７から図１９は、ＪＶＯＬ２５２の使用状況を管理するための情報である。
【００７５】
図１７は、実施例１に係るブロック管理ビットマップの一例を示す図である。図１８は、実施例１に係るカレントブロック情報の一例を示す図である。図１９は、実施例１に係るカレントアドレス情報の一例を示す図である。図２０は、実施例１に係るブロック管理ビットマップ、カレントブロック、カレントアドレスを説明する図である。
【００７６】
ブロック管理ビットマップ２２１２は、図１７に示すように、ＪＶＯＬ２５２の各ブロックが使用中であるか、未使用であるかの値を記憶する。本実施例では、対応するブロックＢＫが使用中である場合には、ビット値“１”が設定され、未使用である場合には、ビット値“０”が設定される。ここで、本実施例においては、ＪＶＯＬ２５２は、所定の共通の固定サイズの複数のブロックに区分されて管理されている。各ブロックは、複数のＪＮＬデータが格納可能なサイズであるとともに、キャッシュ部２２３の容量よりも十分に小さいサイズとなっている。より具体的には、例えば、キャッシュ部２２３の容量が１ＴＢであるとすると、ブロックのサイズは、１０ＭＢとしてもよい。なお、ＪＶＯＬ２５２のサイズは、例えば、数十ＴＢとしてもよい。
【００７７】
なお、各ブロックを共通の固定サイズとした例を示しているので、ブロック管理ビットマップ２２１２においては、各ブロックに対して、１ビットのフラグを管理しているが、例えば、各ブロックを異なるサイズとする場合には、各ブロックの開始アドレスと、終了アドレスと、フラグとを対応付けて管理するようにすればよい。
【００７８】
カレントブロック情報２２１３は、図１８に示すように、カレントブロックのブロック番号を格納する。ここで、カレントブロックは、図２０に示すように、現在ＪＮＬ（本例では、ＪＮＬデータ２５２４）を格納する対象のブロックＢＫ（同図では、ブロック番号１のブロック）である。
【００７９】
カレントアドレス情報２２１４は、図１９に示すように、カレントブロックにおけるカレントアドレスを格納する。ここで、カレントアドレスは、図２０に示すように、カレントブロック内における使用済み範囲、すなわち、ＪＮＬデータ２５２４を格納した範囲を示すアドレスである。
【００８０】
図２１は、実施例１に係るブロック内最大シーケンス番号情報の一例を示す図である。図２１に示す情報は、図２４などに説明するブロックの解放処理で用いる情報である。
【００８１】
ブロック内最大シーケンス番号情報２２１５は、ブロック番号（＃）２２１５ａと、ブロック内最大シーケンス番号２２１５ｂとのフィールドを対応付けたレコードを格納する。ブロック＃２２１５ａは、ＪＶＯＬ２５２におけるブロックの番号（ブロック＃）を格納する。ブロック内最大シーケンス番号２２１５ｂは、対応するブロック内に格納されているＪＮＬの最大のシーケンス番号（ブロック内最大シーケンス番号）を格納する。図２１に示すブロック内最大シーケンス番号情報２２１５においては、例えば、ブロック＃“３”のブロックに格納されているＪＮＬ（ＪＮＬデータ２５２４）の最大のシーケンス番号は、“３５０”であることがわかる。
【００８２】
次に、実施例１に係る計算機システムにおける動作について説明する。
【００８３】
図２２は、実施例１に係るライト時処理のフローチャートである。
【００８４】
ライトプログラム２２２１は、ホスト１００ＡからＰＶＯＬ２５１へのライト要求を受領すると（ステップＳ１０１）、ライト対象のデータ（ライトデータ）をボリューム２５０（例えば、ＰＶＯＬ２５１）にライトする（ステップＳ１０２）。次いで、ライトプログラム２２２１は、ジャーナル作成プログラムをコールし（ステップＳ１０３）、ジャーナル（ＪＮＬ）作成プログラム２２２２の完了を待つ（ステップＳ１０４）。
【００８５】
ジャーナル作成プログラム２２２２は、コールされると、作成するＪＮＬのシーケンス番号を確保し（ステップＳ２０１）、ＪＮＬデータ格納アドレス決定プログラム２２２３をコールする（ステップＳ２０２）。これにより、ＪＮＬデータ格納アドレス決定処理（図２３参照）が実行され、ＪＮＬデータを格納するＪＶＯＬのアドレスが決定され、ジャーナル作成プログラム２２２２に通知される。
【００８６】
次いで、ジャーナル作成プログラム２２２２は、ＪＮＬデータ２５２４をＪＶＯＬ２５２の通知されたアドレスに対して格納させるデータとして、キャッシュ部２２３に格納させる（ステップＳ２０３）。
【００８７】
次いで、ジャーナル作成プログラム２２２２は、ＪＮＣＢ２５２３を格納するＪＶＯＬ２５２のアドレスを決定し（ステップＳ２０４）、ＪＮＣＢ２５２３をＪＶＯＬ２５２の決定したアドレスに対して格納させるデータとして、キャッシュ部２２３に格納させる（ステップＳ２０５）。ここで、ＪＮＢＣ２５２３を格納するアドレスは、既に格納しているＪＮＢＣ２５２３の次のアドレス、又は、ＪＮＣＢ領域２５２１の最後までＪＮＢＣ２５２３を格納している場合には、ＪＮＣＢ領域２５２１の先頭のアドレスに決定する。
【００８８】
次いで、ジャーナル作成プログラム２２２２は、処理の完了をライトプログラム２２２１に通知し（ステップＳ２０６）、通知を受けたライトプログラム２２２１は、ホスト１００Ａにライトの完了報告を通知し（ステップＳ１０５）、処理を終了する。
【００８９】
図２３は、実施例１に係るＪＮＬデータ格納アドレス決定処理のフローチャートである。
【００９０】
ＪＮＬデータ格納アドレス決定プログラム２２２３は、カレントブロックのブロック番号を、カレントブロック情報２２１３から取得し（ステップＳ３０１）、当該カレントブロックに新たなＪＮＬデータ２５２４が格納可能であるか否か、すなわち、カレントブロックに空きがあるか否かを判定する（ステップＳ３０２）。
【００９１】
この結果、カレントブロックに空きがある場合（ステップＳ３０２でＹｅｓ）には、ＪＮＬデータ格納アドレス決定プログラム２２２３は、ステップＳ３０５に処理を進める。一方、カレントブロックに空きがない場合（ステップＳ３０２でＮｏ）には、ＪＮＬデータ格納アドレス決定プログラム２２２３は、空ブロックを探す（ステップＳ３０３）。本実施例では、ＪＮＬデータ格納アドレス決定プログラム２２２３は、ブロック管理ビットマップ２２１２の先頭からビット値が“０”のブロックを探す。
【００９２】
次いで、ＪＮＬデータ格納アドレス決定プログラム２２２３は、特定したブロックを、ＪＮＬデータ２５２４を格納するブロックとして割り当て、処理をステップＳ３０５に進める（ステップＳ３０４）。すなわち、ＪＮＬデータ格納アドレス決定プログラム２２２３は、特定したブロックに対するブロック管理ビットマップ２２１２のビット値を“１”に変更し、カレントブロック情報２２１３のブロック番号を特定したブロックのブロック番号に変更する。
【００９３】
ステップＳ３０５では、ＪＮＬデータ格納アドレス決定プログラム２２２３は、対応するブロックにおけるＪＮＬデータ２５２４を格納するアドレスを決定する。次いで、ＪＮＬデータ格納アドレス決定プログラム２２２３は、カレントアドレス情報２２１４のカレントアドレスを決定したアドレスに更新し（ステップＳ３０６）、ブロック内最大シーケンス番号情報２２１５の当該ブロックに対する最大シーケンス番号を当該ＪＮＬデータ２５２４のシーケンス番号に更新し（ステップＳ３０７）、処理を終了する。
【００９４】
上記ＪＮＬデータ格納アドレス決定処理によると、ＪＶＯＬ２５２の先頭に近く、且つ空の有るブロックであり、キャッシュ部２２３の領域が割り当てられている可能性の高い領域に対して、優先的にＪＮＬデータ２５２４を格納させるようにすることができる。これにより、ＪＮＬデータ２５２４が格納される領域を比較的狭い範囲に集約することができ、ＪＮＬデータを格納する際に、新たにキャッシュ部の領域を割当てる処理の発生を低減することができる。なお、ＪＮＬデータを格納するブロックの割当方法はこれに限られず、例えば、最も最近に利用されていた空きブロックを、ＪＮＬデータ２５２４を格納するブロックとして割り当てるようにしてもよく、このようにすると、当該空きブロックの領域に対応する領域がキャッシュ部２２３で管理されている可能性がより高く、当該空きブロックへデータを格納する際に、当該領域へキャッシュ部の領域を割当てる処理を実行することなく、キャッシュ部２２３の領域を利用できる可能性が高い。なお、最も最近に利用された空ブロックを取得する方法としては、当該空きブロックをスタックにより管理するようにすればよい。
【００９５】
図２４は、実施例１に係るブロック解放処理のフローチャートである。
【００９６】
ブロック解放処理は、正ストレージシステム２００Ａにおいて、例えば、ブロック解放プログラム（正）２２２４により、定期的に実行される、又は、図２５のＪＮＬリード処理において呼び出されて実行される。
【００９７】
ブロック解放プログラム（正）２２２４は、転送済みのＪＮＬのシーケンス番号（転送済みシーケンス番号）を参照する（ステップＳ４０１）。なお、転送済みのＪＮＬのシーケンス番号は、例えば、正ストレージシステム２００Ａが制御情報部２２１に記憶している。
【００９８】
次いで、ブロック解放プログラム（正）２２２４は、ブロック管理ビットマップ２２１２がＯＮ（ビット値が“１”）であり、且つカレントブロックではないブロックを特定する（ステップＳ４０２）。
【００９９】
次いで、ブロック解放プログラム（正）２２２４は、ブロック内最大シーケンス番号情報２２１５から特定した各ブロックのブロック内最大シーケンス番号を取得し（ステップＳ４０３）、各ブロックについて、取得したブロック内最大シーケンス番号が、参照した転送済みシーケンス番号より小さいか否かを判定する（ステップＳ４０４）。
【０１００】
この結果、取得したブロック内最大シーケンス番号が、参照した転送済みシーケンス番号より小さい場合（ステップＳ４０４でＹｅｓ）には、当該ブロックの全てのＪＮＬを副ストレージシステム２００Ｂに転送したことを意味しているので、ブロック解放プログラム（正）２２２４は、ブロック管理ビットマップ２２１２の当該ブロックに対応するビット値をＯＦＦ（“０”）にして、当該ブロックを空ブロックとする（ステップＳ４０５）。一方、取得したブロック内最大シーケンス番号が、参照した転送済みシーケンス番号より小さくない場合（ステップＳ４０４でＮｏ）には、副ストレージシステム２００Ｂに、当該ブロックのＪＮＬのすべてを転送していないことを示しているので、そのまま処理を終了する。
【０１０１】
ブロック解放処理によると、全てのＪＮＬデータが送信されたブロックについて、空きブロックにすることができ、以降のＪＮＬデータの格納に利用できるようになる。
【０１０２】
図２５は、実施例１に係るＪＮＬリード処理のフローチャートである。
【０１０３】
副ストレージシステム２００ＢのＪＮＬリードプログラム（副）２２２７が、正ストレージシステム２００Ａに対して、ＪＮＬリードコマンドを発行し（ステップＳ６０１）、正ストレージシステム２００Ａからの応答を待つ（ステップＳ６０２）。ＪＮＬリードコマンドには、副ストレージシステム２００Ｂに転送されたＪＮＬのシーケンス番号（転送済みシーケンス番号）が含まれている。
【０１０４】
正ストレージシステム２００Ａでは、ＪＮＬリードプログラム（正）２２２６が、ＪＮＬリードコマンドを受け取ると、未転送のＪＮＣＢ２５２３をリードする（ステップＳ５０１）。ここで、未転送のＪＮＣＢ２５２３は、正ストレージシステム２００Ａ自身が管理している情報に基づいて特定される。本実施例では、ＪＮＣＢ２５２３がシーケンス番号順にならんでいるので、ポインタを用いて未転送のＪＮＣＢ２５２３を管理することにより、容易に未転送のＪＮＣＢ２５２３を特定することができる。
【０１０５】
次いで、ＪＮＬリードプログラム（正）２２２６が、リードしたＪＮＣＢ２５２３から対応するＪＮＬデータ２５２４のアドレスを取得することにより、ＪＮＬデータ２５２４の格納位置を特定し（ステップＳ５０２）、対応する格納位置のＪＮＬデータをリードする（ステップＳ５０３）。ここで、対応するＪＮＬデータ２５２４がキャッシュ部２２３に格納されている場合は、ＪＮＬリードプログラム（正）２２２６が、キャッシュ部２２３からリードし、キャッシュ部２２３に格納されていない場合には、ＪＶＯＬ２５２からリードする。
【０１０６】
次いで、ＪＮＬリードプログラム（正）２２２６が、リードしたＪＮＬ（ＪＮＣＢ２５２３及びＪＮＬデータ２５２４）を、副ストレージシステム２００Ｂに転送する（ステップＳ５０４）。次いで、ＪＮＬリードプログラム（正）２２２６は、転送済みシーケンス番号を制御情報部２２１に記録し（ステップＳ５０５）、ブロック解放プログラム（正）２２２４をコールし（ステップＳ５０６）、処理を終了する。これにより、ブロック解放処理（図２４）が実行されることとなる。
【０１０７】
一方、副ストレージシステム２００Ｂでは、ＪＮＬを正ストレージシステム２００Ａから受領すると（ステップＳ６０３）、ＪＮＬリードプログラム（副）２２２７が、ＪＮＬデータ格納アドレス決定プログラム２２２３をコールする（ステップＳ６０４）。副ストレージシステム２００Ｂでは、図２３と同様なＪＮＬデータ格納アドレス決定処理が実行され、ＪＮＬデータ２５２４を格納するＪＶＯＬ２５３のブロック及びアドレスが決定される。
【０１０８】
次いで、ＪＮＬリードプログラム（副）２２２７が、ＪＶＯＬ２５３の決定されたブロックのアドレスに格納するデータとして、ＪＮＬデータ２５２４をキャッシュ部２２３に格納する（ステップＳ６０５）。
【０１０９】
次いで、ＪＮＬリードプログラム（副）２２２７は、ＪＮＣＢ２５２３を格納するＪＶＯＬ２５３のアドレスを決定し（ステップＳ６０６）、ＪＮＣＢ２５２３をＪＶＯＬ２５３の決定したアドレスに対して格納させるデータとして、キャッシュ部２２３に格納させ（ステップＳ６０７）、処理を終了する。ここで、ＪＮＢＣ２５２３を格納するアドレスは、既に格納しているＪＮＢＣ２５２３の次のアドレス、又は、ＪＮＣＢ領域２５２１の最後までＪＮＢＣ２５２３を格納している場合には、ＪＮＣＢ領域２５２１の先頭のアドレスに決定する。
【０１１０】
上記ＪＮＬリード処理によると、ＪＶＯＬ２５３の先頭に近く、且つ空の有るブロックであり、キャッシュ部２２３の領域が割り当てられている可能性の高い領域に対して優先的にＪＮＬデータ２５２４を格納させるようにすることができる。これにより、ＪＮＬデータ２５２４が格納される領域を比較的狭い範囲に集約することができ、ＪＮＬデータ２５２４を格納する際に、新たにキャッシュを割当てる処理の発生を低減することができる。なお、ブロックの割当方法はこれに限られず、例えば、最も最近に利用されていた空きブロックを、ＪＮＬデータを格納するブロックとして割り当てるようにしてもよく、このようにすると、当該空きブロックの領域に対応する領域がキャッシュ部２２３で管理されている可能性がより高く、当該空きブロックへデータを格納する際に、当該領域へキャッシュ部２２３の領域を割当てる処理を実行することなく、キャッシュ部２２３の領域を利用できる可能性が高い。
【０１１１】
図２６は、実施例１に係るリストア処理のフローチャートである。
【０１１２】
リストア処理は、ＪＮＬに基づいて、ＳＶＯＬ２５４に書込みを行う処理であり、副ストレージシステム２００Ｂにおいて、例えば、定期的に実行される。
【０１１３】
リストアプログラム２２２８は、ＪＶＯＬ２５３に格納されたＪＮＣＢをチェックし（ステップＳ７０１）、抜けがなく副ストレージシステム２００Ｂに到着しているＪＮＬの範囲を特定する（ステップＳ７０２）。ここで、到着していないＪＮＬのＪＮＣＢ２５２３は、全て０であるので、到着しているＪＮＬの範囲を適切に特定することができる。
【０１１４】
次いで、リストアプログラム２２２８は、特定した範囲のＪＮＬの最大シーケンス番号を特定し（ステップＳ７０３）、転送済みシーケンス番号として制御情報部２２１に記録する（ステップＳ７０４）。
【０１１５】
次いで、リストアプログラム２２２８は、転送済みシーケンス番号までのＪＮＬをＪＶＯＬ２５３から取得して、シーケンス番号の順番にＳＶＯＬ２５４に書き込む、すなわち、リストアする（ステップＳ７０５）。ＪＶＯＬ２５３からの取得において、対応するＪＮＬデータ２５２４がキャッシュ部２２３に格納されている場合は、リストアプログラム２２２８が、キャッシュ部２２３からリードし、キャッシュ部２２３に格納されていない場合には、ＪＶＯＬ２５３からリードする。さらに、ＳＶＯＬ２５４への書込みにおいて、リストアプログラム２２２８は、ＳＶＯＬ２５４の書込みアドレスのデータとして、ＪＮＬデータ２５２４をキャッシュ部２２３に格納する。
【０１１６】
次いで、リストアプログラム２２２８は、リストアした最大のシーケンス番号をリストア済みシーケンス番号として制御情報部２２１に記録し（ステップＳ７０６）、ブロック解放プログラム（副）２２２５をコールする（ステップＳ７０７）。ブロック解放プログラム（副）２２２５は、ブロック解放処理を実行する。
【０１１７】
すなわち、ブロック解放プログラム（副）２２２５は、リストア済みシーケンス番号を参照し（ステップＳ８０１）、ブロック管理ビットマップ２２１２がＯＮ（ビット値が“１”）であり、且つカレントブロックではないブロックを特定する（ステップＳ８０２）。
【０１１８】
次いで、ブロック解放プログラム（副）２２２５は、ブロック内最大シーケンス番号情報２２１５から、特定した各ブロックのブロック内最大シーケンス番号を取得し（ステップＳ８０３）、各ブロックについて、取得したブロック内最大シーケンス番号が、参照したリストア済みシーケンス番号より小さいか否かを判定する（ステップＳ８０４）。
【０１１９】
この結果、取得したブロック内最大シーケンス番号が、参照したリストア済みシーケンス番号より小さい場合（ステップＳ８０４でＹｅｓ）には、当該ブロックの全てのＪＮＬをＳＶＯＬ２５４にリストアしたことを意味しているので、ブロック解放プログラム（副）２２２５は、ブロック管理ビットマップ２２１２の当該ブロックに対応するビット値をＯＦＦ（“０”）にして、当該ブロックを空ブロックとし（ステップＳ８０５）、処理を終了し（ステップＳ８０６）、その旨をリストアプログラム２２２８に通知する。一方、取得したブロック内最大シーケンス番号が、参照したリストア済みシーケンス番号より小さくない場合（ステップＳ８０４でＮｏ）には、ＳＶＯＬ２５４に当該ブロックのＪＮＬのすべてをリストアしていないことを示しているので、ブロック解放プログラム（副）２２２５は、そのまま処理を終了し（ステップＳ８０６）、その旨をリストアプログラム２２２８に通知する。なお、リストアプログラム２２２８は、ブロック解放プログラム（副）２２２５から処理を終了した旨の通知を受け取ると、リストア処理を終了する。
【０１２０】
このブロック解放処理によると、全てのＪＮＬデータによるリストアが行われたブロックについて、空きブロックにすることができ、以降のＪＮＬデータの格納に利用できるようになる。
【実施例２】
【０１２１】
次に、実施例２に係る計算機システムについて説明する。
【０１２２】
実施例２に係る計算機システムは、実施例１に係る計算機システムでは、ＪＮＬのＪＮＬデータ２５２４について、ブロックによる管理をするようにしていたものを、ＪＮＬのＪＮＣＢ２５２３についても同様なブロックによる管理をするようにしたものである。なお、実施例１に係る計算機システムと同様な箇所には、同一の符号を付し、異なる点を中心に説明することとする。
【０１２３】
図２７は、実施例２に係る制御情報部の詳細図である。図２８は、実施例２に係るプログラム部の詳細図である。
【０１２４】
実施例２に係る制御情報部２２１は、実施例１に係る制御情報部２２１に対して、さらに、ＪＮＣＢブロック管理情報２２１６と、カレントライトブロック情報２２１７と、カレントリードブロック情報２２１８と、カレントライトアドレス情報２２１９と、カレントリードアドレス情報２２１Ａとを格納する。
【０１２５】
また、実施例２に係るプログラム部２２２は、実施例１に係るプログラム部２２２に対して、さらに、ＪＮＣＢ格納アドレス決定プログラム２２２９を格納する。
【０１２６】
図２９は、実施例２に係るＪＮＣＢブロック管理情報の一例を示す図である。図３０は、実施例２に係るＪＮＣＢカレントライトブロック情報の一例を示す図である。図３１は、実施例２に係るＪＮＣＢカレントリードブロック情報の一例を示す図である。図３２は、実施例２に係るＪＮＣＢカレントライトアドレス情報の一例を示す図である。図３３は、実施例２に係るＪＮＣＢカレントリードアドレス情報の一例を示す図である。図３４は、実施例２に係るブロック及びアドレスを説明する図である。
【０１２７】
ＪＮＣＢブロック管理情報２２１６は、ＪＮＣＢ２５２３が格納されるブロックの順番を管理する情報である。具体的には、ＪＮＣＢ２５２３が格納されるブロックのブロック番号と、次の順番のブロック、すなわち、後続のＪＮＣＢ２５２３が格納されているブロックのブロック番号とを対応付けて管理している。このＪＮＣＢブロック管理情報２２１６によると、図３４に示すように、ＪＮＣＢ２５２３が格納される次の順番のブロックを特定することができる。
【０１２８】
ＪＮＣＢカレントライトブロック情報２２１７は、図３０に示すように、カレントライトブロックのブロック番号を格納する。カレントライトブロックは、図３４に示すように、新規のＪＮＣＢ２５２３を格納する対象となるブロックである。
【０１２９】
ＪＮＣＢカレントリードブロック情報２２１８は、図３１に示すように、カレントリードブロックのブロック番号を格納する。カレントリードブロックは、図３４に示すように、次に転送されるＪＮＣＢ２５２３を格納するブロックである。
【０１３０】
ＪＮＣＢカレントライトアドレス情報２２１９は、図３２に示すように、カレントライトブロックにおけるカレントライトアドレスを格納する。カレントライトアドレスは、図３４に示すように、新規のＪＮＣＢ２５２３を格納するブロック内のアドレスである。
【０１３１】
ＪＮＣＢカレントリードアドレス情報２２１Ａは、図３３に示すように、カレントリードブロックにおけるカレントリードアドレスを格納する。カレントリードアドレスは、図３４に示すように、次に転送するＪＮＣＢ２５２３を格納するブロック内のアドレスである。
【０１３２】
次に、実施例２に係る計算機システムにおける動作について説明する。実施例２に係る計算機システムの動作は、実施例１に係る計算機システムの動作と、正ストレージシステム２００ＡにおけるＪＮＣＢの格納アドレスを決定する処理と、副ストレージシステム２００ＢにおけるＪＮＣＢの格納アドレスを決定する処理と、正ストレージシステム２００ＡのＪＶＯＬ２５２からＪＮＣＢをリードする処理と、副ストレージシステム２００ＢのＪＶＯＬ２５３からＪＮＣＢをリードする処理とが異なる。なお、ブロック解放処理については、ＪＮＣＢ２５２３が格納されたブロックについても、ＪＮＬデータ２５２４が格納されたブロックと同様な処理により実行可能である。
【０１３３】
図３５は、実施例２に係るＪＮＣＢ格納アドレス決定処理のフローチャートである。
【０１３４】
ＪＮＣＢ格納アドレス決定処理は、正ストレージシステム２００Ａ及び副ストレージシステム２００Ｂのそれぞれで実行される。正ストレージシステム２００Ａでは、ジャーナル作成プログラム２２２２のＳ２０４でコールされる。
【０１３５】
ＪＮＣＢ格納アドレス決定プログラム２２２９は、カレントライトブロックのブロック番号を、カレントライトブロック情報２２１７から取得し（ステップＳ９０１）、カレントライトアドレスを、カレントライトアドレス情報２２１９から取得し（ステップＳ９０２）、当該カレントライトブロックにＪＮＣＢ２５２３が格納可能であるか否か、すなわち、カレントライトブロックに空きがあるか否かを判定する（ステップＳ９０３）。
【０１３６】
この結果、カレントライトブロックに空きがある場合（ステップＳ９０３でＹｅｓ）には、ＪＮＣＢ格納アドレス決定プログラム２２２９は、ステップＳ９０６に処理を進める。一方、カレントライトブロックに空きがない場合（ステップＳ９０３でＮｏ）には、ＪＮＣＢ格納アドレス決定プログラム２２２９は、空ブロックを探す（ステップＳ９０４）。本実施例では、ＪＮＣＢ格納アドレス決定プログラム２２２９は、ブロック管理ビットマップ２２１２の先頭からビット値が“０”のブロックを探す。
【０１３７】
次いで、ＪＮＣＢ格納アドレス決定プログラム２２２９は、特定したブロックを、ＪＮＣＢ２５２３を格納するブロックとして割り当て、処理をステップＳ９０６に進める（ステップＳ９０５）。すなわち、ＪＮＣＢ格納アドレス決定プログラム２２２９は、特定したブロックに対するブロック管理ビットマップ２２１２のビット値を“１”に変更し、カレントライトブロック情報２２１７のブロック番号を特定したブロックのブロック番号に変更する。
【０１３８】
ステップＳ９０６では、ＪＮＣＢ格納アドレス決定プログラム２２２９は、対応するブロックにおけるＪＮＣＢ２５２３を格納するアドレスを決定する。次いで、ＪＮＣＢ格納アドレス決定プログラム２２２９は、カレントライトアドレス情報２２１９のカレントライトアドレスを決定したアドレスに更新し（ステップＳ９０７）、ブロック内最大シーケンス番号情報２２１５の当該ブロックに対する最大シーケンス番号を当該ＪＮＣＢ２５２３のシーケンス番号に更新し（ステップＳ９０８）、処理を終了する。
【０１３９】
上記ＪＮＣＢ格納アドレス決定処理によると、ＪＶＯＬ２５２の先頭に近く、且つ空の有るブロックであり、キャッシュ部２２３の領域が割り当てられている可能性の高い領域に対して優先的にＪＮＣＢ２５２３を格納させるようにすることができる。これにより、ＪＮＣＢが格納される領域を比較的狭い範囲に集約することができ、ＪＮＣＢ２５２３を格納する際に、新たにキャッシュを割当てる処理の発生を低減することができる。なお、ブロックの割当方法はこれに限られず、例えば、最も最近に利用されていた空きブロックを、ＪＮＣＢ２５２３を格納するブロックとして割り当てるようにしてもよく、このようにすると、当該空きブロックの領域に対応する領域がキャッシュ部２２３で管理されている可能性がより高く、当該空きブロックへデータを格納する際に、当該領域へキャッシュ部２２３の領域を割当てる処理を実行することなく、キャッシュ部２２３の領域を利用できる可能性が高い。なお、最近に利用された空ブロックを取得する方法としては、当該空きブロックをスタックにより管理するようにすればよい。
【０１４０】
図３６は、実施例２に係るＪＮＬリード処理のフローチャートである。なお、実施例１に係るＪＮＬリード処理（図２５）と同様な部分には、同一の符号を付し、ここでは、異なる点について説明する。
【０１４１】
正ストレージシステム２００Ａでは、ＪＮＬリードプログラム（正）２２２６が、ＪＮＬリードコマンドを受け取ると、カレントリードブロック情報２２１８からカレントリードブロック番号を取得し（ステップＳ１００１）、カレントリードアドレス情報２２１Ａからカレントリードアドレスを取得する（ステップＳ１００２）。次いで、ＪＮＬリードプログラム（正）２２２６は、カレントリードブロックと、カレントライトブロックとが同じであるか否かを判定する（ステップＳ１００３）。
【０１４２】
この結果、カレントリードブロックと、カレントライトブロックとが同じでない場合（ステップＳ１００３でＮｏ）には、ＪＮＬリードプログラム（正）２２２６が、カレントリードアドレスからカレントリードブロックの終端までのＪＮＣＢ２５２３をリードし（ステップＳ１００４）、ＪＮＣＢブロック管理情報２２１６に基づいて、次のブロックを特定し、当該ブロックをカレントリードブロックとし（ステップＳ１００５）、カレントリードアドレス情報２２１Ａのカレントリードアドレスを０に設定し（ステップＳ１００６）、処理をステップＳ１００９に進める。これにより、以降において、ＪＮＬリード処理が実行されると、後続のブロックからＪＮＣＢ２５２３が適切に読み出されることとなる。
【０１４３】
一方、カレントリードブロックと、カレントライトブロックとが同じである場合（ステップＳ１００３でＹｅｓ）には、ＪＮＬリードプログラム（正）２２２６が、カレントリードアドレスからカレントライトアドレスまでのＪＮＣＢ２５２３をリードし（ステップＳ１００７）、カレントリードアドレスをリードしたアドレス（カレントライトアドレスと同じアドレス）に設定し（ステップＳ１００８）、処理をステップＳ１００９に進める。
【０１４４】
ステップＳ１００９では、ＪＮＬリードプログラム（正）２２２６が、リードしたＪＮＣＢ２５２３からＪＮＬデータ２５２４の格納位置を特定する（ステップＳ１００９）。この後、ＪＮＬリードプログラム（正）２２２６は、ステップＳ５０３以降の処理を実行する。
【０１４５】
一方、ＪＮＬリードプログラム（副）２２２７は、ＪＶＯＬ２５３の決定されたブロックのアドレスに格納するデータとして、ＪＮＬデータ２５２４をキャッシュ部２２３に格納した後（ステップＳ６０５）、ＪＮＣＢ格納アドレス決定プログラム２２２９をコールする（ステップＳ１１０１）。この後、ＪＮＬリードプログラム（副）２２２７は、ＪＮＣＢ格納アドレス決定プログラム２２２９から、ＪＮＣＢ２５２３を格納するＪＶＯＬ２５３のブロック及びアドレスを取得することとなる。
【０１４６】
図３７は、実施例２に係るリストア処理のフローチャートである。なお、実施例１に係るリストア処理（図２６）と同様な部分には、同一の符号を付し、ここでは、異なる点について説明する。
【０１４７】
リストア処理は、副ストレージシステム２００Ｂにおいて、例えば、定期的に実行される。
【０１４８】
リストアプログラム２２２８は、カレントリードブロック情報２２１８からカレントリードブロック番号を取得し（ステップＳ１２０１）、カレントリードアドレス情報２２１Ａからカレントリードアドレスを取得する（ステップＳ１２０２）。次いで、リストアプログラム２２２８は、カレントリードブロックのブロック終端までのＪＮＣＢ２５２３をリードし（ステップＳ１２０３）、抜けがなく副ストレージシステム２００Ｂに到着しているＪＮＬの範囲を特定する（ステップＳ１２０４）。ここで、到着していないＪＮＬのＪＮＣＢ２５２３は、全て０であるので、到着しているＪＮＬ２５２３の範囲を適切に特定することができる。
【０１４９】
次いで、リストアプログラム２２２８は、特定した範囲の終端は、カレントリードブロックの終端であるか否かを判定する（ステップＳ１２０５）。この結果、特定した範囲の終端がカレントリードブロックの終端である場合（ステップＳ１２０５でＹｅｓ）には、リストアプログラム２２２８は、カレントリードアドレス情報２２１Ａのカレントリードアドレスを０に設定し、ＪＮＣＢブロック管理情報２２１６に基づいて、次のブロックを特定し、当該ブロックをカレントリードブロックに設定し（ステップＳ１２０６）、処理をステップＳ７０３に進める。これにより、以降において、リストア処理が実行されると、ＪＮＣＢ２５２３が格納されている後続のブロックからＪＮＣＢ２５２３が適切に読み出されることとなる。
【０１５０】
一方、特定した範囲の終端がカレントリードブロックの終端でない場合（ステップＳ１２０５でＮｏ）には、リストアプログラム２２２８は、カレントリードアドレス情報２２１Ａのカレントリードアドレスを、特定した範囲の終端のアドレスに設定し（ステップＳ１２０７）、処理をステップＳ７０３に進める。
【０１５１】
上記実施例２によると、ＪＶＯＬ２５３の先頭に近く、且つ空の有るブロックであり、キャッシュ部２２３の領域が割り当てられている可能性の高い領域に対して優先的にＪＮＣＢ２５２３を格納させるようにすることができる。これにより、ＪＮＣＢ２５２３が格納される領域を比較的狭い範囲に集約することができ、ＪＮＣＢ２５２３を格納する際に、新たにキャッシュ部２２３の領域を割当てる処理の発生を低減することができる。
【実施例３】
【０１５２】
次に、実施例３に係る計算機システムについて説明する。
【０１５３】
実施例３に係る計算機システムは、実施例２に係る計算機システムでは、ＪＶＯＬ２５２、２５３を、共通の固定長の複数のブロックで管理するようにしていたものを、サイズの異なる２種類のブロックで管理することにより、ＪＶＯＬ２５２、２５３におけるブロック数を低減して、ブロック管理に必要な情報を低減するようにしたものである。
【０１５４】
図３８は、実施例３の概要を説明する図である。
【０１５５】
本実施例においては、ＪＶＯＬ２５２（２５３）を、複数（同図では、４つ）の小サイズ（小容量）のブロック（小サイズブロック）ＳＢＫと、１つの大サイズ（大容量）のブロック（大サイズブロック）ＬＢＫと、に分割して管理している。これにより、上記した実施例１、２の効果に加えて、ブロックを管理するための制御情報量、例えば、ブロック管理ビットマップ２２１２の情報や、ブロック内最大シーケンス番号情報２２１５等の情報量を低減することができる。
【０１５６】
ここで、ホスト１００Ａからのライト量が一時的に急増し、ＪＶＯＬ２５２の小サイズブロックが解放されるペースを超える可能性がある。このような場合には、大サイズブロックＬＢＫにＪＮＬが格納される。ライト量の減少後は、実施例１で述べたように小サイズブロックを使用することでプロセッサ負荷を低減できる。しかし、実施例１に説明した論理では、大サイズブロックＬＢＫの全領域を使い切るまで、ＪＮＬが大サイズブロックＬＢＫに格納されることとなる。
【０１５７】
このように、大サイズブロックＬＢＫの全領域を使い切るまで、ＪＮＬを大サイズブロックに格納する場合には、転送済みのＪＮＬをデステージする処理や、キャッシュ部２２３の領域の割当て、キャッシュ部２２３の領域の解放等の処理が行われることとなり、プロセッサへの負荷を増加させてしまう。
【０１５８】
そこで、実施例３においては、大サイズブロックＬＢＫの全領域を使い切る前であっても、小サイズブロックＳＢＫにＪＮＬを格納できるように制御している。
【０１５９】
図３９は、実施例３に係る制御情報部の詳細図である。
【０１６０】
実施例３に係る制御情報部２２１は、実施例２に係る制御情報部２２１に対して、さらに、カレントブロックサイズ情報２２１Ｂを格納する。カレントブロックサイズ情報２２１Ｂには、カレントブロックのサイズが大サイズであるか、または小サイズであるかを示す情報が格納される。
【０１６１】
図４０は、実施例３に係るＪＮＬデータ格納アドレス決定処理のフローチャートである。なお、実施例１に係るＪＮＬデータ格納アドレス決定処理（図２３）と同様な部分には、同一の符号を付し、ここでは、異なる点について説明する。
【０１６２】
ステップＳ３０２で、カレントブロックに空きがあると判定された場合（ステップＳ３０２でＹｅｓ）には、ＪＮＬデータ格納アドレス決定プログラム２２２３は、カレントブロックは、大サイズであり、且つ所定の復帰条件を満たすか否かを判定する（ステップＳ３０８）。ここで、所定の復帰条件とは、現在のＪＮＬデータ２５２４の滞留量が継続したとして、小サイズのブロックのみで動作可能であるか否かを判断するための条件であり、例えば、「小サイズブロックに空きがある」に加え、「現在のＪＶＯＬ２５２に滞留している平均のＪＮＬデータ量＜小サイズブロックの合計空き容量」である条件としてもよい。また、以降におけるＪＮＬデータ２５２４の発生の変動を考慮して、「現在のＪＶＯＬ２５２に滞留している平均のＪＮＬデータ量」に変えて、「現在のＪＶＯＬ２５２に滞留している平均のＪＮＬデータ量＋Ａ」（Ａは、所定のデータ量）としてもよい。
【０１６３】
この結果、カレントブロックは大サイズであり、且つ所定の復帰条件を満たす場合（ステップＳ３０８でＹｅｓ）には、ＪＮＬデータ格納アドレス決定プログラム２２２３は、処理をステップＳ３０３に進めて以降の処理を行う。これにより、大サイズブロックが空いている状態から、小サイズブロックにＪＮＬデータ２５２４を格納するようにすることができ、転送済みのＪＮＬデータをデステージする処理や、キャッシュ部２２３の領域の割当て、キャッシュ部２２３の領域の解放等の処理が行われることを適切に低減することができる。なお、カレントブロックが小サイズである、又は、所定の復帰条件を満たさない場合（ステップＳ３０８でＮｏ）には、ＪＮＬデータ格納アドレス決定プログラム２２２３は、処理をステップＳ３０５に進める。
【０１６４】
ここでは、ＪＮＬデータ格納アドレス決定処理を説明したが、ＪＮＣＢ２５２３についての格納アドレスを決定する処理（ＪＮＣＢ格納アドレス決定処理）についても、実施例２のＪＮＣＢ格納アドレス決定処理（図３５）において、上記ステップＳ３０８と同様なステップを追加することにより実現できる。
【０１６５】
図４１は、実施例３に係る変形例を説明する図である。
【０１６６】
上記した例では、ＪＶＯＬ２５２（２５３）において、大サイズブロックＬＢＫを１つとしていた。この場合には、状態１に示すように、大サイズブロックＬＢＫに空き領域ＬＳがあるときに、小サイズブロックＳＢＫにＪＮＬデータ２５２４を格納するようにすると、大サイズブロックＬＢＫは、格納している全てのＪＮＬデータ２５２４を転送する前においては、使用中のブロックとして管理されることとなるので、ＪＮＬデータ２５２４の発生が急増した場合にあっても空き領域ＬＳが使用されないという状況が発生する。
【０１６７】
これに対して、例えば、状態２に示すように、ＪＶＯＬ２５２に、複数の大サイズブロックＬＢＫを備えるようにすることが考えられる。例えば、大サイズブロックＬＢＫのサイズは、共通のサイズであってもよい。このように、大サイズブロックＬＢＫを複数備えると、他の大サイズブロックＬＢＫを使用することができるので、無駄な空き領域の容量を低減することができる。
【実施例４】
【０１６８】
次に、実施例４に係る計算機システムについて説明する。
【０１６９】
実施例４に係る計算機システムは、上記した実施例において、容量仮想化機能（Thin Provisioning）を用いて、ＪＶＯＬ２５２、２５３を仮想ボリューム（仮想ＶＯＬ）により構成するようにしたものである。
【０１７０】
図４２は、実施例４に係る仮想ボリュームを説明する図である。
【０１７１】
ストレージシステム２００（２００Ａ、２００Ｂ）において、複数のＨＤＤ２４０の記憶領域から構成された容量プール（プール）２９０が設けられる。プール２９０には、ＨＤＤ２４０の物理的な記憶領域から構成されるプールボリューム（プールＶＯＬ）２９１が含まれる。プールＶＯＬ２９１には、仮想ＶＯＬ２９３の割当単位となる物理領域であるページが含まれる。ページの容量は、例えば、数ＫＢ〜数十ＭＢである。
【０１７２】
仮想ＶＯＬ２９３は、所定の領域に対して、データの書き込みがあると、その領域に対して、プールＶＯＬ２９１のページ２９２が割当てられる。本実施例においては、ＪＶＯＬ２５２、２５３を、仮想ＶＯＬ２９３として構成している。したがって、ＪＶＯＬ２５２、２５３の使用されていない領域については、ページ２９２が割り当てられていないので、ＨＤＤ２４０の記憶領域を有効に利用することができる。特に、本実施例では、従来のように、ＪＶＯＬ２５２、２５３をラップアラウンド方式で使用しないので、ページの割当量を低減することができる。
【０１７３】
図４３は、実施例４に係るプールテーブルの一例を示す図である。
【０１７４】
プールテーブル２２４は、プール２９０における各ページ２９２を管理するテーブルであり、例えば、メモリパッケージ２２０の制御情報部２２１に格納される。
【０１７５】
プールテーブル２２４は、ページ番号２２４ａと、開始アドレス２２４ｂと、終了アドレス２２４ｃと、状態２２４ｄと、割当先２２４ｅとのフィールドを対応付けたレコードを管理する。ページ番号２２４ａには、プール２９０におけるページ２９２を識別するページ番号を格納する。開始アドレス２２４ｂには、対応するページの開始アドレスが格納される。終了アドレス２２４ｃには、対応するページ２９２の終了アドレスが格納される。状態２２４ｄには、対応するページ２９２が仮想ボリューム２９３に割当て済みか、未割当てかを示す情報が格納される。割当先２２４ｅには、対応するページ２９２が割当てられた仮想ボリューム番号が格納される。プールテーブル２２４の一番上のレコードによると、ページ番号が“１”のページは、開始アドレスが“０”であり、終了アドレスが“９９”であり、仮想ボリューム１に割当て済みであることがわかる。
【０１７６】
図４４は、実施例４に係る仮想ボリュームテーブルの一例を示す図である。
【０１７７】
仮想ボリュームテーブル２２５は、仮想ボリューム２９３に対するページ２９２の割当てを管理するテーブルであり、例えば、メモリパッケージ２２０の制御情報部２２１に格納される。
【０１７８】
仮想ボリュームテーブル２２５は、仮想ボリューム番号２２５ａと、アドレス２２５ｂと、ページ割当て状態２２５ｃと、ページ番号２２５ｄとのフィールドを含むレコードを管理する。仮想ボリューム番号２２５ａには、仮想ボリューム２９３を識別する仮想ボリューム番号が格納される。アドレス２２５ｂには、対応する仮想ボリューム２９３のアドレスの範囲が格納される。ページ割当て状態２２５ｃには、対応するアドレスの範囲の領域に対してページ２９２が割当て済みか否かを示す情報が格納される。ページ番号２２５ｄには、対応する領域に割当てられたページ番号が格納される。仮想ボリュームテーブル２２５の一番上のレコードによると、仮想ボリューム番号が“１”の仮想ボリュームの０〜９９のアドレスの領域には、ページ番号“２”のページ２９２が割当てられていることがわかる。
【０１７９】
図４５から図４８を用いて、ブロック解放により、未使用ブロックのみに対応するページを解放する処理について説明する。図４５は、実施例４に係るブロック解放処理のフローチャートである。図２４に示したブロック解放プログラム（正）２２２４のステップＳ４０５の直後に、ページ解放プログラムをコールするステップＳ４０６が追加されている。
【０１８０】
図４６は、図４５に示したブロック解放プログラム（正）２２２４のステップＳ４０６からコールされるページ解放プログラムの一例を示す図である。図４７は、実施例４に係るブロックとページの対応関係の一例を示す図である。図４８は、ページ解放プログラムの別の一例を示す図である。
【０１８１】
図４６の処理について説明する。ページ解放プログラムは、ブロックＢＫに対応する１以上のページ２９２を特定する（ステップＳ１５０１）。例えば、図４７の例では、ブロック番号が１のブロックに対応するページは、ページＡである。また、ブロック番号が２のブロックに対応するページは、ページＡ，ページＢである。次いで、ページ解放プログラムは、未処理のページを処理対象ページとする（ステップＳ１５０２）。例えば、図４７の例で、処理対象ブロックのブロック番号が２の場合、最初にページＡが処理対象とされる。ページＡに対してステップＳ１５０３からＳ１５０５を実行した後、ページＢに対して、ステップＳ１５０３からＳ１５０５を実行する。
次いで、ページ解放プログラムは、ページに対応する１以上のブロックを特定する（ステップＳ１５０３）。例えば、図４７に示すページＡが処理対象である場合には、ブロック１、ブロック２が特定される。
【０１８２】
次いで、ページ解放プログラムは、ブロック管理ビットマップ２２１２を参照し、特定したすべてのブロックが空きであるか否かを判定する（ステップＳ１５０４）。この結果、全てのブロックが空きである場合（ステップＳ１５０４でＹｅｓ）には、ページ解放プログラムは、当該ページを解放し（ステップＳ１５０５）、処理をステップＳ１５０６に進める。すなわち、ページ解放プログラムは、プールテーブル２２４、仮想ボリュームテーブル２２５から対応するページ２９２の割当て情報を削除し、処理をステップＳ１５０６に進める。一方、全てのブロックが空きでない場合（ステップＳ１５０４でＮｏ）には、ページ解放プログラムは、処理をステップＳ１５０６に進める。
【０１８３】
ステップＳ１５０６では、ページ解放プログラムは、未処理のページ２９２があるか否かを判定し、未処理のページ２９２があれば（ステップＳ１５０６でＹｅｓ）、ステップＳ１５０２からの処理を実行する一方、未処理のページ２９２がなければ（ステップＳ１５０６でＮｏ）、当該ページ解放処理を終了する。
【０１８４】
このページ解放処理により、転送したＪＮＬデータ２５２４を格納しているブロックＢＫに割当てられていたページ２９２を適切に開放し、他の領域への割当てに利用できるようになる。
【０１８５】
図４６に示すページ解放処理では、空となったブロックに割当てられていたページ２９２を解放するようにしていたが、小サイズブロックＳＢＫは、以降において、データが書き込まれて、新たなページ２９２が割当てられる可能性が高い。そこで、図４８に示すように、小サイズブロックＳＢＫに割当てられたページ２９２について解放しないようにして、小サイズブロックＳＢＫに対するページ２９２の再割り当てに要する負荷を低減するようにすることができる。
【０１８６】
図４８は、実施例４の変形例に係るページ解放処理のフローチャートである。なお、ページ解放処理（図４６）と同様な部分には、同一の符号を付し、ここでは、異なる点について説明する。
【０１８７】
全てのブロックが空きである場合（ステップＳ１５０４でＹｅｓ）には、ページ解放プログラムは、特定したすべてのブロックが大サイズブロックＬＢＫであるか否かを判定する（ステップＳ１５０７）。この結果、特定したすべてのブロックが大サイズブロックＬＢＫである場合（ステップＳ１５０７でＹｅｓ）には、ステップＳ１５０５に進んでページ２９２を解放する一方、特定したすべてのブロックが大サイズブロックＬＢＫでない場合（ステップＳ１５０７でＮｏ）には、ページ２９２を解放することなく、処理をステップＳ１５０６に進める。
【０１８８】
このページ解放処理によると、小サイズブロックＳＢＫに割当てられているパージ２９２が解放されないので、以降において、当該小サイズブロックＳＢＫに対してＪＮＬデータ２５２４が格納される際に、ページ２９２の再割当てに要する処理を行わずに済み、処理負荷を低減するようにすることができる。
【０１８９】
仮想ボリューム２９３は、作成した後に、容量を拡張できるという特徴がある。ここで、仮想ボリューム２９３の容量を拡張した場合の処理について説明する。
【０１９０】
図４９は、実施例４に係るジャーナルボリュームの拡張を説明する第１の図である。
【０１９１】
例えば、拡張前に示すＪＶＯＬ２５２（２５３）の容量を拡張する場合には、拡張後に示すように、ＪＶＯＬ２５２の最終ブロック（同図では、ブロック番号５のブロック）の容量のみを拡大するようにすればよい。この場合には、ＪＶＯＬ２５２の容量の拡張に伴って、ブロック数が変更しないので、ブロック管理ビットマップ２２１２や、ブロック内最大シーケンス番号情報２２１５等の情報量は変更されない。ここで、最終ブロックは、（小サイズブロックのブロックサイズ×小サイズブロック数）＋（大サイズブロックのブロックサイズ×（大サイズブロック数−１））により算出される開始アドレスから、ＪＶＯＬ２５２の拡張後の終端のアドレスまでの範囲として把握できる。
【０１９２】
図５０は、実施例４に係るジャーナルボリュームの拡張を説明する第２の図である。
【０１９３】
また、例えば、拡張前に示すＪＶＯＬ２５２の容量を拡張する場合には、拡張後に示すように、ＪＶＯＬ２５２の拡張された容量を複数（例えば、３２個）のブロック（追加ブロック）ＡＢＫに分割して管理するようにしてもよい。この場合には、ブロック管理ビットマップ２２１２や、ブロック内最大シーケンス番号情報２２１５等に対して、増加したブロックＡＢＫに対応するレコードを追加する必要がある。このような、方法を採ることで、図４１の状態１で説明したＪＶＯＬの利用効率が低下する問題を回避できる。
【実施例５】
【０１９４】
次に、実施例５に係る計算機システムについて説明する。
【０１９５】
実施例５に係る計算機システムは、上記した実施例において、ＪＮＬデータ２５２４及び／又は、ＪＮＣＢ２５２３を、ブロックを使って格納する管理を行うようにしていたものを、ブロックを用いずに管理するようにしたものである。
【０１９６】
図５１は、実施例５の概要を説明する図である。
【０１９７】
本実施例においては、状態１に示すように、ＪＶＯＬ２５２（２５３）における未転送のＪＮＬデータ２５２４の格納先の先頭のアドレスを示す先頭ポインタ（１）と、未転送のＪＮＬデータ２５２４の終端のアドレス（転送済みのＪＮＬデータの格納先の先頭のアドレス）を示す終端ポインタ（１）とのポインタの組（領域特定情報）を管理することにより、未転送のＪＮＬデータ２５２４の格納されている領域を管理することができる。
【０１９８】
ここで、例えば、転送済みのＪＮＬデータ２５２４の領域（転送済領域）に、新たなＪＮＬデータ２５２４を格納するようにする、すなわち、転送済みのＪＮＬデータ２５２４が格納されている領域を再利用する場合には、状態２に示すように、再利用している領域に対する未転送のＪＮＬデータの格納されている領域（第２領域）を管理するために、もう一つのポインタの組（先頭ポインタ（２）及び終端ポインタ（２）：第２領域特定情報）を用いることにより、再利用している領域における未転送のＪＮＬデータ２５２４の領域を管理する。
【０１９９】
さらに、再利用している領域の全てに対してＪＮＬデータ２５２４を格納した場合には、状態３に示すように、先頭ポインタ（１）よりも後ろの未使用領域にＪＮＬデータ２５２４を格納するようにし、別のポインタの組（先頭ポインタ（３）及び終端ポインタ（３））を用いて未転送のＪＮＬデータの領域（第３領域）を管理する。
【０２００】
このように、複数のポインタの組（先頭ポインタ及び終端ポインタ）を用いることにより、未転送のＪＮＬデータ２５２４が格納されている領域を管理することができる。ここで、作成されたポインタの組の順番に従って、それらポインタにより示される領域の各ＪＮＬデータ２５２４が並んでいる。これにより、前に作成されたポインタの組が示す領域のＪＮＬデータ２５２４は、後で作成されたポインタの組が示す領域のＪＮＬデータ２５２４よりも前に作成されたＪＮＬデータ２５２４であることが特定できる。したがって、ＪＮＬデータ２５２４の発生順番を適切に把握することができる。
【０２０１】
図５２は、実施例５に係る制御情報部の詳細図である。
【０２０２】
実施例５に係る制御情報部２２１は、実施例４に係る制御情報部２２１に対して、さらに、１以上の先頭ポインタ２２１Ｃ及び終端ポインタ２２１Ｄの組（例えば、先頭ポインタ（１）及び終端ポインタ（１）等）を格納する。
【０２０３】
次に、実施例５に係る計算機システムにおける動作について説明する。ここでは、実施例４と異なる動作について説明する。
【０２０４】
図５３は、実施例５に係るＪＮＬデータ格納アドレス決定処理のフローチャートである。
【０２０５】
ＪＮＬデータ格納アドレス決定プログラム２２２３は、使用中の先頭ポインタ、すなわち、最後に作成された先頭のポインタを取得し（ステップＳ１６０１）、当該ポインタが示すアドレス以前に所定サイズ以上の空き領域（転送済領域）があるか否かを判定する（ステップＳ１６０２）。
【０２０６】
この結果、所定サイズ以上の空き領域がない場合（ステップＳ１６０２でＮｏ）には、ＪＮＬデータ格納アドレス決定プログラム２２２３は、使用中の先頭ポインタが示すアドレスの直後にＪＮＬデータ２５２４を格納可能であるか否かを判定する（ステップＳ１６０３）。使用中の先頭ポインタが示すアドレスの直後にＪＮＬデータ２５２４を格納可能である場合（ステップＳ１６０３でＹｅｓ）には、先頭ポインタが示すアドレスの直後の領域をＪＮＬデータ２５２４の格納先と決定し（ステップＳ１６０８）、使用中の先頭ポインタを更新する（ステップＳ１６０９）。
【０２０７】
一方、使用中の先頭ポインタが示すアドレスの直後にＪＮＬデータ２５２４を格納可能でない場合（ステップＳ１６０３でＮｏ）には、ＪＮＬデータ格納アドレス決定プログラム２２２３は、先頭ポインタよりも後ろの領域で空き領域を探し（ステップＳ１６０４）、ステップＳ１６０５へ処理を進める。
【０２０８】
また、ステップＳ１６０２で、所定サイズ以上の空き領域があると判定した場合（ステップＳ１６０２でＹｅｓ）には、ＪＮＬデータ格納アドレス決定プログラム２２２３は、ステップＳ１６０５へ処理を進める。
【０２０９】
ステップＳ１６０５では、ＪＮＬデータ格納アドレス決定プログラム２２２３は、制御情報部２２０に、新しいポインタの組（終端ポインタ及び先頭ポインタ）の領域を確保し、確保したポインタを使用中のポインタとし（ステップＳ１６０６）、空き領域の先頭のアドレスを示すように終端ポインタを設定する（ステップＳ１６０７）。次いで、終端ポインタが示すアドレスの直後の領域をＪＮＬデータ２５２４の格納先と決定し（ステップＳ１６０８）、使用中の先頭ポインタを更新する（ステップＳ１６０９）。これにより、使用中の先頭ポインタよりも前の領域に所定サイズ以上の空き領域がある場合に、ＪＮＬデータ２５２４をその空き領域に格納させることができる。ここで、本実施例では、空き領域のサイズを所定サイズ以上とすることで、未転送のＪＮＬデータ２５２４を格納する領域を管理するためのポインタの組の数を低減することができる。なお、空き領域のサイズによらず、空き領域があれば使用するようにしてもよい。なお、ステップＳ１６０４で、空き領域が見つけられない場合、ＪＶＯＬ２５２には、空き領域が存在しないため、異常終了する。
【０２１０】
図５４は、実施例５に係るＪＮＬリード処理のフローチャートである。なお、ＪＮＬリード処理（図２５）と同様な部分には、同一の符号を付し、ここでは、異なる点について説明する。
【０２１１】
正ストレージシステム２００Ａでは、ＪＮＬリードプログラム（正）２２２６が、リードしたＪＮＬ（ＪＮＣＢ２５２３及びＪＮＬデータ２５２４）を、副ストレージシステム２００Ｂに転送した後（ステップＳ５０４）、転送したデータが格納されていた領域を全て特定する（ステップＳ１７０１）。ここで、転送したデータが格納されていた領域とは、一組のポインタによって示される領域のことをいう。次に、特定された一つ以上の領域から一つ処理対象を決める（ステップＳ１７０２）。
【０２１２】
次いで、ＪＮＬリードプログラム（正）２２２６は、決定した領域内の全てのＪＮＬデータ２５２４を転送したか否かを判定する（ステップＳ１７０３）。ここで、領域内の全てのＪＮＬデータ２５２４を転送したか否かは、対応する一組のポインタにより示される領域が、ステップＳ１７０１で特定したデータ領域に含まれているか否かにより判定することができる。
【０２１３】
この結果、領域内の全てのＪＮＬデータ２５２４を転送した場合（ステップＳ１７０３でＹｅｓ）には、ＪＮＬリードプログラム（正）２２２６は、対応する一組のポインタを解放し（ステップＳ１７０４）、処理をステップＳ１７０６に進める。
【０２１４】
一方、領域内の全てのＪＮＬデータを転送していない場合（ステップＳ１７０３でＮｏ）には、ＪＮＬリードプログラム（正）２２２６は、対応するポインタの組の終端ポインタを、転送したＪＮＬデータ２５２４の位置まで進め（ステップＳ１７０５）、処理をステップＳ１７０６に進める。
【０２１５】
ステップＳ１７０６では、ＪＮＬリードプログラム（正）２２２６は、転送した全てのＪＮＬデータ２５２４の領域をチェックしたか否かを判定し、全てのＪＮＬデータ２５２４の領域をチェックしていない場合（ステップＳ１７０６でＮｏ）には、処理をステップＳ１７０２に進める一方、全てのＪＮＬデータ２５２４の領域をチェックしている場合（ステップＳ１７０６でＹｅｓ）には、処理を終了する。
【０２１６】
副ストレージシステム２００Ｂでは、ＪＮＬを正ストレージシステム２００Ａから受領すると（ステップＳ６０３）、ＪＮＬリードプログラム（副）２２２７が、ＪＮＬデータ格納アドレス決定プログラム２２２３をコールする（ステップＳ１８０１）。副ストレージシステム２００Ｂでは、図５３に示すＪＮＬデータ格納アドレス決定処理が実行され、ＪＮＬデータ２５２４を格納するＪＶＯＬ２５３のブロック及びアドレスが決定される。
【０２１７】
図５５は、実施例５に係るリストア処理のフローチャートである。なお、リストア処理（図２６）と同様な部分には、同一の符号を付し、ここでは、異なる点について説明する。
【０２１８】
副ストレージシステム２００Ｂでは、リストアプログラム２２２８が、リストアした最大のシーケンス番号をリストア済みシーケンス番号とした後（ステップＳ７０６）、リストアしたデータが格納されていた領域を全て特定する（ステップＳ１９０１）。ここで、転送したデータが格納されていた領域とは、一組のポインタによって示される領域のことをいう。次に、特定された一つ以上の領域から一つ処理対象を決める（ステップＳ１９０２）。
【０２１９】
次いで、リストアプログラム２２２８は、決定した領域内の全てのＪＮＬデータ２５２４をリストアをしたか否かを判定する（ステップＳ１９０３）。ここで、領域内の全てのＪＮＬデータ２５２４をリストアしたか否かは、対応する一組のポインタにより示される領域が、ステップＳ１９０１で特定したデータ領域に含まれているか否かにより判定することができる。
【０２２０】
この結果、領域内の全てのＪＮＬデータ２５２４をリストアした場合（ステップＳ１９０３でＹｅｓ）には、リストアプログラム２２２８は、対応する一組のポインタを解放し（ステップＳ１９０４）、処理をステップＳ１９０６に進める。
【０２２１】
一方、領域内の全てのＪＮＬデータ２５２４をリストアしていない場合（ステップＳ１９０３でＮｏ）には、リストアプログラム２２２８は、対応するポインタの組の終端ポインタを、リストアしたＪＮＬデータ２５２４の位置まで進め（ステップＳ１９０５）、処理をステップＳ１９０６に進める。
【０２２２】
ステップＳ１９０６では、リストアプログラム２２２８は、リストアした全てのＪＮＬデータ２５２４の領域をチェックしたか否かを判定し、全てのＪＮＬデータ２５２４の領域をチェックしていない場合（ステップＳ１９０６でＮｏ）には、処理をステップＳ１９０２に進める一方、全てのＪＮＬデータ２５２４の領域をチェックしている場合（ステップＳ１９０６でＹｅｓ）には、処理を終了する。
【０２２３】
以上、幾つかの実施例を説明したが、本発明はそれらの実施例に限られず、他の様々な態様に適用可能である。
【０２２４】
例えば、上記した実施例では、ＪＮＬを一時的に格納するＪＶＯＬ２５２におけるＪＮＬの管理に対して本発明を適用していたが、本発明はこれに限られず、例えば、計算機システム１０におけるＩＯ（入出力）に関するモニタデータを、当該モニタデータを利用する装置に送信する場合において、モニタデータを一時的に格納するバッファとして利用されるバッファ領域（例えば、ボリューム）におけるモニタデータの管理に対しても適用することができ、要は、或るデータを一時的に格納するバッファとして利用される領域におけるデータの管理に対して適用することができる。
【符号の説明】
【０２２５】
１０…計算機システム、１００…ホスト、１００Ａ…正ホスト、１００Ｂ…副ホスト、２００…ストレージシステム、２００Ａ…正ストレージシステム、２００Ｂ…副ストレージシステム
【図１】
0005778872.tif 000002
【図２】
0005778872.tif 000003
【図３】
0005778872.tif 000004
【図４】
0005778872.tif 000005
【図５】
0005778872.tif 000006
【図６】
0005778872.tif 000007
【図７】
0005778872.tif 000008
【図８】
0005778872.tif 000009
【図９】
0005778872.tif 000010
【図１０】
0005778872.tif 000011
【図１１】
0005778872.tif 000012
【図１２】
0005778872.tif 000013
【図１３】
0005778872.tif 000014
【図１４】
0005778872.tif 000015
【図１５】
0005778872.tif 000016
【図１６】
0005778872.tif 000017
【図１７】
0005778872.tif 000018
【図１８】
0005778872.tif 000019
【図１９】
0005778872.tif 000020
【図２０】
0005778872.tif 000021
【図２１】
0005778872.tif 000022
【図２２】
0005778872.tif 000023
【図２３】
0005778872.tif 000024
【図２４】
0005778872.tif 000025
【図２５】
0005778872.tif 000026
【図２６】
0005778872.tif 000027
【図２７】
0005778872.tif 000028
【図２８】
0005778872.tif 000029
【図２９】
0005778872.tif 000030
【図３０】
0005778872.tif 000031
【図３１】
0005778872.tif 000032
【図３２】
0005778872.tif 000033
【図３３】
0005778872.tif 000034
【図３４】
0005778872.tif 000035
【図３５】
0005778872.tif 000036
【図３６】
0005778872.tif 000037
【図３７】
0005778872.tif 000038
【図３８】
0005778872.tif 000039
【図３９】
0005778872.tif 000040
【図４０】
0005778872.tif 000041
【図４１】
0005778872.tif 000042
【図４２】
0005778872.tif 000043
【図４３】
0005778872.tif 000044
【図４４】
0005778872.tif 000045
【図４５】
0005778872.tif 000046
【図４６】
0005778872.tif 000047
【図４７】
0005778872.tif 000048
【図４８】
0005778872.tif 000049
【図４９】
0005778872.tif 000050
【図５０】
0005778872.tif 000051
【図５１】
0005778872.tif 000052
【図５２】
0005778872.tif 000053
【図５３】
0005778872.tif 000054
【図５４】
0005778872.tif 000055
【図５５】
0005778872.tif 000056