JP2022166986A - ストレージ制御装置およびストレージ制御方法 - Google Patents

ストレージ制御装置およびストレージ制御方法 Download PDF

Info

Publication number
JP2022166986A
JP2022166986A JP2021072463A JP2021072463A JP2022166986A JP 2022166986 A JP2022166986 A JP 2022166986A JP 2021072463 A JP2021072463 A JP 2021072463A JP 2021072463 A JP2021072463 A JP 2021072463A JP 2022166986 A JP2022166986 A JP 2022166986A
Authority
JP
Japan
Prior art keywords
area
unit
data
storage
storage area
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2021072463A
Other languages
English (en)
Inventor
晋一 西園
Shinichi Nishizono
光一 林
Koichi Hayashi
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2021072463A priority Critical patent/JP2022166986A/ja
Publication of JP2022166986A publication Critical patent/JP2022166986A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】スナップショット作成後に元の記憶領域の更新が要求された場合の応答時間を短縮する。【解決手段】処理部2は、記憶領域V1に対応するスナップショットの作成要求を受信した後に、記憶領域V1に含まれる単位領域U1~U4のうち単位領域U2に対するデータD2aの書き込み要求を受信すると、スナップショットに対応する記憶領域V2における単位領域U2にデータD2aを書き込み、書き込み要求に対する完了応答を送信する。処理部2は、データD2aの書き込み後の所定のタイミングで、記憶領域V1における単位領域U2と記憶領域V2における単位領域U2との間でデータをスワップする。【選択図】図1

Description

