以下、図面を参照して、本発明の一実施形態について説明する。
図1は、本実施形態の概念の説明図である。まず、図1を参照して、本実施形態の概念について説明する。
図1(A)に示すように、本実施形態では、信頼性及び性能のうちの少なくとも1つの属性レベルが異なる複数の記憶デバイスが混在している。複数の記憶デバイスには、例えば、属性レベルの高い記憶デバイスとして、高信頼性及び高性能のディスク装置である1以上のファイバチャネルディスク装置(以下、「FCディスク装置」と言う)201が含まれている。また、属性レベルの低い記憶デバイスとして、低信頼性及び低性能であるがFCディスク装置201よりも安価である1以上のシリアルATAディスク装置(以下、「SATAディスク装置」と言う)203が含まれている。なお、本実施形態において、「信頼性」とは、例えば、データを破損することなく保持することができる耐久性や、故障が発生する確率等であり、具体的には、例えば、MTBF(Mean Time Between Failure)のことを言う。また、「性能」とは、例えば、データの転送レートの大きさや、応答速度の速さのことである。
1以上のFCディスク装置201及び1以上のSATAディスク装置203上には、それぞれ、複数の論理ユニット(以下、LU)が備えられる。各LUは、複数の同一サイズのサブLU(以下、「chunk」と言う)から構成されている。以下、FCディスク装置201上に備えられるLU205を、「FC-LU」と称し、SATAディスク装置203上に備えられるLU207を、「SATA-LU」と称する。また、FC-LU205を構成するchunkを「FC-chunk」と称し、FC-LU206を構成するchunkを「SATA-chunk」と称する。なお、図1では、FC-chunkを白抜きで表し、SATA-chunkをハッチングで表す。
本実施形態では、1以上のLUによって、1つの仮想LUが構成される。仮想LUは、論理ボリュームとも言う。本実施形態では、仮想LUとして、例えば、プライマリボリューム(以下PVOL)204と、セカンダリボリューム(以下SVOL)206とがあるPVOL204は、1以上のFC-LU205から構成される。一方SVOL206は、1以上のFC-LU205のみから構成されても良いし、1以上のSATA-LU207のみから構成されても良いし、FC-LU205とSATA-LU207との組み合わせから構成されても良い。以下、PVOL204を構成するFC-LU205を、「PVOL-FC-LU205」と称しPVOL204を構成するFC-chunkを、「PVOL-FC-chunk」と称する。また、SVOL206を構成するFC-LU205を、「SVOL-FC-LU205」と称し、SVOL206を構成するSATA-LU207を、「SVOL-SATA-LU207」と称し、SVOL206を構成するFC-chunkを、「SVOL-FC-chunk」と称し、SVOL206を構成するSATA-chunkを、「SVOL-SATA-chunk」と称する。更に、SVOL-FC-chunk及びSVOL-SATA-chunkを単に「SVOL-chunk」と総称する場合もある。
本実施形態では、記憶制御システムは、PVOL204とSVOL206とを二重化して管理することができ、その場合、例えばホスト装置からのデータをPVOL204に書込む場合、同一のデータをSVOL206に書込むことができる。具体的には、記憶制御システムは、PVOL-FC-chunkと、SVOL-FC-chunk又はSVOL-SATA-chunkとを二重化して管理し、或るPVOL-FC-chunkにサブデータ(データの一構成要素)を書き込む場合、二重化されたSVOL-FC-chunk又はSVOL-SATA-chunkにも同じサブデータを書き込む。以下、PVOL204とSVOL206に同じデータを格納することを「ミラーリング」と呼び、PVOL204とSVOL206のペアのことを「ボリュームペア」と呼び、PVOL-FC-chunkとSVOL-FC-chunk又はSVOL-SATA-chunkとのペアのことを「chunkペア」と呼ぶ。
また、本実施形態では、PVOL-FC-chunk、SVOL-FC-chunk及びSVOL-SATA-chunkの他に、PVOL204及びSVOL206のいずれにも属していない複数のプールchunkから構成されたプールchunkグループ208が存在する。プールchunkグループ208を構成する複数のプールchunkには、FC-chunkである「プールFC-chunk」と、SATA-chunkである「プールSATA-chunk」とが含まれている。記憶制御システムは、プールchunkグループ208の中からプールchunkを選択してSVOL-chunkに割当て、そのSVOL-chunk内のサブデータを、選択されたプールchunkにコピーし、そのプールchunkをSVOL-chunkとし、サブデータのコピー元となったSVOL-chunkをプールchunkにすることで、プールchunkとSVOL-chunkとを交換することができる。なお、どのSVOL-chunkにどのようなプールchunkを割当てるかは、種々の観点、例えば、そのSVOL-chunkのchunkペア相手であるPVOL-chunk内のサブデータ更新頻度が幾つかに基づいて行うことができる。
具体的には、例えば、図1(A)に示すように、PVOL-FC-chunk「#2」とSVOL-FC-chunk「#2」によってchunkペアが構成されている場合において、PVOL-FC-chunk「#2」内のサブデータの更新頻度が所定閾値よりも低いことが検出されたならば、記憶制御システムは、プールchunkグループ205の中からプールSATA-chunk(例えば「#51」)を選択し、SVOL-FC-chunk「#2」内のサブデータBを、選択したプールSATA-chunk「#51」にコピーする。そして、記憶制御システムは、図1(B)に示すように、プールSATA-chunk「#51」を、SVOL-FC-chunk「#2」の代わりにSVOL-FC-chunk「#51」とし、逆に、SVOL-FC-chunk「#2」をプールSATA-chunk「#51」の代わりにプールSATA-chunk「#2」とする。このように、サブデータの更新頻度が所定閾値よりも低いPVOL-FC-chunkのchunkペア相手がSVOL-FC-chunkであることが検出された場合には、そのPVOL-FC-chunkのchunkペア相手は、SVOL-FC-chunkからプールSATA-chunkに切替えられる(なお、切替え後、そのプールSATA-chunkはSVOL-SATA-chunkとなる)。
また、例えば、図1(A)に示すように、PVOL-FC-chunk「#8」とSVOL-SATA-chunk「#4」によってchunkペアが構成されている場合において、PVOL-FC-chunk「#8」内のサブデータの更新頻度が所定閾値よりも高いことが検出されたならば、記憶制御システムは、プールchunkグループ205の中からプールFC-chunk(例えば「#53」)を選択し、SVOL-SATA-chunk「#4」内のサブデータHを、選択したプールFC-chunk「#53」にコピーする。そして、記憶制御システムは、図1(B)に示すように、プールFC-chunk「#53」を、SVOL-SATA-chunk「#4」の代わりにSVOL-FC-chunk「#53」とし、逆に、SVOL-SATA-chunk「#4」をプールFC-chunk「#53」の代わりにプールSATA-chunk「#4」とする。このように、サブデータの更新頻度が所定閾値よりも高いPVOL-FC-chunkのchunkペア相手がSVOL-SATA-chunkであることが検出された場合には、そのPVOL-FC-chunkのchunkペア相手は、SVOL-SATA-chunkからプールFC-chunkに切替えられる(なお、切替え後、そのプールFC-chunkはSVOL-FC-chunkとなる)。
以上が、本実施形態の概念についての説明である。なお、以下の説明では、PVOL204を構成する1以上のFC-LU205や、SVOL206を構成する1以上のFC-LU205及びSATA-LU207は、同一の記憶制御システム内に存在するものとするが、複数の装置に分散して備えられていても良い。
以下、本実施形態について詳述する。
図2は、本実施形態に係る記憶制御システムの構成例を示す。
記憶制御システム200は、1又は複数のファイバチャネルインターフェース装置(以下、ファイバI/F)290A、290Bを備えている(勿論FCのインターフェース装置に限らず他のインターフェース装置であっても良い)。例えば、ファイバI/F290Aには、パーソナルコンピュータ等のホスト装置100が接続されても良いし、ファイバI/F290Bには、テープ装置(例えば磁気テープ記録装置)500を有するバックアップサーバ400が接続されても良い。バックアップサーバ400は、ファイバI/F290Bを介してSVOL206内のデータを読出し、そのデータをテープ装置500に書き込むことができる。なお、バックアップ中にSVOL206内のデータが更新されるとデータの整合性がとれなくなるため、記憶制御システム200は、ミラーリングの最中には、バックアップサーバ400によるバックアップを許可しない。バックアップを許可する場合としては、例えば、ホスト装置100からPVOL204へのデータ更新は許可するが同じデータ更新をSVOL206には行わない非ミラーリングの状態中がある。
記憶制御システム200は、例えばLANコントローラ等の管理インターフェース(以下、管理I/F)240を有する。管理I/F240には、記憶制御システム200を管理するための管理端末600が接続される。
記憶制御システム200は、複数のディスク装置201、203と、複数のディスク装置201、203を制御するディスクコントローラ250と、外部装置(例えばホスト装置100)とディスク装置201、203との間でやり取りされるデータを一時的に記憶するキャッシュメモリ230と、記憶制御システム200の動作を制御するCPU210と、CPU210に読込まれるコンピュータプログラムやCPU210に参照されるテーブル等の制御情報が格納される制御メモリ220とが備えられる。
複数のディスク装置201、203には、1以上のFCディスク装置201と、1以上のSATAディスク装置203とが含まれている。1以上のFCディスク装置201には、前述したように、複数のFC-LU205が備えられている。各FC-LU205は、PVOL204の構成要素にもなるし、SVOL206の構成要素になることもできる。一方、1以上のSATAディスク装置203には、前述したように、1以上のSATA-LU207が備えられている。SATA-LU207は、SVOL206の構成要素になることができる。図示の例では、1つのFC-LU205によってPVOL204が構成され、1つのFC-LU205と1つのSATA-LU207とによってSVOL206が構成されている。
制御メモリ220には、基本制御プログラム301、ボリュームコピー取得プログラム302、更新頻度閾値入替えプログラム303、ディスク使用割合入替えプログラム304、障害切り替えプログラム305、ボリュームコピーLU登録テーブル309、ボリュームコピー管理テーブル308、設定値テーブル307、障害対応ボリュームコピー管理テーブル306及びLU管理テーブル911が格納されている。
基本制御プログラム301は、記憶制御システム200の基本的な動作を制御するためのコンピュータプログラムである。例えば、基本制御プログラム301は、ホスト装置100からのI/O要求に従って、LU205、206A又は206Bからデータを読み出しキャッシュメモリ230を介してホスト装置100に送信したり、そのI/O要求に含まれているデータを第1LU205に格納したりする。
ボリュームコピー取得プログラム302は、ボリュームコピー取得を実施するためのコンピュータプログラムである。
更新頻度閾値入替えプログラム303は、PVOL-FC-chunkの更新頻度が所定の更新頻度閾値以上か否かに基づいて、PVOL-FC-chunkに対応付けられたSVOLchunkのデータ入替え相手とするchunkの種類(別の言い方をすれば、プールFC-chunkとプールSATA-chunkのいずれか)を選択する。
ディスク使用割合入替えプログラム304は、SVOL206内におけるSVOL-FC-chunk(又はSVOL-SATA-chunk)の割合が所定の割合以上か否かに基づいて、SVOL-chunk内のサブデータのコピー先とするchunkの種類(別の言い方をすれば、プールFC-chunkとプールSATA-chunkのいずれか)を選択する。
障害切り替えプログラム305は、PVOL204に障害が発生した場合(例えばPVOL-FC-LUを有するFCディスク装置が破損した場合)、PVOL-FC-chunkに対応したSVOL-FC−chunkを、PVOL-FC-chunkに切替える。また、障害切り替えプログラム305は、PVOL204に障害が発生した場合、PVOL-FC-chunkに対応したSVOL-SATA−chunkがSVOL207内に存在するならば、そのSVOL-SATA−chunk内のサブデータを、プールchunkグループ208の中から選択されたプールFC−chunkに移動し、そのプールFC−chunkをPVOL-FC-chunkに切替える。このようにして、障害切り替えプログラム305は、PVOL204に障害が発生した場合、PVOL-FC-chunkに対応したSVOL-FC−chunkと、PVOL-FC-chunkに対応するSVOL-SATA−chunkに割当てられたプールFC-chunkとによって、新たなPVOLを構成する。
以下、図3〜図6を参照して、制御メモリ220に格納される各テーブル309〜306及び911について説明する。
図3は、ボリュームコピーLU登録テーブル309の構成例を示す。
ボリュームコピーLU登録テーブル309には、記憶制御システム200内の複数のLUに関する情報が登録されるテーブルである。具体的には、例えば、ボリュームコピーLU登録テーブル309には、複数のLUの各々について、ペア番号、外部用LU番号、内部用LU番号、LU容量、ディスク種類、PVOL/SVOL情報及びアクセス属性が登録される。
ペア番号とは、ボリュームペアの識別番号である。
外部用LU番号とは、ホスト装置等の外部装置から受けるLU番号である。外部用LU番号は、2以上のLUを1つの論理ボリュームとして外部装置に提供したい場合には、それら2以上のLUに対して同一の番号となる。図示の例で言えば、外部装置からLU番号として「2」が指定された場合、内部用LU番号が「2」のLUと、内部用LU番号が「3」のLUとが1つのSVOL206として外部装置に提供されることになる。
内部用LU番号とは、記憶制御システム200が認識し管理するLU番号である。この実施形態では、例えば、内部用LU番号が「1」のLUはPVOL-FC-LU205であり、内部用LU番号が「2」のLUはSVOL-FC-LU205であり、内部用LU番号が「3」のLUはSVOL-SATA-LU207である。
LU容量とは、LUの記憶容量である。
ディスク種類とは、対応するLUを備えたディスク装置の種類(例えばインターフェース)を表す。具体的には、例えば、ディスク種類とは、FCディスク装置かSATAディスク装置かを表す。
PVOL/SVOL情報とは、対応するLUがPVOLとSVOLのどちらを構成するのかを表す情報である。
アクセス属性とは、対応するLUにどのようなアクセスを許可するかを表す情報である。例えば、「R/W可」は、読み出し及び書込みの両方が許可されることを意味し、「Rのみ可」は、読み出しは許可されるが書き込みは禁止されることを意味し、図示しない「Wのみ可」は、書込みは許可されるが読出しは禁止されることを意味し、図示しない「R/W不可」は、読出しも書き込みも禁止されることを意味する。アクセス属性には、様々な種類を採用することができる。
図14は、LU管理テーブル911の構成例を示す。
LU管理テーブル911には、記憶制御システム200に存在する複数のLUにそれぞれ対応した複数のLU情報が登録されている。LU情報には、例えば、内部用LU#(番号)、LU容量、ディスク種類、選択可否情報及びプールchunk#等のLU情報要素が含まれている。ここで、選択可否情報とは、ボリュームコピーのペアを設定する際に選択可能か否かを表す情報である(ちなみに、「ボリュームコピー」とは、ある時点でのデータの記憶イメージのことである)。また、プールchunk#とは、どのようなchunkとして使用されるかが未だ決まっておらず動的に割当可能な状態のchunk(つまりプールchunk)の番号である。
図4は、ボリュームコピー管理テーブルの構成例を示す。
ボリュームコピー管理テーブル308は、オリジナルデータ及びボリュームコピーに関する情報を管理するためのテーブルである。ボリュームコピー管理テーブル308は、左列、中列、及び右列の3つに大別される。
左列には、オリジナルデータを格納するPVOL204に関する情報が登録される。具体的には、例えば、左列には、PVOL204を構成する各chunk毎に、LU#、chunk#及び更新頻度が登録される。LU#は、対応するchunkを有し、PVOLとして登録されているLUの内部用LU番号である。chunk#は、そのLU内での付与されたchunkの通し番号である。例えば、chunk#の最小値は1、chunk#の最大値は、対応するchunkを有するLUのLU容量をchunkサイズで割って得られた商の値(余りが生じたら商に1を加えた値)である。更新頻度は、対応するchunkに格納されているサブデータが更新された回数であり、初期値は0である。更新頻度は、例えばCPU210によって、インクリメントされたりリセットされたりする。
中列には、ボリュームコピーを格納するSVOL206に関する情報が登録される。具体的には、例えば、中列には、SVOL206を構成する各chunk毎に、ディスク種類、LU#、及びchunk#が登録される。ディスク種類は、対応するchunkを有するLUを搭載したディスク装置の種類(例えばインターフェース種類)である。LU#は、対応するchunkを有し、SVOLとして登録されているLUの内部用LU番号である。chunk#は、そのLU内での付与されたchunkの通し番号である。この中列の各行は、左列の各行に対応している。すなわち、左列の行には、PVOL-FC-chunkに関する情報が登録されており、中列の行には、SVOL-chunk(具体的には、SVOL-FC-chunkとSVOL-SATA-chunkのいずれか)に関する情報が登録されている。
右列には、入替え相手chunkに関する情報が登録される。ここで、「入替え相手chunk」とは、それに対応するSVOL-chunk内のサブデータの入替え先(換言すれば移動先)となるchunkである。この右列には、各入替え相手chunk毎に、ディスク種類、LU#、及びchunk#が登録される。なお、入替え相手chunkとしては、未だどのchunkとして使用されことが決まっていないプールchunkを割当てることができる。また、空欄は、SVOL-chunkに入替え相手chunkがいないことを意味する。
このボリュームコピー管理テーブル308を参照するCPU210は、以下のことを識別することができる。すなわち、例えば、LU#「1」でchunk#が「1」であるPVOL-FC-chunkには、LU#「2」でchunk#が「1」であるFC−chunkがSVOL-chunkとして対応付けられていることを識別することができる。そして、そのSVOL-chunkには、LU#「3」でchunk#「5」であるプールSATA−chunkが入替え相手chunkとして対応付けられていることも識別することができる。
以上が、ボリュームコピー管理テーブル308の構成例である。なお、ボリュームコピー管理テーブル308では、1つのPVOL-FC-chunkに対して複数のSVOL-chunkが対応付けられていても良いし、1つのSVOL-chunkに対して複数の入替え相手chunkが対応付けられていても良い。
図5は、設定値テーブル307の構成例を示す。
設定値テーブル307には、例えば、管理端末600から情報を入力して登録することができる。設定値テーブル307には、例えば、chunkサイズ、入替周期、更新頻度閾値及びディスク割合閾値が登録される。
chunkサイズは、LUを何バイト毎に分割してchunkに区切るかを示す値である。
入替周期は、SVOL-chunkに格納されたデータを、更新頻度閾値或いはディスク割合閾値に基づいて、プールFC-chunkもしくはプールSATA-chunkに入れ替えるためのスケジュールを示すための値(例えば、1週間単位であれば「weekly」)である。
更新頻度閾値は、PVOL-FC-chunkに対応したSVOL-chunk内のサブデータをプールchunkに格納するか否かを決定するための閾値である。この更新頻度閾値は、外部装置からのライトコマンドによってPVOL-FC-chunk内のサブデータが上述した入替周期中に更新された回数(つまり、ボリュームコピー管理テーブル308に記録されている更新頻度)と比較される数値である。
ディスク割合閾値は、1以上のSVOL-FC−chunkで構成される記憶容量(以下、SVOL-FC記憶容量)のSVOL206全体における割合の閾値である。具体的には、例えば、ディスク割合閾値が「0.3」となっている場合には、SVOL-FC記憶容量が、SVOL206全体において0.3(つまり30%)であり、1以上のSVOL-SATA−chunkで構成される記憶容量(以下、SVOL-SATA記憶容量)が、SVOL206全体において残りの0.7(つまり70%)であることを意味する。
なお、複数のペア番号(換言すれば、複数のボリュームペア)にそれぞれ対応した複数の設定値テーブルが備えられても良い。この場合、記憶制御システム200のCPU210は、各ペア番号に対応した設定値テーブルを参照して制御を行っても良い。これにより、制御の柔軟性が高くなる。
図6は、障害対応ボリュームコピー管理テーブルの構成例を示す。
障害対応ボリュームコピー管理テーブル306は、PVOL204で障害が発生した場合に、PVOL204内のどのPVOL-FC-chunkに対応付けられたFC-chunkをPVOL-FC-chunkに切替えるかを管理するためのテーブルである。障害対応ボリュームコピー管理テーブル306は、ボリュームコピー管理テーブル308と同様に、左列、中列、及び右列の3つに大別される。左列は、更新頻度が登録されないことを除いて、ボリュームコピー管理テーブル308の左列と同様の構成である。中列は、ボリュームコピー管理テーブル308の中列と同様の構成である。
右列には、障害対応移動先chunkに関する情報が登録される。ここで、「障害対応移動先chunk」とは、SVOL-chunk内のサブデータの移動先としてプールchunkグループ208の中から選択されたchunkである。この右列には、各障害対応移動先chunk毎に、ディスク種類、LU#、及びchunk#が登録される。図6から分かるように、障害対応移動先chunkは、本実施形態では、FC-chunkであり、その障害対応移動先chunkに対応付けられるSVOL-chunkはSVOL-SATA-chunkである。これにより、PVOL204で障害が発生した際、PVOL-FC-chunk内のサブデータのコピーがSVOL-SATA-chunkに存在する場合には、そのSVOL-SATA-chunk内のサブデータは、そのSVOL-SATA-chunkに対応付けられたFC-chunk(つまり、高信頼性・高性能のディスク装置であるFCディスク装置上の空きchunk)に移動される。なお、空欄は、SVOL-chunkに障害対応移動先chunkが対応付けられていないことを意味する。
以上が、制御メモリ220に格納される各テーブル309〜306及び911についての説明である。
以下、上述したテーブル309〜306及び911を参照して本実施形態で行われる処理流れを説明する。
図7は、CPU210に読み込まれたボリュームコピー取得プログラム302によって実行される処理の流れを示す。
ボリュームコピー取得プログラム302は、ボリュームコピーのペアを設定する(ステップS1)。この場合、例えば、図11に示すような流れで、ボリュームコピーLU登録テーブル309に情報が登録される。
例えば、ボリュームコピー取得プログラム302は、例えば管理端末600のディスプレイ画面に、コピーペア設定画面912を表示させる。コピーペア設定画面912は、PVOL204を構成するPVOL-LUのLU#(内部用LU番号)と、SVOLを構成する複数のSVOL-LU(1以上のFC-LU及び1以上のSATA-LU)のLU#とを入力するようになっている。このコピーペア設定画面912に、ボリュームコピーLU登録テーブル309に登録されていない複数のLU(つまり、LU管理テーブル911において選択可になっているLU)の中からPVOL-FC-LU(PVOL204を構成するFC-LU)、SVOL-FC-LU(SVOL206を構成するFC-LU)、及びSVOL-SATA-LU(SVOL206を構成するSATA-LU)が選択されてそれぞれのLU#が入力されたならば、ボリュームコピー取得プログラム302は、入力された各LU#を、ボリュームコピーLU登録テーブル309に書く。また、ボリュームコピー取得プログラム302は、入力されたLU#に対応する他のLU情報要素(例えばディスク種類)をLU管理テーブル911から取得し、取得したLU情報要素をボリュームコピーLU登録テーブル309に書く。これにより、例えば、PVOL-FC-LUとして内部用LU#「1」が入力され、SVOL-FC-LUとして内部用LU#「2」が入力され、SVOL-SATA-LUとして内部用LU#「3」が入力された場合、ボリュームコピー取得プログラム302は、LU管理テーブル911において、内部用LU#「1」〜「3」の各々に対応した選択可否情報を選択可から選択不可に切替え、且つ、図3に示したようなボリュームコピーLU登録テーブル309を構築する。
再び図7を参照して、S2以降について説明する。
ボリュームコピー取得プログラム302は、例えば管理端末600を介して、ユーザから、設定値テーブル307の値の入力を受付ける。種々の値(すなわち、chunkサイズ、入替周期、更新頻度閾値及びディスク割合閾値)が入力された場合、ボリュームコピー取得プログラム302は、入力された値を設定値テーブル307に登録する(S2)。
次に、ボリュームコピー取得プログラム302は、PVOL-FC-chunkをボリュームコピー管理テーブル308に登録する(S3)。この処理における具体例を、図12(A)を参照し説明する。すなわち、例えば、ボリュームコピー取得プログラム302は、ボリュームコピーLU登録テーブル309に設定されたPVOL-FC-LUについて、それのLU容量及び設定値テーブル307に登録されたchunkサイズを基にchunkの数を算出する。そして、ボリュームコピー取得プログラム302は、算出された数のchunkに、それぞれ、通し番号としてchunk#を割当て、割当てたchunk#と、そのPVOL-FC-LUのLU#とを、ボリュームコピーLU登録テーブル309に登録する。ボリュームコピー取得プログラム302は、各PVOL-FC-chunkの更新頻度には、初期値として0を入力する。なお、ボリュームコピー取得プログラム302は、ホスト装置100等の外部装置からのライトコマンドに従ってデータ更新が行われたならば、データ更新が行われたPVOL-FC-chunkに対応する更新頻度を1つ加算する。
次に、ボリュームコピー取得プログラム302は、SVOL-FC-chunkをボリュームコピー管理テーブル308に登録する(S4)。この処理における具体例を、図12(B)を参照し説明する。すなわち、例えば、ボリュームコピー取得プログラム302は、PVOL-FC-chunkを登録する場合と同様の方法で、PVOL-FC-LUのchunkの数を算出して各chunkにchunk#を割当て、割当てたchunk#と、そのSVOL-FC-LUのLU#とを、ボリュームコピーLU登録テーブル309に登録する。
なお、S4において、全てのPVOL-FC-chunkに対してSVOL-chunkが設定されたならば(S5でY)、ボリュームコピー取得プログラム302は、後述するS6〜S10の動作は行わず、S11へ移行する。
また、ボリュームコピー取得プログラム302は、S4において、少なくとも1つのPVOL-FC-chunkに対してSVOL-chunkが設定されておらず、且つ、SVOL-FC-chunkが未だPVOL-FC-chunkに対応付けられておらずに残っている場合には(S5でN及びS6でY)、残っているPVOL-FC−chunkに対し、S4の動作を実行する。
また、ボリュームコピー取得プログラム302は、S4において、少なくとも1つのPVOL-FC-chunkに対してSVOL-chunkが設定されておらず、且つ、SVOL-FC-chunkが残っていない場合には(S5でN及びS6でN)、SVOL-SATA-LUについて、SVOL-FC-LUの場合と同様に、chunkの数を算出して各chunkにchunk#を割当て、割当てたchunk#及びLU#をボリュームコピーLU登録テーブル309に登録する(S7)。その結果の一例を、図12(C)に示す。
なお、S7において、ボリュームコピー取得プログラム302は、全てのPVOL-FC-chunkに対してSVOL-chunkが設定された場合には(S8でY)、後述するS9〜S10の動作は行わず、S11へ移行する。
また、S7において、ボリュームコピー取得プログラム302は、少なくとも1つのPVOL-chunkに対してSVOL-chunkが設定されておらず、且つ、SVOL-SATA-chunkが未だPVOL-FC-chunkに対応付けられておらずに残っている場合には(S8でN及びS9でY)、S7に戻る。
また、S7において、ボリュームコピー取得プログラム302は、少なくとも1つのPVOL-FC-chunkに対してSVOL-chunkが設定されておらず、且つ、SVOL-SATA-chunkが残っていない場合には(S8でN及びS9でN)、SVOLのchunkが足りないということなので、SVOLにLUを追加することの警告を、例えば管理端末600に出力する(S10)。
S5でY又はS8でYの後、PVOLにデータが格納された場合、ボリュームコピー取得プログラム302は、ボリュームコピー管理テーブル308を参照して、PVOLのどのchunkにどのSVOLのどのchunkが対応付けられているかを判別し、PVOL-FC-chunk及びそれに対応付けられたSVOL-chunkにサブデータを格納する(S11)。具体的には、例えば、ボリュームコピー取得プログラム302は、キャッシュメモリ230に登録されているサブデータを二重化し、キャッシュメモリ230上の一方のサブデータをPVOL-FC-chunkに格納し、キャッシュメモリ230上の他方のサブデータを、そのPVOL-FC-chunkに対応付けられたSVOL-chunkに格納する。
S11の後、ボリュームコピー取得プログラム302は、任意のタイミングで、ボリュームコピーLU登録テーブル309において、SVOLを構成する各LUのアクセス属性を、R/W可(読出し及び書込みの両方を許可)に設定する(S12)。
なお、この処理において、PVOLには、ランダムライトアクセスによってデータが書き込まれても良いし、シーケンシャルライトアクセスによってデータが書き込まれても良い。例えば、ランダムライトアクセスの場合、ボリュームコピー取得プログラム302は、各PVOL-FC-chunk毎に対応したライトコマンドを受け、1つのライトコマンドを処理する都度に、PVOL-FC-chunk及びそれに対応付けられたSVOL-chunkにサブデータを格納する。一方、例えば、シーケンシャルライトアクセスの場合、ボリュームコピー取得プログラム302は、複数のPVOL-FC-chunk(例えば全てのPVOL-FC-chunk)に対応したライトコマンドを受け、1つのライトコマンドを処理する際に、chunk#の若い方から順に、複数のPVOL-FC-chunk及びそれらにそれぞれ対応した複数のSVOL-chunkにサブデータを書き込んでいく。
図8は、CPU210に読み込まれた更新頻度閾値入替えプログラム303によって実行される処理の流れを示す。
設定値テーブル307に登録された入替周期の時期になった場合(S21−A)、或いは、ユーザから所定端末(例えば管理端末600或いはホスト装置100)を介してデータ入替え指示が入力された場合(S21−B)、基本制御プログラム301が更新頻度閾値入替えプログラム303を起動する。
更新頻度閾値入替えプログラム303は、1以上のボリュームペアの中から選択されたボリュームペア(以下、対象ボリュームペア)が、非ミラーの状態であることが判別されたならば、ボリュームコピーLU登録テーブル309において、対象ボリュームペアのSVOLを構成する各LUのアクセス属性を更新不可(例えばRのみ可)に設定する。対象ボリュームペアがミラー状態にあった場合には、警告を出力する(S22)。なお、対象ボリュームペアが非ミラー状態かミラー状態かは、例えば、各ペア番号に対応した状態情報(ミラー状態か非ミラー状態かを表す情報)が登録されているペア管理テーブル914(例えば制御メモリ220に用意される)を参照することにより、判別することができる。また、ミラー状態とは、二重化されている状態。すなわち、PVOL内でデータが更新された場合にはPVOLからSVOLに更新後データがコピーされるようになっている状態(換言すれば、SVOLがPVOLに同期した状態)である。非ミラー状態とは、二重化が解除されている状態、すなわち、PVOL内でデータが更新されてもPVOLからSVOLに更新後データがコピーされないようになっている状態(換言すれば、SVOLがPVOLに非同期した状態)である。
さて、次に、更新頻度閾値入替えプログラム303は、ボリュームコピー管理テーブル308の最初の行に登録されているPVOLchunkの更新頻度と、設定値テーブル307に登録されている更新頻度閾値とを比較する(S23)。
S23において、更新頻度閾値入替えプログラム303は、PVOL-FC-chunkの更新頻度が更新頻度閾値以上であり(S23でY)、且つ、そのPVOL-FC-chunkのchunkペア相手のSVOL-chunkがFC-chunkであることがボリュームコピー管理テーブル308から判別された場合には(S24でY)、後述のS28に進む。
S23において、更新頻度閾値入替えプログラム303は、PVOL-FC-chunkの更新頻度が更新頻度閾値以上であり(S23でY)、且つ、そのPVOL-FC-chunkに対応したSVOL-chunkがFC-chunkでないことがボリュームコピー管理テーブル308から判別された場合には(S24でN)、複数のプールchunkの中からプールFC-chunkを選択し、選択されたプールFC-chunkのchunk#及びLU#を、上記FC-chunkでないSVOL-chunk(つまりSVOL-SATA-chunk)に対応付けて、ボリュームコピー管理テーブル308の右列(入替え相手chunkの列)に書込む(S25)。これにより、サブデータの更新頻度が更新頻度閾値以上であるPVOL-FC-chunkに対応付けられたSVOL-SATA-chunkに対し、データの入替え相手として、高信頼性・高性能のディスク装置上に存在するFC-chunkが対応付けられる。なお、SVOL-SATA-chunkに対応付けられるchunk#は、複数のプールchunkの中から選択されたことから分かるように、ボリュームコピー管理テーブル308上に登録されていないchunk#である。
S23において、更新頻度閾値入替えプログラム303は、PVOL-FC-chunkの更新頻度が更新頻度閾値未満であり(S23でN)、且つ、そのPVOL-FC-chunkに対応したSVOL-chunkがSATA-chunkであることがボリュームコピー管理テーブル308から判別された場合には(S26でY)、後述のS28に進む。
S23において、更新頻度閾値入替えプログラム303は、PVOL-FC-chunkの更新頻度が更新頻度閾値未満であり(S23でN)、且つ、そのPVOL-FC-chunkに対応したSVOL-chunkがSATA-chunkでないことがボリュームコピー管理テーブル308から判別された場合には(S26でN)、複数のプールchunkの中からSATA-chunkを選択し、選択されたSATA-chunkのchunk#及びLU#を、上記SATA-chunkでないSVOL-chunk(つまりSVOL-FC-chunk)に対応付けて、ボリュームコピー管理テーブル308の右列(入替え相手chunkの列)に書込む(S27)。これにより、サブデータの更新頻度が更新頻度閾値未満であるPVOL-FC-chunkに対応付けられたSVOL-FC-chunkに対し、データの入替え相手として、低頼性・低性能であるが安価であるディスク装置上に存在するSATA-chunkが対応付けられる。
なお、S24でY、S26でY、S25又はS27において、入替え先のchunkが存在しない場合(換言すれば、選択可能なプールchunkが存在しない場合)(S28でN)、入替え先のchunkのプールが不足しているので、更新頻度閾値入替えプログラム303は、SVOLにLUを追加するか閾値の変更を行うような警告を、例えば管理端末600又はホスト装置100に出力する(S29)。また、全てのchunkの確認を行わずとも、後述のS31〜S36までの処理が行われても良い。この場合、その処理の後に、S22以降の処理が行われても良い。
さて、S28において、入替え先chunkが足りている場合(S28でY)、更新頻度閾値入替えプログラム303は、全てのPVOL-FC-chunkについて、更新頻度と更新頻度閾値との比較処理を終えたかを判断する(S30)。
S30において、まだ比較処理が行われていないPVOL-FC-chunkがあれば(S30でN)、更新頻度閾値入替えプログラム303は、S23に戻り、次のPVOL-FC-chunkについて、S23〜S28の処理を行う。
一方、S30において、全てのPVOL-FC-chunkについて比較処理が終わっていると判断されたならば(S30でY)、更新頻度閾値入替えプログラム303は、ボリュームコピー管理テーブル308に登録されたchunk#を有する入替え先chunkに、それに対応付いたコピー先chunk内のデータを入れ替える処理を実行するべく、バックアップ等によってSVOLからデータの読み出しが行われているか否かを判断する(S31)。
S31において、SVOLからデータの読出中であった場合は(S31でY)、更新頻度閾値入替えプログラム303は、読み出しを行っているバックアップ等の操作を停止するか、入替えプログラムを停止するような警告を出力する(S32)。
一方、S31において、SVOLからデータの読出し中でない場合には(S31でN)、更新頻度閾値入替えプログラム303は、SVOLを構成する各LUのアクセス属性を読出し不可(例えばR/W不可)に設定する(S33)。
S33の後、更新頻度閾値入替えプログラム303は、ボリュームコピー管理テーブル308に基づいて、中列(SVOL欄)に登録されているchunk#を持つSVOL-chunk内のサブデータを、そのSVOL-chunkに対応付けられた入替え先chunkに移動させる(S34)。それが完了したならば、更新頻度閾値入替えプログラム303は、ボリュームコピー管理テーブル308において、その入替え先chunkの内容(ディスク種類、LU#及びchunk#)を、その入替え先chunkに対応するSVOL-chunkの内容に上書きし、且つ、右列(入替え相手chunk欄)から、上記入替え先chunkの内容を消去する(S35)。また、その場合、更新頻度閾値入替えプログラム303は、消去した入替え先chunkの内容(例えばchunk#)を、プールchunkの内容として、例えばLU管理テーブル911に登録しても良い。
S35の後、更新頻度閾値入替えプログラム303は、SVOLを構成する各LUのアクセス属性を読出し可(例えばRのみ可)に設定する(S36)。なお、S36の後、もし全てのPVOL-FC-chunkについて上記比較処理を行わずにS31以降を行っていた場合には、更新頻度閾値入替えプログラム303は、点線で示す通り、S3に戻る。
S36の後、更新頻度閾値入替えプログラム303は、ボリュームコピー管理テーブル308にお上の各vの更新頻度を、初期値に戻す(S37)。そして、更新頻度閾値入替えプログラム303は、SVOLを構成する各LUのアクセス属性を更新可(例えばR/W可)に設定する(S38)。
以上が、更新頻度閾値入替えプログラム303が行う処理流れである。
図9は、CPU210に読み込まれたディスク使用割合入替えプログラム304によって実行される処理の流れを示す。
設定値テーブル307に登録された入替周期の時期になった場合(S41−A)、或いは、ユーザから所定端末(例えば管理端末600或いはホスト装置100)を介してデータ入替え指示が入力された場合(S41−B)、基本制御プログラム301がディスク使用割合入替えプログラム304を起動する。
ディスク使用割合入替えプログラム304は、図8のS22と同様の方法で、ボリュームコピーLU登録テーブル309において、対象ボリュームペアのSVOLを構成する各LUのアクセス属性を更新不可(例えばRのみ可)に設定する(S42)。
次に、ディスク使用割合入替えプログラム304は、ボリュームコピー管理テーブル803上の複数の行を、データ更新頻度の降順(つまり高い順)にソートする(S43)。以下、ボリュームコピー管理テーブル803の行数をnとし、降順ソート後の行番号をiとし、降順ソート後のボリュームコピー管理テーブル803をP(i)とする。ディスク使用割合入替えプログラム304は、例えば、降順ソート後行番号iの若い順に(換言すれば、データ更新頻度の高い順に)、以下のS44以降の処理を行なう。
ディスク使用割合入替えプログラム304は、複数の降順ソート後行番号の中から1つの行番号iを選択し、選択した行番号iを行数nで割った値i/nと、設定値テーブル307に登録されているディスク割合閾値Tとを比較する(S44)。
S44の結果、i/nがT以上である場合、ディスク使用割合入替えプログラム304は、上記選択された行番号iのPVOL-FC-chunkに対応したSVOL-chunkはFC-chunkであるか否かを判別する(S45)。S45において、肯定的な判別結果が得られた場合(S45でY)、ディスク使用割合入替えプログラム304は、後述のS51の処理を行う。一方、S45において、否定的な判別結果が得られた場合(S45でN)、ディスク使用割合入替えプログラム304は、複数のプールchunkの中からFC-chunkを選択し、その選択したFC-chunkを、上記対応したSVOL-chunkの入替え相手chunkとしてP(i)に設定する(S46)。その際、複数のプールchunkの中に、選択可能なFC-chunkが存在しない場合には(S49でN)、ディスク使用割合入替えプログラム304は、選択可能なプールFC-chunkを増やすことの警告をユーザに出力し(S50)、そうでない場合は(S49でY)、S51を行なう。
S44の結果、i/nがT未満である場合、ディスク使用割合入替えプログラム304は、上記選択された行番号iのPVOL-FC-chunkに対応したSVOL-chunkはSATA-chunkであるか否かを判別する(S47)。S45において、肯定的な判別結果が得られた場合(S47でY)、ディスク使用割合入替えプログラム304は、後述のS51の処理を行う。一方、S47において、否定的な判別結果が得られた場合(S47でN)、ディスク使用割合入替えプログラム304は、複数のプールchunkの中からSATA-chunkを選択し、その選択したSATA-chunkを、上記対応したSVOL-chunkの入替え相手chunkとしてP(i)に設定する(S48)。その際、複数のプールchunkの中に、選択可能なSATA-chunkが存在しない場合には(S49でN)、ディスク使用割合入替えプログラム304は、選択可能なプールSATA-chunkを増やすことの警告をユーザに出力し(S50)、そうでない場合は(S49でY)、S51を行なう。
ディスク使用割合入替えプログラム304は、以上のS44〜S48の処理を、全ての行番号iについて行ない(S51でN)、全ての行番号iについて行ったのであれば(S51でY)、図8のS31〜S38と同様の処理を行う。
以上の処理流れによれば、PVOL-FC-chunk内のサブデータの更新頻度に応じて、そのPVOL-FC-chunkに対応したSVOL-chunkが適切な属性レベルのchunkでなければ、そのSVOL-chunk内のサブデータが適切な属性レベルの別のchunkに移されると共に、SVOL206におけるSVOL-FC記憶容量の割合(別の言い方をすれば、SVOL-SATA記憶容量の割合)がディスク割合閾値Tに調整される。
図10は、CPU210に読み込まれた障害切り替えプログラム305によって実行される処理の流れを示す。なお、以下の説明では、説明を分かり易くするために、障害発生時のPVOLを元PVOL、障害発生時のSVOLを元SVOL、障害切り替えプログラムにより作成されたPVOLおよびSVOLをそれぞれ新PVOLおよび新SVOLと呼ぶ。また、以下の説明では、ホスト装置100からライト対象データを受けて元PVOLに書込んでいる最中に元PVOLで障害が発生したものとする。
元PVOLで障害が発生した場合(S61)、基本制御プログラム301が、それを検出して、障害切り替えプログラム305を起動する。
障害切り替えプログラム305は、障害が発生した元PVOLを構成する各LUのアクセス属性として読み出し不可(例えばR/W不可)をボリュームコピーLU登録テーブル309に設定する(S62)。また、障害切り替えプログラム305は、元PVOLに対するホスト装置100からのライト対象データを、キャッシュメモリ230又は別のLUに保存する(S63)。
次に、障害切り替えプログラム305は、複数のプールchunkの中からFC-chunkを選択し、選択されたFC-chunkのchunk#及びLU#を、元SVOL-SATA-chunkに対応付けて、障害対応管理テーブル306の右列(障害対応移動先chunk欄)に書込む(S64)。なお、その際、割当て可能なFC-chunkが不足してなければ(S65でY)、障害切り替えプログラム305は、後述のS67を行い、一方、割当て可能なFC-chunkが複数のプールchunk内に存在しない場合には、FC-LUが不足している旨の警告を出力する(S65でN及びS66)。
S67では、障害切り替えプログラム305は、障害対応ボリュームコピー管理テーブル306に基づいて、中列(SVOL欄)に登録されているchunk#を持つ元SVOL-SATA-chunk内のサブデータを、その元SVOL-SATA-chunkに対応付けられた入替え先chunk(FC-chunk)に移動させる(S67)。
次に、障害切り替えプログラム305は、障害対応ボリュームコピー管理テーブル306において、入替え先chunkの内容(LU#及びchunk#)を、その入替え先chunkに対応する元PVOL-FC-chunkの内容に上書きし、入替え先chunkの内容の内容を消去する。また、障害切り替えプログラム305は、入替え先chunkが存在しない元PVOL-FC-chunkについては、元SVOL-FC-chunkの内容(LU#及びchunk#)を、元PVOL-FC-chunkの内容に上書きし、その元SVOL-FC-chunkの内容を消去する(S68)。このような処理によって、元PVOLに障害が発生した場合、元PVOL-FC-chunkに対応した元SVOL-chunkがFC-chunkであれば、その元SVOL-chunkがそのまま新PVOL-chunkに切り替わる。そして、元PVOL-chunkに対応した元SVOL-chunkがSATA-chunkであれば、複数のプールchunkの中から選択されたFC-chunkがそのSATA-chunkに対応付けられて、選択されたFC-chunkが新PVOL-chunkに切り替わる。この結果、障害対応ボリュームコピー管理テーブル306の左列(オリジナルデータ欄)に登録されていた複数の元PVOL-chunkの各々が、元SVOL-FC-chunk又は上記選択されたFC-chunkに切替えられて、元SVOL-FC-chunkや上記選択されたFC-chunkで構成された新PVOLが生成される。なお、障害対応ボリュームコピー管理テーブル306の更新前の様子を図13(A)に示し、そのテーブル306の更新後の様子を図13(B)に示す。
S68のテーブル更新処理によって、複数の元SVOL-chunkのうちFC-chunkであるものは、全て新PVOL-FC-chunkに切り替わったので、その分の新SVOL-chunkが必要になる。そこで、障害切り替えプログラム305は、例えば、複数のプールchunkの中から、必要な数だけのFC-chunkを選択し、選択されたFC-chunkを、新SVOL-chunkとして、障害対応ボリュームコピー管理テーブル306やボリュームコピー管理テーブル308の中列に登録する。そして、障害切り替えプログラム305は、元SVOL-chunkであったFC-chunk内のデータを、新SVOL-chunkにコピーする(S69)。
その後、障害切り替えプログラム305は、S63で保存したライト対象データを、新PVOLに書込む。また、障害切り替えプログラム305は、例えばホスト装置100から所定の照会コマンド(例えばSCSIプロトコルに基づくInquiryコマンド)を受信した場合に、新PVOLに関する情報(例えば、外部用LU番号及び記憶容量等)をホスト装置100に提供する(S69)。それにより、ホスト装置100は、新PVOLを認識することができる。
以上が、障害切り替えプログラム305によって行われる処理の流れである。なお、上述のS68の際、障害切り替えプログラム305は、ボリュームコピー管理テーブル308の内容も同様に更新しても良い。また、新PVOL-chunkに切替えられた元SVOL-chunkの内容は、障害対応ボリュームコピー管理テーブル306やボリュームコピー管理テーブル308から消去しても良い。
以上、上述した実施形態によれば、記憶制御システム200上に存在する複数のLUの各々が、複数のchunkに分割される。また、PVOLはFC-chunkのみで構成されるが、SVOLは、FC-chunkとSATA-chunkの両方で構成される。そして、複数のSVOL-chunkの各々には、複数のプールchunkの中から選択されたFC-chunkとSATA-chunkのいずれかが動的に対応付けられる。対応付けられるchunkの種類は、PVOLへのデータの書込み状況に基づいて切替えられる。具体的には、例えば、データの更新頻度が高いPVOL-FC-chunkに対応したSVOL-SATA-chunkには、高信頼性及び高性能であるFCディスク装置上に存在するFC-chunkが対応付けられ、一方、データの更新頻度が低いPVOL-FC-chunkに対応したSVOL-FC-chunkには、低信頼性及び低性能であるが安価であるSATAディスク装置上に存在するSATA-chunkが対応付けられる。これにより、低信頼性及び低性能のディスク装置によるコピー処理が低速になることとコストの両方を抑えることができる。
また、上述した実施形態によれば、SVOLにおけるSVOL-FC記憶容量割合(換言すればSVOL-SATA記憶容量割合)が、予め設定したディスク割合閾値になるように自動的に調節される。これにより、ユーザが定期的にわざわざ面倒な設定を行わなくても、SVOLにおけるFC記憶容量割合はユーザ所望の割合になる。
また、上述した実施形態によれば、SVOL-FC記憶容量割合の調節は、更新頻度の高いPVOL-FC-chunkに対応したSVOL-chunk順に行なわれる。これにより、効率的に、FC記憶容量割合の調節が行われる。
また、上述した実施形態によれば、元PVOLで障害が発生した場合、元PVOL-chunkに対応付けられているchunkがSATA-chunkであっても、そのSATA-chunk内のデータは、複数のプールchunkの中から選択されたFC-chunkに移動され、そのFC-chunkが新PVOL-chunkに切り替わる。これにより、元PVOL-chunkに対応付けられているchunkの種類に関わらず、新PVOLを構成する新PVOL-chunkをFC-chunkにすることができる。
以上、本発明の実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、上述した実施形態は、信頼性や性能以外の属性レベルの記憶デバイスに対しても適用することができる。また、上述した実施形態は、複数のLUが2以上の装置に分散して配置されていても(例えば、PVOLが記憶制御システム200に存在していてSVOLが他の記憶制御システムに存在していても)、適用することができる。また、上述した実施形態では、ディスク装置の優劣は、高信頼性及び高性能であるか低信頼性及び低性能であるかの2段階であるが、それよりも多段階であっても良い。また、上述した実施形態において、更新頻度閾値及びディスク割合閾値の少なくとも一方は、より細かな調節を行うことができるよう複数個存在していても良い。また、ディスク割合閾値は、FC記憶容量割合用とSATA記憶容量割合用の2種類が用意されても良い。また、データ更新頻度は、一定期間内でのデータ更新回数であるが、必ずしも一定期間でなく、例えば単に更新回数であっても良い。