(57)【要約】【課題】記憶容量の拡張化自由度を高める。【解決手段】ストレージ制御装置１は、ストレージグループ１ａと制御部１ｂを備える。ストレージグループ１ａは、複数の記憶装置Ｍ１、・・・、Ｍｎを含む。制御部１ｂは、ストレージグループ１ａの容量拡張を行う場合、容量拡張後のストレージグループ内の記憶装置の数に応じた新データ格納領域単位を生成する。そして、制御部１ｂは、容量拡張後のストレージグループに対して、新データ格納領域単位でデータ再配置を行う。ストレージ制御装置１は、旧データ格納領域単位に依存した記憶装置の増設による記憶容量の拡張化と比較して、小規模な記憶容量の拡張化を可能にする。【選択図】図１
2018181172.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶装置を含むストレージグループの容量拡張を行う場合、容量拡張後の前記ストレージグループ内の前記記憶装置の数に応じた新データ格納領域単位を生成し、前記新データ格納領域単位で、容量拡張後の前記ストレージグループのデータ再配置を行う制御部、
を有するストレージ制御装置。
【請求項２】
前記制御部は、容量拡張前の前記ストレージグループに旧データ格納領域単位で格納されているデータを一時記憶領域へ移動し、前記一時記憶領域に移動した前記データを前記新データ格納領域単位に書き戻して、容量拡張後の前記ストレージグループの前記データ再配置を行う請求項１記載のストレージ制御装置。
【請求項３】
前記制御部は、前記旧データ格納領域内のデータが、前記記憶装置上に格納されるユーザデータの物理アドレスを少なくとも管理する第１の管理データ、前記記憶装置上に格納される前記第１の管理データの物理アドレスを少なくとも管理する第２の管理データ、または前記ユーザデータに応じて、異なる処理の前記データ再配置を行う請求項２記載のストレージ制御装置。
【請求項４】
前記旧データ格納領域内のデータが前記第１の管理データの場合、
前記制御部は、
容量拡張前の前記ストレージグループに旧データ格納領域単位で格納される前記第１の管理データを、前記旧データ格納領域単位で一時記憶領域へ移動して前記第１の管理データの有効性を判別し、
前記第１の管理データが有効な場合は、前記一時記憶領域から前記第１の管理データを読み出してバッファへ書き込み、
前記第１の管理データの物理アドレスを管理する前記第２の管理データを更新し、
前記バッファがバッファフルになったら、前記バッファに書き込んだ前記第１の管理データを前記新データ格納領域単位に書き戻して、容量拡張後の前記ストレージグループの前記データ再配置を行う請求項３記載のストレージ制御装置。
【請求項５】
前記制御部は、前記旧データ格納領域に無効な前記第１の管理データがある場合、前記新データ格納領域単位の生成時に前記旧データ格納領域を解放する請求項４記載のストレージ制御装置。
【請求項６】
前記旧データ格納領域内のデータが前記第２の管理データの場合、
前記制御部は、容量拡張前の前記ストレージグループに旧データ格納領域単位で格納される前記第２の管理データを、前記旧データ格納領域単位で一時記憶領域へ移動し、前記一時記憶領域に移動した前記第２の管理データを前記新データ格納領域単位に書き戻して、容量拡張後の前記ストレージグループの前記データ再配置を行う請求項３記載のストレージ制御装置。
【請求項７】
前記旧データ格納領域内のデータが前記ユーザデータの場合、
前記制御部は、
容量拡張前の前記ストレージグループに旧データ格納領域単位で格納される前記ユーザデータを、前記旧データ格納領域単位で一時記憶領域へ移動して前記ユーザデータの有効性を判別し、
前記ユーザデータが有効な場合は、前記一時記憶領域から前記ユーザデータを読み出して第１のバッファへ書き込み、
前記ユーザデータの物理アドレスを管理する前記第１の管理データを更新して、更新後の前記第１の管理データを第２のバッファへ書き込み、
前記第１の管理データの物理アドレスを管理する前記第２の管理データを更新し、
前記第１のバッファがバッファフルになったら、前記第１のバッファに書き込んだ前記ユーザデータを前記新データ格納領域単位に書き戻して、容量拡張後の前記ストレージグループの前記データ再配置を行う請求項３記載のストレージ制御装置。
【請求項８】
前記制御部は、前記旧データ格納領域に無効な前記ユーザデータがある場合は、前記データ格納領域単位の生成時に前記旧データ格納領域を解放する請求項７記載のストレージ制御装置。
【請求項９】
前記制御部は、前記データ再配置の進捗を管理し、進捗が標示済みの記憶領域は前記新データ格納領域単位とし、進捗が未標示の記憶領域は前記旧データ格納領域とする請求項２記載のストレージ制御装置。
【請求項１０】
コンピュータに、
複数の記憶装置を含むストレージグループの容量拡張を行う場合、容量拡張後の前記ストレージグループ内の前記記憶装置の数に応じた新データ格納領域単位を生成し、前記新データ格納領域単位で、容量拡張後の前記ストレージグループのデータ再配置を行う、
処理を実行させるストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置およびストレージ制御プログラムに関する。
【背景技術】
【０００２】
ストレージシステムは、複数の記憶装置を有して、情報処理で扱う大量のデータを記録管理する。また、近年では、記憶装置として、ＨＤＤ（Hard Disk Drive）よりも高速なＳＳＤ（Solid State Drive）を用いたストレージシステムの採用が広がっている。
【０００３】
一方、ストレージシステムに格納されるデータ量は年々増加していることから、ストレージシステム内の記憶領域を効率よく使用して、実際に使用する物理記憶領域の容量を削減するための技術が注目されている。
【０００４】
物理記憶領域の容量を削減する技術として、シン・プロビジョニング（Thin Provisioning）がある。シン・プロビジョニングは、記憶装置を多重化したＲＡＩＤ（Redundant Array of Inexpensive Disks）グループを束ねてプール（ストレージプール）として管理し、仮想化された論理ボリュームに書き込まれたデータ量に応じて記憶装置の容量を割り当てる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−７９８８６号公報
【特許文献２】特表２０１４−５０６３６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
シン・プロビジョニングでは、記憶装置の容量を論理的に増加させるが、物理的な記憶容量が増加するものではないので、物理的な記憶容量の余裕が減少した際には、記憶装置の増設が行われる。また、シン・プロビジョニングの物理割当の単位（データがストライプされる単位）は、チャンク（chunk）と呼ばれる記憶領域単位で行われる。
【０００７】
記憶装置の増設時、チャンクの大きさ（チャンクサイズ）には無関係に容量拡張化が行われている。この場合、例えば、ユーザデータの物理アドレスを管理する管理データを扱うストレージシステムに対して、このような容量拡張化が実施されると、管理データの物理位置情報が変わってしまう可能性がある。
【０００８】
このため、増設前のチャンクサイズに依存して記憶装置の構成本数を増やせば、該物理位置情報が変わらないように記憶装置を増設することができる。しかし、このような記憶装置の増設を行うと、ＲＡＩＤグループ毎に記憶装置の増設数が多くなるなど、記憶容量の拡張化の自由度が低くなる。
【０００９】
１つの側面では、本発明は、記憶容量の拡張化自由度を高めたストレージ制御装置およびストレージ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、ストレージ制御装置が提供される。ストレージ制御装置は、制御部を備える。制御部１ｂは、複数の記憶装置を含むストレージグループの容量拡張を行う場合、容量拡張後のストレージグループ内の記憶装置の数に応じた新データ格納領域単位を生成し、新データ格納領域単位で、容量拡張後のストレージグループのデータ再配置を行う。
【００１１】
また、上記課題を解決するために、コンピュータに上記ストレージ制御装置と同様の制御を実行させるプログラムが提供される。
【発明の効果】
【００１２】
１側面によれば、記憶容量の拡張化自由度を高めることが可能になる。
【図面の簡単な説明】
【００１３】
【図１】ストレージ制御装置の構成の一例を示す図である。
【図２】ストレージ制御システムの構成の一例を示す図である。
【図３】プールの一例を示す図である。
【図４】ＲＡＩＤユニットの一例を示す図である。
【図５】ドライブグループ構成本数とＲＡＩＤユニットサイズとの関係の一例を示す図である。
【図６】ＲＡＩＤユニットの獲得の一例を示す図である。
【図７】ＲＡＩＤユニットの解放の一例を示す図である。
【図８】ドライブグループに書き込まれるユーザデータおよび論物メタの管理方法について説明するための図である。
【図９】メタアドレスのフォーマットの一例を示す図である。
【図１０】論物メタのフォーマットの一例を示す図である。
【図１１】ドライブグループのドライブ増設の一例を示す図である。
【図１２】ストレージ制御装置のハードウェア構成の一例を示す図である。
【図１３】ＤＧＥ処理の一例を示す図である。
【図１４】ＤＧＥ処理の全体動作を示すフローチャートである。
【図１５】メタアドレスのＤＧＥ処理の一例を示す図である。
【図１６】論物メタのＤＧＥ処理の一例を示す図である。
【図１７】論物メタのＤＧＥ処理のフローチャートを示す図である。
【図１８】ユーザデータのＤＧＥ処理の一例を示す図である。
【図１９】ユーザデータのＤＧＥ処理のフローチャートを示す図である。
【図２０】ＤＧＥ処理中のＩＯ制御の一例を示す図である。
【図２１】ＤＧＥ処理中のＩＯ制御のフローチャートを示す図である。
【発明を実施するための形態】
【００１４】
以下、本実施の形態について図面を参照して説明する。
図１はストレージ制御装置の構成の一例を示す図である。ストレージ制御装置１は、ストレージグループ１ａと制御部１ｂを備える。ストレージグループ１ａは、複数の記憶装置Ｍ１、・・・、Ｍｎを含む。
【００１５】
制御部１ｂは、ストレージグループ１ａの容量拡張を行う場合、容量拡張後のストレージグループ内の記憶装置の数に応じた新データ格納領域単位を生成する。そして、制御部１ｂは、新データ格納領域単位で、容量拡張後のストレージグループのデータ再配置を行う。
【００１６】
ここで、ストレージグループ１ａ−１は、容量拡張前であり、記憶装置Ｍ１、・・・、Ｍ６を含む。また、ストレージグループ１ａ−１の記憶領域は、旧データ格納領域単位１１、・・・、１４を含み、１つの旧データ格納領域単位は、ストライプ数５本で形成されている。
【００１７】
ストレージグループ１ａ−１に対して、記憶装置Ｍ７が追加されて、容量の拡張が行われるとする。ストレージグループ１ａ−２は、容量拡張後であり、記憶装置Ｍ１、・・・、Ｍ７を含む。制御部１ｂは、容量拡張後のストレージグループ１ａ−２内の記憶装置Ｍ１、・・・、Ｍ７の数に応じた新データ格納領域単位を生成し、新データ格納領域単位に対してデータ再配置を行う。
【００１８】
図１の例では、ストレージグループ１ａ−２の記憶領域は、新データ格納領域単位１１ａ、・・・、１５ａを含む。また、１つの新データ格納領域単位は、ストライプ数４本で形成され、ストライプサイズは、容量拡張前の旧データ格納領域単位のストライプサイズよりも伸長している。
【００１９】
このように、ストレージ制御装置１は、容量拡張後のストレージグループ内の記憶装置の数に応じた新データ格納領域単位を生成し、新データ格納領域単位でデータ再配置を行う。これにより、記憶容量の拡張化自由度を高めることが可能になり、よって、旧データ格納領域単位に依存した記憶装置の増設による記憶容量の拡張化と比較して、小規模な記憶容量の拡張化が可能になる。
【００２０】
＜システム構成＞
次にストレージ制御装置１の機能を含むストレージ制御システムについて説明する。図２はストレージ制御システムの構成の一例を示す図である。ストレージ制御システム２は、ノードブロックＮＢ１、ＮＢ２、ホスト２０−１、２０−２およびスイッチＳＷを有する。
【００２１】
ノードブロックＮＢ１は、一対のノードＮ１、Ｎ２を含み、ノードブロックＮＢ２は、一対のノードＮ３、Ｎ４を含む。ノードブロックＮＢ１は、ノードＮ１、Ｎ２間でデータの二重化や、ストレージへのデータの書き込み／読み出し処理であるＩＯ（入出力）処理の負荷分散を行う。ノードブロックＮＢ２もノードＮ３、Ｎ４間で同様の動作を行う。
【００２２】
また、ノードブロックＮＢ１、ＮＢ２は、スイッチＳＷで接続されることで、ノードブロックの拡張化が可能なスケールアウトの接続構成になっている。
ノードブロックＮＢ１は、記憶装置（ストレージデバイス）２６−１、・・・、２６−ｎを備える（ノードブロックＮＢ２内の記憶装置の図示は省略）。ノードＮ１、Ｎ２は、記憶装置２６−１、・・・、２６−ｎに対して、データのＩＯ制御を行う。
【００２３】
すなわち、ノードＮ１、Ｎ２は、ホスト２０−１、２０−２からのデータ読み出し（Read IO）およびデータ書き込み（Write IO）の要求にもとづいて、記憶装置２６−１、・・・、２６−ｎに対してＩＯ制御を行う。
【００２４】
ノードＮ１は、インタフェース部２１−１、プロセッサ２２ａ−１、２２ｂ−１、メモリ２３−１、ドライバ２４−１を含む。ノードＮ２は、インタフェース部２１−２、プロセッサ２２ａ−２、２２ｂ−２、メモリ２３−２、ドライバ２４−２を含む。
【００２５】
なお、ノードＮ１、Ｎ２は、図１のストレージ制御装置１の機能を有する。ノードＮ１、Ｎ２のプロセッサ２２ａ−１、２２ｂ−１、２２ａ−２、２２ｂ−２は、制御部１ｂの機能を実現する。また、記憶装置２６−１、・・・、２６−ｎは、ストレージグループ１ａ内の記憶装置Ｍ１、・・・、Ｍｎに対応する。
【００２６】
ノードＮ１の構成要素において、インタフェース部２１−１は、ノードＮ１と、ホスト２０−１、２０−２とをマルチパスで接続する。インタフェース部２１−１は、例えば、ＥＣ−Ｈ（Expansion Card for Host）が使用される。
【００２７】
ＥＣ−Ｈは、ＳＡＮ（Storage Area Network）を構築するインタフェースアダプタに接続される。例えば、光ファイバを利用した大規模ＳＡＮを構築するＦＣ（Fibre Channel）やＩＰ（Internet Protocol）ネットワークを利用した小中規模ＳＡＮを構築するｉＳＣＳＩ（Internet Small Computer System Interface）等に接続される。
【００２８】
プロセッサ２２ａ−１、２２ｂ−１は、例えば、ＣＰＵ（Central Processing Unit）またはＭＰＵ（Micro Processing Unit）等であって、マルチプロセッサ構成をとり、ノードＮ１内の機能全体を制御する。
【００２９】
メモリ２３−１は、ノードＮ１のメインメモリとして利用され、プロセッサ２２ａ−１、２２ｂ−１に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。
【００３０】
ドライバ２４−１は、プロセッサ２２ａ−１、２２ｂ−１と、記憶装置２６−１、・・・、２６−ｎとの間でデータ転送を行う。ドライバ２４−１は、例えば、ＰＣＩｅ（Peripheral Component Interconnect Express）プロトコルに従って、データをドライブ転送するＰＣＩｅＳＷ（Switch）が使用される。なお、ノードＮ２の構成要素もノードＮ１と同様であり説明は省略する。
【００３１】
一方、ＭＰ（Middle Plane）２５は、ノードＮ１、Ｎ２間の通信をインターコネクト（相互接続）する伝送路であり冗長化されている。
記憶装置２６−１、・・・、２６−ｎは、例えば、ＳＳＤであり、冗長アレイ化されている。記憶装置２６−１、・・・、２６−ｎは、ノードＮ１のドライバ２４−１と、ノードＮ２のドライバ２４−２との双方に接続して、ノードＮ１、Ｎ２間で共有される。
【００３２】
また、記憶装置２６−１、・・・、２６−ｎには、例えば、ＰＣＩｅを通じてＳＳＤを接続するＮＶＭｅ（Non Volatile Memory Express）規格のＳＳＤ（ＮＶＭｅ＿ＳＳＤ）が使用される。
【００３３】
＜プール＞
図３はプールの一例を示す図である。図２に示した記憶装置２６−１、・・・、２６−ｎは、プールによって管理される。プールとは、記憶装置の仮想的な集合体であり、仮想化プールＰ１１および階層化プールＰ１２に分けられる。
【００３４】
ストレージの階層化（ティアリング：Tiering）が行われた際、１つのプールに１つのティア（Tier：層）を含むプールが仮想化プールＰ１１であり、１つのプールに２以上のティアを含むプールが階層化プールＰ１２である。
【００３５】
また、ティアには、１つ以上のドライブグループが含まれる。ドライブグループは、例えば、６本から２４本の記憶装置（ドライブ）を含むグループであり、ＲＡＩＤに相当する。
【００３６】
一方、記憶装置の記憶空間は、複数のストライプで構成される。データ書き込み時、分割したデータは、ストライプに書き込まれ（ストライピング）、パリティ計算が行われて計算結果が保持され、パリティによるデータ保護が行われる。このため、ドライブグループを構成する記憶装置の内、例えば、２本はパリティデータ（ＰパリティおよびＱパリティ）を記憶するパリティデバイスとして使用される。
【００３７】
さらに、故障等によって１つの記憶装置の使用が中止されると、使用が中止された記憶装置に記憶されていたデータが再構築されて、他の記憶装置に格納されるリビルド（Rebuild）処理が行われる。この場合、ホットスペア（Hot Spare）と呼ばれる予備用記憶装置が用いられる。このため、ドライブグループを構成する記憶装置の内、例えば、１本はホットスペアとして使用される。
【００３８】
＜ＲＡＩＤユニット＞
シン・プロビジョニングの物理割当の単位は、一般に固定サイズのチャンク単位で行われ、１チャンクは１ＲＡＩＤユニットに該当する。以降の説明では、チャンクをＲＡＩＤユニットと呼称する。
【００３９】
図４はＲＡＩＤユニットの一例を示す図である。ドライブグループＤｐは、記憶装置ｄｋ０、・・・、ｄｋ５を備える。ドライブグループＤｐの記憶空間は、ストライプで形成される。ストライプは、記憶装置ｄｋ０、・・・、ｄｋ５に渡って延びており、記憶装置ｄｋ０、・・・、ｄｋ５それぞれのブロックを有している（１ブロックは例えば、１２８ＫＢ容量）。
【００４０】
ストライプｓ０〜ｓ５の格納状態について、記憶装置ｄｋ０、・・・、ｄｋ５のブロック順に示すと、ストライプｓ０では、データｄ０、ｄ１、ｄ２、パリティＰ０、パリティＱ０、ホットスペアＨＳ０が格納されている。ストライプｓ１では、データｄ４、ｄ５、パリティＰ１、パリティＱ１、ホットスペアＨＳ１、データｄ３が格納されている。
【００４１】
ストライプｓ２では、データｄ８、パリティＰ２、パリティＱ２、ホットスペアＨＳ２、データｄ６、データｄ７が格納されている。ストライプｓ３では、パリティＰ３、パリティＱ３、ホットスペアＨＳ３、データｄ９、ｄ１０、ｄ１１が格納されている。
【００４２】
ストライプｓ４では、パリティＱ４、ホットスペアＨＳ４、データｄ１２、ｄ１３、ｄ１４、パリティＰ４が格納されている。ストライプｓ５では、ホットスペアＨＳ５、データｄ１５、ｄ１６、ｄ１７、パリティＰ５、パリティＱ５が格納されている。
【００４３】
上記のような格納状態において、例えば、ストライプｓ０、・・・、ｓ５の記憶領域が１つのＲＡＩＤユニットとなる。ＲＡＩＤユニットのサイズは、ストライプサイズの倍数であり、ストライプサイズ×ｎである。ｎは、ＲＡＩＤユニットが所定値（例えば、２４ＭＢ程度）となるような値が設定される。
【００４４】
図５はドライブグループ構成本数とＲＡＩＤユニットサイズとの関係の一例を示す図である。テーブルＴ０は、項目として、ドライブグループ構成本数、ＲＡＩＤユニットサイズ（ＭＢ）および物理割当ＲＡＩＤユニットサイズ（ＭＢ）を有する。
【００４５】
ドライブグループ構成本数は、１つのドライブグループが有する記憶装置の数である。ＲＡＩＤユニットサイズは、パリティとホットスペアの記憶領域を含まないデータのみの記憶領域のＲＡＩＤユニットサイズを示す。物理割当ＲＡＩＤユニットサイズは、データ、パリティおよびホットスペアの記憶領域を含んだＲＡＩＤユニットサイズを示す。
【００４６】
なお、テーブルＴ０のドライブグループ構成本数＝６の欄は、データを格納する３本の記憶装置と、パリティを格納する２本の記憶装置と、ホットスペア用の１本の記憶装置とを含む。ドライブグループ構成本数が７、８、・・・と増えると、データを格納する記憶装置が増えていくことになる（いずれの構成本数に対しても、パリティ２本、ホットスペア１本は変わらない）。
【００４７】
よって、テーブルＴ０のドライブグループ構成本数＝２４の欄は、データを格納する記憶装置が２１本、パリティを格納する記憶装置が２本およびホットスペア用の記憶装置が１本となる。
【００４８】
＜ＲＡＩＤユニットの獲得・解放＞
次にＲＡＩＤユニットの獲得、解放について図６、図７を用いて説明する。図６はＲＡＩＤユニットの獲得の一例を示す図である。初期設定時、オフセットスタックには、ＲＡＩＤユニット番号が先頭から配列として格納されている。そして、オフセットスタックに対してスタックポインタが示すＲＡＩＤユニット番号が獲得される。
【００４９】
獲得手順としては、スタックポインタが示す位置のＲＡＩＤユニット番号が取り出され、取り出された位置に無効値（０ｘＦＦＦＦＦＦＦＦ）が挿入される。そして、スタックポインタを１つ下へ移動させる。
【００５０】
図６の例において、オフセットスタック内のスタックｓｔ０に、スタックポインタｓｐが位置している。したがって、スタックｓｔ０に格納されるＲＡＩＤユニット番号（０ｘ００００００００）が獲得される。
【００５１】
また、ＲＡＩＤユニット番号（０ｘ００００００００）の獲得後、スタックｓｔ０には無効値（０ｘＦＦＦＦＦＦＦＦ）が挿入され、スタックポインタｓｐは１つ下のスタックｓｔ１へ移動する。
【００５２】
図７はＲＡＩＤユニットの解放の一例を示す図である。ＲＡＩＤユニットの解放手順は、上記の獲得手順の逆操作となる。すなわち、スタックポインタを１つ上に戻し、戻したスタックポインタが示すスタックにＲＡＩＤユニット番号が挿入される。
【００５３】
図７の例において、オフセットスタック内のスタックｓｔ１に、スタックポインタｓｐが位置している。したがって、スタックポインタｓｐは１つ上のスタックｓｔ０へ移動する。移動したスタックポインタｓｐが示すスタックｓｔ０には、無効値（０ｘＦＦＦＦＦＦＦＦ）が挿入されており、スタックｓｔ０に対して、解放対象のＲＡＩＤユニット番号（０ｘ００００００００）が挿入される。
【００５４】
＜ＳＳＤの寿命管理＞
ストレージ制御システム２の記憶装置２６−１、・・・、２６−ｎには例えば、ＳＳＤが使用される。ＳＳＤは、ＨＤＤよりも高速アクセスが可能であるが、ＳＳＤのデバイスの特性上、ランダムライト（ランダムアクセス）を苦手としており、ランダムライトのようなデータ書き込みや消去によって記憶素子が劣化しやすい。このため、信頼性確保のために、ＳＳＤの寿命管理が行われる。
【００５５】
ＳＳＤの寿命管理としては、ランダムライトの性能向上が行われる。この場合、データを連続的なログフォーマットとして管理し、連続データとしてＳＳＤに追記書きすることが行われる。
【００５６】
また、データの重複排除（De-duplication）と、データ圧縮とが行われる。重複排除は、ファイルを任意の長さに分割して、分割ブロック毎に、重複するデータを排除するものである。
【００５７】
重複排除とデータ圧縮を組み合わせることで、ＳＳＤに書き込むデータ量を削減し、さらに追記書きを行ってストライプバウンダリかつＳＳＤのページバウンダリでデータを書き込むことで、ＳＳＤの寿命を最大化することができる。
【００５８】
一方、上記の重複排除や追記書きを行うための管理データとして、論物メタ（logical physical meta）情報およびメタアドレス（meta address）が用いられる。
論物メタ情報（以下、論物メタと略す）は、記憶装置上でユーザデータが格納されている物理アドレスを少なくとも管理するデータである。メタアドレスは、記憶装置（またはオンメモリ）上で論物メタが格納されている物理アドレスを少なくとも管理するデータである。
【００５９】
なお、ユーザデータユニット（データログとも呼ばれる）は、データ圧縮されたユーザデータを格納する記憶領域を示すものであり、例えば、８ＫＢ単位に圧縮されたデータを格納するデータ部と、ヘッダ部（参照メタとも呼ばれる）とを有する。ヘッダ部には、圧縮データのハッシュ値や圧縮データをポイントするための論物メタの情報等が格納される。また、ユーザデータユニットは、以下略してユーザデータと表記する。なお、ハッシュ値は重複を検索する際のキーワードとして利用される。
【００６０】
ここで、メタアドレス、論物メタおよびユーザデータそれぞれは、ＲＡＩＤユニットに格納されるので、メタアドレスから論物メタの物理位置をポイントする情報、論物メタからユーザデータの物理位置をポイントする情報は、ＲＡＩＤユニット番号と、オフセットＬＢＡ（Logical Block Address）により指定される。
【００６１】
＜メタ構造の管理＞
次にメタ構造（ユーザデータ、論物メタおよびメタアドレス）管理について説明する。図８はドライブグループに書き込まれるユーザデータおよび論物メタの管理方法について説明するための図である。（Ａ）に示すように、実データＤ０をドライブプールＤｐに書き込むとき、実データＤ０には参照情報４１が付加されてユーザデータ４２が生成される。
【００６２】
参照情報４１は、ＳＢ（Super Block）４３ａと、参照ＬＵＮ（Logical Unit Number）／ＬＢＡ情報４３ｂを含む。
ＳＢ４３ａは、例えば、３２バイトに設定され、参照情報４１の長さを示すヘッダ長（Header length）や実データＤ０のハッシュ値（Hash Value）等を含む。
【００６３】
参照ＬＵＮ／ＬＢＡ情報４３ｂは、例えば、８バイトに設定され、実データＤ０が格納される論理領域のＬＵＮ、およびその格納位置を示すＬＢＡを含む。つまり、参照ＬＵＮ／ＬＢＡ情報４３ｂは、実データＤ０の論理的な格納先に関する情報を含む。
【００６４】
ここで、実データＤ０と同じ内容の実データＤｘを書き込む場合、実データＤｘの格納先となる論理領域のＬＵＮ、およびその格納位置を示すＬＢＡを含む参照ＬＵＮ／ＬＢＡ情報４３ｂが生成される。また、実データＤｘの参照ＬＵＮ／ＬＢＡ情報４３ｂが実データＤ０のユーザデータ４２に追加される。
【００６５】
一方、（Ｂ）のように、ユーザデータ４２は、メモリ２３−１に一時的に格納される。そして、複数の実データのそれぞれに対応する複数のユーザデータがメモリ２３−１に追記され、所定のデータ量（例えば、２４ＭＢ）を単位としてドライブプールＤｋに書き出す制御が実施される。
【００６６】
また、（Ｃ）の例では、ユーザデータＵＤ＃１、ＵＤ＃２、…、ＵＳ＃ｍを結合したデータがドライブプールＤｐに書き込まれている。なお、（Ｃ）の矢印（ａ）、（ｂ）、（ｃ）は、参照ＬＵＮ／ＬＢＡ情報４３ｂと実データとの対応関係を示している。ドライブプールＤｐには、ユーザデータ４２の他に、メタアドレスおよび論物メタが書き込まれる。
【００６７】
論物メタ４４は、論理アドレスと物理アドレスとを対応付ける情報である。メタアドレス４５は、ドライブプールＤｐにおける論物メタ４４の位置情報である。メタアドレス４５および論物メタ４４もＲＡＩＤユニット単位でドライブプールＤｐに書き込まれる。
【００６８】
他方、ユーザデータ４２および論物メタ４４は、ＲＡＩＤユニット単位のデータが集まったタイミングでドライブプールＤｐに順次追記される。そのため、（Ｃ）に示すように、メタアドレス４５がドライブプールＤｐの所定範囲（この例では先頭から所定範囲）に書き込まれ、ユーザデータ４２および論物メタ４４は混在する。
【００６９】
図９はメタアドレスのフォーマットの一例を示す図である。メタアドレス４５は、ドライブプールＤｐの識別情報（Disk Pool No.）を含む。また、メタアドレス４５は、対応する論物メタ４４のＲＡＩＤユニットを特定するための識別情報（RAID Unit No.）を含む。
【００７０】
さらに、メタアドレス４５は、対応する論物メタ４４があるＲＡＩＤユニット内の位置情報（RAID Unit Offset LBA）を含む。メタアドレス４５が参照されることで、ドライブプールＤｐに格納されている論物メタ４４を検索することができる。
【００７１】
図１０は論物メタのフォーマットの一例を示す図である。論物メタ４４は、論理アドレス情報４４ａおよび物理アドレス情報４４ｂ等を含む。論理アドレス情報４４ａには、ユーザデータ４２が格納される論理領域のＬＵＮおよびその格納位置を示すＬＢＡが含まれる。
【００７２】
また、物理アドレス情報４４ｂには、ユーザデータ４２が格納されるドライブプールＤｐの識別情報（Disk Pool No.）、そのドライブプールＤｐにおけるＲＡＩＤユニットの識別情報（RAID Unit No.）、そのＲＡＩＤユニット内の位置情報（RAID Unit LBA）が含まれる。
【００７３】
＜ドライブ増設による活性容量拡張処理＞
図１１はドライブグループのドライブ増設の一例を示す図である。ドライブグループの構成本数を活性増設する場合、活性容量拡張処理が実施される。
【００７４】
図１１では、ＲＡＩＤ５（分割されたデータのブロックとパリティが複数のドライブに分散して書き込まれるタイプのＲＡＩＤ）の増設例として、増設前が１ストライプに３データ、１パリティのＲＡＩＤ５を、１ストライプに４データ、１パリティに増設する例を示している。
【００７５】
まず、増設前のドライブグループに対し、テンポラリバッファ３の領域にステージング処理（記憶装置のデータを読み出し、テンポラリバッファへ格納する処理）が行われる。そして、テンポラリバッファ３に格納されたデータを、増設後のドライブグループの記憶装置にライト（ライトバック）する処理が行われる。
【００７６】
上記の動作は、ドライブグループ内の記憶装置の先頭のストライプから開始される。また、増設前のドライブグループ（以下、旧構成と呼ぶ）と、増設後のドライブグループ（以下、新構成と呼ぶ）とのストライプサイズの最小公倍数のサイズで、旧構成からデータがリードされる。そして、リードされたデータはテンポラリバッファ３に一旦格納され、パリティが再生成された後、新構成に対してライトされる。
【００７７】
ここで、上記のような活性容量拡張処理では、増設前のＲＡＩＤユニットには無関係に容量拡張化が行われるので、論物メタおよびユーザデータの物理位置情報がずれてしまう可能性がある。増設前のＲＡＩＤユニットに依存して記憶装置の構成本数を増やせば、該物理位置情報が変わらないように記憶装置を増設することも可能ではあるが、記憶容量の拡張化自由度が低く、記憶容量の拡張化の規模が大きくなる。
【００７８】
このような状況に鑑みて、本発明では、記憶容量の拡張化自由度を高め、ＲＡＩＤユニットに依存した記憶装置の増設による記憶容量の拡張化と比較して、小規模な記憶容量の拡張化を可能にするものである。
【００７９】
＜ハードウェア構成＞
次にストレージ制御装置１のハードウェア構成について説明する。図１２はストレージ制御装置のハードウェア構成の一例を示す図である。ストレージ制御装置１は、プロセッサ１００によって装置全体が制御されている。すなわち、プロセッサ１００は、ストレージ制御装置１の制御部１ｂとして機能する。
【００８０】
プロセッサ１００には、バス１０３を介してメモリ１０１と複数の周辺機器が接続されている。プロセッサ１００は、図２で示したようにマルチプロセッサであってもよい。プロセッサ１００は、例えば、ＣＰＵ、ＭＰＵ、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。またプロセッサ１００は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００８１】
メモリ１０１は、図２に示したメモリ２３−１、２３−２に対応し、ストレージ制御装置１の主記憶装置として使用される。メモリ１０１には、プロセッサ１００に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０１には、プロセッサ１００による処理に要する各種メッセージが格納される。
【００８２】
また、メモリ１０１は、ストレージ制御装置１の補助記憶装置としても使用され、ＯＳのプログラム、アプリケーションプログラム、および各種メッセージが格納される。メモリ１０１は、補助記憶装置として、フラッシュメモリやＳＳＤ等の半導体記憶装置やＨＤＤ等の磁気記録媒体を含んでもよい。
【００８３】
バス１０３に接続されている周辺機器としては、入出力インタフェース１０２およびネットワークインタフェース１０４がある。入出力インタフェース１０２は、プロセッサ１００からの命令に従ってストレージ制御装置１の状態を表示する表示装置として機能するモニタ（例えば、ＬＥＤ（Light Emitting Diode）やＬＣＤ（Liquid Crystal Display）等）が接続されている。
【００８４】
また、入出力インタフェース１０２は、キーボードやマウス等の情報入力装置を接続可能であって、情報入力装置から送られてくる信号をプロセッサ１００に送信する。
さらに、入出力インタフェース１０２は、図２に示したドライバ２４−１、２４−２の機能を含み、ストレージデバイスと接続する。また、入出力インタフェース１０２は、その他の周辺機器を接続するための通信インタフェースとしても機能する。
【００８５】
例えば、入出力インタフェース１０２は、レーザ光等を利用して、光ディスクに記録されたメッセージの読み取りを行う光学ドライブ装置を接続することができる。光ディスクは、光の反射によって読み取り可能なようにメッセージが記録された可搬型の記録媒体である。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ（Random Access Memory）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）等がある。
【００８６】
また、入出力インタフェース１０２は、メモリ装置やメモリリーダライタを接続することができる。メモリ装置は、入出力インタフェース１０２との通信機能を搭載した記録媒体である。メモリリーダライタは、メモリカードへのメッセージの書き込み、またはメモリカードからのメッセージの読み出しを行う装置である。メモリカードは、カード型の記録媒体である。
【００８７】
ネットワークインタフェース１０４は、図２に示したインタフェース部２１−１、２１−２の機能を含み、ホスト２０−１、２０−２と接続する。また、ネットワークインタフェース１０４は、例えば、ＮＩＣ（Network Interface Card）、無線ＬＡＮ（Local Area Network）カード等の機能を有してもよく、ネットワークインタフェース１０４で受信された信号やメッセージ等は、プロセッサ１００に出力される。
【００８８】
以上のようなハードウェア構成によって、ストレージ制御装置１の処理機能を実現することができる。例えば、ストレージ制御装置１は、プロセッサ１００がそれぞれ所定のプログラムを実行することで、ストレージ制御を行うことができる。
【００８９】
ストレージ制御装置１は、例えば、コンピュータで読み取り可能な記録媒体に記録されたプログラムを実行することにより、本発明の処理機能を実現する。ストレージ制御装置１に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。
【００９０】
例えば、ストレージ制御装置１に実行させるプログラムを補助記憶装置に格納しておくことができる。プロセッサ１００は、補助記憶装置内のプログラムの少なくとも一部を主記憶装置にロードし、プログラムを実行する。また、光ディスク、メモリ装置、メモリカード等の可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えば、プロセッサ１００からの制御により、補助記憶装置にインストールされた後、実行可能となる。またプロセッサ１００が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００９１】
＜ドライブグループ拡張処理＞
次にストレージ制御装置１によるドライブグループ拡張処理の全体動作について、図１３、図１４を用いて説明する。なお、以降では、本発明のドライブグループ拡張処理をＤＧＥ（Drive Group Expansion）処理と呼称する。
【００９２】
図１３はＤＧＥ処理の一例を示す図である。ＤＧＥ処理実施前のドライブグループＤｒ１において、ドライブグループＤｒ１は、記憶装置ｄｋ０、・・・、ｄｋ５を含む。また、ドライブグループＤｒ１の記憶領域に対し、ＲＡＩＤユニット＃０、・・・、＃３（旧データ格納領域単位に該当）が格納される。ＲＡＩＤユニット＃０、・・・、＃３それぞれは、ストライプ数が５本になっている。
【００９３】
ＤＧＥ処理実施後のドライブグループＤｒ２において、ドライブグループＤｒ２は、ドライブｄｋ０、・・・、ｄｋ６を含み、新たに記憶装置ｄｋ６が増設される。ドライブグループＤｒ２の記憶領域に対し、ＲＡＩＤユニット＃０ａ、・・・、＃４ａ（新データ格納領域単位に該当）が格納され、ＲＡＩＤユニット＃４ａが増えている。
【００９４】
この場合、ＲＡＩＤユニット＃０ａ、・・・、＃３ａそれぞれは、拡張前のＲＡＩＤユニット＃０、・・・、＃３に対応している。ＲＡＩＤユニット＃０ａ、・・・、＃４ａは、ストライプ数が４本になって拡張前よりも減少するが、ストライプサイズは拡張前よりも増加する。
【００９５】
このように、ＤＧＥ処理後のドライブグループＤｒ２では、ＲＡＩＤユニットのストライプ数は減少し、ストライプサイズが増加する。ＤＧＥ処理によって拡張された記憶領域に対し、ＲＡＩＤユニットを先頭から格納していくことにより、記憶領域の末尾には空き領域ができるので、この空き領域に新しいＲＡＩＤユニットを割り当てることで、記憶容量の追加が実現される。
【００９６】
図１４はＤＧＥ処理の全体動作を示すフローチャートである。ドライブグループの記憶領域の先頭のＲＡＩＤユニットから順にＤＧＥ処理が実施される。
〔ステップＳ１０〕制御部１ｂは、処理対象のＲＡＩＤユニットを選択する。
【００９７】
〔ステップＳ１１〕制御部１ｂは、選択されたＲＡＩＤユニットの用途がメタアドレス、論物メタ、ユーザデータおよび未割当のいずれに対するＤＧＥ処理を行うかを判別する。メタアドレスの場合はステップＳ１２ａへ、論物メタの場合はステップＳ１３ａへ、ユーザデータの場合はステップＳ１４ａへ、未割当の場合はステップＳ１５ａへ処理が進む。
【００９８】
〔ステップＳ１２ａ〕制御部１ｂは、メタアドレスに対するＤＧＥ処理を実施する。
〔ステップＳ１２ｂ〕制御部１ｂは、未処理のＲＡＩＤユニットが有るか否かを判別する。未処理のＲＡＩＤユニットが有る場合は、未処理のＲＡＩＤユニットのメタアドレスに対するＤＧＥ処理を実施するためにステップＳ１２ａへ処理が戻り、未処理のＲＡＩＤユニットが無い場合は、ステップＳ１６へ処理が進む。
【００９９】
〔ステップＳ１３ａ〕制御部１ｂは、論物メタに対するＤＧＥ処理を実施する。
〔ステップＳ１３ｂ〕制御部１ｂは、未処理のＲＡＩＤユニットが有るか否かを判別する。未処理のＲＡＩＤユニットが有る場合は、記憶領域の末尾まで論物メタに対するＤＧＥ処理を実施するためにステップＳ１３ａへ処理が戻り、未処理のＲＡＩＤユニットが無い場合は、ステップＳ１６へ処理が進む。
【０１００】
〔ステップＳ１４ａ〕制御部１ｂは、ユーザデータに対するＤＧＥ処理を実施する。
〔ステップＳ１４ｂ〕制御部１ｂは、未処理のＲＡＩＤユニットが有るか否かを判別する。未処理のＲＡＩＤユニットが有る場合は、記憶領域の末尾までユーザデータに対するＤＧＥ処理を実施するためにステップＳ１４ａへ処理が戻り、未処理のＲＡＩＤユニットが無い場合は、ステップＳ１６へ処理が進む。
【０１０１】
〔ステップＳ１５ａ〕制御部１ｂは、未割当に対するＤＧＥ処理を実施する。
〔ステップＳ１５ｂ〕制御部１ｂは、未処理のＲＡＩＤユニットが有るか否かを判別する。未処理のＲＡＩＤユニットが有る場合は、記憶領域の末尾まで未割当に対するＤＧＥ処理を実施するようにステップＳ１５ａへ処理が戻り、未処理のＲＡＩＤユニットが無い場合は、ステップＳ１６へ処理が進む。
【０１０２】
〔ステップＳ１６〕制御部１ｂは、全ＲＡＩＤユニットの処理が完了したか否かを判別する。処理が完了した場合はステップＳ１６へ処理が進み、処理が未完了の場合はステップＳ１０へ処理が戻る。
【０１０３】
〔ステップＳ１７〕制御部１ｂは、ＲＡＩＤユニットのオフセットスタックに、追加したＲＡＩＤユニットの番号を追加してオフセットスタックを拡張し、ドライブグループの記憶容量を拡張する。
【０１０４】
＜メタアドレスのＤＧＥ処理＞
図１５はメタアドレスのＤＧＥ処理の一例を示す図である。ＲＡＩＤユニット＃０、・・・、＃４のメタアドレスまでＤＧＥ処理が終了し、ＲＡＩＤユニット＃５のメタアドレスのＤＧＥ処理が行われるものとする。
【０１０５】
〔ステップＳ２１〕制御部１ｂは、テンポラリバッファ３ａに対して、旧構成のＲＡＩＤユニット＃５のメタアドレスのステージング処理を行う。
〔ステップＳ２２〕制御部１ｂは、テンポラリバッファ３ａに格納されたメタアドレスを、新構成としてライトバック処理する。
【０１０６】
〔ステップＳ２３〕制御部１ｂは、ＲＡＩＤユニット単位のＤＧＥ進捗標示を進める。ＤＧＥ進捗標示済みのＲＡＩＤユニットは、新構成のＲＡＩＤユニットとして扱われ、進捗未標示のＲＡＩＤユニットは、旧構成のＲＡＩＤユニットとして扱われる。このように、ＲＡＩＤユニット単位で進捗管理が行われるので、処理の順序性を保障することができる。
【０１０７】
なお、メタアドレスのＤＧＥ処理では、記憶領域の末尾までのＲＡＩＤユニットの格納が発生せず、記憶容量の空きが生じる場合がある（メタアドレスは固定容量で（例えば、２４ＭＢ）常時格納されるため）。よって、メタアドレスのＤＧＥ処理では、ＤＧＥ処理で記憶領域が拡張された場合でも、メタアドレスとＬＢＡの対応関係は拡張前と比べて変わることはない。
【０１０８】
＜論物メタのＤＧＥ処理＞
次に論物メタのＤＧＥ処理について図１６、図１７を用いて説明する。図１６は論物メタのＤＧＥ処理の一例を示す図である。
【０１０９】
〔ステップＳ３１〕制御部１ｂは、テンポラリバッファ３ａに対して、旧構成のＲＡＩＤユニット＃５の論物メタのステージング処理を行う。
〔ステップＳ３２〕制御部１ｂは、テンポラリバッファ３ａ上の論物メタの有効・無効を判断する。
【０１１０】
〔ステップＳ３３〕制御部１ｂは、論物メタが有効の場合、追記書きバッファ３ｂの論物メタバッファ領域３ｂ−１に論物メタを追記書きする。
〔ステップＳ３４〕論物メタの物理アドレスが変わるため、制御部１ｂは、メタアドレスキャッシュメモリ３ｃ上の論物メタのメタアドレスを更新する。なお、ステップＳ３１からＳ３４までの処理は、テンポラリバッファ３ａ上の論物メタ数分繰り返される。
【０１１１】
〔ステップＳ３５〕制御部１ｂは、ＲＡＩＤユニット単位のＤＧＥ進捗標示を進める。
〔ステップＳ３６〕制御部１ｂは、ＲＡＩＤユニット＃５を解放する。このように、旧ＲＡＩＤユニットに無効化可能な論物メタがある場合は、新構成のＲＡＩＤユニットの構築時に解放されてデータ再配置は実施されないので、データ再配置の作業量を削減することができる。
【０１１２】
〔ステップＳ３７〕制御部１ｂは、ＤＧＥ処理と非同期に、ＩＯ延長で追記書きバッファ３ｂ（論物メタバッファ領域３ｂ−１）がフルになったらライトバックする。
図１７は論物メタのＤＧＥ処理のフローチャートを示す図である。
【０１１３】
〔ステップＳ４１〕制御部１ｂは、旧構成のＲＡＩＤユニットからテンポラリバッファ３ａにステージング処理を行う。
〔ステップＳ４２〕制御部１ｂは、ステップＳ４２ａからＳ４２ｃまでの処理をＲＡＩＤユニット内の論物メタの数分繰り返す。すべての論物メタに対してステップＳ４２ａからＳ４２ｃまでの処理が完了するとステップＳ４３へ処理が進む。
【０１１４】
〔ステップＳ４２ａ〕制御部１ｂは、論物メタが有効か否かを判別する。有効の場合はステップＳ４２ｂへ処理が進み、有効でない場合は次の論物メタが有効か否かの判別処理を行う。
【０１１５】
〔ステップＳ４２ｂ〕制御部１ｂは、追記書きバッファ３ｂに論物メタを書き込む。
〔ステップＳ４２ｃ〕制御部１ｂは、メタアドレスを更新する。
〔ステップＳ４３〕制御部１ｂは、ＤＧＥ進捗標示を進める。
【０１１６】
〔ステップＳ４４〕制御部１ｂは、ＲＡＩＤユニットの解放を行う。
＜ユーザデータのＤＧＥ処理＞
次にユーザデータのＤＧＥ処理について図１８、図１９を用いて説明する。図１８はユーザデータのＤＧＥ処理の一例を示す図である。
【０１１７】
〔ステップＳ５１〕制御部１ｂは、テンポラリバッファ３ａに対して、旧構成のＲＡＩＤユニット＃５のユーザデータのステージング処理を行う。
〔ステップＳ５２〕制御部１ｂは、テンポラリバッファ３ａ上のユーザデータの有効・無効を判断する。
【０１１８】
〔ステップＳ５３〕制御部１ｂは、ユーザデータが有効の場合、追記書きバッファ３ｂのユーザデータバッファ領域３ｂ−２にユーザデータを追記書きする。
〔ステップＳ５４ａ〕制御部１ｂは、ユーザデータに対する論物メタが格納されているＲＡＩＤユニットから、該論物メタを読み出す。
【０１１９】
〔ステップＳ５４ｂ〕制御部１ｂは、ユーザデータの物理位置が変わるため、論物メタのユーザデータのポイント情報を更新する。
〔ステップＳ５５ａ〕制御部１ｂは、更新後の論物メタを、追記書きバッファ３ｂの論物メタバッファ領域３ｂ−１に追記書きする。
【０１２０】
〔ステップＳ５５ｂ〕論物メタの物理アドレスが変わるため、制御部１ｂは、メタアドレスキャッシュメモリ３ｃ上のメタアドレスの論物メタをポイントする情報を更新する。なお、ステップＳ５１からＳ５５ｂまでの処理は、テンポラリバッファ３ａ上のユーザデータ数分繰り返される。
【０１２１】
〔ステップＳ５６〕制御部１ｂは、ＲＡＩＤユニット単位のＤＧＥ進捗標示を進める。
〔ステップＳ５７〕制御部１ｂは、ＲＡＩＤユニット＃５を解放する。このように、旧ＲＡＩＤユニットに無効化可能なユーザデータがある場合は、新構成のＲＡＩＤユニットの構築時に解放されてデータ再配置は実施されないので、データ再配置の作業量を削減することができる。
【０１２２】
〔ステップＳ５８〕制御部１ｂは、ＤＧＥ処理と非同期に、ＩＯ延長で追記書きバッファ３ｂ（ユーザデータバッファ領域３ｂ−２）がフルになったら、新構成のＲＡＩＤユニットにユーザデータをライトバックする。
【０１２３】
図１９はユーザデータのＤＧＥ処理のフローチャートを示す図である。
〔ステップＳ６１〕制御部１ｂは、旧構成のＲＡＩＤユニットからテンポラリバッファ３ａにステージング処理を行う。
【０１２４】
〔ステップＳ６２〕制御部１ｂは、ステップＳ６２ａからＳ６２ｆまでの処理をＲＡＩＤユニット内のユーザデータの数分繰り返す。すべてのユーザデータに対してステップＳ６２ａからＳ６２ｆまでの処理が完了するとステップＳ６３へ処理が進む。
【０１２５】
〔ステップＳ６２ａ〕制御部１ｂは、ユーザデータが有効か否かを判別する。有効の場合はステップＳ６２ｂへ処理が進み、有効でない場合は次のユーザデータが有効か否かの判別処理を行う。
【０１２６】
〔ステップＳ６２ｂ〕制御部１ｂは、追記書きバッファ３ｂにユーザデータを書き込む。
〔ステップＳ６２ｃ〕制御部１ｂは、論物メタを読み出す。
【０１２７】
〔ステップＳ６２ｄ〕制御部１ｂは、論物メタの更新を行う。
〔ステップＳ６２ｅ〕制御部１ｂは、追記書きバッファ３ｂに論物メタを書き込む。
〔ステップＳ６２ｆ〕制御部１ｂは、メタアドレスを更新する。
【０１２８】
〔ステップＳ６３〕制御部１ｂは、ＤＧＥ進捗標示を進める。
〔ステップＳ６４〕制御部１ｂは、ＲＡＩＤユニットの解放を行う。
＜ＤＧＥ処理中のＩＯ制御＞
次にＤＧＥ処理中のＩＯ制御について図２０、図２１を用いて説明する。図２０はＤＧＥ処理中のＩＯ制御の一例を示す図である。ＤＧＥ処理中のＩＯ制御については、制御部１ｂは、ＤＧＥ処理済みのＲＡＩＤユニット番号を境に、ＤＧＥ処理済みの範囲に対しては、新構成としてＩＯ制御（Read IOおよびＷrite IO）を行う。
【０１２９】
図２０の例において、ＲＡＩＤユニット＃１３までがＤＧＥ処理済みとする。この場合、制御部１ｂは、ＲＡＩＤユニット＃０、・・・、＃１３を新構成としてのＩＯ制御を行い、ＲＡＩＤユニット＃１４以降を旧構成としてのＩＯ制御を行う。
【０１３０】
図２１はＤＧＥ処理中のＩＯ制御のフローチャートを示す図である。
〔ステップＳ７１〕制御部１ｂは、アクセス対象のドライブグループがＤＧＥ処理中か否かを判別する。ＤＧＥ処理中でない場合は、ステップＳ７２へ処理が進み、ＤＧＥ処理中の場合は、ステップＳ７３へ処理が進む。
【０１３１】
〔ステップＳ７２〕制御部１ｂは、通常のＩＯ制御を実施する。
〔ステップＳ７３〕制御部１ｂは、ＤＧＥ進捗標示にもとづき、ＤＧＥ処理済みか否かを判別する。アクセス対象のＲＡＩＤユニットがＤＧＥ処理済みの場合は、ステップＳ７４ａへ処理が進み、ＤＧＥ処理済みでない場合は、ステップＳ７４ｂへ処理が進む。
【０１３２】
〔ステップＳ７４ａ〕制御部１ｂは、アクセス対象のＲＡＩＤユニットに対して、新構成としてのＩＯ制御を行う。
〔ステップＳ７４ｂ〕制御部１ｂは、アクセス対象のＲＡＩＤユニットに対して、旧構成としてのＩＯ制御を行う。
【０１３３】
以上説明したように、本発明によれば、容量拡張後のストレージグループ内の記憶装置の数に応じた新たなＲＡＩＤユニットを生成してデータ再配置を行う。これにより、記憶容量の拡張化自由度を高めることができる。よって、旧構成のＲＡＩＤユニットに依存した記憶装置の増設による記憶容量の拡張化と比較して、例えば、ドライブグループの１本単位の記憶装置の増設が可能になるので、メタ構造の物理位置情報を更新しつつ、小規模な記憶容量の拡張化が可能になる。
【０１３４】
また、本発明のＤＧＥ処理では、旧構成から読み出したデータを再配置する際に無効データの書き込みを排除するため、ドライブへの無駄な書き込みを防ぐことができ、拡張後の割当済容量の削減と、拡張処理自体の高速化を行うことが可能になる。
【０１３５】
上記で説明したストレージ制御装置１の処理機能は、コンピュータによって実現することができる。この場合、ストレージ制御装置１が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。
【０１３６】
処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリ等がある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープ等がある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ／ＲＷ等がある。光磁気記録媒体には、ＭＯ（Magneto Optical disk）等がある。
【０１３７】
プログラムを流通させる場合、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１３８】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。
【０１３９】
また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。また、上記の処理機能の少なくとも一部を、ＤＳＰ、ＡＳＩＣ、ＰＬＤ等の電子回路で実現することもできる。
【０１４０】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０１４１】
１  ストレージ制御装置
１ａ  ストレージグループ
１ｂ  制御部
１ａ−１  容量拡張前のストレージグループ
１ａ−２  容量拡張後のストレージグループ
Ｍ１、・・・、Ｍｎ  記憶装置
１１、・・・、１４  旧データ格納領域単位
１１ａ、・・・、１５ａ  新データ格納領域単位
【図１】
2018181172.tif 000003
【図２】
2018181172.tif 000004
【図３】
2018181172.tif 000005
【図４】
2018181172.tif 000006
【図５】
2018181172.tif 000007
【図６】
2018181172.tif 000008
【図７】
2018181172.tif 000009
【図８】
2018181172.tif 000010
【図９】
2018181172.tif 000011
【図１０】
2018181172.tif 000012
【図１１】
2018181172.tif 000013
【図１２】
2018181172.tif 000014
【図１３】
2018181172.tif 000015
【図１４】
2018181172.tif 000016
【図１５】
2018181172.tif 000017
【図１６】
2018181172.tif 000018
【図１７】
2018181172.tif 000019
【図１８】
2018181172.tif 000020
【図１９】
2018181172.tif 000021
【図２０】
2018181172.tif 000022
【図２１】
2018181172.tif 000023
【手続補正書】
【提出日】平成30年8月22日(2018.8.22)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
上記課題を解決するために、ストレージ制御装置が提供される。ストレージ制御装置は、制御部を備える。制御部は、ストレージグループを構成する複数の記憶装置に対して、所定のデータ量を有するデータ格納領域単位でバッファ上のデータを格納する制御を行い、ストレージグループの容量拡張を行う場合、容量拡張後のストレージグループ内の記憶装置の数に応じたストライプサイズで、所定のデータ量になるようなストライプサイズの倍数のストライプ数を有する新データ格納領域単位に変更し、容量拡張前のストレージグループに旧データ格納領域単位で格納されているデータについて、容量拡張後のストレージグループを構成する複数の記憶装置に対して新データ格納領域単位で書き戻しを行ってデータ再配置を行う。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ストレージグループを構成する複数の記憶装置に対して、所定のデータ量を有するデータ格納領域単位でバッファ上のデータを格納する制御を行い、
前記ストレージグループの容量拡張を行う場合、容量拡張後のストレージグループ内の記憶装置の数に応じたストライプサイズで、前記所定のデータ量になるような前記ストライプサイズの倍数のストライプ数を有する新データ格納領域単位に変更し、容量拡張前の前記ストレージグループに旧データ格納領域単位で格納されているデータについて、容量拡張後の前記ストレージグループを構成する複数の記憶装置に対して前記新データ格納領域単位で書き戻しを行ってデータ再配置を行う制御部、
を有するストレージ制御装置。
【請求項２】
前記制御部は、容量拡張前の前記ストレージグループに旧データ格納領域単位で格納されているユーザデータを一時記憶領域へ移動し、パリティを再生成して、前記一時記憶領域に移動した前記ユーザデータを前記新データ格納領域単位で容量拡張後の前記ストレージグループを構成する複数の記憶装置に対して書き戻しを行って前記データ再配置を行う請求項１記載のストレージ制御装置。
【請求項３】
前記制御部は、容量拡張前の前記ストレージグループに旧データ格納領域単位で格納されているデータが、前記記憶装置上に格納されるユーザデータの物理アドレスを少なくとも管理する第１の管理データ、前記記憶装置上に格納される前記第１の管理データの物理アドレスを少なくとも管理する第２の管理データ、または前記ユーザデータに応じて、異なる処理の前記データ再配置を行う請求項１または２に記載のストレージ制御装置。
【請求項４】
容量拡張前の前記旧データ格納領域単位で格納されているデータが前記第１の管理データの場合、
前記制御部は、
容量拡張前の前記ストレージグループに旧データ格納領域単位で格納される前記第１の管理データを、前記旧データ格納領域単位で一時記憶領域へ移動して前記第１の管理データの有効性を判別し、
前記第１の管理データが有効な場合は、前記一時記憶領域から前記第１の管理データを読み出して前記バッファへ書き込み、
前記第１の管理データの物理アドレスを管理する前記第２の管理データを更新し、
前記バッファがバッファフルになったら、前記バッファに書き込んだ前記第１の管理データを前記新データ格納領域単位で書き戻しを行って前記データ再配置を行う請求項３記載のストレージ制御装置。
【請求項５】
前記制御部は、前記旧データ格納領域に無効な前記第１の管理データがある場合、前記新データ格納領域単位への変更時に前記旧データ格納領域を解放する請求項４記載のストレージ制御装置。
【請求項６】
容量拡張前の前記旧データ格納領域単位で格納されているデータが前記第２の管理データの場合、
前記制御部は、容量拡張前の前記ストレージグループに旧データ格納領域単位で格納される前記第２の管理データを、前記旧データ格納領域単位で一時記憶領域へ移動し、前記一時記憶領域に移動した前記第２の管理データを前記新データ格納領域単位で容量拡張後の前記ストレージグループを構成する複数の記憶装置に対して書き戻しを行う請求項３記載のストレージ制御装置。
【請求項７】
容量拡張前の前記旧データ格納領域単位で格納されているデータがユーザデータの場合、
前記制御部は、
容量拡張前の前記ストレージグループに旧データ格納領域単位で格納される前記ユーザデータを、前記旧データ格納領域単位で一時記憶領域へ移動して前記ユーザデータの有効性を判別し、
前記ユーザデータが有効な場合は、前記一時記憶領域から前記ユーザデータを読み出して前記バッファへ書き込み、
前記バッファがバッファフルになったら、前記バッファに書き込んだ前記ユーザデータを前記新データ格納領域単位で容量拡張後の前記ストレージグループを構成する複数の記憶装置に対して書き戻しを行う請求項１記載のストレージ制御装置。
【請求項８】
前記制御部は、前記旧データ格納領域に無効な前記ユーザデータがある場合は、前記データ格納領域単位への変更時に前記旧データ格納領域を解放する請求項７記載のストレージ制御装置。
【請求項９】
前記制御部は、前記データ再配置の進捗を管理し、進捗が標示済みの記憶領域は前記新データ格納領域単位とし、進捗が未標示の記憶領域は前記旧データ格納領域単位とする請求項１記載のストレージ制御装置。
【請求項１０】
コンピュータに、
ストレージグループを構成する複数の記憶装置に対して、所定のデータ量を有するデータ格納領域単位でバッファ上のデータを格納する処理と、
前記ストレージグループの容量拡張を行う場合、容量拡張後のストレージグループ内の記憶装置の数に応じたストライプサイズで、前記所定のデータ量になるような前記ストライプサイズの倍数のストライプ数を有する新データ格納領域単位に変更し、容量拡張前の前記ストレージグループに旧データ格納領域単位で格納されているデータについて、容量拡張後の前記ストレージグループを構成する複数の記憶装置に対して前記新データ格納領域単位で書き戻しを行ってデータ再配置を行う処理と、
を実行させるストレージ制御プログラム。