本発明は、ストレージ制御装置およびストレージ制御方法に関する。
データのバックアップに関する技術として、スナップショットが知られている。スナップショットは、ある時点における記憶領域のデータイメージを作成したものである。スナップショットの作成方法の例として、コピーオンライト(Copy On Write)方式を用いた方法が知られている。例えば、ある記憶領域のスナップショットをコピーオンライト方式で作成する場合、その作成時点では記憶領域の実データのコピーは行われずに、記憶領域のデータを参照可能にするための管理情報が作成される。そして、その後に元の記憶領域が更新される際には、更新前のデータがスナップショットの記憶領域に退避された後、元の記憶領域が新たなデータによって更新される。このような方法により、スナップショットの作成要求に対して短時間に応答することができる。
また、データのバックアップに関しては、例えば次のようなストレージ制御装置が提案されている。このストレージ制御装置は、バックアップ指示に応じて、バックアップ元仮想ボリュームの記憶領域の割り当て情報を作成し、この情報に基づいて、バックアップ先ボリュームの記憶領域に対して当該ボリュームが仮想ボリュームであるか否かに応じた前処理を行い、前処理がなされた記憶領域に対してバックアップ元仮想ボリュームからのデータをコピーする。
また、次のようなストレージシステムも提案されている。このストレージシステムは、バックアップ対象とされる論理記憶領域に対して更新データの書き込み要求を受信すると、更新前のデータを維持した状態で、当該論理記憶領域に割り当てられていた第1の物理記憶領域をバックアップ用記憶領域として管理し、当該論理記憶領域に新たに第2の物理記憶領域を割り当てて更新データを書き込む。
特開2016-212548号公報 特開2014-206982号公報
ところで、コピーオンライト方式では、スナップショットに対応する元の記憶領域に対するデータの更新が要求されてから、その応答が送信されるまでの間に、更新前のデータを元の記憶領域からスナップショットの記憶領域にコピーして退避する処理が実行される。このようなコピー処理が実行される分だけ、更新が要求されてから応答するまでの時間が長くなり、応答性能が低下するという問題がある。
1つの側面では、本発明は、スナップショット作成後に元の記憶領域の更新が要求された場合の応答時間を短縮することが可能なストレージ制御装置およびストレージ制御方法を提供することを目的とする。
1つの案では、次のような処理部を有するストレージ制御装置が提供される。このストレージ制御装置において、処理部は、第1の記憶領域に対応するスナップショットの作成要求を受信した後に、第1の記憶領域に含まれる複数の単位領域のうち第1の単位領域に対する第1のデータの書き込み要求を受信すると、スナップショットに対応する第2の記憶領域における第1の単位領域に第1のデータを書き込み、書き込み要求に対する完了応答を送信し、第1のデータの書き込み後の所定のタイミングで、第1の記憶領域における第1の単位領域と第2の記憶領域における第1の単位領域との間でデータをスワップする。
また、1つの案では、上記のストレージ制御装置と同様の処理をコンピュータが実行するストレージ制御方法が提供される。
1つの側面では、スナップショット作成後に元の記憶領域の更新が要求された場合の応答時間を短縮できる。
第1の実施の形態に係るストレージ制御装置の構成例および処理例を示す図である。 第2の実施の形態に係るストレージシステムの構成例を示す図である。 CMが備える処理機能の構成例を示す図である。 スナップショットボリュームに対するチャンク割り当ての比較例を示す図である。 コピー元ボリュームに対する更新時の処理例を示す図である。 コピー元ボリュームとスナップショットボリュームとの間のスワップ処理例を示す図である。 コピー元ボリュームからの読み出し処理例を示す図である。 スナップショットボリュームの作成に伴って作成される管理データを示す図である。 サブチャンク変換テーブルおよびサブチャンク管理テーブルの構成例を示す図である。 チャンクデータのマージ処理例を示す図である。 スナップショット作成処理の手順を示すフローチャートの例である。 書き込み処理の手順を示すフローチャートの例(その1)である。 書き込み処理の手順を示すフローチャートの例(その2)である。 読み出し処理の手順を示すフローチャートの例である。 スワップ処理の手順を示すフローチャートの例である。 チャンクデータのマージ処理手順を示すフローチャートの例である。
以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るストレージ制御装置の構成例および処理例を示す図である。図1に示すストレージ制御装置1は、図示しないストレージに対するアクセスを制御する装置である。ストレージ制御装置1は、処理部2を有する。処理部2は、例えば、プロセッサとして実現される。ストレージは、HDD(Hard Disk Drive)などの記憶装置を1台また複数台備え、物理記憶領域を実現する。
以下の説明では、図示しないホスト装置から読み書きされる記憶領域V1が設定されているものとする。記憶領域V1は、例えば、上記のストレージの物理記憶領域を用いて実現される論理記憶領域である。記憶領域V1は、例として、それぞれ一定サイズを有する4つの単位領域U1~U4に分割されている。また、単位領域U1~U4には、それぞれデータD1~D4が記憶されている。
処理部2は、記憶領域V1に対応するスナップショットの作成要求を受信する(ステップS1)。このとき、コピーオンライト方式によるスナップショット作成処理と同様に、スナップショットに対応する記憶領域V2に対する、元の記憶領域V1からの実データのコピーが行われることなく、スナップショット作成に対する完了応答が返信される。なお、元の記憶領域V1が論理記憶領域の場合、記憶領域V2は、記憶領域V1と同じサイズを有する論理記憶領域であり、スナップショットの作成要求に応答した時点では実体を持たず、その後にデータが書き込まれると実記憶領域が割り当てられる。
その後、処理部2は、記憶領域V1に対するデータの書き込み(更新)要求を受信すると、書き込みが要求されたデータを記憶領域V1ではなく、スナップショットに対応する記憶領域V2に書き込む。例えば、記憶領域V1の単位領域U2に対するデータD2aの書き込みが要求されたとする(ステップS2)。この場合、処理部2は、データD2aを記憶領域V1でなく、記憶領域V2における単位領域U2に書き込み、その書き込みが完了すると完了応答を返信する。このように、元の記憶領域V1に対する書き込みが要求された際には、記憶領域間でのデータコピーが実行されない。
処理部2は、このようなデータD2aの書き込み後の所定のタイミングで、記憶領域V1の単位領域U2に格納されたデータD2と、記憶領域V2の単位領域U2に格納されたデータD2aとをスワップする(ステップS3)。これにより、記憶領域V1,V2のそれぞれにおいて、本来保持すべきデータが保持されている状態になる。なお、スワップ処理は、例えば、ストレージ制御装置1の処理負荷を示す指標が所定の閾値以下になった場合に実行される。
以上の処理によれば、スナップショットの作成が要求された後、元の記憶領域V1に対する更新が要求された際には、記憶領域間のデータコピーが実行されない。そのため、更新が要求されてから応答するまでの時間を短縮でき、その応答性能を向上させることができる。
ところで、ストレージ制御装置1は、スナップショットに対応する記憶領域V2の単位領域ごとに、スワップ管理情報を保持する。記憶領域V1,V2からの読み出しは、スワップ管理情報を用いて次のような手順で実行される。
図1の例では、記憶領域V2の単位領域U2に対応するスワップ管理情報3が保持されている。処理部2は、ステップS2の書き込みを実行すると、単位領域U2におけるスワップ処理が未実行であることをスワップ管理情報3に記録する。また、処理部2は、ステップS3のスワップ処理を実行すると、単位領域U2におけるスワップ処理が実行済みであることをスワップ管理情報3に記録する。
処理部2は、記憶領域V1の単位領域U2からのデータ読み出しが要求されると、単位領域U2に対応するスワップ管理情報3を参照して、スワップ処理が実行済みか否かを判定する。そして、処理部2は、スワップ処理が未実行の場合、データを記憶領域V2から読み出し、スワップ処理が実行済みの場合、データを記憶領域V1から読み出す。
例えば、ステップS2の書き込み実行後の状態で、記憶領域V1の単位領域U2からのデータ読み出しが要求されたとする(ステップS2a)。この場合、スワップ管理情報3からスワップ処理が未実行と判定されるので、処理部2は、データを記憶領域V2の単位領域U2から読み出す。
一方、ステップS3のスワップ処理実行後の状態で、記憶領域V1の単位領域U2からのデータ読み出しが要求されたとする(ステップS3a)。この場合、スワップ管理情報3からスワップ処理が実行済みと判定されるので、処理部2は、データを記憶領域V1の単位領域U2から読み出す。
また、図示しないが、処理部2は、記憶領域V2の単位領域U2からのデータ読み出しが要求されると、単位領域U2に対応するスワップ管理情報3を参照して、スワップ処理が実行済みか否かを判定する。そして、処理部2は、スワップ処理が未実行の場合、データを記憶領域V1から読み出し、スワップ処理が実行済みの場合、データを記憶領域V2から読み出す。
以上の手順により、スナップショットからの読み出し時でも、元の記憶領域からの読み出し時でも、正しいデータの読み出しが可能となる。したがって、記憶領域のスナップショットを正しく作成可能で、かつ、スナップショットおよび元の記憶領域に対応する正しいデータを読み出し可能なストレージ制御装置において、元の記憶領域への更新要求に対する応答時間を短縮できるようになる。
〔第2の実施の形態〕
図2は、第2の実施の形態に係るストレージシステムの構成例を示す図である。図2に示すストレージシステムは、ストレージ装置100、ホストサーバ210および管理サーバ220を含む。ストレージ装置100は、CM(Controller Module)110とドライブ部120を備える。ホストサーバ210および管理サーバ220は、図示しないネットワークを介してCM110に接続されている。
CM110は、図1に示したストレージ制御装置1の一例である。CM110は、ホストサーバ210からの要求に応じて、ドライブ部120に搭載された記憶装置へのアクセスを制御するストレージ制御装置である。ドライブ部120には、ホストサーバ210からのアクセス対象となる記憶装置が複数台搭載されている。本実施の形態では例として、ドライブ部120は、記憶装置として複数台のHDD121,122,123,・・・が搭載されたディスクアレイ装置である。
ホストサーバ210は、業務処理などの所定の処理に伴って、ストレージ装置100によって提供される記憶領域に対してアクセスする。例えば、CM110により、ドライブ部120内のHDDを用いた論理ボリューム(論理記憶領域)が提供され、ホストサーバ210は、その論理ボリュームに対するアクセスをCM110に要求することでドライブ部120内のHDDにアクセスする。
管理サーバ220は、ストレージ装置100を管理する。管理サーバ220は、例えば、ストレージ装置100のCM110に対して、論理ボリュームについてのスナップショットの作成を指示することができる。
以下、CM110のハードウェア構成例について説明する。
CM110は、プロセッサ111、RAM(Random Access Memory)112、SSD(Solid State Drive)113、ホストインタフェース(I/F)114、ドライブインタフェース(I/F)115および管理用インタフェース(I/F)116を備える。
プロセッサ111は、CM110全体を統括的に制御する。プロセッサ111は、例えば、CPU(Central Processing Unit)、MPU(Micro Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、またはPLD(Programmable Logic Device)である。また、プロセッサ111は、CPU、MPU、DSP、ASIC、PLDのうちの2以上の要素の組み合わせであってもよい。
RAM112は、CM110の主記憶装置として使用される。RAM112には、プロセッサ111に実行させるOS(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM112には、プロセッサ111による処理に必要な各種データが格納される。
SSD113は、CM110の補助記憶装置として使用される。SSD113には、OSプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、HDDなどの他の種類の不揮発性記憶装置が用いられてもよい。
ホストインタフェース114は、ホストサーバ210と通信するためのインタフェースである。ホストインタフェース114は、例えば、ファイバチャネル(FC:Fibre Channel)やiSCSI(Internet Small Computer System Interface)などを用いたSAN(Storage Area Network)を介して、ホストサーバ210と通信する。
ドライブインタフェース115は、ドライブ部120内のHDD121,122,123,・・・と通信するためのインタフェースである。ドライブインタフェース115は、例えば、SAS(Serial Attached SCSI)によってドライブ部120と通信する。
管理用インタフェース116は、管理サーバ220と通信するためのインタフェースである。管理用インタフェース116は、例えば、LAN(Local Area Network)を介して管理サーバ220と通信する。
なお、ホストサーバ210および管理サーバ220も、CM110と同様に、プロセッサやRAMなどを備えるコンピュータとして実現することができる。
図3は、CMが備える処理機能の構成例を示す図である。CM110は、記憶部130、I/O(Input/Output)制御部141およびコピー制御部142を備える。
記憶部130は、例えば、RAM112やSSD113など、CM110が備える記憶装置の記憶領域として実現される。記憶部130は、セッション管理テーブル131、コピー管理データ132およびプール管理データ133を記憶する。
セッション管理テーブル131は、スナップショット作成処理に関するセッションの情報を保持する。セッションとは、2つのボリュームの間で実行される処理を表す。本実施の形態では、あるボリュームについてのスナップショットが作成される場合、作成元ボリューム(コピー元ボリューム)と作成先ボリューム(スナップショットボリューム)との間でスナップショットセッションが設定される。セッション管理テーブル131は、ストレージ装置100内のボリューム(ドライブ部120内のHDDの記憶領域によって実現される論理ボリューム)について設定されたセッションに関する設定情報を保持する。
コピー管理データ132は、スナップショットセッションが設定されたボリュームに関する処理において参照される各種の管理データを含む。詳しくは後述するが、コピー管理データ132には、スナップショットボリュームの世代ごとに、サブチャンク変換テーブルおよびサブチャンク管理テーブルが含まれる。
本実施の形態では、コピー元ボリュームおよびスナップショットボリュームのいずれも、シンプロビジョニングによる仮想ボリュームとして実現される。プール管理データ133は、シンプロビジョニング用のストレージプールに関する管理情報を保持する。ストレージプールとは、ドライブ部120に搭載されたHDD121,122,123,・・・を用いて実現されて、1以上の仮想ボリュームによって共用される物理記憶領域である。プール管理データ133には、例えば、ストレージプールの構成情報(属しているHDDの識別情報など)や、ストレージプールに含まれる割り当て済みチャンクおよび未割り当てチャンクの情報などが登録される。なお、チャンクとは、仮想ボリュームに対する割り当て単位となる一定サイズの記憶領域である。
I/O制御部141およびコピー制御部142の処理は、例えば、プロセッサ111が所定のプログラムを実行することにより実現される。
I/O制御部141は、ホストサーバ210からのI/O要求に応じて、ストレージ装置100内のボリュームに対するI/O処理を実行する。このとき、どのコピー元ボリュームやスナップショットボリュームのうちのどのボリュームにアクセスするべきかをコピー制御部142に問い合わせ、その問い合わせの結果に基づいてI/O処理を実行する。
コピー制御部142は、管理サーバ220からスナップショット作成要求を受け付けると、指定されたボリュームについてのスナップショットボリュームを作成する。このとき、コピー制御部142は、作成されたスナップショットボリュームに対応する各種の管理データをコピー管理データ132に設定する。また、コピー制御部142は、I/O制御部141からの問い合わせに応じて、セッション管理テーブル131やコピー管理データ132を参照しながら、I/O制御部141がアクセスするべきボリュームを特定する。さらに、コピー制御部142は、データの書き込み先となるスナップショットボリュームの領域にチャンクが割り当てられていない場合、未使用のチャンクをストレージプールから取得してスナップショットボリュームに割り当てる。
ところで、前述のように、本実施の形態において、コピー元ボリュームやスナップショットボリュームは、シンプロビジョニングによる仮想ボリュームとして実現される。この場合、ボリュームが作成された段階ではそのボリュームに対して物理領域が割り当てられない。そして、ボリュームに対するデータの書き込みが要求されると、書き込み対象領域に対してストレージプールから物理領域が割り当てられ、その物理領域にデータが書き込まれる。ボリュームに対する物理領域の割り当ては、チャンクと呼ばれる一定サイズの領域を単位として行われる。また、ボリューム内の論理アドレスと、ボリュームに割り当てられた物理領域を示す物理アドレスとの対応関係は、論物変換テーブルを用いて管理される。
一方、スナップショットの作成方法として、コピーオンライト方式を用いた方法が一般的に知られている。この方法では、あるボリュームのスナップショットボリュームが作成された時点では、ボリュームの実データのコピーは行われずに、ボリュームのデータを参照可能にするための管理情報が作成される。そして、その後にボリュームの記憶領域が更新される際に、更新前のデータがスナップショットボリュームに退避された後、元の記憶領域が新たなデータによって更新される。
このような方法により、スナップショット作成要求に対して短時間に応答することができる。その一方で、コピー元ボリュームの更新が要求された場合に、更新前のデータをスナップショットボリュームに退避する処理が実行される分だけ、更新が要求されてから応答するまでの時間が長くなり、応答性能が低下するという問題がある。
また、スナップショットボリュームをシンプロビジョニングによる仮想ボリュームとして実現する場合、論物変換テーブルでは、コピー元ボリュームにおけるI/O処理の最小単位の領域(以下、「サブチャンク」と記載する)ごとに論理アドレスと物理アドレスとが対応付けて管理される。ところが、サブチャンクのサイズは、ボリュームに対する物理領域の割り当て単位のサイズ(すなわち、チャンクのサイズ)より小さい場合がある。例えば、チャンクのサイズが数十MB~数百MBであるのに対し、サブチャンクのサイズが512B~8MB程度である場合がある。この場合、次の図4に示すように、物理領域の使用効率が低いという問題がある。
図4は、スナップショットボリュームに対するチャンク割り当ての比較例を示す図である。図4の初期状態では、コピー元ボリューム内のある領域に対してチャンクCK1が割り当てられ、別の領域に対してチャンクCK2が割り当てられているとする。この状態から、チャンクCK1が割り当てられた領域の一部に対してデータDT1aの書き込み(更新)が要求され、さらに、チャンクCK2が割り当てられた領域の一部に対してデータDT2aの書き込み(更新)が要求されたとする。
この場合、まず、スナップショットボリュームに対して、シンプロビジョニング用のストレージプールPL1からチャンクCK11が割り当てられ、データDT1aに対応する更新前のデータDT1が、チャンクCK1からチャンクCK11に退避される。そして、更新前のデータDT1の退避が完了すると、データDT1aがチャンクCK1に上書きされる。
その後、スナップショットボリュームに対して、シンプロビジョニング用のストレージプールPL1からチャンクCK12が割り当てられ、データDT2aに対応する更新前のデータDT2が、チャンクCK2からチャンクCK12に退避される。そして、更新前のデータDT2の退避が完了すると、データDT2aがチャンクCK2に上書きされる。
このような処理では、コピー元ボリュームに対する更新データのサイズがチャンクより小さい場合でも、スナップショットボリュームには1つのチャンクが割り当てられる。この場合、割り当てられたチャンクの一部の領域にしかデータが格納されないことになる。そのため、物理領域の容量が必要分より多く消費されてしまい、物理領域の使用効率が低いという問題がある。
そこで、本実施の形態のCM110は、以下の図5、図6に示すような制御を実行する。
図5は、コピー元ボリュームに対する更新時の処理例を示す図である。図5の初期状態では、図4の初期状態と同様に、コピー元ボリューム内のある領域に対してチャンクCK1が割り当てられ、別の領域に対してチャンクCK2が割り当てられているとする。そして、この状態から、チャンクCK1が割り当てられた領域の一部に対してデータDTaの書き込み(更新)が要求され、さらに、チャンクCK2が割り当てられた領域の一部に対してデータDT2aの書き込み(更新)が要求されたとする。
まず、データDT1aによる更新が要求されると、スナップショットボリュームに対して、ストレージプールPL1からチャンクCK11が割り当てられる。そして、データDT1aに対応する更新前のデータDT1は退避されずに、更新後のデータDT1aが、割り当てられたチャンクCK11に対して前積みで書き込まれる。この状態では、ホストサーバ210からは、更新後のデータDT1aがコピー元ボリュームに格納されているように見えているが、実際にはコピー元ボリュームには更新前のデータDT1が格納されたままになっている。
この後、データDT2aによる更新が要求されると、スナップショットボリュームに割り当てられたチャンクの中に空き領域があるチャンクがあるかが判定される。図5の例では、チャンクCK11に空き領域があると判定される。この場合、データDT2aに対応する更新前のデータDT2は退避されずに、更新後のデータDT2aが、チャンクCK11の空き領域に対して前積みで書き込まれる。この状態では、ホストサーバ210からは、更新後のデータDT2aがコピー元ボリュームに格納されているように見えているが、実際にはコピー元ボリュームには更新前のデータDT2が格納されたままになっている。
また、次の図6に示すように、上記のようなコピー元ボリュームの更新処理とは非同期のタイミングで、スナップショットボリュームに書き込まれた更新後のデータと、コピー元ボリュームに格納されたままの更新前のデータとがスワップされる。
図6は、コピー元ボリュームとスナップショットボリュームとの間のスワップ処理例を示す図である。図5に示した処理の実行後、図6に示すようなスワップ処理が実行される。すなわち、コピー元ボリュームに割り当てられたチャンクCK1内のデータDT1と、スナップショットボリュームに割り当てられたチャンクCK11内のデータDT1aとが入れ替えられる。また、コピー元ボリュームに割り当てられたチャンクCK2内のデータDT2と、スナップショットボリュームに割り当てられたチャンクCK11内のデータDT2aとが入れ替えられる。なお、このようなスワップ処理は、例えば、CM110の処理負荷が低いと判定された場合(例えば、CPU使用率やメモリ使用率、ディスク使用率が所定の閾値を下回った場合)に実行される。
以上の処理では、図5のように、コピー元ボリュームに対する更新が要求された場合に、更新後のデータがスナップショットボリュームに書き込まれるので、更新前のデータを退避する処理が実行されない。そのため、更新が要求されてから応答するまでの時間を短縮でき、その応答性能を向上させることができる。
また、図5のように、スナップショットボリュームに割り当てられたチャンクには、コピー元ボリュームの更新データが先頭側から順に前詰めで格納されていく。そして、図6のように、更新要求の後の所定のタイミングで、更新前のデータと更新後のデータとがスワップされる。そのため、結果的に、スナップショットボリュームに割り当てられたチャンクには、コピー元ボリュームにおける更新前のデータが先頭側から順に格納されることになる。このような処理により、スナップショットボリュームに割り当てられたチャンクに発生する空き領域の容量を減少させることができる。したがって、ストレージプールPL1に用意された物理領域の使用効率を向上させることができる。
ここで、スナップショットボリュームの記憶領域については、サブチャンク単位でスワップ処理を実行済みか否かがスワップフラグを用いて管理される。このスワップフラグは、コピー管理データ132に含まれる。コピー元ボリュームにおけるあるサブチャンクのデータ更新が要求され、その更新データがスナップショットボリュームに書き込まれると、スナップショットボリュームにおけるそのサブチャンクについてのスワップフラグが0に設定される。そして、そのサブチャンクについてのスワップ処理が実行されると、スワップフラグが1に設定される。このようなスワップフラグを用いることで、コピー元ボリュームやスナップショットボリュームからのデータ読み出しを正しく実行することができる。
図7は、コピー元ボリュームからの読み出し処理例を示す図である。図7では、図5に示した手順で、コピー元ボリュームに対してデータDT1aによる更新が要求され、データDT1aがスナップショットボリュームに書き込まれた状態を示している。また、図7では、コピー元ボリュームにおけるデータDT1aの書き込み先領域を領域R1と示している。この領域R1は、サブチャンク1つ分に対応するものとする。このとき、スナップショットボリュームの領域R1についてのスワップフラグは0に設定されている。
この状態で、コピー元ボリュームの領域R1からの読み出しが要求されたとする。このとき、スナップショットボリュームの領域R1についてのスワップフラグが参照される。図7のようにスワップフラグが0の場合には、データはスナップショットボリュームから読み出される。一方、領域R1がスワップ済みであり、スワップフラグが1になっている場合には、データはコピー元ボリュームから読み出される。このように、スワップフラグを用いることで、コピー元ボリュームからのデータ読み出しを正しく実行できる。
また、図示しないが、スナップショットボリュームからの読み出しが要求された場合にも、読み出し領域に対応するスワップフラグが参照される。スワップフラグが0の場合、データはコピー元ボリュームから読み出され、スワップフラグが1の場合、データはスナップショットボリュームから読み出される。これにより、スナップショットボリュームからのデータ読み出しも正しく実行できる。
次に、上記処理を実現するためのコピー管理データ132について説明する。
図8は、スナップショットボリュームの作成に伴って作成される管理データを示す図である。コピー元ボリュームに対応するスナップショットの作成が要求されると、スナップショットボリュームに対応するサブチャンク変換テーブルおよびサブチャンク管理テーブルが作成される。サブチャンク変換テーブルおよびサブチャンク管理テーブルは、コピー管理データ132の中に追加的に作成される。
サブチャンク変換テーブルには、スナップショットボリュームに含まれるサブチャンクと、割り当てられたチャンクとの対応関係を示す情報が登録される。また、サブチャンク変換テーブルには、前述のスワップフラグも登録される。サブチャンク管理テーブルには、後述するチャンクデータのマージ処理を実現するための情報が登録される。
複数世代のスナップショットボリュームが作成される場合、サブチャンク変換テーブルおよびサブチャンク管理テーブルは世代ごとに個別に作成される。例えば図8に示すように、コピー元ボリュームVOL1に対応する第1世代のスナップショットボリュームSSV1が作成されると、このスナップショットボリュームSSV1に対応するサブチャンク変換テーブル151aおよびサブチャンク管理テーブル152aが作成される。また、コピー元ボリュームVOL1に対応する第2世代のスナップショットボリュームSSV2が作成されると、このスナップショットボリュームSSV2に対応するサブチャンク変換テーブル151bおよびサブチャンク管理テーブル152bが作成される。さらに、コピー元ボリュームVOL1に対応する第3世代のスナップショットボリュームSSV3が作成されると、このスナップショットボリュームSSV3に対応するサブチャンク変換テーブル151cおよびサブチャンク管理テーブル152cが作成される。
なお、以下の説明では、世代を特定せずにサブチャンク変換テーブルおよびサブチャンク管理テーブルに言及する場合には、それぞれ「サブチャンク変換テーブル151」「サブチャンク管理テーブル152」と記載する。
図9は、サブチャンク変換テーブルおよびサブチャンク管理テーブルの構成例を示す図である。図9では、1つの世代のスナップショットボリュームに対応するサブチャンク変換テーブル151およびサブチャンク管理テーブル152を例示している。
まず、サブチャンク変換テーブル151には、スナップショットボリューム内の各サブチャンクに対応するレコードが含まれる。各レコードには、サブチャンク番号、チャンク番号、チャンク内オフセットおよびスワップフラグが登録される。
サブチャンク番号は、サブチャンクを識別する情報である。なお、スナップショットボリューム内のサブチャンクの数(すなわち、レコードの数)は、対応するコピー元ボリュームに含まれるサブチャンクの数と同じである。また、サブチャンク番号は、スナップショットボリューム内の論理アドレス(LBA:Logical Block Address)と紐づけられている。
チャンク番号は、サブチャンクに割り当てられたチャンクを識別する情報である。前述のように、サブチャンクのサイズはチャンクのサイズより小さく、なおかつ、図7に示したように1つのチャンクが複数のサブチャンクに割り当てられる場合があることから、サブチャンク変換テーブル151においては複数のサブチャンク番号に同一のチャンク番号が対応付けられる場合がある。
チャンク内オフセットは、割り当てられたチャンクにおけるサブチャンクの先頭位置を示す。このチャンク内オフセットは、LBAによって表される。
スワップフラグは、対応するサブチャンクについて、スナップショットボリュームとコピー元ボリュームとの間でのデータのスワップが実行済みかを示すフラグ情報である。スワップが未実行の場合、スワップフラグは0に設定され、スワップが実行済みの場合、スワップフラグは1に設定される。
なお、サブチャンクにチャンクが割り当てられていない場合(すなわち、スナップショットボリューム内の対応するサブチャンクが更新されていない場合)、チャンク番号、チャンク内オフセットおよびスワップフラグの各項目は、データがないことを示すNULLとなる。
次に、サブチャンク管理テーブル152には、有効サブチャンク数、あふれチャンク番号、あふれ開始オフセットおよびあふれ容量が登録される。
有効サブチャンク数は、データが格納されている(すなわち、チャンクが割り当てられている)サブチャンクの数を示す。
あふれチャンク番号は、スナップショットボリュームに割り当てられているチャンクのうち、空き領域が存在する「あふれチャンク」のチャンク番号を示す。
あふれ開始オフセットは、あふれチャンクの領域のうち、対応するスナップショットボリュームのデータが格納されている領域の先頭位置を示す。このあふれ開始オフセットは、LBAによって表される。
あふれ容量は、あふれチャンク領域に格納されているデータのうち、対応するスナップショットボリュームのデータのサイズを示す。このあふれ容量は、該当データ領域の末尾LBAから先頭LBAを減算した値によって表される。
なお、対応するスナップショットボリュームに割り当てられたチャンクの中に、空き領域を含むあふれチャンクが存在しない場合、サブチャンク管理テーブル152の各項目はNULLとなる。
図10は、チャンクデータのマージ処理例を示す図である。図7に示したように、スナップショットボリュームに対してチャンクが割り当てられると、そのチャンクに対してデータが先頭側から順に格納される。しかし、このような処理を行ったとしても、割り当てられたチャンクの末尾側には空き領域が発生する場合がある。
そこで、本実施の形態では、ある世代のスナップショットボリュームに割り当てられたチャンクの中に、空き領域を含むあふれチャンクが存在する場合に、そのあふれチャンク内のデータを、それより前の世代のスナップショットボリュームに割り当てられたあふれチャンクに移動させる。これにより、複数世代のスナップショットボリュームのデータを1つのチャンクにマージする「マージ処理」が実行される。このマージ処理は、各世代のスナップショットボリュームに対応するチャンク管理テーブル152を用いて実行される。
図10の例では、第1世代(世代番号:1)のスナップショットボリュームに対してチャンクCK11~CK13が割り当てられており、それらのうちチャンクCK13に空き領域が存在している。すなわち、チャンクCK13があふれチャンクとなる。第1世代のスナップショットボリュームに対応するチャンク管理テーブル152aには、あふれチャンク番号としてCK13が登録されている。また、あふれ開始オフセットとして、チャンクCK13の先頭LBAを示す0x00が登録されている。また、あふれ容量として、サブチャンク2個分を示す0x20が登録されている。
また、第2世代(世代番号:2)のスナップショットボリュームに対してチャンクCK21,CK22が割り当てられており、それらのうちチャンクCK22に空き領域が存在している。すなわち、チャンクCK22があふれチャンクとなる。第2世代のスナップショットボリュームに対応するチャンク管理テーブル152bには、あふれチャンク番号としてCK22が登録されている。また、あふれ開始オフセットとして、チャンクCK22の先頭LBAを示す0x00が登録されている。また、あふれ容量として、サブチャンク5個分を示す0x50が登録されている。
このようなケースにおいて、第2世代のスナップショットボリュームに割り当てられたチャンクCK22が、マージ処理対象として選択されたとする。この場合、それより前の世代のスナップショットボリュームについてのあふれチャンクの中に、チャンクCK22に格納されているデータ(あふれデータ)を格納可能なあふれチャンクが存在するかが判定される。この判定は、前の世代のスナップショットボリュームについてのチャンク管理テーブル152に登録されたあふれ開始オフセットおよびあふれ容量に基づいて実行可能である。
図10の例では、第1世代のスナップショットボリュームについて、このような条件を満たすあふれチャンクが存在すると判定される。すると、チャンクCK22に格納されていたあふれデータが、第1世代のスナップショットボリュームについてのあふれチャンク(チャンクCK13)に移動される。そして、第2世代のスナップショットボリュームに対応するチャンク管理テーブル152bにおいて、あふれチャンク番号がチャンクCK13に更新され、あふれ開始オフセットが、チャンクCK13における該当データの先頭LBAを示す0x20に更新される。
また、格納データがなくなったチャンクCK22は解放され、ストレージプールPL1に含まれる未使用チャンクとして管理される。このようにして、空き領域を含むあふれチャンクの数を減少させ、格納データがなくなったあふれチャンクを解放してその再利用を可能にすることができる。したがって、チャンク(物理領域)の使用効率を向上させることができる。
次に、CM110の処理について、フローチャートを用いて説明する。
図11は、スナップショット作成処理の手順を示すフローチャートの例である。
[ステップS11]コピー制御部142は、管理サーバ220からスナップショット作成要求を受信する。このとき、スナップショットの作成元とするボリューム(コピー元ボリューム)が指定される。
[ステップS12]コピー制御部142は、指定されたコピー元ボリュームと新たなスナップショットボリュームとの間のスナップショットセッションを示す情報を、セッション管理テーブル131に設定する。
[ステップS13]コピー制御部142は、設定されたスナップショットセッションに対応するサブチャンク変換テーブル151およびサブチャンク管理テーブル152を作成し、コピー管理データ132に登録する。このとき、サブチャンク変換テーブル151には、各サブチャンク番号に対応するレコードが登録され、サブチャンク番号以外の項目はNULLとなる。また、サブチャンク管理テーブル152の各項目もNULLとなる。
図12、図13は、書き込み処理の手順を示すフローチャートの例である。
[ステップS21]ホストサーバ210から、ボリュームに対する書き込み要求がライトデータとともに送信され、I/O制御部141は、書き込み要求とライトデータを受信する。このとき、書き込み先のボリューム名と、書き込み先領域(LBAによるアドレス領域)とが指定される。I/O制御部141は、指定されたボリューム名および書き込み先領域をコピー制御部142に通知して、どのボリュームに書き込むべきかを問い合わせる。
[ステップS22]コピー制御部142は、セッション管理テーブル131を参照し、書き込み先として指定されたボリュームについてのスナップショットセッションが設定されているかを判定する。該当するスナップショットセッションが設定されている場合、処理がステップS23に進められ、設定されていない場合、処理がステップS24に進められる。
[ステップS23]コピー制御部142は、書き込み先としてコピー元ボリュームが指定されている場合、そのボリュームについてのスナップショットセッションの情報に基づき、最新世代のスナップショットボリュームに対応するサブチャンク変換テーブル151を特定する。また、書き込み先としてスナップショットボリュームが指定されている場合、そのボリュームについてのスナップショットセッションの情報に基づき、指定されたスナップショットボリュームの世代に対応するサブチャンク変換テーブル151を特定する。
コピー制御部142は、このようにして特定されたサブチャンク変換テーブル151から、書き込み要求によって指定された書き込み先領域に対応するサブチャンクのレコードを特定し、特定されたレコードからスワップフラグを読み取る。スワップフラグが1の場合(すなわち、スワップ処理を実行済みの場合)、処理がステップS24に進められる。一方、スワップフラグが0またはNULLの場合、処理がステップS25に進められる。
[ステップS24]コピー制御部142は、ライトデータを書き込み先として指定されたボリュームに書き込むようにI/O制御部141に通知する。I/O制御部141は、この通知に応じて、ライトデータをこのボリュームにおける指定された書き込み先領域に書き込み、書き込みが完了するとホストサーバ210に完了応答を送信する。
ステップS22でNoと判定された場合、書き込み先はコピー元ボリュームとなる。また、ステップS23でYesと判定された場合、書き込み先としてコピー元ボリュームが指定されていれば当該コピー元ボリュームに書き込まれ、書き込み先としてスナップショットボリュームが指定されていれば当該スナップショットボリュームに書き込まれる。
[ステップS25]コピー制御部142は、書き込み要求によって指定された書き込み先ボリュームを判定する。書き込み先としてコピー元ボリュームが指定されている場合、処理がステップS26に進められ、書き込み先としてスナップショットボリュームが指定されている場合、処理がステップS32に進められる。
[ステップS26]コピー制御部142は、スナップショットセッションの情報に基づき、書き込み先のコピー元ボリュームに対応する最新世代のスナップショットボリュームを特定し、そのスナップショットボリュームに対応するサブチャンク変換テーブル151を特定する。コピー制御部142は、特定されたサブチャンク変換テーブル151から書き込み先領域に対応するサブチャンクのレコードを特定し、特定されたレコードからスワップフラグを読み取る。スワップフラグが0の場合、処理がステップS27に進められ、スワップフラグがNULLの場合、処理がステップS28に進められる。
[ステップS27]ステップS26でスワップフラグが0の場合には、最新世代のスナップショットボリュームにおける該当サブチャンクにチャンクが割り当て済みであり、なおかつ、スワップ処理が未実行となっている。このケースでは、最新世代のスナップショットボリュームにおける該当サブチャンクに、コピー元ボリュームの対応するサブチャンクのデータが退避されている。この場合、コピー制御部142は、ライトデータを最新世代のスナップショットボリュームに書き込む(上書きする)ようにI/O制御部141に通知する。I/O制御部141は、この通知に応じて、ライトデータをこのボリュームにおける指定された書き込み先領域に書き込み、書き込みが完了するとホストサーバ210に完了応答を送信する。これにより、スナップショットボリュームに退避された、コピー元ボリュームの更新データが、さらに上書きして更新される。
[ステップS28]ステップS26でスワップフラグがNULLの場合には、最新世代のスナップショットボリュームが作成された後に、コピー元ボリュームにおける該当サブチャンクが更新されておらず、このスナップショットボリュームの該当サブチャンクにチャンクが割り当てられていない。このケースでは、ライトデータは最新世代のスナップショットボリュームに退避される。
コピー制御部142は、最新世代のスナップショットボリュームに対応するサブチャンク管理テーブル152を参照し、このスナップショットボリュームに割り当てられたチャンクの中に空き領域のあるチャンク(あふれチャンク)が存在するかを判定する。サブチャンク管理テーブル152に有効なデータが登録されている場合、あふれチャンクが存在すると判定される。あふれチャンクが存在する場合、処理がステップS29に進められ、あふれチャンクが存在しない場合、処理がステップS30に進められる。
[ステップS29]コピー制御部142は、ライトデータの書き込み先として、割り当て済みチャンク(あふれチャンク)の空き領域の先頭アドレスをI/O制御部141に通知する。I/O制御部141は、この通知に応じて、ライトデータをこのアドレス領域に書き込み、書き込みが完了するとホストサーバ210に完了応答を送信する。これにより、あふれチャンクの空き領域にライトデータが前詰めで追記される。
また、コピー制御部142は、ステップS28で参照されたサブチャンク管理テーブル152のあふれ開始オフセットおよびあふれ容量を更新する。開始オフセットとしては空き領域の先頭アドレスが上書き登録され、あふれ容量としては元の値にライトデータのサイズが加算される。
[ステップS30]コピー制御部142は、最新世代のスナップショットボリューム(SSV)に対して、ストレージプールPL1から未使用のチャンクを新規に割り当てる。コピー制御部142は、ライトデータの書き込み先として、この新規チャンクの先頭アドレスをI/O制御部141に通知する。I/O制御部141は、この通知に応じて、ライトデータをこのチャンクの先頭領域に書き込み、書き込みが完了するとホストサーバ210に完了応答を送信する。
また、コピー制御部142は、ステップS28で参照されたサブチャンク管理テーブル152に、あふれチャンク番号として新規チャンクのチャンク番号を登録し、あふれ開始オフセットとして先頭LBAを登録し、あふれ容量としてライトデータのサイズを登録する。
[ステップS31]コピー制御部142は、最新世代のスナップショットに対応するサブチャンク変換テーブル151を特定する。コピー制御部142は、特定されたサブチャンク変換テーブル151における該当サブチャンクのレコードに、チャンク番号およびチャンク内オフセットを登録し、そのレコードのスワップフラグに0を設定する。
[ステップS32]コピー制御部142は、書き込み先のスナップショットボリュームに対応するサブチャンク変換テーブル151を特定する。コピー制御部142は、特定されたサブチャンク変換テーブル151から書き込み先領域に対応するサブチャンクのレコードを特定し、特定されたレコードからスワップフラグを読み取る。スワップフラグが0の場合、処理がステップS33に進められ、スワップフラグがNULLの場合、処理がステップS36に進められる。
[ステップS33]ステップS32でスワップフラグが0の場合には、書き込み先のスナップショットボリュームにおける該当サブチャンクにチャンクが割り当て済みであり、そのチャンクに対してコピー元ボリュームの更新データが格納されている。この場合、スナップショットボリュームに格納された更新データをコピー元ボリュームに戻した後に、スナップショットボリュームにライトデータが書き込まれる。
したがって、コピー制御部142は、まず、書き込み先のスナップショットボリューム(SSV)における該当サブチャンクのデータを、コピー元ボリュームにおける該当サブチャンクに転送するように、I/O制御部141に指示する。I/O制御部141は、この指示に応じたデータ転送処理を実行する。
[ステップS34]コピー制御部142は、書き込み先のスナップショットボリュームに対応するサブチャンク変換テーブル151を特定する。コピー制御部142は、特定されたサブチャンク変換テーブル151から書き込み先領域に対応するサブチャンクのレコードを特定し、特定されたレコードのスワップフラグを1に設定(更新)する。
[ステップS35]コピー制御部142は、書き込み先のスナップショットボリュームにおける該当サブチャンクにライトデータを書き込むように、I/O制御部141に指示する。I/O制御部141は、この指示に応じた書き込み処理を実行し、処理が完了するとホストサーバ210に完了応答を送信する。
[ステップS36]ステップS32でスワップフラグがNULLの場合には、書き込み先のスナップショットボリュームが作成された後に、コピー元ボリュームにおける該当サブチャンクが更新されておらず、このスナップショットボリュームの該当サブチャンクにチャンクが割り当てられていない。この場合、ライトデータはスナップショットボリュームに書き込まれる。
コピー制御部142は、書き込み先のスナップショットボリュームに対応するサブチャンク管理テーブル152を参照し、このスナップショットボリュームに割り当てられたチャンクの中に空き領域のあるチャンク(あふれチャンク)が存在するかを判定する。サブチャンク管理テーブル152に有効なデータが登録されている場合、あふれチャンクが存在すると判定される。あふれチャンクが存在する場合、処理がステップS37に進められ、あふれチャンクが存在しない場合、処理がステップS38に進められる。
[ステップS37]コピー制御部142は、ライトデータの書き込み先として、割り当て済みチャンク(あふれチャンク)の空き領域の先頭アドレスをI/O制御部141に通知する。I/O制御部141は、この通知に応じて、ライトデータをこのアドレス領域に書き込み、書き込みが完了するとホストサーバ210に完了応答を送信する。これにより、あふれチャンクの空き領域にライトデータが前詰めで追記される。
また、コピー制御部142は、ステップS36で参照されたサブチャンク管理テーブル152のあふれ開始オフセットおよびあふれ容量を更新する。開始オフセットとしては空き領域の先頭アドレスが上書き登録され、あふれ容量としては元の値にライトデータのサイズが加算される。
[ステップS38]コピー制御部142は、書き込み先のスナップショットボリューム(SSV)に対して、ストレージプールPL1から未使用のチャンクを新規に割り当てる。コピー制御部142は、ライトデータの書き込み先として、この新規チャンクの先頭アドレスをI/O制御部141に通知する。I/O制御部141は、この通知に応じて、ライトデータをこのチャンクの先頭領域に書き込み、書き込みが完了するとホストサーバ210に完了応答を送信する。
また、コピー制御部142は、ステップS36で参照されたサブチャンク管理テーブル152に、あふれチャンク番号として新規チャンクのチャンク番号を登録し、あふれ開始オフセットとして先頭LBAを登録し、あふれ容量としてライトデータのサイズを登録する。
[ステップS39]コピー制御部142は、書き込み先のスナップショットに対応するサブチャンク変換テーブル151を特定する。コピー制御部142は、特定されたサブチャンク変換テーブル151における該当サブチャンクのレコードに、チャンク番号およびチャンク内オフセットを登録し、そのレコードのスワップフラグに1を設定する。
図14は、読み出し処理の手順を示すフローチャートの例である。
[ステップS41]ホストサーバ210から、ボリュームからの読み出し要求が送信され、I/O制御部141がこれを受信する。このとき、読み出し元のボリューム名と、読み出し元領域(LBAによるアドレス領域)とが指定される。I/O制御部141は、指定されたボリューム名および読み出し元領域をコピー制御部142に通知して、リードデータをどのボリュームから読み出すべきかを問い合わせる。
[ステップS42]コピー制御部142は、セッション管理テーブル131を参照し、読み出し元として指定されたボリュームについてのスナップショットセッションが設定されているかを判定する。該当するスナップショットセッションが設定されている場合、処理がステップS43に進められ、設定されていない場合、処理がステップS44に進められる。
[ステップS43]コピー制御部142は、読み出し元としてコピー元ボリュームが指定されている場合、そのボリュームについてのスナップショットセッションの情報に基づき、最新世代のスナップショットボリュームに対応するサブチャンク変換テーブル151を特定する。また、読み出し元としてスナップショットボリュームが指定されている場合、そのボリュームについてのスナップショットセッションの情報に基づき、指定されたスナップショットボリュームの世代に対応するサブチャンク変換テーブル151を特定する。
コピー制御部142は、このようにして特定されたサブチャンク変換テーブル151から、読み出し要求によって指定された読み出し元領域に対応するサブチャンクのレコードを特定し、特定されたレコードからスワップフラグを読み取る。スワップフラグが1の場合(すなわち、スワップ処理を実行済みの場合)、処理がステップS44に進められる。一方、スワップフラグが0またはNULLの場合、処理がステップS45に進められる。
[ステップS44]コピー制御部142は、リードデータを読み出し元として指定されたボリュームから読み出すようにI/O制御部141に通知する。I/O制御部141は、この通知に応じて、リードデータをこのボリュームにおける指定された読み出し元領域から読み出し、ホストサーバ210に送信する。
ステップS42でNoと判定された場合、読み出し元はコピー元ボリュームとなる。また、ステップS43でYesと判定された場合、読み出し元としてコピー元ボリュームが指定されていれば当該コピー元ボリュームから読み出され、読み出し元としてスナップショットボリュームが指定されていれば当該スナップショットボリュームから読み出される。
[ステップS45]ステップS43で読み取られたスワップフラグが0の場合、処理がステップS46に進められ、スワップフラグがNULLの場合、処理がステップS47に進められる。
[ステップS46]コピー制御部142は、読み出し要求によって指定された読み出し元ボリュームを判定する。読み出し元としてコピー元ボリュームが指定されている場合、処理がステップS48に進められ、読み出し元としてスナップショットボリュームが指定されている場合、処理がステップS47に進められる。
[ステップS47]コピー制御部142は、リードデータをコピー元ボリュームから読み出すようにI/O制御部141に通知する。I/O制御部141は、この通知に応じて、リードデータをコピー元ボリュームにおける指定された読み出し元領域から読み出し、ホストサーバ210に送信する。
ステップS45でNoと判定されたケースは、コピー元ボリュームの領域のうち、最新世代のスナップショットボリュームの作成後に更新されていない領域からの読み出しが要求されたケースである。また、ステップS46でNoと判定されたケースは、スナップショットボリュームにおけるスワップ処理が未実行の領域からの読み出しが要求されたケースである。いずれのケースでも、リードデータはコピー元ボリュームから読み出される。
[ステップS48]コピー制御部142は、コピー元ボリュームに対応する最新世代のスナップショットボリューム(SSV)からリードデータを読み出すようにI/O制御部141に通知する。I/O制御部141は、この通知に応じて、リードデータを該当スナップショットボリュームにおける指定された読み出し元領域から読み出し、ホストサーバ210に送信する。
図15は、スワップ処理の手順を示すフローチャートの例である。図15の処理は、例えば、CM110の処理負荷を示す指標が所定の閾値以下になった場合に実行される。処理負荷を示す指標としては、例えば、CPU使用率、メモリ使用率、ディスク使用率などが用いられる。
[ステップS51]コピー制御部142は、あるコピー元ボリュームに対応するスナップショットボリューム(SSV)のうち、最古世代のスナップショットボリュームを処理対象として選択する。
[ステップS52]コピー制御部142は、処理対象として選択されたスナップショットボリュームについての未選択のサブチャンクの中から、サブチャンク番号が最も若い(値が小さい)サブチャンクを選択する。
[ステップS53]コピー制御部142は、選択されたスナップショットボリュームに対応するサブチャンク変換テーブル151に基づき、選択されたサブチャンクにチャンクが割り当てられているかを判定する。サブチャンクにチャンクを割り当て済みの場合、処理がステップS54に進められ、サブチャンクにチャンクが割り当てられていない場合、処理がステップS57に進められる。
[ステップS54]コピー制御部142は、選択されたスナップショットボリュームに対応するサブチャンク変換テーブル151から、選択されたサブチャンクに対応するスワップフラグを読み取る。スワップフラグが1の場合(すなわち、選択されたサブチャンクがスワップ済みの場合)、処理がステップS57に進められ、スワップフラグが0の場合、処理がステップS55に進められる。
[ステップS55]コピー制御部142は、スナップボリュームから選択されたサブチャンクに格納されたデータと、コピー元ボリューム上の対応するサブチャンクに格納されたデータとをスワップする。
[ステップS56]コピー制御部142は、ステップS54で参照したスワップフラグを1に設定(更新)する。
[ステップS57]コピー制御部142は、選択されたスナップショットボリュームにおいて、未選択の次のサブチャンクが存在するかを判定する。サブチャンクが存在する場合、処理がステップS58に進められ、サブチャンクが存在しない場合(すなわち、スナップショットボリュームの全サブチャンクを選択済みの場合)、処理がステップS59に進められる。
[ステップS58]コピー制御部142は、選択されたスナップショットボリュームのサブチャンクのうち、未選択の次のサブチャンクを選択される。この後、選択されたサブチャンクを処理対象としてステップS53以降の処理が実行される。
[ステップS59]コピー制御部142は、選択されたスナップショットボリュームに対する1つ後の世代(次世代)のスナップショットボリューム(SSV)が存在するかを判定する。次世代のスナップショットボリュームが存在する場合、処理がステップS60に進められ、次世代のスナップショットボリュームが存在しない場合、スワップ処理が終了される。
[ステップS60]コピー制御部142は、1つ後の世代(次世代)のスナップショットボリューム(SSV)を選択する。この後、選択されたスナップショットボリュームを処理対象としてステップS52以降の処理が実行される。
図16は、チャンクデータのマージ処理手順を示すフローチャートの例である。
[ステップS71]コピー制御部142は、サブチャンク管理テーブル152に基づき、割り当てられたチャンクの中に空き領域を含むあふれチャンクが存在するスナップショットボリューム(SSV)を1つ選択する。以下、選択されたスナップショットボリュームに対応するあふれチャンクを「マージ元チャンク」と記載する。
[ステップS72]コピー制御部142は、直前に実行されたステップS71またはステップS73で選択されたスナップショットボリュームについて、1つ前の世代のスナップショットボリューム(SSV)が存在するかを判定する。該当スナップショットボリュームが存在する場合、処理がステップS73に進められ、該当スナップショットボリュームが存在しない場合、マージ処理が終了する。
[ステップS73]コピー制御部142は、ステップS72で「存在する」と判定されたスナップショットボリューム(1つ前の世代のスナップショットボリューム)を選択する。
[ステップS74]コピー制御部142は、ステップS73で選択されたスナップショットボリュームに対応するサブチャンク管理テーブル152に基づき、このスナップショットボリュームに割り当てられたチャンクの中にあふれチャンクが存在するかを判定する。あふれチャンクが存在する場合、処理がステップS75に進められる。以下、このスナップショットボリュームに対応するあふれチャンクを「マージ先チャンク」と記載する。一方、あふれチャンクが存在しない場合、処理がステップS72に進められ、さらに1つ前の世代のスナップショットボリュームが選択される。
[ステップS75]コピー制御部142は、ステップS71で選択されたスナップショットボリュームに対応するマージ元チャンクのあふれ容量と、ステップS73で選択されたスナップショットボリュームに対応するマージ先チャンクのあふれ容量との和を算出する。あふれ容量とは、チャンクに格納されているデータの容量を示す。ただし、マージ先チャンクに複数世代のスナップショットボリュームに対応するデータが格納されている場合、それらのデータの総容量がマージ先チャンクのあふれ容量とされる。
コピー制御部142は、算出された和の値がチャンクサイズ以下かを判定する。和の値がチャンクサイズ以下の場合、処理がステップS76に進められる。一方、和の値がチャンクサイズを超える場合、処理がステップS72に進められ、さらに1つ前の世代のスナップショットボリュームが選択される。
[ステップS76]コピー制御部142は、あふれチャンクのデータをマージする。具体的には、ステップS71で選択されたスナップショットボリュームに対応するマージ元チャンクに格納されているデータが、ステップS73で選択されたスナップショットボリュームに対応するマージ先チャンクに移動される。
[ステップS77]コピー制御部142は、マージ元チャンクが属するスナップショットボリュームに対応するサブチャンク管理テーブル152を更新する。このとき、あふれチャンク番号が、移動先のチャンクのチャンク番号に更新され、あふれ開始オフセットが、移動先のチャンクに書き込まれた領域の先頭LBAに更新される。
ただし、移動先のチャンクの空き領域がなくなった場合には、ステップS71,S73で選択されたスナップショットボリュームの両方に対応するサブチャンク管理テーブル152において、各項目からデータが削除され、各項目がNULLにされる。
[ステップS78]コピー制御部142は、データの移動元チャンク(マージ元チャンク)を解放する。すなわち、マージ元チャンクが、ストレージプールPL1に含まれる未使用チャンクとして管理される。
なお、上記のマージ処理は、例えば、新たな世代のスナップショット作成が要求されたときに実行されてもよい。この場合、ステップS71で選択されるスナップショットボリュームは、作成が要求された世代の1つ前の世代(作成要求の受信直前における最新世代)のスナップショットボリュームとなる。そして、このスナップショットボリュームについてあふれチャンクが存在しない場合には、マージ処理は実行されないことになる。
なお、上記の各実施の形態に示した装置(例えば、ストレージ制御装置1、CM110、ホストサーバ210、管理サーバ220)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク(Blu-ray Disc:BD、登録商標)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CDなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
1 ストレージ制御装置
2 処理部
3 スワップ管理情報
D1~D4,D2a データ
S1~S3,S2a,S3a ステップ
V1,V2 記憶領域

Claims (9)

  1. 第1の記憶領域に対応するスナップショットの作成要求を受信した後に、前記第1の記憶領域に含まれる複数の単位領域のうち第1の単位領域に対する第1のデータの書き込み要求を受信すると、前記スナップショットに対応する第2の記憶領域における前記第1の単位領域に前記第1のデータを書き込み、前記書き込み要求に対する完了応答を送信し、
    前記第1のデータの書き込み後の所定のタイミングで、前記第1の記憶領域における前記第1の単位領域と前記第2の記憶領域における前記第1の単位領域との間でデータをスワップする、処理部、
    を有するストレージ制御装置。
  2. 前記処理部は、
    前記第2の記憶領域における前記第1の単位領域に前記第1のデータを書き込むと、前記第1の単位領域におけるスワップ処理が未実行であることをスワップ管理情報に記録し、
    前記第1の記憶領域における前記第1の単位領域と前記第2の記憶領域における前記第1の単位領域との間でデータをスワップすると、前記第1の単位領域におけるスワップ処理が実行済みであることを前記スワップ管理情報に記録し、
    前記第1の記憶領域または前記第2の記憶領域における前記複数の単位領域のいずれかからのデータ読み出し要求を受信すると、前記スワップ管理情報に基づいて、読み出しが要求されたデータを前記第1の記憶領域と前記第2の記憶領域のどちらから読み出すかを決定する、
    請求項1記載のストレージ制御装置。
  3. 前記スワップは、前記ストレージ制御装置の処理負荷を示す指標が所定の閾値以下になったときに実行される、
    請求項1または2記載のストレージ制御装置。
  4. 前記第2の記憶領域は、データの格納時に複数の単位物理領域の中から選択された単位物理領域が割り当てられる仮想ボリュームであり、前記複数の単位物理領域のそれぞれのサイズは前記複数の単位領域のそれぞれのサイズより大きく、
    前記処理部は、
    前記第2の記憶領域における前記第1の単位領域に前記第1のデータを書き込む際に、前記複数の単位物理領域のうち第1の単位物理領域を前記第2の記憶領域に割り当て、前記第1の単位物理領域に対して前記第1のデータを書き込み、
    前記第2の記憶領域における前記複数の単位領域のうち第2の単位領域に対して第2のデータを書き込む際、割り当て済みの前記第1の単位物理領域に前記第2のデータを格納可能な空き領域がある場合には、前記第2のデータを前記第1の単位物理領域に書き込む、
    請求項1乃至3のいずれか1項に記載のストレージ制御装置。
  5. 前記第2の記憶領域に含まれる前記複数の単位領域のそれぞれについて、前記複数の単位物理領域の中から割り当てられた単位物理領域と当該単位物理領域における対応するデータの格納位置とが登録された割り当て管理情報を記憶する記憶部をさらに有し、
    前記処理部は、前記管理情報に基づいて前記第2の記憶領域からデータを読み出す、
    請求項4記載のストレージ制御装置。
  6. 前記処理部は、
    前記第1の記憶領域に対応する次世代のスナップショットの作成要求に応じて、前記次世代のスナップショットに対応する第3の記憶領域を、データの格納時に前記複数の単位物理領域の中から選択された単位物理領域が割り当てられる仮想ボリュームとして作成し、
    前記第3の記憶領域における前記複数の単位領域のうち第3の単位領域に対して第3のデータを書き込む際に、前記複数の単位物理領域のうち第2の単位物理領域を前記第3の記憶領域に割り当て、前記第2の単位物理領域に対して前記第3のデータを書き込み、
    前記第3の記憶領域における前記複数の単位領域のうち第4の単位領域に対して第4のデータを書き込む際、割り当て済みの前記第2の単位物理領域に前記第4のデータを格納可能な空き領域がある場合には、前記第4のデータを前記第2の単位物理領域に書き込む、
    請求項4記載のストレージ制御装置。
  7. 前記処理部は、
    前記複数の単位物理領域のうち前記第3の記憶領域に割り当てられた単位物理領域の中に、空き領域を含む第3の単位物理領域が存在する場合に、前記複数の単位物理領域のうち前記第2の記憶領域に割り当てられた単位物理記憶領域の中に、前記第3の単位物理領域に格納されたデータを格納可能な空き領域を含む第4の単位物理領域が存在するかを判定し、
    前記第4の単位物理領域が存在する場合、前記第3の単位物理領域に格納されたデータを前記第4の単位物理領域の空き領域に移動させ、移動後に前記第3の単位物理領域を未使用領域として解放する、
    請求項6記載のストレージ制御装置。
  8. 前記複数の単位物理領域の中から前記第2の記憶領域に割り当てられた単位物理領域のうち、空き領域が存在する単位物理領域を示す識別情報と、当該単位物理領域における空き容量を識別可能にする容量情報とが記録された物理領域管理情報を記憶する記憶部をさらに有し、
    前記処理部は、前記複数の単位物理領域のうち前記第2の記憶領域に割り当てられた単位物理記憶領域の中に前記第4の単位物理領域が存在するかを、前記物理領域管理情報に基づいて判定する、
    請求項7記載のストレージ制御装置。
  9. コンピュータが、
    第1の記憶領域に対応するスナップショットの作成要求を受信した後に、前記第1の記憶領域に含まれる複数の単位領域のうち第1の単位領域に対する第1のデータの書き込み要求を受信すると、前記スナップショットに対応する第2の記憶領域における前記第1の単位領域に前記第1のデータを書き込み、前記書き込み要求に対する完了応答を送信し、
    前記第1のデータの書き込み後の所定のタイミングで、前記第1の記憶領域における前記第1の単位領域と前記第2の記憶領域における前記第1の単位領域との間でデータをスワップする、
    ストレージ制御方法。
JP2021072463A 2021-04-22 2021-04-22 ストレージ制御装置およびストレージ制御方法 Pending JP2022166986A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2021072463A JP2022166986A (ja) 2021-04-22 2021-04-22 ストレージ制御装置およびストレージ制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021072463A JP2022166986A (ja) 2021-04-22 2021-04-22 ストレージ制御装置およびストレージ制御方法

Publications (1)

Publication Number Publication Date
JP2022166986A true JP2022166986A (ja) 2022-11-04

Family

ID=83852846

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021072463A Pending JP2022166986A (ja) 2021-04-22 2021-04-22 ストレージ制御装置およびストレージ制御方法

Country Status (1)

Country Link
JP (1) JP2022166986A (ja)

Similar Documents

Publication Publication Date Title
JP6708929B2 (ja) ストレージ制御装置、ストレージシステムおよびストレージ制御プログラム
US10031703B1 (en) Extent-based tiering for virtual storage using full LUNs
US8423739B2 (en) Apparatus, system, and method for relocating logical array hot spots
US7694087B2 (en) Duplicate data storing system, duplicate data storing method, and duplicate data storing program for storage device
US7461201B2 (en) Storage control method and system for performing backup and/or restoration
US20080270698A1 (en) Data migration including operation environment information of a host computer
JP2007537522A (ja) 仮想テープ内の仮想ボリューム・データの動的ローディング
JP2009093571A (ja) 記憶制御装置、記憶制御装置のデータアーカイブ方法及びストレージシステム
JP2008015769A (ja) ストレージシステム及び書き込み分散方法
KR20130083356A (ko) 메타데이터 지속성을 위한 방법
US10789007B2 (en) Information processing system, management device, and control method
KR20000022716A (ko) 로그 구조화 목표 저장장치를 사전에 구성하여 볼륨을 효율적으로 복사하는 방법 및 장치
US11099768B2 (en) Transitioning from an original device to a new device within a data storage array
US20130246886A1 (en) Storage control apparatus, storage system, and storage control method
US20160246587A1 (en) Storage control device
JP6011153B2 (ja) ストレージシステム、ストレージ制御方法およびストレージ制御プログラム
JP6402557B2 (ja) ストレージ装置、ストレージ制御方法およびストレージ制御プログラム
US11429431B2 (en) Information processing system and management device
US11740823B2 (en) Storage system and storage control method
JP2017211920A (ja) ストレージ制御装置、ストレージシステム、ストレージ制御方法およびストレージ制御プログラム
US7073029B2 (en) Storage system using fast storage and log-structured storage
JP2014519062A (ja) ストレージシステム及びその論理ユニット管理方法
US11474750B2 (en) Storage control apparatus and storage medium
JP7323769B2 (ja) ストレージ装置、ストレージシステムおよびプログラム
US20160224273A1 (en) Controller and storage system

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20240111