(57)【特許請求の範囲】
【請求項１】
複数の物理記憶デバイスで構成された複数のＲＡＩＤグループと、
前記複数のＲＡＩＤグループのうちの少なくとも１つのＲＡＩＤグループの記憶領域を基に形成され、それぞれ複数の実領域で構成される複数の論理ボリュームと、
前記複数の論理ボリュームのうちの少なくとも１つの論理ボリュームを基に形成された容量プールと、
複数の仮想領域で構成された仮想ボリュームにおけるどの仮想領域にどの実領域が割り当てられているかを表すマッピング情報と、
どの実領域がどの仮想領域に割り当てられているかを表す実領域管理情報と、
計算機からライト要求を受信し、そのライト要求で指定されている仮想ボリュームにおける仮想領域に、前記容量プールを形成する何れかの論理ボリュームにおける何れかの実領域を割り当て、割り当てた実領域に、そのライト要求に従うデータを書込み、前記マッピング情報及び前記実領域管理情報において、割り当てた実領域を表す情報とその実領域の割り当て先の仮想領域を表す情報とを対応付ける入出力制御部と、
或る物理記憶デバイスで障害が生じた場合、その或る物理記憶デバイスを備えるＲＡＩＤグループに属する論理ボリュームが前記容量プールに含まれているか否か判断し、前記容量プールに含まれていないと判断すると、当該論理ボリュームが属するＲＡＩＤグループの記憶領域に対してデータのリストア処理を行い、前記容量プールに含まれていると判断すると、当該論理ボリュームを構成するそれぞれの低信頼実領域が、仮想領域に割り当てられているか否かを、前記実領域管理情報を参照することにより判断し、仮想領域に割り当てられていない低信頼実領域については、データのリストア処理を行わず、割り当てられている低信頼実領域について、データのリストア処理を行うリストア制御部とを備えるストレージシステム。
【請求項２】
前記リストア処理では、前記或る物理記憶デバイスが属する前記ＲＡＩＤグループにおける他の物理記憶デバイスが記憶しているデータ群のうち、前記或る物理記憶デバイスにおけるリストア対象データのリストアに必要なデータを読み出し、読み出したデータを用いて、前記或る物理記憶デバイスに代わる別の物理記憶デバイスに、前記リストア対象データをリストアし、
前記リストア対象データは、仮想領域に割り当て済みの低信頼実領域に対応した、前記或る物理記憶デバイスにおける記憶領域に記憶されているデータである、
請求項１記載のストレージシステム。
【請求項３】
前記或る物理記憶デバイスにおける記憶領域と、前記別の物理記憶デバイスにおける前記リストア対象データのリストア先の記憶領域とが、仮想領域に割り当て済みの同一の実領域に対応する、
請求項２記載のストレージシステム。
【請求項４】
前記ストレージシステムが、プライマリのストレージシステムであり、セカンダリのストレージシステムと接続されており、
プライマリの仮想ボリュームとセカンダリの仮想ボリュームとの間での同期型リモートコピーを制御するコピー制御部、を更に備え、
前記プライマリの仮想ボリュームは、複数のプライマリの仮想領域で構成された前記仮想ボリュームであり、
前記セカンダリの仮想ボリュームは、前記セカンダリのストレージシステムが有し、前記複数のプライマリの仮想領域にそれぞれ対応した複数のセカンダリの仮想領域で構成された仮想ボリュームであり、
前記コピー制御部が、各低信頼実領域が割り当てられている各低信頼プライマリ仮想領域について、仮想領域修復処理を行い、
前記仮想領域修復処理では、セカンダリ仮想領域に記憶されているデータの要求を、前記セカンダリストレージシステムに送信し、その要求に従うデータを前記セカンダリストレージシステムから受信し、前記低信頼プライマリ仮想領域に、前記低信頼実領域を含む前記論理ボリュームとは別の論理ボリュームの実領域を割り当て、前記受信したデータを、その別の論理ボリュームの実領域に書込む、請求項１乃至３のうちのいずれか１項に記載のストレージシステム。
【請求項５】
前記入出力制御部が、前記仮想領域修復処理の最中でも、前記プライマリ仮想ボリューム及びプライマリ仮想領域を指定したリード要求を前記計算機から受け付け、受信したリード要求で指定されているプライマリ仮想領域が、前記低信頼プライマリ仮想領域であるか否かを判断し、前記低信頼プライマリ仮想領域でなければ、その指定されているプライマリ仮想領域に割り当てられている実領域にアクセスし、前記低信頼プライマリ仮想領域であれば、そのプライマリ仮想ボリュームに対応したセカンダリ仮想ボリュームと、その指定されているプライマリ仮想領域に対応したセカンダリ仮想領域とを指定したリード要求を、前記セカンダリストレージシステムに送信する、請求項４記載のストレージシステム。
【請求項６】
プライマリのストレージシステムと、
前記プライマリのストレージシステムに接続されたセカンダリストレージシステムとを備え、
前記プライマリのストレージシステムが、
複数のプライマリの仮想領域で構成されたプライマリの仮想ボリュームと、
複数の物理記憶デバイスで構成された複数のＲＡＩＤグループと、
前記複数のＲＡＩＤグループのうちの少なくとも１つのＲＡＩＤグループの記憶領域を基に形成され、複数の実領域で構成された複数の論理ボリュームと、
前記複数の論理ボリュームのうちの少なくとも１つの論理ボリュームを基に形成された容量プールと、
どの仮想領域にどの実領域が割り当てられているかを表すマッピング情報と、
どの実領域がどの仮想領域に割り当てられているかを表す実領域管理情報と、
計算機からライト要求を受信し、そのライト要求で指定されている仮想ボリュームにおける仮想領域に、前記容量プールを形成する何れかの論理ボリュームにおける何れかの実領域を割り当て、割り当てた実領域に、そのライト要求に従うデータを書込み、前記マッピング情報及び前記実領域管理情報において、実領域の割り当て先のプライマリの仮想領域を表す情報とその割り当てた実領域を表す情報とを対応付ける入出力制御部と、
同期型リモートコピーを行うプライマリのコピー制御部とを備え、
前記同期型リモートコピーでは、前記ライト要求に従ってプライマリの仮想領域に書き込まれるコピー対象のデータをセカンダリの仮想領域に転送し、それに応答して完了報告を受けた場合に、前記計算機に書込み完了を報告し、
前記セカンダリのストレージシステムが、
前記複数のプライマリの仮想領域に対応する複数のセカンダリの仮想領域で構成されたセカンダリの仮想ボリュームと、
複数の物理記憶デバイスで構成された複数のＲＡＩＤグループと、
前記複数のＲＡＩＤグループのうちの少なくとも１つのＲＡＩＤグループの記憶領域を基に形成され、複数の実領域で構成された複数の論理ボリュームと、
前記複数の論理ボリュームのうちの少なくとも１つの論理ボリュームを基に形成された容量プールと、
どの仮想領域にどの実領域が割り当てられているかを表すマッピング情報と、
どの実領域がどの仮想領域に割り当てられているかを表す実領域管理情報と、
コピー元のプライマリの仮想領域に対応したコピー先のセカンダリの仮想領域に、前記容量プールを形成する何れかの論理ボリュームにおける何れかの実領域を割り当て、割り当てた実領域に、前記コピー対象のデータを書込み、それが終了した場合に前記完了報告を前記プライマリストレージシステムに送信し、前記マッピング情報及び前記実領域管理情報において、実領域の割当て先のセカンダリの仮想領域を表す情報とその割り当てた実領域を表す情報とを対応付けるセカンダリのコピー制御部とを備え、
前記プライマリのストレージシステムにおいて、或る物理記憶デバイスで障害が生じた場合であって、その或る物理記憶デバイスを備えるＲＡＩＤグループに属する論理ボリュームを構成する低信頼実領域が、プライマリの仮想領域に割り当てられている場合、前記プライマリのコピー制御部が、各低信頼実領域が割り当てられている各低信頼プライマリ仮想領域について、仮想領域修復処理を行い、
前記仮想領域修復処理では、セカンダリ仮想領域に記憶されているデータの要求を、前記セカンダリストレージに送信し、前記セカンダリのコピー制御部から、その要求に従うデータを受信し、前記低信頼プライマリ仮想領域に、前記低信頼実領域を含む論理ボリュームとは別の論理ボリュームの実領域を割り当て、前記受信したデータを、その別の論理ボリュームの実領域に書込み、
前記入出力制御部が、前記仮想領域修復処理の最中でも、前記プライマリ仮想ボリューム及びプライマリ仮想領域を指定したリード要求を前記計算機から受け付け、受信したリード要求で指定されているプライマリ仮想領域が、前記低信頼プライマリ仮想領域であるか否かを判断し、前記低信頼プライマリ仮想領域でなければ、その指定されているプライマリ仮想領域に割り当てられている実領域にアクセスし、前記低信頼プライマリ仮想領域であれば、そのプライマリ仮想ボリュームに対応したセカンダリ仮想ボリュームと、その指定されているプライマリ仮想領域に対応したセカンダリ仮想領域とを指定したリード要求を、前記セカンダリストレージシステムに送信する、リモートコピーシステム。
【請求項７】
複数の物理記憶デバイスで構成された複数のＲＡＩＤグループと、前記複数のＲＡＩＤグループのうちの少なくとも１つのＲＡＩＤグループの記憶領域を基に形成され、それぞれ複数の実領域で構成される複数の論理ボリュームと、
前記複数の論理ボリュームのうちの少なくとも１つの論理ボリュームを基に形成された容量プールとを備えたストレージシステムのコントローラであって、
どの仮想領域にどの実領域が割り当てられているかを表すマッピング情報と、
どの実領域がどの仮想領域に割り当てられているかを表す実領域管理情報と、
計算機からライト要求を受信し、そのライト要求で指定されている仮想ボリュームにおける仮想領域に、前記容量プールを形成する何れかの論理ボリュームにおける何れかの実領域を割り当て、割り当てた実領域に、そのライト要求に従うデータを書込み、前記マッピング情報及び前記実領域管理情報において、実領域の割り当て先の仮想領域を表す情報とその割り当てた実領域を表す情報とを対応付ける入出力制御部と、
或る物理記憶デバイスで障害が生じた場合、その或る物理記憶デバイスを備えるＲＡＩＤグループに属する論理ボリュームが前記容量プールに含まれているか否か判断し、前記容量プールに含まれていないと判断すると、当該論理ボリュームが属するＲＡＩＤグループの記憶領域に対してデータのリストア処理を行い、前記容量プールに含まれていると判断すると、当該論理ボリュームを構成するそれぞれの低信頼実領域が、仮想領域に割り当てられているか否かを、前記実領域管理情報を参照することにより判断し、仮想領域に割り当てられていない低信頼実領域については、データのリストア処理を行わず、割り当てられている低信頼実領域について、データのリストア処理を行うリストア制御部とを備えるコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムにおけるデータの修復の技術に関する。
【背景技術】
【０００２】
ストレージシステムの信頼性を高めるため、一般に、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）技術が採用されている。この技術によれば、論理的な記憶デバイス（以下、論理ボリューム）が、複数の物理的なデバイス（以下、物理デバイス、例えば、ハードディスクドライブやフラッシュメモリなど）から構成される。これにより、ストレージシステムの信頼性が高まる。論理ボリュームは、Ｉ／Ｏ要求（データの読み出しや書き込み）の発行先として、ストレージシステムからホスト計算機に提供される。
【０００３】
ＲＡＩＤには、幾つかのレベルがある。例えば、ＲＡＩＤ１がある。ＲＡＩＤ１では、例えば、一つの論理ボリュームが、同容量の物理デバイス２個で構成されており、ホスト計算機から書き込まれるデータが、両方の物理デバイスに書き込まれる。この場合、どちらか１個の物理デバイスが故障しても、残りの物理デバイスからデータを取得することができる。このため、ストレージシステムの信頼性が向上する。また、故障した物理デバイスを交換し、残りの物理デバイスから交換後の物理デバイスにデータをコピーすれば、データが二重化された状態に戻り、再び信頼性の高い状態となる。このように、故障した物理デバイスを交換した後、故障した物理デバイスに記憶されていたデータを交換後の物理デバイスに書き込む処理（ここでは二重化状態に戻す処理）を、以下、「ＲＡＩＤ修復処理」と呼ぶ。
【０００４】
ＲＡＩＤレベルにはＲＡＩＤ１の他に、パリティを用いてデータ損失を防ぐＲＡＩＤ５などもある。これらの技術でも、１個の物理デバイスが故障した場合、故障した物理デバイスが記憶していたデータを、残りの物理デバイスに格納されたデータとパリティとを使用した演算により求めることが出来るため、ストレージシステムの信頼性が向上する。また、故障した物理デバイスを交換し、故障した物理デバイスに記憶されていたはずのデータを、残りの物理デバイスが格納しているデータとパリティからリストアし、リストアされたデータを交換後の物理デバイスに格納すれば、ＲＡＩＤ１と同様、再び信頼性の高い状態となる。ＲＡＩＤ５などでは、パリティを利用してリストアされたデータが交換後の物理デバイスに書き込まれるが、この処理が、前述した「ＲＡＩＤ修復処理」となる。
【０００５】
ストレージシステムの信頼性を高める別の技術として、リモートコピー（例えば特許文献１）を利用した技術がある。リモートコピーとは、２台のストレージシステムの間でデータを二重化して格納する技術である。まず、２台のストレージシステムに例えば同容量の論理ボリュームを作成する。次に、２台のストレージシステムを互いに接続し（例えば論理的にパスを張り）、作成した２個の論理ボリュームを、リモートコピーのペアとして定義する。リモートコピーのペアとして定義された２個の論理ボリュームは、片方はプライマリボリューム、もう片方はセカンダリボリュームと呼ばれる状態となる。ホストは、通常プライマリボリュームに対してＩ／Ｏ要求を発行する。プライマリボリュームにデータが書き込まれたとき、プライマリボリュームを保持するストレージシステムは、ホストから受け取った書込み対象のデータを、プライマリボリュームに格納すると同時に、セカンダリボリュームに書き込む。この場合、プライマリボリュームを保持するストレージシステムが故障しても、ホストは、プライマリボリュームの代わりにセカンダリボリュームにアクセスすれば、セカンダリボリュームに更新されたデータを用いて、業務を継続できる場合がある。
【０００６】
また、リモートコピーとは別の技術として、特許文献２にて開示されている「動的容量割り当て機能」と呼ばれる技術がある。この技術は、ストレージシステムが持つ記憶領域をまとめた「容量プール」と物理的な記憶領域を持たない「仮想ボリューム」から構成される。
【０００７】
「容量プール」とは、ストレージシステムが保持する複数の論理ボリュームのうち二以上の論理ボリュームで構成された記憶領域であり、ホストからの書き込み対象のデータを格納するために使用される。一方、「仮想ボリューム」とは、論理ボリュームの代わりにストレージシステムからホストに提供される、物理的な記憶領域を持たないＩ／Ｏ要求の発行先である。動的容量割り当て機能では、最初は、仮想ボリュームに記憶領域が割り当てられていない。ホストからの仮想ボリュームに対するデータ書き込みを契機として、書き込みデータを保持するための記憶領域が、容量プールの中から選択された論理ボリュームから取得され、ホストからのＩ／Ｏ要求で指定されている、仮想ボリュームのデータ書き込み位置に、その記憶領域が割り当てられる（仮想ボリュームへのデータ書き込み位置と、論理ボリュームの記憶領域とが互いに対応付けられる（いわゆるマッピングが行われる））。書き込み対象のデータは、論理ボリュームから取得された記憶領域に格納される。このような制御を行うと、仮想ボリュームの容量のうち実際にデータが書き込まれた領域のみに容量プールから記憶領域が割り当てられるため、データ格納効率を高めることが出来る。容量プールとして使われる論理ボリュームも、ＲＡＩＤ技術を適用して信頼性を高めることが出来る。
【０００８】
【特許文献１】特開２００３−２３３５１８号
【特許文献２】特開２００５−０１１３１６号
【発明の開示】
【発明が解決しようとする課題】
【０００９】
前述したように、ＲＡＩＤ技術を用いれば、論理ボリュームを構成する複数の物理デバイスのうちの１個の物理デバイスが故障しても、ストレージシステムがホストのＩ／Ｏを受け付けることが可能となり、さらに、ＲＡＩＤ修復処理により、故障した物理デバイスを交換したあと、その物理デバイスに記憶されていたデータを交換後の物理デバイスに書き込むことで、信頼性の高い状態に復帰することが出来る。
【００１０】
しかしながら、ＲＡＩＤ技術におけるＲＡＩＤ修復処理には、次のような問題点が存在する。以下、説明を理解し易くするため、ＲＡＩＤ１、すなわち、２個の物理デバイスで構成された１個の論理ボリュームを考える。
【００１１】
１個の物理デバイスが故障すると、ストレージシステムは残りの１個の物理デバイスを用いて、ホストが発行する論理ボリュームへのＩ／Ｏ要求を処理する。故障した物理デバイスが交換されると、ストレージシステムは、ホストから発行されるＩ／Ｏ要求の処理とは別に、残りの１個の物理デバイスから交換した新しい物理デバイスに全てのデータをコピーし、二重化状態に復帰する。新しい物理デバイスへのデータコピーが完了するまでは、二重化状態ではないため、信頼性の低い状態である。近年、物理デバイスの記憶容量が大幅に増加し、それに伴って、ＲＡＩＤ修復処理の時間も増加する。このため、ＲＡＩＤ技術を用いても、物理デバイスが故障すると、信頼性の低い状態が長く続くという問題がある。
【００１２】
本発明の目的は、物理記憶デバイスが故障したことによる信頼性の低い状態が続く時間をなるべく短くすることにある。
【００１３】
本発明の他の目的は、後述の説明から明らかになるであろう。
【課題を解決するための手段】
【００１４】
ストレージシステムのコントローラ（例えば、ストレージシステムに内蔵されている装置、或いは、ストレージシステムの外に存在するサーバ或いはスイッチ等の装置）が、動的容量割り当て機能を有している。具体的には、ストレージシステムには、複数の物理記憶デバイスで構成された複数のＲＡＩＤグループと、前記複数のＲＡＩＤグループの記憶領域を基に形成された容量プールを構成する複数の実領域とが備えられている。
【００１５】
この場合、コントローラは、どの仮想領域にどの実領域が割り当てられているかを表すマッピング情報と、どの実領域がどの仮想領域に割り当てられているかを表す実領域管理情報を保持する。コントローラは、計算機からライト要求を受信し、そのライト要求で指定されている仮想ボリュームにおける仮想領域に、容量プールにおける実領域を割り当て、割当てた実領域に、そのライト要求に従うデータを書込み、マッピング情報及び実領域管理情報において、実領域の割当て先の仮想領域を表す情報とその割り当てた実領域を表す情報とを対応付ける。コントローラは、或る物理記憶デバイスで障害が生じたことにより信頼性の低下した実領域であって、その或る物理記憶デバイスを備えるＲＡＩＤグループに属する低信頼実領域が、仮想領域に割り当てられているか否かを、実領域管理情報を参照することにより判断し、仮想領域に割り当てられていない低信頼実領域については、データのリストア処理を行わず、割り当てられている低信頼実領域について、データのリストア処理を行う。
【発明を実施するための最良の形態】
【００１６】
実施形態１では、ストレージシステムが、複数の物理記憶デバイスで構成された複数のＲＡＩＤグループと、前記複数のＲＡＩＤグループの記憶領域を基に形成された容量プールを構成する複数の実領域とを備える。ストレージシステムが備えるコントローラ（又はストレージシステムの外に存在しストレージシステムに接続されたコントローラ）は、複数の仮想領域で構成された仮想ボリュームを計算機に提供する。コントローラは、どの仮想領域にどの実領域が割り当てられているかを表すマッピング情報と、どの実領域がどの仮想領域に割り当てられているかを表す実領域管理情報と、入出力制御部と、リストア制御部とを備える。入出力制御部は、計算機からライト要求を受信し、そのライト要求で指定されている仮想ボリュームにおける仮想領域に、前記容量プールにおける実領域を割り当てる。また、入出力制御部は、割当てた実領域に、そのライト要求に従うデータを書込み、マッピング情報及び実領域管理情報において、実領域の割当て先の仮想領域を表す情報とその割り当てた実領域を表す情報とを対応付ける。リストア制御部は、或る物理記憶デバイスで障害が生じたことにより信頼性の低下した実領域であって、その或る物理記憶デバイスを備えるＲＡＩＤグループに属する低信頼実領域が、仮想領域に割り当てられているか否かを、実領域管理情報を参照することにより判断する。リストア制御部は、仮想領域に割り当てられていない低信頼実領域については、データのリストア処理を行わず、割り当てられている低信頼実領域について、データのリストア処理を行う。
【００１７】
実施形態２では、実施形態１において、リストア処理では、リストア制御部は、或る物理記憶デバイスが属するＲＡＩＤグループにおける他の物理記憶デバイスが記憶しているデータ群のうち、或る物理記憶デバイスにおけるリストア対象データのリストアに必要なデータを読み出し、読み出したデータを用いて、或る物理記憶デバイスに代わる別の物理記憶デバイスに、リストア対象データをリストアする。リストア対象データは、仮想領域に割り当て済みの低信頼実領域に対応した、或る物理記憶デバイスにおける記憶領域に記憶されているデータである。
【００１８】
実施形態３では、実施形態２において、或る物理記憶デバイスにおける記憶領域と、別の物理記憶デバイスにおける前記リストア対象データのリストア先の記憶領域とが、仮想領域に割り当て済みの同一の実領域に対応する。つまり、対応付けの変更が不要である。
【００１９】
実施形態４では、実施形態１乃至３のうちのいずれかにおいて、ストレージシステムが、プライマリのストレージシステムであり、セカンダリのストレージシステムと接続されている。コントローラが、プライマリの仮想ボリュームとセカンダリの仮想ボリュームとの間での同期型リモートコピーを制御するコピー制御部を更に備える。プライマリの仮想ボリュームは、複数のプライマリの仮想領域で構成された仮想ボリュームである。セカンダリの仮想ボリュームは、セカンダリのストレージシステムが有し、複数のプライマリの仮想領域にそれぞれ対応した複数のセカンダリの仮想領域で構成された仮想ボリュームである。コピー制御部が、各低信頼実領域が割り当てられている各低信頼プライマリ仮想領域について、仮想領域修復処理を行う。仮想領域修復処理では、コピー制御部は、セカンダリ仮想領域に記憶されているデータの要求を、セカンダリストレージシステムに送信し、その要求に従うデータをセカンダリストレージシステムから受信し、低信頼プライマリ仮想領域に、低信頼実領域とは別の実領域を割り当て、受信したデータを、その別の実領域に書込む。
【００２０】
実施形態５では、実施形態４において、入出力制御部が、仮想領域修復処理の最中でも、プライマリ仮想ボリューム及びプライマリ仮想領域を指定したＩ／Ｏ要求を計算機から受け付ける。入出力制御部は、受信したＩ／Ｏ要求で指定されているプライマリ仮想領域が、低信頼プライマリ仮想領域であるか否かを判断し、低信頼プライマリ仮想領域でなければ、その指定されているプライマリ仮想領域に割り当てられている実領域にアクセスする。一方、入出力制御部は、低信頼プライマリ仮想領域であれば、そのプライマリ仮想ボリュームに対応したセカンダリ仮想ボリュームと、その指定されているプライマリ仮想領域に対応したセカンダリ仮想領域とを指定したＩ／Ｏ要求を、セカンダリストレージシステムに送信する。
【００２１】
上述した実施形態１乃至５のうちの任意の二以上の実施形態を組み合わせることが可能である。上述した入出力制御部、リストア制御部及びコピー制御部のうちの少なくとも一つは、ハードウェア（例えば回路）、コンピュータプログラム又はそれらの組み合わせ（例えば一部をコンピュータプログラムにより実現し残りをハードウェアで実現すること）により構築することができる。コンピュータプログラムは、所定のプロセッサに読み込まれて実行される。また、コンピュータプログラムがプロセッサに読み込まれて行われる情報処理の際、適宜に、メモリ等のハードウェア資源上に存在する記憶域が使用されてもよい。また、コンピュータプログラムは、ＣＤ−ＲＯＭ等の記録媒体から計算機にインストールされてもよいし、通信ネットワークを介して計算機にダウンロードされてもよい。
【００２２】
以下、図面を参照して、本発明の幾つかの実施例を説明する。
【実施例１】
【００２３】
まず、第一の実施例の概要を説明する。
【００２４】
ホストとそれに接続されるストレージシステムから成る。ストレージシステムは、動的容量割り当て機能が実現する仮想ボリュームを保持しており、ホストは、その仮想ボリュームに対してＩ／Ｏ要求を発行する。また、仮想ボリュームの一部には、容量プールから取得した記憶領域が割り当てられており、割り当て済みの記憶領域には、ホストから書き込まれたデータが格納されている。一方、仮想ボリュームの記憶領域が割り当てられていない部分は、ホストから一度もデータが書き込まれていない。
【００２５】
ストレージシステムは、仮想ボリュームへの記憶領域の割り当て状況を管理するためのマッピングテーブルを有する。仮想ボリュームが、小領域に区切られているが、マッピングテーブルは、それぞれの小領域ごとに、容量プールから記憶領域が割り当てられているか否か、割り当てられている場合、容量プール内のどの記憶領域が割り当てられているかを示す。マッピングテーブルは、一つの仮想ボリュームごとに一つ存在する。
【００２６】
さらに、ストレージシステムは、容量プールを構成する論理ボリュームを管理するために、容量プール管理テーブルを、容量プールごとに保持する。
【００２７】
さらに、ストレージシステムは、容量プールに含まれる論理ボリュームの記憶領域のうち、すでに仮想ボリュームに割り当てられている小領域とそうでないものを管理するための記憶領域管理テーブルを、容量プールに含まれる論理ボリュームごとに保持する。
【００２８】
ここで、容量プールを構成する複数の論理ボリュームのうち、いくつかの論理ボリュームで、当該論理ボリュームを構成する物理デバイスが故障し、その後、故障した物理デバイスを交換したとする。ストレージシステムは、交換した物理デバイスが構成する論理ボリュームを、ＲＡＩＤ修復処理により、信頼性の高い状態に復帰させる。このとき、ストレージシステムは、自分が選んだ論理ボリュームに対応する記憶領域管理テーブルを参照し、論理ボリュームの記憶領域のうち、既に仮想ボリュームに割り当てられている記憶領域部分についてのみ、ＲＡＩＤ修復処理を実行する。
【００２９】
これにより、壊れた物理デバイスに対応する領域全体に対してＲＡＩＤ修復処理を実行する場合と比較して、必要なＲＡＩＤ修復処理を短時間で終えることができ、高速なＲＡＩＤ修復処理が提供できる。
【００３０】
図１は、本発明の第一実施例に係る計算機システムの構成例を示す。
【００３１】
１台以上のホスト計算機１００が、１台以上のストレージシステム２００に、ストレージネットワーク９００を経由して接続されている。ストレージネットワーク９００は、例えばＳＡＮ（Storage Area Network）であるが、それに限らず、他種のネットワークを採用することができる。
【００３２】
図２は、第一実施例におけるストレージシステム２００のハードウェア構成例を示す。
【００３３】
ストレージシステム２００は、コントローラ２１０と、メモリ２３０と、Ｉ／Ｏポート２０５と、複数の物理デバイス２４０とを備える。
【００３４】
ストレージシステム２００は、コントローラ２１０により制御される。コントローラ２１０は、例えば、マイクロプロセッサ又はそれを備えた回路基板である。
【００３５】
メモリ２３０は、コントローラ２１０で実行されるコンピュータプログラムや、それらコンピュータプログラムで使用されるデータを記憶する。また、メモリ２３０は、ホスト計算機１００の読み書きするデータを一時的に保管するキャッシュとして、一部の領域を使用することもできる。
【００３６】
Ｉ／Ｏポート２０５が、ストレージネットワーク９００と接続されることにより、ストレージネットワーク９００を介してのホスト計算機１００との間でのデータのやり取りを可能にする。Ｉ／Ｏポート２０５は、一又は複数個備えられる。
【００３７】
物理デバイス２４０は、ホスト計算機１００から送られてくるデータを記憶するための物理的なハードウェア（記憶デバイス）であり、典型的には、ハードディスクドライブなどの不揮発性の記憶デバイスが用いられる。本実施例では、複数の物理デバイス２４０を組み合わせてＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）構成とすることにより、ストレージシステムの信頼性を向上させる。また、そのようにＲＡＩＤ技術によって作られた、複数の物理デバイス２４０から成る信頼性の高い記憶領域を、ＲＡＩＤグループ２７０と呼ぶ。論理ボリューム２５０は、ＲＡＩＤグループ２７０の記憶領域の一部である。論理ボリューム２５０は、ホスト計算機１００がＩ／Ｏ要求を発行するときに指定する、Ｉ／Ｏ要求の発行先である。コントローラ２１０は、Ｉ／Ｏ要求をホスト計算機１００から受信すると、そのＩ／Ｏ要求で指定されている論理ボリューム２５０にアクセスする。論理ボリューム２５０がアクセスされるということは、その論理ボリューム２５０に対応する複数の物理デバイス２４０がアクセスされるということである。本実施例では、論理ボリューム２５０は、後述の「動的容量割り当て機能」の容量プールのメンバとして利用される。言い換えれば、ＲＡＩＤグループ２７０に属する論理ボリューム２５０としては、容量プールのメンバとして利用されホスト計算機１００に提供されない論理ボリュームもあれば、ホスト計算機１００に提供される一般的な論理ボリュームもある。なお、容量プールのメンバとしての論理ボリュームは、いわゆる外部接続機能での論理ボリューム（後述の容量拡張ボリュームとはタイプの異なる仮想ボリューム）であっても良い。その論理ボリュームは、例えば、仮想的なＲＡＩＤグループの記憶領域を基に形成された仮想的な論理ボリューム（又は、後述の外部ボリュームと１対１で対応付けられた論理ボリューム）である。仮想的なＲＡＩＤグループは、例えば、ストレージシステム２００に接続されている一又は複数の外部のストレージシステムが備える一又は複数の論理ボリューム（以下、外部ボリューム）で構成されたデバイスである。
【００３８】
ストレージシステム２００には、管理装置２６０が接続される。管理装置２６０は、ストレージシステム２００を保守及び管理するための装置である。また、管理装置２６０は、ストレージシステム２００に対して特別な指示を与える機能を有することもある。
【００３９】
図３は、本発明の第一実施例におけるストレージシステム２００が提供する動的容量割り当て機能の概念図である。
【００４０】
動的容量割り当て機能に従う仮想ボリュームは、いわゆるThin Provisoning技術に従う仮想ボリュームである。言い換えれば、動的に容量が拡張される容量拡張ボリュームえある。以下、詳述する。
【００４１】
ストレージシステム２００は、ホスト計算機１００に指定させるＩ／Ｏ要求の発行先として、論理ボリューム２５０の代わりに、仮想ボリューム２８０を提供する。ホスト計算機１００は、仮想ボリューム２８０を、論理ボリューム２５０と全く同じように認識し、仮想ボリューム２８０を指定して、Ｉ／Ｏ要求を発行する。
【００４２】
仮想ボリューム２８０は、ホスト計算機１００がＩ／Ｏ要求を発行するときに指定する、Ｉ／Ｏ要求の発行先である。ホスト計算機１００から見ると、仮想ボリューム２８０は、ホスト計算機１００から見ると、論理ボリューム２５０と全く同じように、データを格納する記憶領域をその容量分だけ保持しているように見える。しかし、実際には、データを格納する記憶領域は持たない。仮想ボリューム２８０は、複数の仮想的な記憶領域（以下、仮想領域）から構成される。コントローラ２１０は、或る仮想ボリューム２８０の或る仮想領域を指定した書込み要求をホスト計算機１００から受けた場合、容量プール２９０から必要な容量分の記憶領域（以下、実領域）を取得し、その実領域に、書込み対象のデータを書き込む。
【００４３】
以降、取得された実領域は、仮想ボリューム２８０の当該仮想領域（書込み要求で指定された仮想領域）に対応付けられる（マッピングと呼ぶ）。このように、仮想ボリューム２８０には、ホスト計算機１００がデータを書き込んだ仮想領域にのみ、容量プール２９０から取得された実領域がマッピングされる。
【００４４】
容量プール２９０は、仮想ボリューム２８０に書かれたデータを記憶するための記憶領域の集合である。本実施例では、容量プール２９０は、複数の論理ボリューム２５０を集めて構成される。容量プール２９０に属する論理ボリューム２５０も、ＲＡＩＤ技術により作られたＲＡＩＤグループ２７０の一部であるため、信頼性が高い。コントローラ２１０は、ホスト計算機１００からの書込み要求で指定されている仮想領域に実領域が未だ割り当てられていない場合は、容量プール２９０に含まれる論理ボリューム２５０の中から論理ボリューム２５０を選び、さらに、その論理ボリューム２５０が持つ実領域を選んで、その指定されている仮想領域にその実領域をマッピングする。
【００４５】
このような、仮想ボリューム２８０や容量プール２９０に含まれる論理ボリューム２５０の記憶領域の管理を簡素化するために、動的容量割り当て機能では、一般的に、一定の大きさを持つ記憶領域の管理単位が採用される。本実施例では、この記憶領域の管理単位を「チャンク」と呼ぶ。つまり、仮想ボリューム２８０も、容量プール２９０のメンバとしての論理ボリューム２５０も、複数のチャンクで構成される。以下、仮想ボリューム２８０を構成するチャンク（つまり仮想領域）を「仮想チャンク」と言い、論理ボリューム２５０を構成するチャンク（つまり実領域）を「実チャンク」と言う。チャンクのサイズは、例えば、１０ＭＢ（メガバイト）とするが、チャンクのサイズは、それに限らず任意のサイズとすることが可能である。全ての仮想ボリューム２８０は、仮想チャンクの集合として管理される。例えば、１００ＧＢの仮想ボリューム２８０は、１０２４０個の仮想チャンクから構成される。ただし、仮想ボリューム２８０には、物理的な記憶領域が割り当てられていないため、仮想ボリューム２８０を構成する各仮想チャンクにも、物理的な記憶領域は割り当てられていない。一方、容量プール２９０に含まれる各論理ボリューム２５０は、実チャンクの集合として管理される。仮想ボリューム２８０に容量プール２９０から記憶領域を割り当てる処理は、実際には、容量プール２９０に含まれる論理ボリューム２５０から、書込み要求で指定されている一又は複数の仮想チャンクに割り当てる一又は複数の実チャンクを適当に選び、その一又は複数の実チャンクを、上記指定されている一又は複数の仮想チャンクに対応付ける処理として実現される。こうすることで、仮想ボリューム２８０への容量プール２９０からの記憶領域のマッピングを、チャンクの割り当てとして実現できる。
【００４６】
なお、全ての仮想ボリューム２８０の記憶容量（仮想的な記憶容量）の合計は、容量プール２９０に含まれる全ての論理ボリューム２５０の記憶容量の合計より大きくてよい。また、仮想チャンクのサイズと実チャンクのサイズは、同じであっても異なっていても良い。例えば、仮想チャンクのサイズよりも実チャンクのサイズの方が小さくても良い。以下、説明を分かりやすくするため、仮想チャンクのサイズと実チャンクのサイズは同じであるとする。また、ホスト計算機１００からの仮想ボリューム２８０に対するライト要求の処理（例えば、仮想チャンクへの実チャンクの動的な割り当て）は、コントローラ２１０で実行されるＩ／Ｏプログラム２３７によって行われる。
【００４７】
図４は、第一実施例におけるストレージシステム２００が有するプログラムやデータを示す。
【００４８】
メモリ２３０には、前述したＩ／Ｏプログラム２３７の他に、ＲＡＩＤ修復プログラム２３２と、マッピングテーブル２３６と、容量プール管理テーブル２３８と、記憶領域管理テーブル２３９とが記憶される。
【００４９】
図５は、第一実施例におけるマッピングテーブル２３６の構成例を示す。
【００５０】
マッピングテーブル２３６は、仮想ボリューム２８０ごと用意されているテーブルである。そのため、以下、図５の説明において、図示のマッピングテーブル２３６に対応する仮想ボリューム２８０を、「当該仮想ボリューム２８０」と言う。図示のマッピングテーブル２３６を構成する複数のレコード（行）は、当該仮想ボリューム２８０を構成する複数の仮想チャンクにそれぞれ対応している。つまり、レコードと仮想チャンクとが１対１に対応している。
【００５１】
１レコードには、論理ボリュームＩＤとＬＢＡ（論理ブロックアドレス）が記録される。ＬＢＡは、実チャンクの位置を表す。すなわち、容量プール２９０における実チャンクは、容量プール２９０に含まれる論理ボリューム２５０の識別子（論理ボリュームＩＤ）と当該論理ボリューム２５０内の実チャンクの位置を示す論理ブロックアドレス（ＬＢＡ）で特定可能である。
【００５２】
なお、論理ボリュームＩＤが無効値（例えばＮＵＬＬ）のエントリがあれば、それがあるレコードに対応した仮想チャンクには、実チャンクがまだ割り当てられていないことを意味する。
【００５３】
例えば、図示したマッピングテーブル２３６は、４つの仮想チャンクから成る仮想ボリューム２８０を管理するマッピングテーブル２３６である。このテーブル２３６によれば、第１の仮想チャンクと第４の仮想チャンクには、実チャンクが割り当てられていないことがわかる。また、第２の仮想チャンクには、論理ボリュームＩＤ“＃０００１”で特定される論理ボリューム２５０における、ＬＢＡ“０ｘ１０００１０００”に対応した実チャンクが割り当てられていることがわかる。さらに、第３の仮想チャンクには、論理ボリュームＩＤ“＃ＦＦＢＡ”で特定される論理ボリューム２５０における、ＬＢＡ“０ｘ１２３４５６７８”に対応した実チャンクが割り当てられていることがわかる。なお、“０ｘ”は、１６進数をあらわす接頭辞である。
【００５４】
図６は、第一実施例における容量プール管理テーブル２３８の構成例を示す。
【００５５】
容量プール管理テーブル２３８は、容量プール２９０ごとに用意される。そのため、以下、図６の説明において、図示の容量プール管理テーブル２３８に対応する容量プール２９０を、「当該容量プール２９０」と言う。図示の容量プール管理テーブル２３８を構成する複数のレコード（行）は、当該容量プール２９０を構成する複数の論理ボリューム２５０にそれぞれ対応している。つまり、レコードと論理ボリューム２５０とが１対１に対応している。
【００５６】
１レコードには、論理ボリュームＩＤと、記憶領域管理テーブル２３９へのポインタとが記録される。例えば、図示した容量プール管理テーブル２３８によれば、当該容量プール２９０が、３個の論理ボリューム２５０で構成されていることがわかる。また、論理ボリュームＩＤ“＃０００１”で特定される論理ボリューム２５０のチャンクを管理する記憶領域管理テーブル２３９は、メモリ２３０のアドレス“０ｘＡＢ８ＦＦＦ００”に存在することがわかる。論理ボリュームＩＤ“＃ＦＦＢＡ”で特定される論理ボリューム２５０のチャンクを管理する記憶領域管理テーブル２３９が、メモリ２３０のアドレス“０ｘ００１１５８００”に存在することがわかる。論理ボリュームＩＤ“＃００２０”で特定される論理ボリューム２５０のチャンクを管理する記憶領域管理テーブル２３９は、メモリ２３０のアドレス“０ｘ８０８Ｆ２２４０”に存在することがわかる。
【００５７】
図７は、第一実施例における記憶領域管理テーブル２３９の構成例を示す。
【００５８】
記憶領域管理テーブル２３９は、容量プール２９０に含まれる論理ボリューム２５０ごとに用意される。そのため、以下、図７の説明において、図示の記憶領域管理テーブル２３９に対応する論理ボリューム２５０を、「当該論理ボリューム２５０」と言う。図示の記憶領域管理テーブル２３９を構成する複数のレコード（行）は、当該論理ボリューム２５０を構成する複数の実チャンクにそれぞれ対応している。つまり、レコードと実チャンクとが１対１に対応している。
【００５９】
１レコードには、仮想ボリューム２８０の識別子（仮想ボリュームＩＤ）と、仮想チャンクの位置を示すアドレス（ＬＢＡ）とが記録される。つまり、レコードに記録されている仮想ボリュームＩＤ及びＬＢＡから、そのレコードに対応した実チャンクが、どの仮想ボリューム２８０のどの仮想チャンクにマッピングされているかがわかる。なお、レコードに、仮想ボリュームＩＤが無効値（例えばＮＵＬＬ）のエントリがあれば、そのレコードに対応する実チャンクは、仮想ボリューム２８０にまだ割り当てられていないことを示す。
【００６０】
例えば、図示した記憶領域管理テーブル２３９は、４つの実チャンクから成る論理ボリューム２５０を管理する記憶領域管理テーブル２３９を例示している。このテーブル２３９によれば、第１、第２、第４の実チャンクは、まだ仮想ボリューム２８０に割り当てられていない。また、第３の実チャンクは、仮想ボリュームＩＤ“＃８００１”で特定される仮想ボリューム２８０の、ＬＢＡ“０ｘ００００１０００”から特定される仮想チャンクに割り当てられている。
【００６１】
Ｉ／Ｏプログラム２３７は、仮想チャンクに実チャンクを割り当てた場合、その仮想チャンクを有する仮想ボリューム２８０に対応するマッピングテーブル２３６において、その仮想チャンクに対応するレコードに、割り当てた実チャンクに対応する論理ボリュームＩＤ及びＬＢＡを記録する。また、Ｉ／Ｏプログラム２３７は、割り当てた実チャンクを有する論理ボリューム２５０に対応する記憶領域管理テーブル２３９において、その実チャンクに対応するレコードに、割り当て先の仮想チャンクに対応する仮想ボリュームＩＤ及びＬＢＡとを記録する。
【００６２】
図８は、第一実施例におけるＲＡＩＤ修復処理のフローチャートである。
【００６３】
ＲＡＩＤ修復プログラム２３２は、故障した物理デバイス２４０が交換されたとき、あるいは、物理デバイス２４０の故障を検出して予備の物理デバイス２４０をホットスワップにより使用開始するときに（例えば、予備の物理デバイス２４０が故障した物理デバイス２４０に代わってＲＡＩＤグループ２７０のメンバとされたときに）、コントローラ２１０により実行されるプログラムである。以下、コンピュータプログラムが主語になる処理は、実際には、そのコンピュータプログラムを実行するコントローラ（例えばプロセッサ）が主語である。
【００６４】
まず、ＲＡＩＤ修復プログラム２３２は、交換された物理デバイス２４０の属するＲＡＩＤグループ２７０を特定する（ステップ１１００）。特定されるＲＡＩＤグループ２７０は、例えば、例えば、故障した物理デバイス２４０が元々属していたＲＡＩＤグループ２７０である。
【００６５】
次に、ＲＡＩＤ修復プログラム２３２は、特定されたＲＡＩＤグループ２７０に属する論理ボリューム２５０の中から、ＲＡＩＤ修復処理が終わっていない論理ボリューム２５０を一つ選ぶ（ステップ１１１０）。
【００６６】
次に、ＲＡＩＤ修復プログラム２３２は、選んだ論理ボリューム２５０がいずれかの容量プール２９０に属しているか否かをチェックする（ステップ１１２０）。具体的には、例えば、ＲＡＩＤ修復プログラム２３２は、メモリ２３０に存在する全ての容量プール管理テーブル２３８のレコードを検索する。その結果、選んだ論理ボリューム２５０の論理ボリュームＩＤと等しい論理ボリュームＩＤが記録されているレコードを有した容量プール管理テーブル２３８が存在する場合は、ＲＡＩＤ修復プログラム２３２は、選んだ論理ボリューム２５０が容量プール２９０に属していると判定する。一方、選んだ論理ボリューム２５０の論理ボリュームＩＤと等しい論理ボリュームＩＤが記録されているレコードを有した容量プール管理テーブル２３８が存在しない場合は、ＲＡＩＤ修復プログラム２３２は、選んだ論理ボリューム２５０が容量プール２９０に属していないと判定する。
【００６７】
ステップ１１２０で属していないと判定された場合は、ステップ１１４０へ進む。すなわち、ＲＡＩＤ修復プログラム２３２は、選んだ論理ボリューム２５０に割り当てられた、ＲＡＩＤグループ２７０の記憶領域に対して、ＲＡＩＤ修復処理を行う。
【００６８】
ステップ１１４０で、選んだ論理ボリューム２５０に割り当てられた記憶領域全域に対してＲＡＩＤ修復処理を実行したら、ステップ１１６０にジャンプする。
【００６９】
一方、ステップ１１２０で属していると判定された場合は、ステップ１１３０へ進み、ＲＡＩＤ修復プログラム２３２は、選んだ論理ボリューム２５０に対応する記憶領域管理テーブル２３９を特定する。ステップ１１２０での検索により、選んだ論理ボリューム２５０の論理ボリュームＩＤと等しい論理ボリュームＩＤが記録されている、容量プール管理テーブル２３８のレコードが見付かっている。このため、選んだ論理ボリュームに対応する記憶領域管理テーブル２３９を、見付けたレコードが持つ記憶領域管理テーブル２３９へのポインタにより、容易に記憶領域管理テーブル２３９を特定することができる。
【００７０】
次に、ＲＡＩＤ修復プログラム２３２は、求めた記憶領域管理テーブル２３９のレコードを先頭から順番に走査し、仮想ボリュームＩＤに有効な値があるレコードに対応する各実チャンクに対して、ＲＡＩＤ修復処理を行う（ステップ１１５０）。すなわち、仮想ボリュームＩＤに有効な値があるレコードに対応する実チャンクは、すでに仮想ボリューム２８０に割り当てられているため、ホスト計算機１００が書き込んだデータを保持している。そのため、ＲＡＩＤ修復処理により、信頼性が低下している状態から信頼性の高い状態に戻す必要がある。一方、仮想ボリュームＩＤに有効な値がないレコードに対応する実チャンクは、まだ仮想ボリューム２８０に割り当てられておらず、ホスト計算機１００が書き込んだデータを保持していない。このため、ＲＡＩＤ修復処理を実行する必要がない。以上により、故障した物理デバイスに対応する論理的な記憶領域（例えば、一又は複数の論理ボリュームのそれぞれの一部又は全部）についてデータをリストアする必要は無い。真に必要な部分のみ（すなわち、仮想チャンクに割り当っている実チャンクに相当する記憶領域部分についてのみ）、ＲＡＩＤ修復処理を実行することができる。これにより、全体としてＲＡＩＤ修復処理を短時間で終えることができる。
【００７１】
ステップ１１５０で、特定された記憶領域管理テーブル２３９の全てのレコードを走査したら（言い換えれば、選んだ論理ボリューム２５０のすべての実チャンクを処理したら）、ステップ１１６０に進む。
【００７２】
ステップ１１６０で、ＲＡＩＤ修復プログラム２３２は、ＲＡＩＤグループ２７０に属する全ての論理ボリューム２５０を処理したか否かをチェックする。まだ処理していない論理ボリューム２５０があれば、ステップ１１１０に戻り、残りの論理ボリューム２５０について、同様の処理を行う。
【００７３】
以上の一連の処理を、全ての論理ボリューム２５０に対して処理するまで続け、全てを処理し終えたら、ＲＡＩＤ修復プログラム２３２の実行の終了となる。
【００７４】
以上のようにして、動的容量割り当て機能を有するストレージシステム２００において、仮想ボリューム２８０に割り当てられた実チャンクに対してのみＲＡＩＤ修復処理を行うことで、物理デバイス２４０が故障した場合に必要となるＲＡＩＤ修復処理を短時間で終えることができる。言い換えれば、物理デバイス２４０が故障したことで信頼性が低下した場合、信頼性が低下した状態から信頼性の高い状態に復帰することを短時間で行うことができる。
【００７５】
例えば、ＲＡＩＤ修復プログラム２３２は、選んだ論理ボリューム２５０が属するＲＡＩＤグループ２７０がＲＡＩＤ１により構成されている場合、まず、その論理ボリューム２５０における割り当て済み実チャンク（仮想領域に割り当てられている実チャンク）に対応する、故障した第一の物理デバイス２４０の第一の記憶領域を求められる。次に、交換した物理デバイス２４０に、残っている第二の物理デバイス２４０のデータ群のうち、求められた第一の記憶領域と同じ位置にある第二の記憶領域に記憶されているデータが、交換した物理デバイス２４０における、第一及び第二の記憶領域と同じ位置にある記憶領域に、コピーされる。これにより、二重化状態に復帰される。また、ここでコピーされるデータは、仮想チャンクに割り当てられていた実チャンクに対応する、物理デバイス２４０における記憶領域に記憶されているデータのみである。このため、短時間でＲＡＩＤ処理を行うことができる。
【００７６】
なお、上記第一の記憶領域と上記第二の記憶領域は、同一の実チャンクに対応する。このため、ＲＡＩＤ修復処理の後で、仮想チャンクに割り当てられている実チャンクを変更することが不要である。これは、ＲＡＩＤ１に限らず、他のＲＡＩＤレベルの場合についても同様である。
【実施例２】
【００７７】
以下、本発明の第二の実施例を説明する。その際、第一の実施例との相違点を主に説明し、第一の実施例との共通点については説明を省略或いは簡略する。
【００７８】
図９は、本発明の第二の実施例に係るリモートコピーシステムの構成例を示す。なお、図９（及び、後述の図１１と図１２）では、紙面の都合上、Ｉ／Ｏプログラム２３７の図示を省略している。
【００７９】
第一実施例で説明した機能を有するストレージシステム同士が、例えば、Ｉ／Ｏポートを介して接続されている。以下、一方のストレージシステム２００を、「プライマリストレージシステム２００Ｐ」と言い、他方のストレージシステム２００を、「セカンダリストレージシステム２００Ｓ」と言う。また、どちらのストレージシステムの構成要素であるかを分かり易くするため、以下の説明では、プライマリストレージシステム２００Ｐが有する要素については、親番号（例えば、２１０、２３０など）の次に「Ｐ」というアルファベットを付加する。一方、セカンダリストレージシステム２００Ｓが有する要素については、親番号（例えば、２１０、２３０など）の次に「Ｓ」というアルファベットを付加する。
【００８０】
プライマリストレージシステム２００Ｐ（及びセカンダリストレージシステム２００Ｓ）のメモリ２３０Ｐ（２３０Ｓ）は、更に、リモートコピーを実行するコピー制御プログラム２３３Ｐ（２３３Ｓ）を記憶する。
【００８１】
本実施例では、コピー制御プログラム２３３Ｐ及び２３３Ｓにより、同期型リモートコピーが行われる。同期型リモートコピーとは、コピーペアを構成する一方の論理ボリューム（プライマリボリューム）が更新されると、その更新と同期で、コピーペアを構成する他方の論理ボリューム（セカンダリボリューム）が更新され、故に、どの時点でも両者が同じ内容になるコピーである。これは、仮想ボリューム２８０Ｐ、２８０Ｓ同士でコピーペアが形成されている場合も同じである。プライマリストレージシステム２００Ｐがホスト計算機１００から書込み要求を受けた場合に、同期型リモートコピーが行われる。同期型リモートコピーでは、非同期型リモートコピーと違い、セカンダリボリュームにデータが書かれたことの通知をプライマリストレージシステム２００Ｐがセカンダリストレージシステム２００Ｓから受けた場合に、プライマリストレージシステム２００Ｐがホスト計算機１００に対して書込み完了（受信した書込み要求に従う書込みの終了）を通知する。
【００８２】
仮想ボリューム２８０Ｐ、２８０Ｓ間で同期型リモートコピーが行われる場合、仮想ボリューム２８０Ｐでのコピー元の記憶領域と、仮想ボリューム２８０Ｓでのコピー先の記憶領域は、それぞれの仮想ボリューム２８０Ｐ、２８０Ｓにおける同じ位置にある。具体的には、例えば、図９に示すように、仮想ボリューム２８０Ｐでのコピー元が、仮想ボリューム２８０Ｐでの先頭の仮想チャンク“１”であれば、仮想ボリューム２８０Ｓのコピー先は、仮想ボリューム２８０Ｓでの先頭の仮想チャンク“１”である。
【００８３】
このように、仮想ボリューム２８０Ｐ、２８０Ｓ間で同期型リモートコピーが行われる場合、コピー元とコピー先はそれぞれ同じ位置にある仮想チャンクとなるが、割り当てられる実チャンクは、同じ位置にある必要は無い。例えば、図９に示すように、コピー元の仮想チャンク“１”には、容量プール２９０Ｐの第一の論理ボリューム２５０Ｐの実チャンク“Ｓ”が割り当てられているが、コピー先の仮想チャンク“１”には、実チャンク“Ｓ”とは全く異なる位置にある実チャンク、例えば、容量プール２９０Ｐの第二の論理ボリューム２５０Ｓの実チャンク“Ｂ”が割り当てられている。
【００８４】
要するに、プライマリストレージシステム２００Ｐとセカンダリストレージシステム２００Ｓとにおいて、コピー元とコピー先の仮想チャンクは、コピー元の仮想ボリューム２８０Ｐとコピー先の仮想ボリューム２８０Ｓとにおいて同じ位置にあるが、仮想チャンクとそれに割り当てられる実チャンクとの関係までもが、同じになるとは限らない。
【００８５】
図１０は、マッピングテーブル２３６Ｐの構成例を示す。
【００８６】
マッピングテーブル２３６Ｐにおける各レコードに、更に、仮想チャンク種別が設定される。仮想チャンク種別は、そのレコードに対応する仮想チャンクが、後述する信頼性の低下した仮想チャンクであるか否かを表す。具体的には、仮想チャンク種別の値が“１”であれば、信頼性の高い仮想チャンクであることを表す。具体的には、例えば、物理デバイスの障害による信頼性の低下が発生していないか、或いは、信頼性が低下したものの後述の仮想チャンク修復処理の完了により信頼性の高い状態に戻ったことを表す。仮想チャンク種別の値が“０”であれば、信頼性の低下した仮想チャンクであることを表す。具体的には、例えば、仮想チャンク修復処理の最中であることを表す。
【００８７】
この仮想チャンク種別は、ＲＡＩＤ修復処理中にホスト計算機１００からＩ／Ｏ要求を受けた場合に、アクセス先をどこにするかの判断、具体的には、そのＩ／Ｏ要求から特定されるプライマリ仮想チャンクについて、プライマリストレージシステム２００Ｐ内の実チャンクにアクセスするのか、或いは、そのプライマリ仮想チャンクに対応するセカンダリの仮想チャンクに割り当てられている実チャンクにアクセスするのかの判断に使用される。
【００８８】
以下、第二の実施例で行われる処理の流れを説明する。
【００８９】
例えば、図９において、物理デバイスで障害が発生した場合、図１１に示す、ＲＡＩＤ修復処理が実行される。
【００９０】
具体的には、例えば、まず、ＲＡＩＤ修復プログラム２３２Ｐが、その障害が生じた物理デバイスが属するＲＡＩＤグループ２７０Ｐに属する論理ボリューム２５０Ｐに対応した記憶領域管理テーブル２３９を参照することにより、その論理ボリューム２５０Ｐを構成する複数の実チャンクのうちのどの実チャンクがどの仮想ボリューム２８０Ｐのどの仮想チャンクに割り当て済みであるかを特定する。特定された仮想チャンク、つまり信頼性の低下した仮想チャンク毎に、仮想チャンク修復処理が行われる。「信頼性の低下した仮想チャンク」とは、物理デバイスの障害により信頼性が低下した論理ボリューム２５０Ｐの実チャンク（信頼性の低下した実チャンク）が割り当てられている仮想チャンクである。図９及び図１１の例で言えば、プライマリの仮想チャンク“１”及び“４”が、信頼性の低下した実チャンク“Ｓ”及び“Ａ”がそれぞれ割り当てられた信頼性の低下した仮想チャンクであり、仮想チャンク“６”が、信頼性の低下していない論理ボリューム２５０における実チャンク“Ｋ”が割り当てられている信頼性の高い仮想チャンクである。「仮想チャンク修復処理」とは、セカンダリの仮想チャンクからプライマリの仮想チャンク（信頼性の低下した仮想チャンク）にデータを戻すことで、そのプライマリの仮想チャンクに割り当てられる実チャンクを、信頼性の低下している論理ボリューム２５０Ｐにある実チャンクから、信頼性の高い論理ボリューム２５０Ｐにある実チャンクに変更する処理である。
【００９１】
具体的には、例えば、プライマリストレージシステム２００Ｐにおいて、ＲＡＩＤ修復プログラム２３２Ｐが、特定された仮想チャンク（例えば仮想チャンク“１”）に対応する仮想チャンク種別（マッピングテーブル２３３Ｐにおける、その仮想チャンクに対応したレコード上の仮想チャンク種別）を、“０”（信頼性の低下した仮想チャンクではない）から、“１”（信頼性の低下した仮想チャンクである）に変更する。ＲＡＩＤ修復プログラム２３２Ｐは、特定されたプライマリの仮想ボリューム２８０Ｐの仮想ボリュームＩＤと、特定された仮想チャンクのＬＢＡとを、コピー制御プログラム２３３Ｐに通知する。コピー制御プログラム２３３Ｐが、通知されたプライマリの仮想ボリュームＩＤ及びＬＢＡを指定したコピーバック要求を、セカンダリストレージシステム２００Ｓのコピー制御プログラム２３３Ｓに送信する。
【００９２】
セカンダリストレージシステム２００Ｓにおいて、コピー制御プログラム２３３Ｓは、そのコピーバック要求を受信する。コピー制御プログラム２３３Ｓは、そのコピーバック要求で指定されているプライマリの仮想ボリュームＩＤに対応するセカンダリの仮想ボリュームＩＤを、例えば図示しないコピー管理テーブル（どのボリュームとどのボリュームでペアが構成されているか等を表すテーブル）を参照することにより、特定する。そして、コピー制御プログラム２３３Ｓは、特定されたセカンダリの仮想ボリュームＩＤと、コピーバック要求で指定されているＬＢＡとを、ＲＡＩＤ修復プログラム２３２Ｓに通知する。ＲＡＩＤ修復プログラム２３２Ｓは、通知されたセカンダリの仮想ボリュームＩＤに対応したマッピングテーブル２３６Ｓを参照することで、通知されたＬＢＡに対応する仮想チャンク（例えばセカンダリの仮想チャンク“１”）に割り当てられている実チャンク（例えば実チャンク“Ｂ”）の論理ボリュームＩＤ及びＬＢＡを特定し、特定された論理ボリュームＩＤ及びＬＢＡを、コピー制御プログラム２３３Ｓに通知する。コピー制御プログラム２３３Ｓは、通知された論理ボリュームＩＤ及びＬＢＡに対応する実チャンクからデータを読出し、そのデータと、セカンダリの仮想ボリュームＩＤ及びＬＢＡとを、プライマリストレージシステム２００Ｐのコピー制御プログラム２３３Ｐに送信する。
【００９３】
プライマリストレージシステム２００Ｐにおいて、コピー制御プログラム２３３Ｐは、データと、セカンダリの仮想ボリュームＩＤ及びＬＢＡとを受信する。コピー制御プログラム２３３Ｐは、そのセカンダリの仮想ボリュームＩＤに対応するプライマリの仮想ボリュームＩＤを、例えば図示しないコピー管理テーブル（どのボリュームとどのボリュームでペアが構成されているか等を表すテーブル）を参照することにより、特定する。コピー制御プログラム２３３Ｐは、特定されたプライマリの仮想ボリュームＩＤに対応したマッピングテーブル２３６Ｐを参照し、上記受信したＬＢＡに対応する仮想チャンク（例えばプライマリの仮想チャンク“１”）に割り当てられている実チャンクの論理ボリュームＩＤ及びＬＢＡを、どの仮想チャンクにも割り当てられていない別の論理ボリュームＩＤ及びＬＢＡに変更する。つまり、上記受信したＬＢＡに対応する仮想チャンク（例えばプライマリの仮想チャンク“１”）に対する実チャンク（例えば実チャンク“Ｓ”）の既存の割当てが解除され、その仮想チャンクには、その実チャンクを有する論理ボリューム２５０Ｐとは別の論理ボリューム２５０Ｐの実チャンク（例えば実チャンク“Ｍ”）が割り当てられる。その別の論理ボリューム２５０Ｐは、物理デバイスの障害が生じていない信頼性の高い状態が維持されているＲＡＩＤグループ２７０Ｐに属する論理ボリューム２５０Ｐである。言い換えれば、実チャンクの割り当てが解除された仮想ボリュームに割り当てられる実チャンクは、信頼性の低下している論理ボリューム２５０Ｐが属するＲＡＩＤグループ２７０Ｐとは別のＲＡＩＤグループ２７０Ｐに属している論理ボリューム２５０Ｐにある。
【００９４】
以上の仮想チャンク修復処理が、プライマリの仮想ボリューム２８０Ｐにおける、信頼性の低下した仮想チャンク毎に行われる。仮想チャンク修復処理が終了した仮想チャンクに対応する仮想チャンク種別（マッピングテーブル２３３Ｐにおける、その仮想チャンクに対応したレコード上の仮想チャンク種別）が、コピー制御プログラム２３３Ｐにより、“１”（信頼性の低下した仮想チャンクである）から、“０”（信頼性の低下した仮想チャンクではない）に更新される。
【００９５】
全ての、信頼性の低下した仮想チャンクについて、仮想チャンク修復処理が終了したならば、ＲＡＩＤ修復処理が終了したことになる。言い換えれば、ＲＡＩＤ修復処理は、仮想チャンク修復処理の集合である。
【００９６】
本実施例では、ＲＡＩＤ修復処理の最中であっても、プライマリストレージシステム２００Ｐは、ホスト計算機１００から、仮想チャンク修復処理の最中であるプライマリの仮想ボリュームを指定したリード要求を受け付ける。そのリード要求で指定されている仮想チャンクは、信頼性の低下した仮想チャンクであっても良い。
【００９７】
この場合、コントローラ２１０Ｐ（具体的には、例えば、ホストからのリード要求を処理するＩ／Ｏプログラム２３７）は、受信したリード要求で指定されている仮想チャンク（以下、指定プライマリ仮想チャンク）に対応する仮想チャンク種別を参照する。
【００９８】
参照した仮想チャンク種別が“０”であるなら、コントローラ２１０Ｐは、通常通り、指定プライマリ仮想チャンクに割り当てられている、プライマリストレージシステム２００Ｐ内の実チャンクからデータをリードしホスト計算機１００に送信する。なぜなら、指定プライマリ仮想チャンクは、信頼性の低下した仮想チャンクではないためである。
【００９９】
参照した仮想チャンク種別が“１”であるなら、コントローラ２１０Ｐは、指定プライマリ仮想チャンクに対応するセカンダリの仮想チャンクに割り当てられている、セカンダリストレージシステム２００Ｓにおける実チャンクからデータをリードする。なぜなら、指定プライマリ仮想チャンクは、信頼性の低下した仮想チャンクではある（仮想チャンク修復処理の最中である仮想チャンクである）ためである。
【０１００】
具体的には、コントローラ２１０Ｐは、指定プライマリ仮想チャンクを有するプライマリ仮想ボリューム２８０Ｐに対応したセカンダリ仮想ボリューム２８０Ｓの仮想ボリュームＩＤと、上記対応するセカンダリ仮想チャンクのＬＢＡとを指定したリード要求を、セカンダリストレージシステム２００Ｓに送信する。それにより、セカンダリストレージシステム２００Ｓにおいて、コントローラ２１０Ｓで実行されるＩ／Ｏプログラム２３７Ｓ（図示せず）が、そのリード要求を受信し、そのリード要求で指定されているセカンダリ仮想チャンクに対応する実領域からデータをリードし、プライマリストレージシステム２００Ｐに送信する。プライマリストレージシステム２００Ｐでは、コントローラ２１０Ｐ（図示しないＩ／Ｏプログラム２３７Ｐ）が、そのデータを、ホスト計算機１００に送信する。
【０１０１】
上述した第二の実施例によれば、ＲＡＩＤ修復処理は、信頼性の低下した仮想チャンクのみについて行われる。これにより、同期型リモートコピーにおいても、短時間で、信頼性の低下している状態から信頼性の高い状態に戻すことができる。
【０１０２】
以上、本発明の幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【図面の簡単な説明】
【０１０３】
【図１】本発明の第一実施例に係る計算機システムの構成例を示す。
【図２】第一実施例におけるストレージシステムのハードウェア構成例を示す。
【図３】第一実施例におけるストレージシステムが提供する動的容量割り当て機能の概念図。
【図４】第一実施例におけるストレージシステム２００が有するプログラムやデータを示す。
【図５】第一実施例におけるマッピングテーブルの構成例を示す。
【図６】第一実施例における容量プール管理テーブルの構成例を示す。
【図７】第一実施例における記憶領域管理テーブルの構成例を示す。
【図８】第一実施例におけるＲＡＩＤ修復処理のフローチャートである。
【図９】本発明の第二実施例に係るリモートコピーシステムの構成例を示す。
【図１０】第二実施例においてプライマリストレージシステムが有するマッピングテーブルの構成例を示す。
【図１１】第二実施例でのＲＡＩＤ修復処理の説明図である。
【図１２】第二実施例でのＲＡＩＤ修復処理の最中でのＩ／Ｏ制御の説明図である。
【符号の説明】
【０１０４】
１００：ホスト計算機
２００：ストレージシステム
【図１】
0004958739.tif 000002
【図２】
0004958739.tif 000003
【図３】
0004958739.tif 000004
【図４】
0004958739.tif 000005
【図５】
0004958739.tif 000006
【図６】
0004958739.tif 000007
【図７】
0004958739.tif 000008
【図８】
0004958739.tif 000009
【図９】
0004958739.tif 000010
【図１０】
0004958739.tif 000011
【図１１】
0004958739.tif 000012
【図１２】
0004958739.tif 000013