(57)【要約】【課題】上位装置に提供されるデバイスに関連付ける論理ボリュームの数を増減させることなく、そのデバイスについての記憶容量を変更できるようにする。【解決手段】ストレージシステムのコントローラが、デバイスを指定した容量変更指示を受け付け、仮想ボリュームの記憶容量を表すボリューム容量値を含んだ管理情報内の、指定されているデバイスに関連付けられている仮想ボリュームのボリューム容量値を、その容量変更指示に従う記憶容量を表すボリューム容量値に変更する。【選択図】図２
2010020431.tif 000002
【特許請求の範囲】
【請求項１】
一以上の物理記憶装置と、
データとデバイス及びアドレスを指定したライト要求とを上位装置から受け付け、前記デバイスに関連付けられている仮想ボリュームを構成する複数の仮想領域のうちの、前記アドレスが表す仮想領域に、前記一以上の物理記憶装置に基づく複数の実領域のうちのいずれの実領域も割り当てられていない場合、前記複数の実領域のうちの未使用の実領域を前記仮想領域に割り当て、前記割り当てた実領域に、前記データを書き込むコントローラと
を備え、
前記コントローラが、
前記デバイスを指定した容量変更指示を受け付けるインタフェースと、
前記仮想ボリュームの記憶容量を表すボリューム容量値を含んだ管理情報を記憶している記憶部と、
前記管理情報に含まれている前記ボリューム容量値を、前記容量変更指示に従う記憶容量を表すボリューム容量値に変更するプロセッサと
を有する、
ストレージシステム。
【請求項２】
前記管理情報は、
各実領域の使用状態を表す実領域情報と、
前記仮想ボリューム内のどの仮想領域にどの実領域が割り当てられているかを表す実領域管理情報と、
前記仮想ボリュームの記憶容量を表す前記ボリューム容量値を含んだボリューム情報と
を含んでおり、
前記プロセッサは、
（２Ａ）前記容量変更指示が容量拡張指示の場合、
（２Ａ−１）前記実領域管理情報を、拡張前の前記仮想ボリュームの各仮想領域だけでなく拡張前の前記仮想ボリュームと拡張後の前記仮想ボリュームとの第一の差分に相当する仮想領域を前記仮想ボリュームの構成要素とした情報に更新し、
（２Ａ−２）前記ボリューム情報内の前記ボリューム容量値を、前記容量拡張指示に従う記憶容量を表すボリューム容量値に増やし、
（２Ａ−３）前記（２Ａ−１）及び前記（２Ａ−２）を終えた後に、前記デバイスに関する、前記仮想ボリュームの拡張後の記憶容量を、前記上位装置に通知可能な状態となり、
（２Ｂ）前記容量変更指示が容量縮小指示の場合、
（２Ｂ−１）前記ボリューム情報内の前記ボリューム容量値を、前記容量縮小指示に従う記憶容量を表すボリューム容量値に減らし、
（２Ｂ−２）縮小前の前記仮想ボリュームと縮小後の前記仮想ボリュームとの第二の差分に相当する仮想領域に実領域が割り当てられていれば、前記ページ情報における、前記第二の差分に相当する仮想領域に割り当てられている実領域の使用状態を、使用中から未使用に変更し、
（２Ｂ−３）前記実領域管理情報を、前記第二の差分に相当する仮想領域を前記仮想ボリュームの構成要素から外した情報に更新し、
（２Ｂ−４）前記（２Ｂ−１）乃至前記（２Ｂ−３）を終えた後に、前記デバイスに関する、前記仮想ボリュームの縮小後の記憶容量を、前記上位装置に通知可能な状態となる、
請求項１記載のストレージシステム。
【請求項３】
前記仮想ボリュームは、予め定義されている仮想記憶空間の一部分であり、
前記管理情報は、前記仮想記憶空間の容量を表す空間容量値を含んだ記憶空間管理情報を含み、
前記仮想記憶空間に、他の仮想ボリュームがあり、
前記実領域管理情報は、複数のレコードで構成されており、
前記レコードが、一以上の仮想領域で構成された領域に対応しており、レコードＩＤと、前記レコードに対応する仮想領域に割り当てられている実領域ＩＤとを有し、
前記（２Ａ−１）では、前記実領域管理情報を構成する複数のレコードのうちの未使用のレコードのうち、前記第一の差分に相当する仮想領域に対応した分のレコードが、前記仮想ボリュームに関わるレコードとして選択されるようになっており、
前記ボリューム管理情報は、前記仮想ボリューム及び前記他の仮想ボリュームについて、容量値の他に、前記仮想記憶空間における先頭アドレスと、関連するレコードのＩＤと、比率閾値とを含み、
前記プロセッサが、前記容量拡張指示に従う拡張可能か否かの第一の判断を行い、前記第一の判断の結果が否定的の場合に、前記（２Ａ−１）乃至前記（２Ａ−３）を非実行とし、
前記第一の判断の結果は、以下の（３−１）乃至（３−４）のうちの全ての条件を満たしている場合に肯定的であり、それらの条件のうちの少なくとも一つの条件を満していない場合に否定的である、
（３−１）前記容量拡張指示に従う記憶容量が、前記空間容量値が表す容量未満である、
（３−２）前記容量拡張指示に従う記憶容量の前記仮想ボリュームの先頭アドレス又は最後尾アドレスが、前記他の仮想ボリュームの、前記ボリューム情報内の先頭アドレス及び容量値から特定されるアドレス範囲に重ならない、
（３−３）前記実領域管理情報を構成する複数のレコードのうちの未使用のレコードの数が、前記第一の差分に相当する仮想領域に対応した分のレコードの数以上である、
（３−４）前記複数の実領域のうちの一以上の未割当ての実領域の総容量に対する、前記容量変更指示に従う記憶容量の前記仮想ボリュームにおける、実領域が割り当てられていない一以上の仮想領域の総容量の比率が、前記仮想ボリュームについての前記比率閾値以下である、
請求項２記載のストレージシステム。
【請求項４】
前記プロセッサが、前記容量縮小指示に従う縮小可能か否かの第二の判断を行い、前記第二の判断の結果が否定的の場合に、前記（２Ｂ−１）乃至前記（２Ｂ−４）を非実行とし、
前記第二の判断の結果は、以下の（４−１）又は（４−２）の条件を満たしている場合に肯定的であり、それらの条件の全てを満たしていない場合に否定的である、
（４−１）前記第二の差分に相当する仮想領域に割り当てられている実領域に記憶されているデータを破棄しても良いという明示がある、
（４−２）前記第二の差分に相当する仮想領域に実領域が割り当てられていない、
請求項２又は３記載のストレージシステム。
【請求項５】
前記プロセッサが、前記仮想ボリュームに関連付いているデバイスを指定したフォーマット指示を受けた場合、前記仮想ボリュームについて、前記（２Ａ−１）又は前記（２Ａ−２）を実行中であれば、前記フォーマット指示に従うフォーマットを非実行とする、
請求項２乃至４のうちのいずれか１項に記載のストレージシステム。
【請求項６】
前記管理情報は、
前記仮想ボリューム内のどの仮想領域にどの実領域が割り当てられているかを表す実領域管理情報と、
前記仮想ボリュームの記憶容量を表す前記ボリューム容量値を含んだボリューム情報と
を含んでおり、
前記プロセッサは、前記容量変更指示が容量拡張指示の場合、
（６−１）前記実領域管理情報を、拡張前の前記仮想ボリュームの各仮想領域だけでなく拡張前の前記仮想ボリュームと拡張後の前記仮想ボリュームとの第一の差分に相当する仮想領域を前記仮想ボリュームの構成要素とした情報に更新し、
（６−２）前記ボリューム情報内の前記ボリューム容量値を、前記容量拡張指示に従う記憶容量を表すボリューム容量値に増やし、
（６−３）前記（６−１）及び前記（６−２）を終えた後に、前記デバイスに関する、前記仮想ボリュームの拡張後の記憶容量を、前記上位装置に通知可能な状態となる、
請求項１記載のストレージシステム。
【請求項７】
前記仮想ボリュームは、予め定義されている仮想記憶空間又はその一部分であり、
前記プロセッサが、前記容量拡張指示に従う拡張可能か否かの第一の判断を行い、前記第一の判断の結果が否定的の場合に、前記（６−１）乃至前記（６−３）を非実行とし、
前記第一の判断の結果は、以下の（７−１）の条件を満たしていない場合に否定的である、
（７−１）前記容量拡張指示に従う記憶容量が、前記空間容量値が表す容量未満である、
請求項６記載のストレージシステム。
【請求項８】
前記仮想ボリュームは、予め定義されている仮想記憶空間又はその一部分であり、
前記プロセッサが、前記容量拡張指示に従う拡張可能か否かの第一の判断を行い、前記第一の判断の結果が否定的の場合に、前記（６−１）乃至前記（６−３）を非実行とし、
前記第一の判断の結果は、以下の（８−１）の条件を満たしていない場合に否定的である、
（８−１）前記容量拡張指示に従う記憶容量の前記仮想ボリュームの先頭アドレス又は最後尾アドレスが、前記他の仮想ボリュームの、前記ボリューム情報内の先頭アドレス及び容量値から特定されるアドレス範囲に重ならない、
請求項６又は７記載のストレージシステム。
【請求項９】
前記実領域管理情報は、複数のレコードで構成されており、
前記レコードが、一以上の仮想領域で構成された領域に対応しており、前記レコードに対応する仮想領域に割り当てられている実領域ＩＤを有し、
前記（６−１）では、前記実領域管理情報を構成する複数のレコードのうちの未使用のレコードのうち、前記第一の差分に相当する仮想領域に対応した分のレコードが、前記仮想ボリュームに関わるレコードとして選択されるようになっており、
前記プロセッサが、前記容量拡張指示に従う拡張可能か否かの第一の判断を行い、前記第一の判断の結果が否定的の場合に、前記（６−１）乃至前記（６−３）を非実行とし、
前記第一の判断の結果は、以下の（９−１）の条件を満たしていない場合に否定的である、
（９−１）前記実領域管理情報を構成する複数のレコードのうちの未使用のレコードの数が、前記第一の差分に相当する仮想領域に対応した分のレコードの数以上である、
請求項６乃至８のうちのいずれか１項に記載のストレージシステム。
【請求項１０】
前記プロセッサが、前記容量拡張指示に従う拡張可能か否かの第一の判断を行い、前記第一の判断の結果が否定的の場合に、前記（６−１）乃至前記（６−３）を非実行とし、
前記第一の判断の結果は、以下の（１０−１）の条件を満たしていない場合に否定的である、
（１０−１）前記複数の実領域のうちの一以上の未割当ての実領域の総容量に対する、前記容量変更指示に従う記憶容量の前記仮想ボリュームにおける、実領域が割り当てられていない一以上の仮想領域の総容量の比率が、前記仮想ボリュームについての所定の比率以下である、
請求項６乃至９のうちのいずれか１項に記載のストレージシステム。
【請求項１１】
前記プロセッサが、前記容量拡張指示に従う拡張可能か否かの第一の判断を行い、前記第一の判断の結果が否定的の場合に、前記（６−１）乃至前記（６−３）を非実行とし、
前記第一の判断の結果は、以下の（１１−１）の条件を満たしていない場合に否定的である、
（１１−１）前記容量拡張指示で指定されている前記仮想ボリュームが、ボリューム間コピーのコピー元ではない、
請求項６乃至１０のうちのいずれか１項に記載のストレージシステム。
【請求項１２】
前記管理情報は、
各実領域の使用状態を表す実領域情報と、
前記仮想ボリューム内のどの仮想領域にどの実領域が割り当てられているかを表す実領域管理情報と、
前記仮想ボリュームの記憶容量を表す前記ボリューム容量値を含んだボリューム情報と
を含んでおり、
前記プロセッサは、前記容量変更指示が容量縮小指示の場合、
（１２−１）前記ボリューム情報内の前記ボリューム容量値を、前記容量縮小指示に従う記憶容量を表すボリューム容量値に減らし、
（１２−２）縮小前の前記仮想ボリュームと縮小後の前記仮想ボリュームとの第二の差分に相当する仮想領域に実領域が割り当てられていれば、前記ページ情報における、前記第二の差分に相当する仮想領域に割り当てられている実領域の使用状態を、使用中から未使用に変更し、
（１２−３）前記実領域管理情報を、前記第二の差分に相当する仮想領域を前記仮想ボリュームの構成要素から外した情報に更新し、
（１２−４）前記（１２−１）乃至前記（１２−３）を終えた後に、前記デバイスに関する、前記仮想ボリュームの縮小後の記憶容量を、前記上位装置に通知可能な状態となる、
請求項１記載のストレージシステム。
【請求項１３】
前記プロセッサが、前記容量縮小指示に従う縮小可能か否かの第二の判断を行い、前記第二の判断の結果が否定的の場合に、前記（１２−１）乃至前記（１２−４）を非実行とし、
前記第二の判断の結果は、以下の（１３−１）の条件を満たしていない場合に否定的である、
（１３−１）前記第二の差分に相当する仮想領域に割り当てられている実領域に記憶されているデータを破棄しても良いという明示がある、
請求項１２記載のストレージシステム。
【請求項１４】
前記プロセッサが、前記容量縮小指示に従う縮小可能か否かの第二の判断を行い、前記第二の判断の結果が否定的の場合に、前記（１２−１）乃至前記（１２−４）を非実行とし、
前記第二の判断の結果は、以下の（１４−１）の条件を満たしていない場合に否定的である、
（１４−１）前記第二の差分に相当する仮想領域に実領域が割り当てられていない、
請求項１２又は１３記載のストレージシステム。
【請求項１５】
前記プロセッサが、前記容量縮小指示に従う縮小可能か否かの第二の判断を行い、前記第二の判断の結果が否定的の場合に、前記（１２−１）乃至前記（１２−４）を非実行とし、
前記第二の判断の結果は、以下の（１５−１）の条件を満たしていない場合に否定的である、
（１５−１）前記容量縮小指示で指定されている前記仮想ボリュームが、ボリューム間コピーのコピー先ではない、
請求項１２乃至１４のうちのいずれか１項に記載のストレージシステム。
【請求項１６】
データとデバイス及びアドレスを指定したライト要求とを上位装置から受け付け、前記デバイスに関連付けられている仮想ボリュームを構成する複数の仮想領域のうちの、前記アドレスが表す仮想領域に、一以上の物理記憶装置に基づく複数の実領域のうちのいずれの実領域も割り当てられていない場合、前記複数の実領域のうちの未使用の実領域を前記仮想領域に割り当て、前記割り当てた実領域に、前記データを書き込むコントローラであって、
前記デバイスを指定した容量変更指示を受け付けるインタフェースと、
前記仮想ボリュームの記憶容量を表すボリューム容量値を含んだ管理情報を記憶している記憶部と、
前記管理情報に含まれている前記ボリューム容量値を、前記容量変更指示に従う記憶容量を表すボリューム容量値に変更するプロセッサと
を有する、
コントローラ。
【請求項１７】
コントローラの上位装置に提供されるデバイスに、前記上位装置からのライトに応じて実容量が拡張される仮想ボリュームが関連付けられている場合において、デバイスを指定した容量変更指示を受け付け、
前記デバイスに関連付けられている前記仮想ボリュームの記憶容量を表す情報であって、前記コントローラが管理している管理情報内のボリューム容量値を、前記容量変更指示に従う記憶容量を表すボリューム容量値に変更する、
デバイス容量変更方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、上位装置から指定されるデバイスに関する記憶容量の変更に関する。
【背景技術】
【０００２】
例えば、論理ボリュームの一種として、ライトに応じて実領域が割り当てられる種類の論理ボリューム（以下、「仮想ボリューム」と言う）が知られている（例えば特許文献１）。この種の技術によれば、仮想ボリュームの記憶容量のうち、仮想ボリュームに割り当てられている一以上の実領域の総記憶容量（以下、「実容量」と言う）が、ストレージシステムが有する物理記憶空間から消費される。仮想ボリュームの実容量は、仮想ボリュームに割り当てられている実領域の数が増減することにより、変更される。なお、物理記憶空間とは、パリティグループ（以下、「ＰＧ」と略すことがある）により提供される記憶空間である。ＰＧは、一以上の物理記憶装置（例えばハードディスクドライブ又はフラッシュメモリ）で構成されている。
【０００３】
【特許文献１】特開２００３−０１５９１５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、一般に、ストレージシステムは、コントローラと記憶装置群とに大別することができる。記憶装置群が、前述した一以上の物理記憶装置で構成されている。コントローラから上位の装置（例えばホスト或いは他のコントローラ）に提供されるデバイスとして、例えばＬＵ（Logical Unit）がある。ＬＵに、コントローラが管理する論理ボリュームが関連付けられる。上位装置が、ＬＵを指定したアクセス要求（ライト要求又はリード要求）を送信することで、そのＬＵに関連付けられている論理ボリュームに対するアクセスが行われる。ＬＵに関連付けられる論理ボリュームは、仮想ボリュームであっても通常ボリューム（前述の物理記憶空間を基に形成された論理ボリューム）であっても良い。
【０００５】
コントローラが、上位装置（又は他の装置）から、ＬＵを指定した容量変更指示（容量の拡張又は縮小の指示）を受ける場合がある。ホストに通知される、ＬＵについての記憶容量は、一般に、そのＬＵに関連付けられている論理ボリュームの記憶容量である。従って、ＬＵについての記憶容量を変更するということは、通常、ＬＵに関連付けられている論理ボリュームの記憶容量を変更するということである。
【０００６】
しかし、論理ボリュームの記憶容量それ自体を変更する技術は知られていない。
【０００７】
そこで、コントローラは、容量変更指示に応答して、指定されているＬＵに関連付けられている論理ボリュームの数を増減することにより、ＬＵの容量変更を行う。図１に示す具体例によれば、コントローラは、ＬＵ＃１００を指定した容量拡張指示を受けた場合、その指示に応答して、ＬＵ＃１００に関連付けられている通常ボリュームの数を、１から３に増やす（詳細に言えば、ＬＵ＃１００に関連付けられている通常ボリューム＃１に、通常ボリューム＃２及び＃３を連結する）。これにより、上位装置の運用を継続したまま、ＬＵの記憶容量を拡張することができる。
【０００８】
しかし、この技術には、以下の課題がある。
（１）容量変更の単位が、通常ボリュームの記憶容量の単位となってしまう。ＬＵに関連付けられる通常ボリュームの増減によって、容量が変更されるためである。
（２）容量拡張の際に通常ボリュームが枯渇している場合があり、その場合には、通常ボリュームを新たに作成する必要がある。
【０００９】
以上の課題は、ＬＵに関連付けられている論理ボリュームが通常ボリュームの場合での課題であるが、通常ボリュームを仮想ボリュームに置き換えても、同様の課題が生じ得る。
【００１０】
そこで、本発明の目的は、上位装置に提供されるデバイスに関連付ける論理ボリュームの数を増減させることなく、そのデバイスについての記憶容量を変更できるようにすることにある。
【課題を解決するための手段】
【００１１】
ストレージシステムのコントローラが、デバイスを指定した容量変更指示を受け付け、仮想ボリュームの記憶容量を表すボリューム容量値を含んだ管理情報内の、指定されているデバイスに関連付けられている仮想ボリュームのボリューム容量値を、その容量変更指示に従う記憶容量を表すボリューム容量値に変更する。
【発明を実施するための最良の形態】
【００１２】
以下、図面を参照して、本発明の一実施形態を説明する。以下の説明では、上位装置はホストであり、ホストに提供されるデバイスは、ＬＵ（Logical Unit）であるとする。
【００１３】
図２は、本発明の一実施形態での、ＬＵについての記憶容量の変更の概要を示す。
【００１４】
本実施形態では、ＬＵに関連付けられる仮想ボリュームの数が増減することでＬＵについての記憶容量が変更されるのではなく、ＬＵに関連付けられている仮想ボリュームの記憶容量それ自体が変更されることで、ＬＵについての記憶容量が変更される。
【００１５】
具体的には、例えば、図２に示すように、ホストからのアクセス要求で指定され得る状態のＬＵ（例えばinquiryコマンド等に応答してホストに記憶容量等が通知済みのＬＵ）＃２００に、仮想ボリューム＃１０が関連付けられているとする。仮想ボリューム＃１０に、プールボリューム（ホストに提供され得ない論理ボリューム）＃１１〜＃１３を構成する複数の実領域のうちの２個の実領域（図２のグレー及び黒のブロックを参照）が割り当てられており、それらの実領域に、ＬＵ＃２００を指定したライト要求に従うデータが記憶されている。プールボリューム＃１１〜＃１３は、２個のパリティグループを基に形成された論理記憶装置である。
【００１６】
この状態において、コントローラは、ＬＵ＃２００を指定した容量拡張指示を受領した場合、ＬＵ＃２００に関連付けられている仮想ボリューム＃１０の記憶容量を、その容量拡張指示に従う容量に拡張する。仮想ボリューム＃１０の記憶容量が拡張されても、その仮想ボリューム＃１０に割り当て済みの実領域に影響は生じない。容量拡張指示では、拡張後の記憶容量が指定されていても良いし、拡張前の記憶容量に追加される記憶容量が指定されていても良い。
【００１７】
このため、仮想ボリューム＃１０の記憶容量を、仮想ボリューム＃１０の拡張前の記憶容量や他の論理ボリューム（例えば通常ボリューム又は仮想ボリューム）の記憶容量と異なる単位で、拡張することができる（例えば、仮想ボリューム＃１０の後述のセグメントの単位で、仮想ボリューム＃１０の記憶容量を拡張することができる）。
【００１８】
また、仮想ボリューム＃１０の記憶容量それ自体が拡張されるため、ＬＵについての記憶容量の拡張に、複数の仮想ボリュームを必要としない。それ故、仮想ボリューム＃１０の記憶容量の拡張の際に、新たに論理ボリュームを作成する必要は無い。
【００１９】
以上が、本実施形態の概要である。なお、図２は、仮想ボリューム＃１０の記憶容量の拡張を表しているが、その記憶容量の縮小も、仮想ボリューム＃１０の縮小前の記憶容量や他の論理ボリューム（例えば通常ボリューム又は仮想ボリューム）の記憶容量と異なる単位で、行うことができる（例えば、仮想ボリューム＃１０の後述のセグメントの単位で、仮想ボリューム＃１０の記憶容量を縮小することができる）。仮想ボリューム＃１０の記憶容量それ自体が縮小されるためである。
【００２０】
以下、本実施形態を詳細に説明する。なお、以下の説明では、仮想ボリュームが複数のセグメントで構成されており、各セグメントが、複数の仮想領域で構成されているとする。また、以下の説明では、仮想領域に割り当てられる実領域を、「ページ」と呼ぶ。
【００２１】
図３は、本発明の一実施形態に係る計算機システムの構成を示す。
【００２２】
通信ネットワーク（例えばＳＡＮ（Storage Area Network））１０３に、一又は複数のホスト１０１と、ストレージシステム１０５が接続されている。
【００２３】
ホスト１０１は、例えば、ＣＰＵ（Central Processing Unit）やメモリ等の情報処理資源を備えた計算機であり、例えば、パーソナルコンピュータ、ワークステーション、メインフレーム等である。
【００２４】
ストレージシステム１０５は、例えば、アレイ状に配列された多数の物理記憶装置１１９を備えるＲＡＩＤシステムとすることができる。但し、これに限らず、ストレージシステム１０５を、例えば、高機能化されたインテリジェント型のファイバチャネルスイッチとして構成することもできる。ストレージシステム１０５は、コントローラ１０７と、記憶装置群１１８とに大別することができる。
【００２５】
コントローラ１０７は、例えば、チャネルアダプタ（ＣＨＡ）１０９と、ディスクアダプタ（ＤＫＡ）１１７と、キャッシュメモリ１１３と、共有メモリ１１１と、接続部１１５とを備えている。
【００２６】
ＣＨＡ１０９は、ホスト１０１（或いは他のストレージシステム）との間のデータ通信を行うインタフェース装置である。ＣＨＡ１０９は、例えば、ＣＰＵ、メモリ、複数の通信ポート等を備えたマイクロコンピュータシステム（例えば回路基盤）として構成することができる。複数の通信ポートには、ホスト１０１（或いは他のストレージシステム）に接続される通信ポートと、接続部１１５に接続される通信ポートとがある。例えば、ＣＨＡ１０９は、ホスト１０１からライト要求を受信し、受信したライト要求に従うデータを、キャッシュメモリ１１３に書込み、ＤＫＡ１１７にそのデータの書込みを命じることができる。また、例えば、ＣＨＡ１０９は、ホスト１０１からリード要求を受信し、受信したリード要求に従うデータの読出しをＤＫＡ１１７に命令し、その命令に従うデータをキャッシュメモリ１１３から読出し、ホスト１０１に送信することができる。
【００２７】
本実施形態では、ＣＨＡ１０９が、容量拡張処理部１０９１及び容量縮小処理部１０９２を有する。これらの処理部１０９１及び１０９２は、例えば、ＣＨＡ１０９内のＣＰＵでコンピュータプログラムが実行されることにより実現される。なお、容量拡張処理部１０９１及び容量縮小処理部１０９２は、ＣＨＡ１０９に代えて又は加えて、ＤＡＫ１１７に存在しても良い。
【００２８】
ＤＫＡ１１７は、物理記憶装置１１９との間のデータ通信を行うインタフェース装置である。ＤＫＡ１１７も、ＣＰＵ、メモリ、複数の通信ポート等を備えたマイクロコンピュータシステム（例えば回路基盤）として構成することができる。複数の通信ポートには、物理記憶装置１１９に接続される通信ポートと、接続部１１５に接続される通信ポートとがある。例えば、ＤＫＡ１１７は、ＣＨＡ１０９からの書込みの命令に応答して、キャッシュメモリ１１３に記憶されているデータを、物理記憶装置１１９に書込むことができる。また、例えば、ＤＫＡ１１７は、ＣＨＡ１０９からの読出しの命令に応答して、その命令に従うデータを物理記憶装置１１９から読出し、キャッシュメモリ１１３に書込むことができる。
【００２９】
キャッシュメモリ１１３は、例えば、揮発性（又は不揮発性）のメモリであり、ホスト計算機１０から受信したデータや、物理記憶装置１１９から読出されたデータを、一時的に記憶する。
【００３０】
共有メモリ１１１は、例えば、揮発性（又は不揮発性）のメモリであり、ストレージシステム１０５の制御のためにＣＨＡ１０９或いはＤＫＡ１１７に参照される情報（以下、制御情報）が格納される。制御情報としては、例えば、下記（１）乃至（５）の５種類、
（１）ＬＵ管理情報（図示せず）：どのＬＵにどの論理ボリュームが関連付けられているかを表す情報（例えば、ＬＵの番号であるＬＵＮ（Logical Unit Number）とそのＬＵに関連付けられているボリューム＃（ボリューム番号）とを含んだ情報）、
（２）ページ管理情報１１１１：仮想ボリュームのセグメントを構成する複数の仮想領域のどこにどのページが割り当てられているかを表す情報（「セグメント」とは、仮想ボリュームを構成する各記憶領域である）、
（３）ページ情報１１１２：どのページがどのプールボリュームに存在していてどんな使用状態にあるかを表す情報、
（４）ボリューム情報１１１３：各論理ボリュームに関する種々の情報を含んだ情報、
（５）ＰＧ情報１１１４：各ＰＧに関する種々の情報を含んだ情報、
がある。
【００３１】
接続部１１５は、ＣＨＡ１０９、ＤＫＡ１１７、キャッシュメモリ２４、及び共有メモリ２５を相互に接続させる。接続部２６は、例えば、高速スイッチング動作によってデータ伝送を行う超高速クロスバスイッチ等のような高速バスとして構成することができる。
【００３２】
記憶装置群１１８には、複数の物理記憶装置１１９が含まれている。物理記憶装置１１９としては、例えば、ハードディスク、フレキシブルディスク、磁気テープ、半導体メモリ（例えばフラッシュメモリ）、光ディスク等のようなデバイスを用いることができる。二以上の物理記憶装置１１９により、所定のＲＡＩＤレベルのパリティグループ（「ＲＡＩＤグループ」或いは「アレイグループ」と呼ばれることがある）を構成することができる。パリティグループ（以下、「ＰＧ」と略すこともある）を構成する二以上の物理記憶装置１１９の記憶空間を用いて、実体のある論理ボリューム（実ボリューム）を形成することができる。実ボリュームとしては、例えば、前述した通常ボリュームとプールボリュームがある。プールボリュームを構成する複数のページのうちのいずれかのページが、仮想ボリューム内の仮想領域に割り当てられる。
【００３３】
以上が、本実施形態に係る計算機システムの構成である。なお、この計算機システムの構成は、一例であり、他の構成が採用されてもよい。例えば、共有メモリ１１１とキャッシュメモリ１１３は、別々のメモリでなく、一つのメモリに共有メモリ領域とキャッシュメモリ領域とが設けられても良い。また、例えば、コントローラ１０７は、ＣＰＵ、メモリ及び複数の通信ポートを備えた回路基盤（すなわち、図３のコントローラ１０７よりもシンプルな構成）であっても良い。この場合、そのＣＰＵが、複数のＣＨＡやＤＫＡによって行われる処理を実行することができる。
【００３４】
以下、ＰＧ情報１１１４、ボリューム情報１１１３、ページ情報１１１２及びページ管理情報１１１１を詳細に説明する。これらの情報１１１１〜１１１４は、それぞれ、例えばテーブルである。
【００３５】
図４Ａは、ＰＧ情報１１１４の構成例を示す。
【００３６】
ＰＧ情報１１１４には、ＰＧ毎に、ＰＧ＃（ＰＧを一意に特定するための番号）、ＰＧ容量（ＰＧの記憶容量）、記憶装置台数（ＰＧを構成する物理記憶装置の台数）、ＰＧ種別（ＰＧの種別）が記録されている。ＰＧ種別としては、例えば、“物理”と“仮想”の２種類がある。
【００３７】
ＰＧ種別“物理”のＰＧは、図４Ｂに示すように、複数の物理記憶装置１１９で構成されているＰＧである。このＰＧの記憶空間を基に（このＰＧの記憶容量の範囲で）、実ボリューム（例えば通常ボリューム及び／又はプールボリューム）が形成される。
【００３８】
一方、ＰＧ種別“仮想”のＰＧは、図４Ｃに示すように、仮想的なＰＧである。このＰＧの記憶空間を基に（このＰＧの記憶容量の範囲で）、仮想ボリューム（典型的にはThin Provisioning技術に従う仮想ボリューム）が形成される。
【００３９】
図５Ａは、ボリューム情報１１１３の構成例を示す。
【００４０】
ボリューム情報１１１３には、論理ボリューム毎に、ボリューム＃（論理ボリュームを一意に特定するための番号）、ＰＧ＃（論理ボリュームが存在するＰＧの番号）、先頭ＰＧ内アドレス（ＰＧ内での、論理ボリュームの先頭アドレス）、ボリューム容量（論理ボリュームの記憶容量）、ボリューム種別、ボリューム属性、ページ管理＃、ページ容量、閾値及び未使用ページ数が記録される。
【００４１】
ボリューム種別は、論理ボリュームの種別であり、具体的には、例えば、“物理”と“仮想”がある。ボリューム種別“物理”の論理ボリュームは、実ボリュームである。ボリューム種別“仮想”の論理ボリュームは、仮想ボリュームである。
【００４２】
ボリューム属性は、論理ボリュームの属性であり、具体的には、例えば、“未使用”、“容量変更不可”、“ペアボリューム有り”及び“ページ使用”がある。ボリューム属性“未使用”の論理ボリュームは、ＬＵに関連付けられるボリュームとしても、ＬＵに関連付けられないボリュームとしても使用されていない。ボリューム属性“容量変更不可”の論理ボリュームは、記憶容量の変更が不可の仮想ボリュームである。ボリューム属性“ペアボリューム有り”の論理ボリュームは、ボリュームペアの構成要素であり、コピー元ボリューム又はコピー先ボリュームである。ボリューム属性“ページ使用”の論理ボリュームは、プールボリュームである。
【００４３】
ページ管理＃は、仮想ボリュームにおける先頭のセグメントに対応する。例えば、図５Ａによれば、仮想ボリューム＃１０（ボリューム＃１０でボリューム種別“仮想”の論理ボリューム）の先頭セグメントに、ページ管理＃１が対応していることがわかる。ページ管理＃１を使用して、図７Ａに示すページ管理情報１１１１を参照することで、仮想ボリューム＃１０のアクセス先の仮想領域に割り当てられているページを特定することができる。それについては後に詳述する。
【００４４】
ページ容量は、仮想領域又はページの記憶容量である。故に、仮想ボリューム及びプールボリュームについて、ページ容量として有効な値が、ボリューム情報１１１３に設定される。本実施形態では、ページは、そのページと同じページ容量の仮想領域に割り当てられる。
【００４５】
閾値は、一以上の未割当てのページの総容量に対する、ページが割り当てられていない一以上の仮想領域の総容量の比率、の閾値である。故に、仮想ボリュームについて、閾値として有効な値が、ボリューム情報１１１３に設定される。
【００４６】
未使用ページ数は、ページが割り当てられていない仮想領域の数、又は、仮想領域に割り当てられていないページの数である。故に、仮想ボリューム及びプールボリュームについて、未使用ページ数として有効な値が、ボリューム情報１１１３に設定される。
【００４７】
図５Ａによれば、例えば、実ボリューム＃１が、図５Ｂに示すように、物理的なＰＧ＃１の記憶空間の先頭アドレス（０ＧＢ目のアドレス）から７００ＧＢ（ギガバイト）目のアドレスまでの７００ＧＢの記憶容量を有する記憶空間部分であり、実ボリューム＃２が、同じＰＧ＃１の記憶空間の７００ＧＢ目のアドレスから９００ＧＢ目のアドレスまでの２００ＧＢの記憶容量を有する記憶空間部分であることがわかる。また、仮想ボリューム＃７を構成する各仮想領域の記憶容量が２５６ＭＢ（メガバイト）で、仮想ボリューム＃７において、ページが割り当てられていない仮想領域の数が４０個であることがわかる。また、プールボリューム＃１１を構成する各ページの記憶容量が２５６ＭＢで、プールボリューム＃１１において、仮想領域に割り当てられていないページの数が１１９９個であることがわかる。
【００４８】
図６Ａは、ページ情報１１１２の構成例を示す。
【００４９】
ページ情報１１１２には、ページ毎に、ページ＃（ページを一意に特定するための番号）、ボリューム＃（ページを有するプールボリュームのボリューム＃）、ページ使用状態がある。ページ使用状態としては、例えば、ページが割り当てられていることを意味する“使用中”と、ページがどの仮想領域にも割り当てられていないことを意味する“未使用”がある。
【００５０】
図６Ａによれば、例えば、ページ＃１（ページ＃が１のページ）が、図６Ｂに示すように、プールボリューム＃１１に存在することがわかる。そして、プールボリューム＃１１について、図５Ａに示したボリューム情報１１１３を参照すれば、ページ＃１の記憶容量は２５６ＭＢで、プールボリューム＃１１がＰＧ＃１に存在することがわかる。
【００５１】
図７Ａは、ページ管理情報１１１１の構成例を示す。
【００５２】
ページ管理情報１１１１を構成する各レコードに、ページ管理＃、使用ページ＃、次ページ管理＃が記録される。ページ管理＃は、言い換えれば、ページ管理情報１１１１におけるレコードを一意に特定するための番号である。使用ページ＃は、レコードに対応したセグメントにおける仮想領域に割り当てられているページのページ＃である。次ページ管理＃は、他のレコードへのポインタである（言い換えれば、次のセグメントに対応したページ管理＃である）。
【００５３】
図７Ａによれば、４個の仮想領域（例えば２５６ＭＢ）で構成されている記憶領域が、セグメント（例えば１ＧＢ）である。図７Ａでは、各レコードにおいて、使用ページ＃についての４個のセルが、４個の仮想領域に対応している。セルの並びの順は、仮想領域の並びの順である。図７Ａによれば、ページ管理＃１のレコードにおける、使用ページ＃についての３番目のセルに、ページ＃として“１”が設定されていることがわかり、また、図５Ａに示したボリューム情報１１１３によれば、仮想ボリューム＃１０の先頭セグメントにページ管理＃１が対応していることがわかる。このため、図７Ｂに示すように、仮想ボリューム＃１１（仮想的なＰＧ＃３内の仮想ボリューム）の先頭セグメントにおける３番目の仮想領域に、プールボリューム＃１１（物理なＰＧ＃４内の実ボリューム）内のページ＃１が割り当てられていることがわかる。また、図５Ａによれば、下記の（１）及び（２）により、
（１）仮想ボリューム＃１０の記憶容量は３ＧＢである、
（２）仮想ボリューム＃１０の仮想領域の容量は“２５６ＭＢ”であり、４個の仮想領域で１個のセグメントが構成されているから、仮想ボリューム＃１０内のセグメントの記憶容量は、１ＧＢ（２５６ＭＢ×４）である、
仮想ボリューム＃１０は、３個のセグメントで構成されていることがわかる。一方、ページ管理＃１を用いて図７Ａのページ管理情報１１１１を参照することで、次ページ管理＃を基に、ページ管理＃２及びページ管理＃３が順次に特定され、ページ管理＃３に対応したレコードの次ページ管理＃が０になっていることからも、仮想ボリューム＃１０が、３個のセグメントで構成されていることがわかる。
【００５４】
以下、仮想ボリュームに対するライト処理及びリード処理をそれぞれ説明する。
【００５５】
図１３は、仮想ボリュームに対するライト処理のフローチャートである。
【００５６】
ライト処理は、例えば、ＣＨＡ１０９が有する図示しないライト処理部が実行する。ライト処理部は、例えば、ＣＨＡ１０９内のＣＰＵでコンピュータプログラムが実行されることにより実現される。
【００５７】
ライト処理部は、仮想ボリュームが関連付いているＬＵを指定したライト要求をホスト１０１から受領した場合（Ｓ１３０１）、Ｓ１３０２以降の処理を実行する。受領したライト要求で指定されているＬＵＮに仮想ボリュームのボリューム＃が関連付いているか否かは、前述したＬＵ管理情報及びボリューム情報１１１３を参照することにより、特定することができる。
【００５８】
ライト処理部は、受領したライト要求で指定されているアドレスが表す仮想領域（ライト先仮想領域）に、ページが割り当てられているか否かを判断する（Ｓ１３０２）。ライト先仮想領域にページが割り当てられているか否かは、ボリューム情報１１１３及びページ管理情報１１１１を参照することにより特定することができる。具体的には、例えば、ライト処理部は、ライト先のＬＵに関連付いている仮想ボリュームに対応したページ管理＃（ボリューム情報１１１３におけるページ管理＃）を用いてページ管理情報１１１１を辿ることで、ライト先仮想領域に対応したセルを特定し、そのセルに、有効なページ＃が設定されているか否かで、ライト先仮想領域にページが割り当てられているか否かを判断することができる。
【００５９】
Ｓ１３０２の判断の結果が肯定的であれば（Ｓ１３０２：ＹＥＳ）、ライト処理部は、ライト先仮想領域に割り当てられているページに、Ｓ１３０１で受領したライト要求に従うデータを書き込む（Ｓ１３０４）。その後、ライト処理部は、ホスト１０１へ、ライト受領を返却する（Ｓ１３０５）。
【００６０】
一方、Ｓ１３０２の判断の結果が否定的であれば（Ｓ１３０２：ＮＯ）、ライト処理部は、未割当てのページを、ページ情報１１１２を参照することで特定し、特定されたページを、ライト先仮想領域に割り当てる（Ｓ１３０３）。具体的には、ライト処理部は、特定された未割当てのページのページ＃を、ライト先仮想領域に対応したセル（ページ管理情報１１１１内のセル）に書込み、その未割当てのページのページ使用状態（ページ情報１１１２におけるページ使用状態）を、“未使用”から“使用中”に更新する。その後、前述したＳ１３０４及びＳ１３０５が行われる。
【００６１】
図１４は、仮想ボリュームに対するリード処理のフローチャートである。
【００６２】
リード処理は、例えば、ＣＨＡ１０９が有する図示しないリード処理部が実行する。リード処理部は、例えば、ＣＨＡ１０９内のＣＰＵでコンピュータプログラムが実行されることにより実現される。
【００６３】
リード処理部は、仮想ボリュームが関連付いているＬＵを指定したリード要求をホスト１０１から受領した場合（Ｓ１４０１）、Ｓ１４０２以降の処理を実行する。
【００６４】
リード処理部は、受領したリード要求で指定されているアドレスが表す仮想領域（リード元仮想領域）に、ページが割り当てられているか否かを判断する（Ｓ１４０２）。
【００６５】
Ｓ１４０２の判断の結果が肯定的であれば（Ｓ１４０２：ＹＥＳ）、リード処理部は、リード元仮想領域に割り当てられているページからデータを読み出す（Ｓ１４０３）。その後、リード処理部は、ホスト１０１へ、リード受領（例えば読み出されたデータ）を返却する（Ｓ１４０５）。
【００６６】
一方、Ｓ１４０２の判断の結果が否定的であれば（Ｓ１４０２：ＮＯ）、リード処理部は、０データ（値“０”で構成されたデータ）を読み出す（Ｓ１４０４）。０データは、所定の記憶領域（例えば、ＣＨＡ１０９内のメモリ、共有メモリ１１１、或いはキャッシュメモリ１１３）に記憶されており、Ｓ１４０２：ＮＯの場合に、その所定の記憶領域からデータ“０”が読み出される。その後、Ｓ１４０５で、例えば、０データが、ホスト１０１へ返却される。
【００６７】
本実施形態では、前述したように、仮想ボリュームの記憶容量それ自体の変更が可能である。仮想ボリュームの先頭アドレスは固定のため（ボリューム情報１１１３における先頭ＰＧアドレスは固定のため）、仮想ボリュームの末端アドレスが増減することで（例えばセグメント単位で末端アドレスが増減することで）、仮想ボリュームの記憶容量が変更される。
【００６８】
仮想ボリュームの記憶容量の変更を適切に行うべく、その変更は、後述する手順で実行される。仮想ボリュームの記憶容量の変更処理としては、容量拡張処理と容量縮小処理がある。容量拡張処理は、容量拡張処理部１０９１によって実行され、容量縮小処理は、容量縮小処理部１０９２によって実行される。以下、それぞれの処理の手順を説明する。なお、以下の説明では、記憶容量が変更される仮想ボリュームを、仮想ボリューム＃１０とし、その仮想ボリューム＃１０の記憶容量が、図５Ａに示したように３ＧＢであるとし、仮想ボリューム＃１０が関連付けられているＬＵを、図２に示したようにＬＵ＃２００とする。
【００６９】
図８は、容量拡張処理のフローチャートである。
【００７０】
容量拡張処理部１０９１は、ホスト１０１からＬＵ＃２００を指定した容量拡張指示を受領する（Ｓ８０１）。ＬＵ＃２００に関連付いている論理ボリュームが仮想ボリューム＃１０であることは、前述したように、ＬＵ管理情報及びボリューム情報１１１３を参照することで、特定することができる。受領した容量拡張指示は、３ＧＢから４ＧＢへの拡張指示であるとする。
【００７１】
容量拡張処理部１０９１は、容量変更可否判定を実行する（Ｓ８０２）。容量変更可否判定のフローは、図１２を参照して、後に説明する。
【００７２】
Ｓ８０２の判定の結果が、変更不可という結果であれば（Ｓ８０３：ＮＯ）、容量拡張処理部１０９１は、ホスト１０１へ、変更不可の内容を報告する（Ｓ８０８）。その結果、ホスト１０１のディスプレイ装置に、図１５Ａに例示する画面（例えば、拡張できないことを表すメッセージと、拡張できない理由が記述された画面）が表示される。
【００７３】
一方、Ｓ８０２の判定の結果が、変更可という結果であれば（Ｓ８０３：ＹＥＳ）、容量拡張処理部１０９１は、Ｓ８０４乃至Ｓ８０７を行う。
【００７４】
すなわち、まず、容量拡張処理部１０９１は、ページ管理連結を行う（Ｓ８０４）。ページ管理連結とは、仮想ボリューム＃１０の末端セグメントに、拡張する記憶容量分のセグメントを連結することである。具体的には、図９Ａに示すように、容量拡張処理部１０９１は、ページ管理情報１１１１において、仮想ボリューム＃１０の最終セグメントに対応したレコード（ページ管理＃３のレコード）の次ページ管理＃を、最終セグメントであることを意味する無効値“０”から、拡張する記憶容量分のセグメント（ここでは、拡張する記憶容量は１ＧＢのため、１個のセグメント）に対応したレコードのページ管理＃４に更新する。このように、連結する分のセグメントに対応したレコードにおける次ページ管理＃を更新することで、仮想ボリューム＃１０の末端に、拡張する記憶容量分の数のセグメントが連結される。
【００７５】
次に、容量拡張処理部１０９１は、ボリューム情報１１１３を変更する（Ｓ８０５）。ボリューム情報１１１３の変更として、仮想ボリューム＃１０のボリューム容量が更新される。具体的には、図９Ｂに示すように、Ｓ８０１で受領した容量拡張指示の通り、仮想ボリューム＃１０のボリューム容量が、“３ＧＢ”から“４ＧＢ”に更新される。
【００７６】
次に、容量拡張処理部１０９１は、ホストに対する通知対象のＬＵ情報を設定する（Ｓ８０６）。そのＬＵ情報は、ＬＵ＃２００の拡張後の記憶容量（４ＧＢ）を表す情報を含んでいる。そのＬＵ情報は、例えば、後に、ホスト１０１から所定の照会コマンド（例えばinquiryコマンド）を受けた場合に、その照会コマンドに応答して、ホスト１０１へ通知される。
【００７７】
最後に、容量拡張処理部１０９１は、ホスト１０１へ、変更完了を報告する（Ｓ８０７）。その結果、ホスト１０１のディスプレイ装置に、図１５Ｂに例示する画面（例えば、ＬＵ＃２００の記憶容量が３ＧＢから４ＧＢに拡張されたことを表すメッセージ）が表示される。
【００７８】
以上が、容量拡張処理の説明である。容量拡張処理では、前述したように、ページ管理連結が行われた後に（つまり、ページ管理情報１１１１が更新された後に）、ボリューム情報１１１３が更新される。言い換えれば、仮想ボリューム＃１０を構成するセグメントの数が増えた後に、仮想ボリューム＃１０の記憶容量を表す情報（ボリューム容量）が更新される。
【００７９】
なお、容量拡張処理の最中（つまりＳ８０１〜Ｓ８０７又はＳ８０８の間）は、図８に示すように、容量拡張対象のＬＵ＃２００について、ＬＵ応答及びフォーマットが禁止される期間（以下、第一の禁止期間）である。ＬＵ応答とは、ＬＵ＃２００を指定した所定の照会コマンドに対する応答（具体的には、ＬＵ＃２００に関する記憶容量の回答）である。容量拡張処理部１０９１は、例えば、ＬＵ＃２００を指定した容量拡張指示を受領した場合に、ＬＵ＃２００について、第一の禁止期間であることを表す情報を、所定の記憶領域（例えば、共有メモリ１１１）に設定する。
【００８０】
第一の禁止期間において、いずれのＣＨＡ１０９が、ＬＵ＃２００を指定した所定の照会コマンドをホスト１０１から受けても、前述の所定の記憶領域に設定された情報から、ＬＵ＃２００について第一の禁止期間であることが特定される。このため、照会コマンド（例えばinquiryコマンド）を受けたＣＨＡ１０９（又は別のＣＨＡ１０９）は、その照会コマンドに対して、ＬＵ＃２００についての記憶容量をホスト１０１に回答しない。具体的には、例えば、その照会コマンドに対して、ビジー又はエラー（例えば、ＳＣＳＩでサポートされているエラー）が、ホスト１０１に返却される。
【００８１】
同様に、第一の禁止期間において、いずれのＣＨＡ１０９が、ＬＵ＃２００を指定したフォーマットコマンドをホスト１０１から受けても、前述の所定の記憶領域に設定された情報から、ＬＵ＃２００について第一の禁止期間であることが特定される。このため、フォーマットコマンドを受けたＣＨＡ１０９（又は別のＣＨＡ１０９）は、ＬＵ＃２００に関連付いている仮想ボリューム＃１０に対してフォーマット（シュレッディングを含む）を行わない。具体的には、例えば、そのフォーマットコマンドに応答して、ビジー又はエラーがホスト１０１に返却される。
【００８２】
図１０は、容量縮小処理のフローチャートである。
【００８３】
容量縮小処理部１０９２は、ホスト１０１からＬＵ＃２００を指定した容量縮小指示を受領する（Ｓ１００１）。受領した容量縮小指示は、３ＧＢから２ＧＢへの縮小指示であるとする。
【００８４】
容量縮小処理部１０９２は、容量変更可否判定を実行する（Ｓ１００２）。容量変更可否判定のフローは、図１２を参照して、後に説明する。
【００８５】
Ｓ１００２の判定の結果が、変更不可という結果であれば（Ｓ１００３：ＮＯ）、容量縮小処理部１０９２は、ホスト１０１へ、変更不可の内容を報告する（Ｓ１００９）。その結果、ホスト１０１のディスプレイ装置に、図１５Ｃに例示する画面（例えば、縮小できないことを表すメッセージと、縮小できない理由が記述された画面）が表示される。
【００８６】
一方、Ｓ１００２の判定の結果が、変更可という結果であれば（Ｓ１００３：ＹＥＳ）、容量縮小処理部１０９２は、Ｓ１００４乃至Ｓ１００８を行う。
【００８７】
すなわち、まず、容量縮小処理部１０９２は、ボリューム情報１１１３を変更する（Ｓ１００４）。ボリューム情報１１１３の変更として、仮想ボリューム＃１０のボリューム容量が更新される。具体的には、図１１Ａに示すように、Ｓ１００１で受領した容量縮小指示の通り、仮想ボリューム＃１０のボリューム容量が、“３ＧＢ”から“２ＧＢ”に更新される。
【００８８】
次に、容量縮小処理部１０９２は、使用中ページの破棄を実行する（Ｓ１００５）。具体的には、容量縮小処理部１０９２は、縮小する記憶容量分のセグメント（ここでは、末端のセグメント）を構成する仮想領域に割り当てられているページを破棄する。より具体的には、容量縮小処理部１０９２は、縮小する記憶容量分のセグメントを構成する仮想領域に割り当てられているページ＃１０（ページ管理情報１１１１内のページ＃）を、仮想ボリューム＃１０の先頭セグメントに対応したページ管理＃１（ボリューム情報１１１３から特定されるページ管理＃）を用いてページ管理情報１１１１を参照することで特定する。容量縮小処理部１０９２は、図１１Ｂに示すように、特定されたページ＃１０についてのページ使用状態（ページ情報１１１２内のページ使用状態）を、“使用中”から“未使用”に更新し、且つ、図１１Ｃに示すように、ページ管理情報１１１１における、そのページ＃を、無効値“０”に更新する。
【００８９】
次に、容量縮小処理部１０９２は、ページ管理連結の解除を行う（Ｓ１００６）。ページ管理連結の解除とは、仮想ボリューム＃１０から、最終セグメントを含む、縮小する記憶容量分のセグメントを、外すことである。具体的には、図１１Ｃに示すように、容量縮小処理部１０９２は、ページ管理情報１１１１において、仮想ボリューム＃１０の最終セグメントに対応したページ管理＃３を次ページ管理＃としているレコード（ページ管理＃２のレコード）における次ページ管理＃を、ページ管理＃３から無効値“０”に更新する。このように、外す分のセグメントに対応したレコードを次ページ管理＃としているレコード内の次ページ管理＃を無効値に更新することで、仮想ボリューム＃１０の末端から、縮小する記憶容量分の数のセグメントが外される。
【００９０】
次に、容量縮小処理部１０９２は、ホストに対する通知対象のＬＵ情報を設定する（Ｓ１００７）。そのＬＵ情報は、ＬＵ＃２００の縮小後の記憶容量（２ＧＢ）を表す情報を含んでいる。そのＬＵ情報は、例えば、後に、ホスト１０１から所定の照会コマンド（例えばinquiryコマンド）を受けた場合に、その照会コマンドに応答して、ホスト１０１へ通知される。
【００９１】
最後に、容量縮小処理部１０９２は、ホスト１０１へ、変更完了を報告する（Ｓ１００８）。その結果、ホスト１０１のディスプレイ装置に、図１５Ｄに例示する画面（例えば、ＬＵ＃２００の記憶容量が３ＧＢから２ＧＢに縮小されたことを表すメッセージ）が表示される。
【００９２】
以上が、容量縮小処理の説明である。容量縮小処理では、前述したように、ボリューム情報１１１３が更新された後に、使用中ページ（割当て済みページ）が破棄され、その後に、ページ管理の連結が解除される。言い換えれば、仮想ボリューム＃１０の記憶容量を表す情報（ボリューム容量）が更新され、縮小する容量分のセグメントに割り当てられているページが未使用状態にされた後に、仮想ボリューム＃１０を構成するセグメントの数が減らされる。
【００９３】
なお、容量縮小処理の最中（つまりＳ１００１〜Ｓ１００８又はＳ１００９の間）は、図１０に示すように、容量縮小対象のＬＵ＃２００について、ＬＵ応答が禁止される期間（以下、第二の禁止期間）である。なお、第二の禁止期間では、第一の禁止期間と違って、ＬＵ＃２００を指定したフォーマットコマンドに応答して、ＬＵ＃２００に関連付けられている仮想ボリューム＃１０に対するフォーマット（例えばシュレッディング）が行われても良い。
【００９４】
図１２は、容量変更可否判定のフローチャートである。なお、以下の説明では、容量の変更とは、容量の拡張又は縮小のことである。
【００９５】
図１２に示すように、容量変更可否判定では、複数のサブ判定Ｓ１２０１〜Ｓ１２０７、Ｓ１２０９及びＳ１２１０が行われる。サブ判定が行われる順番は、図１２に示した順番に限らず、どのような順番で行われても良い。
【００９６】
複数のサブ判定Ｓ１２０１〜Ｓ１２０７、Ｓ１２０９及びＳ１２１０のうち、特に、容量拡張処理で行われるサブ判定が、Ｓ１２０１、Ｓ１２０２、Ｓ１２０３及びＳ１２０７であり、容量縮小処理で行われるサブ判定が、Ｓ１２０９及びＳ１２１０であり、容量拡張処理及び容量縮小処理のいずれでも行われるサブ判定が、Ｓ１２０４、Ｓ１２０５及びＳ１２０６である。言い換えれば、容量拡張処理では、Ｓ１２０９及びＳ１２１０は行われず、容量縮小処理では、Ｓ１２０１、Ｓ１２０２及びＳ１２０３はスキップされても良く、且つ、Ｓ１２０７は行われない。
【００９７】
Ｓ１２０１では、ボリューム情報１１１３及びＰＧ情報１１１４を基に、仮想ボリューム＃１０の、容量変更指示（容量拡張指示又は容量縮小指示）に従う変更後の記憶容量が、ＰＧ＃３のＰＧ容量を超えているか否かが判定される。例えば、ＰＧ＃３は、図４Ａに示したＰＧ情報１１１４によれば、１ＴＢであり、故に、４ＧＢの論理ボリュームを２５６単位で管理可能な記憶容量（４ＧＢ×２５６＝１ＴＢ）である。
【００９８】
Ｓ１２０１のサブ判定の結果が肯定的であれば（Ｓ１２０１：ＹＥＳ）、Ｓ１２０２が行われ、Ｓ１２０１のサブ判定の結果が否定的であれば（Ｓ１２０１：ＮＯ）、容量変更可否判定の結果が変更不可に決定される（Ｓ１２１１）。これにより、一つの仮想ボリューム＃１０が複数の仮想的なＰＧに跨ることが防止される。故に、例えば、仮想ボリューム＃１０の拡張の際に新規に仮想的なＰＧを作成する必要が無い。なお、Ｓ１２０１：ＮＯ及びＳ１２１１を経てＳ８０８が実行された場合には、例えば、図１５Ａに例示した画面に、変更不可の理由として、仮想ボリューム＃１０の拡張後の記憶容量がＰＧ＃３の記憶容量を超えることが表示される。
【００９９】
Ｓ１２０２では、容量変更指示に従う容量変更後の仮想ボリューム＃１０が、ＰＧ＃３に存在する他の仮想ボリューム＃８に重なるか否かが判定される。具体的には、ボリューム情報１１１３を基に、容量変更指示に従う容量変更後の仮想ボリューム＃１０の末端アドレスが、ＰＧ＃３に存在する他の仮想ボリューム＃８の先頭アドレスを越えるか否かが判定される。
【０１００】
Ｓ１２０２のサブ判定の結果が肯定的であれば（Ｓ１２０２：ＹＥＳ）、Ｓ１２０３が行われ、Ｓ１２０２のサブ判定の結果が否定的であれば（Ｓ１２０２：ＮＯ）、容量変更可否判定の結果が変更不可に決定される（Ｓ１２１１）。これにより、仮想ボリューム＃１０が他の仮想ボリューム＃８に重なってしまうことが防止される。なお、Ｓ１２０２：ＮＯ及びＳ１２１１を経てＳ８０８が実行された場合には、例えば、図１５Ａに例示した画面に、変更不可の理由として、容量拡張後の仮想ボリューム＃１０がＰＧ＃３内の他の仮想ボリューム＃８に重なることが表示される。
【０１０１】
Ｓ１２０３では、ボリューム情報１１１３、ページ情報１１１２及びページ管理情報１１１１を基に、一以上の未割当てのページの総容量に対する、仮想ボリューム＃１０内のページが割り当てられていない一以上の仮想領域の総容量の比率が、仮想ボリューム＃１０に対応した閾値“５０％”（図５Ａ参照）を超えているか否かが判定される。
【０１０２】
Ｓ１２０３のサブ判定の結果が肯定的であれば（Ｓ１２０３：ＹＥＳ）、Ｓ１２０４が行われ、Ｓ１２０３のサブ判定の結果が否定的であれば（Ｓ１２０３：ＮＯ）、容量変更可否判定の結果が変更不可に決定される（Ｓ１２１１）。これにより、未割当てのページの数のわりに仮想ボリューム＃１０の記憶容量を拡張し過ぎてしまうことが防止される。なお、Ｓ１２０３：ＮＯ及びＳ１２１１を経てＳ８０８が実行された場合には、例えば、図１５Ａに例示した画面に、変更不可の理由として、仮想ボリューム＃１０についての閾値を超えてしまうことが表示される。
【０１０３】
Ｓ１２０４では、ボリューム情報１１１３を基に、仮想ボリューム＃１０のボリューム属性として“容量変更不可”が設定されているか否かが判定される。
【０１０４】
Ｓ１２０４のサブ判定の結果が肯定的であれば（Ｓ１２０４：ＹＥＳ）、Ｓ１２０５が行われ、Ｓ１２０４のサブ判定の結果が否定的であれば（Ｓ１２０４：ＮＯ）、容量変更可否判定の結果が変更不可に決定される（Ｓ１２１１）。これにより、記憶容量の変更を禁止することが仮想ボリューム＃１０について設定されていれば、仮想ボリューム＃１０の記憶容量が変更されてしまうことが防止される。なお、Ｓ１２０４：ＮＯ及びＳ１２１１を経てＳ８０８が実行された場合には、例えば、図１５Ａに例示した画面に、変更不可の理由として、仮想ボリューム＃１０についての容量変更不可が設定されていることが表示される。また、ボリューム属性“容量変更不可”に加えて、“拡張のみ不可”或いは“縮小のみ不可”があっても良い。“拡張のみ不可”であれば、拡張は禁止されるが縮小は許可され、一方、“縮小のみ不可”であれば、縮小は禁止されるが拡張は許可される。
【０１０５】
Ｓ１２０５では、ボリューム情報１１１３を基に、仮想ボリューム＃１０について他の機能（例えばコンピュータプログラム）に使用されている最中か否かが判定される。具体的には、例えば、仮想ボリューム＃１０のボリューム属性として“ペアボリュームあり”が設定されているか否かが判定される。
【０１０６】
Ｓ１２０５のサブ判定の結果が肯定的であれば（Ｓ１２０５：ＹＥＳ）、Ｓ１２０６が行われ、Ｓ１２０５のサブ判定の結果が否定的であれば（Ｓ１２０５：ＮＯ）、容量変更可否判定の結果が変更不可に決定される（Ｓ１２１１）。これにより、例えばボリュームペアの構成（例えば、一方のボリュームと他方のボリュームの記憶容量が同じ容量である）が保護される。なお、Ｓ１２０５：ＮＯ及びＳ１２１１を経てＳ８０８が実行された場合には、例えば、図１５Ａに例示した画面に、変更不可の理由として、仮想ボリューム＃１０が他機能使用中であることが表示される。
【０１０７】
Ｓ１２０６では、容量変更指示が容量縮小指示であるか否かが判定される。Ｓ１２０６のサブ判定の結果が肯定的であれば（Ｓ１２０６：ＹＥＳ）、Ｓ１２０９が行われ、Ｓ１２０６のサブ判定の結果が否定的であれば（Ｓ１２０６：ＮＯ）、Ｓ１２０７が行われる。
【０１０８】
Ｓ１２０７では、ページ管理情報１１１１内で空きのレコードが枯渇するか否かが判定される。「空きのレコード」とは、そのレコードのページ管理＃が他のレコードにおける次ページ管理＃として設定されていないレコード（つまりどのレコードにもリンクしていないレコード）である。「空きのレコードが枯渇する」とは、空きのレコードがｋ個（ｋは０以上の整数）になることである。
【０１０９】
Ｓ１２０７のサブ判定の結果が肯定的であれば（Ｓ１２０７：ＹＥＳ）、容量変更可否判定の結果が変更可に決定され（Ｓ１２０８）、Ｓ１２０７のサブ判定の結果が否定的であれば（Ｓ１２０７：ＮＯ）、容量変更可否判定の結果が変更不可に決定される（Ｓ１２１１）。これにより、ページ管理情報１１１１において空きのレコードが枯渇してしまうことを防ぐことができる。なお、Ｓ１２０７：ＮＯ及びＳ１２１１を経てＳ８０８が実行された場合には、例えば、図１５Ａに例示した画面に、変更不可の理由として、ページ管理情報１１１１において空きのレコードが枯渇してしまうことが表示される。
【０１１０】
Ｓ１２０９では、容量拡張指示がデータ破棄の指示を有するか否かが判定される。Ｓ１２０９のサブ判定の結果が肯定的であれば（Ｓ１２０６：ＹＥＳ）、容量変更可否判定の結果が変更可に決定され（Ｓ１２０８）、Ｓ１２０９のサブ判定の結果が否定的であれば（Ｓ１２０９：ＮＯ）、Ｓ１２１０が行われる。つまり、容量縮小指示にデータ破棄の明示があれば、縮小する記憶容量分のセグメント（仮想ボリューム＃１０から外されるセグメント）にページが割当てられていても、容量縮小処理において、そのページが“使用中”から“未使用”に変更される。
【０１１１】
Ｓ１２１０では、ボリューム情報１１１３及びページ管理情報１１１１を基に、破棄データが無しか否かが判定される。言い換えれば、縮小する記憶容量分のセグメントを構成するいずれかの仮想領域にページが割当てられているか否かが判定される。
【０１１２】
Ｓ１２１０のサブ判定の結果が肯定的であれば（Ｓ１２１０：ＹＥＳ）、容量変更可否判定の結果が変更可に決定され（Ｓ１２０８）、Ｓ１２１０のサブ判定の結果が否定的であれば（Ｓ１２１０：ＮＯ）、容量変更可否判定の結果が変更不可に決定される（Ｓ１２１１）。これにより、容量縮小指示にデータ破棄の明示が無くても、縮小する記憶容量分のセグメントにページが割当てられていなければ、容量縮小処理におけるＳ１００４以降が実行される。別の言い方をすれば、容量縮小指示にデータ破棄の明示が無く、縮小する記憶容量分のセグメントにページが割当てられていれば、容量縮小指示におけるＳ１００４以降は非実行となるため、そのページに記憶されているデータが保護される。なお、Ｓ１２１０：ＮＯ及びＳ１２１１を経てＳ８０８が実行された場合には、例えば、図１５Ｃに例示した画面に、変更不可の理由として、容量縮小指示にデータ破棄の明示が無く縮小される分の記憶容量にデータが存在することが表示される。
【０１１３】
以上が、本実施形態についての説明である。なお、本実施形態では、下記が行われても良い。
【０１１４】
すなわち、ライト処理部は、ライト要求を受けたときには、図１６Ａに示すように、ライト要求で指定されているＬＵ＃２００に関連付いている仮想ボリューム＃１０が容量縮小中か否かを判定する（Ｓ１６０１）。縮小中でなければ（Ｓ１６０１：ＮＯ）、ライト処理部は、Ｓ１３０２（図１３参照）を実行する。一方、縮小中であれば（Ｓ１６０１：ＹＥＳ）、ライト処理部は、ライト先仮想領域が、縮小される記憶容量分のセグメントの構成要素としての仮想領域か否かを判定する（Ｓ１６０２）。Ｓ１６０２の判定の結果が否定的であれば（Ｓ１６０２：ＮＯ）、ライト処理部は、Ｓ１３０２を実行する。一方、Ｓ１６０２の判定の結果が肯定的であれば（Ｓ１６０２：ＹＥＳ）、ライト処理部は、ライト保留処理を実行する（Ｓ１６０３）。ライト保留処理では、例えば、ホスト１０１からのライト要求に対してホスト１０１に応答しない、或いは、ビジー又はリトライ要求を返す処理が行われる。以上の説明によれば、仮想ボリューム＃１０が容量拡張中の場合はＳ１３０２以降の処理が実行されるが、仮想ボリューム＃１０が容量縮小中であってライト先仮想領域が縮小分のセグメント内の仮想領域であれば、Ｓ１３０２以降の処理が非実行とされる。
【０１１５】
また、図１６Ｂに示すように、図１２のＳ１２０５に代えて、Ｓ１６１１が行われても良い。Ｓ１６１１では、容量拡張であって仮想ボリューム＃１０がコピー元であるか否か、又は、容量縮小であって仮想ボリューム＃１０がコピー先であるか否かが判定される。Ｓ１６１１のサブ判定の結果が肯定的であれば（Ｓ１６１１：ＹＥＳ）、Ｓ１２０６が行われ、Ｓ１６１１のサブ判定の結果が否定的であれば（Ｓ１６１１：ＮＯ）、Ｓ１２１１が行われる。
【０１１６】
以上、本発明の好適な実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、容量変更指示は、ホスト１０１に代えて、ストレージシステム１０５の管理装置などの他の計算機から送信されても良い。
【図面の簡単な説明】
【０１１７】
【図１】図１は、ＬＵについての記憶容量の変更の一つの方法の概念を示す。
【図２】図２は、本発明の一実施形態での、ＬＵについての記憶容量の変更の概要を示す。
【図３】図３は、本発明の一実施形態に係る計算機システムの構成を示す。
【図４】図４Ａは、パリティグループ（ＰＧ）情報の構成例を示す。図４Ｂは、物理的なＰＧを示す。図４Ｃは、仮想的なＰＧを示す。
【図５】図５Ａは、ボリューム情報の構成例を示す。図５Ｂは、物理的なＰＧと、それの記憶空間を基に形成された実ボリュームとを示す。
【図６】図６Ａは、ページ情報の構成例を示す。図６Ｂは、物理的なＰＧと、それの記憶空間を基に形成されたプールボリュームと、プールボリュームを構成するページとを示す。
【図７】図７Ａは、ページ管理情報の構成例を示す。図７Ｂは、セグメントを構成する仮想領域に対するページの割当てを示す。
【図８】図８は、容量拡張処理のフローチャートである。
【図９】図９Ａは、Ｓ８０４での更新前と更新後のページ管理情報を示す。図９Ｂは、Ｓ８０５での更新前と更新後のボリューム情報を示す。
【図１０】図１０は、容量縮小処理のフローチャートである。
【図１１】図１１Ａは、Ｓ１００４での更新前と更新後のボリューム情報を示す。図１１Ｂは、Ｓ１００５での更新前と更新後のページ情報を示す。図１１Ｃは、Ｓ１００５及びＳ１００６での更新前と更新後のページ管理情報を示す。
【図１２】図１２は、容量変更可否判定のフローチャートである。
【図１３】図１３は、仮想ボリュームに対するライト処理のフローチャートである。
【図１４】図１４は、仮想ボリュームに対するリード処理のフローチャートである。
【図１５】図１５Ａは、図８に示したＳ８０８により表示される画面の一例である。図１５Ｂは、図８に示したＳ８０７により表示される画面の一例である。図１５Ｃは、図１０に示したＳ１００９により表示される画面の一例である。図１５Ｄは、図１０に示したＳ１００８により表示される画面の一例である。
【図１６】図１６Ａは、図１３に示したライト処理の変形例である。図１６Ｂは、図１２に示したＳ１２０５の変形例としてのＳ１６１１を示す。
【符号の説明】
【０１１８】
１０１…ホスト  １０５…ストレージシステム  １０７…コントローラ  １０９…チャネルアダプタ  １１１…共有メモリ  １１３…キャッシュメモリ  １１７…ディスクアダプタ  １１８…記憶装置群  １１９…物理記憶装置  １０９１…容量拡張処理部  １０９２…容量縮小処理部  １１１１…ページ管理情報  １１１２…ページ情報  １１１３…ボリューム情報  １１１４…ＰＧ情報
【図１】
2010020431.tif 000003
【図２】
2010020431.tif 000004
【図３】
2010020431.tif 000005
【図４】
2010020431.tif 000006
【図５】
2010020431.tif 000007
【図６】
2010020431.tif 000008
【図７】
2010020431.tif 000009
【図８】
2010020431.tif 000010
【図９】
2010020431.tif 000011
【図１０】
2010020431.tif 000012
【図１１】
2010020431.tif 000013
【図１２】
2010020431.tif 000014
【図１３】
2010020431.tif 000015
【図１４】
2010020431.tif 000016
【図１５】
2010020431.tif 000017
【図１６】
2010020431.tif 000018