ストレージシステム、ストレージ制御装置およびストレージ制御方法
【課題】ボリュームの複製先として必要な物理記憶容量を削減する。
【解決手段】書き込み制御部11は、ボリューム41にデータを書き込む処理と、ボリューム41内の部分領域ごとに、書き込んだデータに応じたコードを生成してコード記憶部13に登録する処理とを、例えば非同期に実行する。複製制御部12は、ボリューム41のうちの複製対象領域のデータをボリューム42に複製するとともに、コード記憶部13に登録されたコードに基づいて複製対象領域における同一のデータが格納されている部分領域を判定し、判定された部分領域に対応するボリューム42の部分領域に対して同一の物理記憶領域を割り当てる。
【解決手段】書き込み制御部11は、ボリューム41にデータを書き込む処理と、ボリューム41内の部分領域ごとに、書き込んだデータに応じたコードを生成してコード記憶部13に登録する処理とを、例えば非同期に実行する。複製制御部12は、ボリューム41のうちの複製対象領域のデータをボリューム42に複製するとともに、コード記憶部13に登録されたコードに基づいて複製対象領域における同一のデータが格納されている部分領域を判定し、判定された部分領域に対応するボリューム42の部分領域に対して同一の物理記憶領域を割り当てる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステム、ストレージ制御装置およびストレージ制御方法に関する。
【背景技術】
【0002】
近年、HDD(Hard Disk Drive)などの記憶装置を複数用いたストレージシステムが広く使用されている。ストレージシステムに対して格納されるデータ量は年々増加していることから、ストレージシステム内の記憶領域を効率よく使用し、実際に使用する物理記憶領域の容量を削減するための技術が注目されている。
【0003】
物理記憶領域の容量を削減する技術として、シン・プロビジョニング(Thin Provisioning)がある。シン・プロビジョニングは、要求された記憶容量のすべてに相当する物理記憶領域を当初は用意せず、実際の記憶データ容量に相当する物理記憶領域のみを用意して、要求された記憶容量を仮想ボリュームとして提供するものである。
【0004】
また、物理記憶領域の容量を削減する他の技術として、デデュプリケーション(De-duplication)もある。デデュプリケーションは、記憶するデータの中で重複するデータについては、その中の1つのみを物理記憶領域に記憶し、他のデータについては記憶しないようにするものである。例えば、バックアップシステムにおいて、バックアップ元のボリュームにおいて重複したデータを排除しておき、重複データが排除されたボリュームにおいて物理記憶領域に格納されたデータのみ、バックアップボリュームにコピーするものがある。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2010−271808号公報
【特許文献2】特開2009−48497号公報
【特許文献3】特開2008−282382号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
ストレージシステムに記憶されたデータをバックアップする需要が高まるのに連れて、バックアップ先として必要とされる記憶容量が増大していることから、バックアップ先の記憶容量を削減することが課題となっている。
【0007】
1つの側面では、本発明は、ボリュームの複製先として必要な物理記憶容量を削減することが可能なストレージシステム、ストレージ制御装置およびストレージ制御方法を提供することを目的とする。
【課題を解決するための手段】
【0008】
上記目的を達成するために、複数の記憶装置と、複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置とを備えたストレージシステムが提供される。このストレージシステムにおいて、ストレージ制御装置は、書き込み制御部と、複製制御部とを備える。書き込み制御部は、ホスト装置からの要求に応じて第1のボリュームにデータを書き込むとともに、第1のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録する。複製制御部は、第1のボリュームのうち複製対象領域についての複製要求を受けると、複製対象領域のデータを、第1のボリュームとは異なる物理記憶領域によって構成される第2のボリュームに複製するとともに、コード記憶部に登録されたコードに基づいて複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する第2のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる。
【0009】
また、上記目的を達成するために、上記のストレージ制御装置と同様の処理を実行するストレージ制御装置およびストレージ制御方法が提供される。
【発明の効果】
【0010】
1態様によれば、ボリュームの複製先として必要な物理記憶容量を削減することができる。
【図面の簡単な説明】
【0011】
【図1】第1の実施の形態に係るストレージシステムの構成例を示す図である。
【図2】第2の実施の形態に係るストレージシステムの全体構成例を示す図である。
【図3】CMのハードウェア構成例を示す図である。
【図4】CMの処理機能の構成例を示すブロック図である。
【図5】業務ボリュームおよび複製ボリュームに対する物理記憶領域の割り当てについて示す図である。
【図6】プール領域管理テーブルに登録される情報の例を示す図である。
【図7】業務ボリューム管理テーブルに登録される情報の例を示す図である。
【図8】複製ボリューム管理テーブルに登録される情報の例を示す図である。
【図9】複製範囲設定テーブルに登録される情報の例である。
【図10】業務ボリュームへのデータ書き込み時の処理例を示す図である。
【図11】複製ボリュームの生成処理の例を示す図である。
【図12】コード算出が未完了の状態で新たに書き込みが要求された場合の処理例を示す図である。
【図13】ホスト装置からの要求に応じた業務ボリュームに対するデータ書き込み処理手順の例を示すフローチャート(その1)である。
【図14】ホスト装置からの要求に応じた業務ボリュームに対するデータ書き込み処理手順の例を示すフローチャート(その2)である。
【図15】コード算出処理手順の例を示すフローチャートである。
【図16】複製ボリュームの生成処理手順の例を示すフローチャート(その1)である。
【図17】複製ボリュームの生成処理手順の例を示すフローチャート(その2)である。
【図18】複製ボリュームを用いたリストア処理の例を示す図である。
【図19】第3の実施の形態における業務ボリューム管理テーブルに登録される情報の例を示す図である。
【図20】業務ボリュームの容量削減処理手順の例を示すフローチャートである。
【図21】第3の実施の形態における、複製ボリュームの生成処理手順の例を示すフローチャートである。
【発明を実施するための形態】
【0012】
以下、実施の形態について図面を参照して詳細に説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るストレージシステムの構成例を示す図である。
【0013】
ストレージシステム1は、ストレージ制御装置10と、複数の記憶装置とを備える。ストレージシステム1が備える記憶装置は、HDD、SSD(Solid State Drive)などの不揮発性記憶装置である。図1では、ストレージシステム1が備える記憶装置として、記憶装置21〜24を例示している。また、ストレージ制御装置10には、ホスト装置30が接続されている。
【0014】
ストレージ制御装置10は、記憶装置21〜24に対するデータアクセス処理を制御する装置である。ストレージ制御装置10は、記憶装置21〜24の物理記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御する。図1中に示すボリューム41,42は、このようなボリュームである。
【0015】
ストレージ制御装置10は、書き込み制御部11、複製制御部12およびコード記憶部13を備える。書き込み制御部11および複製制御部12の処理は、例えば、ストレージ制御装置10が備えるCPU(Central Processing Unit)が所定のプログラムを実行することで実現される。また、コード記憶部13は、例えば、ストレージ制御装置10の内部に設けられた不揮発性記憶装置の記憶領域として実現される。
【0016】
書き込み制御部11は、ホスト装置30からの要求に応じて、ボリューム41(第1のボリューム)に対してデータを書き込む。また、書き込み制御部11は、ボリューム41が分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部13に登録する。コード記憶部13に登録されるコードは、元のデータごとにユニークな値をとるものであり、例えば、元のデータに基づいて計算されたハッシュ値である。
【0017】
書き込み制御部11は、ホスト装置30からの要求に応じた、ボリューム41に対するデータ書き込み処理と、書き込んだデータに基づくコードの生成処理とを、例えば、非同期に実行する。この場合、書き込み制御部11は、ボリューム41内の所定の部分領域にデータを書き込んだ後、その後の任意のタイミングで、部分領域に書き込んだデータに基づいてコードを生成し、生成したコードをコード記憶部13に登録する。
【0018】
複製制御部12は、ボリューム41のうち複製対象領域についての複製要求を、例えばホスト装置30から受けると、複製対象領域のデータを別のボリューム42(第2のボリューム)に複製して、複製ボリュームを生成する。このボリューム42は、記憶装置21〜24によって実現される物理記憶領域のうち、ボリューム41とは異なる物理記憶領域によって構成される。
【0019】
また、複製制御部12は、上記のように複製ボリュームを生成するとともに、コード記憶部13に登録されたコードに基づいて、複製対象領域内の部分領域のうち同一のデータが格納されている部分領域を判定する。そして、複製制御部12は、同一のデータが格納されている部分領域に対応する、ボリューム42の部分領域に対しては、同一の物理記憶領域を割り当てる。すなわち、複製制御部12は、ボリューム42内の部分領域のうち、同一のデータを保持する部分領域群においては、それらのうち1つの部分領域にのみ実データを格納し、それ以外の部分領域には実データを格納しないようにする。このような処理により、ボリューム42に割り当てる物理記憶領域の容量を削減する。
【0020】
例えば、ボリューム41内の部分領域41a〜41dが、記憶装置21内の物理記憶領域21aによって実現されるものとする。そして、ボリューム41内の部分領域41a〜41dを複製対象領域として指定した複製処理が要求されたものとする。
【0021】
複製制御部12は、例えば、記憶装置24内の物理記憶領域24a内に、部分領域41a〜41dのデータを格納することで、部分領域41a〜41dを複製したボリューム42を生成する。すなわち、生成されたボリューム42内の部分領域42a〜42dは、複製元のボリューム41の部分領域41a〜41dにそれぞれ対応する。
【0022】
ここで、部分領域41bのデータと部分領域41cのデータとが、同一であるものとする。複製制御部12は、コード記憶部13において部分領域41b,41cにそれぞれ対応付けられているコードが一致することから、部分領域41b,41cの各データが同一であると判定する。複製制御部12は、部分領域41b,41cにそれぞれ対応する、ボリューム42内の部分領域42b,42cに対して、同一の物理記憶領域を割り当てる。
【0023】
例えば、複製制御部12は、記憶装置24の物理記憶領域24aのうち、物理記憶領域24bに対して、部分領域42bのデータとして、ボリューム41における部分領域41bのデータを格納する。さらに、複製制御部12は、部分領域42cの実データを物理記憶領域24bとは異なる物理記憶領域に格納せずに、部分領域42cに対して部分領域42bと共通の物理記憶領域24bを割り当てる。
【0024】
異なる部分領域に対して同一の物理記憶領域を割り当てる方法としては、例えば次のような方法がある。複製制御部12は、ボリューム42の部分領域ごとに、実データと、実データを格納した物理記憶領域の位置を示す位置情報とを記録する。この方法を用いた場合、複製制御部12は、部分領域42bについては実データと位置情報とを記録するが、部分領域42cについては実データを記録せずに位置情報のみを記録する。これにより、部分領域42b,42cに対して同一の物理記憶領域が割り当てられる。
【0025】
また、他の方法として、複製制御部12は、テーブル情報に対して、ボリューム42の部分領域ごとに、実データを格納した物理記憶領域の位置情報を対応付けて登録する。この方法を用いた場合、複製制御部12は、テーブル内の部分領域42b,42cの各エントリに対して同じ位置情報を登録することで、部分領域42b,42cに同一の物理記憶領域を割り当てる。
【0026】
以上のように、ボリューム42において、同一のデータが記録される部分領域に対して同一の物理記憶領域が割り当てられることで、ボリューム42に対して用意すべき物理記憶領域の容量が削減される。従って、ストレージシステム1が備える物理記憶領域の使用量が小さくなり、これらの物理記憶領域を効率的に利用できるようになる。
【0027】
また、複製制御部12は、あらかじめ生成されたコードが登録されたコード記憶部13を参照して、同一のデータが記録された部分領域の有無を判定するので、複製ボリュームの生成時にコードを算出する必要がない。このため、複製ボリュームの生成処理に要する時間を短縮できる。
【0028】
一方、書き込み制御部11は、ボリューム41に書き込んだデータに基づくコードの算出を行うものの、部分領域間のデータの同一性判定は行わない。しかも、書き込み制御部11は、ボリューム41へのデータの書き込みと、書き込んだデータに基づくコードの算出処理とを、非同期に実行することもできる。この場合、コード算出処理が、ホスト装置30からの要求に応じたボリューム41のアクセス処理に与える影響を小さくすることができる。従って、ホスト装置30からの要求に応じた記憶装置への書き込み処理速度をできるだけ低下させずに、ストレージシステム1で使用される物理記憶領域の容量を削減して、物理記憶領域を効率よく利用できるようになる。
【0029】
なお、複製制御部12は、さらに、ボリューム42を仮想ボリュームとして生成してもよい。この場合、ボリューム42の部分領域のうち実際にデータが記録されている部分領域にのみ物理記憶領域が割り当てられ、データが記録されていない部分領域には物理記憶領域が割り当てられない。これにより、ボリューム42に割り当てる物理記憶領域の容量をさらに削減することができる。
【0030】
〔第2の実施の形態〕
図2は、第2の実施の形態に係るストレージシステムの全体構成例を示す図である。図2に示すストレージシステム100は、CE(Controller Enclosure)200と、DE(Drive Enclosure)300とを含む。また、CE200には、ホスト装置400が接続されている。
【0031】
CE200は、CM(Controller Module)201,202を備える。CM201,202のそれぞれは、ホスト装置400からのI/O(In/Out)要求に応じて、DE300内の記憶装置に対するデータの読み書きを行う。CM201,202は、DE300内の記憶装置によって実現される物理記憶領域をRAID(Redundant Arrays of Inexpensive Disks)によって管理し、これらの物理記憶領域に対するアクセスを制御する。
【0032】
なお、CM201,202は、例えばルータなどを介して互いに接続されていてもよい。また、CMは、CE200内に1つのみ設けられてもよいし、3つ以上設けられてもよい。ただし、CMが複数設けられることで、DE300に対するアクセス制御系統が冗長化され、アクセス制御処理の信頼性が向上する。
【0033】
DE300は、CM201,202からのアクセス制御対象となる複数の記憶装置を備える。本実施の形態のDE300は、記憶装置としてHDDを備えるディスクアレイ装置である。なお、DE300が備える記憶装置としては、SSDなどの他の種類の不揮発性記憶装置を使用することもできる。また、CE200には、複数のDE300が接続されていてもよい。
【0034】
ホスト装置400は、ユーザの操作に応じて、CM201,202に対して、DE300内のHDDへのアクセスを要求する。ホスト装置400は、例えば、ユーザの操作に応じて、CM201,202のいずれかを通じて、DE300内のHDDからのデータの読み出しや、DE300内のHDDに対するデータの書き込みを行うことができる。
【0035】
なお、CE200内のCM201,202は、ともに同様の構成を有し、同様の処理を実行可能である。そこで、以下、CM201についてのみ説明し、CM202についての説明を省略する。
【0036】
図3は、CMのハードウェア構成例を示す図である。
CM201は、CPU211によって装置全体が制御されている。CPU211には、RAM(Random Access Memory)212および複数の周辺機器が、バス217を介して接続されている。RAM212は、CM201の主記憶装置として使用され、CPU211に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。
【0037】
CPU211には、周辺機器の例として、SSD213、入力I/F(インタフェース)214、CA(Channel Adapter)215およびDI(Drive Interface)216が接続されている。
【0038】
SSD213は、CM201の二次記憶装置として使用され、CPU211によって実行されるプログラムやその実行に必要な各種のデータなどを記憶する。なお、二次記憶装置としては、例えば、HDDなどの他の種類の不揮発性記憶装置が使用されてもよい。
【0039】
入力I/F214には、操作キーなどを備える入力装置214aが接続されている。入力I/F214は、入力装置214aに対する操作入力に応じた信号をCPU211に出力する。
【0040】
CA215は、ホスト装置400とCM201との間でデータを送受信するインタフェース処理を実行する。CA215とホスト装置400とは、例えば、FC(Fibre Channel)規格に従って通信する。
【0041】
DI216は、DE300とCM201との間でデータを送受信するインタフェース処理を実行する。DI216とDE300とは、例えば、SAS(Serial Attached SCSI,SCSI:Small Computer System Interface)規格に従って通信する。
【0042】
図4は、CMの処理機能の構成例を示すブロック図である。
CM201は、RAID制御部221、ホストI/O制御部222および複製制御部223を備える。RAID制御部221、ホストI/O制御部222および複製制御部223の処理は、例えば、CM201のCPU211が所定のプログラムを実行することで実現される。
【0043】
また、CM201の記憶装置には、プール領域管理テーブル231、業務ボリューム管理テーブル232、複製ボリューム管理テーブル233および複製範囲設定テーブル234が記憶される。これらの各テーブルは、例えばSSD213に記憶される。
【0044】
RAID制御部221は、ホストI/O制御部222または複製制御部223からの要求に応じて、DE300内のHDDにアクセスする。RAID制御部221は、DE300内のHDDにアクセスする際に、アクセス先の領域に対して設定されたRAIDに関する設定情報(RAIDレベル、RAIDを構成するディスク数など)に基づいてアクセス制御を行う。
【0045】
例えば、RAID制御部221は、ホストI/O制御部222からデータの書き込み要求を受けると、RAIDに関する設定情報に基づいて、データが冗長化されるように書き込み処理を行う。以下、例としてディスク数「6」のRAID−5で制御するものとすると、RAID制御部221は、ホストI/O制御部222から受信したデータを分割し、連続する5個の分割データとそれらに基づくパリティとを、6台のHDDにおける同一ストライプ番号の領域に分散させて記録する。
【0046】
ホストI/O制御部222は、ホスト装置400から、業務ボリュームに対するI/O要求を受け付ける。業務ボリュームとは、ユーザが使用可能な論理ボリュームであり、その物理記憶領域はDE300内のHDDによって提供される。ユーザは、ホスト装置400からCM201に対してI/O要求を送信することで、業務ボリュームに対するデータの読み書きを行うことができる。
【0047】
業務ボリュームは、プール領域から割り当てられた物理記憶領域によって構成される仮想ボリュームとして実現される。プール領域は、DE300内のHDD内の未使用の物理記憶領域のうち、業務ボリューム(および後述する複製ボリューム)に対して割り当て可能な領域である。プール領域の位置を示すアドレスは、プール領域管理テーブル231に登録されている。
【0048】
ホストI/O制御部222は、ホスト装置400から業務ボリュームに対する書き込み要求を受けると、データの書き込み先の物理記憶領域をプール領域管理テーブル231から獲得する。ホストI/O制御部222は、獲得した物理記憶領域を示すアドレス(LBA:Logical Block Address)と書き込み対象のデータとをRAID制御部221に通知し、データの書き込みを依頼する。これとともに、ホストI/O制御部222は、獲得した物理記憶領域を示すアドレスを、業務ボリューム内のデータの書き込み位置に対応付けて、業務ボリューム管理テーブル232に登録する。このような処理により、業務ボリュームの物理記憶領域は、データが実際に書き込まれた領域についてのみプール領域から動的に割り当てられる。
【0049】
また、ホストI/O制御部222は、ホスト装置400から、業務ボリュームからの読み出し要求を受けると、業務ボリューム管理テーブル232を参照して、読み出し領域を示すアドレスを判別する。ホストI/O制御部222は、読み出し領域を示すアドレスをRAID制御部221に通知して、データの読み出しを依頼する。依頼に応じてRAID制御部221がデータを読み出すと、ホストI/O制御部222は、読み出されたデータをホスト装置400に送信する。
【0050】
さらに、ホストI/O制御部222は、ホスト装置400から、業務ボリューム内の複製対象領域の指定を受けるとともに、指定された複製対象領域についての複製要求を受けると、複製対象領域を示す情報を複製制御部223に通知して、複製ボリュームの生成処理を依頼する。
【0051】
複製制御部223は、ホストI/O制御部222からの依頼に応じて、複製ボリュームの生成処理を行う。複製ボリュームは、例えば、対応する業務ボリュームのうち複製対象として指定された領域(以下、複製対象領域と呼ぶ)についてのバックアップとして利用されるものである。この複製ボリュームは、業務ボリュームと共用されるプール領域から割り当てられた物理記憶領域によって構成される仮想ボリュームとして実現される。複製制御部223は、複製ボリューム内の部分領域と、各部分領域に割り当てられた物理記憶領域を示すアドレスとを対応付けて、複製ボリューム管理テーブル233に登録する。
【0052】
複製制御部223は、複製対象領域に割り当てられた物理記憶領域のアドレスを業務ボリューム管理テーブル232から判別し、判別したアドレスをRAID制御部221に通知して、データの読み出しを依頼する。また、複製制御部223は、複製対象領域のうちデータが格納されている(すなわち、物理記憶領域が割り当てられている)領域に対応する物理記憶領域を、プール領域管理テーブル231から獲得する。複製制御部223は、RAID制御部221によって読み出されたデータを、獲得した物理記憶領域にコピーするように、RAID制御部221に依頼する。このような処理により、複製ボリュームの物理記憶領域は、データが実際に書き込まれている領域についてのみプール領域から動的に割り当てられる。
【0053】
また、後述するように、複製制御部223は、複製ボリュームを生成する際、複製ボリューム内のデータの重複排除(De-duplication)と、部分領域ごとのデータ圧縮とを行う。データの重複排除は、複製ボリューム内の部分領域のうち同一データが格納されている部分領域に対しては、同一の物理記憶領域を割り当てるものである。このようなデータの重複排除とデータ圧縮とによって、複製ボリュームに割り当てる物理記憶領域を削減する。
【0054】
なお、複製制御部223は、複製ボリュームを生成する際、業務ボリュームのうち複製対象領域に割り当てられた物理記憶領域を示すアドレスを、複製範囲設定テーブル234に登録する。この複製範囲設定テーブル234は、複製ボリュームの生成処理中に、ホスト装置400から業務ボリュームへの書き込みが要求された際に、ホストI/O制御部222によって参照される。
【0055】
図5は、業務ボリュームおよび複製ボリュームに対する物理記憶領域の割り当てについて示す図である。
図5では例として、業務ボリュームV1の少なくとも一部の領域を複製した複製ボリュームV2を生成する場合を示す。業務ボリュームV1に付与された「オフセット(Offset)」は、業務ボリュームV1を一定容量ごとに分割した部分領域の位置を示す。以下、部分領域自体を「オフセット」と呼び、番号Xのオフセットを「オフセット#X」と記載する。図5では例として、業務ボリュームV1におけるオフセット#0000〜#0005を、複製ボリュームV2に複製する場合を示す。
【0056】
前述のように、業務ボリュームV1および複製ボリュームV2は、ともに仮想ボリュームとして実現される。業務ボリュームV1については、データが格納されているオフセットに対してのみ、物理記憶領域が割り当てられる。業務ボリュームV1に割り当てられた物理記憶領域は、業務ボリューム管理テーブル232に登録される。図5の例では、業務ボリュームV1のオフセット#0000〜#0002,#0004にデータが格納されている。この場合、業務ボリューム管理テーブル232におけるオフセット#0000〜#0002,#0004に対応するエントリに、各オフセットに割り当てられた物理記憶領域を示す位置情報が登録される。
【0057】
複製ボリュームV2についても同様に、データが格納されているオフセットに対してのみ、物理記憶領域が割り当てられる。複製ボリュームV2に割り当てられた物理記憶領域は、複製ボリューム管理テーブル233に登録される。図5の例では、業務ボリュームV1のオフセット#0000〜#0002,#0004にデータが格納されていることから、複製ボリュームV2のオフセット#0000〜#0002,#0004にデータが格納されている。この場合、複製ボリューム管理テーブル233におけるオフセット#0000〜#0002,#0004に対応するエントリに、各オフセットに割り当てられた物理記憶領域を示す位置情報が登録される。
【0058】
一方、図5に示すプール領域A0は、DE300内のHDDによって実現される物理記憶領域である。プール領域A0は、未使用領域であるフリー領域A1と、それぞれ使用中の領域であるTPP(Thin Provisioning Pool)領域A2およびSDP(Snap Data Pool)領域A3とを含む。
【0059】
業務ボリュームV1および複製ボリュームV2の物理記憶領域は、フリー領域A1から割り当てられる。フリー領域A1には、例えば、業務ボリュームV1や複製ボリュームV2に対して割り当て可能な物理記憶領域が、複数のプールボリュームとして用意される。図5の例では、フリー領域A1には6つのプールボリュームPV#00〜#05が用意されている。業務ボリュームV1や複製ボリュームV2に割り当てられる物理記憶領域は、フリー領域A1に用意されたプールボリュームを識別するボリューム番号と、そのプールボリュームにおける先頭位置を示すLBA(Logical Block Address)と、先頭位置から終端位置までの長さ(容量)を示すブロック数(LBAの数)とによって指定される。
【0060】
各プールボリュームは、RAIDの構成設定に応じた1つ以上のHDDによって構成される。本実施の形態では前述した“ディスク数「6」のRAID−5”によって制御が行われるものとすると、1つのプールボリュームはDE300内の6台のHDDによって構成される。そして、あるボリューム番号のプールボリュームにおけるあるLBAは、ボリューム番号に対応するプールボリュームに属する6台のHDDにおける同一の位置を示す。従って、業務ボリュームV1や複製ボリュームV2に対して、ボリューム番号およびLBAによって示される物理記憶領域が割り当てられる際には、実際には6台分のHDDにおける同一LBAが示す物理記憶領域が割り当てられる。
【0061】
業務ボリュームV1内のあるオフセットに対してデータの書き込みが要求されると、フリー領域A1から物理記憶領域が抽出され、抽出された物理記憶領域がオフセットに割り当てられて、割り当てられた物理記憶領域にデータが格納される。TPP領域A2は、基本的に、業務ボリュームV1に割り当てられた物理記憶領域が属する論理領域である。以下、TPP領域A2に属する、オフセットごとの物理記憶領域を、「TPPブロック」と呼ぶ。図5の例では、業務ボリュームV1内のオフセットのうち、データが格納されたオフセット#0000〜#0002,#0004に対してのみ、それぞれTPPブロックが割り当てられている。なお、TPPブロックは、すべて同じ容量を備える。
【0062】
一方、複製ボリュームV2における、データを格納すべきオフセットに対しても、フリー領域A1から抽出された物理記憶領域が割り当てられる。SDP領域A3は、複製ボリュームV2に対して最終的に割り当てられた物理記憶領域が属する論理領域である。以下、SDP領域A3に属する、オフセットごとの物理記憶領域を、「SDPブロック」と呼ぶ。図5の例では、複製ボリュームV2内のオフセットのうち、データが格納されたオフセット#0000〜#0002,#0004に対してのみ、それぞれSDPブロックが割り当てられている。
【0063】
ところで、複製ボリュームV2におけるデータが格納されたオフセットには、対応する業務ボリュームV1内のオフセットに格納されたデータが、圧縮されて書き込まれる。このため、複製ボリュームV2のオフセットに割り当てられるSDPブロックの容量は、ほとんどの場合TPPブロックの容量より小さくなる。
【0064】
さらに、後述するように、複製ボリュームV2においては、同一のデータが格納されたオフセットに対して同一のSDPブロックを割り当てる「重複排除」が行われる。この重複排除により、業務ボリュームV1における複製対象領域に割り当てられるTPPブロックの数より、複製ボリュームV2に割り当てられるSDPブロックの数が少なくなることもある。これにより、複製ボリュームV2に割り当てられる物理記憶領域の容量をさらに削減することが可能になる。
【0065】
なお、図5においては、複製ボリュームV2と、これに対応する複製ボリューム管理テーブル233およびSDPブロックについて、複製ボリュームV2の生成処理が完了した状態を示した。しかしながら、後述するように、複製ボリュームV2の生成処理の過程では、複製ボリュームV2のオフセットに対して、一時的にTPPブロックが割り当てられ、その後、TPPブロックからSDPブロックに対して割り当てが変更される。
【0066】
図6は、プール領域管理テーブルに登録される情報の例を示す図である。
プール領域管理テーブル231には、プール領域のうち、業務ボリュームや複製ボリュームとして割り当て可能なフリー領域と、割り当て済みの領域(使用中領域)とを示す情報が登録される。使用中領域については、TPP領域とSDP領域とが個別に管理される。なお、図6は、プール領域に用意された1つのプールボリュームに対応するテーブルを示しているが、実際には、プール領域管理テーブル231には、図6のようなテーブルがプールボリュームごとに登録される。
【0067】
フリー領域は、「次ポインタ」と「前ポインタ」との組み合わせからなるエントリを用いた連結リスト231aによって管理される。1つのエントリは、プールボリュームにおける連続する記憶領域(連続するLBAによって表される領域)を示す。「次ポインタ」には、次のエントリが示す記憶領域の先頭LBAが登録され、「前ポインタ」には、前のエントリが示す記憶領域の末尾のLBAが登録される。連結リスト231aにおける先頭エントリの「前ポインタ」には、連結リスト231aにおける最後尾のエントリが示す記憶領域の末尾のLBAが登録される。一方、連結リスト231aにおける最後尾のエントリの「次ポインタ」には、連結リスト231aにおける先頭エントリが示す記憶領域の先頭LBAが登録される。
【0068】
TPP領域についても同様に、「次ポインタ」と「前ポインタ」との組み合わせからなるエントリを用いた連結リスト231bによって管理される。SDP領域についても同様に、「次ポインタ」と「前ポインタ」との組み合わせからなるエントリを用いた連結リスト231cによって管理される。
【0069】
フリー領域からTPPブロックが割り当てられる際には、TPPブロックに対応する記憶領域がフリー領域から除外されるように、連結リスト231aが書き換えられる。これとともに、TPPブロックがTPP領域に追加されるように、連結リスト231bが書き換えられる。一方、TPPブロックとして使用されていた記憶領域が解放されると、その記憶領域がTPP領域から除外されるように、連結リスト231bが書き換えられる。これとともに、TPP領域から除外された記憶領域がフリー領域に追加されるように、連結リスト231aが書き換えられる。
【0070】
同様に、フリー領域からSDPブロックが割り当てられる際には、SDPブロックに対応する記憶領域がフリー領域から除外されるように、連結リスト231aが書き換えられる。これとともに、SDPブロックがSDP領域に追加されるように、連結リスト231cが書き換えられる。一方、SDPブロックとして使用されていた記憶領域が解放されると、その記憶領域がSDP領域から除外されるように、連結リスト231cが書き換えられる。これとともに、SDP領域から除外された記憶領域がフリー領域に追加されるように、連結リスト231aが書き換えられる。
【0071】
図7は、業務ボリューム管理テーブルに登録される情報の例を示す図である。
業務ボリューム管理テーブル232には、業務ボリューム内のオフセットごとにエントリが設けられる。各エントリには、対応するオフセットに対して割り当てられた物理記憶領域の位置情報と、対応するオフセットに格納されたデータに基づくコードと、対応するオフセットのステータスとが登録される。
【0072】
割り当てられた物理記憶領域の位置情報としては、その物理記憶領域が属するプールボリュームを識別するボリューム番号と、物理記憶領域の先頭位置を示すLBAと、物理記憶領域の容量を示すブロック数とが登録される。なお、この「ブロック数」としてカウントされるブロックは、プールボリュームにおいて1つのLBAで識別される論理ブロックであって、TPPブロックやSDPブロックとは異なるものである。また、オフセットにTPPブロックが割り当てられている場合、ブロック数は一定値となる。
【0073】
コードは、オフセットに格納されたデータを基に算出され、算出元のデータごとにユニークな値をとる。このようなコードの例としては、ハッシュ値を用いることができる。
ステータスは、オフセットについての状態を示すものであり、「算出中」、「TPP」および「SDP」のいずれかが設定される。「算出中」は、オフセットに対してTPPブロックが割り当てられたものの、割り当てられたTPPブロックに格納するデータに基づくコードの算出が完了していないことを示す。「TPP」は、オフセットに対してTPPブロックが割り当てられ、かつ、コードの算出が完了していることを示す。例えば、エントリ内のコードの欄に値が登録されると、同じエントリ内のステータスが「算出中」から「TPP」に更新される。「SDP」は、オフセットに対してSDPブロックが割り当てられていることを示す。なお、業務ボリュームのオフセットに対してSDPブロックが割り当てられる場合とは、例えば、業務ボリューム内の一部のデータの破壊などが発生したときに、複製ボリュームの物理記憶領域(すなわちSDPブロック)を使用して業務ボリュームが論理的にリストアされる場合などである。
【0074】
なお、業務ボリュームは、複数設定されてもよい。この場合、業務ボリューム管理テーブル232は、業務ボリュームごとに個別に生成される。
図8は、複製ボリューム管理テーブルに登録される情報の例を示す図である。
【0075】
複製ボリューム管理テーブル233には、複製ボリューム内のオフセットごとにエントリが設けられる。複製ボリューム管理テーブル233内の各エントリには、業務ボリューム管理テーブル232と同様に、対応するオフセットに対して割り当てられた物理記憶領域の位置情報と、対応するオフセットに格納されたデータに基づくコードと、対応するオフセットのステータスとが登録される。
【0076】
さらに、複製ボリューム管理テーブル233内の各エントリには、フリーフラグが登録される。フリーフラグは、初期値が「0」とされ、ステータスが「TPP」のときに、業務ボリューム内の同じオフセットに対して別のTPPブロックが割り当てられている場合に「1」とされる。後述するように、フリーフラグが「1」となるケースとは、オフセットに格納されたデータに基づくコードの算出が完了していない状態で、そのオフセットに対してホスト装置400から新たなデータの書き込みが要求される場合である。
【0077】
なお、複製ボリュームは、1つの業務ボリュームを基に異なるタイミングで複数生成されてもよい。この場合、複製ボリューム管理テーブル233は、複製ボリュームの生成処理が開始されるごとに、複製ボリュームごとに個別に生成される。
【0078】
図9は、複製範囲設定テーブルに登録される情報の例である。
複製範囲設定テーブル234は、複製対象範囲が指定されて複製ボリュームの生成が要求されたときに、業務ボリュームにおける複製対象範囲に割り当てられた物理記憶領域の位置情報を保持するものである。複製範囲設定テーブル234には、同じプールボリュームに属する連続した物理記憶領域ごとにエントリが設けられる。各エントリには、識別番号が付与されるとともに、物理記憶領域を示す位置情報として、物理記憶領域が属するプールボリュームを識別するボリューム番号と、物理記憶領域の先頭位置を示すLBAと、物理記憶領域の長さ(容量)を示すブロック数とが登録される。
【0079】
この複製範囲設定テーブル234は、対応する複製ボリュームの生成処理が完了すると、消去される。なお、複製範囲設定テーブル234は、例えば、RAM212など、CM201内の揮発性記憶装置に記憶されてもよい。
【0080】
次に、複製ボリュームの生成処理について説明する。まず、図10は、業務ボリュームへのデータ書き込み時の処理例を示す図である。
ホストI/O制御部222は、ホスト装置400から、業務ボリューム内の未記憶領域に対するデータの書き込み要求を受けると、フリー領域からTPPブロックを獲得して、業務ボリュームにおけるデータの書き込み対象のオフセットに割り当てる。図10の例では、ホスト装置400が、業務ボリュームV1内のオフセット#0000〜#0002,#0004に対するデータの書き込みを要求したものとする(ステップS11)。
【0081】
書き込み要求を受けたホストI/O制御部222は、オフセット#0000〜#0002,#0004にそれぞれ対応する物理記憶領域(TPPブロック)をフリー領域から獲得し、獲得した物理記憶領域の位置情報を業務ボリューム管理テーブル232に登録する(ステップS12)。このとき、ホストI/O制御部222は、プール領域管理テーブル231を更新することで、獲得した物理記憶領域をフリー領域から除外するとともに、TPP領域A2に追加する。これにより、獲得された物理記憶領域は、TPPブロックとして取り扱われる。
【0082】
ホストI/O制御部222は、上記のような業務ボリューム管理テーブル232への登録処理を行うとともに、獲得したTPPブロックの位置情報と、各TPPブロックに書き込むべきデータとをRAID制御部221に引き渡して、書き込みを依頼する。これにより、オフセット#0000〜#0002,#0004にそれぞれ割り当てられたTPPブロックに対してデータが書き込まれる。
【0083】
さらに、ホストI/O制御部222は、オフセット#0000〜#0002,#0004にそれぞれ書き込まれたデータを基にコードを算出し、算出したコードを業務ボリューム管理テーブル232に登録する(ステップS13)。このように、業務ボリュームV1内の領域についての複製要求が発生する前に、複製処理の際に必要となるコードを算出して業務ボリューム管理テーブル232に記録しておくことで、複製処理の際に重複排除処理を効率よく実行できる。
【0084】
ただし、ホストI/O制御部222は、ホスト装置400からの要求に応じたTPPブロックへのデータの書き込み処理と、書き込んだデータに基づくコードの算出処理とを、非同期に実行する。すなわち、ホストI/O制御部222は、TPPブロックへのデータの書き込みが完了した後の任意のタイミングで、書き込んだデータに基づくコードの算出処理を実行する。これにより、ホスト装置400からの書き込み要求を受けてから、要求された書き込み処理を完了してホスト装置400に応答するまでに要する時間が短縮され、コードの算出処理がホストI/O処理に与える影響を低減することができる。
【0085】
図11は、複製ボリュームの生成処理の例を示す図である。図11では、業務ボリュームV1内のオフセット#0000〜#0002,#0004にデータが格納されている状態で、業務ボリュームV1内のオフセット#0000〜#0005についての複製処理が、ホスト装置400から要求されたものとする。
【0086】
複製要求を受けた複製制御部223は、まず、業務ボリューム管理テーブル232における複製対象領域(オフセット#0000〜#0005)に対応するエントリを、複製ボリューム管理テーブル233にコピーする(ステップS21)。これにより、複製ボリュームV2が論理的に生成される。すなわち、複製ボリュームV2におけるデータが格納されたオフセット#0000〜#0002,#0004に対して、複製元の業務ボリュームV1のオフセット#0000〜#0002,#0004に割り当てられているTPPブロックが、一時的に割り当てられる。この状態では、例えば、ホスト装置400からの要求に応じて、複製ボリュームV2からのデータ読み出しを実行できる。このように、業務ボリューム管理テーブル232における複製対象領域のエントリを、複製ボリューム管理テーブル233にコピーすることで、複製ボリュームV2を即座に利用可能な状態にすることができる。
【0087】
次に、複製制御部223は、複製ボリューム管理テーブル233に登録されたコードに基づき、複製ボリュームV2において同じデータが格納されたオフセットを判定する(ステップS22)。図11の例では、オフセット#0001,#0002に同じデータが格納されていると判定されたものとする。複製制御部223は、同じデータが格納されているオフセット#0001,#0002に対して同じSDPブロックを割り当てることで、重複排除を行う。
【0088】
複製制御部223は、それぞれ異なるデータが格納されたオフセット#0000,#0001,#0004に割り当てられたTPPブロックから、RAID制御部221を通じてデータを読み出し、読み出したデータを可逆圧縮方式で圧縮する(ステップS23)。複製制御部223は、オフセット#0000,#0001,#0004のそれぞれについて、圧縮後のデータの容量分の物理記憶領域(SDPブロック)を、フリー領域から獲得する。そして、複製制御部223は、獲得した物理記憶領域の位置情報を、複製ボリューム管理テーブル233におけるオフセット#0000,#0001,#0004のエントリに登録して、物理記憶領域の割り当てを変更する(ステップS24)。このとき、複製制御部223は、オフセット#0002のエントリには、オフセット#0001と同じ位置情報を登録する。
【0089】
複製制御部223は、さらに、プール領域管理テーブル231を更新することで、獲得した物理記憶領域をフリー領域から除外するとともに、SDP領域A3に追加する。これにより、獲得された物理記憶領域は、SDPブロックとして取り扱われる。
【0090】
複製制御部223は、上記の複製ボリューム管理テーブル233への登録処理を行うとともに、獲得したSDPブロックの位置情報と、各SDPブロックに書き込むべき圧縮後のデータとをRAID制御部221に引き渡して、書き込みを要求する。これにより、複製ボリュームV2のオフセット#0000〜#0002,#0004にそれぞれ割り当てられたSDPブロックに対して、圧縮後のデータが書き込まれる(ステップS25)。
【0091】
以上の処理により、複製ボリュームV2の生成処理が完了する。複製ボリュームV2は仮想ボリュームとして生成され、複製ボリュームV2には、専用の領域ではなく、業務ボリュームと共通のプール領域から物理記憶領域が割り当てられるので、DE300内のHDDが提供する記憶領域を効率的に使用することができる。
【0092】
また、最終的に、複製ボリュームV2に対しては、異なるデータが格納されたオフセット数分のSDPブロックが割り当てられ、しかも、SDPブロックは、圧縮後のデータの容量分だけ確保される。このため、複製元に割り当てられていた物理記憶領域と比較して、複製ボリュームV2に実際に割り当てられる物理記憶領域の容量を小さくすることができる。
【0093】
さらに、複製ボリュームV2に割り当てられる物理記憶領域の容量を削減できるということは、割り当てられた物理記憶領域に対するデータの格納処理の負荷を低減できることを意味する。このため、複製ボリュームV2の生成処理が、ホスト装置400からの要求に応じた業務ボリュームV1に対するI/O処理に与える影響を少なくすることができ、I/O処理の性能劣化を抑制できる。
【0094】
また、ホスト装置400から複製要求を受け付けた初期段階では、テーブルのコピーによって複製ボリュームV2が論理的に生成され、その後に、複製ボリュームV2専用の物理記憶領域(すなわちSDPブロック)に対する実体的なデータ転送が行われる。このような手順により、SDPブロックに対するデータの格納処理を、業務ボリュームV1へのI/O要求の頻度が低い時間帯など、複製要求受け付け後の任意のタイミングで実行することもできる。この場合、業務ボリュームV1に対するI/O処理の性能劣化をさらに抑制できる。
【0095】
ところで、図10に説明したように、ホストI/O制御部222は、ホスト装置400からの要求に応じてTPPブロックへのデータの書き込み処理と、書き込んだデータに基づくコードの算出処理とを、非同期に実行する。このため、例えば、業務ボリュームにおけるあるオフセットに格納されたデータに基づくコードの算出処理が完了していない状態で、同じオフセットに対して新たなデータの書き込みが要求されるケースがあり得る。例えば、業務ボリューム内の同じ領域に対してデータの書き込みが連続して要求された場合などに、上記のケースが発生し得る。このような場合に、コードの算出処理が完了するまで新たなデータの書き込みを待つように制御すると、書き込み処理に要する時間が長くなってしまう。そこで、次の図12に示すような処理を実行することで、書き込み処理時間が長くならないようにする。
【0096】
図12は、コード算出が未完了の状態で新たに書き込みが要求された場合の処理例を示す図である。
図12では、業務ボリュームV1内のオフセット#0001に格納されたデータに基づくコードの算出処理中に、ホスト装置400からオフセット#0001に対して新たなデータの書き込みが要求された場合を想定する(ステップS31)。ホストI/O制御部222は、業務ボリューム管理テーブル232におけるオフセット#0001のエントリにおいて、ステータスが「算出中」であることから、オフセット#0001についてコードの算出処理が完了していないことを認識する。
【0097】
この場合、ホストI/O制御部222は、業務ボリュームV1のオフセット#0001に割り当てられていたTPPブロックB1を切り離し(ステップS32)、フリー領域から新たなTPPブロックB2を獲得して、オフセット#0001に割り当てる(ステップS33)。具体的には、ホストI/O制御部222は、新たなTPPブロックB1の位置情報を、業務ボリューム管理テーブル232におけるオフセット#0001のエントリに上書き登録する。このとき、ホストI/O制御部222は、複製ボリューム管理テーブル233におけるオフセット#0001のエントリにおいて、フリーフラグを「1」に更新することで、TPPブロックB1が退避中であることを記録する。ホストI/O制御部222は、新たに割り当てたTPPブロックB2に対して、ホスト装置400から受信したデータを書き込む。これにより、コード算出処理が完了するのを待つことなく、書き込み処理を高速に実行できる。
【0098】
一方、複製制御部223は、複製ボリュームV2のオフセット#0001に関して、コードの算出が完了した後、算出されたコードに基づく重複排除を行って、SDPブロックの割り当てを行う。上記のステップS32の時点で、TPPブロックB1は業務ボリュームV1からは切り離されるものの、複製ボリューム管理テーブル233には、オフセット#0001のエントリにTPPブロックB1の位置情報が登録されている。このため、複製制御部223は、図11のステップS22〜S25に示した手順により、複製ボリュームV2のオフセット#0001にSDPブロックを割り当て、TPPブロックB1に格納されたデータを圧縮して、圧縮後のデータをSDPブロックに格納することができる(ステップS34)。
【0099】
また、複製制御部223は、複製ボリューム管理テーブル233におけるオフセット#0001に対応するフリーフラグが「1」であることから、TPPブロックB1が退避中であることを認識する。この場合、業務ボリュームV1のオフセット#0001には新たなTPPブロックB2が割り当てられており、TPPブロックB1のデータは不要になる。このため、複製制御部223は、プール領域管理テーブル231を更新することで、TPPブロックB1をTPP領域A2から解放してフリー領域に戻す(ステップS35)。
【0100】
以上の処理により、業務ボリュームV1のオフセット#0001については、旧データと新規データの両方が一時的にTPP領域A2に保持されるが、複製制御部223によるTPP領域A2からのデータ読み出しが終了すると、TPP領域A2はフリー領域A1に戻され、再利用可能な状態とされる。従って、ホスト装置400からの要求に応じた書き込み処理速度の低下を抑制しつつ、必要とされる物理記憶領域の容量も削減することができる。
【0101】
次に、図10〜図12に示した処理を、フローチャートを用いて説明する。まず、図13,図14は、ホスト装置からの要求に応じた業務ボリュームに対するデータ書き込み処理手順の例を示すフローチャートである。
【0102】
[ステップS101]ホストI/O制御部222は、ホスト装置400から、業務ボリュームへの書き込み要求を受け付ける。
[ステップS102]ホストI/O制御部222は、業務ボリューム管理テーブル232のエントリのうち、書き込みを要求された業務ボリュームの領域に含まれるエントリを1つ選択する。
【0103】
[ステップS103]ホストI/O制御部222は、選択したエントリが複製対象領域として指定されているかを判定する。ホストI/O制御部222は、選択したエントリに登録されたTPPブロックの位置情報(ボリューム番号およびLBA)が、複製範囲設定テーブル234に登録されている場合に、複製対象領域として指定されていると判定する。
【0104】
なお、選択したエントリに登録されたTPPブロックの位置情報が複製範囲設定テーブル234に登録されている場合、そのエントリを含む領域についての複製ボリュームへの複製処理が実行中であり、なおかつ、そのエントリに対応するオフセットにはすでにデータが格納されていることになる。
【0105】
ホストI/O制御部222は、複製対象領域として指定されていると判定した場合(S103:Yes)、図14のステップS107の処理を実行する。一方、ホストI/O制御部222は、複製対象領域として指定されていないと判定した場合(S103:No)、ステップS104の処理を実行する。
【0106】
[ステップS104]ホストI/O制御部222は、選択したエントリにすでにデータが格納されているか(すなわち、業務ボリューム内の未使用領域に対する新規の書き込みであるか)を判定する。ホストI/O制御部222は、すでにデータが格納されている場合(S104:Yes)、ステップS112の処理を実行する。一方、ホストI/O制御部222は、データが格納されていない場合(S104:No)、ステップS105の処理を実行する。
【0107】
[ステップS105]ホストI/O制御部222は、フリー領域から一定容量の物理記憶領域をTPPブロックとして獲得する。このとき、ホストI/O制御部222は、獲得した物理記憶領域をフリー領域から除外してTPP領域に追加するように、プール領域管理テーブル231を更新する。
【0108】
[ステップS106]ホストI/O制御部222は、獲得したTPP領域の位置情報(ボリューム番号、LBAおよびブロック数)を、業務ボリューム管理テーブル232における選択したエントリに登録する。これにより、選択したエントリに対応するオフセットに対して、獲得したTPPブロックが割り当てられる。
【0109】
[ステップS107]選択したエントリが複製対象領域として指定されている場合(S103:Yes)、ホストI/O制御部222は、業務ボリューム管理テーブル232における選択したエントリのステータスを確認する。
【0110】
[ステップS108]ホストI/O制御部222は、ステータスが「算出中」であった場合(S108:Yes)、ステップS111の処理を実行する一方、ステータスが「TPP」であった場合(S108:No)、ステップS109の処理を実行する。
【0111】
[ステップS109]ホストI/O制御部222は、複製ボリューム管理テーブル233のエントリのうち、ステップS102で選択したエントリと同じオフセット番号が登録されたエントリを参照し、参照先のエントリのステータスを確認する。
【0112】
[ステップS110]ホストI/O制御部222は、ステータスが「TPP」である場合(S110:Yes)、ステップS111の処理を実行する。一方、ホストI/O制御部222は、ステータスが「TPP」でない場合(S110:No。具体的には、ステータスが「SDP」である場合。)、図13のステップS112の処理を実行する。
【0113】
[ステップS111]ホストI/O制御部222は、複製ボリューム管理テーブル233のエントリのうち、ステップS102で選択したエントリと同じオフセット番号が登録されたエントリを参照し、参照先のエントリにおけるフリーフラグを「1」に更新する。この後、図13のステップS105の処理が実行される。
【0114】
[ステップS112]ホストI/O制御部222は、ステップS102で選択したエントリに登録されたTPPブロックの位置情報と、このTPPブロックに書き込むべきデータとをRAID制御部221に引き渡して、書き込みを依頼する。これにより、選択したエントリに割り当てられているTPPブロックに、書き込みを要求されたデータが格納される。
【0115】
例えば、ステップS104で「Yes」と判定された場合、またはステップS110で「No」と判定された場合、ステップS112では、TPPブロックにすでに格納されていたデータに対して、新たなデータが上書きされる。また、ステップS106の次にステップS112が実行された場合、ステップS112では、新たに割り当てられたTPPブロックに対してデータが格納される。
【0116】
また、ホストI/O制御部222は、選択したエントリにおけるステータスを「算出中」に更新する。
[ステップS113]ホストI/O制御部222は、書き込みを要求された全データの書き込み処理が完了したかを判定する。ホストI/O制御部222は、業務ボリューム管理テーブル232のエントリのうち、書き込みを要求された業務ボリュームの領域に含まれるすべてのエントリを選択済みである場合に、書き込み処理が完了したと判定する。
【0117】
ホストI/O制御部222は、書き込み処理が完了していない場合(S113:No)、ステップS102に戻り、業務ボリューム管理テーブル232から他のエントリを選択して処理を続行する。一方、ホストI/O制御部222は、書き込み処理が完了した場合(S113:Yes)、ステップS114の処理を実行する。
【0118】
[ステップS114]ホストI/O制御部222は、ホスト装置400に対して応答し、要求された書き込み処理が完了したことを通知する。
以上の図13,図14の処理において、ステップS108で「Yes」と判定される場合とは、ステップS102で選択したエントリに対応するTPPブロックに格納された旧データについて、コードの算出処理が完了していない場合である。この場合、選択したエントリに対して新たなTPPブロックが割り当てられる(ステップS105,S106)。その一方、複製ボリューム管理テーブル233における対応エントリのフリーフラグが「1」に更新されることで(ステップS111)、元のTPPブロックが退避中であることが記録される。
【0119】
また、ステップS110で「Yes」と判定される場合とは、ステップS102で選択したエントリに対応するTPPブロックに格納された旧データが、複製ボリュームに割り当てられるSDPブロックに格納されていない場合である。この場合も、上記と同様に、選択したエントリに対して新たなTPPブロックが割り当てられる(ステップS105,S106)。その一方、複製ボリューム管理テーブル233における対応エントリのフリーフラグが「1」に更新されることで(ステップS111)、元のTPPブロックが退避中であることが記録される。
【0120】
ここで、選択したエントリに対応するTPPブロックに格納された旧データに基づくコード算出処理が完了していない場合にも、複製ボリューム管理テーブル233における対応するエントリ内のステータスは「TPP」となっている。しかしながら、旧データに基づくコード算出処理が完了していない場合には、ステップS109で複製ボリューム管理テーブル233を参照する前に、ステップS107で業務ボリューム管理テーブル232の登録情報を読み出すだけで、ステップS111の処理が実行される。このため、複製ボリューム管理テーブル233の参照回数が減少し、処理負荷が軽減される。
【0121】
また、ステップS108またはステップS110で「Yes」と判定された場合には、元のTPPブロックが退避されるとともに、新たなTPPブロックが割り当てられる。ここで、図11のステップS21で説明したテーブルコピー処理により、TPPブロックを退避させようとする時点では、退避させるTPPブロックの位置情報が複製ボリューム管理テーブル233の対応エントリにすでに登録されている。このため、TPPブロックを退避させる処理としては、フリーフラグを「1」に更新して新たなTPPブロックを割り当てるだけで済み、退避させるTPPブロックの位置情報をいずれかのテーブルに記録しておくといった、位置情報の読み書き処理が必要にならない。従って、同じ位置に対してホスト装置400から連続して書き込みが要求されるような場合でも、単純な処理手順で、書き込み処理速度が低下しないようにすることができる。
【0122】
図15は、コード算出処理手順の例を示すフローチャートである。ホストI/O制御部222は、図13,図14に示した処理と、図15に示す処理とを、非同期に実行する。
[ステップS131]ホストI/O制御部222は、業務ボリューム管理テーブル232の各エントリを監視し、コードが算出されていないオフセットを検出した場合(S131:Yes)に、ステップS132の処理を実行する。
【0123】
[ステップS132]ホストI/O制御部222は、コードが算出されていないオフセットに対応付けられた位置情報を基に、その位置情報が示すTPPブロックからデータを読み出し、コードを算出する。ホストI/O制御部222は、算出したコードを、オフセットに対応するエントリに登録する。
【0124】
[ステップS133]ホストI/O制御部222は、コードを登録したエントリにおけるステータスを、「算出中」から「TPP」に変更する。この後、ステップS131の処理に戻る。
【0125】
図16,図17は、複製ボリュームの生成処理手順の例を示すフローチャートである。
[ステップS151]ホストI/O制御部222は、ホスト装置400から複製要求を受け付ける。このとき、ホストI/O制御部222は、ホスト装置400から、業務ボリュームにおける複製対象範囲の指定を受ける。ホストI/O制御部222は、複製制御部223に対して指定された複製対象範囲を通知して、複製ボリュームの生成処理を開始させる。
【0126】
[ステップS152]複製制御部223は、業務ボリューム管理テーブル232を参照し、指定された複製対象範囲に割り当てられた物理記憶領域を示す位置情報を、複製範囲設定テーブル234に登録する。
【0127】
[ステップS153]複製制御部223は、業務ボリューム管理テーブル232のエントリのうち、複製対象範囲に含まれるエントリの情報を、複製ボリューム管理テーブル233にコピーする。これにより、複製ボリュームのオフセットのうちデータが格納されたオフセットに対してTPPブロックが一時的に割り当てられ、複製ボリュームが論理的に生成される。
【0128】
なお、複製制御部223は、業務ボリューム管理テーブル232にコピーしたエントリ内のフリーフラグには「0」を設定する。
[ステップS154]複製制御部223は、変数Indexを初期値「0」に設定する。このIndexは、複製ボリューム管理テーブル233のエントリを、初期値「0」で先頭から順に付与した番号として指定するものである。
【0129】
[ステップS155]複製制御部223は、Indexが指示するエントリのステータスを参照する。複製制御部223は、ステータスが「算出中」の場合は、ステップS156の処理を実行する。また、複製制御部223は、ステータスが「TPP」の場合は、ステップS157の処理を実行する。また、複製制御部223は、ステータスに登録されていない場合(すなわち、該当オフセットにデータが登録されていない場合)は、図17のステップS168の処理を実行する。
【0130】
[ステップS156]ステータスが「算出中」である場合とは、業務ボリュームにおける対応するオフセットに格納されたデータに基づくコード算出処理が、完了していない場合である。この場合、複製制御部223は、コード算出処理が完了するのを待つ。複製制御部223は、Indexが指示するエントリのステータスが「算出中」から「TPP」に変化すると、ステップS157の処理を実行する。
【0131】
[ステップS157]複製制御部223は、Indexが指示するエントリに登録されたコードと、このエントリより先頭側の各エントリに登録されたコードとを比較する。
[ステップS158]複製制御部223は、データが重複している他のオフセットがあるかを判定する。複製制御部223は、ステップS157において、同一のコードが登録されたエントリを検出した場合に、データが重複する他のオフセットがあると判定する。複製制御部223は、データが重複する他のオフセットがない場合(S158:No)、ステップS159の処理を実行する一方、データが重複する他のオフセットがある場合(S158:Yes)、ステップS162の処理を実行する。
【0132】
[ステップS159]データが重複する他のオフセットがないと判定した場合(S158:No)、新たなSDPオフセットの獲得と、獲得したSDPオフセットへの書き込みとが必要になる。この場合、複製制御部223は、まず、Indexが指示するエントリに登録された位置情報をRAID制御部221に通知して、位置情報が示すTPPブロックからのデータの読み出しを依頼する。複製制御部223は、RAID制御部221によってTPPブロックから読み出されたデータを、可逆圧縮方式で圧縮する。
【0133】
なお、複製制御部223は、データ読み出し元のTPPブロックを示す位置情報を、RAM212に一時的に記録しておく。
[ステップS160]複製制御部223は、フリー領域から、圧縮後のデータの容量分の物理記憶領域をSDPブロックとして獲得する。このとき、複製制御部223は、獲得した物理記憶領域をフリー領域から除外してSDP領域に追加するように、プール領域管理テーブル231を更新する。
【0134】
[ステップS161]複製制御部223は、獲得したSDPブロックの位置情報(ボリューム番号、LBAおよびブロック数)と、圧縮後のデータとをRAID制御部221に引き渡して、書き込みを依頼する。これにより、獲得したSDPブロックに対して、圧縮後のデータが格納される。この後、図17のステップS163が実行される。
【0135】
[ステップS162]複製制御部223は、ステップS157でコードが一致した他のエントリに登録された位置情報(ボリューム番号、LBAおよびブロック数)を取得する。
【0136】
[ステップS163]複製制御部223は、ステップS160で獲得したSDPブロックの位置情報、または、ステップS162で取得した位置情報を、Indexが指示するエントリに登録する。
【0137】
[ステップS164]複製制御部223は、Indexが指示するエントリのフリーフラグを参照する。複製制御部223は、フリーフラグが「1」の場合(S164:Yes)、ステップS165の処理を実行する一方、フリーフラグが「0」の場合(S164:No)、ステップS167の処理を実行する。
【0138】
[ステップS165]複製制御部223は、ステップS159においてRAM212に一時記録しておいた位置情報が示すTPPブロックを解放する。複製制御部223は、TPPブロックをTPP領域から除外してフリー領域に追加するように、プール領域管理テーブル231を更新する。これにより、退避中のTPPブロックは、他のTPPブロックまたはSDPブロックとして再利用可能な状態になる。
【0139】
[ステップS166]複製制御部223は、Indexが指示するエントリのフリーフラグを、「1」から「0」に更新する。
[ステップS167]複製制御部223は、Indexが指示するエントリのステータスを、「TPP」から「SDP」に更新する。ステップS163,S167の処理により、エントリに対応するオフセットに対して割り当てられる物理記憶領域が、TPPブロックからSDPブロックに変更される。
【0140】
[ステップS168]複製制御部223は、Indexの値を「1」だけインクリメントする。
[ステップS169]複製制御部223は、複製ボリューム管理テーブル233に、インクリメントされたIndexによって指示されるエントリがあるかを判定する。複製制御部223は、エントリが存在する場合(S169:Yes)、ステップS155に戻って、次のエントリを処理対象として処理を続行する。一方、エントリが存在しない場合(S169:No)、複製ボリュームの生成処理が完了する。
【0141】
以上の処理により、複製ボリュームの物理記憶領域として、必要最小限の容量分のSDPブロックが割り当てられる。また、生成された複製ボリュームにおいては、複製元の業務ボリュームとは異なる物理記憶領域にデータが格納され、しかも、それらの物理記憶領域には、複製元の領域に格納された全データを完全に復元可能な状態で、データが格納される。このため、例えば、複製元の業務ボリュームに割り当てられた物理記憶領域の一部が破損するなどして、複製元のデータにアクセスできなくなった場合には、複製要求時点での複製元の業務ボリュームのデータを複製ボリュームから完全にリストアすることができる。
【0142】
ここで、図18は、複製ボリュームを用いたリストア処理の例を示す図である。
図18では、業務ボリュームV1に割り当てられたTPPブロックの一部にトラブルが発生して、業務ボリュームV1におけるオフセット#0000〜#0005の領域へのアクセスが不可能になった場合を想定する(ステップS41)。なお、上記の図16,図17の処理により、業務ボリュームV1のオフセット#0000〜#0005を複製対象範囲として、複製ボリュームが生成されているものとする。
【0143】
業務ボリュームV1におけるオフセット#0000〜#0005のリストア処理は、次のように行われる。複製制御部223は、複製ボリューム管理テーブル233のエントリを、業務ボリューム管理テーブル232における同一オフセットのエントリに対して、上書きコピーする(ステップS42)。
【0144】
これにより、業務ボリュームV1におけるデータが格納されていたオフセット(図18ではオフセット#0000〜#0002,#0004)に対して、SDPブロックが割り当てられ、業務ボリュームV1におけるオフセット#0000〜#0005が論理的にリストアされる。このとき、ホストI/O制御部222は、ホスト装置400から、業務ボリュームV1におけるオフセット#0000〜#0005からの読み出しが要求されると、これらのオフセット#0000〜#0005に割り当てられたSDPブロックからデータを読み出して伸張することで、ホスト装置400に対して応答することができる(ステップS43)。
【0145】
このように、テーブルに登録されたデータをコピーするだけで、業務ボリュームをごく短時間でリストアすることができ、ホスト装置400からの要求に応じたI/O処理を安定的に継続できるようになる。
【0146】
なお、当然ながら、アクセス不能になった業務ボリュームV1に対して新たにTPPブロックを割り当て、割り当てたTPPブロックに対して、複製ボリュームのSDPブロックから読み出して伸張したデータを格納することによって、実体的なデータ移動を伴うリストアをすることも可能である。
【0147】
〔第3の実施の形態〕
上記の第2の実施の形態では、複製ボリュームに割り当てる物理記憶領域の容量を、重複排除およびデータ圧縮によって削減した。しかしながら、複製元の業務ボリュームについても容量を削減することができれば、プール領域におけるフリー領域をより多く確保でき、ストレージシステム全体でのデータ記憶容量を増加させることができる。
【0148】
業務ボリュームに保存されたデータの中には、アクセス頻度が極端に低いデータも存在する。そこで、以下の第3の実施の形態では、業務ボリュームに保存されたデータのうち、一定期間以上アクセスされていないデータについては、複製ボリュームと同様に重複排除およびデータ圧縮を行う。これにより、ホスト装置400からの要求に応じたI/O処理速度にほとんど影響を与えることなく、重複排除およびデータ圧縮の各処理を行うことができ、その結果、業務ボリュームに割り当てる物理記憶領域の容量を削減できる。
【0149】
なお、第3の実施の形態に係るストレージシステムのハードウェア構成や、処理機能の構成については、第2の実施の形態と同様である。そこで、以下、第3の実施の形態におけるCMの処理を、図4の符号を用いて説明するとともに、主に、第2の実施の形態と異なる処理や構成要素についてのみ説明する。
【0150】
図19は、第3の実施の形態における業務ボリューム管理テーブルに登録される情報の例を示す図である。
業務ボリューム管理テーブル232には、業務ボリュームにおけるオフセットごとのエントリに対して、図7に示した項目に加えて、重複フラグおよびアクセス日時が登録される。重複フラグは、他のオフセットのデータと重複しているか否かを示すフラグである。業務ボリュームに対する重複排除処理が施されることで、他のオフセットのデータと重複していると判定された場合に、重複フラグは「1」とされ、その他の場合には重複フラグは「0」とされる。また、重複フラグの初期値も「0」である。アクセス日時は、該当オフセットに対してRAID制御部221が書き込みを行ったか、あるいは該当オフセットのデータの読み出しを行った、最終の日時を示す。
【0151】
RAID制御部221は、業務ボリュームに対するデータの書き込み、または業務ボリュームからのデータの読み出しを行うごとに、現在の日時をオフセットごとに業務ボリューム管理テーブル232の該当エントリに上書き登録する。また、RAID制御部221は、オフセットに対してデータを書き込んだとき、そのオフセットに対応付けられた重複フラグが「1」である場合には、その重複フラグを「0」に更新する。
【0152】
図19には、重複排除およびデータ圧縮による容量削減処理の実行前と実行後のそれぞれにおける業務ボリューム管理テーブル232の状態を示している。例えば、業務ボリュームのオフセット#0000〜#0003の状態が、図19の上段のようになったときに、オフセット#0001についての最終アクセス日時から所定期間が経過したものとする。ホストI/O制御部222は、オフセット#0001に対応付けられたコードと同一のコードに対応付けられたオフセットを検出する。図19の例では、同一のコードが対応付けられたオフセットとして、オフセット#0002が検出される。
【0153】
ホストI/O制御部222は、オフセット#0001に割り当てられたTPPブロックからデータを読み出して圧縮し、圧縮後のデータの容量分のTPPブロックをフリー領域から新たに獲得する。ホストI/O制御部222は、獲得したTPPブロックに圧縮後のデータを格納するとともに、そのTPPブロックの位置情報(ボリューム番号、LBAおよびブロック数)を、オフセット#0001,#0002に対応する各エントリに上書き登録する。さらに、ホストI/O制御部222は、オフセット#0001,#0002の各エントリにおける重複フラグを、「0」から「1」に更新する。図19の下段には、以上の更新処理が施された後の業務ボリューム管理テーブル232を示す。
【0154】
図20は、業務ボリュームの容量削減処理手順の例を示すフローチャートである。この図20の処理は、例えば、一定間隔で実行される。例えば、図20の処理は、ホスト装置400からのI/O要求の頻度が少ない期間に実行されることが望ましい。
【0155】
[ステップS181]ホストI/O制御部222は、業務ボリューム管理テーブル232の各エントリにおけるアクセス日時を参照し、登録されたアクセス日時から、あらかじめ設定された期間(例えば3年)だけ経過したオフセットを検出する。
【0156】
[ステップS182]ホストI/O制御部222は、ステップS181で上限に合致するオフセットを検出した場合(S181:Yes)、検出したすべてのオフセットの番号をRAM212に記録して、ステップS183の処理を実行する。一方、ホストI/O制御部222は、ステップS181で条件に合致するオフセットを検出できなかった場合には、容量削減処理を終了する。
【0157】
[ステップS183]ホストI/O制御部222は、ステップS182でRAM212に記録したオフセットに対応するエントリのうち、同じ値のコードが登録されたエントリをエントリ群として抽出する。なお、この処理では、互いに異なる値のコードが登録された複数のエントリ群が抽出される場合もある。ホストI/O制御部222は、複数のエントリ群が抽出された場合には、それらのうちの1つのエントリ群を選択して、以下の処理を実行する。
【0158】
[ステップS184]ホストI/O制御部222は、ステップS183でエントリ群が抽出された場合(S184:Yes)、ステップS185の処理を実行する。一方、ホストI/O制御部222は、ステップS183でエントリ群が抽出されなかった場合(S184:No)、容量削減処理を終了する。
【0159】
[ステップS185]ホストI/O制御部222は、ステップS183で選択したエントリ群に、重複フラグが「1」であるエントリがあるかを判定する。ホストI/O制御部222は、重複フラグが「1」であるエントリがある場合(S185:Yes)、ステップS190の処理を実行する一方、重複フラグが「1」であるエントリがない場合(S185:No)、ステップS186の処理を実行する。
【0160】
[ステップS186]ホストI/O制御部222は、ステップS183で選択したエントリ群からエントリ(例えば、オフセット番号が最も小さいエントリ)を1つ選択する。ホストI/O制御部222は、選択したエントリに登録された位置情報をRAID制御部221に通知して、位置情報が示すTPPブロックからのデータ読み出しを依頼する。ホストI/O制御部222は、RAID制御部221によってTPPブロックから読み出されたデータを、可逆圧縮方式で圧縮する。
【0161】
[ステップS187]ホストI/O制御部222は、フリー領域から、圧縮後のデータの容量分の物理記憶領域をTPPブロックとして獲得する。このとき、ホストI/O制御部222は、獲得した物理記憶領域をフリー領域から除外してTPP領域に追加するように、プール領域管理テーブル231を更新する。
【0162】
[ステップS188]ホストI/O制御部222は、獲得したTPPブロックの位置情報(ボリューム番号、LBAおよびブロック数)と、圧縮後のデータとをRAID制御部221に引き渡して、書き込みを依頼する。これにより、新たに獲得したTPPブロックに対して、圧縮後のデータが格納される。
【0163】
[ステップS189]ホストI/O制御部222は、ステップS183で選択したエントリ群内の全エントリに登録された、TPPブロックの位置情報を、RAM212に一時的に記録する。そして、ホストI/O制御部222は、ステップS187で獲得したTPPブロックの位置情報を、ステップS183で選択したエントリ群に含まれる全エントリに対して上書き登録する。さらに、ホストI/O制御部222は、これらのエントリの重複フラグを「0」から「1」に更新する。
【0164】
[ステップS190]重複フラグが「1」とされたエントリには、他のエントリと共通のTPPブロックがすでに割り当てられおり、そのTPPブロックには圧縮データが格納されている。このため、エントリ群の中に重複フラグが「1」のエントリが存在する場合(S185:Yes)には、新たにTPPブロックを獲得する必要はなく、重複フラグが「1」のエントリに登録されたTPPブロックを利用することができる。
【0165】
ホストI/O制御部222は、ステップS183で選択したエントリ群内のエントリのうち、重複フラグが「0」である全エントリに登録された、TPPブロックの位置情報を、RAM212に一時的に記録する。ホストI/O制御部222は、エントリ群内の重複フラグが「1」であるエントリに登録された、TPPブロックの位置情報を、エントリ群内の重複フラグが「0」であるエントリに対して上書きコピーする。また、ホストI/O制御部222は、位置情報をコピーしたエントリの重複フラグを、「0」から「1」に更新する。
【0166】
[ステップS191]ホストI/O制御部222は、ステップS189またはステップS190でRAM212に一時記録しておいた位置情報が示すTPPブロックを解放する。ホストI/O制御部222は、これらのTPPブロックをTPP領域から除外してフリー領域に追加するように、プール領域管理テーブル231を更新する。これにより、同一のデータが非圧縮で格納されていたTPPブロックは、他のTPPブロックまたはSDPブロックとして再利用可能な状態になる。
【0167】
この後、ステップS183に戻り、他のエントリ群が抽出され、エントリ群が抽出された場合には(S184:Yes)、抽出されたエントリ群に対してステップS185以降の処理が実行される。
【0168】
以上の図20の処理により、業務ボリュームのオフセットのうち、一定期間以上アクセスされていないオフセットに対して、圧縮後のデータの容量分の共通のTPPブロックが割り当てられる。これにより、業務ボリュームに割り当てられる物理記憶領域の容量が小さくなる。
【0169】
ここで、共通のTPPブロックが割り当てられたオフセットからのデータ読み出しが要求された場合には、TPPブロックから読み出したデータを伸張する分だけ、読み出し要求に対する応答時間が長くなってしまう。しかしながら、共通のTPPブロックが割り当てられたオフセットは、長期間アクセスされておらず、今後アクセスされる可能性が低い。従って、図20の処理を実行した場合でも、ホスト装置400からの要求に応じたI/O処理速度が低下する可能性は低い。すなわち、I/O処理速度をできるだけ低下させないようにしつつ、ストレージシステムにおける物理記憶領域の使用量を削減することができる。
【0170】
なお、業務ボリューム管理テーブル232に登録した重複フラグは、次の図21に示すように、複製ボリュームの生成の際に利用することもできる。
図21は、第3の実施の形態における、複製ボリュームの生成処理手順の例を示すフローチャートである。なお、この図21では、図16と同じ処理が実行される処理ステップには、同じステップ番号を付して示し、その処理内容の説明を省略する。
【0171】
図21の処理では、図16のステップS158において「No」と判定された場合、ステップS201の処理が実行される。
[ステップS201]複製制御部223は、Indexが指示するエントリの重複フラグが「1」である場合(S201:Yes)、ステップS202の処理を実行する一方、重複フラグが「0」である場合(S201:No)、ステップS159の処理を実行する。
【0172】
[ステップS202]重複フラグが「1」である場合(S201:Yes)、そのエントリに割り当てられているTPPブロックには、データがすでに圧縮された状態で格納されている。この場合、複製制御部223は、Indexが指示するエントリに割り当てられたTPPブロックと同じ容量分の物理記憶領域(すなわち、このエントリに登録されたブロック数分の物理記憶領域)を、フリー領域からSDPブロックとして獲得する。このとき、複製制御部223は、獲得した物理記憶領域をフリー領域から除外してSDP領域に追加するように、プール領域管理テーブル231を更新する。
【0173】
[ステップS203]複製制御部223は、Indexが指示するエントリに割り当てられたTPPブロックに格納されたデータを、ステップS202で獲得したSDPブロックにコピーするように、RAID制御部221に要求する。これにより、TPPブロックからSDPブロックに対して、圧縮されたデータが転送される。
【0174】
この後、図17のステップS163が実行される。ただし、ステップS163では、複製制御部223は、ステップS160で獲得したSDPブロックの位置情報、または、ステップS162で取得した位置情報、または、ステップS202で獲得したSDPブロックの位置情報のいずれかを、Indexが指示するエントリに登録する。
【0175】
以上の図21の処理によれば、処理対象のエントリに登録された重複フラグが「1」である場合には、データの圧縮処理がスキップされるので、複製ボリュームの生成処理に要する時間を短縮することができる。
【0176】
以上の各実施の形態に関し、さらに以下の付記を開示する。
(付記1) 複数の記憶装置と、前記複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置とを備えたストレージシステムにおいて、
前記ストレージ制御装置は、
ホスト装置からの要求に応じて第1のボリュームにデータを書き込むとともに、前記第1のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録する書き込み制御部と、
前記第1のボリュームのうち複製対象領域についての複製要求を受けると、前記複製対象領域のデータを、前記第1のボリュームとは異なる物理記憶領域によって構成される第2のボリュームに複製するとともに、前記コード記憶部に登録されたコードに基づいて前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する前記第2のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる複製制御部と、
を有することを特徴とするストレージシステム。
【0177】
(付記2) 前記書き込み制御部は、前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む処理と、書き込んだデータに応じたコードを部分領域ごとに生成し、生成したコードを部分領域に対応付けて前記コード記憶部に登録する処理とを、非同期に実行することを特徴とする付記1記載のストレージシステム。
【0178】
(付記3) 前記複製制御部は、前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第2のボリュームを仮想ボリュームとして生成することを特徴とする付記1または2記載のストレージシステム。
【0179】
(付記4) 前記複製制御部は、前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第2のボリューム内の対応する部分領域に割り当てた後、前記第2のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーすることを特徴とする付記3記載のストレージシステム。
【0180】
(付記5) 前記書き込み制御部は、
前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第1のボリュームを仮想ボリュームとして生成するとともに、
前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第2のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データの前記第2のボリュームへのコピーが完了していない場合に、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込む、
ことを特徴とする付記4記載のストレージシステム。
【0181】
(付記6) 前記複製制御部は、前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第2のボリュームを仮想ボリュームとして生成するとともに、
前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第2のボリューム内の対応する部分領域に割り当てた後、前記第2のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーし、
前記書き込み制御部は、
前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第1のボリュームを仮想ボリュームとして生成するとともに、
前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第2のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データに基づくコードを前記コード記憶部に登録済みでない場合には、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込む、
ことを特徴とする付記2記載のストレージシステム。
【0182】
(付記7) 前記複製制御部は、前記第2のボリューム内の部分領域に割り当てた物理記憶領域を、前記未使用領域から割り当てた物理記憶領域に変更したとき、当該部分領域に対応する前記複製対象領域の部分領域に対して前記新たな物理記憶領域が割り当てられていた場合には、物理記憶領域を変更した前記第2のボリューム内の部分領域に対して変更前に割り当てられていた物理記憶領域を、前記未使用領域の一部として設定することを特徴とする付記6記載のストレージシステム。
【0183】
(付記8) 前記複製制御部は、前記複製対象領域内の部分領域に格納されたデータを圧縮し、データを圧縮した部分領域に対応する前記第2のボリュームの部分領域に対して、前記未使用領域から圧縮後のデータ容量分の物理記憶領域を割り当て、割り当てた物理記憶領域に前記圧縮後のデータを格納することを特徴とする付記3〜7のいずれか1つに記載のストレージシステム。
【0184】
(付記9) 前記書き込み制御部は、前記第1のボリューム内のデータが格納された部分領域のうち、一定期間以上アクセスされていない部分領域を抽出し、抽出した部分領域のうち同一のデータが格納されている部分領域に対して、同一の物理記憶領域を割り当てることを特徴とする付記1〜8のいずれか1つに記載のストレージシステム。
【0185】
(付記10) 複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置において、
ホスト装置からの要求に応じて第1のボリュームにデータを書き込むとともに、前記第1のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録する書き込み制御部と、
前記第1のボリュームのうち複製対象領域についての複製要求を受けると、前記複製対象領域のデータを、前記第1のボリュームとは異なる物理記憶領域によって構成される第2のボリュームに複製するとともに、前記コード記憶部に登録されたコードに基づいて前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する前記第2のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる複製制御部と、
を有することを特徴とするストレージ制御装置。
【0186】
(付記11) 前記書き込み制御部は、前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む処理と、書き込んだデータに応じたコードを部分領域ごとに生成し、生成したコードを部分領域に対応付けて前記コード記憶部に登録する処理とを、非同期に実行することを特徴とする付記10記載のストレージ制御装置。
【0187】
(付記12) 複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置によるストレージ制御方法であって、
ホスト装置からの要求に応じて第1のボリュームにデータを書き込むとともに、前記第1のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録し、
前記第1のボリュームのうち複製対象領域についての複製要求を受けると、前記複製対象領域のデータを、前記第1のボリュームとは異なる物理記憶領域によって構成される第2のボリュームに複製するとともに、前記コード記憶部に登録されたコードに基づいて前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する前記第2のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる、
ことを特徴とするストレージ制御方法。
【0188】
(付記13) 前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む処理と、書き込んだデータに応じたコードを部分領域ごとに生成し、生成したコードを部分領域に対応付けて前記コード記憶部に登録する処理とを、非同期に実行することを特徴とする付記12記載のストレージ制御方法。
【0189】
(付記14) 前記複製対象領域を前記第2のボリュームに複製する処理では、前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第2のボリュームを仮想ボリュームとして生成することを特徴とする付記12または13記載のストレージ制御方法。
【0190】
(付記15) 前記複製対象領域を前記第2のボリュームに複製する処理では、前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第2のボリューム内の対応する部分領域に割り当てた後、前記第2のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーすることを特徴とする付記14記載のストレージ制御方法。
【0191】
(付記16) 前記第1のボリュームにデータを書き込む処理では、前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第1のボリュームを仮想ボリュームとして生成するとともに、前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第2のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データの前記第2のボリュームへのコピーが完了していない場合に、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込むことを特徴とする付記15記載のストレージ制御方法。
【0192】
(付記17) 前記複製対象領域を前記第2のボリュームに複製する処理では、
前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第2のボリュームを仮想ボリュームとして生成するとともに、前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第2のボリューム内の対応する部分領域に割り当てた後、前記第2のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーし、
前記第1のボリュームにデータを書き込む処理では、
前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第1のボリュームを仮想ボリュームとして生成するとともに、前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第2のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データに基づくコードを前記コード記憶部に登録済みでない場合には、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込むことを特徴とする付記13記載のストレージ制御方法。
【0193】
(付記18) 前記複製対象領域を前記第2のボリュームに複製する処理では、前記第2のボリューム内の部分領域に割り当てた物理記憶領域を、前記未使用領域から割り当てた物理記憶領域に変更したとき、当該部分領域に対応する前記複製対象領域の部分領域に対して前記新たな物理記憶領域が割り当てられていた場合には、物理記憶領域を変更した前記第2のボリューム内の部分領域に対して変更前に割り当てられていた物理記憶領域を、前記未使用領域の一部として設定することを特徴とする付記17記載のストレージ制御方法。
【0194】
(付記19) 前記複製対象領域を前記第2のボリュームに複製する処理では、前記複製対象領域内の部分領域に格納されたデータを圧縮し、データを圧縮した部分領域に対応する前記第2のボリュームの部分領域に対して、前記未使用領域から圧縮後のデータ容量分の物理記憶領域を割り当て、割り当てた物理記憶領域に前記圧縮後のデータを格納することを特徴とする付記14〜18のいずれか1つに記載のストレージ制御方法。
【0195】
(付記20) 前記第1のボリューム内のデータが格納された部分領域のうち、一定期間以上アクセスされていない部分領域を抽出し、抽出した部分領域のうち同一のデータが格納されている部分領域に対して、同一の物理記憶領域を割り当てることを特徴とする付記12〜19のいずれか1つに記載のストレージ制御方法。
【符号の説明】
【0196】
1 ストレージシステム
10 ストレージ制御装置
11 書き込み制御部
12 複製制御部
13 コード記憶部
21〜24 記憶装置
21a,24a,24b 物理記憶領域
30 ホスト装置
41,42 ボリューム
41a〜41d,42a〜42d 部分領域
【技術分野】
【0001】
本発明は、ストレージシステム、ストレージ制御装置およびストレージ制御方法に関する。
【背景技術】
【0002】
近年、HDD(Hard Disk Drive)などの記憶装置を複数用いたストレージシステムが広く使用されている。ストレージシステムに対して格納されるデータ量は年々増加していることから、ストレージシステム内の記憶領域を効率よく使用し、実際に使用する物理記憶領域の容量を削減するための技術が注目されている。
【0003】
物理記憶領域の容量を削減する技術として、シン・プロビジョニング(Thin Provisioning)がある。シン・プロビジョニングは、要求された記憶容量のすべてに相当する物理記憶領域を当初は用意せず、実際の記憶データ容量に相当する物理記憶領域のみを用意して、要求された記憶容量を仮想ボリュームとして提供するものである。
【0004】
また、物理記憶領域の容量を削減する他の技術として、デデュプリケーション(De-duplication)もある。デデュプリケーションは、記憶するデータの中で重複するデータについては、その中の1つのみを物理記憶領域に記憶し、他のデータについては記憶しないようにするものである。例えば、バックアップシステムにおいて、バックアップ元のボリュームにおいて重複したデータを排除しておき、重複データが排除されたボリュームにおいて物理記憶領域に格納されたデータのみ、バックアップボリュームにコピーするものがある。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2010−271808号公報
【特許文献2】特開2009−48497号公報
【特許文献3】特開2008−282382号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
ストレージシステムに記憶されたデータをバックアップする需要が高まるのに連れて、バックアップ先として必要とされる記憶容量が増大していることから、バックアップ先の記憶容量を削減することが課題となっている。
【0007】
1つの側面では、本発明は、ボリュームの複製先として必要な物理記憶容量を削減することが可能なストレージシステム、ストレージ制御装置およびストレージ制御方法を提供することを目的とする。
【課題を解決するための手段】
【0008】
上記目的を達成するために、複数の記憶装置と、複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置とを備えたストレージシステムが提供される。このストレージシステムにおいて、ストレージ制御装置は、書き込み制御部と、複製制御部とを備える。書き込み制御部は、ホスト装置からの要求に応じて第1のボリュームにデータを書き込むとともに、第1のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録する。複製制御部は、第1のボリュームのうち複製対象領域についての複製要求を受けると、複製対象領域のデータを、第1のボリュームとは異なる物理記憶領域によって構成される第2のボリュームに複製するとともに、コード記憶部に登録されたコードに基づいて複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する第2のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる。
【0009】
また、上記目的を達成するために、上記のストレージ制御装置と同様の処理を実行するストレージ制御装置およびストレージ制御方法が提供される。
【発明の効果】
【0010】
1態様によれば、ボリュームの複製先として必要な物理記憶容量を削減することができる。
【図面の簡単な説明】
【0011】
【図1】第1の実施の形態に係るストレージシステムの構成例を示す図である。
【図2】第2の実施の形態に係るストレージシステムの全体構成例を示す図である。
【図3】CMのハードウェア構成例を示す図である。
【図4】CMの処理機能の構成例を示すブロック図である。
【図5】業務ボリュームおよび複製ボリュームに対する物理記憶領域の割り当てについて示す図である。
【図6】プール領域管理テーブルに登録される情報の例を示す図である。
【図7】業務ボリューム管理テーブルに登録される情報の例を示す図である。
【図8】複製ボリューム管理テーブルに登録される情報の例を示す図である。
【図9】複製範囲設定テーブルに登録される情報の例である。
【図10】業務ボリュームへのデータ書き込み時の処理例を示す図である。
【図11】複製ボリュームの生成処理の例を示す図である。
【図12】コード算出が未完了の状態で新たに書き込みが要求された場合の処理例を示す図である。
【図13】ホスト装置からの要求に応じた業務ボリュームに対するデータ書き込み処理手順の例を示すフローチャート(その1)である。
【図14】ホスト装置からの要求に応じた業務ボリュームに対するデータ書き込み処理手順の例を示すフローチャート(その2)である。
【図15】コード算出処理手順の例を示すフローチャートである。
【図16】複製ボリュームの生成処理手順の例を示すフローチャート(その1)である。
【図17】複製ボリュームの生成処理手順の例を示すフローチャート(その2)である。
【図18】複製ボリュームを用いたリストア処理の例を示す図である。
【図19】第3の実施の形態における業務ボリューム管理テーブルに登録される情報の例を示す図である。
【図20】業務ボリュームの容量削減処理手順の例を示すフローチャートである。
【図21】第3の実施の形態における、複製ボリュームの生成処理手順の例を示すフローチャートである。
【発明を実施するための形態】
【0012】
以下、実施の形態について図面を参照して詳細に説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るストレージシステムの構成例を示す図である。
【0013】
ストレージシステム1は、ストレージ制御装置10と、複数の記憶装置とを備える。ストレージシステム1が備える記憶装置は、HDD、SSD(Solid State Drive)などの不揮発性記憶装置である。図1では、ストレージシステム1が備える記憶装置として、記憶装置21〜24を例示している。また、ストレージ制御装置10には、ホスト装置30が接続されている。
【0014】
ストレージ制御装置10は、記憶装置21〜24に対するデータアクセス処理を制御する装置である。ストレージ制御装置10は、記憶装置21〜24の物理記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御する。図1中に示すボリューム41,42は、このようなボリュームである。
【0015】
ストレージ制御装置10は、書き込み制御部11、複製制御部12およびコード記憶部13を備える。書き込み制御部11および複製制御部12の処理は、例えば、ストレージ制御装置10が備えるCPU(Central Processing Unit)が所定のプログラムを実行することで実現される。また、コード記憶部13は、例えば、ストレージ制御装置10の内部に設けられた不揮発性記憶装置の記憶領域として実現される。
【0016】
書き込み制御部11は、ホスト装置30からの要求に応じて、ボリューム41(第1のボリューム)に対してデータを書き込む。また、書き込み制御部11は、ボリューム41が分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部13に登録する。コード記憶部13に登録されるコードは、元のデータごとにユニークな値をとるものであり、例えば、元のデータに基づいて計算されたハッシュ値である。
【0017】
書き込み制御部11は、ホスト装置30からの要求に応じた、ボリューム41に対するデータ書き込み処理と、書き込んだデータに基づくコードの生成処理とを、例えば、非同期に実行する。この場合、書き込み制御部11は、ボリューム41内の所定の部分領域にデータを書き込んだ後、その後の任意のタイミングで、部分領域に書き込んだデータに基づいてコードを生成し、生成したコードをコード記憶部13に登録する。
【0018】
複製制御部12は、ボリューム41のうち複製対象領域についての複製要求を、例えばホスト装置30から受けると、複製対象領域のデータを別のボリューム42(第2のボリューム)に複製して、複製ボリュームを生成する。このボリューム42は、記憶装置21〜24によって実現される物理記憶領域のうち、ボリューム41とは異なる物理記憶領域によって構成される。
【0019】
また、複製制御部12は、上記のように複製ボリュームを生成するとともに、コード記憶部13に登録されたコードに基づいて、複製対象領域内の部分領域のうち同一のデータが格納されている部分領域を判定する。そして、複製制御部12は、同一のデータが格納されている部分領域に対応する、ボリューム42の部分領域に対しては、同一の物理記憶領域を割り当てる。すなわち、複製制御部12は、ボリューム42内の部分領域のうち、同一のデータを保持する部分領域群においては、それらのうち1つの部分領域にのみ実データを格納し、それ以外の部分領域には実データを格納しないようにする。このような処理により、ボリューム42に割り当てる物理記憶領域の容量を削減する。
【0020】
例えば、ボリューム41内の部分領域41a〜41dが、記憶装置21内の物理記憶領域21aによって実現されるものとする。そして、ボリューム41内の部分領域41a〜41dを複製対象領域として指定した複製処理が要求されたものとする。
【0021】
複製制御部12は、例えば、記憶装置24内の物理記憶領域24a内に、部分領域41a〜41dのデータを格納することで、部分領域41a〜41dを複製したボリューム42を生成する。すなわち、生成されたボリューム42内の部分領域42a〜42dは、複製元のボリューム41の部分領域41a〜41dにそれぞれ対応する。
【0022】
ここで、部分領域41bのデータと部分領域41cのデータとが、同一であるものとする。複製制御部12は、コード記憶部13において部分領域41b,41cにそれぞれ対応付けられているコードが一致することから、部分領域41b,41cの各データが同一であると判定する。複製制御部12は、部分領域41b,41cにそれぞれ対応する、ボリューム42内の部分領域42b,42cに対して、同一の物理記憶領域を割り当てる。
【0023】
例えば、複製制御部12は、記憶装置24の物理記憶領域24aのうち、物理記憶領域24bに対して、部分領域42bのデータとして、ボリューム41における部分領域41bのデータを格納する。さらに、複製制御部12は、部分領域42cの実データを物理記憶領域24bとは異なる物理記憶領域に格納せずに、部分領域42cに対して部分領域42bと共通の物理記憶領域24bを割り当てる。
【0024】
異なる部分領域に対して同一の物理記憶領域を割り当てる方法としては、例えば次のような方法がある。複製制御部12は、ボリューム42の部分領域ごとに、実データと、実データを格納した物理記憶領域の位置を示す位置情報とを記録する。この方法を用いた場合、複製制御部12は、部分領域42bについては実データと位置情報とを記録するが、部分領域42cについては実データを記録せずに位置情報のみを記録する。これにより、部分領域42b,42cに対して同一の物理記憶領域が割り当てられる。
【0025】
また、他の方法として、複製制御部12は、テーブル情報に対して、ボリューム42の部分領域ごとに、実データを格納した物理記憶領域の位置情報を対応付けて登録する。この方法を用いた場合、複製制御部12は、テーブル内の部分領域42b,42cの各エントリに対して同じ位置情報を登録することで、部分領域42b,42cに同一の物理記憶領域を割り当てる。
【0026】
以上のように、ボリューム42において、同一のデータが記録される部分領域に対して同一の物理記憶領域が割り当てられることで、ボリューム42に対して用意すべき物理記憶領域の容量が削減される。従って、ストレージシステム1が備える物理記憶領域の使用量が小さくなり、これらの物理記憶領域を効率的に利用できるようになる。
【0027】
また、複製制御部12は、あらかじめ生成されたコードが登録されたコード記憶部13を参照して、同一のデータが記録された部分領域の有無を判定するので、複製ボリュームの生成時にコードを算出する必要がない。このため、複製ボリュームの生成処理に要する時間を短縮できる。
【0028】
一方、書き込み制御部11は、ボリューム41に書き込んだデータに基づくコードの算出を行うものの、部分領域間のデータの同一性判定は行わない。しかも、書き込み制御部11は、ボリューム41へのデータの書き込みと、書き込んだデータに基づくコードの算出処理とを、非同期に実行することもできる。この場合、コード算出処理が、ホスト装置30からの要求に応じたボリューム41のアクセス処理に与える影響を小さくすることができる。従って、ホスト装置30からの要求に応じた記憶装置への書き込み処理速度をできるだけ低下させずに、ストレージシステム1で使用される物理記憶領域の容量を削減して、物理記憶領域を効率よく利用できるようになる。
【0029】
なお、複製制御部12は、さらに、ボリューム42を仮想ボリュームとして生成してもよい。この場合、ボリューム42の部分領域のうち実際にデータが記録されている部分領域にのみ物理記憶領域が割り当てられ、データが記録されていない部分領域には物理記憶領域が割り当てられない。これにより、ボリューム42に割り当てる物理記憶領域の容量をさらに削減することができる。
【0030】
〔第2の実施の形態〕
図2は、第2の実施の形態に係るストレージシステムの全体構成例を示す図である。図2に示すストレージシステム100は、CE(Controller Enclosure)200と、DE(Drive Enclosure)300とを含む。また、CE200には、ホスト装置400が接続されている。
【0031】
CE200は、CM(Controller Module)201,202を備える。CM201,202のそれぞれは、ホスト装置400からのI/O(In/Out)要求に応じて、DE300内の記憶装置に対するデータの読み書きを行う。CM201,202は、DE300内の記憶装置によって実現される物理記憶領域をRAID(Redundant Arrays of Inexpensive Disks)によって管理し、これらの物理記憶領域に対するアクセスを制御する。
【0032】
なお、CM201,202は、例えばルータなどを介して互いに接続されていてもよい。また、CMは、CE200内に1つのみ設けられてもよいし、3つ以上設けられてもよい。ただし、CMが複数設けられることで、DE300に対するアクセス制御系統が冗長化され、アクセス制御処理の信頼性が向上する。
【0033】
DE300は、CM201,202からのアクセス制御対象となる複数の記憶装置を備える。本実施の形態のDE300は、記憶装置としてHDDを備えるディスクアレイ装置である。なお、DE300が備える記憶装置としては、SSDなどの他の種類の不揮発性記憶装置を使用することもできる。また、CE200には、複数のDE300が接続されていてもよい。
【0034】
ホスト装置400は、ユーザの操作に応じて、CM201,202に対して、DE300内のHDDへのアクセスを要求する。ホスト装置400は、例えば、ユーザの操作に応じて、CM201,202のいずれかを通じて、DE300内のHDDからのデータの読み出しや、DE300内のHDDに対するデータの書き込みを行うことができる。
【0035】
なお、CE200内のCM201,202は、ともに同様の構成を有し、同様の処理を実行可能である。そこで、以下、CM201についてのみ説明し、CM202についての説明を省略する。
【0036】
図3は、CMのハードウェア構成例を示す図である。
CM201は、CPU211によって装置全体が制御されている。CPU211には、RAM(Random Access Memory)212および複数の周辺機器が、バス217を介して接続されている。RAM212は、CM201の主記憶装置として使用され、CPU211に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。
【0037】
CPU211には、周辺機器の例として、SSD213、入力I/F(インタフェース)214、CA(Channel Adapter)215およびDI(Drive Interface)216が接続されている。
【0038】
SSD213は、CM201の二次記憶装置として使用され、CPU211によって実行されるプログラムやその実行に必要な各種のデータなどを記憶する。なお、二次記憶装置としては、例えば、HDDなどの他の種類の不揮発性記憶装置が使用されてもよい。
【0039】
入力I/F214には、操作キーなどを備える入力装置214aが接続されている。入力I/F214は、入力装置214aに対する操作入力に応じた信号をCPU211に出力する。
【0040】
CA215は、ホスト装置400とCM201との間でデータを送受信するインタフェース処理を実行する。CA215とホスト装置400とは、例えば、FC(Fibre Channel)規格に従って通信する。
【0041】
DI216は、DE300とCM201との間でデータを送受信するインタフェース処理を実行する。DI216とDE300とは、例えば、SAS(Serial Attached SCSI,SCSI:Small Computer System Interface)規格に従って通信する。
【0042】
図4は、CMの処理機能の構成例を示すブロック図である。
CM201は、RAID制御部221、ホストI/O制御部222および複製制御部223を備える。RAID制御部221、ホストI/O制御部222および複製制御部223の処理は、例えば、CM201のCPU211が所定のプログラムを実行することで実現される。
【0043】
また、CM201の記憶装置には、プール領域管理テーブル231、業務ボリューム管理テーブル232、複製ボリューム管理テーブル233および複製範囲設定テーブル234が記憶される。これらの各テーブルは、例えばSSD213に記憶される。
【0044】
RAID制御部221は、ホストI/O制御部222または複製制御部223からの要求に応じて、DE300内のHDDにアクセスする。RAID制御部221は、DE300内のHDDにアクセスする際に、アクセス先の領域に対して設定されたRAIDに関する設定情報(RAIDレベル、RAIDを構成するディスク数など)に基づいてアクセス制御を行う。
【0045】
例えば、RAID制御部221は、ホストI/O制御部222からデータの書き込み要求を受けると、RAIDに関する設定情報に基づいて、データが冗長化されるように書き込み処理を行う。以下、例としてディスク数「6」のRAID−5で制御するものとすると、RAID制御部221は、ホストI/O制御部222から受信したデータを分割し、連続する5個の分割データとそれらに基づくパリティとを、6台のHDDにおける同一ストライプ番号の領域に分散させて記録する。
【0046】
ホストI/O制御部222は、ホスト装置400から、業務ボリュームに対するI/O要求を受け付ける。業務ボリュームとは、ユーザが使用可能な論理ボリュームであり、その物理記憶領域はDE300内のHDDによって提供される。ユーザは、ホスト装置400からCM201に対してI/O要求を送信することで、業務ボリュームに対するデータの読み書きを行うことができる。
【0047】
業務ボリュームは、プール領域から割り当てられた物理記憶領域によって構成される仮想ボリュームとして実現される。プール領域は、DE300内のHDD内の未使用の物理記憶領域のうち、業務ボリューム(および後述する複製ボリューム)に対して割り当て可能な領域である。プール領域の位置を示すアドレスは、プール領域管理テーブル231に登録されている。
【0048】
ホストI/O制御部222は、ホスト装置400から業務ボリュームに対する書き込み要求を受けると、データの書き込み先の物理記憶領域をプール領域管理テーブル231から獲得する。ホストI/O制御部222は、獲得した物理記憶領域を示すアドレス(LBA:Logical Block Address)と書き込み対象のデータとをRAID制御部221に通知し、データの書き込みを依頼する。これとともに、ホストI/O制御部222は、獲得した物理記憶領域を示すアドレスを、業務ボリューム内のデータの書き込み位置に対応付けて、業務ボリューム管理テーブル232に登録する。このような処理により、業務ボリュームの物理記憶領域は、データが実際に書き込まれた領域についてのみプール領域から動的に割り当てられる。
【0049】
また、ホストI/O制御部222は、ホスト装置400から、業務ボリュームからの読み出し要求を受けると、業務ボリューム管理テーブル232を参照して、読み出し領域を示すアドレスを判別する。ホストI/O制御部222は、読み出し領域を示すアドレスをRAID制御部221に通知して、データの読み出しを依頼する。依頼に応じてRAID制御部221がデータを読み出すと、ホストI/O制御部222は、読み出されたデータをホスト装置400に送信する。
【0050】
さらに、ホストI/O制御部222は、ホスト装置400から、業務ボリューム内の複製対象領域の指定を受けるとともに、指定された複製対象領域についての複製要求を受けると、複製対象領域を示す情報を複製制御部223に通知して、複製ボリュームの生成処理を依頼する。
【0051】
複製制御部223は、ホストI/O制御部222からの依頼に応じて、複製ボリュームの生成処理を行う。複製ボリュームは、例えば、対応する業務ボリュームのうち複製対象として指定された領域(以下、複製対象領域と呼ぶ)についてのバックアップとして利用されるものである。この複製ボリュームは、業務ボリュームと共用されるプール領域から割り当てられた物理記憶領域によって構成される仮想ボリュームとして実現される。複製制御部223は、複製ボリューム内の部分領域と、各部分領域に割り当てられた物理記憶領域を示すアドレスとを対応付けて、複製ボリューム管理テーブル233に登録する。
【0052】
複製制御部223は、複製対象領域に割り当てられた物理記憶領域のアドレスを業務ボリューム管理テーブル232から判別し、判別したアドレスをRAID制御部221に通知して、データの読み出しを依頼する。また、複製制御部223は、複製対象領域のうちデータが格納されている(すなわち、物理記憶領域が割り当てられている)領域に対応する物理記憶領域を、プール領域管理テーブル231から獲得する。複製制御部223は、RAID制御部221によって読み出されたデータを、獲得した物理記憶領域にコピーするように、RAID制御部221に依頼する。このような処理により、複製ボリュームの物理記憶領域は、データが実際に書き込まれている領域についてのみプール領域から動的に割り当てられる。
【0053】
また、後述するように、複製制御部223は、複製ボリュームを生成する際、複製ボリューム内のデータの重複排除(De-duplication)と、部分領域ごとのデータ圧縮とを行う。データの重複排除は、複製ボリューム内の部分領域のうち同一データが格納されている部分領域に対しては、同一の物理記憶領域を割り当てるものである。このようなデータの重複排除とデータ圧縮とによって、複製ボリュームに割り当てる物理記憶領域を削減する。
【0054】
なお、複製制御部223は、複製ボリュームを生成する際、業務ボリュームのうち複製対象領域に割り当てられた物理記憶領域を示すアドレスを、複製範囲設定テーブル234に登録する。この複製範囲設定テーブル234は、複製ボリュームの生成処理中に、ホスト装置400から業務ボリュームへの書き込みが要求された際に、ホストI/O制御部222によって参照される。
【0055】
図5は、業務ボリュームおよび複製ボリュームに対する物理記憶領域の割り当てについて示す図である。
図5では例として、業務ボリュームV1の少なくとも一部の領域を複製した複製ボリュームV2を生成する場合を示す。業務ボリュームV1に付与された「オフセット(Offset)」は、業務ボリュームV1を一定容量ごとに分割した部分領域の位置を示す。以下、部分領域自体を「オフセット」と呼び、番号Xのオフセットを「オフセット#X」と記載する。図5では例として、業務ボリュームV1におけるオフセット#0000〜#0005を、複製ボリュームV2に複製する場合を示す。
【0056】
前述のように、業務ボリュームV1および複製ボリュームV2は、ともに仮想ボリュームとして実現される。業務ボリュームV1については、データが格納されているオフセットに対してのみ、物理記憶領域が割り当てられる。業務ボリュームV1に割り当てられた物理記憶領域は、業務ボリューム管理テーブル232に登録される。図5の例では、業務ボリュームV1のオフセット#0000〜#0002,#0004にデータが格納されている。この場合、業務ボリューム管理テーブル232におけるオフセット#0000〜#0002,#0004に対応するエントリに、各オフセットに割り当てられた物理記憶領域を示す位置情報が登録される。
【0057】
複製ボリュームV2についても同様に、データが格納されているオフセットに対してのみ、物理記憶領域が割り当てられる。複製ボリュームV2に割り当てられた物理記憶領域は、複製ボリューム管理テーブル233に登録される。図5の例では、業務ボリュームV1のオフセット#0000〜#0002,#0004にデータが格納されていることから、複製ボリュームV2のオフセット#0000〜#0002,#0004にデータが格納されている。この場合、複製ボリューム管理テーブル233におけるオフセット#0000〜#0002,#0004に対応するエントリに、各オフセットに割り当てられた物理記憶領域を示す位置情報が登録される。
【0058】
一方、図5に示すプール領域A0は、DE300内のHDDによって実現される物理記憶領域である。プール領域A0は、未使用領域であるフリー領域A1と、それぞれ使用中の領域であるTPP(Thin Provisioning Pool)領域A2およびSDP(Snap Data Pool)領域A3とを含む。
【0059】
業務ボリュームV1および複製ボリュームV2の物理記憶領域は、フリー領域A1から割り当てられる。フリー領域A1には、例えば、業務ボリュームV1や複製ボリュームV2に対して割り当て可能な物理記憶領域が、複数のプールボリュームとして用意される。図5の例では、フリー領域A1には6つのプールボリュームPV#00〜#05が用意されている。業務ボリュームV1や複製ボリュームV2に割り当てられる物理記憶領域は、フリー領域A1に用意されたプールボリュームを識別するボリューム番号と、そのプールボリュームにおける先頭位置を示すLBA(Logical Block Address)と、先頭位置から終端位置までの長さ(容量)を示すブロック数(LBAの数)とによって指定される。
【0060】
各プールボリュームは、RAIDの構成設定に応じた1つ以上のHDDによって構成される。本実施の形態では前述した“ディスク数「6」のRAID−5”によって制御が行われるものとすると、1つのプールボリュームはDE300内の6台のHDDによって構成される。そして、あるボリューム番号のプールボリュームにおけるあるLBAは、ボリューム番号に対応するプールボリュームに属する6台のHDDにおける同一の位置を示す。従って、業務ボリュームV1や複製ボリュームV2に対して、ボリューム番号およびLBAによって示される物理記憶領域が割り当てられる際には、実際には6台分のHDDにおける同一LBAが示す物理記憶領域が割り当てられる。
【0061】
業務ボリュームV1内のあるオフセットに対してデータの書き込みが要求されると、フリー領域A1から物理記憶領域が抽出され、抽出された物理記憶領域がオフセットに割り当てられて、割り当てられた物理記憶領域にデータが格納される。TPP領域A2は、基本的に、業務ボリュームV1に割り当てられた物理記憶領域が属する論理領域である。以下、TPP領域A2に属する、オフセットごとの物理記憶領域を、「TPPブロック」と呼ぶ。図5の例では、業務ボリュームV1内のオフセットのうち、データが格納されたオフセット#0000〜#0002,#0004に対してのみ、それぞれTPPブロックが割り当てられている。なお、TPPブロックは、すべて同じ容量を備える。
【0062】
一方、複製ボリュームV2における、データを格納すべきオフセットに対しても、フリー領域A1から抽出された物理記憶領域が割り当てられる。SDP領域A3は、複製ボリュームV2に対して最終的に割り当てられた物理記憶領域が属する論理領域である。以下、SDP領域A3に属する、オフセットごとの物理記憶領域を、「SDPブロック」と呼ぶ。図5の例では、複製ボリュームV2内のオフセットのうち、データが格納されたオフセット#0000〜#0002,#0004に対してのみ、それぞれSDPブロックが割り当てられている。
【0063】
ところで、複製ボリュームV2におけるデータが格納されたオフセットには、対応する業務ボリュームV1内のオフセットに格納されたデータが、圧縮されて書き込まれる。このため、複製ボリュームV2のオフセットに割り当てられるSDPブロックの容量は、ほとんどの場合TPPブロックの容量より小さくなる。
【0064】
さらに、後述するように、複製ボリュームV2においては、同一のデータが格納されたオフセットに対して同一のSDPブロックを割り当てる「重複排除」が行われる。この重複排除により、業務ボリュームV1における複製対象領域に割り当てられるTPPブロックの数より、複製ボリュームV2に割り当てられるSDPブロックの数が少なくなることもある。これにより、複製ボリュームV2に割り当てられる物理記憶領域の容量をさらに削減することが可能になる。
【0065】
なお、図5においては、複製ボリュームV2と、これに対応する複製ボリューム管理テーブル233およびSDPブロックについて、複製ボリュームV2の生成処理が完了した状態を示した。しかしながら、後述するように、複製ボリュームV2の生成処理の過程では、複製ボリュームV2のオフセットに対して、一時的にTPPブロックが割り当てられ、その後、TPPブロックからSDPブロックに対して割り当てが変更される。
【0066】
図6は、プール領域管理テーブルに登録される情報の例を示す図である。
プール領域管理テーブル231には、プール領域のうち、業務ボリュームや複製ボリュームとして割り当て可能なフリー領域と、割り当て済みの領域(使用中領域)とを示す情報が登録される。使用中領域については、TPP領域とSDP領域とが個別に管理される。なお、図6は、プール領域に用意された1つのプールボリュームに対応するテーブルを示しているが、実際には、プール領域管理テーブル231には、図6のようなテーブルがプールボリュームごとに登録される。
【0067】
フリー領域は、「次ポインタ」と「前ポインタ」との組み合わせからなるエントリを用いた連結リスト231aによって管理される。1つのエントリは、プールボリュームにおける連続する記憶領域(連続するLBAによって表される領域)を示す。「次ポインタ」には、次のエントリが示す記憶領域の先頭LBAが登録され、「前ポインタ」には、前のエントリが示す記憶領域の末尾のLBAが登録される。連結リスト231aにおける先頭エントリの「前ポインタ」には、連結リスト231aにおける最後尾のエントリが示す記憶領域の末尾のLBAが登録される。一方、連結リスト231aにおける最後尾のエントリの「次ポインタ」には、連結リスト231aにおける先頭エントリが示す記憶領域の先頭LBAが登録される。
【0068】
TPP領域についても同様に、「次ポインタ」と「前ポインタ」との組み合わせからなるエントリを用いた連結リスト231bによって管理される。SDP領域についても同様に、「次ポインタ」と「前ポインタ」との組み合わせからなるエントリを用いた連結リスト231cによって管理される。
【0069】
フリー領域からTPPブロックが割り当てられる際には、TPPブロックに対応する記憶領域がフリー領域から除外されるように、連結リスト231aが書き換えられる。これとともに、TPPブロックがTPP領域に追加されるように、連結リスト231bが書き換えられる。一方、TPPブロックとして使用されていた記憶領域が解放されると、その記憶領域がTPP領域から除外されるように、連結リスト231bが書き換えられる。これとともに、TPP領域から除外された記憶領域がフリー領域に追加されるように、連結リスト231aが書き換えられる。
【0070】
同様に、フリー領域からSDPブロックが割り当てられる際には、SDPブロックに対応する記憶領域がフリー領域から除外されるように、連結リスト231aが書き換えられる。これとともに、SDPブロックがSDP領域に追加されるように、連結リスト231cが書き換えられる。一方、SDPブロックとして使用されていた記憶領域が解放されると、その記憶領域がSDP領域から除外されるように、連結リスト231cが書き換えられる。これとともに、SDP領域から除外された記憶領域がフリー領域に追加されるように、連結リスト231aが書き換えられる。
【0071】
図7は、業務ボリューム管理テーブルに登録される情報の例を示す図である。
業務ボリューム管理テーブル232には、業務ボリューム内のオフセットごとにエントリが設けられる。各エントリには、対応するオフセットに対して割り当てられた物理記憶領域の位置情報と、対応するオフセットに格納されたデータに基づくコードと、対応するオフセットのステータスとが登録される。
【0072】
割り当てられた物理記憶領域の位置情報としては、その物理記憶領域が属するプールボリュームを識別するボリューム番号と、物理記憶領域の先頭位置を示すLBAと、物理記憶領域の容量を示すブロック数とが登録される。なお、この「ブロック数」としてカウントされるブロックは、プールボリュームにおいて1つのLBAで識別される論理ブロックであって、TPPブロックやSDPブロックとは異なるものである。また、オフセットにTPPブロックが割り当てられている場合、ブロック数は一定値となる。
【0073】
コードは、オフセットに格納されたデータを基に算出され、算出元のデータごとにユニークな値をとる。このようなコードの例としては、ハッシュ値を用いることができる。
ステータスは、オフセットについての状態を示すものであり、「算出中」、「TPP」および「SDP」のいずれかが設定される。「算出中」は、オフセットに対してTPPブロックが割り当てられたものの、割り当てられたTPPブロックに格納するデータに基づくコードの算出が完了していないことを示す。「TPP」は、オフセットに対してTPPブロックが割り当てられ、かつ、コードの算出が完了していることを示す。例えば、エントリ内のコードの欄に値が登録されると、同じエントリ内のステータスが「算出中」から「TPP」に更新される。「SDP」は、オフセットに対してSDPブロックが割り当てられていることを示す。なお、業務ボリュームのオフセットに対してSDPブロックが割り当てられる場合とは、例えば、業務ボリューム内の一部のデータの破壊などが発生したときに、複製ボリュームの物理記憶領域(すなわちSDPブロック)を使用して業務ボリュームが論理的にリストアされる場合などである。
【0074】
なお、業務ボリュームは、複数設定されてもよい。この場合、業務ボリューム管理テーブル232は、業務ボリュームごとに個別に生成される。
図8は、複製ボリューム管理テーブルに登録される情報の例を示す図である。
【0075】
複製ボリューム管理テーブル233には、複製ボリューム内のオフセットごとにエントリが設けられる。複製ボリューム管理テーブル233内の各エントリには、業務ボリューム管理テーブル232と同様に、対応するオフセットに対して割り当てられた物理記憶領域の位置情報と、対応するオフセットに格納されたデータに基づくコードと、対応するオフセットのステータスとが登録される。
【0076】
さらに、複製ボリューム管理テーブル233内の各エントリには、フリーフラグが登録される。フリーフラグは、初期値が「0」とされ、ステータスが「TPP」のときに、業務ボリューム内の同じオフセットに対して別のTPPブロックが割り当てられている場合に「1」とされる。後述するように、フリーフラグが「1」となるケースとは、オフセットに格納されたデータに基づくコードの算出が完了していない状態で、そのオフセットに対してホスト装置400から新たなデータの書き込みが要求される場合である。
【0077】
なお、複製ボリュームは、1つの業務ボリュームを基に異なるタイミングで複数生成されてもよい。この場合、複製ボリューム管理テーブル233は、複製ボリュームの生成処理が開始されるごとに、複製ボリュームごとに個別に生成される。
【0078】
図9は、複製範囲設定テーブルに登録される情報の例である。
複製範囲設定テーブル234は、複製対象範囲が指定されて複製ボリュームの生成が要求されたときに、業務ボリュームにおける複製対象範囲に割り当てられた物理記憶領域の位置情報を保持するものである。複製範囲設定テーブル234には、同じプールボリュームに属する連続した物理記憶領域ごとにエントリが設けられる。各エントリには、識別番号が付与されるとともに、物理記憶領域を示す位置情報として、物理記憶領域が属するプールボリュームを識別するボリューム番号と、物理記憶領域の先頭位置を示すLBAと、物理記憶領域の長さ(容量)を示すブロック数とが登録される。
【0079】
この複製範囲設定テーブル234は、対応する複製ボリュームの生成処理が完了すると、消去される。なお、複製範囲設定テーブル234は、例えば、RAM212など、CM201内の揮発性記憶装置に記憶されてもよい。
【0080】
次に、複製ボリュームの生成処理について説明する。まず、図10は、業務ボリュームへのデータ書き込み時の処理例を示す図である。
ホストI/O制御部222は、ホスト装置400から、業務ボリューム内の未記憶領域に対するデータの書き込み要求を受けると、フリー領域からTPPブロックを獲得して、業務ボリュームにおけるデータの書き込み対象のオフセットに割り当てる。図10の例では、ホスト装置400が、業務ボリュームV1内のオフセット#0000〜#0002,#0004に対するデータの書き込みを要求したものとする(ステップS11)。
【0081】
書き込み要求を受けたホストI/O制御部222は、オフセット#0000〜#0002,#0004にそれぞれ対応する物理記憶領域(TPPブロック)をフリー領域から獲得し、獲得した物理記憶領域の位置情報を業務ボリューム管理テーブル232に登録する(ステップS12)。このとき、ホストI/O制御部222は、プール領域管理テーブル231を更新することで、獲得した物理記憶領域をフリー領域から除外するとともに、TPP領域A2に追加する。これにより、獲得された物理記憶領域は、TPPブロックとして取り扱われる。
【0082】
ホストI/O制御部222は、上記のような業務ボリューム管理テーブル232への登録処理を行うとともに、獲得したTPPブロックの位置情報と、各TPPブロックに書き込むべきデータとをRAID制御部221に引き渡して、書き込みを依頼する。これにより、オフセット#0000〜#0002,#0004にそれぞれ割り当てられたTPPブロックに対してデータが書き込まれる。
【0083】
さらに、ホストI/O制御部222は、オフセット#0000〜#0002,#0004にそれぞれ書き込まれたデータを基にコードを算出し、算出したコードを業務ボリューム管理テーブル232に登録する(ステップS13)。このように、業務ボリュームV1内の領域についての複製要求が発生する前に、複製処理の際に必要となるコードを算出して業務ボリューム管理テーブル232に記録しておくことで、複製処理の際に重複排除処理を効率よく実行できる。
【0084】
ただし、ホストI/O制御部222は、ホスト装置400からの要求に応じたTPPブロックへのデータの書き込み処理と、書き込んだデータに基づくコードの算出処理とを、非同期に実行する。すなわち、ホストI/O制御部222は、TPPブロックへのデータの書き込みが完了した後の任意のタイミングで、書き込んだデータに基づくコードの算出処理を実行する。これにより、ホスト装置400からの書き込み要求を受けてから、要求された書き込み処理を完了してホスト装置400に応答するまでに要する時間が短縮され、コードの算出処理がホストI/O処理に与える影響を低減することができる。
【0085】
図11は、複製ボリュームの生成処理の例を示す図である。図11では、業務ボリュームV1内のオフセット#0000〜#0002,#0004にデータが格納されている状態で、業務ボリュームV1内のオフセット#0000〜#0005についての複製処理が、ホスト装置400から要求されたものとする。
【0086】
複製要求を受けた複製制御部223は、まず、業務ボリューム管理テーブル232における複製対象領域(オフセット#0000〜#0005)に対応するエントリを、複製ボリューム管理テーブル233にコピーする(ステップS21)。これにより、複製ボリュームV2が論理的に生成される。すなわち、複製ボリュームV2におけるデータが格納されたオフセット#0000〜#0002,#0004に対して、複製元の業務ボリュームV1のオフセット#0000〜#0002,#0004に割り当てられているTPPブロックが、一時的に割り当てられる。この状態では、例えば、ホスト装置400からの要求に応じて、複製ボリュームV2からのデータ読み出しを実行できる。このように、業務ボリューム管理テーブル232における複製対象領域のエントリを、複製ボリューム管理テーブル233にコピーすることで、複製ボリュームV2を即座に利用可能な状態にすることができる。
【0087】
次に、複製制御部223は、複製ボリューム管理テーブル233に登録されたコードに基づき、複製ボリュームV2において同じデータが格納されたオフセットを判定する(ステップS22)。図11の例では、オフセット#0001,#0002に同じデータが格納されていると判定されたものとする。複製制御部223は、同じデータが格納されているオフセット#0001,#0002に対して同じSDPブロックを割り当てることで、重複排除を行う。
【0088】
複製制御部223は、それぞれ異なるデータが格納されたオフセット#0000,#0001,#0004に割り当てられたTPPブロックから、RAID制御部221を通じてデータを読み出し、読み出したデータを可逆圧縮方式で圧縮する(ステップS23)。複製制御部223は、オフセット#0000,#0001,#0004のそれぞれについて、圧縮後のデータの容量分の物理記憶領域(SDPブロック)を、フリー領域から獲得する。そして、複製制御部223は、獲得した物理記憶領域の位置情報を、複製ボリューム管理テーブル233におけるオフセット#0000,#0001,#0004のエントリに登録して、物理記憶領域の割り当てを変更する(ステップS24)。このとき、複製制御部223は、オフセット#0002のエントリには、オフセット#0001と同じ位置情報を登録する。
【0089】
複製制御部223は、さらに、プール領域管理テーブル231を更新することで、獲得した物理記憶領域をフリー領域から除外するとともに、SDP領域A3に追加する。これにより、獲得された物理記憶領域は、SDPブロックとして取り扱われる。
【0090】
複製制御部223は、上記の複製ボリューム管理テーブル233への登録処理を行うとともに、獲得したSDPブロックの位置情報と、各SDPブロックに書き込むべき圧縮後のデータとをRAID制御部221に引き渡して、書き込みを要求する。これにより、複製ボリュームV2のオフセット#0000〜#0002,#0004にそれぞれ割り当てられたSDPブロックに対して、圧縮後のデータが書き込まれる(ステップS25)。
【0091】
以上の処理により、複製ボリュームV2の生成処理が完了する。複製ボリュームV2は仮想ボリュームとして生成され、複製ボリュームV2には、専用の領域ではなく、業務ボリュームと共通のプール領域から物理記憶領域が割り当てられるので、DE300内のHDDが提供する記憶領域を効率的に使用することができる。
【0092】
また、最終的に、複製ボリュームV2に対しては、異なるデータが格納されたオフセット数分のSDPブロックが割り当てられ、しかも、SDPブロックは、圧縮後のデータの容量分だけ確保される。このため、複製元に割り当てられていた物理記憶領域と比較して、複製ボリュームV2に実際に割り当てられる物理記憶領域の容量を小さくすることができる。
【0093】
さらに、複製ボリュームV2に割り当てられる物理記憶領域の容量を削減できるということは、割り当てられた物理記憶領域に対するデータの格納処理の負荷を低減できることを意味する。このため、複製ボリュームV2の生成処理が、ホスト装置400からの要求に応じた業務ボリュームV1に対するI/O処理に与える影響を少なくすることができ、I/O処理の性能劣化を抑制できる。
【0094】
また、ホスト装置400から複製要求を受け付けた初期段階では、テーブルのコピーによって複製ボリュームV2が論理的に生成され、その後に、複製ボリュームV2専用の物理記憶領域(すなわちSDPブロック)に対する実体的なデータ転送が行われる。このような手順により、SDPブロックに対するデータの格納処理を、業務ボリュームV1へのI/O要求の頻度が低い時間帯など、複製要求受け付け後の任意のタイミングで実行することもできる。この場合、業務ボリュームV1に対するI/O処理の性能劣化をさらに抑制できる。
【0095】
ところで、図10に説明したように、ホストI/O制御部222は、ホスト装置400からの要求に応じてTPPブロックへのデータの書き込み処理と、書き込んだデータに基づくコードの算出処理とを、非同期に実行する。このため、例えば、業務ボリュームにおけるあるオフセットに格納されたデータに基づくコードの算出処理が完了していない状態で、同じオフセットに対して新たなデータの書き込みが要求されるケースがあり得る。例えば、業務ボリューム内の同じ領域に対してデータの書き込みが連続して要求された場合などに、上記のケースが発生し得る。このような場合に、コードの算出処理が完了するまで新たなデータの書き込みを待つように制御すると、書き込み処理に要する時間が長くなってしまう。そこで、次の図12に示すような処理を実行することで、書き込み処理時間が長くならないようにする。
【0096】
図12は、コード算出が未完了の状態で新たに書き込みが要求された場合の処理例を示す図である。
図12では、業務ボリュームV1内のオフセット#0001に格納されたデータに基づくコードの算出処理中に、ホスト装置400からオフセット#0001に対して新たなデータの書き込みが要求された場合を想定する(ステップS31)。ホストI/O制御部222は、業務ボリューム管理テーブル232におけるオフセット#0001のエントリにおいて、ステータスが「算出中」であることから、オフセット#0001についてコードの算出処理が完了していないことを認識する。
【0097】
この場合、ホストI/O制御部222は、業務ボリュームV1のオフセット#0001に割り当てられていたTPPブロックB1を切り離し(ステップS32)、フリー領域から新たなTPPブロックB2を獲得して、オフセット#0001に割り当てる(ステップS33)。具体的には、ホストI/O制御部222は、新たなTPPブロックB1の位置情報を、業務ボリューム管理テーブル232におけるオフセット#0001のエントリに上書き登録する。このとき、ホストI/O制御部222は、複製ボリューム管理テーブル233におけるオフセット#0001のエントリにおいて、フリーフラグを「1」に更新することで、TPPブロックB1が退避中であることを記録する。ホストI/O制御部222は、新たに割り当てたTPPブロックB2に対して、ホスト装置400から受信したデータを書き込む。これにより、コード算出処理が完了するのを待つことなく、書き込み処理を高速に実行できる。
【0098】
一方、複製制御部223は、複製ボリュームV2のオフセット#0001に関して、コードの算出が完了した後、算出されたコードに基づく重複排除を行って、SDPブロックの割り当てを行う。上記のステップS32の時点で、TPPブロックB1は業務ボリュームV1からは切り離されるものの、複製ボリューム管理テーブル233には、オフセット#0001のエントリにTPPブロックB1の位置情報が登録されている。このため、複製制御部223は、図11のステップS22〜S25に示した手順により、複製ボリュームV2のオフセット#0001にSDPブロックを割り当て、TPPブロックB1に格納されたデータを圧縮して、圧縮後のデータをSDPブロックに格納することができる(ステップS34)。
【0099】
また、複製制御部223は、複製ボリューム管理テーブル233におけるオフセット#0001に対応するフリーフラグが「1」であることから、TPPブロックB1が退避中であることを認識する。この場合、業務ボリュームV1のオフセット#0001には新たなTPPブロックB2が割り当てられており、TPPブロックB1のデータは不要になる。このため、複製制御部223は、プール領域管理テーブル231を更新することで、TPPブロックB1をTPP領域A2から解放してフリー領域に戻す(ステップS35)。
【0100】
以上の処理により、業務ボリュームV1のオフセット#0001については、旧データと新規データの両方が一時的にTPP領域A2に保持されるが、複製制御部223によるTPP領域A2からのデータ読み出しが終了すると、TPP領域A2はフリー領域A1に戻され、再利用可能な状態とされる。従って、ホスト装置400からの要求に応じた書き込み処理速度の低下を抑制しつつ、必要とされる物理記憶領域の容量も削減することができる。
【0101】
次に、図10〜図12に示した処理を、フローチャートを用いて説明する。まず、図13,図14は、ホスト装置からの要求に応じた業務ボリュームに対するデータ書き込み処理手順の例を示すフローチャートである。
【0102】
[ステップS101]ホストI/O制御部222は、ホスト装置400から、業務ボリュームへの書き込み要求を受け付ける。
[ステップS102]ホストI/O制御部222は、業務ボリューム管理テーブル232のエントリのうち、書き込みを要求された業務ボリュームの領域に含まれるエントリを1つ選択する。
【0103】
[ステップS103]ホストI/O制御部222は、選択したエントリが複製対象領域として指定されているかを判定する。ホストI/O制御部222は、選択したエントリに登録されたTPPブロックの位置情報(ボリューム番号およびLBA)が、複製範囲設定テーブル234に登録されている場合に、複製対象領域として指定されていると判定する。
【0104】
なお、選択したエントリに登録されたTPPブロックの位置情報が複製範囲設定テーブル234に登録されている場合、そのエントリを含む領域についての複製ボリュームへの複製処理が実行中であり、なおかつ、そのエントリに対応するオフセットにはすでにデータが格納されていることになる。
【0105】
ホストI/O制御部222は、複製対象領域として指定されていると判定した場合(S103:Yes)、図14のステップS107の処理を実行する。一方、ホストI/O制御部222は、複製対象領域として指定されていないと判定した場合(S103:No)、ステップS104の処理を実行する。
【0106】
[ステップS104]ホストI/O制御部222は、選択したエントリにすでにデータが格納されているか(すなわち、業務ボリューム内の未使用領域に対する新規の書き込みであるか)を判定する。ホストI/O制御部222は、すでにデータが格納されている場合(S104:Yes)、ステップS112の処理を実行する。一方、ホストI/O制御部222は、データが格納されていない場合(S104:No)、ステップS105の処理を実行する。
【0107】
[ステップS105]ホストI/O制御部222は、フリー領域から一定容量の物理記憶領域をTPPブロックとして獲得する。このとき、ホストI/O制御部222は、獲得した物理記憶領域をフリー領域から除外してTPP領域に追加するように、プール領域管理テーブル231を更新する。
【0108】
[ステップS106]ホストI/O制御部222は、獲得したTPP領域の位置情報(ボリューム番号、LBAおよびブロック数)を、業務ボリューム管理テーブル232における選択したエントリに登録する。これにより、選択したエントリに対応するオフセットに対して、獲得したTPPブロックが割り当てられる。
【0109】
[ステップS107]選択したエントリが複製対象領域として指定されている場合(S103:Yes)、ホストI/O制御部222は、業務ボリューム管理テーブル232における選択したエントリのステータスを確認する。
【0110】
[ステップS108]ホストI/O制御部222は、ステータスが「算出中」であった場合(S108:Yes)、ステップS111の処理を実行する一方、ステータスが「TPP」であった場合(S108:No)、ステップS109の処理を実行する。
【0111】
[ステップS109]ホストI/O制御部222は、複製ボリューム管理テーブル233のエントリのうち、ステップS102で選択したエントリと同じオフセット番号が登録されたエントリを参照し、参照先のエントリのステータスを確認する。
【0112】
[ステップS110]ホストI/O制御部222は、ステータスが「TPP」である場合(S110:Yes)、ステップS111の処理を実行する。一方、ホストI/O制御部222は、ステータスが「TPP」でない場合(S110:No。具体的には、ステータスが「SDP」である場合。)、図13のステップS112の処理を実行する。
【0113】
[ステップS111]ホストI/O制御部222は、複製ボリューム管理テーブル233のエントリのうち、ステップS102で選択したエントリと同じオフセット番号が登録されたエントリを参照し、参照先のエントリにおけるフリーフラグを「1」に更新する。この後、図13のステップS105の処理が実行される。
【0114】
[ステップS112]ホストI/O制御部222は、ステップS102で選択したエントリに登録されたTPPブロックの位置情報と、このTPPブロックに書き込むべきデータとをRAID制御部221に引き渡して、書き込みを依頼する。これにより、選択したエントリに割り当てられているTPPブロックに、書き込みを要求されたデータが格納される。
【0115】
例えば、ステップS104で「Yes」と判定された場合、またはステップS110で「No」と判定された場合、ステップS112では、TPPブロックにすでに格納されていたデータに対して、新たなデータが上書きされる。また、ステップS106の次にステップS112が実行された場合、ステップS112では、新たに割り当てられたTPPブロックに対してデータが格納される。
【0116】
また、ホストI/O制御部222は、選択したエントリにおけるステータスを「算出中」に更新する。
[ステップS113]ホストI/O制御部222は、書き込みを要求された全データの書き込み処理が完了したかを判定する。ホストI/O制御部222は、業務ボリューム管理テーブル232のエントリのうち、書き込みを要求された業務ボリュームの領域に含まれるすべてのエントリを選択済みである場合に、書き込み処理が完了したと判定する。
【0117】
ホストI/O制御部222は、書き込み処理が完了していない場合(S113:No)、ステップS102に戻り、業務ボリューム管理テーブル232から他のエントリを選択して処理を続行する。一方、ホストI/O制御部222は、書き込み処理が完了した場合(S113:Yes)、ステップS114の処理を実行する。
【0118】
[ステップS114]ホストI/O制御部222は、ホスト装置400に対して応答し、要求された書き込み処理が完了したことを通知する。
以上の図13,図14の処理において、ステップS108で「Yes」と判定される場合とは、ステップS102で選択したエントリに対応するTPPブロックに格納された旧データについて、コードの算出処理が完了していない場合である。この場合、選択したエントリに対して新たなTPPブロックが割り当てられる(ステップS105,S106)。その一方、複製ボリューム管理テーブル233における対応エントリのフリーフラグが「1」に更新されることで(ステップS111)、元のTPPブロックが退避中であることが記録される。
【0119】
また、ステップS110で「Yes」と判定される場合とは、ステップS102で選択したエントリに対応するTPPブロックに格納された旧データが、複製ボリュームに割り当てられるSDPブロックに格納されていない場合である。この場合も、上記と同様に、選択したエントリに対して新たなTPPブロックが割り当てられる(ステップS105,S106)。その一方、複製ボリューム管理テーブル233における対応エントリのフリーフラグが「1」に更新されることで(ステップS111)、元のTPPブロックが退避中であることが記録される。
【0120】
ここで、選択したエントリに対応するTPPブロックに格納された旧データに基づくコード算出処理が完了していない場合にも、複製ボリューム管理テーブル233における対応するエントリ内のステータスは「TPP」となっている。しかしながら、旧データに基づくコード算出処理が完了していない場合には、ステップS109で複製ボリューム管理テーブル233を参照する前に、ステップS107で業務ボリューム管理テーブル232の登録情報を読み出すだけで、ステップS111の処理が実行される。このため、複製ボリューム管理テーブル233の参照回数が減少し、処理負荷が軽減される。
【0121】
また、ステップS108またはステップS110で「Yes」と判定された場合には、元のTPPブロックが退避されるとともに、新たなTPPブロックが割り当てられる。ここで、図11のステップS21で説明したテーブルコピー処理により、TPPブロックを退避させようとする時点では、退避させるTPPブロックの位置情報が複製ボリューム管理テーブル233の対応エントリにすでに登録されている。このため、TPPブロックを退避させる処理としては、フリーフラグを「1」に更新して新たなTPPブロックを割り当てるだけで済み、退避させるTPPブロックの位置情報をいずれかのテーブルに記録しておくといった、位置情報の読み書き処理が必要にならない。従って、同じ位置に対してホスト装置400から連続して書き込みが要求されるような場合でも、単純な処理手順で、書き込み処理速度が低下しないようにすることができる。
【0122】
図15は、コード算出処理手順の例を示すフローチャートである。ホストI/O制御部222は、図13,図14に示した処理と、図15に示す処理とを、非同期に実行する。
[ステップS131]ホストI/O制御部222は、業務ボリューム管理テーブル232の各エントリを監視し、コードが算出されていないオフセットを検出した場合(S131:Yes)に、ステップS132の処理を実行する。
【0123】
[ステップS132]ホストI/O制御部222は、コードが算出されていないオフセットに対応付けられた位置情報を基に、その位置情報が示すTPPブロックからデータを読み出し、コードを算出する。ホストI/O制御部222は、算出したコードを、オフセットに対応するエントリに登録する。
【0124】
[ステップS133]ホストI/O制御部222は、コードを登録したエントリにおけるステータスを、「算出中」から「TPP」に変更する。この後、ステップS131の処理に戻る。
【0125】
図16,図17は、複製ボリュームの生成処理手順の例を示すフローチャートである。
[ステップS151]ホストI/O制御部222は、ホスト装置400から複製要求を受け付ける。このとき、ホストI/O制御部222は、ホスト装置400から、業務ボリュームにおける複製対象範囲の指定を受ける。ホストI/O制御部222は、複製制御部223に対して指定された複製対象範囲を通知して、複製ボリュームの生成処理を開始させる。
【0126】
[ステップS152]複製制御部223は、業務ボリューム管理テーブル232を参照し、指定された複製対象範囲に割り当てられた物理記憶領域を示す位置情報を、複製範囲設定テーブル234に登録する。
【0127】
[ステップS153]複製制御部223は、業務ボリューム管理テーブル232のエントリのうち、複製対象範囲に含まれるエントリの情報を、複製ボリューム管理テーブル233にコピーする。これにより、複製ボリュームのオフセットのうちデータが格納されたオフセットに対してTPPブロックが一時的に割り当てられ、複製ボリュームが論理的に生成される。
【0128】
なお、複製制御部223は、業務ボリューム管理テーブル232にコピーしたエントリ内のフリーフラグには「0」を設定する。
[ステップS154]複製制御部223は、変数Indexを初期値「0」に設定する。このIndexは、複製ボリューム管理テーブル233のエントリを、初期値「0」で先頭から順に付与した番号として指定するものである。
【0129】
[ステップS155]複製制御部223は、Indexが指示するエントリのステータスを参照する。複製制御部223は、ステータスが「算出中」の場合は、ステップS156の処理を実行する。また、複製制御部223は、ステータスが「TPP」の場合は、ステップS157の処理を実行する。また、複製制御部223は、ステータスに登録されていない場合(すなわち、該当オフセットにデータが登録されていない場合)は、図17のステップS168の処理を実行する。
【0130】
[ステップS156]ステータスが「算出中」である場合とは、業務ボリュームにおける対応するオフセットに格納されたデータに基づくコード算出処理が、完了していない場合である。この場合、複製制御部223は、コード算出処理が完了するのを待つ。複製制御部223は、Indexが指示するエントリのステータスが「算出中」から「TPP」に変化すると、ステップS157の処理を実行する。
【0131】
[ステップS157]複製制御部223は、Indexが指示するエントリに登録されたコードと、このエントリより先頭側の各エントリに登録されたコードとを比較する。
[ステップS158]複製制御部223は、データが重複している他のオフセットがあるかを判定する。複製制御部223は、ステップS157において、同一のコードが登録されたエントリを検出した場合に、データが重複する他のオフセットがあると判定する。複製制御部223は、データが重複する他のオフセットがない場合(S158:No)、ステップS159の処理を実行する一方、データが重複する他のオフセットがある場合(S158:Yes)、ステップS162の処理を実行する。
【0132】
[ステップS159]データが重複する他のオフセットがないと判定した場合(S158:No)、新たなSDPオフセットの獲得と、獲得したSDPオフセットへの書き込みとが必要になる。この場合、複製制御部223は、まず、Indexが指示するエントリに登録された位置情報をRAID制御部221に通知して、位置情報が示すTPPブロックからのデータの読み出しを依頼する。複製制御部223は、RAID制御部221によってTPPブロックから読み出されたデータを、可逆圧縮方式で圧縮する。
【0133】
なお、複製制御部223は、データ読み出し元のTPPブロックを示す位置情報を、RAM212に一時的に記録しておく。
[ステップS160]複製制御部223は、フリー領域から、圧縮後のデータの容量分の物理記憶領域をSDPブロックとして獲得する。このとき、複製制御部223は、獲得した物理記憶領域をフリー領域から除外してSDP領域に追加するように、プール領域管理テーブル231を更新する。
【0134】
[ステップS161]複製制御部223は、獲得したSDPブロックの位置情報(ボリューム番号、LBAおよびブロック数)と、圧縮後のデータとをRAID制御部221に引き渡して、書き込みを依頼する。これにより、獲得したSDPブロックに対して、圧縮後のデータが格納される。この後、図17のステップS163が実行される。
【0135】
[ステップS162]複製制御部223は、ステップS157でコードが一致した他のエントリに登録された位置情報(ボリューム番号、LBAおよびブロック数)を取得する。
【0136】
[ステップS163]複製制御部223は、ステップS160で獲得したSDPブロックの位置情報、または、ステップS162で取得した位置情報を、Indexが指示するエントリに登録する。
【0137】
[ステップS164]複製制御部223は、Indexが指示するエントリのフリーフラグを参照する。複製制御部223は、フリーフラグが「1」の場合(S164:Yes)、ステップS165の処理を実行する一方、フリーフラグが「0」の場合(S164:No)、ステップS167の処理を実行する。
【0138】
[ステップS165]複製制御部223は、ステップS159においてRAM212に一時記録しておいた位置情報が示すTPPブロックを解放する。複製制御部223は、TPPブロックをTPP領域から除外してフリー領域に追加するように、プール領域管理テーブル231を更新する。これにより、退避中のTPPブロックは、他のTPPブロックまたはSDPブロックとして再利用可能な状態になる。
【0139】
[ステップS166]複製制御部223は、Indexが指示するエントリのフリーフラグを、「1」から「0」に更新する。
[ステップS167]複製制御部223は、Indexが指示するエントリのステータスを、「TPP」から「SDP」に更新する。ステップS163,S167の処理により、エントリに対応するオフセットに対して割り当てられる物理記憶領域が、TPPブロックからSDPブロックに変更される。
【0140】
[ステップS168]複製制御部223は、Indexの値を「1」だけインクリメントする。
[ステップS169]複製制御部223は、複製ボリューム管理テーブル233に、インクリメントされたIndexによって指示されるエントリがあるかを判定する。複製制御部223は、エントリが存在する場合(S169:Yes)、ステップS155に戻って、次のエントリを処理対象として処理を続行する。一方、エントリが存在しない場合(S169:No)、複製ボリュームの生成処理が完了する。
【0141】
以上の処理により、複製ボリュームの物理記憶領域として、必要最小限の容量分のSDPブロックが割り当てられる。また、生成された複製ボリュームにおいては、複製元の業務ボリュームとは異なる物理記憶領域にデータが格納され、しかも、それらの物理記憶領域には、複製元の領域に格納された全データを完全に復元可能な状態で、データが格納される。このため、例えば、複製元の業務ボリュームに割り当てられた物理記憶領域の一部が破損するなどして、複製元のデータにアクセスできなくなった場合には、複製要求時点での複製元の業務ボリュームのデータを複製ボリュームから完全にリストアすることができる。
【0142】
ここで、図18は、複製ボリュームを用いたリストア処理の例を示す図である。
図18では、業務ボリュームV1に割り当てられたTPPブロックの一部にトラブルが発生して、業務ボリュームV1におけるオフセット#0000〜#0005の領域へのアクセスが不可能になった場合を想定する(ステップS41)。なお、上記の図16,図17の処理により、業務ボリュームV1のオフセット#0000〜#0005を複製対象範囲として、複製ボリュームが生成されているものとする。
【0143】
業務ボリュームV1におけるオフセット#0000〜#0005のリストア処理は、次のように行われる。複製制御部223は、複製ボリューム管理テーブル233のエントリを、業務ボリューム管理テーブル232における同一オフセットのエントリに対して、上書きコピーする(ステップS42)。
【0144】
これにより、業務ボリュームV1におけるデータが格納されていたオフセット(図18ではオフセット#0000〜#0002,#0004)に対して、SDPブロックが割り当てられ、業務ボリュームV1におけるオフセット#0000〜#0005が論理的にリストアされる。このとき、ホストI/O制御部222は、ホスト装置400から、業務ボリュームV1におけるオフセット#0000〜#0005からの読み出しが要求されると、これらのオフセット#0000〜#0005に割り当てられたSDPブロックからデータを読み出して伸張することで、ホスト装置400に対して応答することができる(ステップS43)。
【0145】
このように、テーブルに登録されたデータをコピーするだけで、業務ボリュームをごく短時間でリストアすることができ、ホスト装置400からの要求に応じたI/O処理を安定的に継続できるようになる。
【0146】
なお、当然ながら、アクセス不能になった業務ボリュームV1に対して新たにTPPブロックを割り当て、割り当てたTPPブロックに対して、複製ボリュームのSDPブロックから読み出して伸張したデータを格納することによって、実体的なデータ移動を伴うリストアをすることも可能である。
【0147】
〔第3の実施の形態〕
上記の第2の実施の形態では、複製ボリュームに割り当てる物理記憶領域の容量を、重複排除およびデータ圧縮によって削減した。しかしながら、複製元の業務ボリュームについても容量を削減することができれば、プール領域におけるフリー領域をより多く確保でき、ストレージシステム全体でのデータ記憶容量を増加させることができる。
【0148】
業務ボリュームに保存されたデータの中には、アクセス頻度が極端に低いデータも存在する。そこで、以下の第3の実施の形態では、業務ボリュームに保存されたデータのうち、一定期間以上アクセスされていないデータについては、複製ボリュームと同様に重複排除およびデータ圧縮を行う。これにより、ホスト装置400からの要求に応じたI/O処理速度にほとんど影響を与えることなく、重複排除およびデータ圧縮の各処理を行うことができ、その結果、業務ボリュームに割り当てる物理記憶領域の容量を削減できる。
【0149】
なお、第3の実施の形態に係るストレージシステムのハードウェア構成や、処理機能の構成については、第2の実施の形態と同様である。そこで、以下、第3の実施の形態におけるCMの処理を、図4の符号を用いて説明するとともに、主に、第2の実施の形態と異なる処理や構成要素についてのみ説明する。
【0150】
図19は、第3の実施の形態における業務ボリューム管理テーブルに登録される情報の例を示す図である。
業務ボリューム管理テーブル232には、業務ボリュームにおけるオフセットごとのエントリに対して、図7に示した項目に加えて、重複フラグおよびアクセス日時が登録される。重複フラグは、他のオフセットのデータと重複しているか否かを示すフラグである。業務ボリュームに対する重複排除処理が施されることで、他のオフセットのデータと重複していると判定された場合に、重複フラグは「1」とされ、その他の場合には重複フラグは「0」とされる。また、重複フラグの初期値も「0」である。アクセス日時は、該当オフセットに対してRAID制御部221が書き込みを行ったか、あるいは該当オフセットのデータの読み出しを行った、最終の日時を示す。
【0151】
RAID制御部221は、業務ボリュームに対するデータの書き込み、または業務ボリュームからのデータの読み出しを行うごとに、現在の日時をオフセットごとに業務ボリューム管理テーブル232の該当エントリに上書き登録する。また、RAID制御部221は、オフセットに対してデータを書き込んだとき、そのオフセットに対応付けられた重複フラグが「1」である場合には、その重複フラグを「0」に更新する。
【0152】
図19には、重複排除およびデータ圧縮による容量削減処理の実行前と実行後のそれぞれにおける業務ボリューム管理テーブル232の状態を示している。例えば、業務ボリュームのオフセット#0000〜#0003の状態が、図19の上段のようになったときに、オフセット#0001についての最終アクセス日時から所定期間が経過したものとする。ホストI/O制御部222は、オフセット#0001に対応付けられたコードと同一のコードに対応付けられたオフセットを検出する。図19の例では、同一のコードが対応付けられたオフセットとして、オフセット#0002が検出される。
【0153】
ホストI/O制御部222は、オフセット#0001に割り当てられたTPPブロックからデータを読み出して圧縮し、圧縮後のデータの容量分のTPPブロックをフリー領域から新たに獲得する。ホストI/O制御部222は、獲得したTPPブロックに圧縮後のデータを格納するとともに、そのTPPブロックの位置情報(ボリューム番号、LBAおよびブロック数)を、オフセット#0001,#0002に対応する各エントリに上書き登録する。さらに、ホストI/O制御部222は、オフセット#0001,#0002の各エントリにおける重複フラグを、「0」から「1」に更新する。図19の下段には、以上の更新処理が施された後の業務ボリューム管理テーブル232を示す。
【0154】
図20は、業務ボリュームの容量削減処理手順の例を示すフローチャートである。この図20の処理は、例えば、一定間隔で実行される。例えば、図20の処理は、ホスト装置400からのI/O要求の頻度が少ない期間に実行されることが望ましい。
【0155】
[ステップS181]ホストI/O制御部222は、業務ボリューム管理テーブル232の各エントリにおけるアクセス日時を参照し、登録されたアクセス日時から、あらかじめ設定された期間(例えば3年)だけ経過したオフセットを検出する。
【0156】
[ステップS182]ホストI/O制御部222は、ステップS181で上限に合致するオフセットを検出した場合(S181:Yes)、検出したすべてのオフセットの番号をRAM212に記録して、ステップS183の処理を実行する。一方、ホストI/O制御部222は、ステップS181で条件に合致するオフセットを検出できなかった場合には、容量削減処理を終了する。
【0157】
[ステップS183]ホストI/O制御部222は、ステップS182でRAM212に記録したオフセットに対応するエントリのうち、同じ値のコードが登録されたエントリをエントリ群として抽出する。なお、この処理では、互いに異なる値のコードが登録された複数のエントリ群が抽出される場合もある。ホストI/O制御部222は、複数のエントリ群が抽出された場合には、それらのうちの1つのエントリ群を選択して、以下の処理を実行する。
【0158】
[ステップS184]ホストI/O制御部222は、ステップS183でエントリ群が抽出された場合(S184:Yes)、ステップS185の処理を実行する。一方、ホストI/O制御部222は、ステップS183でエントリ群が抽出されなかった場合(S184:No)、容量削減処理を終了する。
【0159】
[ステップS185]ホストI/O制御部222は、ステップS183で選択したエントリ群に、重複フラグが「1」であるエントリがあるかを判定する。ホストI/O制御部222は、重複フラグが「1」であるエントリがある場合(S185:Yes)、ステップS190の処理を実行する一方、重複フラグが「1」であるエントリがない場合(S185:No)、ステップS186の処理を実行する。
【0160】
[ステップS186]ホストI/O制御部222は、ステップS183で選択したエントリ群からエントリ(例えば、オフセット番号が最も小さいエントリ)を1つ選択する。ホストI/O制御部222は、選択したエントリに登録された位置情報をRAID制御部221に通知して、位置情報が示すTPPブロックからのデータ読み出しを依頼する。ホストI/O制御部222は、RAID制御部221によってTPPブロックから読み出されたデータを、可逆圧縮方式で圧縮する。
【0161】
[ステップS187]ホストI/O制御部222は、フリー領域から、圧縮後のデータの容量分の物理記憶領域をTPPブロックとして獲得する。このとき、ホストI/O制御部222は、獲得した物理記憶領域をフリー領域から除外してTPP領域に追加するように、プール領域管理テーブル231を更新する。
【0162】
[ステップS188]ホストI/O制御部222は、獲得したTPPブロックの位置情報(ボリューム番号、LBAおよびブロック数)と、圧縮後のデータとをRAID制御部221に引き渡して、書き込みを依頼する。これにより、新たに獲得したTPPブロックに対して、圧縮後のデータが格納される。
【0163】
[ステップS189]ホストI/O制御部222は、ステップS183で選択したエントリ群内の全エントリに登録された、TPPブロックの位置情報を、RAM212に一時的に記録する。そして、ホストI/O制御部222は、ステップS187で獲得したTPPブロックの位置情報を、ステップS183で選択したエントリ群に含まれる全エントリに対して上書き登録する。さらに、ホストI/O制御部222は、これらのエントリの重複フラグを「0」から「1」に更新する。
【0164】
[ステップS190]重複フラグが「1」とされたエントリには、他のエントリと共通のTPPブロックがすでに割り当てられおり、そのTPPブロックには圧縮データが格納されている。このため、エントリ群の中に重複フラグが「1」のエントリが存在する場合(S185:Yes)には、新たにTPPブロックを獲得する必要はなく、重複フラグが「1」のエントリに登録されたTPPブロックを利用することができる。
【0165】
ホストI/O制御部222は、ステップS183で選択したエントリ群内のエントリのうち、重複フラグが「0」である全エントリに登録された、TPPブロックの位置情報を、RAM212に一時的に記録する。ホストI/O制御部222は、エントリ群内の重複フラグが「1」であるエントリに登録された、TPPブロックの位置情報を、エントリ群内の重複フラグが「0」であるエントリに対して上書きコピーする。また、ホストI/O制御部222は、位置情報をコピーしたエントリの重複フラグを、「0」から「1」に更新する。
【0166】
[ステップS191]ホストI/O制御部222は、ステップS189またはステップS190でRAM212に一時記録しておいた位置情報が示すTPPブロックを解放する。ホストI/O制御部222は、これらのTPPブロックをTPP領域から除外してフリー領域に追加するように、プール領域管理テーブル231を更新する。これにより、同一のデータが非圧縮で格納されていたTPPブロックは、他のTPPブロックまたはSDPブロックとして再利用可能な状態になる。
【0167】
この後、ステップS183に戻り、他のエントリ群が抽出され、エントリ群が抽出された場合には(S184:Yes)、抽出されたエントリ群に対してステップS185以降の処理が実行される。
【0168】
以上の図20の処理により、業務ボリュームのオフセットのうち、一定期間以上アクセスされていないオフセットに対して、圧縮後のデータの容量分の共通のTPPブロックが割り当てられる。これにより、業務ボリュームに割り当てられる物理記憶領域の容量が小さくなる。
【0169】
ここで、共通のTPPブロックが割り当てられたオフセットからのデータ読み出しが要求された場合には、TPPブロックから読み出したデータを伸張する分だけ、読み出し要求に対する応答時間が長くなってしまう。しかしながら、共通のTPPブロックが割り当てられたオフセットは、長期間アクセスされておらず、今後アクセスされる可能性が低い。従って、図20の処理を実行した場合でも、ホスト装置400からの要求に応じたI/O処理速度が低下する可能性は低い。すなわち、I/O処理速度をできるだけ低下させないようにしつつ、ストレージシステムにおける物理記憶領域の使用量を削減することができる。
【0170】
なお、業務ボリューム管理テーブル232に登録した重複フラグは、次の図21に示すように、複製ボリュームの生成の際に利用することもできる。
図21は、第3の実施の形態における、複製ボリュームの生成処理手順の例を示すフローチャートである。なお、この図21では、図16と同じ処理が実行される処理ステップには、同じステップ番号を付して示し、その処理内容の説明を省略する。
【0171】
図21の処理では、図16のステップS158において「No」と判定された場合、ステップS201の処理が実行される。
[ステップS201]複製制御部223は、Indexが指示するエントリの重複フラグが「1」である場合(S201:Yes)、ステップS202の処理を実行する一方、重複フラグが「0」である場合(S201:No)、ステップS159の処理を実行する。
【0172】
[ステップS202]重複フラグが「1」である場合(S201:Yes)、そのエントリに割り当てられているTPPブロックには、データがすでに圧縮された状態で格納されている。この場合、複製制御部223は、Indexが指示するエントリに割り当てられたTPPブロックと同じ容量分の物理記憶領域(すなわち、このエントリに登録されたブロック数分の物理記憶領域)を、フリー領域からSDPブロックとして獲得する。このとき、複製制御部223は、獲得した物理記憶領域をフリー領域から除外してSDP領域に追加するように、プール領域管理テーブル231を更新する。
【0173】
[ステップS203]複製制御部223は、Indexが指示するエントリに割り当てられたTPPブロックに格納されたデータを、ステップS202で獲得したSDPブロックにコピーするように、RAID制御部221に要求する。これにより、TPPブロックからSDPブロックに対して、圧縮されたデータが転送される。
【0174】
この後、図17のステップS163が実行される。ただし、ステップS163では、複製制御部223は、ステップS160で獲得したSDPブロックの位置情報、または、ステップS162で取得した位置情報、または、ステップS202で獲得したSDPブロックの位置情報のいずれかを、Indexが指示するエントリに登録する。
【0175】
以上の図21の処理によれば、処理対象のエントリに登録された重複フラグが「1」である場合には、データの圧縮処理がスキップされるので、複製ボリュームの生成処理に要する時間を短縮することができる。
【0176】
以上の各実施の形態に関し、さらに以下の付記を開示する。
(付記1) 複数の記憶装置と、前記複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置とを備えたストレージシステムにおいて、
前記ストレージ制御装置は、
ホスト装置からの要求に応じて第1のボリュームにデータを書き込むとともに、前記第1のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録する書き込み制御部と、
前記第1のボリュームのうち複製対象領域についての複製要求を受けると、前記複製対象領域のデータを、前記第1のボリュームとは異なる物理記憶領域によって構成される第2のボリュームに複製するとともに、前記コード記憶部に登録されたコードに基づいて前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する前記第2のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる複製制御部と、
を有することを特徴とするストレージシステム。
【0177】
(付記2) 前記書き込み制御部は、前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む処理と、書き込んだデータに応じたコードを部分領域ごとに生成し、生成したコードを部分領域に対応付けて前記コード記憶部に登録する処理とを、非同期に実行することを特徴とする付記1記載のストレージシステム。
【0178】
(付記3) 前記複製制御部は、前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第2のボリュームを仮想ボリュームとして生成することを特徴とする付記1または2記載のストレージシステム。
【0179】
(付記4) 前記複製制御部は、前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第2のボリューム内の対応する部分領域に割り当てた後、前記第2のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーすることを特徴とする付記3記載のストレージシステム。
【0180】
(付記5) 前記書き込み制御部は、
前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第1のボリュームを仮想ボリュームとして生成するとともに、
前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第2のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データの前記第2のボリュームへのコピーが完了していない場合に、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込む、
ことを特徴とする付記4記載のストレージシステム。
【0181】
(付記6) 前記複製制御部は、前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第2のボリュームを仮想ボリュームとして生成するとともに、
前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第2のボリューム内の対応する部分領域に割り当てた後、前記第2のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーし、
前記書き込み制御部は、
前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第1のボリュームを仮想ボリュームとして生成するとともに、
前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第2のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データに基づくコードを前記コード記憶部に登録済みでない場合には、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込む、
ことを特徴とする付記2記載のストレージシステム。
【0182】
(付記7) 前記複製制御部は、前記第2のボリューム内の部分領域に割り当てた物理記憶領域を、前記未使用領域から割り当てた物理記憶領域に変更したとき、当該部分領域に対応する前記複製対象領域の部分領域に対して前記新たな物理記憶領域が割り当てられていた場合には、物理記憶領域を変更した前記第2のボリューム内の部分領域に対して変更前に割り当てられていた物理記憶領域を、前記未使用領域の一部として設定することを特徴とする付記6記載のストレージシステム。
【0183】
(付記8) 前記複製制御部は、前記複製対象領域内の部分領域に格納されたデータを圧縮し、データを圧縮した部分領域に対応する前記第2のボリュームの部分領域に対して、前記未使用領域から圧縮後のデータ容量分の物理記憶領域を割り当て、割り当てた物理記憶領域に前記圧縮後のデータを格納することを特徴とする付記3〜7のいずれか1つに記載のストレージシステム。
【0184】
(付記9) 前記書き込み制御部は、前記第1のボリューム内のデータが格納された部分領域のうち、一定期間以上アクセスされていない部分領域を抽出し、抽出した部分領域のうち同一のデータが格納されている部分領域に対して、同一の物理記憶領域を割り当てることを特徴とする付記1〜8のいずれか1つに記載のストレージシステム。
【0185】
(付記10) 複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置において、
ホスト装置からの要求に応じて第1のボリュームにデータを書き込むとともに、前記第1のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録する書き込み制御部と、
前記第1のボリュームのうち複製対象領域についての複製要求を受けると、前記複製対象領域のデータを、前記第1のボリュームとは異なる物理記憶領域によって構成される第2のボリュームに複製するとともに、前記コード記憶部に登録されたコードに基づいて前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する前記第2のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる複製制御部と、
を有することを特徴とするストレージ制御装置。
【0186】
(付記11) 前記書き込み制御部は、前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む処理と、書き込んだデータに応じたコードを部分領域ごとに生成し、生成したコードを部分領域に対応付けて前記コード記憶部に登録する処理とを、非同期に実行することを特徴とする付記10記載のストレージ制御装置。
【0187】
(付記12) 複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置によるストレージ制御方法であって、
ホスト装置からの要求に応じて第1のボリュームにデータを書き込むとともに、前記第1のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録し、
前記第1のボリュームのうち複製対象領域についての複製要求を受けると、前記複製対象領域のデータを、前記第1のボリュームとは異なる物理記憶領域によって構成される第2のボリュームに複製するとともに、前記コード記憶部に登録されたコードに基づいて前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する前記第2のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる、
ことを特徴とするストレージ制御方法。
【0188】
(付記13) 前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む処理と、書き込んだデータに応じたコードを部分領域ごとに生成し、生成したコードを部分領域に対応付けて前記コード記憶部に登録する処理とを、非同期に実行することを特徴とする付記12記載のストレージ制御方法。
【0189】
(付記14) 前記複製対象領域を前記第2のボリュームに複製する処理では、前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第2のボリュームを仮想ボリュームとして生成することを特徴とする付記12または13記載のストレージ制御方法。
【0190】
(付記15) 前記複製対象領域を前記第2のボリュームに複製する処理では、前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第2のボリューム内の対応する部分領域に割り当てた後、前記第2のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーすることを特徴とする付記14記載のストレージ制御方法。
【0191】
(付記16) 前記第1のボリュームにデータを書き込む処理では、前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第1のボリュームを仮想ボリュームとして生成するとともに、前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第2のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データの前記第2のボリュームへのコピーが完了していない場合に、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込むことを特徴とする付記15記載のストレージ制御方法。
【0192】
(付記17) 前記複製対象領域を前記第2のボリュームに複製する処理では、
前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第2のボリュームを仮想ボリュームとして生成するとともに、前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第2のボリューム内の対応する部分領域に割り当てた後、前記第2のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーし、
前記第1のボリュームにデータを書き込む処理では、
前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第1のボリュームを仮想ボリュームとして生成するとともに、前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第2のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データに基づくコードを前記コード記憶部に登録済みでない場合には、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込むことを特徴とする付記13記載のストレージ制御方法。
【0193】
(付記18) 前記複製対象領域を前記第2のボリュームに複製する処理では、前記第2のボリューム内の部分領域に割り当てた物理記憶領域を、前記未使用領域から割り当てた物理記憶領域に変更したとき、当該部分領域に対応する前記複製対象領域の部分領域に対して前記新たな物理記憶領域が割り当てられていた場合には、物理記憶領域を変更した前記第2のボリューム内の部分領域に対して変更前に割り当てられていた物理記憶領域を、前記未使用領域の一部として設定することを特徴とする付記17記載のストレージ制御方法。
【0194】
(付記19) 前記複製対象領域を前記第2のボリュームに複製する処理では、前記複製対象領域内の部分領域に格納されたデータを圧縮し、データを圧縮した部分領域に対応する前記第2のボリュームの部分領域に対して、前記未使用領域から圧縮後のデータ容量分の物理記憶領域を割り当て、割り当てた物理記憶領域に前記圧縮後のデータを格納することを特徴とする付記14〜18のいずれか1つに記載のストレージ制御方法。
【0195】
(付記20) 前記第1のボリューム内のデータが格納された部分領域のうち、一定期間以上アクセスされていない部分領域を抽出し、抽出した部分領域のうち同一のデータが格納されている部分領域に対して、同一の物理記憶領域を割り当てることを特徴とする付記12〜19のいずれか1つに記載のストレージ制御方法。
【符号の説明】
【0196】
1 ストレージシステム
10 ストレージ制御装置
11 書き込み制御部
12 複製制御部
13 コード記憶部
21〜24 記憶装置
21a,24a,24b 物理記憶領域
30 ホスト装置
41,42 ボリューム
41a〜41d,42a〜42d 部分領域
【特許請求の範囲】
【請求項1】
複数の記憶装置と、前記複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置とを備えたストレージシステムにおいて、
前記ストレージ制御装置は、
ホスト装置からの要求に応じて第1のボリュームにデータを書き込むとともに、前記第1のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録する書き込み制御部と、
前記第1のボリュームのうち複製対象領域についての複製要求を受けると、前記複製対象領域のデータを、前記第1のボリュームとは異なる物理記憶領域によって構成される第2のボリュームに複製するとともに、前記コード記憶部に登録されたコードに基づいて前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する前記第2のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる複製制御部と、
を有することを特徴とするストレージシステム。
【請求項2】
前記書き込み制御部は、前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む処理と、書き込んだデータに応じたコードを部分領域ごとに生成し、生成したコードを部分領域に対応付けて前記コード記憶部に登録する処理とを、非同期に実行することを特徴とする請求項1記載のストレージシステム。
【請求項3】
前記複製制御部は、前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第2のボリュームを仮想ボリュームとして生成することを特徴とする請求項1または2記載のストレージシステム。
【請求項4】
前記複製制御部は、前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第2のボリューム内の対応する部分領域に割り当てた後、前記第2のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーすることを特徴とする請求項3記載のストレージシステム。
【請求項5】
前記書き込み制御部は、
前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第1のボリュームを仮想ボリュームとして生成するとともに、
前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第2のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データの前記第2のボリュームへのコピーが完了していない場合に、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込む、
ことを特徴とする請求項4記載のストレージシステム。
【請求項6】
前記複製制御部は、前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第2のボリュームを仮想ボリュームとして生成するとともに、
前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第2のボリューム内の対応する部分領域に割り当てた後、前記第2のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーし、
前記書き込み制御部は、
前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第1のボリュームを仮想ボリュームとして生成するとともに、
前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第2のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データに基づくコードを前記コード記憶部に登録済みでない場合には、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込む、
ことを特徴とする請求項2記載のストレージシステム。
【請求項7】
前記複製制御部は、前記第2のボリューム内の部分領域に割り当てた物理記憶領域を、前記未使用領域から割り当てた物理記憶領域に変更したとき、当該部分領域に対応する前記複製対象領域の部分領域に対して前記新たな物理記憶領域が割り当てられていた場合には、物理記憶領域を変更した前記第2のボリューム内の部分領域に対して変更前に割り当てられていた物理記憶領域を、前記未使用領域の一部として設定することを特徴とする請求項6記載のストレージシステム。
【請求項8】
前記複製制御部は、前記複製対象領域内の部分領域に格納されたデータを圧縮し、データを圧縮した部分領域に対応する前記第2のボリュームの部分領域に対して、前記未使用領域から圧縮後のデータ容量分の物理記憶領域を割り当て、割り当てた物理記憶領域に前記圧縮後のデータを格納することを特徴とする請求項3〜7のいずれか1項に記載のストレージシステム。
【請求項9】
前記書き込み制御部は、前記第1のボリューム内のデータが格納された部分領域のうち、一定期間以上アクセスされていない部分領域を抽出し、抽出した部分領域のうち同一のデータが格納されている部分領域に対して、同一の物理記憶領域を割り当てることを特徴とする請求項1〜8のいずれか1項に記載のストレージシステム。
【請求項10】
複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置において、
ホスト装置からの要求に応じて第1のボリュームにデータを書き込むとともに、前記第1のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録する書き込み制御部と、
前記第1のボリュームのうち複製対象領域についての複製要求を受けると、前記複製対象領域のデータを、前記第1のボリュームとは異なる物理記憶領域によって構成される第2のボリュームに複製するとともに、前記コード記憶部に登録されたコードに基づいて前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する前記第2のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる複製制御部と、
を有することを特徴とするストレージ制御装置。
【請求項11】
複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置によるストレージ制御方法であって、
ホスト装置からの要求に応じて第1のボリュームにデータを書き込むとともに、前記第1のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録し、
前記第1のボリュームのうち複製対象領域についての複製要求を受けると、前記複製対象領域のデータを、前記第1のボリュームとは異なる物理記憶領域によって構成される第2のボリュームに複製するとともに、前記コード記憶部に登録されたコードに基づいて前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する前記第2のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる、
ことを特徴とするストレージ制御方法。
【請求項1】
複数の記憶装置と、前記複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置とを備えたストレージシステムにおいて、
前記ストレージ制御装置は、
ホスト装置からの要求に応じて第1のボリュームにデータを書き込むとともに、前記第1のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録する書き込み制御部と、
前記第1のボリュームのうち複製対象領域についての複製要求を受けると、前記複製対象領域のデータを、前記第1のボリュームとは異なる物理記憶領域によって構成される第2のボリュームに複製するとともに、前記コード記憶部に登録されたコードに基づいて前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する前記第2のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる複製制御部と、
を有することを特徴とするストレージシステム。
【請求項2】
前記書き込み制御部は、前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む処理と、書き込んだデータに応じたコードを部分領域ごとに生成し、生成したコードを部分領域に対応付けて前記コード記憶部に登録する処理とを、非同期に実行することを特徴とする請求項1記載のストレージシステム。
【請求項3】
前記複製制御部は、前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第2のボリュームを仮想ボリュームとして生成することを特徴とする請求項1または2記載のストレージシステム。
【請求項4】
前記複製制御部は、前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第2のボリューム内の対応する部分領域に割り当てた後、前記第2のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーすることを特徴とする請求項3記載のストレージシステム。
【請求項5】
前記書き込み制御部は、
前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第1のボリュームを仮想ボリュームとして生成するとともに、
前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第2のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データの前記第2のボリュームへのコピーが完了していない場合に、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込む、
ことを特徴とする請求項4記載のストレージシステム。
【請求項6】
前記複製制御部は、前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第2のボリュームを仮想ボリュームとして生成するとともに、
前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第2のボリューム内の対応する部分領域に割り当てた後、前記第2のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーし、
前記書き込み制御部は、
前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第1のボリュームを仮想ボリュームとして生成するとともに、
前記ホスト装置からの要求に応じて前記第1のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第2のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データに基づくコードを前記コード記憶部に登録済みでない場合には、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込む、
ことを特徴とする請求項2記載のストレージシステム。
【請求項7】
前記複製制御部は、前記第2のボリューム内の部分領域に割り当てた物理記憶領域を、前記未使用領域から割り当てた物理記憶領域に変更したとき、当該部分領域に対応する前記複製対象領域の部分領域に対して前記新たな物理記憶領域が割り当てられていた場合には、物理記憶領域を変更した前記第2のボリューム内の部分領域に対して変更前に割り当てられていた物理記憶領域を、前記未使用領域の一部として設定することを特徴とする請求項6記載のストレージシステム。
【請求項8】
前記複製制御部は、前記複製対象領域内の部分領域に格納されたデータを圧縮し、データを圧縮した部分領域に対応する前記第2のボリュームの部分領域に対して、前記未使用領域から圧縮後のデータ容量分の物理記憶領域を割り当て、割り当てた物理記憶領域に前記圧縮後のデータを格納することを特徴とする請求項3〜7のいずれか1項に記載のストレージシステム。
【請求項9】
前記書き込み制御部は、前記第1のボリューム内のデータが格納された部分領域のうち、一定期間以上アクセスされていない部分領域を抽出し、抽出した部分領域のうち同一のデータが格納されている部分領域に対して、同一の物理記憶領域を割り当てることを特徴とする請求項1〜8のいずれか1項に記載のストレージシステム。
【請求項10】
複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置において、
ホスト装置からの要求に応じて第1のボリュームにデータを書き込むとともに、前記第1のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録する書き込み制御部と、
前記第1のボリュームのうち複製対象領域についての複製要求を受けると、前記複製対象領域のデータを、前記第1のボリュームとは異なる物理記憶領域によって構成される第2のボリュームに複製するとともに、前記コード記憶部に登録されたコードに基づいて前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する前記第2のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる複製制御部と、
を有することを特徴とするストレージ制御装置。
【請求項11】
複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置によるストレージ制御方法であって、
ホスト装置からの要求に応じて第1のボリュームにデータを書き込むとともに、前記第1のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録し、
前記第1のボリュームのうち複製対象領域についての複製要求を受けると、前記複製対象領域のデータを、前記第1のボリュームとは異なる物理記憶領域によって構成される第2のボリュームに複製するとともに、前記コード記憶部に登録されたコードに基づいて前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する前記第2のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる、
ことを特徴とするストレージ制御方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【公開番号】特開2013−54416(P2013−54416A)
【公開日】平成25年3月21日(2013.3.21)
【国際特許分類】
【出願番号】特願2011−190274(P2011−190274)
【出願日】平成23年9月1日(2011.9.1)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成25年3月21日(2013.3.21)
【国際特許分類】
【出願日】平成23年9月1日(2011.9.1)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]