(57)【特許請求の範囲】
【請求項１】
複数のディスクドライブと、前記複数のディスクドライブを制御する制御装置と、を備え、ホスト計算機に接続されるストレージシステムであって、
前記複数のディスクドライブは、複数の第１ディスクドライブ及び一つの第２ディスクドライブを含み、
前記複数のディスクドライブは、複数の実記憶領域を含み、
前記各実記憶領域は、複数の所定の大きさの管理単位を含み、
前記制御装置は、
前記ホスト計算機に提供する複数の仮想記憶領域と、前記各仮想記憶領域に割り当てられた前記各実記憶領域との対応関係を示す情報を保持し、
前記実記憶領域が割り当てられていない前記仮想記憶領域へのデータの第１の書き込み要求を受信すると、前記第１の書き込み要求によって指定された前記仮想記憶領域に、第１論理ボリュームを構成する前記複数の第１ディスクドライブの前記複数の管理単位からなる前記複数の実記憶領域のうち、まだ前記仮想記憶領域に割り当てられていない前記実記憶領域を割り当て、
前記書き込みを要求されたデータを、前記割り当てられた実記憶領域に含まれる前記複数の管理単位に分散して格納し、
前記第２ディスクドライブを増設する要求を受信すると、前記第２ディスクドライブの前記複数の管理単位の一部と、前記複数の第１ディスクドライブの前記複数の管理単位のうち前記第１論理ボリュームに含まれない前記複数の管理単位と、からなる複数の実記憶領域を含む第２論理ボリュームを作成し、
前記第１論理ボリュームを構成する前記複数の第１ディスクドライブの前記複数の管理単位に格納されたデータを読み出し、前記読み出されたデータを、前記複数の第１ディスクドライブ及び前記第２ディスクドライブの前記複数の管理単位に分散して格納することによって、データを再配置し、
前記第２論理ボリュームが作成された後、前記データの再配置が終了する前に、前記実記憶領域が割り当てられていない前記仮想記憶領域へのデータの第２の書き込み要求を受信すると、前記第２論理ボリュームの前記実記憶領域を、前記第２の書き込み要求によって指定された前記仮想記憶領域に割り当てることを特徴とするストレージシステム。
【請求項２】
前記制御装置は、
前記第２ディスクドライブを増設する要求を受信すると、前記第１論理ボリュームが既に前記仮想記憶領域に割り当てられている前記複数の実記憶領域のみを含むように、前記第１論理ボリュームの大きさを変更し、
前記第１論理ボリュームの大きさが変更された後、前記第２論理ボリュームを作成することを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記制御装置は、前記データの再配置が終了すると、前記第１論理ボリューム及び前記第２論理ボリュームのいずれにも含まれない前記実記憶領域が新たに前記第１論理ボリュームに含まれるように前記第１論理ボリュームの大きさを変更することを特徴とする請求項１に記載のストレージシステム。
【請求項４】
前記制御装置は、前記複数の仮想記憶領域に割り当て可能な前記複数の実記憶領域を含むプールを特定するプール情報を保持し、
前記第２ディスクドライブを増設する要求は、前記第２ディスクドライブを前記プールに増設することを示す情報を含み、
前記制御装置は、前記プール情報に基づいて、前記要求によって指定された前記プールが、前記第１論理ボリュームを構成する前記複数の第１ディスクドライブの前記複数の管理単位からなる前記複数の実記憶領域を含むと判定された場合、前記第１論理ボリュームを構成する前記複数の第１ディスクドライブの前記複数の管理単位を対象として前記データの再配置を実行することを特徴とする請求項１に記載のストレージシステム。
【請求項５】
前記制御装置は、前記複数の仮想記憶領域に割り当て可能な前記複数の実記憶領域を含むプールを特定するプール情報を保持し、
前記第２ディスクドライブを増設する要求は、前記第２ディスクドライブを、前記複数の仮想記憶領域からなる仮想論理ボリュームに増設することを示す情報を含み、
前記制御装置は、前記プール情報に基づいて、前記要求によって指定された前記仮想論理ボリュームに含まれる前記仮想記憶領域に割り当て可能な前記複数の実記憶領域が、前記第１論理ボリュームを構成する前記複数の第１ディスクドライブの前記複数の管理単位からなる前記複数の実記憶領域を含むと判定された場合、前記第１論理ボリュームを構成する前記複数の第１ディスクドライブの前記複数の管理単位を対象として前記データの再配置を実行することを特徴とする請求項１に記載のストレージシステム。
【請求項６】
前記制御装置は、
前記複数の仮想記憶領域に割り当て可能な前記複数の実記憶領域を含むプールを特定するプール情報を保持し、
前記プール情報に基づいて、前記第１論理ボリュームに含まれる前記複数の実記憶領域を前記複数の仮想記憶領域に割り当て可能でないと判定された場合、前記制御装置は、前記第２論理ボリュームを作成しないことを特徴とする請求項１に記載のストレージシステム。
【請求項７】
複数のディスクドライブと、前記複数のディスクドライブを制御する制御装置と、を備え、ホスト計算機に接続されるストレージシステムを制御する方法であって、
前記複数のディスクドライブは、複数の第１ディスクドライブ及び一つの第２ディスクドライブを含み、
前記複数のディスクドライブは、複数の実記憶領域を含み、
前記各実記憶領域は、複数の所定の大きさの管理単位を含み、
前記制御装置は、前記ホスト計算機に提供する複数の仮想記憶領域と、前記各仮想記憶領域に割り当てられた前記各実記憶領域との対応関係を示す情報を保持し、
前記方法は、
前記実記憶領域が割り当てられていない前記仮想記憶領域へのデータの第１の書き込み要求を受信すると、前記第１の書き込み要求によって指定された前記仮想記憶領域に、第１論理ボリュームを構成する前記複数の第１ディスクドライブの前記複数の管理単位からなる前記複数の実記憶領域のうち、まだ前記仮想記憶領域に割り当てられていない前記実記憶領域を割り当る第１手順と、
前記書き込みを要求されたデータを、前記割り当てられた実記憶領域に含まれる前記複数の管理単位に分散して格納する第２手順と、
前記第２ディスクドライブを増設する要求を受信すると、前記第２ディスクドライブの前記複数の管理単位の一部と、前記複数の第１ディスクドライブの前記複数の管理単位のうち前記第１論理ボリュームに含まれない前記複数の管理単位と、からなる複数の実記憶領域を含む第２論理ボリュームを作成する第３手順と、
前記第１論理ボリュームを構成する前記複数の第１ディスクドライブの前記複数の管理単位に格納されたデータを読み出し、前記読み出されたデータを、前記複数の第１ディスクドライブ及び前記第２ディスクドライブの前記複数の管理単位に分散して格納することによって、データを再配置する第４手順と、
前記第２論理ボリュームが作成された後、前記データの再配置が終了する前に、前記実記憶領域が割り当てられていない前記仮想記憶領域へのデータの第２の書き込み要求を受信すると、前記第２論理ボリュームの前記実記憶領域を、前記第２の書き込み要求によって指定された前記仮想記憶領域に割り当てる第５手順と、を含むことを特徴とする方法。
【請求項８】
前記方法は、さらに、前記第２ディスクドライブを増設する要求を受信すると、前記第１論理ボリュームが既に前記仮想記憶領域に割り当てられている前記複数の実記憶領域のみを含むように、前記第１論理ボリュームの大きさを変更する第６手順を含み、
前記第３手順は、前記第１論理ボリュームの大きさが変更された後に実行されることを特徴とする請求項７に記載の方法。
【請求項９】
前記方法は、さらに、前記データの再配置が終了すると、前記第１論理ボリューム及び前記第２論理ボリュームのいずれにも含まれない前記実記憶領域が新たに前記第１論理ボリュームに含まれるように前記第１論理ボリュームの大きさを変更する第７手順を含むことを特徴とする請求項７に記載の方法。
【請求項１０】
前記制御装置は、前記複数の仮想記憶領域に割り当て可能な前記複数の実記憶領域を含むプールを特定するプール情報を保持し、
前記第２ディスクドライブを増設する要求は、前記第２ディスクドライブを前記プールに増設することを示す情報を含み、
前記第４手順は、前記プール情報に基づいて、前記要求によって指定された前記プールが、前記第１論理ボリュームを構成する前記複数の第１ディスクドライブの前記複数の管理単位からなる前記複数の実記憶領域を含むと判定された場合に実行されることを特徴とする請求項７に記載の方法。
【請求項１１】
前記制御装置は、前記複数の仮想記憶領域に割り当て可能な前記複数の実記憶領域を含むプールを特定する情報を保持し、
前記第２ディスクドライブを増設する要求は、前記第２ディスクドライブを、前記複数の仮想記憶領域からなる仮想論理ボリュームに増設することを示す情報を含み、
前記第４手順は、前記プール情報に基づいて、前記要求によって指定された前記仮想論理ボリュームに含まれる前記仮想記憶領域に割り当て可能な前記複数の実記憶領域が、前記第１論理ボリュームを構成する前記複数の第１ディスクドライブの前記複数の管理単位からなる前記複数の実記憶領域を含むと判定された場合に実行されることを特徴とする請求項７に記載の方法。
【請求項１２】
前記制御装置は、前記複数の仮想記憶領域に割り当て可能な前記複数の実記憶領域を含むプールを特定する情報を保持し、
前記プール情報に基づいて、前記第１論理ボリュームに含まれる前記複数の実記憶領域を前記複数の仮想記憶領域に割り当て可能でないと判定された場合、前記第３手順が実行されないことを特徴とする請求項７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願明細書に開示される技術は、ストレージシステムの管理に関し、特に、ストレージシステムの記憶容量の拡張に関する。
【背景技術】
【０００２】
従来、企業等が扱うデータを安全に格納するために、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）を構成するストレージシステムが広く用いられている。このようなストレージシステムに格納されるデータ量が爆発的に増大しているため、ディスクドライブを増設することによってストレージシステムの記憶容量を拡張する必要が生じる。一般に、ディスクドライブは、ＲＡＩＤグループごとに増設される。例えば、３Ｄ（データ）＋１Ｐ（パリティ）のＲＡＩＤレベル５が適用される場合、４台のディスクドライブが一つのＲＡＩＤグループを構成する。この場合、１回の増設のために少なくとも４台のディスクドライブを用意する必要がある。
【０００３】
特許文献１は、ＲＡＩＤグループのデータ幅を拡張することによって記憶容量を拡張する技術を開示している。これによると、例えば３Ｄ＋１ＰのＲＡＩＤレベル５が適用されている場合、ＲＡＩＤグループに１台のディスクドライブを追加することによって、その構成が４Ｄ＋１Ｐに変更される。これによって１台ごとのディスクドライブの増設が可能になるため、必要最低限のコストによる記憶容量の拡張が実現される。
【特許文献１】特開平７−１４１１２１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記の特許文献１に記載された技術によれば、ＲＡＩＤの構成を変更するために、ＲＡＩＤグループ内の全てのデータを再配置する必要があった。このため、データの再配置が終了するまで、拡張された記憶容量を使用することができなかった。
【課題を解決するための手段】
【０００５】
本願で開示する代表的な発明は、複数のディスクドライブと、前記複数のディスクドライブを制御する制御装置と、を備え、ホスト計算機に接続されるストレージシステムであって、前記複数のディスクドライブは、複数の第１ディスクドライブ及び一つの第２ディスクドライブを含み、前記複数のディスクドライブは、複数の実記憶領域を含み、前記各実記憶領域は、複数の所定の大きさの管理単位を含み、前記制御装置は、前記ホスト計算機に提供する複数の仮想記憶領域と、前記各仮想記憶領域に割り当てられた前記各実記憶領域との対応関係を示す情報を保持し、前記実記憶領域が割り当てられていない前記仮想記憶領域へのデータの第１の書き込み要求を受信すると、前記第１の書き込み要求によって指定された前記仮想記憶領域に、第１論理ボリュームを構成する前記複数の第１ディスクドライブの前記複数の管理単位からなる前記複数の実記憶領域のうち、まだ前記仮想記憶領域に割り当てられていない前記実記憶領域を割り当て、前記書き込みを要求されたデータを、前記割り当てられた実記憶領域に含まれる前記複数の管理単位に分散して格納し、前記第２ディスクドライブを増設する要求を受信すると、前記第２ディスクドライブの前記複数の管理単位の一部と、前記複数の第１ディスクドライブの前記複数の管理単位のうち前記第１論理ボリュームに含まれない前記複数の管理単位と、からなる複数の実記憶領域を含む第２論理ボリュームを作成し、前記第１論理ボリュームを構成する前記複数の第１ディスクドライブの前記複数の管理単位に格納されたデータを読み出し、前記読み出されたデータを、前記複数の第１ディスクドライブ及び前記第２ディスクドライブの前記複数の管理単位に分散して格納することによって、データを再配置し、前記第２論理ボリュームが作成された後、前記データの再配置が終了する前に、前記実記憶領域が割り当てられていない前記仮想記憶領域へのデータの第２の書き込み要求を受信すると、前記第２論理ボリュームの前記実記憶領域を、前記第２の書き込み要求によって指定された前記仮想記憶領域に割り当てることを特徴とする。
【発明の効果】
【０００６】
本発明の一実施形態によれば、ディスクドライブの増設コストを最小限に抑えながら、記憶容量を拡張することができる。さらに、本発明の一実施形態によれば、ディスクドライブを増設した直後から、拡張された記憶容量を使用することができる。
【発明を実施するための最良の形態】
【０００７】
以下、本発明の実施形態を、図面を参照して説明する。
【０００８】
図１は、本発明の実施形態の計算機システムの構成を示すブロック図である。
【０００９】
本実施形態の計算機システムは、ストレージシステム１０１、一つ以上のホスト１０２及び管理端末１０３を備える。一つ以上のホスト１０２は、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）１０４を介してストレージシステム１０１と接続される。管理端末１０３は、管理ネットワーク１０５を介してストレージシステム１０１と接続される。
【００１０】
ストレージシステム１０１は、制御装置１１０及び複数のハードディスクドライブ（ＨＤＤ）１１８を備える。
【００１１】
制御装置１１０は、相互に接続されたＣＰＵ１１１、主メモリ１１２、キャッシュメモリ１１３、不揮発性メモリ１１４、一又は複数のホストインターフェース（ＩＦ）１１５、一又は複数のディスクインタフェース（ＩＦ）１１９及び管理ＩＦ１１６を備える。
【００１２】
ＣＰＵ１１１は、不揮発性メモリ１１４に格納されたプログラムを実行するプロセッサである。以下の説明において、不揮発性メモリ１１４に格納されたプログラムによって実行される処理は、実際にはＣＰＵ１１１によって実行される。
【００１３】
主メモリ１１２は、ＣＰＵ１１１によって実行されるプログラム、及び、ＣＰＵ１１１によって参照されるデータを格納する。例えば、不揮発性メモリ１１４に格納されたプログラム等の少なくとも一部のコピーが必要に応じて主メモリ１１２に格納されてもよい。
【００１４】
キャッシュメモリ１１３は、ＨＤＤ１１８に書き込まれるデータ、及び、ＨＤＤ１１８から読み出されたデータの少なくとも一方を一時的に格納する。
【００１５】
主メモリ１１２及びキャッシュメモリ１１３は、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような半導体メモリであってもよい。
【００１６】
不揮発性メモリ１１４は、ＣＰＵ１１１によって実行されるプログラム、及び、ＣＰＵ１１１によって参照されるデータを格納する。本実施形態の不揮発性メモリ１１４は、少なくとも、管理端末通信プログラム１２１、ＴＰ（Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇ）プログラム１２２、ＲＧ（ＲＡＩＤグループ）拡張プログラム１２３、ＬＵ（論理ボリューム）サイズ変更プログラム１２４、容量拡張プログラム１２５、ＲＧテーブル１２６、実ＬＵテーブル１２７、プールテーブル１２８、ＴＰＬＵテーブル１２９及びマッピングテーブル１３０を格納する。これらのプログラム及びテーブルについては後で詳細に説明する。不揮発性メモリ１１４は、例えば、ハードディスクドライブ又はフラッシュメモリであってもよい。
【００１７】
ＨＤＤ１１８は、ホスト１０２によって書き込まれたデータを格納する。本実施形態のＨＤＤ１１８は、ＲＡＩＤを構成する。制御装置１１０は、ホスト１０２からデータ書き込み要求を受信すると、要求されたデータに基づいてパリティを生成し、そのデータ及びパリティを複数のＨＤＤ１１８に格納する。データと、そのデータに基づいて生成されたパリティと、を格納する複数のＨＤＤ１１８がＲＡＩＤグループを構成する。
【００１８】
ホストＩＦ１１５はＳＡＮ１０４を介してホスト１０２に接続され、所定のプロトコル（例えばファイバチャネルプロトコル）を用いてホスト１０２と通信する。ディスクＩＦ１１９はＨＤＤ１１８に接続され、所定のプロトコル（例えばファイバチャネルプロトコル）を用いてＨＤＤ１１８と通信する。
【００１９】
管理ＩＦ１１６は、管理ネットワーク１０５を介して管理端末１０３に接続され、所定のプロトコルを用いて管理端末１０３と通信する。
【００２０】
ＳＡＮ１０４及び管理ネットワーク１０５は、それぞれ、いかなる種類のネットワークであってもよい。典型的には、ＳＡＮ１０４は、外部記憶装置専用の、例えばファイバーチャネルプロトコルが適用される高速なネットワークであってもよいし、管理ネットワーク１０５は、いわゆるＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）であってもよい。
【００２１】
ホスト１０２は、ストレージシステム１０１に対してデータ書き込み要求及びデータ読み出し要求を送信する計算機である。ホスト１０２は、相互に接続されたＣＰＵ（図示省略）、メモリ（図示省略）及びインターフェース（図示省略）を備えてもよい。ＣＰＵは、例えば、メモリに格納されたアプリケーションプログラム（図示省略）を実行し、必要に応じて、インターフェースを介してデータ書き込み要求及びデータ読み出し要求を送信する。
【００２２】
管理端末１０３は、ストレージシステム１０１を管理する計算機である。
【００２３】
図２は、本発明の実施形態の管理端末１０３の構成を示すブロック図である。
【００２４】
本実施形態の管理端末１０３は、ＣＰＵ２０１、主メモリ２０２、ＨＤＤ２０３、ポインティング装置２０４、入力装置２０５、出力装置２０６及び管理ＩＦ２０７を備える。
【００２５】
ＣＰＵ２０１は、ＨＤＤ２０３に格納されたプログラムを実行するプロセッサである。
【００２６】
主メモリ２０２は、ＣＰＵ２０１によって実行されるプログラム、及び、ＣＰＵ２０１によって参照されるデータを格納する。例えば、ＨＤＤ２０３に格納されたプログラムの少なくとも一部のコピーが必要に応じて主メモリ２０２に格納されてもよい。
【００２７】
ＨＤＤ２０３は、ＣＰＵ２０１によって実行されるプログラムを格納する。本実施形態のＨＤＤ２０３は、少なくとも、ＵＩ（ユーザインターフェース）制御プログラム２１１及びストレージ通信プログラム２１２を格納する。ＨＤＤ２０３は、例えば、フラッシュメモリのような不揮発性メモリによって置き換えられてもよい。
【００２８】
ポインティング装置２０４は、例えばマウスであり、入力装置２０５は、例えばキーボードである。ポインティング装置２０４及び入力装置２０５は、ユーザインターフェースを用いたユーザからの入力を受け付けるために使用される。
【００２９】
出力装置２０６は、例えば液晶画面のような画像表示装置である。出力装置２０６は、後述するユーザインターフェースを実現するための画面を表示する。
【００３０】
管理ＩＦ２０７は、管理ネットワーク１０５を介してストレージシステム１０１に接続され、所定のプロトコルを用いてストレージシステム１０１と通信する。
【００３１】
図３及び図４は、本発明の実施形態の計算機システムにおいて実行される容量拡張処理の手順の概要を示す説明図である。
【００３２】
図３及び図４のＨＤＤ１１８Ａ〜ＨＤＤ１１８Ｅの各々は、複数のＨＤＤ１１８のいずれかに相当する。図示された「Ｈ０４」〜「Ｈ０８」は、それぞれ、ＨＤＤ１１８Ａ〜ＨＤＤ１１８Ｅの識別子である。以下の説明において、ＨＤＤ１１８Ａ〜ＨＤＤ１１８ＥはそれぞれＨ０４〜Ｈ０８とも記載される。
【００３３】
図３（Ａ）は、いわゆる３Ｄ（データ）＋１Ｐ（パリティ）のＲＡＩＤレベル５が適用された例を示す。ＨＤＤ１１８Ａ〜１１８Ｄが一つのＲＡＩＤグループを構成する。
【００３４】
ＲＡＩＤレベル５が適用される場合、書き込みを要求されたデータは、複数のＨＤＤ１１８の記憶領域にまたがって設定された、いわゆるストライプに格納される。一つのストライプを構成する各ＨＤＤ１１８の記憶領域は、ストライプユニットとも呼ばれる。各ストライプユニットは、所定のサイズ（例えば６４ｋＢ（キロバイト））の記憶領域の管理単位である。
【００３５】
例えば３Ｄ＋１Ｐの場合、各ストライプは、四つのＨＤＤ１１８（例えばＨＤＤ１１８Ａ〜ＨＤＤ１１８Ｄ）にまたがって設定される。その場合、一つのストライプは、四つのストライプユニットを含む。それらの四つのストライプユニットは、それぞれ、ＨＤＤ１１８Ａ〜ＨＤＤ１１８Ｄに一つずつ含まれる。
【００３６】
書き込みを要求されたデータは、ＨＤＤ１１８Ａ〜ＨＤＤ１１８Ｄのストライプユニットに分散して格納される。具体的には、データは、ストライプユニットのサイズに分割される。そして、分割されたデータのうち三つが、一つのストライプの三つのストライプユニットに順次格納される。残りの一つのストライプユニットには、他の三つのストライプユニットに格納されたデータから生成されたパリティが格納される。残りのデータも同様にして順次ストライプに格納される。
【００３７】
なお、本実施形態は、ストライプユニットのサイズが６４ｋＢである例を示す。
【００３８】
実論理ボリューム（ＬＵ）３０２Ａは、ホスト１０２によって論理的な記憶装置として認識される。図３（Ａ）において、実ＬＵ３０２Ａは、Ｈ０４〜Ｈ０７までの４台のＨＤＤ１１８の記憶領域からなる。言い換えると、実ＬＵ３０２Ａは、Ｈ０４〜Ｈ０７までの４台のＨＤＤ１１８にまたがって設定された一つ以上のストライプを含む。図示された「Ｒ０２」は、実ＬＵ３０２Ａの識別子である。以下の説明において、実ＬＵ３０２ＡはＲ０２とも記載される。
【００３９】
Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇ  ＬＵ（ＴＰＬＵ）３０１は、ＴＰプログラム１２２によってホスト１０２に提供される仮想的な論理ボリュームである。ＴＰＬＵ３０１が生成された時点で、そのサイズ（すなわち記憶容量）は定義されるが、ＨＤＤ１１８の記憶領域はまだＴＰＬＵ３０１に割り当てられない。その後、ＴＰプログラム１２２は、ホスト１０２からＴＰＬＵ３０１へのデータの書き込み要求を受信すると、要求されたデータを格納する記憶領域をＴＰＬＵ３０１に割り当てる。このとき、ＴＰプログラム１２２は、実ＬＵ３０２Ａの記憶領域（すなわち実記憶領域）のうち、まだＴＰＬＵ３０１に割り当てられていない記憶領域を新たにＴＰＬＵ３０１に割り当てる。要求されたデータは、ＴＰＬＵ３０１に割り当てられた記憶領域に格納される。
【００４０】
実ＬＵ３０２Ａの記憶領域は、ページと呼ばれる所定のサイズの記憶領域ごとにＴＰＬＵ３０１に割り当てられる。図３（Ａ）は、ＴＰＬＵ３０１のページ３１１Ａに実ＬＵ３０２Ａのページ３１２Ａが割り当てられ、ＴＰＬＵ３０１のページ３１１Ｂに実ＬＵ３０２Ａのページ３１２Ｂが割り当てられている例を示す。ページ３１１Ａ及び３１１ＢはＴＰＬＵ３０１の仮想的な記憶領域であり、ページ３１２Ａ及び３１２Ｂは実ＬＵ３０２Ａの実記憶領域である。
【００４１】
各ページは、一つ以上のストライプを含む。例えば、ページのサイズが３２ＭＢ（メガバイト）であり、ストライプユニットのサイズが６４ｋＢである場合、１ページは５１２個のストライプユニットからなる複数のストライプを含む。この場合、ＴＰＬＵ３０１に割り当てられた実ＬＵのページに格納されるデータは、実際には、そのページに含まれる一つ以上のストライプに格納される。言い換えると、各ページに格納されるデータは、複数のＨＤＤ（例えば、ＨＤＤ１１８Ａ〜ＨＤＤ１１８Ｄ）に含まれる複数のストライプユニットに分散して格納される。
【００４２】
図３（Ａ）の例において、実ＬＵ３０２Ａの斜線部分は、既にＴＰＬＵ３０１に割り当てられた記憶領域を示す。
【００４３】
プール３０３は、ＴＰＬＵ３０１に割り当て可能な記憶領域を提供するための一つ以上の実ＬＵのグループである。図３（Ａ）の例では、プール３０３は、一つの実ＬＵ３０２Ａのみからなる。図示された「Ｐ００」は、プール３０３の識別子である。以下の説明において、プール３０３はＰ００とも記載される。
【００４４】
ＴＰプログラム１２２は、まだ実ＬＵの記憶領域が割り当てられていないＴＰＬＵ３０１の記憶領域へのデータの書き込み要求をホスト１０２から受信すると、ＴＰＬＵ３０１に対応するプール３０３に含まれる実ＬＵ３０２Ａから、まだＴＰＬＵ３０１に割り当てられていないページを選択し、そのページを新たにＴＰＬＵ３０１に割り当てる。書き込みを要求されたデータは、割り当てられた実ＬＵ３０２Ａのページに格納される。
【００４５】
なお、本実施形態では、一つ以上の実ＬＵがプールとして定義されるが、一つ以上のＲＡＩＤグループがプールとして定義されてもよい。
【００４６】
ＴＰＬＵ３０１のサイズとして、それに対応するプール３０３より大きいサイズが定義されてもよい。あるいは、複数のＴＰＬＵが一つのプールに対応付けられてもよい。そのような場合、プール３０３の記憶容量がやがて不足する可能性がある。記憶容量の不足を解消するために、図３（Ａ）の例では、ＨＤＤ１１８Ｅが増設される。具体的には、例えば、プール３０３に含まれるページのうち、既にＴＰＬＵ３０１に割り当てられたページの割合が所定の閾値を超えた場合にＨＤＤ１１８Ｅが増設されてもよい。
【００４７】
ＨＤＤ１１８Ｅが増設されると、ＬＵサイズ変更プログラム１２４は、実ＬＵ３０２Ａのサイズを、既にＴＰＬＵ３０１に割り当てられた記憶領域のサイズ、すなわち、斜線が施された記憶領域のサイズに縮小する（図３（Ｂ）参照）。
【００４８】
次に、容量拡張プログラム１２５は、新たな実ＬＵ３０２Ｂを作成し、それをプール３０３に追加する（図３（Ｃ）参照）。実ＬＵ３０２Ｂは、図３Ｂにおけるサイズ縮小によって生じたＨＤＤ１１８Ａ〜１１８Ｄの空き記憶領域と、それらの空き記憶領域に対応するＨＤＤ１１８Ｅの記憶領域とからなる。これらの記憶領域は、新たに４Ｄ＋１ＰのＲＡＩＤレベル５を構成する。この時点で、増設されたＨＤＤ１１８Ｅの記憶領域のうち実ＬＵ３０２Ｂに含まれない領域は、実ＬＵ３０２Ａのデータ又はパリティのいずれも格納されていない空き領域である。
【００４９】
次に、ＲＧ拡張プログラム１２３は、実ＬＵ３０２Ａのデータ幅拡張を開始する（図４（Ａ）参照）。ここで、データ幅拡張とは、ストライプの幅（すなわち一つのストライプを構成するストライプユニットの数）を拡張する処理である。図４（Ａ）の例において、データ幅拡張とは、それまで３Ｄ＋１Ｐが適用されていた実ＬＵ３０２Ａに新たに４Ｄ＋１Ｐが適用されるように、実ＬＵ３０２Ａに対応するＨＤＤ１１８Ａ〜１１８Ｄの記憶領域から読み出されたデータをＨＤＤ１１８Ａ〜１１８Ｅに再配置することを意味する。この再配置は、公知の方法、例えば特開平７−１１４１２１号公報に記載された方法によって実現されてもよい。
【００５０】
実ＬＵ３０２Ｂが作成された後、実ＬＵ３０２Ａのデータ幅拡張が完了するまでの間に新たにＴＰＬＵ３０１にページを割り当てる必要が生じた場合、実ＬＵ３０２ＢのページがＴＰＬＵ３０１に割り当てられる。例えば、まだ実ＬＵの記憶領域が割り当てられていないＴＰＬＵ３０１のページ３１１Ｃ内の記憶領域にデータが書き込まれた場合、ＴＰプログラム１２２は、実ＬＵ３０２Ｂ内のページ３１２Ｃを新たにページ３１１Ｃに割り当てる。
【００５１】
データ幅拡張によって、ＨＤＤ１１８Ａ〜１１８Ｄから読み出された実ＬＵ３０２Ａのデータは、ＨＤＤ１１８Ａ〜１１８Ｅに分散して格納される。その結果、図３（Ｃ）の時点におけるＨＤＤ１１８Ｅの空き領域が減少し、その減少した空き領域に相当する空き領域（すなわち空きストライプ）がＨＤＤ１１８Ａ〜１１８Ｄに新たに出現する。（図４（Ｂ）参照）。
【００５２】
次に、ＬＵサイズ変更プログラム１２４は、いずれの実ＬＵにも含まれない空きストライプを新たに実ＬＵ３０２Ａに含めることによって、実ＬＵ３０２Ａのサイズを拡大する（図４（Ｃ）参照）。
【００５３】
以下、テーブル及びフローチャートを参照して、図３及び図４の手順を詳細に説明する。
【００５４】
図５は、本発明の実施形態のＲＧテーブル１２６の説明図である。
【００５５】
ＲＧテーブル１２６は、各ＲＡＩＤグループの構成及び状態を示す情報を含む。具体的には、ＲＧテーブル１２６は、ＲＧ＿ＩＤ５０１、ＨＤＤ＿ＩＤリスト５０２、ＲＡＩＤレベル５０３、状態５０４及び増設ＨＤＤ＿ＩＤリスト５０５を含む。
【００５６】
ＲＧ＿ＩＤ５０１として、ストレージシステム１０１内に生成された各ＲＡＩＤグループの識別子が登録される。
【００５７】
ＨＤＤ＿ＩＤリスト５０２として、各ＲＡＩＤグループに含まれるＨＤＤ１１８の識別子のリストが登録される。
【００５８】
ＲＡＩＤレベル５０３として、各ＲＡＩＤグループに適用されるＲＡＩＤレベルが登録される。例えば、ＲＡＩＤレベル５０３として、ＲＡＩＤレベル５を示す「ＲＡＩＤ５」が登録される。
【００５９】
状態５０４として、各ＲＡＩＤグループの状態を示す情報が登録される。各ＲＡＩＤグループの状態を示す情報とは、例えば、「正常」又は「拡張中」等である。「正常」は、ＲＡＩＤグループが正常に動作していること（すなわち、そのＲＡＩＤグループに対するデータの書き込み及び読み出しが可能であること）を示す。「拡張中」は、ＲＡＩＤグループにＨＤＤ１１８が増設され、図３及び図４に示す容量拡張処理が実行されていることを示す。
【００６０】
増設ＨＤＤ＿ＩＤリスト５０５として、ＲＡＩＤグループに新たに増設されたＨＤＤ１１８の識別子のリストが登録される。
【００６１】
図５の例において、ＲＧ＿ＩＤ５０１の値「ＲＧ０１」に対応するＨＤＤ＿ＩＤリスト５０２、ＲＡＩＤレベル５０３、状態５０４及び増設ＨＤＤ＿ＩＤリスト５０５に、それぞれ、「Ｈ０４、Ｈ０５、Ｈ０６、Ｈ０７」、「ＲＡＩＤ５」、「拡張中」及び「Ｈ０８」が登録されている。これは、図３（Ａ）に示すように、ＨＤＤ「Ｈ０４」１１８Ａ〜ＨＤＤ「Ｈ０７」１１８ＤからなるＲＡＩＤグループ「ＲＧ０２」のＲＡＩＤレベルが「５」であり、そのＲＡＩＤグループに新たにＨＤＤ「Ｈ０８」１１８Ｅが増設され、容量拡張処理が実行されていることを示す。
【００６２】
図６は、本発明の実施形態の実ＬＵテーブル１２７の説明図である。
【００６３】
実ＬＵテーブル１２７は、各実ＬＵの構成を示す情報を含む。具体的には、実ＬＵテーブル１２７は、実ＬＵ＿ＩＤ６０１、ＲＧ＿ＩＤ６０２、開始ストライプ番号６０３及びサイズ６０４を含む。
【００６４】
実ＬＵ＿ＩＤ６０１として、各実ＬＵの識別子が登録される。
【００６５】
ＲＧ＿ＩＤ６０２として、各実ＬＵが含まれるＲＡＩＤグループの識別子が登録される。
【００６６】
開始ストライプ番号６０３として、各実ＬＵに割り当てられた記憶領域の先頭に位置するストライプに付与された番号が登録される。
【００６７】
サイズ６０４として、各実ＬＵのサイズ（すなわちデータ記憶容量）が登録される。ＲＡＩＤが構成される場合、サイズ６０４には、格納可能なユーザデータの（すなわちパリティ以外のデータの）記憶容量が登録される。
【００６８】
図６の例において、実ＬＵ＿ＩＤ６０１の値「Ｒ０２」に対応するＲＧ＿ＩＤ６０２、開始ストライプ番号６０３及びサイズ６０４として、それぞれ、「ＲＧ０１」、「０」及び「９００ＧＢ」が登録されている。これは、図３（Ａ）に示すように、実ＬＵ「Ｒ０２」３０２Ａが、ＲＡＩＤグループ「ＲＧ０１」（図５参照）の先頭ストライプ（すなわち番号「０」が付与されたストライプ）から始まる９００ＧＢ（ギガバイト）の記憶領域に対応することを示す。
【００６９】
なお、図３（Ａ）は、各ＨＤＤ１１８の記憶容量が３００ＧＢである例を示す。この場合、４台のＨＤＤ１１８の記憶容量の合計は１２００ＧＢとなる。しかし、３Ｄ＋１Ｐの場合、その容量の４分の１にはパリティが格納されるため、データの容量は９００ＧＢとなる。
【００７０】
図７は、本発明の実施形態のプールテーブル１２８の説明図である。
【００７１】
プールテーブル１２８は、プールの状態を示す情報を含む。具体的には、プールテーブル１２８は、プールＩＤ７０１、実ＬＵ＿ＩＤ７０２、割当済最終ページ番号７０３及び状態７０４を含む。
【００７２】
プールＩＤ７０１として、各プールの識別子が登録される。
【００７３】
実ＬＵ＿ＩＤ７０２として、各プールに含まれる実ＬＵの識別子が登録される。
【００７４】
割当済最終ページ番号７０３として、各プールに含まれる実ＬＵのページのうち、既にＴＰＬＵに割り当てられている最後のページの番号が登録される。なお、本実施形態において、実ＬＵのページは、付与されたページ番号の順にＴＰＬＵに割り当てられる。このため、割当済最終ページ番号７０３として登録されている番号以前の番号が付与されたページは、全てＴＰＬＵに割り当てられており、その番号より後の番号が付与されたページは、いずれも、まだＴＰＬＵに割り当てられていない。
【００７５】
状態７０４として、各実ＬＵの状態を示す情報が登録される。各実ＬＵの状態を示す情報とは、例えば、「正常」又は「割当禁止」等である。「正常」は、実ＬＵが正常に動作している状態を示す。この状態において、実ＬＵ内のページを新たにＴＰＬＵに割り当てることが可能である。「割当禁止」は、実ＬＵ内のページを新たにＴＰＬＵに割り当てることが禁止された状態である。
【００７６】
図７の例において、プールＩＤ７０１の値「Ｐ００」に対応する実ＬＵ＿ＩＤ７０２、割当済最終ページ番号７０３及び状態７０４として、それぞれ、「Ｒ０２」、「１９２００」及び「正常」が登録されている。これは、図３（Ａ）に示すように、プール「Ｐ００」３０３に実ＬＵ「Ｒ０２」３０２Ａが含まれ、実ＬＵ「Ｒ０２」３０２Ａの先頭ページから第１９２００ページまでが既にＴＰＬＵ３０１に割り当てられ（言い換えると、第１９２００ページ以降のページは、まだＴＰＬＵ３０１に割り当てられておらず）、実ＬＵ「Ｒ０２」３０２Ａのページを新たにＴＰＬＵ３０１に割り当てることが可能であることを示す。
【００７７】
なお、本実施形態は、ページのサイズが３２ＭＢ（メガバイト）である例を示す。この場合、１９２００ページは６００ＧＢに相当する。図６に示すように、実ＬＵ「Ｒ０２」３０２Ａのサイズは９００ＧＢである。このため、図７の例は、実ＬＵ「Ｒ０２」３０２Ａの記憶領域のうち３分の２が既にＴＰＬＵ３０１に割り当てられ、残りの３分の１がまだ割り当てられていないことを示す。
【００７８】
図８は、本発明の実施形態のＴＰＬＵテーブル１２９の説明図である。
【００７９】
ＴＰＬＵテーブル１２９は、各ＴＰＬＵの構成を示す情報を含む。具体的には、ＴＰＬＵテーブル１２９は、ＴＰＬＵ＿ＩＤ８０１、サイズ８０２及びプールＩＤ８０３を含む。
【００８０】
ＴＰＬＵ＿ＩＤ８０１として、各ＴＰＬＵの識別子が登録される。
【００８１】
サイズ８０２として、各ＴＰＬＵに定義されたサイズ（すなわち記憶容量）が登録される。
【００８２】
プールＩＤ８０３として、各ＴＰＬＵに対応するプールの識別子が登録される。ＴＰＬＵに対応するプールとは、ＴＰＬＵに割り当て可能なページを供給するプールである。
【００８３】
図８の例において、ＴＰＬＵ＿ＩＤ８０１の値「Ｔ００」に対応するサイズ８０２及びプールＩＤ８０３として、それぞれ、「２４０ＧＢ」及び「Ｐ００」が登録されている。これは、「Ｔ００」で識別されるＴＰＬＵ（例えばＴＰＬＵ３０１）の記憶容量が２４０ＧＢと定義され、そのＴＰＬＵにプール「Ｐ００」３０３が対応することを示す。すなわち、この場合、プール「Ｐ００」３０３のページ（例えばページ３１２Ａ）をＴＰＬＵ３０１に割り当てることができる。
【００８４】
さらに、図８の例において、ＴＰＬＵ＿ＩＤ８０１の値「Ｔ００」、「Ｔ０１」及び「Ｔ０２」に対応するプールＩＤ８０３として、いずれも「Ｐ００」が登録されている。これは、プール「Ｐ００」３０３が、それぞれ「Ｔ００」、「Ｔ０１」及び「Ｔ０２」によって識別される三つのＴＰＬＵに対応すること、すなわち、プール「Ｐ００」３０３の各ページが、それら三つのＴＰＬＵのどれに割り当てられてもよいことを示す。
【００８５】
図９は、本発明の実施形態のマッピングテーブル１３０の説明図である。
【００８６】
マッピングテーブル１３０は、ＴＰＬＵのページと、それに割り当てられた実ＬＵのページとの対応関係を示す情報を含む。具体的には、マッピングテーブル１３０は、ＴＰＬＵ＿ＩＤ９０１、ＴＰページ番号９０２、実ＬＵ＿ＩＤ９０３及び実ページ番号９０４を含む。
【００８７】
ＴＰＬＵ＿ＩＤ９０１として、ＴＰＬＵの識別子が登録される。
【００８８】
ＴＰページ番号９０２として、ＴＰＬＵ内のページの番号が登録される。
【００８９】
実ＬＵ＿ＩＤ９０３として、実ＬＵの識別子が登録される。
【００９０】
実ページ番号９０４として、実ＬＵ内のページの番号が登録される。
【００９１】
図９の例において、マッピングテーブル１３０の先頭のエントリ（すなわち行）のＴＰＬＵ＿ＩＤ９０１、ＴＰページ番号９０２、実ＬＵ＿ＩＤ９０３及び実ページ番号９０４として、それぞれ、「Ｔ００」、「ＴＰ００」、「Ｒ００」及び「ＲＰ００」が登録されている。これは、「Ｔ００」によって識別されるＴＰＬＵの、番号「ＴＰ００」が付与されたページに、「Ｒ００」によって識別される実ＬＵの、番号「ＲＰ００」が付与されたページが割り当てられていることを示す。
【００９２】
なお、ＴＰＬＵのページにまだ実ＬＵのページが割り当てられていない場合、そのページに対応する実ＬＵ＿ＩＤ９０３及び実ページ番号９０４として、「ｎｕｌｌ」が登録される。
【００９３】
上記のテーブルの値のいくつかは、図３及び図４に示す処理の進行に伴って変更される。変更されたテーブルの値の例を、図１０及び図１１を参照して説明する。
【００９４】
図１０は、本発明の実施形態の変更された実ＬＵテーブル１２７の説明図である。
【００９５】
具体的には、図１０に示す実ＬＵテーブル１２７は、実ＬＵ３０２Ａのサイズが縮小され（図３（Ｂ）参照）、さらに、新たな実ＬＵ３０２Ｂが追加されたこと（図３（Ｃ）参照）を反映するように変更されている。
【００９６】
以下、図１０が図６と異なる点について説明する。
【００９７】
図１０に示す実ＬＵテーブル１２７では、実ＬＵ＿ＩＤ６０１の値「Ｒ０２」に対応するサイズ６０４の値が「６００ＧＢ」に変更されている。図７に示すように、図３（Ａ）の時点において、実ＬＵ「Ｒ０２」３０２Ａの９００ＧＢの記憶領域のうち、６００ＧＢに相当する記憶領域がＴＰＬＵ３０１に割り当てられている。このため、図３（Ｂ）の手順において、実ＬＵ「Ｒ０２」３０２Ａのサイズが６００ＧＢに縮小される。この縮小は、図１０に示すように、サイズ６０４の値を「９００ＧＢ」から「６００ＧＢ」に変更することによって実行される。
【００９８】
なお、既に説明したように、本実施形態において一つのストライプユニットのサイズは６４ｋＢである。このため、３Ｄ＋１Ｐの場合、６００ＧＢのデータ及びそのデータから生成されたパリティを格納するために必要なストライプ数は３２７６８００個である。
【００９９】
さらに、図１０に示す実ＬＵテーブル１２７には、新たなエントリが追加されている。追加されたエントリの実ＬＵ＿ＩＤ６０１、ＲＧ＿ＩＤ６０２、開始ストライプ番号６０３及びサイズ６０４として、それぞれ、「Ｒ０３」、「ＲＧ０１」、「３２７６８００」及び「４００ＧＢ」が登録される。このエントリは、図３（Ｃ）において新たに作成された実ＬＵ「Ｒ０３」３０２Ｂに対応する。これは、実ＬＵ「Ｒ０３」３０２Ｂが、ＲＡＩＤグループ「ＲＧ０１」（図５参照）の番号「３２７６８００」が付与されたストライプ（すなわち、３２７６８０１番目のストライプ）から始まる４００ＧＢの記憶領域に対応することを示す。
【０１００】
なお、３２７６８０１番目以降のストライプは、増設されたＨＤＤ１１８Ｅを含む５台のＨＤＤ１１８をまたぐように設定される。このため、これらの各ストライプは、五つのストライプユニットからなる。
【０１０１】
各ＨＤＤ１１８の記憶容量が３００ＧＢであり、かつ、各ストライプユニットのサイズが６４ｋＢである場合、これらのＨＤＤ１１８からなるＲＡＩＤグループに設定されるストライプの総数は、４９１５２００個となる。これらのストライプに４Ｄ＋１Ｐが適用される場合、３２７６８０１番目のストライプから最後のストライプまでのデータの記憶容量は４００ＧＢとなる。
【０１０２】
図１０は、図３（Ｃ）の手順が終了した時点の実ＬＵテーブル１２７を示すが、その後図４（Ｃ）の手順において、実ＬＵ「Ｒ０２」３０２Ａに対応するサイズ６０４の値が「８００ＧＢ」に変更される。この変更については後述する（図１４参照）。
【０１０３】
図１１は、本発明の実施形態の変更されたプールテーブル１２８の説明図である。
【０１０４】
具体的には、図１１に示すプールテーブル１２８は、新たな実ＬＵ３０２Ｂが追加され（図３（Ｃ）参照）、さらに、実ＬＵ３０２Ａからのページの割り当てが禁止されたこと（図４（Ａ）参照）を反映するように変更されている。
【０１０５】
以下、図１１が図７と異なる点について説明する。
【０１０６】
図１１に示すプールテーブル１２８では、実ＬＵ＿ＩＤ７０２の値「Ｒ０２」に対応する状態７０４の値が「割当禁止」に変更されている。これは、図４（Ａ）を参照して説明したように、実ＬＵ「Ｒ０２」３０２ＡからＴＰＬＵ３０１へのページの割り当てが禁止されていることを示す。
【０１０７】
さらに、図１１に示すプールテーブル１２８には、新たなエントリが追加されている。追加されたエントリのプールＩＤ７０１、実ＬＵ＿ＩＤ７０２、割当済最終ページ番号７０３及び状態７０４として、それぞれ、「Ｐ００」、「Ｒ０３」、「Ｎ／Ａ」及び「正常」が登録される。このエントリは、図３（Ｃ）において新たに作成された実ＬＵ「Ｒ０３」３０２Ｂに対応する。これは、プール「Ｐ００」３０３に実ＬＵ「Ｒ０３」３０２Ｂが含まれ、実ＬＵ「Ｒ０３」３０２ＢのいずれのページもまだＴＰＬＵ３０１に割り当てられておらず、実ＬＵ「Ｒ０３」３０２Ｂのページを新たにＴＰＬＵ３０１に割り当てることが可能であることを示す。
【０１０８】
図１２は、本発明の実施形態の容量拡張画面の説明図である。
【０１０９】
図１２に示す容量拡張画面１２００は、例えば、管理端末１０３の出力装置２０６に表示されることによって、管理者に対してグラフィカルユーザインターフェースを提供する。管理者は、容量拡張画面１２００を参照及び操作することによって、容量拡張処理の実行をストレージシステム１０１に指示することができる。
【０１１０】
容量拡張画面１２００は、データ幅拡張対象ＲＡＩＤグループ表示部１２０１、増設対象ＨＤＤ表示部１２０２、拡張開始ボタン１２０３及び取り消しボタン１２０４からなる。
【０１１１】
データ幅拡張対象ＲＡＩＤグループ表示部１２０１には、ストレージシステム１０１内に構成されているＲＡＩＤグループの識別子が表示される。管理者は、表示された識別子から、これから拡張しようとするＲＡＩＤグループの識別子を選択することができる。
【０１１２】
増設対象ＨＤＤ表示部１２０２には、ストレージシステム１０１が備えるＨＤＤ１１８のうち、まだいずれのＲＡＩＤグループにも含まれていないＨＤＤ１１８の識別子が表示される。管理者は、表示された識別子から、容量拡張のためにＲＡＩＤグループに増設するＨＤＤ１１８を選択することができる。
【０１１３】
管理者が、これから拡張しようとするＲＡＩＤグループの識別子及び増設するＨＤＤ１１８を選択して、拡張開始ボタン１２０３を操作すると、選択されたＲＡＩＤグループに選択されたＨＤＤを増設することによる容量拡張処理が開始される。
【０１１４】
例えば、管理者が、データ幅拡張対象ＲＡＩＤグループ表示部１２０１から「ＲＧ０１」を選択し、増設対象ＨＤＤ表示部１２０２から「Ｈ０８」を選択して、拡張開始ボタン１２０３を操作すると、ＨＤＤ「Ｈ０４」１１８Ａ〜ＨＤＤ「Ｈ０７」１１８ＤからなるＲＡＩＤグループ「ＲＧ０１」に新たにＨＤＤ「Ｈ０８」１１８Ｅを増設する処理を開始する指示が管理端末１０３からストレージシステム１０１に送信される。ストレージシステム１０１は、受信した指示に従って、容量拡張処理を開始する（図３（Ａ）〜図４（Ｃ）、図１３及び図１４参照）。
【０１１５】
一方、管理者が取り消しボタン１２０４を操作すると、データ幅拡張対象ＲＡＩＤグループ表示部１２０１及び増設対象ＨＤＤ表示部１２０２における選択が取り消される。
【０１１６】
なお、上記の選択及びボタン操作は、例えば、管理者がポインティング装置２０４を用いることによって実行されてもよい。
【０１１７】
上記図１２は、管理者がこれから容量を拡張しようとするＲＡＩＤグループを選択する例を示すが、管理者は、これから容量を拡張しようとするＴＰＬＵ３０１又はプール３０３を選択してもよい。その場合、データ幅拡張対象ＲＡＩＤグループ表示部１２０１には、選択可能なＴＰＬＵ３０１又はプール３０３の識別子が表示されてもよい。
【０１１８】
図１３及び図１４は、本発明の実施形態において実行される容量拡張処理を示すフローチャートである。
【０１１９】
図１２を参照して説明したように、管理者がこれから拡張しようとするＲＡＩＤグループの識別子及び増設するＨＤＤ１１８の識別子を選択し、容量拡張処理の実行を指示すると、ストレージシステム１０１における容量拡張処理が開始される。以下の説明において、管理者によって選択されたＲＡＩＤグループをデータ幅拡張対象ＲＡＩＤグループ、管理者によって選択されたＨＤＤ１１８を増設対象ＨＤＤと記載する。
【０１２０】
最初に、容量拡張プログラム１２５は、ＲＧテーブル１２６のデータ幅拡張対象ＲＡＩＤグループに対応する状態５０４の値を「拡張中」に変更し、さらに、増設対象ＨＤＤの識別子を増設ＨＤＤ＿ＩＤリスト５０５に追加する（ステップ１３０１）。図３（Ａ）に示したＲＡＩＤグループの状態は、ステップ１３０１が実行された直後の時点のものである。
【０１２１】
なお、管理者がこれから拡張しようとするＴＰＬＵ３０１を選択した場合、容量拡張プログラム１２５は、ＴＰＬＵテーブル１２９、プールテーブル１２８及び実ＬＵテーブル１２７を参照して、選択されたＴＰＬＵ３０１に割り当て可能な記憶領域を供給するＲＡＩＤグループをデータ幅拡張対象ＲＡＩＤグループとして特定する。管理者がこれから拡張しようとするプール３０３を選択した場合、容量拡張プログラム１２５は、プールテーブル１２８及び実ＬＵテーブル１２７を参照して、選択されたプール３０３に含まれる実ＬＵが設定されたＲＡＩＤグループをデータ幅拡張対象ＲＡＩＤグループとして特定する。
【０１２２】
次に、容量拡張プログラム１２５は、データ幅拡張対象ＲＡＩＤグループ内に、プールに含まれる実ＬＵがあるか否かを判定する（ステップ１３０２）。具体的には、容量拡張プログラム１２５は、データ幅拡張対象ＲＡＩＤグループに含まれる実ＬＵの少なくとも一つの識別子がプールテーブル１２８の実ＬＵ＿ＩＤ７０２として登録されているか否かを判定する。
【０１２３】
ステップ１３０２において、データ幅拡張対象ＲＡＩＤグループ内に、プールに含まれる実ＬＵがないと判定された場合、データ幅拡張対象ＲＡＩＤグループ内のいずれの記憶領域も、ＴＰＬＵに割り当てられない。この場合、図３（Ａ）から図４（Ｃ）に示す処理を実行することができないため、従来と同様のデータ幅拡張処理が実行される（ステップ１３０８）。従来と同様のデータ幅拡張処理とは、例えば特開平７−１４１１２１号公報に記載されたものである。ステップ１３０８が実行されると、容量拡張処理が終了する。
【０１２４】
一方、ステップ１３０２において、データ幅拡張対象ＲＡＩＤグループ内に、プールに含まれる実ＬＵがあると判定された場合、容量拡張プログラム１２５は、そのプールに含まれる実ＬＵに対応するプールテーブル１２８の状態７０４の値を「割当禁止」に変更する（ステップ１３０３）。
【０１２５】
次に、容量拡張プログラム１２５は、プールに含まれる実ＬＵの割当済最終ページ番号７０３を参照して、縮小された実ＬＵのサイズ（より正確には、これから縮小される実ＬＵの、縮小後のサイズ）を算出する（ステップ１３０４）。具体的には、その実ＬＵの先頭ページから割当済最終ページ番号７０３に登録されたページまでの全ページのサイズの合計が、縮小された実ＬＵのサイズとして算出される。
【０１２６】
次に、ＬＵサイズ変更プログラム１２４は、実ＬＵをステップ１３０４で算出されたサイズに縮小する（ステップ１３０５）。ステップ１３０４及び１３０５は、図３（Ｂ）及び図１０において説明した手順に相当する。
【０１２７】
次に、容量拡張プログラム１２５は、データ幅拡張対象ＲＡＩＤグループに含まれる全ＨＤＤにまたがる実ＬＵを新たに作成し、その実ＬＵをプールに追加する（ステップ１３０６）。これは、図３（Ｃ）、図１０及び図１１において説明した手順に相当する。
【０１２８】
次に、ＲＧ拡張プログラム１２３は、データ幅拡張対象ＲＡＩＤグループのデータ幅拡張処理を開始する（ステップ１３０７）。これは、図４（Ａ）において説明した手順に相当する。
【０１２９】
例えば、図３（Ａ）に示すように４台のＨＤＤ１１８からなるＲＡＩＤグループに１台のＨＤＤ１１８が増設された場合、ステップ１３０７において、既にデータが格納されている実ＬＵ３０２Ａを対象としてデータ幅拡張処理が開始される。この例では、ＨＤＤ１１８Ｅが増設された結果、一つのストライプを構成するストライプユニットの数が４から５に増加する。この場合、データ幅拡張処理によって、３Ｄ＋１Ｐが適用されている実ＬＵ３０２Ａに新たに４Ｄ＋１Ｐが適用される。
【０１３０】
具体的には、例えば、ＲＧ拡張プログラム１２３は、実ＬＵ３０２Ａの先頭からストライプユニットに格納されたデータを順次読み出す。そして、ＲＧ拡張プログラム１２３は、順次読み出された４つのストライプユニットのデータから新たにパリティを算出する。そして、それらのデータ及びパリティを、拡張された一つのストライプに上書きする。このような新たなパリティの計算及びデータの再配置が、実ＬＵ３０２Ａ内の全てのデータについて終了したとき、データ幅拡張処理が終了する。
【０１３１】
なお、上記の具体例では、実ＬＵ３０２Ａのサイズは、当初９００ＧＢであったが、データ幅拡張処理が開始される前に、実際に格納されているデータ量に相当する６００ＧＢに縮小されている。これによって、データ幅拡張処理の対象となるストライプの数が削減されるため、データ幅拡張処理に要する時間を短縮することができる。
【０１３２】
データ幅拡張処理が開始された後、容量拡張プログラム１２５は、データ幅拡張処理が終了したか否かを判定する（ステップ１４０３）。容量拡張プログラム１２５は、データ幅拡張処理が終了したと判定されるまで、データ幅拡張処理を続行する。
【０１３３】
データ幅拡張処理が実行されている間、容量拡張プログラム１２５は、ＴＰＬＵのページのうち、まだ実ＬＵのページが割り当てられていないページに対する書き込み要求を受信したか否かを判定する（ステップ１４０１）。
【０１３４】
まだ実ＬＵのページが割り当てられていないページに対する書き込み要求を受信したと判定された場合、ＴＰプログラム１２２は、ステップ１３０６において新たに作成された実ＬＵのページをＴＰＬＵに割り当てる（ステップ１４０２）。これは、図４（Ａ）において説明した手順に相当する。
【０１３５】
後述するように、上記の具体例では、容量拡張処理によって、ＴＰＬＵ３０１に割り当てられた実ＬＵの記憶容量の合計が９００ＧＢから最終的に１２００ＧＢに拡張される。しかし、容量拡張処理が終了する前であっても、上記のステップ１４０２によって、新たに作成された実ＬＵ３０２Ｂの記憶領域をＴＰＬＵ３０１に割り当てることができる。
【０１３６】
容量拡張処理が開始される直前の時点において、ＴＰＬＵ３０１に新たに割り当て可能な実ＬＵの記憶領域の容量は、その時点の空き容量に相当する３００ＧＢであった。一方、容量拡張処理が終了すると、ＴＰＬＵ３０１に新たに割り当て可能な実ＬＵの記憶領域の容量は、上記の３００ＧＢに増設された３００ＧＢを加えた６００ＧＢに拡張される。
【０１３７】
しかし、容量拡張処理が終了する前であっても、ステップ１３０６における実ＬＵの作成が終了した後であれば、ＴＰＬＵ３０１に新たに割り当て可能な実ＬＵの記憶領域の容量は、４００ＧＢとなる。このように、本実施形態によれば、容量拡張処理が開始された直後から（より正確には、ステップ１３０６における実ＬＵの作成が終了した後であれば、データ幅拡張処理が終了する前であっても）、増設された記憶容量の一部を使用することが可能になる。
【０１３８】
データ幅拡張処理が終了すると、容量拡張プログラム１２５は、ステップ１３０５において縮小された実ＬＵについて、拡大可能なサイズを算出する（ステップ１４０４）。データ幅拡張処理が終了した時点のＲＡＩＤグループの状態は、図４（Ｂ）に示したとおりである。
【０１３９】
例えば、実ＬＵ３０２Ａに６００ＧＢのデータが格納されており、各ストライプユニットのサイズが６４ｋＢである場合に、データ幅拡張処理によって４Ｄ＋１Ｐが適用されると、先頭から２４５７６００個のストライプ（すなわち、番号「０」から番号「２４５７５９９」までが付与されたストライプ）にデータ及びパリティが格納される。
【０１４０】
この時点で、新たな実ＬＵ「Ｒ０３」３０２Ｂの開始ストライプ番号は３２７６８００である。すなわち、この時点で、番号「２４５７６００」から番号「３２７６７９９」までが付与されたストライプは空き記憶領域である。このため、番号「３２７６７９９」が付与されたストライプが実ＬＵ３０２Ａの末尾となるように、実ＬＵ３０２Ａを拡大することができる。
【０１４１】
番号「０」から番号「３２７６７９９」までが付与された３２７６８００個のストライプに格納可能なデータ量は、８００ＧＢである。すなわち、上記の具体例では、ステップ１４０４において、拡大可能なサイズとして８００ＧＢが算出される。
【０１４２】
次に、ＬＵサイズ変更プログラム１２４は、ステップ１４０４において算出されたサイズまで実ＬＵのサイズを拡大する（ステップ１４０５）。具体的には、ＬＵサイズ変更プログラム１２４は、ステップ１４０４において算出されたサイズを、実ＬＵテーブル１２７のサイズ６０４に登録する。例えば、上記のように、実ＬＵ３０２Ａのサイズとして８００ＧＢが算出された場合、ＬＵサイズ変更プログラム１２４は、実ＬＵ「Ｒ０２」３０２Ａに対応するサイズ６０４の値を「８００ＧＢ」に変更する。
【０１４３】
これによって、ＴＰＬＵ３０１に割り当てられた実ＬＵのサイズの合計は、９００ＧＢ（図６参照）から１２００ＧＢ（すなわち８００ＧＢ＋４００ＧＢ）に拡張される。
【０１４４】
ステップ１４０４におけるサイズの算出及びステップ１４０５におけるサイズの拡大の手順は、図４（Ｃ）において説明した手順に相当する。
【０１４５】
次に、容量拡張プログラム１２５は、ステップ１３０３において「割当禁止」に変更されたプールテーブル１２８の状態７０４の値を「正常」に変更する（ステップ１４０６）。
【０１４６】
次に、容量拡張プログラム１２５は、ステップ１３０１において「拡張中」に変更されたＲＧテーブル１２６の状態５０４の値を「正常」に変更する（ステップ１４０７）。さらに、容量拡張プログラム１２５は、拡張されたＲＡＩＤグループに対応する増設ＨＤＤ＿ＩＤリスト５０５に登録されたＨＤＤ１１８の識別子をＨＤＤ＿ＩＤリスト５０２に追加し、増設ＨＤＤ＿ＩＤリスト５０５の値を「Ｎ／Ａ」に変更する。
【０１４７】
以上で容量拡張処理が終了する。
【０１４８】
尚、図１３及び図１４で説明した容量拡張処理は、管理者からの指示があった場合だけでなく、ストレージシステム１０１の制御装置１１０の判断で開始されてもよい。例えば、制御装置１１０が、プール３０３に含まれるページのうち既にＴＰＬＵに割り当てられたページの割合を把握し、当該割合が所定の閾値を超えた場合に、制御装置１１０が未使用ＨＤＤ１１８の中から任意のＨＤＤを選択して容量拡張処理を開始してもよい。その結果、制御装置１１０が選択したＨＤＤが当該プールの実ＬＵを構成するＲＡＩＤグループに増設される。
【０１４９】
以上の本発明の実施形態は、一例として、ＲＡＩＤレベル５が適用されたＲＡＩＤグループを示した。しかし、本発明は上記の形態に限定されず、ストライピングされた複数のＨＤＤ１１８に適用することができる。例えば、本発明は、いわゆるＲＡＩＤレベル０（すなわち、高速アクセスを目的とした、冗長性のないストライピング）にも適用することができる。なお、本発明が例えばＲＡＩＤレベル０に適用される場合、データ幅拡張処理において、データの再配置は実行されるが、パリティは計算されない。
【０１５０】
以上の本発明の実施形態によれば、複数のＨＤＤがストライピングされている場合であっても、１台ごとにＨＤＤを増設することができる。このため、必要最小限のコストで、ストレージシステムの記憶容量を拡張することができる。さらに、ＴＰＬＵに割り当てられた実記憶領域に格納されたデータのみを対象として、データの再配置（及びパリティの再計算）が実行される。このため、記憶容量の拡張に要する時間を短縮することができる。さらに、データの再配置が実行される前に、増設されたＨＤＤの記憶領域を含む実ＬＵが新たに作成される。データの再配置が終了する前であっても、新たに作成された実ＬＵの記憶領域を仮想ＬＵ（すなわちＴＰＬＵ）に割り当てることができる。このため、ＨＤＤが増設された直後から、増設された記憶領域の少なくとも一部を使用することができる。
【図面の簡単な説明】
【０１５１】
【図１】本発明の実施形態の計算機システムの構成を示すブロック図である。
【図２】本発明の実施形態の管理端末の構成を示すブロック図である。
【図３】本発明の実施形態の計算機システムにおいて実行される容量拡張処理の手順の概要を示す第１の説明図である。
【図４】本発明の実施形態の計算機システムにおいて実行される容量拡張処理の手順の概要を示す第２の説明図である。
【図５】本発明の実施形態のＲＧテーブルの説明図である。
【図６】本発明の実施形態の実ＬＵテーブルの説明図である。
【図７】本発明の実施形態のプールテーブルの説明図である。
【図８】本発明の実施形態のＴＰＬＵテーブルの説明図である。
【図９】本発明の実施形態のマッピングテーブルの説明図である。
【図１０】本発明の実施形態の変更された実ＬＵテーブルの説明図である。
【図１１】本発明の実施形態の変更されたプールテーブルの説明図である。
【図１２】本発明の実施形態の容量拡張画面の説明図である。
【図１３】本発明の実施形態において実行される容量拡張処理を示すフローチャートの第１の部分である。
【図１４】本発明の実施形態において実行される容量拡張処理を示すフローチャートの第２の部分である。
【符号の説明】
【０１５２】
１０１  ストレージシステム
１０２  ホスト
１０３  管理端末
１０４  ストレージエリアネットワーク（ＳＡＮ）
１０５  管理ネットワーク
１１０  制御装置
１１１  ＣＰＵ
１１２  主メモリ
１１３  キャッシュメモリ
１１４  不揮発性メモリ
１１５  ホストインターフェース（ＩＦ）
１１６  管理ＩＦ
１１８  ハードディスクドライブ（ＨＤＤ）
１１９  ディスクインタフェース（ＩＦ）
【図１】
0005075699.tif 000002
【図２】
0005075699.tif 000003
【図３】
0005075699.tif 000004
【図４】
0005075699.tif 000005
【図５】
0005075699.tif 000006
【図６】
0005075699.tif 000007
【図７】
0005075699.tif 000008
【図８】
0005075699.tif 000009
【図９】
0005075699.tif 000010
【図１０】
0005075699.tif 000011
【図１１】
0005075699.tif 000012
【図１２】
0005075699.tif 000013
【図１３】
0005075699.tif 000014
【図１４】
0005075699.tif 000015