以下、図面を参照して一実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。
また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
以下、図中において、同一の各符号は同様の部分を示しているので、その説明は省略する。
〔A〕実施形態の一例
〔A−1〕システム構成
図1は、実施形態の一例としてのストレージシステム100の構成を模式的に示す図である。
ストレージシステム100は、図1に例示するように、ストレージ装置1及び複数(図示する例では3つ)のサーバ装置4を備える。
サーバ装置4は、サーバ機能を備えたコンピュータ(「情報処理装置」と称されてもよい。)である。
ストレージ装置1は、後述する記憶装置30を搭載し、サーバ装置4に対して記憶領域を提供する装置であり、例えばRAID(Redundant Arrays of Inexpensive Disks)を用いて記憶装置30にデータを分散又は冗長化した状態で保存する。
ストレージ装置1は、重複除去技術を利用して、ファイルに含まれる同じ内容のデータの重複を除去した状態で、ファイルを記憶装置30に格納してよい。また、ストレージ装置1は、図10等を用いて後述するように、複数の仮想ボリューム30aを展開して、展開した仮想ボリューム30aにファイルを格納してよい。
本明細書において、「ファイル」とは、複数の「データ」の集合を指す。また、「データ」は、「ブロック」と称されてもよい。
ストレージ装置1は、図1に例示するように、CPU(Central Processing Unit)10,メモリ20及び記憶装置30を備える。
CPU10及びメモリ20は、例示的に、CM(Controller Module)1aに備えられる。「CM」は、「制御装置」と称されてもよい。
CM1aは、種々の制御を行なう制御装置であり、サーバ装置4からのストレージアクセス要求(「アクセス制御信号」や「ホストI/O」と称されてもよい。)に従って、各種制御を行なう。
なお、図1に示す例においストレージ装置1は1つのCM1aを備えることとしたが、これに限定されるものではない。ストレージ装置1に備えられるCM1aの数は、種々変更することができる。
記憶装置30は、例示的に、データを読み書き可能に記憶する装置であり、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)が用いられてよい。記憶装置30には、図11及び図12を用いて後述する第1ハッシュ値管理テーブル,第2ハッシュ値管理テーブル,仮想アドレス空間テーブル及び管理テーブルに関する情報が格納されてよい。
なお、図1に示す例においてストレージ装置1には便宜上1つの記憶装置30を示しているが、これに限定されるものではない。ストレージ装置1に備えられる記憶装置30の数は、種々変更することができる。
実施形態の一例としてのストレージ装置1は、例示的に、大容量の記憶装置30(「ボリューム」と称されてもよい。)を用途毎等に分割して管理して使用する。ボリュームが分割される単位をLU(Logical Unit)という。
メモリ20は、例示的に、ROM(Read Only Memory)及びRAM(Random Access Memory)を含む記憶装置である。メモリ20のROMには、BIOS(Basic Input/Output System)等のプログラムが書き込まれてよい。メモリ20のソフトウェアプログラムは、CPU10に適宜に読み込まれて実行されてよい。また、メモリ20のRAMは、一次記録メモリあるいはワーキングメモリとして利用されてよい。
CPU10は、例示的に、種々の制御や演算を行なう処理装置であり、メモリ20のそれぞれに格納されたOS(Operating System)やプログラムを実行することにより、種々の機能を実現する。すなわち、CPU10は、共通データ登録部11,第1データ入力部12,第1判定部13,通信部14,第2データ入力部15,第2判定部16,個別データ登録部17,書き込み部18として機能してよい。
なお、これらの共通データ登録部11,第1データ入力部12,第1判定部13,通信部14,第2データ入力部15,第2判定部16,個別データ登録部17,書き込み部18としての機能を実現するためのプログラムは、例えばフレキシブルディスク、CD(CD−ROM、CD−R、CD−RW等)、DVD(DVD−ROM、DVD−RAM、DVD−R、DVD+R、DVD−RW、DVD+RW、HD DVD等)、ブルーレイディスク、磁気ディスク、光ディスク、光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供されてよい。そして、コンピュータ(本実施形態ではCPU10)は上述した記録媒体から図示しない読取装置を介してプログラムを読み取って内部記録装置または外部記録装置に転送し格納して用いてよい。また、プログラムを、例えば磁気ディスク,光ディスク,光磁気ディスク等の記憶装置(記録媒体)に記録しておき、記憶装置から通信経路を介してコンピュータに提供してもよい。
共通データ登録部11,第1データ入力部12,第1判定部13,通信部14,第2データ入力部15,第2判定部16,個別データ登録部17,書き込み部18としての機能を実現する際には、内部記憶装置(本実施形態ではメモリ20)に格納されたプログラムがコンピュータ(本実施形態ではCPU10)によって実行されてよい。また、記録媒体に記録されたプログラムをコンピュータが読み取って実行してもよい。
共通データ登録部11,第1データ入力部12,第1判定部13,通信部14,第2データ入力部15,第2判定部16,個別データ登録部17,書き込み部18の機能の詳細について説明する前に、図2〜図9を参照して、重複除去技術について説明する。
図2〜図9を参照して説明される重複除去技術は、実施形態の一例としてのストレージシステム100によって実現されてもよい。
図2は重複除去技術を適用する前のオリジナルファイルを模式的に例示する図であり、図3は重複除去技術を適用した後のファイルを模式的に例示する図である。
重複除去技術は、複数のファイルにおいて、同一の内容のブロックが複数含まれている場合に、同一の内容のブロックを1つにまとめる技術である。
図2に示すように、オリジナルファイルとしてのファイルA及びファイルBが記憶装置に書き込まれる例を考える。ファイルAには青,赤,紫,黄及び緑の画像データのブロックが含まれ、ファイルBには緑,茶,赤,紫及び黄の画像データのブロックが含まれる。また、各ブロックのデータサイズは4KB(キロバイト)であり、ファイルA及びファイルBの合計データサイズは40KBである。
ファイルA及びファイルBに重複除去を適用する場合には、各ブロックにインデックスが付与される。
図3に示す例において、ファイルAの青,赤,紫,黄及び緑の画像データのブロックには、インデックス01,02,03,04及び05がそれぞれ付与される。また、ファイルBの緑,茶,赤,紫及び黄の画像データのブロックには、インデックス05,06,02,03及び04がそれぞれ付与される。別言すれば、ファイルA及びファイルBにおいて、同一の色の画像データのブロックには、同一のインデックスが付与される。
ストレージ装置1は、重複除去したファイルを管理するために、図3に示すような管理テーブルに関する情報を記憶する。管理テーブルには、インデックスとポインタとが対応付けられている。
ストレージ装置1は、管理テーブルにおいて、インデックスを参照することにより、ポインタを介してファイルに含まれるブロックを参照することができる。図3に示す例においては、インデックス01,02,03,04,05及び06に対して、青,赤,紫,黄,緑及び茶の各画像データのブロックを示すポインタがそれぞれ対応づけられている。
図4はハッシュ値管理テーブルの第1の例を示す図であり、図5は仮想アドレス空間テーブルの第1の例を示す図であり、図6は管理テーブルの第1の例を示す図である。
図1に示したファイルAを記憶装置30の仮想アドレス0x0000から書き込んだ場合のハッシュ値管理テーブルと仮想アドレス空間テーブルと管理テーブルとは、図4〜図6にそれぞれ示すようになる。
ハッシュ値管理テーブルには、ハッシュ値と書き込み物理アドレス(「ページ」と称されてもよい。)とが関連付けられている。ハッシュ値は、ブロックの内容に基づいて作成され、ブロックを一意に特定するための情報である。物理アドレスは、ブロックが記憶装置30において実際に書き込まれている位置を示す。
図4に示す例において、ハッシュ値管理テーブルには、ファイルAの青,赤,紫,黄及び緑の画像データのブロックに対して、ハッシュ値blue,red,purple,yellow及びgreenがそれぞれ関連付けられている。また、図4に示す例において、ハッシュ値管理テーブルには、ファイルAの青,赤,紫,黄及び緑の画像データのブロックに対して、書き込み物理アドレス01,02,03,04及び05がそれぞれ関連付けられている。
仮想アドレス空間テーブルは、仮想アドレスと物理アドレスとが関連付けられている。仮想アドレスは、ストレージ装置1が展開する仮想ボリューム30a(図10等を用いて後述)においてブロックが書き込まれる位置を示す。
図5に示す例において、仮想アドレス0x0000,0x1000,0x2000,0x3000及び0x4000に対して、書き込み物理アドレス01,02,03,04及び05がそれぞれ関連付けられている。
図7はハッシュ値管理テーブルの第2の例を示す図であり、図8は仮想アドレス空間テーブルの第2の例を示す図であり、図9は管理テーブルの第2の例を示す図である。
図4〜図6に示した状態から、更に、図2に示したファイルBを記憶装置30の仮想アドレス0x6000から書き込んだ後のハッシュ値管理テーブルと仮想アドレス空間テーブル管理テーブルとは、図7〜図9にそれぞれ示すようになる。
ハッシュ値管理テーブルは、ブロックの書き込み時に毎回参照される。そこで、ハッシュ値管理テーブルに関する情報は、高速に動作可能なメモリに格納されてよい。
しかしながら、新たなブロックが書き込まれるとハッシュ値管理テーブルのエントリ数が増加していくため、メモリの容量が不足するおそれがある。
そこで、ハッシュ値管理テーブルに関する情報の大きさをメモリに格納可能な大きさに抑えつつ、重複しているブロックをできるだけ検出することが考えられる。別言すれば、全てのハッシュ値を記憶するのではなく、例えば、重複しないブロックのハッシュ値と書き込み物理アドレスとの関係をメモリに格納しないことが考えられる。
ハッシュ値管理テーブルの大きさを抑える技術のひとつとして、ハッシュ値管理テーブルをLRUを用いて管理する技術が知られている。LRUを用いた技術では、ブロックの書き込み時にハッシュ値管理テーブルを参照した際、ヒットしたエントリの優先度を最高に設定してよい。そして、新たなハッシュ値を有するブロックが書き込まれる際には、優先度が最低のエントリの内容を、新たなハッシュ値の内容に書き換えてよい。
しかしながら、LRUを用いてハッシュ値管理テーブルを用いて管理する技術においては、一時的に新たなハッシュ値を有するブロックが大量に書き込まれた場合に、長期間に亘って使用されるブロックのエントリが消去されてしまうおそれがある。また、ハッシュ値管理テーブルのエントリが特定のアプリケーションで特異的に使用されるブロックによって占有されるおそれがある。
図10は、実施形態の一例としてのストレージシステム100の機能を模式的に示す図である。
ストレージ装置1は、図10に例示するように、複数(図示する例ではn+1個)の仮想ボリューム30a(LUN0〜n)を展開してよい。なお、「LUN」は、Logical Unit Numberの略称である。複数の仮想ボリューム30aは、記憶装置30の記憶領域を使用することによって展開されてよい。
ボリュームに書き込まれるデータは、LU毎に特徴がある場合がある。例えば、文字ドキュメントを扱うアプリケーションA用にLUN0を割り当て、画像を扱うアプリケーションB用にLUN1を割り当てた場合を想定する。この場合には、LUN0には文字ドキュメントデータが多く記録され、LUN1には画像データが多く記録されることになり、文字ドキュメントデータと画像データとの間では重複が起きにくい。
しかしながら、アプリケーションによらずに記録されるデータも存在する。例えば、ファイルシステムやOSが書き込むデータは、複数のアプリケーション間で共通に使用され、各アプリケーションに対応する複数の仮想ボリューム30aに同じように格納される場合がある。
つまり、ストレージ装置1が記憶するデータには、LUN間に亘って重複するデータと、LUNに固有のデータとが存在する。実施形態の一例としてのストレージシステム100は、LUN間に亘って重複するデータと、LUNに固有のデータとの重複管理のための機能を分離することで、ハッシュ値管理テーブルの大きさを抑えつつ、高い重複除去率を達成する。
そこで、実施形態の一例としてのストレージ装置1は、図10に例示するように、第1段の重複除去部10a及び複数(図示する例ではn+1個)の第2段の重複除去部10bとして機能する。複数の第2段の重複除去部10bは、複数の仮想ボリューム30aのそれぞれに対応して備えられてよい。
第1段の重複除去部10aは、例示的に、LUN間に亘った重複除去を行なう。第1段の重複除去部10aは、図1に示した共通データ登録部11,第1データ入力部12,第1判定部13,通信部14として機能してよい。
第2段の重複除去部10bは、例示的に、LUN毎に重複除去を行なう。第2段の重複除去部10bは、図1に示した第2データ入力部15,第2判定部16,個別データ登録部17及び書き込み部18として機能してよい。
図11は、実施形態の一例としての第1段の重複除去部10aの機能を模式的に示す図である。
図11に示す例においては、第1段の重複除去部10aが備える機能のうち、一部の機能が示されている。
共通データ登録部11(図11には不図示)は、例示的に、第1ハッシュ値管理テーブルを作成する。共通データ登録部11は、ストレージ装置1の運用前に、予め第1ハッシュ値管理テーブルを作成してよい。また、共通データ登録部11は、作成した第1ハッシュ値管理テーブルに関する情報を例えば記憶装置30の所定の領域に格納してよい。
第1ハッシュ値管理テーブルは、例示的に、複数の仮想ボリューム30aに亘って重複して書き込まれるデータに関する情報を示す。別言すれば、第1ハッシュ値管理テーブルは、ストレージ装置1の全体の動作を制御するOSによって使用されるデータのハッシュ値を示してよい。更に別言すれば、第1ハッシュ値管理テーブルは、ストレージ装置1によって実行されるアプリケーションによらずに重複して使用されるデータのハッシュ値を示してよい。
第1ハッシュ値管理テーブルには、ハッシュ値と書き込み物理アドレスとが関連付けられてよい。図11に示す例において、ハッシュ値blue及びredには、書き込み物理アドレスlun0−01及びlun2−05が関連付けられている。
共通データ登録部11は、ストレージシステム100を事前に所定時間動作させて、LUN間に亘って書き込まれたデータに関する情報を収集してよい。そして、共通データ登録部11は、収集した情報に基づいて、書き込み回数が上位のデータに関する情報を所定の個数(例えば、10万個)登録した第1ハッシュ値管理テーブルを作成してよい。
共通データ登録部11は、アプリケーションを起動させずにストレージシステム100を動作させた状態で、重複して使用されたデータを第1ハッシュ値管理テーブルに収集してよい。共通データ登録部11は、例えば、OSやファイルシステム、ストレージシステム100の運用環境デフォルトで実行されているプロセスによって書き込まれるデータを、第1ハッシュ値管理テーブルに登録してよい。
別言すれば、共通データ登録部11は、ストレージ装置1によって実行させるアプリケーションが起動していない状態において、重複して書き込まれるデータについての情報を第1ハッシュ値管理テーブルに登録してよい。これにより、共通データ登録部11は、第1ハッシュ値管理テーブルを生成してよい。
また、共通データ登録部11は、アプリケーションを起動させてストレージシステム100を動作させた状態で、重複して使用されたデータを第1ハッシュ値管理テーブルに収集してよい。共通データ登録部11は、例えば、OS等によって書き込まれるデータに加えて、複数のアプリケーション間で共通に使用されるデータを、第1ハッシュ値管理テーブルに登録してよい。共通データ登録部11は、複数の第2段の重複除去部10bに対して各仮想ボリューム30aに書き込まれているデータを問い合わせることにより、複数のアプリケーション間で共通に使用されるデータを特定してよい。ここで、「OS等によって書き込まれるデータ」とは、例えば、OSやファイルシステム、ストレージシステム100の運用環境デフォルトで実行されているプロセスによって書き込まれるデータである。
別言すれば、共通データ登録部11は、ストレージ装置1によって実行されるアプリケーションが動作している状態において、複数の仮想ボリューム30aに亘って重複して書き込まれるデータについての情報を第1ハッシュ値管理テーブルに登録してよい。これにより、共通データ登録部11は、第1ハッシュ値管理テーブルを生成してよい。
第1データ入力部12は、例示的に、サーバ装置4から送信された入力データ(別言すれば、「書き込みデータ」)を受信する。別言すれば、第1データ入力部12は、サーバ装置4から送信された書き込みアドレス(別言すれば、「LUN及びアドレス」)とデータとの入力を受け付けてよい。
また、第1データ入力部12は、入力データを所定サイズのブロック(以下、「入力ブロック」と称する場合がある。)に分割して、それぞれの入力ブロックと入力ブロックの書き込みアドレスとを計算してよい。そして、第1データ入力部12は、第1判定部13に対して、入力ブロックと書き込みアドレスとの組を入力してよい。
第1判定部13は、例示的に、入力ブロックが複数の仮想ボリューム30aに亘って重複して書き込まれているかを判定する。別言すれば、第1判定部13は、入力ブロックが、OSに使用されるブロックであるのか、個別のアプリケーションによって使用されるブロックであるのかを判定してよい。更に別言すれば、第1判定部13は、入力ブロックのハッシュ値を計算し、第1ハッシュ値管理テーブルを検索して、同じハッシュ値のエントリが登録されているかを調べてよい。
第1判定部13は、第1ハッシュ値管理テーブルを用いて、入力ブロックが複数の仮想ボリューム30aに亘って重複して書き込まれているかを判定してよい。第1判定部13は、第1ハッシュ値管理テーブルに登録されているブロックについては、複数の仮想ボリューム30aに亘って重複して書き込まれていると判定してよい。また、第1判定部13は、第1ハッシュ値管理テーブルに登録されていないブロックについては、複数の仮想ボリューム30aに亘って重複して書き込まれていないと判定してよい。
通信部14は、例示的に、第1判定部13による判定結果に基づき、第2段の重複除去部10bに対して、入力ブロックに関する情報を入力する。
具体的には、通信部14は、入力ブロックに関する情報が第1ハッシュ値管理テーブルに登録されている場合には、入力ブロックについてのエントリの書き込み物理アドレスを読み出してよい。そして、通信部14は、入力ブロックのヘッダ等の情報から調べた仮想アドレスのLUNに対応づけられた第2段の重複除去部10bに対して、入力ブロックの仮想アドレスと書き込み物理アドレスとの組を通知してよい。
また、通信部14は、入力ブロックに関する情報が第1ハッシュ値管理テーブルに登録されていない場合には、入力ブロックのヘッダ等の情報から仮想アドレスを調べて、入力ブロックを書き込むべきLUNを特定してよい。そして、通信部14は、特定したLUNに対応づけられた第2段の重複除去部10bに対して、入力ブロックの仮想アドレスと内容とを通知してよい。
図12は、実施形態の一例としての第2段の重複除去部10bの機能を模式的に示す図である。
図12に示す例においては、第2段の重複除去部10bが備える機能のうち、一部の機能が示されている。
図12に示される第2ハッシュ値管理テーブルに関する情報は、例示的に、複数の第2段の重複除去部10b毎に、例えば記憶装置30の所定の領域に格納される。第2ハッシュ値管理テーブルは、第2段の重複除去部10bに対応するLUNに閉じてデータに重複を管理するためのテーブルであり、LRUによって管理される所定数(例えば10万個)のエントリを含んでよい。
第2ハッシュ値管理テーブルには、ハッシュ値と書き込み物理アドレスとが関連付けられてよい。図12に示す例において、ハッシュ値brownには、書き込み物理アドレス06が関連付けられている。
第2データ入力部15は、例示的に、第1段の重複除去部10aから入力された入力ブロックに関する情報を受け取る。
具体的には、第2データ入力部15は、入力ブロックが複数の仮想ボリューム30aに亘って重複して書き込まれていない場合には、第1段の重複除去部10aから、入力ブロックの仮想アドレスと内容との組を受け取ってよい。また、第2データ入力部15は、入力ブロックが複数の仮想ボリューム30aに亘って重複して書き込まれている場合には、第1段の重複除去部10aから、入力ブロックの仮想アドレスと書き込み物理アドレスとの組を受け取ってよい。
第2データ入力部15は、入力ブロックの仮想アドレスと内容との組を受け取った場合には、第2判定部16に対して、受け取った入力ブロックの仮想アドレスと内容との組を入力してよい。また、第2データ入力部15は、入力ブロックの仮想アドレスと書き込み物理アドレスとの組を受け取った場合には、書き込み部18に対して、受け取った入力ブロックの仮想アドレスと書き込み物理アドレスとの組を入力してよい。
第2判定部16は、例示的に、第2ハッシュ値管理テーブルを用いて、対応する仮想ボリューム30aにおける入力ブロックの重複を判定する。
具体的には、第2判定部16は、入力ブロックに関する情報が既に第2ハッシュ値管理テーブルに登録されている場合には、第2ハッシュ値管理テーブルから、書き込み物理アドレスを読み出してよい。そして、第2判定部16は、書き込み部18に対して、入力ブロックの仮想アドレスと、読み出した書き込み物理アドレスとの組を入力してよい。
第2判定部16は、入力ブロックに関する情報が既に第2ハッシュ値管理テーブルに登録されていない場合には、個別データ登録部17に対して、入力ブロックの仮想アドレスと内容との組を入力してよい。
個別データ登録部17(図12には不図示)は、例示的に、第2ハッシュ値管理テーブルに入力ブロックについての情報を登録する。
具体的には、個別データ登録部17は、入力ブロックに関する情報が第2ハッシュ値管理テーブルに登録されていない場合には、第2ハッシュ値管理テーブルの複数のエントリのうち、最もLRUの優先度が低いエントリを選択してよい。個別データ登録部17は、選択したエントリに入力ブロックのハッシュ値を書き込み(別言すれば、上書きし)、書き込み部18に対して、入力ブロックの仮想アドレスと内容との組を入力してよい。
書き込み部18は、例示的に、対応する仮想ボリューム30aに対して、入力ブロックを書き込む。
具体的には、書き込み部18は、入力ブロックの仮想アドレスと書き込み物理アドレスとの組を受け取った場合には、仮想アドレス空間テーブルの対応する仮想アドレスに対して、入力ブロックの書き込み物理アドレスを関連付けて登録してよい。これにより、入力ブロックの仮想アドレスの値は、書き込み物理アドレスに記録されているブロックの内容となる。
書き込み部18は、入力ブロックの仮想アドレスと内容との組を受け取った場合には、受け取った入力ブロックの内容を記憶装置30に書き込んでよい。また、書き込み部18は、管理テーブルに新たな1エントリを追加して、追加したエントリに入力ブロックについての書き込み物理アドレスを登録してよい。更に、書き込み部18は、仮想アドレス空間テーブルの対応する仮想アドレスに対して、書き込み物理アドレスを関連付けて登録してよい。
個別データ登録部17(図12には不図示)は、書き込み部18によって管理テーブルに登録された書き込み物理アドレスを、第2ハッシュ値管理テーブルの入力ブロックについてのエントリの書き込み物理アドレスのカラムに登録してよい。
入力ブロックの仮想アドレスと内容との組を受け取った場合の、書き込み部18及び個別データ登録部17の機能により、入力ブロックの値は、書き込み物理アドレスに記録されているブロックの内容となる。
〔A−2〕動作
上述の如く構成された実施形態の一例としての第1段の重複除去動作(ステップS1〜S5)を、図13に示すフローチャートに従って説明する。
第1データ入力部12は、サーバ装置4から送信された書き込みデータを受け取る(ステップS1)。
第1判定部13は、書き込みデータのハッシュ値を算出する(ステップS2)。
第1判定部13は、書き込みデータのハッシュ値が第1ハッシュ値管理テーブルに登録されているかを判定する(ステップS3)。
書き込みデータのハッシュ値が第1ハッシュ値管理テーブルに登録されていない場合には(ステップS3のNoルート参照)、通信部14は、書き込みデータの仮想アドレスから書き込むべき仮想ボリューム30aを特定する。そして、通信部14は、特定した仮想ボリューム30aに対応する第2段の重複除去部10bに対して、書き込みデータの仮想アドレスと内容とを通知し(ステップS4)、処理は終了する。
一方、書き込みデータのハッシュ値が第1ハッシュ値管理テーブルに登録されている場合には(ステップS3のYesルート参照)、通信部14は、対応する第2段の重複除去部10bに対して、書き込みデータの仮想アドレスと書き込み物理アドレスとの組を通知する(ステップS5)。そして、処理は終了する。
次に、実施形態の一例としての第2段の重複除去動作(ステップS11〜S16)を、図14に示すフローチャートに従って説明する。
第2データ入力部15は、第1段の重複除去部10aから入力された書き込みデータを受け取る(ステップS11)。
第2判定部16は、書き込みデータのハッシュ値を算出する(ステップS12)。
第2判定部16は、書き込みデータのハッシュ値が第2ハッシュ値管理テーブルに登録されているかを判定する(ステップS13)。
書き込みデータのハッシュ値が第2ハッシュ値管理テーブルに登録されている場合には(ステップS13のYesルート参照)、処理は終了する。
一方、書き込みデータのハッシュ値が第2ハッシュ値管理テーブルに登録されていない場合には(ステップS13のNoルート参照)、個別データ登録部17は、第2ハッシュ値管理テーブルを更新する。具体的には、個別データ登録部17は、第2ハッシュ値管理テーブルにおいて最も使われていないエントリの内容を、書き込みデータのハッシュ値で書き換える(ステップS14)。
書き込み部18は、書き込みデータを記憶装置30に書き込む。また、書き込み部18は、書き込みデータの仮想アドレスを管理テーブルに登録し、書き込みデータのインデックスを作成する(ステップS15)。
個別データ登録部17は、第2ハッシュ値管理テーブルの対応するエントリにおける書き込み物理アドレスの内容を、作成されたインデックスに書き換える(ステップS16)。そして、処理は終了する。
次に、実施形態の一例としての第1ハッシュ値管理テーブルの作成動作(ステップS21〜S29)の第1の例を、図15に示すフローチャートに従って説明する。図15においては、アプリケーションを起動させずにストレージシステム100を動作させた状態での第1ハッシュ値管理テーブルの作成動作を説明する。
共通データ登録部11は、第1ハッシュ値管理テーブルと同じエントリ数を有する作業用ハッシュ値管理テーブルを作成する(ステップS21)。ステップS21の状態において、第1ハッシュ値管理テーブル及び作成された作業用ハッシュ値管理テーブルの各エントリは空である。
共通データ登録部11は、アプリケーションを起動させずにストレージシステム100を動作させる(ステップS22)。
第1データ入力部12は、サーバ装置4から送信された書き込みデータを受け取る(ステップS23)。
第1判定部13は、書き込みデータのハッシュ値を算出する(ステップS24)。
第1判定部13は、書き込みデータのハッシュ値が第1ハッシュ値管理テーブルに登録されているかを判定する(ステップS25)。
書き込みデータのハッシュ値が第1ハッシュ値管理テーブルに登録されていない場合には(ステップS25のNoルート参照)、共通データ登録部11は、第1ハッシュ値管理テーブルを更新する。具体的には、共通データ登録部11は、第1ハッシュ値管理テーブルの最も使われていないエントリを、書き込みデータのハッシュ値で書き換える(ステップS26)。そして、処理はステップS23へ戻る。
一方、書き込みデータのハッシュ値が第1ハッシュ値管理テーブルに登録されている場合には(ステップS25のYesルート参照)、共通データ登録部11は、作業用ハッシュ値管理テーブルを参照する。そして、共通データ登録部11は、書き込みデータのハッシュ値が作業用ハッシュ値管理テーブルに未だ登録されていなければ、書き込みデータのハッシュ値を作業用ハッシュ値管理テーブルに登録する(ステップS27)。
共通データ登録部11は、作業用ハッシュ値管理テーブルの全てのエントリにハッシュ値が登録されたかを判定する(ステップS28)。
全てのエントリにハッシュ値が登録されていない場合には(ステップS28のNoルート参照)、処理はステップS23へ戻る。
一方、全てのエントリにハッシュ値が登録されている場合には(ステップS28のYesルート参照)、共通データ登録部11は、作業用ハッシュ値管理テーブルの内容を第1ハッシュ値管理テーブルにコピー(別言すれば、上書き)する。また、共通データ登録部11は、作業用ハッシュ値管理テーブルを破棄する(ステップS29)。そして、処理は終了する。
次に、実施形態の一例としての第1ハッシュ値管理テーブルの作成動作(ステップS31〜S39)の第2の例を、図16に示すフローチャートに従って説明する。図16においては、アプリケーションを起動させてストレージシステム100を動作させた状態での第1ハッシュ値管理テーブルの作成動作を説明する。
共通データ登録部11は、第1ハッシュ値管理テーブルと同じエントリ数を有する作業用ハッシュ値管理テーブルを作成する(ステップS31)。ステップS31の状態において、第1ハッシュ値管理テーブル及び作成された作業用ハッシュ値管理テーブルの各エントリは空である。
共通データ登録部11は、アプリケーションを起動させてストレージシステム100を動作させる(ステップS32)。
第1データ入力部12は、サーバ装置4から送信された書き込みデータを受け取る(ステップS33)。
第1判定部13は、書き込みデータのハッシュ値を算出する(ステップS34)。
通信部14は、書き込みデータの仮想アドレスから、書き込みデータを書き込むべき仮想ボリューム30aを特定する。そして、通信部14は、特定した仮想ボリューム30aに対応する第2段の重複除去部10bに対して、書き込みデータの仮想アドレスとブロックの内容とを通知する(ステップS35)。
第1判定部13は、複数の第2段の重複除去部10bの第2判定部16による判定結果により、書き込みデータのハッシュ値について、複数の第2ハッシュ値管理テーブルに共通のエントリがあるかを判定する(ステップS36)。
書き込みデータのハッシュ値について複数の第2ハッシュ値管理テーブルに共通のエントリがない場合には(ステップS36のNoルート参照)、処理はステップS33へ戻る。
一方、書き込みデータのハッシュ値について、複数の第2ハッシュ値管理テーブルに共通のエントリがある場合には(ステップS36のYesルート参照)、共通データ登録部11は、作業用ハッシュ値管理テーブルを参照する。そして、共通データ登録部11は、書き込みデータのハッシュ値が作業用ハッシュ値管理テーブルに未だ登録されていなければ、書き込みデータのハッシュ値を作業用ハッシュ値管理テーブルに登録する(ステップS37)。
共通データ登録部11は、作業用ハッシュ値管理テーブルの全てのエントリにハッシュ値が登録されたかを判定する(ステップS38)。
全てのエントリにハッシュ値が登録されていない場合には(ステップS38のNoルート参照)、処理はステップS33へ戻る。
一方、全てのエントリにハッシュ値が登録されている場合には(ステップS38のYesルート参照)、共通データ登録部11は、作業用ハッシュ値管理テーブルの内容を第1ハッシュ値管理テーブルにコピー(別言すれば、上書き)する。また、共通データ登録部11は、作業用ハッシュ値管理テーブルを破棄する(ステップS39)。そして、処理は終了する。
以下、図17及び図18を参照しながら、関連技術としてのハッシュ値管理テーブルの使用例と、実施形態の一例としてのハッシュ値管理テーブルの使用例とを比較する。
図17は関連技術としてのハッシュ値管理テーブルの使用例を説明する図であり、図18は実施形態の一例としてのハッシュ値管理テーブルの使用例を説明する図である。
ストレージ装置1において、2つのアプリケーションA及びアプリケーションBが実行され、アプリケーションA及びアプリケーションBがLUN0及びLUN1をそれぞれ使用する場合を考える。
アプリケーションAによって書き込まれるデータが時刻順に、C−0,A−0,A−1,C−1,A−0,C−1,・・・であると仮定する。また、アプリケーションBによって書き込まれるデータが時刻順に、C−1,B−0,B−1,B−2,B−3,C−0,B−3,B−4,C−1,・・・であると仮定する。なお、Aで始まるデータはアプリケーションAでのみ使用されるデータであり、Bで始まるデータはアプリケーションBでのみ使用されるデータであり、Cで始まるデータはアプリケーションA及びアプリケーションBの両方で使用されるデータとする。
そして、アプリケーションA及びアプリケーションBによって書き込まれるデータが混ざって、図17及び図18に示すように、以下の順番で記憶装置30に書き込まれると仮定する。
(1)C−0,(2)C−1,(3)A−0,(4)A−1,(5)B−0,(6)B−1,(7)B−2,(8)B−3,(9)C−1,(10)A−0,(11)C−0,(12)B−3,(13)C−1,(14)B−4,(15)C−1,・・・
図17に示す例においては、関連技術において使用する1つのハッシュ値管理テーブルが示されている。図17に示すハッシュ値管理テーブルは、6つのエントリを有しており、初期状態では全てのエントリが空である(符号A1)。
なお、実際のストレージ装置1においてはハッシュ値管理テーブルは例えば数十万個以上のエントリを有してよいが、本例においては説明のためにハッシュ値管理テーブルのエントリ数を少なくしている。
図17に示す関連技術におけるハッシュ値管理テーブルは、実施形態の一例としてのストレージ装置1によって使用されてもよい。
以下、図17を参照して、上記の(1)〜(10)のデータが順番に記憶装置30に書き込まれる際の、ハッシュ値管理テーブルの内容の変化をシミュレートする。記憶装置30に新たなデータが書き込まれた際に書き込まれた新たなデータがハッシュ値管理テーブルに登録されていない場合には、最も使用されていないエントリの内容が破棄されて、内容が破棄されたエントリに新たなデータが登録されてよい。
まず、上記(1)〜(6)のデータが順番に、ハッシュ値管理テーブルの6つのエントリに書き込まれる(符号A2)。別言すれば、(1)C−0,(2)C−1,(3)A−0,(4)A−1,(5)B−0及び(6)B−1が順番に、ハッシュ値管理テーブルの6つのエントリに書き込まれる。
(7)及び(8)のデータの書き込みがされると、ハッシュ値管理テーブルにおいて最も使われていないデータC−0及びC−1は、データB−2及びB−3でそれぞれ上書きされる(符号A3)。
(9)のデータの書き込みがされると、ハッシュ値管理テーブルにおいて最も使われていないデータA−0が破棄され、データC−1が登録される(符号A4)。
(10)のデータの書き込みがされると、ハッシュ値管理テーブルにおいて最も使われていないデータA−1が破棄され、データA−0が登録される(符号A5)。
このように、関連技術におけるハッシュ値管理テーブルの使用例においては、上記(1)〜(10)のデータの書き込みで、データC−1及びA−1がそれぞれ2回書き込まれたにもかかわらず、データの重複関係が見つけられていない。
図18に示す例においては、実施形態の一例において使用する1つの第1ハッシュ値管理テーブル及び2つの第2ハッシュ値管理テーブルが示されている。また、2つの第2ハッシュ値管理テーブルのうち、一方はLUN0に対応し、他方はLUN1に対応する。以下、LUN0に対応する第2ハッシュ値管理テーブルを「LUN0用第2ハッシュ値管理テーブル」といい、LUN1に対応する第2ハッシュ値管理テーブルを「LUN1用第2ハッシュ値管理テーブル」という場合がある。図18に示す第1ハッシュ値管理テーブル及び第2ハッシュ値管理テーブルは、いずれも2つのエントリを有している。
なお、実際のストレージ装置1においては第1ハッシュ値管理テーブル及び第2ハッシュ値管理テーブルは例えば数十万個以上のエントリを有してよいが、本例においては説明のためにハッシュ値管理テーブルのエントリ数を少なくしている。
以下、図18を参照して、上記の(1)〜(10)のデータが順番に記憶装置30に書き込まれる際の、ハッシュ値管理テーブルの内容の変化をシミュレートする。記憶装置30に新たなデータが書き込まれた際に書き込まれた新たなデータが第1又は第2ハッシュ値管理テーブルに登録されていない場合には、最も使用されていないエントリの内容が破棄されて、内容が破棄されたエントリに新たなデータが登録されてよい。
まず、初期状態において、第1ハッシュ値管理テーブルにはデータC−0及びC−1が登録されており、2つの第2ハッシュ値管理テーブルは空である(符号B1)。
(1)及び(2)のデータが書き込まれても、データC−0及びC−1は第1ハッシュ値管理テーブルに登録されているため、いずれの第2ハッシュ値管理テーブルの内容も符号B1の状態から変化しない。
(3)及び(4)のデータが書き込まれると、第1ハッシュ値管理テーブルが参照されるが、データA−0及びA−1は登録されていない。そこで、LUN0用第2ハッシュ値管理テーブルが参照されるが、データA−0及びA−1は登録されていないため、LUN0用第2ハッシュ値管理テーブルにデータA−0及びA−1が登録される(符号B2)。
(5)及び(6)のデータが書き込まれると、第1ハッシュ値管理テーブルが参照されるが、データB−0及びB−1は登録されていない。そこで、LUN1用第2ハッシュ値管理テーブルが参照されるが、データB−0及びB−1は登録されていないため、LUN1用第2ハッシュ値管理テーブルにデータB−0及びB−1が登録される(符号B3)。
(7)及び(8)のデータが書き込まれると、第1ハッシュ値管理テーブルが参照されるが、データB−2及びB−3は登録されていない。そこで、LUN1用第2ハッシュ値管理テーブルが参照されるが、データB−2及びB−3は登録されていないため、データB−0及びB−1が破棄されて、LUN1用第2ハッシュ値管理テーブルにデータB−2及びB−3が登録される(符号B4)。
(9)のデータが書き込まれても、データC−1は第1ハッシュ値管理テーブルに登録されている(別言すれば、第1ハッシュ値管理テーブルで重複を発見できた)ため、いずれの第2ハッシュ値管理テーブルの内容も符号B4の状態から変化しない。
(10)のデータが書き込まれると、第1ハッシュ値管理テーブルが参照されるが、データA−0は登録されていない。そこで、LUN0用第2ハッシュ値管理テーブルが参照され、データA−0が登録されている(別言すれば、第2ハッシュ値管理テーブルの重複が発見できた)ため、いずれの第2ハッシュ値管理テーブルの内容も符号B4の状態から変化しない。
このように、実施形態の一例におけるハッシュ値管理テーブルの使用例においては、上記(1)〜(10)のデータの書き込みで、C−1及びA−1がそれぞれ2回書き込まれて、重複関係を発見できた。
例えば、動画や画像を書き込むアプリケーションでは、上記のアプリケーションBのように重複しない大量のデータを書き込むため、図18の符号B1〜B4に示した状況が頻繁に発生する可能性がある。
図17に示した関連技術としてのハッシュ値管理テーブルの使用例と、図18に示した実施形態の一例としてのハッシュ値管理テーブルの使用例との間で、上述のような重複データの発見に相違が発生した原因の一例としては、次のようなことが考えられる。
第一に、アプリケーションBが重複しないデータを連続して大量に書き込んだため、関連技術としてのハッシュ値管理テーブルでは、それまでにハッシュ値管理テーブルに登録されていたエントリが書き換えられてしまったということである。
第二に、関連技術としてのハッシュ値管理テーブルでは、全てのアプリケーションの書き込みを1つのハッシュ値管理テーブルで管理する。そのため、アプリケーションBの書き込みによって、アプリケーションAの書き込みにより登録されたエントリが影響を受けて消去されてしまったということである。
例えば、第一の原因は関連技術としてのハッシュ値管理テーブルでデータC−1の重複が発見できなかった原因であり、第二の原因は関連技術としてのハッシュ値管理テーブルでデータA−1の重複が発見できなかった原因である。
実施形態の一例としての第1及び第2ハッシュ値管理テーブルを使用することにより、LUN間に亘って使われるデータのエントリがハッシュ値管理テーブルから消去されることを防止できる。また、或るLUNで使われるデータのハッシュ値管理テーブルにおけるエントリが、他のLUNで使われるデータの影響で消去されることを防止できる。
〔A−3〕まとめ
上述した実施形態の一例としてのストレージ装置1によれば、例えば、以下の効果を奏することができる。
第1判定部13は、入力データが複数の仮想ボリューム30aに亘って重複して書き込まれているかを判定する。また、第2判定部16は、第1判定部13によって入力データが重複して書き込まれていないと判定された場合に、第2ハッシュ値管理テーブルを用いて、入力データが対応する仮想ボリューム30aに書き込まれているかを判定する。そして、個別データ登録部17は、第2判定部16によって入力データが対応する仮想ボリューム30aに書き込まれていないと判定された場合に、第2ハッシュ値管理テーブルに入力データについての情報を登録する。
これにより、重複除去に関する情報をメモリに効率的に格納することができる。
書き込み部18は、個別データ登録部17によって登録された情報に係る入力データを、対応する仮想ボリューム30aに書き込む。
書き込み部18は、入力データが複数の仮想ボリューム30aに亘って重複して書き込まれている場合には、第2判定部16による判定と個別データ登録部17による登録とを行なわずに、入力データを、対応する仮想ボリューム30aに書き込む。
これらにより、重複除去を行ないつつ、必要なデータを記憶させることができるため、ストレージ装置1の効率を向上させることができる。
第1判定部13は、第1ハッシュ値管理テーブルを用いて判定を行なう。
これにより、第1ハッシュ値管理テーブルと第2ハッシュ値管理テーブルとの2つのハッシュ値管理テーブルを使用することで、重複するブロックの情報をブロックの特性に合わせて効率的に管理することができる。そして、所定の領域サイズにおいて高い重複除去率を達成することができる。
複数の仮想ボリューム30aに亘って重複して書き込まれるデータは、OSによって使用されるデータである。また、複数の仮想ボリューム30aのいずれかに書き込まれるデータは、個別のアプリケーションによって使用されるデータである。
これにより、データの使用目的に合わせた、効率的な重複除去を行なうことができる。
共通データ登録部11は、アプリケーションが起動していない状態において、重複して書き込まれるデータについての情報を第1ハッシュ値管理テーブルに登録することによって、第1ハッシュ値管理テーブルを生成する。
共通データ登録部11は、アプリケーションが起動している状態において、複数の仮想ボリューム30aに亘って重複して書き込まれているデータについての情報を第1ハッシュ値管理テーブルに登録することによって、第1ハッシュ値管理テーブルを生成する。
これらにより、ストレージシステム100で共通に使用されるデータについての情報を、適切に第1ハッシュ値管理テーブルに登録することができる。
〔B〕その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
〔C〕付記
(付記1)
第1の仮想ボリュームと第2の仮想ボリュームとを展開するストレージ装置に備えられる制御装置であって、
第1のデータが前記第1及び第2の仮想ボリュームに亘って重複して書き込まれているかを判定する第1判定部と、
前記第1判定部によって前記第1のデータが重複して書き込まれていないと判定された場合に、前記第1又は第2の仮想ボリュームに書き込まれているデータを示す個別データ情報を用いて、前記第1のデータが前記第1又は第2の仮想ボリュームに書き込まれているかを判定する第2判定部と、
前記第2判定部によって前記第1のデータが前記第1及び第2の仮想ボリュームのいずれにも書き込まれていないと判定された場合に、前記個別データ情報に前記第1のデータについての情報を登録する個別データ登録部と、
を備える、制御装置。
(付記2)
前記個別データ登録部によって登録された前記情報に係る前記第1のデータを、前記第1又は第2仮想ボリュームに書き込む書き込み部を更に備える、
付記1に記載の制御装置。
(付記3)
前記ストレージ装置は、前記第1及び第2の仮想ボリュームとは異なる第3の仮想ボリュームを更に展開し、
前記第1判定部によって前記第1のデータが前記第1及び第2の仮想ボリュームに亘って重複して書き込まれていると判定された場合には、前記第2判定部による前記判定と前記個別データ登録部による前記登録とを行なわずに、前記第1のデータを、前記第1のデータの格納先である前記第3の仮想ボリュームに書き込む書き込み部を更に備える、
付記1に記載の制御装置。
(付記4)
前記第1判定部は、前記第1及び第2の仮想ボリュームに亘って重複して書き込まれているデータを示す共通データ情報を用いて、前記判定を行なう、
付記1〜3のいずれか1項に記載の制御装置。
(付記5)
前記第1及び第2の仮想ボリュームに亘って重複して書き込まれるデータは、前記ストレージ装置の全体の動作を制御するオペレーティングシステムによって使用されるデータであり、
前記第1及び第2の仮想ボリュームのいずれか一方に書き込まれるデータは、前記ストレージ装置において動作する個別のアプリケーションによって使用されるデータである、
付記4に記載の制御装置。
(付記6)
前記アプリケーションが起動していない状態において、重複して書き込まれるデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する共通データ登録部を更に備える、
付記5に記載の制御装置。
(付記7)
前記アプリケーションが起動している状態において、前記第1及び第2の仮想ボリュームに亘って重複して書き込まれているデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する共通データ登録部を更に備える、
付記5に記載の制御装置。
(付記8)
第1の仮想ボリュームと第2の仮想ボリュームとを展開するストレージ装置であって、
第1のデータが前記第1及び第2の仮想ボリュームに亘って重複して書き込まれているかを判定する第1判定部と、
前記第1判定部によって前記第1のデータが重複して書き込まれていないと判定された場合に、前記第1又は第2の仮想ボリュームに書き込まれているデータを示す個別データ情報を用いて、前記第1のデータが前記第1又は第2の仮想ボリュームに書き込まれているかを判定する第2判定部と、
前記第2判定部によって前記第1のデータが前記第1及び第2の仮想ボリュームのいずれにも書き込まれていないと判定された場合に、前記個別データ情報に前記第1のデータについての情報を登録する個別データ登録部と、
を備える、ストレージ装置。
(付記9)
前記個別データ登録部によって登録された前記情報に係る前記第1のデータを、前記第1又は第2仮想ボリュームに書き込む書き込み部を更に備える、
付記8に記載のストレージ装置。
(付記10)
当該ストレージ装置は、前記第1及び第2の仮想ボリュームとは異なる第3の仮想ボリュームを更に展開し、
前記第1判定部によって前記第1のデータが前記第1及び第2の仮想ボリュームに亘って重複して書き込まれていると判定された場合には、前記第2判定部による前記判定と前記個別データ登録部による前記登録とを行なわずに、前記第1のデータを、前記第1のデータの格納先である前記第3の仮想ボリュームに書き込む書き込み部を更に備える、
付記8に記載のストレージ装置。
(付記11)
前記第1判定部は、前記第1及び第2の仮想ボリュームに亘って重複して書き込まれているデータを示す共通データ情報を用いて、前記判定を行なう、
付記8〜10のいずれか1項に記載のストレージ装置。
(付記12)
前記第1及び第2の仮想ボリュームに亘って重複して書き込まれるデータは、当該ストレージ装置の全体の動作を制御するオペレーティングシステムによって使用されるデータであり、
前記第1及び第2の仮想ボリュームのいずれか一方に書き込まれるデータは、当該ストレージ装置において動作する個別のアプリケーションによって使用されるデータである、
付記11に記載のストレージ装置。
(付記13)
前記アプリケーションが起動していない状態において、重複して書き込まれるデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する共通データ登録部を更に備える、
付記12に記載のストレージ装置。
(付記14)
前記アプリケーションが起動している状態において、前記第1及び第2の仮想ボリュームに亘って重複して書き込まれているデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する共通データ登録部を更に備える、
付記12に記載のストレージ装置。
(付記15)
第1の仮想ボリュームと第2の仮想ボリュームとを展開するストレージ装置に備えられるコンピュータに、
第1のデータが前記第1及び第2の仮想ボリュームに亘って重複して書き込まれているかを判定し、
前記第1のデータが重複して書き込まれていないと判定された場合に、前記第1又は第2の仮想ボリュームに書き込まれているデータを示す個別データ情報を用いて、前記第1のデータが前記第1又は第2の仮想ボリュームに書き込まれているかを判定し、
前記第1のデータが前記第1及び第2の仮想ボリュームのいずれにも書き込まれていないと判定された場合に、前記個別データ情報に前記第1のデータについての情報を登録する、
処理を実行させる、データ管理プログラム。
(付記16)
前記登録された前記情報に係る前記第1のデータを、前記第1又は第2仮想ボリュームに書き込む、
処理を前記コンピュータに実行させる、付記15に記載のデータ管理プログラム。
(付記17)
前記ストレージ装置は、前記第1及び第2の仮想ボリュームとは異なる第3の仮想ボリュームを更に展開し、
前記第1のデータが前記第1及び第2の仮想ボリュームに亘って重複して書き込まれている場合には、前記個別データ情報を用いた前記判定と前記個別データ情報への前記登録とを行なわずに、前記第1のデータを、前記第1のデータの格納先である前記第3の仮想ボリュームに書き込む、
処理を前記コンピュータに実行させる、付記15に記載のデータ管理プログラム。
(付記18)
前記第1及び第2の仮想ボリュームに亘って重複して書き込まれているデータを示す共通データ情報を用いて、前記判定を行なう、
処理を前記コンピュータに実行させる、付記15〜17のいずれか1項に記載のデータ管理プログラム。
(付記19)
前記第1及び第2の仮想ボリュームに亘って重複して書き込まれるデータは、前記ストレージ装置の全体の動作を制御するオペレーティングシステムによって使用されるデータであり、
前記第1及び第2の仮想ボリュームのいずれか一方に書き込まれるデータは、前記ストレージ装置において動作する個別のアプリケーションによって使用されるデータである、
付記18に記載のデータ管理プログラム。
(付記20)
前記アプリケーションが起動していない状態において、重複して書き込まれるデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する、
処理を前記コンピュータに実行させる、付記19に記載のデータ管理プログラム。
(付記21)
前記アプリケーションが起動している状態において、前記第1及び第2の仮想ボリュームに亘って重複して書き込まれているデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する、
処理を前記コンピュータに実行させる、付記19に記載のデータ管理プログラム。
(付記22)
第1の仮想ボリュームと第2の仮想ボリュームとを展開するストレージ装置において、
第1のデータが前記第1及び第2の仮想ボリュームに亘って重複して書き込まれているかを判定し、
前記第1のデータが重複して書き込まれていないと判定された場合に、前記第1又は第2の仮想ボリュームに書き込まれているデータを示す個別データ情報を用いて、前記第1のデータが前記第1又は第2の仮想ボリュームに書き込まれているかを判定し、
前記第1のデータが前記第1及び第2の仮想ボリュームのいずれにも書き込まれていないと判定された場合に、前記個別データ情報に前記第1のデータについての情報を登録する、
データ管理方法。
(付記23)
前記登録された前記情報に係る前記第1のデータを、前記第1又は第2仮想ボリュームに書き込む、
付記22に記載のデータ管理方法。
(付記24)
前記ストレージ装置は、前記第1及び第2の仮想ボリュームとは異なる第3の仮想ボリュームを更に展開し、
前記第1のデータが前記第1及び第2の仮想ボリュームに亘って重複して書き込まれている場合には、前記個別データ情報を用いた前記判定と前記個別データ情報への前記登録とを行なわずに、前記第1のデータを、前記第1のデータの格納先である前記第3の仮想ボリュームに書き込む、
付記22に記載のデータ管理方法。
(付記25)
前記第1及び第2の仮想ボリュームに亘って重複して書き込まれているデータを示す共通データ情報を用いて、前記判定を行なう、
付記22〜24のいずれか1項に記載のデータ管理方法。
(付記26)
前記第1及び第2の仮想ボリュームに亘って重複して書き込まれるデータは、前記ストレージ装置の全体の動作を制御するオペレーティングシステムによって使用されるデータであり、
前記第1及び第2の仮想ボリュームのいずれか一方に書き込まれるデータは、前記ストレージ装置において動作する個別のアプリケーションによって使用されるデータである、
付記25に記載のデータ管理方法。
(付記27)
前記アプリケーションが起動していない状態において、重複して書き込まれるデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する、
付記26に記載のデータ管理方法。
(付記28)
前記アプリケーションが起動している状態において、前記第1及び第2の仮想ボリュームに亘って重複して書き込まれているデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する、
付記26に記載のデータ管理方法。