(57)【要約】  本発明の一実施形態に係るストレージシステムは、少なくとも第１ストレージ装置及び第２ストレージ装置から構成される。第１ストレージ装置の第１ボリュームと第２ストレージ装置の第２ボリュームには、ホスト計算機からのライトデータが二重書きされ、ホスト計算機は第１ボリュームと第２ボリュームの両方にアクセス可能に構成されている。またボリュームには、ライト順及び／またはライト可否に関する情報である属性情報が設定されており、ホスト計算機から当該ボリュームに対するアクセスコマンドを受信すると、ストレージ装置は、ボリュームに設定された属性に応じて、第１ボリューム及び／または第２ボリュームへのＩ／Ｏ要否を決定する。
2015198412.tif 000002
【特許請求の範囲】
【請求項１】
第１ストレージ装置と、前記第１ストレージ装置に接続された第２ストレージ装置とから構成されるストレージシステムであって、
前記第１ストレージ装置と前記第２ストレージ装置はそれぞれ、ボリュームと、１以上の記憶デバイスを有し、ホスト計算機からＳＣＳＩ規格に従ったＩ／Ｏコマンドを受け付け可能に構成されており、
前記第１ストレージ装置内の第１ボリュームと前記第２ストレージ装置内の第２ボリュームには、ライト順及び／またはライト可否を表す属性情報が設定されており、
前記第１ボリュームと前記第２ボリュームは、前記ホスト計算機からのライトデータが前記第１ボリュームと前記第２ボリュームの両方に書き込まれるペア関係にあるボリュームとして管理されており、
前記第１ストレージ装置は、前記ホスト計算機から前記第１ボリュームに対するＩ／Ｏコマンドを受信すると、前記属性情報に基づいて、前記第１ボリュームと前記第２ボリュームへのＩ／Ｏ要否を決定する、
ことを特徴とする、ストレージシステム。
【請求項２】
前記第１ボリュームと前記第２ボリュームには、Ｍｉｒｒｏｒ属性、Ｌｏｃａｌ属性、Ｒｅｍｏｔｅ属性のうちの１つが前記属性情報として設定されており、
前記第１ボリュームと前記第２ボリュームにはまた、最初に更新が行われるボリュームであることを示すＰ−ＶＯＬ属性、または２番目に更新が行われるボリュームであることを示すＳ−ＶＯＬ属性、のいずれかの第２属性情報が設定されており、
前記第１ボリュームに、前記属性情報としてＭｉｒｒｏｒ属性が設定されている時、前記前記第１ボリュームと前記第２ボリュームに対して、前記Ｉ／Ｏコマンドで指定された処理を実行し、
前記第１ボリュームに前記属性情報としてＬｏｃａｌ属性が設定されている時、前記前記第１ボリュームのみに対して、前記Ｉ／Ｏコマンドで指定された処理を実行し、
前記第１ボリュームに前記属性情報としてＲｅｍｏｔｅ属性が設定されている時、前記前記第２ボリュームのみに対して、前記Ｉ／Ｏコマンドで指定された処理を実行する、
ことを特徴とする、請求項１に記載のストレージシステム。
【請求項３】
前記第１ストレージ装置が前記Ｉ／Ｏコマンドとして、前記第１ボリュームに対するＷＲＩＴＥ  ＳＡＭＥコマンドと１ブロックのパターンデータを受信した時、前記第１ボリュームに前記属性情報としてＭｉｒｒｏｒ属性が設定されている場合、
前記第１ストレージ装置は、
前記第１ボリューム内の、前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に対して、前記受信したパターンデータを格納する処理と、
前記第２ストレージ装置に対して、前記第２ボリューム内の前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に対して、前記受信したパターンデータを書き込むよう指示する処理の、２つの処理を実行する、
ことを特徴とする請求項２に記載のストレージシステム。
【請求項４】
前記第１ストレージ装置が前記Ｉ／Ｏコマンドとして、前記第１ボリュームに対するＷＲＩＴＥ  ＳＡＭＥコマンドと１ブロックのパターンデータを受信すると、
前記第１ストレージ装置は、全領域に前記パターンデータが書き込まれている、所定サイズのライトデータを作成し、
前記第１ストレージ装置は前記第２ストレージ装置に対して、前記所定サイズのライトデータを前記第２ボリュームの所定位置に書き込むことを指示するＷＲＦＢＡコマンドと前記所定サイズのライトデータを１回以上送信することにより、前記第２ボリューム内の前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に、前記受信したパターンデータを書き込ませる、
ことを特徴とする、請求項３に記載のストレージシステム。
【請求項５】
前記第１ストレージ装置が前記Ｉ／Ｏコマンドとして、前記第１ボリュームに対するＷＲＩＴＥ  ＳＡＭＥコマンドと１ブロックのパターンデータを受信すると、
前記第１ストレージ装置は前記第２ストレージ装置に対して、前記第２ボリューム内の前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された領域を指定したＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドと、前記パターンデータを送信することにより、前記第２ボリューム内の前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に、前記受信したパターンデータを書き込ませる、
ことを特徴とする、請求項３に記載のストレージシステム。
【請求項６】
前記第１ストレージ装置が前記Ｉ／Ｏコマンドとして、前記第１ボリュームに対するＷＲＩＴＥ  ＳＡＭＥコマンドと１ブロックのパターンデータを受信した時、前記第１ボリュームに、Ｓ−ＶＯＬ属性が設定されている場合、
前記第１ストレージ装置は、前記第２ボリューム内の、前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に対して、前記受信したパターンデータが書き込まれた後に、
前記第１ボリューム内の、前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に対して、前記受信したパターンデータを格納する、
ことを特徴とする請求項３に記載のストレージシステム。
【請求項７】
前記第１ストレージ装置が前記Ｉ／Ｏコマンドとして、前記第１ボリュームに対するＷＲＩＴＥ  ＳＡＭＥコマンドと１ブロックのパターンデータを受信した時、前記第１ボリュームに、Ｐ−ＶＯＬ属性が設定されている場合、
前記第１ストレージ装置は、前記第１ボリューム内の、前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に対して、前記受信したパターンデータを格納した後に、
前記第２ストレージ装置に対して、前記第２ボリューム内の前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に対して、前記受信したパターンデータを書き込むよう指示する、
ことを特徴とする請求項３に記載のストレージシステム。
【請求項８】
前記第１ストレージ装置が前記Ｉ／Ｏコマンドとして、前記第１ボリュームに対するＵＮＭＡＰコマンドを受信した時、
前記第１ボリュームと前記第２ボリュームに設定されている前記属性情報に基づいて、前記第１ボリューム及び／または前記第２ボリュームの、前記ＵＮＭＡＰコマンドで指定された全ての領域に対して、０データを格納する、
ことを特徴とする請求項２に記載のストレージシステム。
【請求項９】
前記ストレージシステムは、ボリュームの記憶空間を、固定サイズの領域であるページ単位に管理しており、
前記第１ストレージ装置は、前記第１ボリュームのページに対してＩ／Ｏコマンドを受信した時点で、前記記憶デバイスの中から、前記ページのサイズに相当する記憶領域を割り当てるように構成されており、
前記第１ストレージ装置は、前記ページ内の全領域に０データが格納されている場合、前記ページを、前記記憶領域が割り当てられていない状態に変更する、
ことを特徴とする、
請求項８に記載のストレージシステム。
【請求項１０】
前記第１ボリュームに前記属性情報としてＭｉｒｒｏｒ属性が設定されている場合、
前記第１ストレージ装置が前記Ｉ／Ｏコマンドとして、前記第１ボリュームに対するＣＯＭＰＡＲＥ  ＡＮＤ  ＷＲＩＴＥコマンドとコンペアデータとライトデータとを受信した時、
前記ストレージシステムは、
前記第１ボリュームと前記第２ボリュームのうち、前記Ｐ−ＶＯＬ属性の設定されているボリュームから、前記ＣＯＭＰＡＲＥ  ＡＮＤ  ＷＲＩＴＥコマンドで指定されている領域のデータを読み出して、前記コンペアデータと比較し、
前記読み出されたデータと前記コンペアデータの内容が同一である場合、前記Ｐ−ＶＯＬ属性の設定されているボリュームに対して前記ライトデータを格納した後、前記Ｓ−ＶＯＬ属性の設定されているボリュームに対して前記ライトデータを格納する、
ことを特徴とする、請求項２に記載のストレージシステム。
【請求項１１】
前記ストレージシステムは、ボリュームの記憶空間を、固定サイズの領域であるページ単位に管理しており、
前記第１ストレージ装置は、前記第１ボリュームのページに対してＩ／Ｏコマンドを受信した時点で、前記第１ストレージ装置の記憶デバイスの中から、前記ページのサイズに相当する記憶領域を割り当てるように構成されており、
前記第２ストレージ装置は、前記第２ボリュームのページに対してＩ／Ｏコマンドを受信した時点で、前記第２ストレージ装置の記憶デバイスの中から、前記ページのサイズに相当する記憶領域を割り当てるように構成されており、
前記ストレージシステムは前記ホスト計算機から、前記属性情報としてＭｉｒｒｏｒ属性が設定されている前記第１ボリュームまたは前記第２ボリュームに対するＩ／Ｏコマンドを受信すると、
前記第１ストレージ装置で、前記第１ボリュームに割り当て可能な記憶領域が枯渇した場合には、前記第１ボリュームの前記属性情報として、前記Ｉ／Ｏコマンドの受け付けが不可能であることを示すＢｌｏｃｋ属性を設定し、前記第２ボリュームの前記属性情報としてＬｏｃａｌ属性を設定した後、前記ホスト計算機にエラーを返却し、
前記第２ストレージ装置で、前記第２ボリュームに割り当て可能な記憶領域が枯渇した場合には、前記第２ボリュームの前記属性情報として、前記Ｉ／Ｏコマンドの受け付けが不可能であることを示すＢｌｏｃｋ属性を設定し、前記第１ボリュームの前記属性情報としてＬｏｃａｌ属性を設定した後、前記ホスト計算機にエラーを返却することを特徴とする、
請求項２に記載のストレージシステム。
【請求項１２】
前記ホスト計算機にエラーを返却した後に、前記ホスト計算機から前記第１ボリュームに対するＩ／Ｏコマンドを受け付けた時、
前記第１ボリュームに前記属性情報としてＬｏｃａｌ属性が設定されている場合、前記第１ストレージ装置は、前記第１ボリュームに割り当て可能な記憶領域が枯渇したか否かの判定を行い、
前記第１ボリュームに割り当て可能な記憶領域が枯渇していない場合には、前記第１ストレージ装置は前記第１ボリュームに対してＩ／Ｏコマンドで指定された処理を行い、
前記第１ボリュームに割り当て可能な記憶領域が枯渇している場合には、前記第１ストレージ装置は、前記ホスト計算機に、前記記憶領域が枯渇した旨を示すエラー情報を返却することを特徴とする、
請求項１１に記載のストレージシステム。
【請求項１３】
第１ストレージ装置と、前記第１ストレージ装置に接続された第２ストレージ装置とから構成されるストレージシステムと、前記第１ストレージ装置及び前記第２ストレージ装置に接続されるホスト計算機とを有する計算機システムの制御方法であって、
前記第１ストレージ装置と前記第２ストレージ装置はそれぞれ、ボリュームと、１以上の記憶デバイスを有し、ホスト計算機からＳＣＳＩ規格に従ったＩ／Ｏコマンドを受け付け可能に構成されており、
前記第１ストレージ装置内の第１ボリュームと前記第２ストレージ装置内の第２ボリュームには、ライト順及び／またはライト可否を表す属性情報が設定されており、
前記第１ボリュームと前記第２ボリュームは、前記ホスト計算機からのライトデータが前記第１ボリュームと前記第２ボリュームの両方に書き込まれるペア関係にあるボリュームとして管理されており、
前記ホスト計算機は前記第１ボリュームと前記第２ボリュームのいずれにもアクセス可能に構成されており、
前記第１ストレージ装置が、前記ホスト計算機から前記第１ボリュームに対するＩ／Ｏコマンドを受信すると、前記属性情報に基づいて、前記第１ボリュームと前記第２ボリュームへのＩ／Ｏ要否を決定する、
ことを特徴とする、計算機システムの制御方法。
【請求項１４】
前記第１ボリュームと前記第２ボリュームには、Ｍｉｒｒｏｒ属性、Ｌｏｃａｌ属性、Ｒｅｍｏｔｅ属性、Ｂｌｏｃｋ属性のうちの１つが前記属性情報として設定されており、
前記第１ボリュームと前記第２ボリュームにはまた、最初に更新が行われるボリュームであることを示すＰ−ＶＯＬ属性、または２番目に更新が行われるボリュームであることを示すＳ−ＶＯＬ属性、のいずれかの第２属性情報が設定されており、
前記第１ボリュームに、前記属性情報としてＭｉｒｒｏｒ属性が設定されている時、前記前記第１ボリュームと前記第２ボリュームに対して、前記Ｉ／Ｏコマンドで指定された処理を実行し、
前記第１ボリュームに前記属性情報としてＬｏｃａｌ属性が設定されている時、前記前記第１ボリュームのみに対して、前記Ｉ／Ｏコマンドで指定された処理を実行し、
前記第１ボリュームに前記属性情報としてＲｅｍｏｔｅ属性が設定されている時、前記前記第２ボリュームのみに対して、前記Ｉ／Ｏコマンドで指定された処理を実行する、
ことを特徴とする、請求項１３に記載の計算機システムの制御方法。
【請求項１５】
前記ストレージシステムは、ボリュームの記憶空間を、固定サイズの領域であるページ単位に管理しており、
前記第１ストレージ装置は、前記第１ボリュームのページに対してＩ／Ｏコマンドを受信した時点で、前記第１ストレージ装置の記憶デバイスの中から、前記ページのサイズに相当する記憶領域を割り当てるように構成されており、
前記第２ストレージ装置は、前記第２ボリュームのページに対してＩ／Ｏコマンドを受信した時点で、前記第２ストレージ装置の記憶デバイスの中から、前記ページのサイズに相当する記憶領域を割り当てるように構成されており、
前記ホスト計算機は、前記第１ストレージ装置から受信した前記第１ボリュームの識別情報と前記第２ストレージ装置から受信した前記第２ボリュームの識別情報に基づいて、前記第１ボリュームと前記第２ボリュームが同一ボリュームであると認識している状態において、
前記ストレージシステムが前記ホスト計算機から、前記属性情報としてＭｉｒｒｏｒ属性が設定されている前記第１ボリュームに対するＩ／Ｏコマンドを受信すると、
前記第１ストレージ装置で、前記第１ボリュームに割り当て可能な記憶領域が枯渇した場合には、前記ストレージシステムは前記第１ボリュームの前記属性情報として、前記Ｉ／Ｏコマンドの受け付けが不可能であることを示すＢｌｏｃｋ属性を設定し、前記第２ボリュームの前記属性情報としてＬｏｃａｌ属性を設定した後、前記ホスト計算機にエラーを返却し、
前記ホスト計算機はエラーが返却されたことに応じて、前記第１ボリュームに代えて前記第２ボリュームへＩ／Ｏコマンドを発行し、
前記ホスト計算機から前記第２ボリュームに対するＩ／Ｏコマンドを受け付けた前記第２ストレージ装置は、前記第２ボリュームに割り当て可能な記憶領域が枯渇したか否かの判定を行い、
前記第２ボリュームに割り当て可能な記憶領域が枯渇していない場合、前記第２ストレージ装置は前記第２ボリュームに対してＩ／Ｏコマンドで指定された処理を行い、
前記第２ボリュームに割り当て可能な記憶領域が枯渇している場合、前記第２ストレージ装置は、前記ホスト計算機に、前記記憶領域が枯渇した旨を示すエラー情報を返却することを特徴とする、
請求項１４に記載の計算機システムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関する。
【背景技術】
【０００２】
企業等の組織で取り扱われる電子情報の急増に伴い、組織のＩＴシステムには多くのストレージ装置が導入され、運用されている。計算機システム内に多くのストレージ装置が導入される場合の問題点のひとつは、計算機システム管理者の管理コストが増加することである。複数のストレージ装置の管理を容易化するために、複数のストレージを仮想的に一つのストレージとしてアクセス可能にするストレージ仮想化の技術が広く用いられている。【０００３】
ストレージ仮想化の一形態として、複数の物理ストレージ装置を単一の仮想ストレージサブシステムとして、ストレージ装置を利用するホストコンピュータなどの上位システムに提供する構成も提案されている。たとえば特許文献１には、複数（たとえば２台）の物理ストレージ装置がネットワークを介して互いに接続された計算機システムにおいて、複数物理ストレージ装置の複数のボリュームを、単一の仮想ストレージサブシステム内のボリュームとして、ホストコンピュータに提供する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２０１３／０２３８８５２号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に開示されているような、複数（たとえば２台）の物理ストレージ装置を単一の仮想ストレージサブシステムとして上位システムに提供する構成を採用する目的の一つとして、耐障害性を高める、あるいは負荷分散を行うという目的があり得る。たとえば仮想ストレージサブシステムを構成する２台の物理ストレージ装置（以下、それぞれを「装置Ａ」、「装置Ｂ」と呼ぶ）の間でボリュームを二重化して、上位システムには二重化されたボリュームのそれぞれが、同一ボリュームであると認識させておく構成が考えられる。このようにすると、障害等の要因で装置Ａ内のボリュームにアクセスできなくなった場合に、上位システムにはもう１台の物理ストレージ装置である装置Ｂ内のボリュームにアクセスさせることで、業務継続が可能になり得る。また、装置Ａのボリュームへのアクセスパスが混雑している場合に装置Ｂのボリュームにアクセスすることで、アクセス性能の低下を抑止できる。【０００６】
この場合、システムの状態、あるいはボリュームの状態によって、ホストコンピュータなどの上位システムから受信したＩ／Ｏ要求の処理方法が異なってくる。たとえば上位システムとストレージ装置間のアクセスパスの障害により、これまで装置Ａで受信していたＩ／Ｏ要求を、装置Ｂで受信することもある。装置ＡでＩ／Ｏ要求を受信した場合と、装置ＢでＩ／Ｏ要求を受信した場合とでは、ストレージ装置で行うべき処理は異なってくる。ただしＩ／Ｏ要求をいずれの装置で受信した場合にも、Ｉ／Ｏ要求を受信した後の状態は同じである必要がある。その他、ボリュームが二重化できない状態など、様々な状態が存在し得るが、従来の技術ではこのような場合にどのような処理を行うべきか、考慮されてない。【０００７】
本発明の目的は、仮想ストレージサブシステムにおける二重化ボリュームの適切な制御方法を提供することにある。
【課題を解決するための手段】
【０００８】
本発明の一実施形態に係るストレージシステムは、少なくとも第１ストレージ装置及び第２ストレージ装置から構成される。第１ストレージ装置の第１ボリュームと第２ストレージ装置の第２ボリュームとは、ホスト計算機からのライトデータが二重書きされる、ボリュームペアとして管理され、ホスト計算機は第１ボリュームと第２ボリュームの両方にアクセス可能に構成されている。またボリュームには、ライト順及び／またはライト可否に関する情報である属性情報が設定されており、ホスト計算機から当該ボリュームに対するアクセスコマンドを受信すると、ストレージ装置は、ボリュームに設定された属性に応じて、第１ボリューム及び／または第２ボリュームへのＩ／Ｏ要否を決定する。
【発明の効果】
【０００９】
本発明によれば、システムの状態、あるいはボリュームの状態によらず、物理ストレージ装置間で二重化されたボリュームに対して適切な処理を行うことができる。
【図面の簡単な説明】
【００１０】
【図１】実施例に係るストレージシステムの構成図である。
【図２】仮想ストレージの概念の説明図である。
【図３】ボリューム管理テーブルの内容を示す。
【図４】ペア管理テーブルの内容を示す。
【図５】Ｉ／Ｏ処理の全体の流れを示す図である。
【図６】ＷＲＩＴＥ  ＳＡＭＥコマンドに係る処理のフローチャート（１）である。
【図７】ＷＲＩＴＥ  ＳＡＭＥコマンドに係る処理のフローチャート（２）である。
【図８】ＷＲＦＢＡコマンドに係る処理のフローチャートである。
【図９】ＷＲＩＴＥ  ＳＡＭＥコマンドに係る処理のフローチャート（３）である。
【図１０】ＷＲＩＴＥ  ＳＡＭＥコマンドに係る処理のフローチャート（４）である。
【図１１】ＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドに係る処理のフローチャートである。
【図１２】ＵＮＭＡＰコマンドに係る処理のフローチャート（１）である。
【図１３】ＵＮＭＡＰコマンドに係る処理のフローチャート（２）である。
【図１４】ＣＯＭＰＡＲＥ  ＡＮＤ  ＷＲＩＴＥ（ＡＴＳ）コマンドに係る処理のフローチャート（１）である。
【図１５】ＣＯＭＰＡＲＥ  ＡＮＤ  ＷＲＩＴＥ（ＡＴＳ）コマンドに係る処理のフローチャート（２）である。
【図１６】ＡＴＳ伝搬コマンドに係る処理のフローチャートである。
【図１７】ＷＲＩＴＥコマンドに係る処理の全体の流れを示すフローチャートである。
【図１８】ＷＲＩＴＥコマンドの処理中にエラーが発生した場合に行われる処理のフローチャート（１）である。
【図１９】ＷＲＩＴＥコマンドの処理中にエラーが発生した場合に行われる処理のフローチャート（２）である。
【図２０】ＷＲＩＴＥコマンドの処理中にエラーが発生した場合に行われる処理のフローチャート（３）である。
【図２１】ＷＲＩＴＥコマンドの処理中にエラーが発生した場合に行われる処理のフローチャート（４）である。
【図２２】ＷＲＩＴＥコマンドの処理中にエラーが発生した場合に行われる処理のフローチャート（５）である。
【図２３】ＷＲＦＢＡコマンドの処理中にエラーが発生した場合に行われる処理のフローチャート（１）である。
【図２４】ＷＲＦＢＡコマンドの処理中にエラーが発生した場合に行われる処理のフローチャート（２）である。
【図２５】ＷＲＦＢＡコマンドのフォーマットを説明する図である。
【図２６】ＷＲＦＢＡコマンドとＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドに係る処理の流れを説明する概念図である。
【図２７】物理記憶領域が枯渇した場合の計算機システムの状態の変化を説明する図である。
【図２８】物理記憶領域が枯渇した場合の計算機システムの状態の変化を説明する図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、本発明の一実施形態に係るストレージシステムを説明する。なお、本発明は、以下に説明する実施形態に限定されるものではない。
【実施例１】
【００１２】
（１）計算機システムの構成
図１は、本発明の実施例に係る計算機システムの構成図である。計算機システムは、ホスト計算機１００（以下、「ホスト１００」と略記）とストレージシステム３００とから構成される。ストレージシステム３００は、少なくとも２台のストレージ装置４００−１、４００−２から構成される。ホスト１００はＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）２１０を介してストレージ装置４００−１、４００−２の両方に接続されている。【００１３】
ストレージ装置４００−１、４００−２のハードウェア構成について説明する。なお、本発明の実施例に係るストレージシステム３００において、ストレージ装置４００−１、４００−２のハードウェア構成は同一とする。そのため以下では、ストレージ装置４００−１とストレージ装置４００−２を区別せずに呼ぶ場合には、「ストレージ装置４００」と呼ぶ。ただし、ストレージ装置４００−１、４００−２のハードウェア構成は、必ずしも同一である必要はない。【００１４】
ストレージ装置４００は、１以上のチャネルアダプタ（ＣＨＡ）５３０（５３０ａ及び５３０ｂ）、１以上のディスクアダプタ（ＤＫＡ）５４０、１以上のメモリパッケージ（メモリ）５１０、１以上のＭＰパッケージ（ＭＰＰＫ）５２０を有するストレージコントローラ５００と、１以上のドライブ９００から構成される。【００１５】
ＣＨＡ５３０は、ホスト１００あるいは他のストレージ装置４００と接続するためのインタフェース（Ｉ／Ｆ）５３１を１以上有し、ホスト１００や他のストレージ装置４００との間で送受信される制御情報やデータの中継を行うコンポーネントである。本実施例のストレージ装置４００では、ホスト１００との通信には、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）で定められている規格に従ったコマンド（以下、ＳＣＳＩコマンドと呼ぶ）を用いる。そのためＩ／Ｆ５３１は原則として、ホスト１００との間で、ＳＣＳＩコマンド及びその付随情報（ライトデータ、リードデータ、応答情報等）の送受信を行う機能を有する。【００１６】
ＣＨＡ５３０は、Ｉ／Ｆ５３１の他、バッファ５３２を有する。バッファ５３２は、ＣＨＡ５３０が中継する制御情報及びデータを一時的に記憶するための記憶領域であり、各種の揮発性メモリや不揮発性メモリを用いて構成される。また、図１では、１台のストレージ装置４００内に２つのＣＨＡ５３０（ＣＨＡ５３０ａ、ＣＨＡ５３０ｂ）だけが記載されているが、ＣＨＡ５３０の数はこれに限定されない。またＩ／Ｆ５３１の数も図で示された数に限定されるものではない。【００１７】
なお、図１では、ＣＨＡ５３０のうち、ホスト１００に接続されるものを、ＣＨＡ５３０ａと表記しており、また他のストレージ装置４００（たとえばストレージ装置４００−２）と接続されるものをＣＨＡ５３０ｂと表記している。ただしＣＨＡ５３０ａとＣＨＡ５３０ｂのハードウェア構成は同一である。また、図１では、ホスト１００とストレージ装置４００−１を接続する伝送線、あるいはホスト１００とストレージ装置４００−２を接続する伝送線は１本のみ記載されているが、耐障害性を高めるために、複数の伝送線でホスト１００とストレージ装置４００が接続されるようにしてもよい。またストレージ装置４００−１とストレージ装置４００−２を接続する伝送線も１本のみ記載されているが、複数の伝送線で接続されるようにしてもよい。【００１８】
ＤＫＡ５４０は、ドライブ９００と接続するためのインタフェース（非図示）を複数有し、ドライブ９００と、メモリ５１０またはＭＰＰＫ５２０との間で送受信される制御情報やデータの中継を行うコンポーネントである。【００１９】
ＭＰＰＫ５２０は、プロセッサ（ＭＰ）５２１、ローカルメモリ（ＬＭ）５２２、そして非図示の内部バス及び内部ポートとから構成される。ＭＰＰＫ５２０は、ストレージ装置４００内の各種データ処理を行うためのコンポーネントである。ＭＰ５２１がＬＭ５２２上のプログラムを実行することにより、以下で説明する、ホスト１００から受信する各種コマンドに応じた処理が実現される。【００２０】
また、図１ではＭＰ５２１は１つのみ記載されているが、複数のＭＰ５２１が搭載されていてよい。複数のＭＰ５２１が搭載されている場合、以下で説明する、ホスト１００から受信する各種コマンドに応じた処理は、任意のＭＰ５２１で実行されてもよい。ＬＭ５２２は、各種の揮発性メモリや不揮発性メモリを用いて構成することができる。【００２１】
メモリ５１０は、ホスト１００からのライトデータやドライブ９００からリードされたデータを一時的に格納するためのキャッシュと、各種制御情報を格納する共有メモリを備えたコンポーネントである。以下では、メモリ５１０上の、キャッシュとして用いられる領域は、キャッシュ領域と呼ばれる。また、制御情報を格納する共有メモリとして用いられる領域は、共有メモリ領域と呼ばれる。メモリ５１０は、停電等の障害が発生した場合のデータ消失を防ぐために、バッテリを備え、停電時にメモリ５１０上のデータを保持できるように構成されていてもよい。【００２２】
ドライブ９００は、ホスト１００からのライトデータが最終的に格納される記憶デバイスである。ドライブ９００の記憶メディアとしては、ＨＤＤで用いられるような磁気記憶媒体のほか、ＮＡＮＤフラッシュメモリ、ＭＲＡＭ、ＲｅＲＡＭ、及びＰＲＡＭのような不揮発性半導体記憶媒体を用いることができる。【００２３】
（２）ボリュームとキャッシュ
ホスト１００からのライトデータは、最終的にはドライブ９００に格納されるが、本発明の実施例に係るストレージ装置４００は、ホスト１００に対してドライブ９００の記憶空間を直接提供していない。代わりにストレージ装置４００は、周知のＴｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇ技術によって形成される、１以上のボリュームをホスト１００に提供する。以下ではこの、ホスト１００に提供されるボリュームのことを「論理ボリューム」と呼ぶ。ストレージ装置４００は論理ボリュームの記憶空間を、固定サイズの領域ごとに分割して管理している。この固定サイズの領域は「ページ」と呼ばれる。ページのサイズは、一例として４２ＭＢ等のサイズである。各ページには動的に、１以上のドライブ９００のいずれかの記憶領域が割り当てられる。以下では、ページに割り当てられる記憶領域のことを、「物理記憶領域」と呼ぶ。【００２４】
論理ボリュームは、ユーザがストレージ装置４００に接続された管理端末（非図示）あるいはホスト１００からストレージ装置４００に対して、論理ボリューム作成指示を出すことにより、自由に定義可能なボリュームである。ただし論理ボリュームが定義された時点では、論理ボリュームの各ページには全くドライブ９００の記憶領域が割り当てられていない。ホスト１００が論理ボリュームの記憶空間上のあるアドレスが指定されたライト要求（ライトコマンド）を論理ボリュームに対して発行すると、ストレージ装置４００は指定されたアドレスに対応するページに対し、ドライブ９００上の未使用の（まだどのページにも割り当てられていない）記憶領域を割り当てる。このように、ドライブ９００の記憶領域が動的に論理ボリューム（のページ）に割り当てられるため、少なくとも初期状態では、ストレージ装置４００に搭載されるドライブ９００の合計記憶容量（サイズ）は、各論理ボリュームの合計サイズ未満であってよい。そしてストレージ装置４００の運用開始後に、必要に応じてドライブ９００を追加していけば良いので、導入コストを低くできる。【００２５】
また、本発明の実施例に係るストレージ装置４００は、いわゆるライトバックキャッシュ方式を採用している。そのためホスト１００から論理ボリュームに対してＷＲＩＴＥコマンド等のデータ更新要求を受け付けると、キャッシュ領域にライトデータを格納するための部分領域を確保し、当該確保された部分領域にライトデータを格納した時点で、ホスト１００にライト処理が完了した旨を返信する。なお、この処理は、ディスクキャッシュを搭載したストレージ装置で通常行われている処理である。【００２６】
つまりライトデータがキャッシュ領域に格納され、ホスト１００にライト処理が完了した旨を返信された時点で、実質的に論理ボリュームに対してデータが格納された状態と等価な状態になる。そのため、以下の説明で、「論理ボリュームにデータを書き込む」と説明している箇所は、必ずしもドライブ９００にデータが書き込まれる事を意味するわけではない。キャッシュ領域にデータが格納されただけの状態でドライブ９００にはデータが未書き込みの状態であっても、「論理ボリュームにデータを書き込む」と表現する。逆に、「キャッシュ（後述するキャッシュスロットなど）にデータを書き込む」という処理は、実質的に論理ボリュームにデータを格納する処理を行っていると理解することもできる。【００２７】
キャッシュ領域に格納されたライトデータはその後、ホスト１００からのデータ更新要求とは非同期に（所定のタイミングで）、ドライブ９００に書き込まれる（デステージされる）。ただしデステージ処理自体は周知の処理であるため、本発明の実施例では説明を省略する。【００２８】
ここで、本発明の実施例に係るストレージ装置４００における、キャッシュ領域の使用方法について説明しておく。ホスト１００からのライトデータ等を一時的にキャッシュ領域に格納する際、ストレージ装置４００はキャッシュ領域上の未使用領域を、部分領域として確保し、当該確保された部分領域にライトデータを格納する。確保される部分領域の最小サイズは固定サイズで、一例として２５６ＫＢである。以下では、この最小サイズの部分領域のことを、「キャッシュスロット」または「スロット」と呼ぶ。【００２９】
続いて図２を用いて、本発明の実施例に係るストレージシステム３００とホスト１００との関係について説明する。先に述べたとおり、ストレージシステム３００は少なくとも２台のストレージ装置４００から構成され、各ストレージ装置４００では論理ボリュームを定義できる。【００３０】
本発明の実施例に係るストレージシステム３００では耐障害性を高めるため、原則としてホスト１００からアクセスされる論理ボリュームを、ストレージシステム３００内の２台のストレージ装置（ストレージ装置４００−１、ストレージ装置４００−２）の間で複製して運用する。図２の構成例の場合、ストレージ装置４００−１内の論理ボリューム９０−１に書き込まれたデータは、ストレージ装置４００−２の論理ボリューム９０−２にも書き込まれる（これを、「ミラーされる」と呼ぶ）。この複製処理はストレージ装置４００−１及び４００−２のＭＰ５２１によって実施される。【００３１】
以下、ストレージ装置４００−１及び４００−２のＭＰ５２１によって実施される、論理ボリュームの内容を複製する機能のことを、「ミラーリング機能」と呼ぶ。また詳細は後述するが、２つの論理ボリュームにデータがミラーされる場合、２つの論理ボリュームに対するデータの書き込み順は、論理ボリュームに設定された一種の属性情報によって決められている。最初にデータが書き込まれる論理ボリュームのことはプライマリボリューム（Ｐ−ＶＯＬと表記されることもある）と呼ばれ、２番目にデータが書き込まれる論理ボリュームのことはセカンダリボリューム（Ｓ−ＶＯＬと表記されることもある）と呼ばれる。【００３２】
図２は、論理ボリューム９０−１がＰ−ＶＯＬ、論理ボリューム９０−２がＳ−ＶＯＬであると定められている場合の例を表している。また論理ボリューム９０−１または論理ボリューム９０−２に対するデータの書き込み順を表す属性情報（Ｐ−ＶＯＬであるかＳ−ＶＯＬであるかを示す属性情報）は、後述するペア管理テーブルＴ４００に格納されている。ストレージ装置４００がホスト１００から、ある論理ボリュームの更新を指示するコマンドを受信した時、この属性情報に基づいて、当該論理ボリュームの書き込み順（当該論理ボリュームを最初に更新すべきか、２番目に更新すべきか）を特定することができる。【００３３】
ミラーリング機能により、Ｓ−ＶＯＬ（論理ボリューム９０−２）の内容が常にＰ−ＶＯＬ（論理ボリューム９０−１）の内容と同一になるように制御されるため、ホスト１００は、Ｐ−ＶＯＬ、Ｓ−ＶＯＬのいずれにアクセスしてもよい（同じデータにアクセスすることが可能である）。また、あるＰ−ＶＯＬの複製が格納されるＳ−ＶＯＬは、「Ｐ−ＶＯＬとペア関係にあるボリューム」あるいは「Ｐ−ＶＯＬのペアボリューム」と呼ばれる。逆に、あるＳ−ＶＯＬの複製元データが格納されている論理ボリュームであるＰ−ＶＯＬのことも、「Ｓ−ＶＯＬとペア関係にあるボリューム」、「Ｓ−ＶＯＬのペアボリューム」と呼ばれる。そしてＰ−ＶＯＬ及びＰ−ＶＯＬのペアボリュームであるＳ−ＶＯＬのセットのことは、「ペア」あるいは「ボリュームペア」と呼ばれる。【００３４】
ここで、ホスト１００がストレージ装置４００−１内のＰ−ＶＯＬに対して、ＷＲＩＴＥコマンドを発行した場合に、ストレージシステム３００で行われる処理の概要を説明する。ＷＲＩＴＥコマンド及びＷＲＩＴＥコマンドでライト対象となるデータ（これをライトデータと呼ぶ）をストレージ装置４００−１が受信すると、ストレージ装置４００−１はＰ−ＶＯＬにライトデータを格納し、その後ストレージ装置４００−２に対して、ペアボリュームであるＳ−ＶＯＬにライトデータを格納するコマンド（後述するＷＲＦＢＡコマンド）を発行する。ＷＲＦＢＡコマンド及びライトデータは、ストレージ装置４００−１のＩ／Ｆ（５３１ｂ）及びＳＡＮ２２０を経由してストレージ装置４００−２へと送信される。【００３５】
ＷＲＦＢＡコマンドを受信したストレージ装置４００−２は、Ｓ−ＶＯＬにライトデータを格納する。Ｓ−ＶＯＬへのライトデータの格納が完了した時点で、ストレージ装置４００−２はストレージ装置４００−１に対して、Ｓ−ＶＯＬへのライトデータの格納が完了した旨を通知する。ストレージ装置４００−１はこの通知を受信したことに応じて、ホスト１００にライト処理が完了したことを返答する。【００３６】
逆に、ホスト１００がストレージ装置４００−２内のＳ−ＶＯＬに対して、ＷＲＩＴＥコマンドを発行した場合に、ストレージシステム３００で行われる処理の概要を説明する。ＷＲＩＴＥコマンド及びライトデータをストレージ装置４００−２が受信すると、ストレージ装置４００−２はストレージ装置４００−１に対して、Ｐ−ＶＯＬにライトデータを格納するコマンド（ＷＲＦＢＡコマンド）を発行する。このコマンドを受信したストレージ装置４００−１は、Ｐ−ＶＯＬにライトデータを格納する。Ｐ−ＶＯＬへのライトデータの格納が完了した時点で、ストレージ装置４００−１はストレージ装置４００−２に対して、Ｐ−ＶＯＬへのライトデータの格納が完了した旨を通知する。ストレージ装置４００−２はこの通知を受信したことに応じて、Ｓ−ＶＯＬにライトデータを格納する。Ｓ−ＶＯＬへのライトデータの格納が完了した後、ストレージ装置４００−２はホスト１００にライト処理が完了したことを返答する。【００３７】
つまりＳ−ＶＯＬに対するＷＲＩＴＥコマンドを受信した場合も、Ｐ−ＶＯＬに対するＷＲＩＴＥコマンドを受信した場合と同様、ストレージシステム３００は最初にＰ−ＶＯＬにデータを格納し、その後Ｓ−ＶＯＬにデータを格納する。ストレージシステム３００は、ＷＲＩＴＥコマンドを受信した時、このような流れで処理を行うことにより、Ｐ−ＶＯＬとＳ−ＶＯＬの内容を同一に維持している。ただし、詳細は後述するが、Ｐ−ＶＯＬとＳ−ＶＯＬに設定された属性の状態によっては、内容を同一にする制御を行わないこともある。【００３８】
なお、上ではストレージ装置４００−１にＰ−ＶＯＬが、そしてストレージ装置４００−２にＳ−ＶＯＬが存在する場合について説明したが、ストレージ装置４００−２にＰ−ＶＯＬが、そしてストレージ装置４００−１にＳ−ＶＯＬが存在する構成でも良い。その場合にもホスト１００からのライトデータは、最初にＰ−ＶＯＬに格納され、その次にＳ−ＶＯＬに格納される。また、ストレージ装置４００（たとえばストレージ装置４００−１）内に論理ボリュームが複数存在する場合、全ての論理ボリュームがＰ−ＶＯＬでなければならない（あるいは全ての論理ボリュームがＳ−ＶＯＬでなければならない）という制約はなく、ストレージ装置４００内にＰ−ＶＯＬとＳ−ＶＯＬが混在していてもよい。【００３９】
また、ストレージ装置４００−１（または４００−２）内の全ての論理ボリュームが、ストレージ装置４００−２（または４００−１）内の論理ボリュームとペア関係にある必要はない（ペア関係にない論理ボリュームがストレージ装置４００内に存在していてもよい）。ただし本実施例では、ペア関係にあるボリュームに対するＩ／Ｏコマンドを受け付けた場合に、ストレージ装置４００が実施する処理について中心に説明する。【００４０】
上で述べたとおり、ホスト１００は、ペア関係にあるＰ−ＶＯＬ（論理ボリューム９０−１）とＳ−ＶＯＬ（論理ボリューム９０−２）のうち、いずれの論理ボリュームにアクセスしても同じデータにアクセスすることが可能である。ただしホスト１００は、論理ボリューム９０−１と論理ボリューム９０−２が、同一のデータが格納されているボリュームであるか否かを認識している必要はない。これは、本発明の実施例に係るストレージシステム３００がホスト１００に対して、ストレージ装置４００−１の論理ボリューム９０−１とストレージ装置４００−２の論理ボリューム９０−２とが、みかけ上同一ボリュームであるかのように認識させる機能を有していることによる。以下、この機能について説明する。【００４１】
ストレージ装置４００は、ストレージ装置４００等の物理的なストレージ装置とは異なる、１または複数の仮想的なストレージ装置（以下、これを仮想ストレージと呼ぶ）がＳＡＮ２１０上に存在するように見せかける機能を有する。この機能のことを、本発明の実施例では「仮想ストレージ機能」と呼ぶ。図２を用いて、ストレージ装置４００に仮想ストレージを定義した場合の例を説明する。【００４２】
仮想ストレージは、装置シリアル番号（Ｓｅｒ＃）を有する。以下、仮想ストレージの有する装置シリアル番号のことを、「仮想製番」と呼ぶ。また、ユーザの指示に応じて、仮想ストレージには、ストレージ装置４００の論理ボリュームを１以上所属させることができる。図２は、ストレージ装置４００−１のシリアル番号が６５０００、ストレージ装置４００−２のシリアル番号が６６０００、そして定義された仮想ストレージのシリアル番号が６３５００である構成例を示している。また図２において、ストレージ装置４００−１は論理ボリューム９０−１を有し、ストレージ装置４００−２は論理ボリューム９０−２を有している。【００４３】
ストレージ装置４００の有する論理ボリュームには、ストレージ装置４００内で一意な識別子（識別番号）が付されており、その番号のことを「ＬＤＥＶ＃」または「Ｒ−ＬＤＥＶ＃」と呼ぶ。図２の例では、論理ボリューム９０−１のＲ−ＬＤＥＶ＃が０ｘ２０００（「０ｘ２０００」とは、１６進数で「２０００」の意味である）、そして論理ボリューム９０−２のＲ−ＬＤＥＶ＃が０ｘ５０００である。【００４４】
ここで論理ボリューム９０−１と論理ボリューム９０−２を、ユーザからの指示によって仮想ストレージに所属させたとする。その場合論理ボリューム９０−１と論理ボリューム９０−２には、Ｒ−ＬＤＥＶ＃に加えて、仮想ストレージ内で一意な番号を付すことができる。本実施例では、この番号は「仮想ＬＤＥＶ＃」または「Ｖ−ＬＤＥＶ＃」と呼ばれる。この番号はまた、ユーザが任意に設定することができる番号である（ただし各論理ボリュームに付されるＶ−ＬＤＥＶ＃は、仮想ストレージ内で一意でなければならない）。図２の例では、仮想ストレージに所属させた論理ボリューム９０−１及び論理ボリューム９０−２のＶ−ＬＤＥＶ＃が、いずれも０ｘ１０００に設定されている。【００４５】
一方、図２の構成において、ホスト１００では交替パスソフト１１１１が稼働している。交替パスソフト１１１１は、ホスト１００から論理ボリュームへのアクセス経路（パスと呼ばれる）が複数存在する場合にそれを認識し、論理ボリュームにアクセスする際に、複数のパスのうち、使用するパスを選択する機能を持つ。パスの認識のために、交替パスソフト１１１１は、ホスト１００から認識できている論理ボリュームに対して、ＳＣＳＩ規格で規定されているＩＮＱＵＩＲＹコマンド等、ボリュームの識別情報を取得するコマンドを発行することによって、ボリュームの識別情報を取得する。【００４６】
ストレージ装置４００は、論理ボリュームに対するＩＮＱＵＩＲＹコマンドを受信した時、ボリュームの識別情報として、装置シリアル番号及びＲ−ＬＤＥＶ＃を返却するように構成されている。また、ＩＮＱＵＩＲＹコマンドによる問い合わせ対象の論理ボリュームが仮想ストレージに所属していた場合には、ボリュームの識別情報として、仮想ストレージの装置シリアル番号、およびＶ−ＬＤＥＶ＃を返却する機能を有する。図２の構成において、ストレージ装置４００−１が論理ボリューム９０−１に対するＩＮＱＵＩＲＹコマンドを受信すると、ストレージ装置は論理ボリューム９０−１の識別情報として、（装置シリアル番号＝６３５００、Ｖ−ＬＤＥＶ＃＝０ｘ１０００）を返却する。同様にストレージ装置４００−２が論理ボリューム９０−２に対するＩＮＱＵＩＲＹコマンドを受信すると、ストレージ装置は論理ボリューム９０−２の識別情報として、（装置シリアル番号＝６３５００、Ｖ−ＬＤＥＶ＃＝０ｘ１０００）を返却する。【００４７】
つまり論理ボリューム９０−１と論理ボリューム９０−２から、同一のボリューム識別情報が交替パスソフト１１１１に返却されるため、交替パスソフト１１１１は論理ボリューム９０−１と論理ボリューム９０−２が同一のボリュームと認識する。結果として、ホスト１００から論理ボリューム９０−１へのパス（図中の実線矢印。以下このパスを「パス１」と呼ぶ）の交替パスが、ホスト１００から論理ボリューム９０−２へのパス（図中の点線矢印。以下このパスを「パス２」と呼ぶ）であると判断する。そしてパス１が障害などの要因で遮断され、ホスト１００から論理ボリューム９０−１へのアクセスができなくなった場合などには、交替パスソフト１１１１がアプリケーションプログラム１１１２などから論理ボリューム９０−１へのアクセス要求を受け付けると、交替パスソフト１１１１はパス２を介してアクセス要求を発行する（つまり論理ボリューム９０−２にアクセス要求を発行する）。そして先に述べたとおり、交替パスソフト１１１１が論理ボリューム９０−２にアクセス要求を発行しても、論理ボリューム９０−２には論理ボリューム９０−１と同一データが格納されているため、問題なく動作する。【００４８】
仮想ストレージ機能とミラーリング機能の実現のために必要となる管理情報について、図３〜５を用いて説明していく。【００４９】
ホスト１００が、ＷＲＩＴＥコマンド等を発行することで論理ボリュームにアクセスする際、論理ボリュームを一意に特定する情報として、少なくともＬＵＮ（論理ユニット番号）とＩ／Ｆ５３１の識別子（ポートＩＤ）を指定する。そのため、本発明の実施例に係るストレージ装置４００は、ホスト１００からアクセスされる論理ボリュームに、ＬＵＮとポートＩＤとを付している。そしてストレージ装置４００は、論理ボリュームと、当該論理ボリュームに付されたＬＵＮ及びポートＩＤとの対応関係を、ボリューム管理テーブルＴ３００に格納して管理している。【００５０】
図３は、ボリューム管理テーブルＴ３００の例を示している。ボリューム管理テーブルＴ３００は、ストレージ装置４００のメモリ５１０内の共有メモリ領域に格納される。また図３において、上段のテーブルＴ３００−１と下段のテーブルＴ３００−２は、いずれもボリューム管理テーブルであり、テーブルＴ３００−１がストレージ装置４００−１で管理されるボリューム管理テーブルで、テーブルＴ３００−２がストレージ装置４００−２で管理されるボリューム管理テーブルである。【００５１】
いずれのテーブルも、以下で説明するＴ３０１〜Ｔ３０７の項目を有するテーブルであるので、以下ではテーブルＴ３００−１とテーブルＴ３００−２を区別せずに呼ぶ場合には「ボリューム管理テーブルＴ３００」と呼び、区別する必要がある場合には、テーブルＴ３００−１のことを「ボリューム管理テーブルＴ３００−１」と呼ぶ。また、テーブルＴ３００−１には、ストレージ装置４００−１内の論理ボリュームについての情報だけが格納され、テーブルＴ３００−２には、ストレージ装置４００−２内の論理ボリュームについての情報だけが格納される。【００５２】
ボリューム管理テーブルＴ３００の各項目について説明する。ボリューム管理テーブルＴ３００の各行は、１つの論理ボリュームについての情報を表している。ＬＤＥＶ（Ｔ３０３）は、論理ボリュームのＲ−ＬＤＥＶ＃が格納され、Ｒ−Ｓｅｒ＃（Ｔ３０４）には論理ボリュームの存在するストレージ装置のシリアル番号（Ｓｅｒ＃）が格納される（なお、以下では論理ボリュームの存在するストレージ装置のシリアル番号のことを、「論理ボリュームのシリアル番号」と呼ぶ）。【００５３】
そしてポートＩＤ（Ｔ３０１）とＬＵＮ（Ｔ３０２）が、論理ボリュームに付されているポートＩＤ及びＬＵＮを格納する欄である。また、論理ボリュームが仮想ストレージに所属している場合には、ＶＬＤＥＶ＃（Ｔ３０５）に論理ボリュームに設定された仮想ＬＤＥＶ＃が、そしてＶ−Ｓｅｒ＃（Ｔ３０６）には、当該論理ボリュームが所属する仮想ストレージの仮想製番が格納される（以下、表記が冗長になることを防ぐため、論理ボリュームが所属する仮想ストレージの仮想製番のことを、「論理ボリュームの仮想製番」と呼ぶ）。【００５４】
Ｉ／Ｏモード（Ｔ３０７）は、論理ボリュームのライト可否等の状態を表す、一種の属性情報であり、具体内容は後述する。【００５５】
図３の例において、ボリューム管理テーブルＴ３００−１の行（Ｒ３００−１）に格納されている論理ボリュームのＶ−ＬＤＥＶ＃は０ｘ１０００、そして仮想製番は６３５００である。またボリューム管理テーブルＴ３００−２の行（Ｒ３００−２）に格納されている論理ボリュームのＶ−ＬＤＥＶ＃も０ｘ１０００、そして仮想製番は６３５００である。【００５６】
そのため、ホスト１００がストレージ装置４００−１に対して、ボリューム管理テーブルＴ３００−１の行（Ｒ３００−１）に格納されている論理ボリュームについてＩＮＱＵＩＲＹコマンドを発行することで、論理ボリュームの情報を問い合わせてきた場合（この時、ホスト１００は、ポートＩＤ（３ｅ２４３１７４  ａａａａａａａａ）とＬＵＮ（０）を指定して、ＩＮＱＵＩＲＹコマンドを発行する）、ストレージ装置４００−１のＭＰ５２１はボリューム管理テーブルＴ３００−１を参照し、問い合わせ対象の論理ボリュームのＶＬＤＥＶ＃（Ｔ３０５）及びＶ−Ｓｅｒ＃（Ｔ３０６）の情報を返却する。ホスト１００がストレージ装置４００−２に対して、ボリューム管理テーブルＴ３００−２の行（Ｒ３００−２）に格納されている論理ボリュームについてＩＮＱＵＩＲＹコマンドを発行することで、論理ボリュームの情報を問い合わせてきた場合にも同様に、ストレージ装置４００−２のＭＰ５２１はボリューム管理テーブルＴ３００−２を参照して、問い合わせ対象の論理ボリュームのＶＬＤＥＶ＃（Ｔ３０５）及びＶ−Ｓｅｒ＃（Ｔ３０６）の情報を返却する。その結果、ホスト１００（の交替パスソフト１１１１）には２つの論理ボリュームが同一であると認識される。【００５７】
次に、ミラーリング機能の実行する際に管理されるテーブルである、ペア管理テーブルについて、図４を用いて説明する。ペア管理テーブルＴ４００は、ボリューム管理テーブルと同様、ストレージ装置４００の共有メモリ領域に格納される。またペア管理テーブルＴ４００は、ストレージ装置４００−１、ストレージ装置４００−２のいずれもが有しているテーブルである。以下ではボリューム管理テーブルＴ３００と同様、ストレージ装置４００−１とストレージ装置４００−２が有しているペア管理テーブルＴ４００を区別して呼ぶ場合には、それぞれを、ペア管理テーブルＴ４００−１、ペア管理テーブルＴ４００−２と表現する。逆に両者を区別せずに呼ぶ場合には、ペア管理テーブルＴ４００と表現する。【００５８】
ペア管理テーブルＴ４００は、ボリュームペアの情報を管理するためのテーブルで、各行が１つのボリュームペアについての情報を表している。各ボリュームペアにはペア番号という識別番号を付して管理されており、ペア番号（Ｔ４０１）にはそのペア番号が格納される。Ｐ−ＶＯＬ＃（Ｔ４０４）にはＰ−ＶＯＬである論理ボリュームのＲ−ＬＤＥＶ＃が格納される。ＰＤＫＣ＃（Ｔ４０３）には、Ｐ−ＶＯＬ＃（Ｔ４０４）で特定される論理ボリュームの装置シリアル番号が格納される。またＳ−ＶＯＬ（Ｔ４０５）には、Ｐ−ＶＯＬ＃（Ｔ４０４）で特定される論理ボリュームとペア関係にあるボリューム（Ｓ−ＶＯＬ）のＲ−ＬＤＥＶ＃が格納され、ＳＤＫＣ＃（Ｔ４０６）には、Ｓ−ＶＯＬ＃（Ｔ４０５）で特定される論理ボリュームの装置シリアル番号が格納される。【００５９】
ペアステータス（Ｔ４０２）には、ボリュームペアの状態についての情報が格納される。以下、ペアステータスについて説明する。上でボリュームペアに対してホスト１００からデータが書き込まれる際の処理について説明したが、上では、Ｐ−ＶＯＬに書き込まれたデータが常時Ｓ−ＶＯＬに複製される例を説明した。ただし実際には、ストレージ装置４００の状態、あるいはストレージ装置４００−１、４００−２間の伝送路であるＳＡＮ２２０の状態によっては、複製が実施できない状態等も発生する。ストレージ装置４００では、ボリュームペアの状態を管理しており、Ｐ−ＶＯＬまたはＳ−ＶＯＬへのデータアクセス（ライト等）を実施する際には、ボリュームペアの状態に応じた処理を行う。【００６０】
本発明の実施例では、Ｐ−ＶＯＬとＳ−ＶＯＬの内容が同一である状態のことを、「Ｐａｉｒ」状態と呼ぶ。あるボリュームペアの状態（ステータス）がＰａｉｒの時には、ペア管理テーブルＴ４００のペアステータス（Ｔ４０２）に「１」が格納される。そしてホスト１００からペアステータスがＰａｉｒの場合、当該ボリュームペアのＰ−ＶＯＬまたはＳ−ＶＯＬに対してデータ更新を指示するコマンド（ＷＲＩＴＥコマンド等）を受信すると、Ｐ−ＶＯＬとＳ−ＶＯＬの両方が更新される。たとえばＰ−ＶＯＬまたはＳ−ＶＯＬに対するＷＲＩＴＥコマンド及びライトデータを受信した場合、ライトデータはＰ−ＶＯＬとＳ−ＶＯＬの両方に書き込まれる（二重書きされる）。【００６１】
一方、ボリュームペアを構成するＰ−ＶＯＬとＳ−ＶＯＬにデータが二重書きされない状態にすることもできる。その時のボリュームペアのペアステータスは、「Ｓｕｓｐｅｎｄ」状態と呼ばれる。ペアステータスがＳｕｓｐｅｎｄの時には、ペア管理テーブルＴ４００のペアステータス（Ｔ４０２）に「０」が格納される。ペアステータスがＳｕｓｐｅｎｄの場合、当該ボリュームペアのＰ−ＶＯＬまたはＳ−ＶＯＬに対してデータ更新を指示するコマンド（ＷＲＩＴＥコマンド等）を受信すると、Ｐ−ＶＯＬまたはＳ−ＶＯＬのいずれか一方のみが更新される。【００６２】
なお、ペアステータスがＳｕｓｐｅｎｄ状態にされる場合の例として、Ｐ−ＶＯＬまたはＳ−ＶＯＬに障害が発生して、Ｐ−ＶＯＬまたはＳ−ＶＯＬへのデータアクセス（リード、ライトなど）ができなくなった場合などがあげられる。この場合、ストレージ装置４００が自律的にペアステータスを「Ｐａｉｒ」から「Ｓｕｓｐｅｎｄ」へと遷移させる。ただしストレージ装置４００のユーザが、ホスト４００または管理端末からストレージ装置４００にペアステータスを変更させる（ＰａｉｒからＳｕｓｐｅｎｄに変更させる等）指示を発行したことに応じて、ペアステータスが変更されることもある。【００６３】
修復フラグ（Ｔ４０７）には、論理ボリュームへのデータ書き込み中に障害が発生したために、Ｐ−ＶＯＬとＳ−ＶＯＬの内容が一部不一致になった場合に「１」が格納される。またその時、Ｐ−ＶＯＬとＳ−ＶＯＬの内容が不一致になっている領域の情報（たとえば論理ブロックアドレス（ＬＢＡ））が、位置（Ｔ４０８）に格納される。具体的な用いられ方は後述する。【００６４】
続いてボリューム管理テーブルＴ３００で管理されているＩ／Ｏモード（Ｔ３０７）について説明する。先に述べたとおり、Ｉ／Ｏモードは、論理ボリュームのライト可否等の状態を表す、一種の属性情報であり、ストレージ装置４００は、ホスト１００からＰ−ＶＯＬまたはＳ−ＶＯＬに対してＷＲＩＴＥコマンド等のデータ更新要求を受け付けた場合、ペアステータスに加えて、Ｉ／Ｏモードも考慮して処理を行う。【００６５】
Ｉ／Ｏモードに設定される属性には少なくとも、「Ｍｉｒｒｏｒ」、「Ｌｏｃａｌ」、「Ｒｅｍｏｔｅ」、「Ｂｌｏｃｋ」の４種類がある。ある論理ボリュームのＩ／Ｏモードが「Ｍｉｒｒｏｒ」属性の場合、当該論理ボリュームについてのＩ／Ｏモード（Ｔ３０７）の欄に、「０００１」（２進数表記）が格納される。また、ある論理ボリュームのＩ／Ｏモードが「Ｍｉｒｒｏｒ」、「Ｌｏｃａｌ」、「Ｒｅｍｏｔｅ」、「Ｂｌｏｃｋ」の場合にはそれずれ、当該論理ボリュームについてのＩ／Ｏモード（Ｔ３０７）の欄に、「００１０」「０１００」「１０００」が格納される。なお、１つの論理ボリュームに設定されるＩ／Ｏモードは、「Ｍｉｒｒｏｒ」、「Ｌｏｃａｌ」、「Ｒｅｍｏｔｅ」、「Ｂｌｏｃｋ」のいずれか１つに限られる（たとえばＬｏｃａｌとＢｌｏｃｋという２つのＩ／Ｏモードが設定されることはない）。【００６６】
ある論理ボリュームのＩ／Ｏモードが「Ｍｉｒｒｏｒ」の場合、当該論理ボリュームはペアボリュームとの間でデータを複製できる状態にあることを意味する。ある論理ボリュームのＩ／Ｏモードが「Ｍｉｒｒｏｒ」の場合には、当該論理ボリュームとそのペアボリュームから構成されるボリュームペアのペアステータスは「Ｐａｉｒ」に設定されている。【００６７】
ある論理ボリュームのＩ／Ｏモードが「Ｌｏｃａｌ」の場合、当該論理ボリュームに対するデータ更新要求（ＷＲＩＴＥコマンド等）を受け付けると、当該論理ボリュームのみが更新される。当該論理ボリュームのペアボリュームに対するデータ更新は行われない。【００６８】
またある論理ボリュームのＩ／Ｏモードが「Ｒｅｍｏｔｅ」の場合、当該論理ボリュームに対するデータ更新要求を受け付けても、当該論理ボリュームの更新は行われない。代わりに、当該論理ボリュームのペアボリュームに対してデータ更新が行われる。【００６９】
論理ボリュームのＩ／Ｏモードが「Ｂｌｏｃｋ」の場合、当該論理ボリュームに対するデータ更新要求を受け付けても、当該論理ボリュームの更新は行われず、データ更新要求を発行してきた機器（ホスト１００等）に対してエラーを返却する。【００７０】
Ｉ／Ｏモードもペアステータスと同様、ストレージ装置４００等の状態に応じて、ストレージ装置４００が自律的に変化させることもあるが、ストレージ装置４００のユーザが、ホスト４００または管理端末から指示を発行することで、Ｉ／Ｏモードを変更させることもできる。【００７１】
本実施例では、ストレージ装置４００が、ボリューム管理テーブルＴ３００とペア管理テーブルＴ４００というテーブルに管理情報を格納している例を説明しているが、管理情報はテーブルというデータ構造で管理されなければならないわけではない。管理情報はテーブル以外のデータ構造を用いて管理されてもよい。【００７２】
また、ペア管理テーブルＴ４００で管理されている情報の一部が、ボリューム管理テーブルＴ３００で管理されるようにしてもよい。たとえば、ペア管理テーブルＴ４００には、ある論理ボリュームがＰ−ＶＯＬかＳ−ＶＯＬかを識別するための情報（Ｐ−ＶＯＬ＃（Ｔ４０４）、Ｓ−ＶＯＬ（Ｔ４０６）等）が格納されている。しかし、ある論理ボリュームがＰ−ＶＯＬかＳ−ＶＯＬかを識別するための情報は、論理ボリュームに設定されている属性情報の一種ともいえる。そのためボリューム管理テーブルＴ３００のＩ／Ｏモード（Ｔ３０７）に、論理ボリュームがＰ−ＶＯＬかＳ−ＶＯＬかを表す情報が格納されるようにしてもよい。【００７３】
以下、ボリューム管理テーブルＴ３００のＩ／Ｏモード（Ｔ３０７）に格納されている情報と、論理ボリュームがＰ−ＶＯＬかＳ−ＶＯＬかを識別するための情報（Ｐ−ＶＯＬ＃（Ｔ４０４）、Ｓ−ＶＯＬ（Ｔ４０６）等）のことを総称して、「ボリューム属性情報」と呼ぶ。【００７４】
なお、ストレージ装置４００のＭＰ５２１は、ホスト１００からある論理ボリュームに対するアクセスコマンド（ＷＲＩＴＥコマンド等）を受信すると、自装置の共有メモリ領域に格納されているボリューム管理テーブルＴ３００とペア管理テーブルＴ４００を参照することによって、アクセス対象論理ボリュームのボリューム属性情報、そしてアクセス対象論理ボリュームの属性（Ｐ−ＶＯＬであるかＳ−ＶＯＬであるか）を特定する。そしてＭＰ５２１は、特定されたボリュームの属性に応じた処理を行う。その際に参照されるボリューム管理テーブルＴ３００とペア管理テーブルＴ４００は、自装置のテーブルであり、他装置のテーブルを参照することは行わない（つまりストレージ装置４００−１のＭＰ５２１は、ストレージ装置４００−１内で管理されているボリューム管理テーブルＴ３００とペア管理テーブルＴ４００を参照することで動作し、ストレージ装置４００−２内のテーブルを参照することは行わない）。ただし、ストレージ装置４００−１とストレージ装置４００−２のそれぞれで管理されているボリューム管理テーブルＴ３００とペア管理テーブルＴ４００に格納されている内容が、不整合状態にならないように管理されている。たとえばペア管理テーブルＴ４００−１で、ある論理ボリュームがＰ−ＶＯＬとして管理されている場合、ペア管理テーブルＴ４００−２でも同様に、当該論理ボリュームはＰ−ＶＯＬとして管理されている。【００７５】
（３）コマンド処理の流れ
続いて、ホスト１００からコマンドを受信した時に、ストレージ装置４００で行われる処理の流れについて説明していく。なお、本発明の実施例では、ホスト１００から以下のコマンドを受信した時について、ストレージ装置４００で行われる処理の流れを説明していく。
（ａ）  ＧＥＴ  ＬＢＡ  ＳＴＡＴＵＳ
（ｂ）  ＬＯＧ  ＳＥＮＳＥ
（ｃ）  ＷＲＩＴＥ  ＳＡＭＥ
（ｄ）  ＵＮＭＡＰ
（ｅ）  ＣＯＭＰＡＲＥ  ＡＮＤ  ＷＲＩＴＥ
（ｆ）  ＷＲＩＴＥ【００７６】
上の（ａ）〜（ｆ）のコマンドは、いずれもＳＣＳＩで規格化されているコマンドであるため、以下では本発明の実施例に関係のある点を中心に説明し、詳細な仕様の説明は省略する。（ａ）、（ｂ）のコマンドは、本明細書では情報採取系コマンドと呼ばれることもある。情報採取系コマンドは、ホスト１００が論理ボリュームの状態などを取得したい場合に用いられる。（ａ）のコマンドは、ホスト１００が、指定されたＬＢＡの状態の問い合わせを行うためのコマンドで、具体的には指定されたＬＢＡに物理記憶領域が割り当てられているか等の問い合わせを行うためのコマンドである。（ｂ）のコマンドは、ホスト１００が、指定された論理ボリュームの状態、たとえば容量の問い合わせを行う時に用いられる。【００７７】
（ｃ）〜（ｆ）のコマンドは、ホスト１００が論理ボリュームに対するＩ／Ｏ、とくに更新に関する処理を行うために用いられるコマンドであるため、本明細書では「Ｉ／Ｏ系コマンド」あるいは「更新系コマンド」と呼ぶ。（ｃ）のＷＲＩＴＥ  ＳＡＭＥコマンドは、ホスト１００が、論理ボリュームの所定の領域（１ブロック以上）の全てに対して、同一データを書き込む際に用いられる。コマンドのパラメータとして、論理ボリューム上の領域を特定する情報（具体的には論理ボリュームを特定する情報であるＬＵＮ、及び当該ＬＵＮで特定された論理ボリューム上の領域を特定する情報である、ＬＢＡ及びデータ長）が指定され、さらにライトデータとして、１ブロックのデータが指定される（以下、この指定される１ブロックのデータのことを「パターンデータ」と呼ぶ）。このコマンドを受信したストレージ装置４００は、指定されたパターンデータを、指定された領域全てに書き込む。たとえばパターンデータとして、ａｌｌ  ｚｅｒｏデータ（１ブロック内の全ビットが０のデータ）が指定された時、ストレージ装置４００は指定された領域全てに０を書き込む。【００７８】
（ｄ）のＵＮＭＡＰコマンドは、ホスト１００が、論理ボリュームの所定の領域のアンマップ（後述）を行いたいときに用いられる。【００７９】
アンマップについて説明する。ユーザ（またはホスト１００）によって論理ボリュームに書き込まれたデータは、ある程度の期間が経過するとユーザ（またはホスト１００）にとって不要になることがある。ここで論理ボリューム上のあるページ（ページＡと呼ぶことにする）のデータが全て不要になった場合を想定する。その場合、ページＡに割り当てられていた物理記憶領域を、ページＡに割り当てられていない状態にし、当該物理記憶領域を他のページに割り当てるようにしたほうが、物理記憶領域を有効に活用できる。【００８０】
本発明の実施例に係るストレージ装置４００では、物理記憶領域が割り当てられているページを、物理記憶領域が割り当てられていない状態にする機能を有する。本発明の実施例では、この機能のことをアンマップ機能と呼ぶ。また、ページが、物理記憶領域が割り当てられていない状態にあることを、「アンマップ状態」と呼ぶ。さらに、ページをアンマップ状態にするオペレーションのことを、「アンマップ」または「ページ割り当て解除」と呼ぶ。【００８１】
ストレージ装置４００は、ホスト１００からＵＮＭＡＰコマンドを受信したことに応じて、アンマップを実施する。ＵＮＭＡＰコマンドを発行するユーザ（またはホスト１００）は、アンマップしたい領域（ＬＵＮ、ＬＢＡ及びデータ長で特定される領域）の情報を１または複数、ＵＮＭＡＰコマンドのパラメータに指定することができる。【００８２】
ただしＵＮＭＡＰコマンドで指定可能な領域の最小単位は、１ブロック（ホスト１００がストレージ装置４００のボリュームのデータのリードまたはライトを実施する際の、最小アクセス単位であり、サイズは一例として５１２バイトである）である。一方本発明の実施例に係るストレージシステム３００では、論理ボリュームのページのサイズはたとえば４２ＭＢ等の、１ブロックよりも大きいサイズである。そのため、ホスト１００から発行される１回のＵＮＭＡＰコマンドでは、ページ全体のＵＮＭＡＰが行われない場合がある。【００８３】
そこで本発明の実施例に係るストレージ装置４００では、ＵＮＭＡＰコマンドを受信すると、ＵＮＭＡＰコマンドのパラメータで指定される領域全てに対して「０」を書き込む。またストレージ装置４００は、ページ内の領域（正確には、「ページに割り当てられた物理記憶領域」だが、記載が冗長になることを避けるために「ページ内の領域」と表記する）のうち、「０」が格納されている領域を認識する機能（または各ページについて、ページ内の全領域に０が格納されている状態か否かを判定する機能）を備えている。そしてＵＮＭＡＰコマンドを１回以上受信して、ＵＮＭＡＰコマンドで指定された領域に「０」を書き込む処理を行った結果、あるページの全領域に「０」が格納された状態になったことが認識された時点で、ストレージ装置４００はそのページについて、ページ割り当て解除を行う。【００８４】
（ｅ）のＣＯＭＰＡＲＥ  ＡＮＤ  ＷＲＩＴＥコマンドは、ＡＴＳ（Ａｔｏｍｉｃ  Ｔｅｓｔ  ａｎｄ  Ｓｅｔ）コマンドとも呼ばれることがある。コマンドのパラメータとして、論理ボリューム上の領域を特定する情報（ＬＵＮ、ＬＢＡ及びデータ長）が指定される。またコマンドとともにホスト１００からストレージ装置４００に送信されるデータとして、コンペアデータとライトデータという２種類のデータがある。ＣＯＭＰＡＲＥ  ＡＮＤ  ＷＲＩＴＥコマンドを受信したストレージ装置４００は、パラメータで指定された論理ボリューム上領域のデータを、送信されてきたコンペアデータと比較する。そして比較の結果、論理ボリューム上の領域のデータの内容がコンペアデータと同一であった場合にはライトデータを書き込むが、そうでない場合にはライト処理を行わない。また、データの比較処理を開始してからライトデータの書き込みが完了するまでは、パラメータで指定された領域がロックされる。つまり他の処理による、当該領域に対するデータアクセスは禁止される。【００８５】
（ｆ）のコマンド（ＷＲＩＴＥコマンド）は、ホスト１００が、論理ボリュームの所定の領域に対して、指定されたデータを書き込む際に用いられる。一般的にホスト１００が、アプリケーション１１１２からの指示に基づいて、データを論理ボリュームに対して書き込む際には、このＷＲＩＴＥコマンドをストレージ装置に発行する（ただし、特定のパターンのデータ（たとえばａｌｌ  ｚｅｒｏ、ａｌｌ  １等）を、論理ボリュームの所与の領域に書き込む場合、たとえば論理ボリュームの所定範囲のデータをすべて消去したい場合等には、（ｃ）のＷＲＩＴＥ  ＳＡＭＥコマンドを発行する）。コマンドのパラメータとして、論理ボリューム上の領域を特定する情報（ＬＵＮ、ＬＢＡ及びデータ長）が指定される。さらにライトデータとして、指定された領域の長さと同サイズのデータが送信される。【００８６】
以下、ストレージ装置４００がホスト１００から上で説明したいずれかのコマンドを受信した時に行う処理を説明していく。まず図５を用いて、全体の流れを説明する。ストレージ装置４００がコマンドを受信すると、まずストレージ装置４００のＭＰ５２１は、受信したコマンドが情報採取系のコマンドであるか否かを判定し（Ｓ１）、受信したコマンドが情報採取系のコマンドである場合にはＳ３以降の処理を行う。【００８７】
（３ーａ、３−ｂ）情報採取系コマンド（ＧＥＴ  ＬＢＡ  ＳＴＡＴＵＳ，  ＬＯＧ  ＳＥＮＳＥ）に係るオペレーション
Ｓ３では、ＭＰ５２１は、コマンドの種類の解析をさらに行い、たとえばコマンドの種類がＧＥＴ  ＬＢＡ  ＳＴＡＴＵＳであれば、コマンドのパラメータで指定されたＬＢＡの状態（たとえば物理記憶領域が割り当てられているか等）を取得し、その情報をホスト１００に返却する処理を行う。またコマンドの種類がＬＯＧ  ＳＥＮＳＥであれば、コマンドのパラメータで指定された論理ボリュームあるいはストレージ装置４００の情報を返却する。つまり、ストレージ装置４００は情報採取系のコマンドを受信した場合には、論理ボリュームのＩ／Ｏモードやペアステータスを考慮せず、コマンドのパラメータで指定された論理ボリュームまたはストレージ装置４００の情報を、コマンド発行元（ホスト１００等）に返却する処理を行う。【００８８】
一方Ｓ１で、コマンドが情報採取系のコマンドでないと判定された場合（Ｓ１：Ｎ）、Ｓ２以降の処理が行われる。Ｓ２ではＭＰ５２１は、コマンドの種類を判定し、コマンドの種類に応じて、Ｓ１１、Ｓ２１、Ｓ３１、Ｓ４０のいずれかの処理を行う。コマンドがＷＲＩＴＥ  ＳＡＭＥであった場合には、ＭＰ５２１はＳ１１以降の処理を行い、コマンドがＵＮＭＡＰであった場合には、ＭＰ５２１はＳ２１以降の処理を行う。またコマンドがＡＴＳであった場合には、ＭＰ５２１はＳ３１以降の処理を行い、コマンドがＷＲＩＴＥであった場合には、ＭＰ５２１はＳ４０以降の処理を行う。【００８９】
また、ストレージ装置４００は、上で説明していないコマンド（たとえば論理ボリュームに格納されたデータを読み出す際に用いられるコマンドであるＲＥＡＤコマンド等）を受信することもある。その場合、たとえばＲＥＡＤコマンドを受信した場合には、ストレージ装置４００は論理ボリュームのリード処理などを実施するが、本明細書ではこれらの処理は省略している。【００９０】
以降では、Ｓ２の判定において、コマンドが、ＷＲＩＴＥ  ＳＡＭＥ、ＵＮＭＡＰ、ＡＴＳ、またはＷＲＩＴＥであった場合について説明する。また以下では特に断りのない限り、ストレージ装置４００での処理中に、エラーが発生しなかった場合の処理の流れを説明する。【００９１】
Ｓ２の判定において、コマンドが、ＷＲＩＴＥ  ＳＡＭＥ、ＵＮＭＡＰ、ＡＴＳ、またはＷＲＩＴＥであった場合、いずれの場合においても、ＭＰ５２１はまずボリューム管理テーブルＴ３００を参照し、コマンドで指定されているポートＩＤ、ＬＵＮを論理ボリューム番号（Ｒ−ＬＤＥＶ＃）に変換する。そしてペア管理テーブルＴ４００を参照し、変換された論理ボリューム番号で特定される論理ボリューム（アクセス対象ボリューム）がＰ−ＶＯＬであるかＳ−ＶＯＬであるかを判定する（Ｓ１１、Ｓ２１、Ｓ３１、Ｓ４１。なお、Ｓ４１は図５には記載がなく、図１９に記載されている）。これはアクセス対象ボリュームがＰ−ＶＯＬであるかＳ−ＶＯＬによって、行うべき処理が異なるためである。【００９２】
続いてＭＰ５２１はボリューム管理テーブルＴ３００を参照し、アクセス対象ボリュームの状態（Ｉ／Ｏモード）がＢｌｏｃｋであるか否かを判定する（Ｓ１２、Ｓ１３、Ｓ２２、Ｓ２３、Ｓ３２、Ｓ３３、Ｓ４２，Ｓ４３）。アクセス対象ボリュームの状態がＢｌｏｃｋである場合には、ＭＰ５２１はエラーをホスト１００に返却し、処理を終了する。アクセス対象ボリュームの状態がＢｌｏｃｋでない場合、Ｓ１４，Ｓ１５，Ｓ２４，Ｓ２５，Ｓ３４，Ｓ４４またはＳ４５の処理を行う。【００９３】
（３ーｃ）ＷＲＩＴＥ  ＳＡＭＥコマンド
図６を用いて、ストレージ装置４００がＷＲＩＴＥ  ＳＡＭＥコマンドを受信した場合で、かつ当該コマンドでアクセス対象ボリュームとして指定されているボリュームがＰ−ＶＯＬであった場合に、ストレージ装置４００で行われる処理の流れを説明する。なお、以下の処理では一例として、Ｐ−ＶＯＬがストレージ装置４００−１に、そして当該Ｐ−ＶＯＬとペア関係にあるボリューム（Ｓ−ＶＯＬ）がストレージ装置４００−２に存在する場合を例にとって説明する。そして以下で説明する処理は特に断りがない限り、ストレージ装置４００−１（Ｐ−ＶＯＬが存在するストレージ装置）のＭＰ５２１が実行する処理である。【００９４】
まずＭＰ５２１は、ボリューム管理テーブルＴ３００を参照し、アクセス対象ボリュームのＩ／Ｏモードを判定する（Ｓ１４０）。以下、Ｉ／ＯモードがＬｏｃａｌの場合、Ｒｅｍｏｔｅの場合、あるいはＭｉｒｒｏｒの場合について説明していく。なお以下では、特に断りのない限り、ＷＲＩＴＥ  ＳＡＭＥコマンドで指定される、論理ボリュームのアクセス対象領域の範囲が、１スロットに一致している場合について説明する。【００９５】
Ｉ／ＯモードがＬｏｃａｌの場合、ＭＰ５２１はＬＭ５２２上に１スロット分のデータ領域を確保する。そして、ＷＲＩＴＥ  ＳＡＭＥコマンドで指定されているライトデータ（１ブロック分）を、確保した領域全てに書き込む（Ｓ１４２１）。たとえば指定されたライトデータがａｌｌ  １（１ブロック内の全ビットが「１」）の場合には、確保した領域の全てのビットに「１」を書き込む。さらにＣＨＡ５３０ａのバッファ５３２ａにも１スロット分の領域を確保し、ＬＭ５２２上に確保された領域に格納されているデータを、バッファ５３２ａ上の確保された領域にコピーする。【００９６】
なお以下では、ここでの処理、つまりＷＲＩＴＥ  ＳＡＭＥコマンドで指定された１ブロック分のデータを、バッファ５３２の１スロット分の領域全体に書き込む処理のことを、「データ拡張処理」と呼ぶ。また、上の説明ではデータ拡張処理によって作成される１スロット分のデータが、ＣＨＡ５３０ａのバッファ５３２ａに作成される例を説明しているが、バッファ５３２ａ以外の領域に作成するようにしてもよい。たとえばＬＭ５２２に作成するようにしても本発明は有効である。【００９７】
続いてＭＰ５２１は、キャッシュ領域の中の、１スロット分の未使用領域を確保する（Ｓ１４２２）。この処理は、ディスクキャッシュを搭載したストレージ装置が実施する周知の処理である。また、以下では、この処理（キャッシュ領域上の１スロットあるいは複数スロット分の未使用領域を確保する処理）のことを、「スロット確保処理」または「キャッシュスロット確保処理」と呼ぶ。なお、ＷＲＩＴＥ  ＳＡＭＥコマンドで指定される論理ボリュームのアクセス対象領域の範囲が、複数スロット分の範囲である場合には、ＭＰ５２１は複数のスロットを確保する。【００９８】
Ｓ１４２３ではＭＰ５２１は、Ｓ１４２１でバッファ５３２ａ上に確保された領域に格納されているデータを、Ｓ１４２２で確保された、キャッシュ領域上の１スロット分の未使用領域にライトする。これにより、ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された論理ボリューム上のアクセス対象領域の全範囲に対して、（ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された）同一のデータが格納されたことになる。【００９９】
Ｓ１４２３の処理が終わると、ＭＰ５２１はホスト１００に対して、ＷＲＩＴＥ  ＳＡＭＥコマンドに係る処理が正常に終了した旨を返答する（Ｓ１４２４）。なお、ＳＣＳＩの規格では、処理が正常に終了した場合には、ホスト１００には「ＧＯＯＤ」というステータスが返却される。一方処理中にエラーが発生したために処理が正常に終了しなかった場合には、ホスト１００には「ＣＨＥＣＫ  ＣＯＮＤＩＴＩＯＮ」というステータスが返却される。そのため、以下では、ストレージ装置４００がホスト１００に対し、処理が正常に終了した旨を返答することを、「ＧＯＯＤステータスを返却する」と表現する。【０１００】
そしてＳ１４２２で確保したキャッシュスロットを解放し（Ｓ１４２５）、処理を終了する。【０１０１】
一方Ｓ１４０の判定で、Ｉ／ＯモードがＲｅｍｏｔｅであると判断された場合、Ｓ１４３１以降の処理が実行される。Ｓ１４３１ではＭＰ５２１は、データ拡張処理を行う。この処理はＳ１４２１と同じ処理である。【０１０２】
続いてＳ１４３２で、ＭＰ５２１はペア管理テーブルＴ４００を参照し、アクセス対象ボリュームとペア関係にあるボリューム（Ｓ−ＶＯＬ）の装置シリアル番号、ＬＤＥＶ＃を特定する。そして、Ｓ−ＶＯＬの存在するストレージ装置４００（ストレージ装置４００−２）に対して、Ｓ１４３１で作成されたデータをＳ−ＶＯＬに書き込むことを指示するコマンドを発行する。本発明の実施例では、ここで発行されるコマンドのことをＷＲＦＢＡコマンドと呼ぶ。【０１０３】
ＷＲＦＢＡコマンドは、ストレージ装置４００間でのみ有効なコマンドである。ＷＲＦＢＡコマンドを受信したストレージ装置４００が行う内容は、ＷＲＩＴＥコマンドを受信した場合と類似しており、指定されたデータを指定された論理ボリューム上の領域（ＬＢＡ）に格納する処理を行う。そのため、Ｓ１４３２の処理によって、ストレージ装置４００−１から送信されたＷＲＦＢＡコマンドを受信したストレージ装置４００−２では、Ｓ−ＶＯＬに対してデータを書き込む処理を行う。この処理については後述する。【０１０４】
また、ＷＲＦＢＡコマンドは、１スロット分のデータ書き込みを指示するコマンドである。そのため、ＷＲＩＴＥ  ＳＡＭＥコマンドで複数スロットに相当する領域への書き込みが指示された場合には、ここではＷＲＦＢＡコマンドを複数回発行することで、ストレージ装置４００−２に対してＳ−ＶＯＬへのデータ書き込みの指示を行う。また、ＷＲＦＢＡコマンド及びライトデータは、Ｉ／Ｆ（５３１ｂ）及びＳＡＮ２２０を経由してストレージ装置４００−２へと送信される。【０１０５】
本発明の実施例に係るストレージ装置４００で用いられる、ＷＲＦＢＡコマンドのフォーマットの例を、図２５に示す。ＷＲＦＢＡコマンドには、オペレーションコード（Ｏｐｃｏｄｅ。また、オペコードと呼ばれることもある）７０１、ライト位置情報７０２、発行元Ｉ／Ｏモード７０３、排他確保フラグ７０４の情報が含まれる。また、これ以外の情報が含まれていてもよい。【０１０６】
オペレーションコード７０１は、送信されたコマンドがＷＲＦＢＡコマンドであることを表す、１バイトのコード（たとえば０ｘＤＡ等の値）である。ライト位置情報７０２は、ライトデータの書き込み対象の論理ボリュームの領域を特定する情報であり、論理ボリュームのＬＤＥＶ＃と論理ブロックアドレス（ＬＢＡ）が含まれている。ＷＲＦＢＡコマンドを受信したストレージ装置４００は、ライト位置情報７０２で特定される論理ボリュームのＬＢＡから１スロット分の領域に対して、ライトデータを格納する処理を行う。【０１０７】
また、発行元Ｉ／Ｏモード７０３は、ライト位置情報７０２で特定される論理ボリュームとペア関係にある論理ボリュームのＩ／Ｏモードの情報である。つまりＷＲＦＢＡコマンドを発行するストレージ装置４００（仮にストレージ装置４００−１とする）は、コマンド発行先のストレージ装置４００（４００−２）のＳ−ＶＯＬに対する書き込みを指示する場合、発行元Ｉ／Ｏモード７０３に、自身（ストレージ装置４００−１）にあるＰ−ＶＯＬのＩ／Ｏモードの情報が含まれたＷＲＦＢＡコマンドを作成し、ストレージ装置４００−２に送信する。この情報の使われ方は後述する。【０１０８】
排他確保フラグ７０４には、０または１が格納される。１が格納されていた場合、ＷＲＦＢＡコマンドを受信したストレージ装置４００は、後述するデータ排他確保処理を行ってから、論理ボリュームへのライト処理を行う。なお、ストレージ装置４００は、ＷＲＦＢＡコマンドによるライト対象の論理ボリュームがＰ−ＶＯＬで、かつそのＰ−ＶＯＬのＩ／Ｏモードが「Ｍｉｒｒｏｒ」の場合に限って、排他確保フラグ７０４が「１」に設定されたコマンドを作成する。そのためＳ１４３２では、排他確保フラグ７０４に０が設定されたコマンドが作成され、送信される。【０１０９】
ストレージ装置４００−２で、Ｓ−ＶＯＬに対してデータ書き込みが終了すると、ストレージ装置４００−１に、処理が完了した旨を表す応答が返信される。Ｓ１４３３で、ストレージ装置４００−１のＭＰ５２１は、ストレージ装置４００−２からの応答を受信する（逆に言えばストレージ装置４００−１は、Ｓ１４３２でＷＲＦＢＡコマンドを発行した後、ストレージ装置４００−２から応答が返信されて来るまで待つ）。【０１１０】
なお、先にも述べたとおり、ＷＲＩＴＥ  ＳＡＭＥコマンドで複数スロットに相当する領域への書き込みが指示された場合には、ＭＰ５２１はＳ−ＶＯＬの存在するストレージ装置４００−２にＷＲＦＢＡコマンドを複数回発行する。より正確には、ＭＰ５２１はＳ１４３２（ＷＲＦＢＡコマンドの発行）とＳ１４３３（ストレージ装置４００−２からの応答の受信）を複数回実施する。【０１１１】
Ｓ１４３３で処理が完了した旨の応答を受信すると、ＭＰ５２１はホスト１００に対して、ＧＯＯＤステータスを返却する（Ｓ１４３４）。この処理はＳ１４２４と同じ処理である。ＧＯＯＤステータスをホスト１００に返却した後、ＭＰ５２１は処理を終了する。【０１１２】
さらにＩ／ＯモードがＭｉｒｒｏｒの場合について説明する。Ｉ／ＯモードがＭｉｒｒｏｒの場合、データはＰ−ＶＯＬとＳ−ＶＯＬの双方に書き込まれる。そのため、Ｐ−ＶＯＬの存在するストレージ装置４００−１とＳ−ＶＯＬの存在するストレージ装置４００−２の両方で、論理ボリュームに対するデータ書き込みが行われる。データ書き込みの順は、Ｐ−ＶＯＬに対する書き込みを最初に行って、そのあとでＳ−ＶＯＬに対する書き込みを行うように決められている。なお以下では、ＷＲＩＴＥ  ＳＡＭＥコマンドで指定される、論理ボリュームのアクセス対象領域の範囲が、複数スロット分のサイズである場合について説明する。【０１１３】
Ｓ１４１１でＭＰ５２１は、ＷＲＩＴＥ  ＳＡＭＥコマンドで指定される、論理ボリュームのアクセス対象領域の範囲全体のロックを行う。この処理を本明細書では「データ排他確保処理」と呼ぶ。この処理を行うことにより、論理ボリュームのアクセス対象領域の範囲全体は、後述するデータ排他解放処理が行われるまでは、他の処理（当該範囲に対するリードあるいはライトを行う処理等）によってアクセスされることが防止される。【０１１４】
ここで説明する例では、データ排他確保処理はＰ−ＶＯＬの存在するストレージ装置４００（４００−１）で実施されるため、データ排他確保処理により、Ｐ−ＶＯＬの領域についてロックが行われる。ただし、Ｉ／ＯモードがＭｉｒｒｏｒの論理ボリュームに対する書き込みは、Ｐ−ＶＯＬから最初に行われる。そのため、Ｓ１４１１が実行された直後に、たとえばホスト１００からＳ−ＶＯＬに対する書き込み要求（ＷＲＩＴＥコマンド等）を受信した場合でも、まずＰ−ＶＯＬへの書き込み処理が開始される。その時、Ｓ１４１１が実行されていることにより、Ｐ−ＶＯＬの領域が排他されているため、ホスト１００からＳ−ＶＯＬに対する書き込み要求（ＷＲＩＴＥコマンド等）は待たされることになる（つまり、ＷＲＩＴＥ  ＳＡＭＥコマンドに係る処理が完了するまでは、他の処理がボリュームペアに対してアクセスできない状態が維持できる）。【０１１５】
Ｓ１４１２〜Ｓ１４１４では、先に説明したＳ１４２１〜Ｓ１４２３と同じ処理が行われる。つまりＭＰ５２１は、データ拡張処理、キャッシュスロット確保処理、キャッシュ領域へのデータライト処理を行う。ただし、Ｓ１４１３では、論理ボリュームのアクセス対象領域の範囲が複数スロット分のサイズであれば、複数のキャッシュスロットが確保される。【０１１６】
Ｓ１４１５、Ｓ１４１６では、先に説明したＳ１４３２，Ｓ１４３３と同じ処理が行われる。これによりＳ−ＶＯＬに対するデータ書き込みが行われ、Ｓ−ＶＯＬの存在するストレージ装置４００−２からの応答が返却される。【０１１７】
なお、ここでは１スロットごとにデータ書き込みを行う。そのため、Ｓ１４１４〜Ｓ１４１６の処理を１スロットずつ行う（つまりＷＲＩＴＥ  ＳＡＭＥコマンドで、８スロット分のデータ書き込みが指示された場合、Ｓ１４１４〜Ｓ１４１６の処理を８回繰り返す）。【０１１８】
ストレージ装置４００−２から処理完了の応答を受信（Ｓ１４１６）した後、ＭＰ５２１（ストレージ装置４００−１）は、Ｓ１４１１でロックした領域のロックを解放する（Ｓ１４１７）。以下ではこの処理のことを、「データ排他解放処理」と呼ぶ。その後ＭＰ５２１は、Ｓ１４２４，Ｓ１４２５の処理を行って、処理を終了する。なおＳ１４２５で行われるスロット解放処理では、Ｓ１４１３で確保されたキャッシュスロットがすべて解放される。【０１１９】
続いて図７を用いて、ストレージ装置４００がＷＲＩＴＥ  ＳＡＭＥコマンドを受信した場合で、かつコマンドでアクセス対象ボリュームとして指定されているボリュームがＳ−ＶＯＬであった場合に、ストレージ装置４００で行われる処理の流れを説明する。なお、図６の説明の場合と同様に、以下の処理では一例として、Ｐ−ＶＯＬがストレージ装置４００−１に、そして当該Ｐ−ＶＯＬとペア関係にあるボリューム（Ｓ−ＶＯＬ）がストレージ装置４００−２に存在する場合を例にとって説明する。そして以下で説明する処理は特に断りがない限り、ストレージ装置４００−２（Ｓ−ＶＯＬが存在するストレージ装置）のＭＰ５２１が実行する処理である。【０１２０】
まずＭＰ５２１は、ボリューム管理テーブルＴ３００を参照し、アクセス対象ボリュームのＩ／Ｏモードを判定する（Ｓ１５０）。以下、Ｉ／ＯモードがＬｏｃａｌの場合、Ｒｅｍｏｔｅの場合、あるいはＭｉｒｒｏｒの場合について説明していく。なお、以下では特に断りのない限り、ＷＲＩＴＥ  ＳＡＭＥコマンドで指定される、論理ボリュームのアクセス対象領域の範囲が、１スロットに一致している場合について説明する。【０１２１】
Ｉ／ＯモードがＬｏｃａｌの場合（Ｓ１５０：Ｌｏｃａｌ）、ＭＰ５２１はＳ１５２１〜Ｓ１５２５の処理を行うことで、Ｓ−ＶＯＬへのデータ書き込みを行う。Ｓ１５２１〜Ｓ１５２５の処理は、図６のＳ１４２１〜Ｓ１４２５と同じであるため、説明を省略する。【０１２２】
一方Ｓ１４０の判定で、Ｉ／ＯモードがＲｅｍｏｔｅであると判断された場合、Ｓ１５３１以降の処理が実行される。まずＭＰ５２１はデータ拡張処理を行う（Ｓ１５３１）。この処理はＳ１４２１やＳ１４３１と同じ処理である。ただしデータ拡張処理によって作成された１スロット分のデータは、バッファ５３２ｂ、つまりＳＡＮ２２０を介してストレージ装置４００−１に接続されているＣＨＡ５３０ｂのバッファ５３２ｂに格納される。ただし別の実施形態として、ＬＭ５２２に作成されたデータを格納しておき、Ｐ−ＶＯＬ（ストレージ装置４００−１）にデータを送信するときに、ＬＭ５２２から作成されたデータを読み出して送信する実施形態もあり得る。【０１２３】
続いてＳ１５３２で、ＭＰ５２１はペア管理テーブルＴ４００を参照し、アクセス対象ボリュームとペア関係にあるボリューム（Ｐ−ＶＯＬ）の装置シリアル番号、Ｒ−ＬＤＥＶ＃を特定する。これらの情報をもとにＷＲＦＢＡコマンドを作成し、Ｐ−ＶＯＬの存在するストレージ装置４００（ストレージ装置４００−１）に対して、ＷＲＦＢＡコマンドとＳ１５３１で作成されたデータを送信する。そしてＭＰ５２１は、ストレージ装置４００−１から応答が返信されて来るまで待つ。【０１２４】
Ｓ１５３３で、ストレージ装置４００−２のＭＰ５２１が、ストレージ装置４００−１からの応答を受信すると、ＭＰ５２１はホスト１００に対して、ＧＯＯＤステータスを返却する（Ｓ１５３４）。この処理はＳ１４３４と同じ処理である。ＧＯＯＤステータスをホスト１００に返却した後、ＭＰ５２１は処理を終了する。【０１２５】
さらにＳ１５０の判定で、Ｉ／ＯモードがＭｉｒｒｏｒと判断された場合、Ｓ１５１１以降の処理が行われる。まずＳ１５１１でＭＰ５２１は、データ拡張処理を行う（これはＳ１５３１と同じ処理である）。続いてＳ１５１２でＭＰ５２１はＷＲＦＢＡコマンドを作成し、アクセス対象ボリュームとペア関係にあるボリューム（Ｐ−ＶＯＬ）に対し、ＷＲＦＢＡコマンドとＳ１５１１で作成されたデータを送信し、Ｐ−ＶＯＬのあるストレージ装置４００（ストレージ装置４００−１）から応答が返却されるのを待つ（Ｓ１５１３）。この処理はＳ１５３２、Ｓ１５３３と同様の処理である。ただし、Ｓ１５１２で作成されるＷＲＦＢＡコマンドには、排他確保フラグ７０４に「１」が設定される点が、Ｓ１５３２と異なる。【０１２６】
Ｐ−ＶＯＬのあるストレージ装置４００（ストレージ装置４００−１）から応答を受信すると（Ｓ１５１３）、ＭＰ５２１はＳ１５１４〜Ｓ１５１７の処理を行うことで、Ｓ−ＶＯＬへのデータ書き込みを行う。Ｓ１５１４〜Ｓ１５１７の処理は、Ｓ１５２２〜Ｓ１５２５と同じ処理である。【０１２７】
最後にＭＰ５２１は、Ｐ−ＶＯＬのあるストレージ装置４００（ストレージ装置４００−１）に対して、データ排他解放コマンドを送信し（Ｓ１５１８）、処理を終了する。詳細は後述するが、Ｓ１５１２でストレージ装置４００−１（Ｐ−ＶＯＬのあるストレージ装置）にＷＲＦＢＡコマンドが発行されると、ストレージ装置４００−１では、データ排他確保処理を行う。そしてストレージ装置４００−２は、Ｓ−ＶＯＬへの書き込みが完了した後、ストレージ装置４００−１にデータ排他解放処理を行わせるため、ここでデータ排他解放コマンドを送信する。データ排他解放コマンドもＷＲＦＢＡコマンドと同様、ストレージ装置４００間でのみやり取りされるコマンドである。データ排他解放コマンドには、ロックを解放すべき論理ボリュームのアクセス対象領域の情報が含まれており、データ排他解放コマンドを受信したストレージ装置４００はその情報をもとに、論理ボリュームのアクセス対象領域のロックを解放する。【０１２８】
続いて、ストレージ装置４００がＷＲＦＢＡコマンドを受信した時に行われる処理の流れを、図８を用いて説明する。【０１２９】
ストレージ装置４００がＷＲＦＢＡコマンドを受信すると、ＭＰ５２１はペア管理テーブルＴ４００を参照し、アクセス対象論理ボリュームがＰ−ＶＯＬであるかＳ−ＶＯＬであるか判定する（Ｓ１００１）。アクセス対象論理ボリュームがＰ−ＶＯＬであった場合、ＭＰ５２１はアクセス対象ボリュームのペアボリューム（Ｓ−ＶＯＬ）のＩ／Ｏモードを判定する（Ｓ１０１１）。ペアボリュームのＩ／Ｏモードは、ＷＲＦＢＡコマンドのパラメータ（発行元Ｉ／Ｏモード７０３）に含まれているので、ＭＰ５２１は発行元Ｉ／Ｏモード７０３を参照することによって、Ｓ１０１１の判定を行う。【０１３０】
Ｓ１０１１の判定で、ペアボリュームのＩ／ＯモードがＭｉｒｒｏｒであった場合、ＭＰ５２１はＳ１０１２以降の処理を行う。Ｓ１０１２では、ＷＲＦＢＡコマンドに含まれている排他確保フラグ７０４を参照し、排他確保フラグ７０４が「１」であれば、アクセス対象領域のロック（データ排他確保）を行う。【０１３１】
続いてＳ１０１４でＭＰ５２１はキャッシュスロット確保処理を行い、Ｓ１０１５でＭＰ５２１はライトデータをキャッシュスロットに書き込む。その後ＭＰ５２１は、ＷＲＦＢＡコマンドの発行元のストレージ装置４００に対して、処理が完了した旨を応答する（Ｓ１０１６）。そしてＷＲＦＢＡコマンドの発行元のストレージ装置４００から、新たな指示が到来するのを待つ。【０１３２】
Ｓ１０１７でＭＰ５２１が、ＷＲＦＢＡコマンドの発行元のストレージ装置４００からデータ排他解放コマンドを受信すると、ＭＰ５２１はデータ排他解放を実施する（Ｓ１０１８）。その後ＭＰ５２１は、Ｓ１０１４で確保したキャッシュスロットを解放し（Ｓ１０１９）、処理を終了する。【０１３３】
なお、アクセス対象領域が１スロット分の領域ではなく、複数スロット（仮にｎスロットとする）に跨る領域であった場合には、Ｓ１０１２〜Ｓ１０１９の処理をｎ回繰り返し実行する。【０１３４】
Ｓ１０１１の判定で、ペアボリュームのＩ／ＯモードがＲｅｍｏｔｅであった場合、またはＳ１００１の判定でアクセス対象論理ボリュームがＳ−ＶＯＬであった場合、ＭＰ５２１はＳ１０２２〜Ｓ１０２５の処理を行う。Ｓ１０２２〜Ｓ１０２５の処理はそれぞれ、Ｓ１０１４〜Ｓ１０１６、及びＳ１０１９と同じ処理であるので、ここでは説明を省略する。【０１３５】
以上が、ストレージ装置４００がＷＲＩＴＥ  ＳＡＭＥコマンドを受信した場合に行う処理の説明である。なお、上で説明した処理では、論理ボリューム上のアクセス対象領域にデータをライトする（正確には、アクセス対象領域用に確保されたキャッシュ領域にデータをライトする、というべきだが、先に述べたとおり、キャッシュ領域にライトデータが格納された時点で、実質的に論理ボリュームへのライトが完了した状態になるので、このように表現する）より前に、ＷＲＩＴＥ  ＳＡＭＥコマンドとともに送信されてくる、１ブロック分のライトデータを１スロット分のバッファ５３２ａ上の領域に書き込んで、１ブロック分のライトデータを１スロットに拡張するデータ拡張処理が行われる。【０１３６】
ただしよく使われる種類のデータ、たとえばライトデータとしてａｌｌ  ｚｅｒｏが良く使われる場合、バッファ５３２あるいはＬＭ５２２上に、全て０が書き込まれている１スロット分の領域をあらかじめ用意しておき、論理ボリューム上のアクセス対象領域にａｌｌ  ｚｅｒｏをライトする時には、用意されている１スロット分の領域のデータ（ａｌｌ  ｚｅｒｏ）を読み出して、アクセス対象領域にライトすれば、データ拡張処理を行う手間が省ける。【０１３７】
そのため、本発明の実施例に係るストレージ装置４００では、バッファ５３２（５３２ａ及び５３２ｂ）上に、全て０が書き込まれている１スロット分の領域を用意している。そしてＭＰ５２１は、ＷＲＩＴＥ  ＳＡＭＥコマンドとともに送信されてくるライトデータがａｌｌ  ｚｅｒｏであるか判定し、ａｌｌ  ｚｅｒｏの場合には、データ拡張処理（たとえば図７のＳ１４１１、Ｓ１４２１，Ｓ１４３１、図８のＳ１５１１，Ｓ１５２１、Ｓ１５３１等）を行わず、バッファ５３２上に用意されている１スロット分の領域のデータ（つまり１スロット分のａｌｌ  ｚｅｒｏデータ）をキャッシュ領域に書き込む。【０１３８】
［変形例］
上で説明した処理の流れでは、ストレージ装置４００−１からストレージ装置４００−２のボリュームに対して、ＷＲＩＴＥ  ＳＡＭＥコマンドで指定されたデータを書き込む場合（またはストレージ装置４００−２からストレージ装置４００−１のボリュームに対して、ＷＲＩＴＥ  ＳＡＭＥコマンドで指定されたデータを書き込む場合）、ＷＲＦＢＡコマンドが用いられていた。ただしＷＲＦＢＡコマンドは、全領域に同内容のデータを書き込む場合であっても、データ書き込み範囲と同じサイズのデータを送信する必要があるコマンドである。そのため、上で説明した実施例の変形として、ＷＲＩＴＥ  ＳＡＭＥコマンドのように、書き込みデータのごく一部（たとえば１ブロック）だけを送信するだけで、データ書き込み範囲に全て同一データの書き込みが行われるコマンド（以下ではこのコマンドのことを、「ＷＲＩＴＥ  ＳＡＭＥ伝搬コマンド」と呼ぶ）を定義し、それを用いる例を説明する。【０１３９】
ＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドは、論理ボリュームの所定の領域の全てに対して、同一データを書き込むことを指示するコマンドである。図２６を用いて、ＷＲＦＢＡコマンドとＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドとの違いを説明する。図２６の上段は、ストレージ装置４００−１からストレージ装置４００−２に対して、ＷＲＦＢＡコマンドを使って、論理ボリューム内の１つのスロットの全領域に、「１」を書き込む場合の例である。この場合、ストレージ装置４００−１からストレージ装置４００−２には、ＷＲＦＢＡコマンドを送信するとともに、ライト対象データとして、１スロット分のデータを送信する。ＷＲＦＢＡコマンドを受信したストレージ装置４００−２は、受信したライトデータをそのまま、ＷＲＦＢＡコマンドのパラメータで指定されている論理ボリュームの領域へと書き込む。【０１４０】
図２６の下段は、ストレージ装置４００−１からストレージ装置４００−２に対して、ＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドを使って、論理ボリューム内の１つのスロットの全領域に、「１」を書き込む場合の例である。この場合ストレージ装置４００−１からストレージ装置４００−２に、コマンド（ＷＲＩＴＥ  ＳＡＭＥ伝搬コマンド）を送信する必要がある点は、ＷＲＦＢＡコマンドの場合と同様である。ただしＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドを用いる場合、ライト対象データとして、１ブロック分のデータ（パターンデータ）だけを送信すればよい。そしてＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドを受信したストレージ装置４００−２は、受信したパターンデータを、１スロット分の長さに拡張する。この処理は、上で説明したデータ拡張処理と同様の処理が行われる。そしてストレージ装置４００−２内で拡張されたデータを、論理ボリュームに書き込む。また、ライト範囲が複数スロットにわたる場合には、この拡張されたデータを、複数のスロットに書き込む。つまり、ＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドを受信したストレージ装置４００は、ホスト１００からＷＲＩＴＥ  ＳＡＭＥコマンドを受信した時と同様の処理を行う。【０１４１】
変形例に係るストレージ装置４００において、ＷＲＩＴＥ  ＳＡＭＥコマンドを受信した時に行われる処理の流れについて、図９、１０、１１を用いて説明する。図９は、ストレージ装置４００がＷＲＩＴＥ  ＳＡＭＥコマンドを受信した場合で、かつコマンドでアクセス対象ボリュームとして指定されているボリュームがＰ−ＶＯＬであった場合に、ストレージ装置４００で行われる処理の流れを表している。図９の処理の多くは、図６を用いて説明した処理と共通しているので、ここでは図６と相違する点を中心に説明する。【０１４２】
Ｐ−ＶＯＬのＩ／ＯモードがＭｉｒｒｏｒの場合（Ｓ１４０：Ｍｉｒｒｏｒ）、ＭＰ５２１はＳ１４１１〜Ｓ１４１７、Ｓ１４２４、Ｓ１４２５の処理を順次実行する。このうち、図６と相違する処理はＳ１４１５’のみであり、後の処理は図６に記載の処理と同じである。【０１４３】
図６のＳ１４１５ではＷＲＦＢＡコマンドを発行していたのに対し、Ｓ１４１５’ではＰ−ＶＯＬとペア関係にあるボリューム（Ｓ−ＶＯＬ）の存在するストレージ装置４００に対して、ＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドを発行する。またＳ１４１５’で、ＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドとともにライトデータを送信するが、ここで送信されるデータは、先に図２６を用いて説明したとおり、１ブロック分のデータ（パターンデータ）のみの送信でよい。ＷＲＩＴＥ  ＳＡＭＥコマンドで指定される論理ボリュームのアクセス対象領域の範囲が、複数スロット分の範囲である場合でも、Ｓ１４１５’のＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドの発行は１回で良い。これはＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドのパラメータにライト範囲を指定する際、ＷＲＩＴＥ  ＳＡＭＥコマンドで指定されたアクセス対象範囲と同じ範囲が指定できるためである。【０１４４】
Ｐ−ＶＯＬのＩ／ＯモードがＲｅｍｏｔｅの場合（Ｓ１４０：Ｒｅｍｏｔｅ）、ＭＰ５２１はＳ１４３２’〜Ｓ１４３４の処理を順次実行する。このうち、図６と相違する点は、図９の処理では、図６のＳ１４３１（データ拡張処理）が行われない点、図６のＳ１４３２（ＷＲＦＢＡコマンドの送信）に代えて、Ｓ１４３２’（ＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドの送信）が行われる点である。Ｓ１４３２’の処理はＳ１４１５’と同じであるため、ここでは説明を省略する。【０１４５】
図１０は、ストレージ装置４００がＷＲＩＴＥ  ＳＡＭＥコマンドを受信した場合で、かつコマンドでアクセス対象ボリュームとして指定されているボリュームがＳ−ＶＯＬであった場合に、ストレージ装置４００で行われる処理の流れを表している。図１０の処理の多くは、図７を用いて説明した処理と共通しているので、ここでは図７と相違する点を中心に説明する。【０１４６】
Ｓ−ＶＯＬのＩ／ＯモードがＭｉｒｒｏｒの場合（Ｓ１５０：Ｍｉｒｒｏｒ）、ＭＰ５２１はＳ１５１１〜Ｓ１５１８の処理を順次実行する。このうち、図７と相違する処理はＳ１５１２’のみであり、後の処理は図７に記載の処理と同じである。【０１４７】
図７のＳ１５１２ではＷＲＦＢＡコマンドを発行していたのに対し、Ｓ１５１２’では、Ｓ−ＶＯＬとペア関係にあるボリューム（Ｐ−ＶＯＬ）の存在するストレージ装置４００に対して、ＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドを発行する。ここでＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドとともに送信されるライトデータは、Ｓ１４１５’の処理と同様、１ブロック分のデータのみの送信でよい。【０１４８】
なお、本発明は上で説明した処理手順に限定されない。たとえば上で説明した処理の流れでは、Ｓ１５１２’の前にデータ拡張処理（Ｓ１５１１）が実行されているが、データ拡張処理は、Ｓ−ＶＯＬに対してデータ書き込みをするまでに行われていればよい（図１０の例では、Ｐ−ＶＯＬに対するデータ書き込みにはＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドが使用されるため、拡張されたデータをＰ−ＶＯＬに送信するわけではないからである）。そのため、Ｓ１５１２’の前でデータ拡張処理を行わず、たとえばＳ１５１４（キャッシュスロット確保処理）の前に、Ｓ１５１１の処理を行うようにしてもよい。【０１４９】
Ｓ−ＶＯＬのＩ／ＯモードがＲｅｍｏｔｅの場合（Ｓ１５０：Ｒｅｍｏｔｅ）、ＭＰ５２１はＳ１５３２’〜Ｓ１５３４の処理を順次実行する。このうち、図７と相違する点は、図１０の処理では、図７のＳ１５３１（データ拡張処理）が行われない点、図７のＳ１５３２（ＷＲＦＢＡコマンドの送信）に代えて、Ｓ１５３２’（ＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドの送信）が行われる点である。Ｓ１５３２’の処理はＳ１５１２’と同じであるため、ここでは説明を省略する。【０１５０】
続いて、変形例に係るストレージ装置４００がＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドを受信した時に行われる処理の流れを、図１１を用いて説明する。図１１の処理の多くは、図８を用いて説明した処理と共通しているので、ここでは図８と相違する点を中心に説明する。【０１５１】
図１１の処理と図８の処理との違いは、図１１の処理ではデータ拡張処理が行われる点である。Ｓ１００１の判定で、アクセス対象論理ボリュームがＰ−ＶＯＬであった場合、かつアクセス対象論理ボリューム（Ｐ−ＶＯＬ）とペア関係にあるボリューム（Ｓ−ＶＯＬ）のＩ／ＯモードがＭｉｒｒｏｒであった場合、Ｓ１０１４のスロット確保処理の前にデータ拡張処理が行われる（Ｓ１０１３）。【０１５２】
またＳ１００１の判定で、アクセス対象論理ボリュームがＰ−ＶＯＬであった場合、かつアクセス対象論理ボリューム（Ｐ−ＶＯＬ）とペア関係にあるボリューム（Ｓ−ＶＯＬ）のＩ／ＯモードがＲｅｍｏｔｅであった場合、Ｓ１０２２のスロット確保処理の前にデータ拡張処理が行われる（Ｓ１０２１）。同様にＳ１００１の判定で、アクセス対象論理ボリュームがＳ−ＶＯＬであった場合、Ｓ１０２２のスロット確保処理の前にデータ拡張処理が行われる（Ｓ１０２１）。それ以外の点は、図８の処理と変わりはない。【０１５３】
以上が、変形例に係るストレージ装置４００における、ＷＲＩＴＥ  ＳＡＭＥコマンドに係る処理の説明である。変形例に係るストレージ装置４００では、ＷＲＦＢＡコマンドに代えてＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドを用いることで、ストレージ装置４００−１とストレージ装置４００−２の間で伝送すべきライトデータの量、及び伝送すべきコマンドの数を削減することができ、結果としてストレージシステム３００の性能が向上する。【０１５４】
（３ーｄ）ＵＮＭＡＰコマンド
次に、ストレージ装置４００がＵＮＭＡＰコマンドを受信した場合に行われる処理について、図１２、図１３を用いて説明していく。なお、以下の処理では一例として、Ｐ−ＶＯＬがストレージ装置４００−１に、そして当該Ｐ−ＶＯＬとペア関係にあるボリューム（Ｓ−ＶＯＬ）がストレージ装置４００−２に存在する場合を例にとって説明する。【０１５５】
まず、ストレージ装置４００がＵＮＭＡＰコマンドを受信した場合で、かつコマンドでアクセス対象ボリュームとして指定されているボリュームがＰ−ＶＯＬであった場合に、ストレージ装置４００で行われる処理の流れを、図１２を用いて説明する。先に述べたとおり、本発明の実施例に係るストレージ装置４００では、ＵＮＭＡＰコマンドを受信すると、ＵＮＭＡＰコマンドで指定されている論理ボリューム上領域の全てに対して、０を書き込む処理を行う。これはＷＲＩＴＥ  ＳＡＭＥコマンドを受信した時に行う処理と実質的に同じである。そのためＭＰ５２１は、ＵＮＭＡＰコマンドを受信すると、そのコマンドを、指定された領域の全てに「０」を書き込む旨を指示するＷＲＩＴＥ  ＳＡＭＥコマンドに変換する（Ｓ２４１）。Ｓ２４１の処理の後は、ＷＲＩＴＥ  ＳＡＭＥコマンドを受信したものとして、処理が行われる。【０１５６】
以降の処理は、ほぼＷＲＩＴＥ  ＳＡＭＥコマンドを受信した時に行われる処理と同じである。Ｓ２４２の処理は、図６のＳ１４０と同じである。またＳ２４２２〜Ｓ２４２５の処理（Ｉ／ＯモードがＬｏｃａｌの場合に行われる処理）は、図６のＳ１４３２〜Ｓ１４３４と同じである。またＳ２４３２〜Ｓ２４３４の処理（Ｉ／ＯモードがＲｅｍｏｔｅの場合に行われる処理）は、図６のＳ１４２２〜Ｓ１４２５と同じである。またＳ２４１１〜Ｓ２４１７の処理（Ｉ／ＯモードがＭｉｒｒｏｒの場合に行われる処理）は、図６のＳ１４１１、Ｓ１４１３〜Ｓ１４１７と同じである。【０１５７】
先に述べたとおり、ＷＲＩＴＥ  ＳＡＭＥコマンドでライト対象となるデータがａｌｌ  ｚｅｒｏである場合、データ拡張処理が行われない。そのため、ＵＮＭＡＰコマンドを受信した場合にも同様に、ＭＰ５２１はデータ拡張処理を行う代わりに、ライト処理（Ｓ２４１４，Ｓ２４２３）において、バッファ５３２上のａｌｌ  ｚｅｒｏが格納された１スロット分の領域のデータを書き込む処理を行う。また、Ｓ２４３２の処理（Ｓ−ＶＯＬに対してＷＲＦＢＡコマンドとライトデータを送信する処理）においても、バッファ５３２上のａｌｌ  ｚｅｒｏが格納された１スロット分の領域のデータを送信する。【０１５８】
続いてストレージ装置４００がＵＮＭＡＰコマンドを受信した場合で、かつコマンドでアクセス対象ボリュームとして指定されているボリュームがＳ−ＶＯＬであった場合に、ストレージ装置４００で行われる処理の流れを、図１３を用いて説明する。この処理も、多くの部分はＷＲＩＴＥ  ＳＡＭＥコマンドを受信した場合に行われる処理と同様である。
まずストレージ装置４００の内部では、ＵＮＭＡＰコマンドを受信すると、そのコマンドを、指定された領域の全てに「０」を書き込む旨を指示するＷＲＩＴＥ  ＳＡＭＥコマンドに変換する（Ｓ２５１）。【０１５９】
以降の処理は、ＷＲＩＴＥ  ＳＡＭＥコマンドを受信した時に行われる処理（図７）とほぼ同じである。図１３の処理が図７の処理と異なる点は、図１３の処理ではデータ拡張処理が行われない点である。Ｓ２５２の処理は、図７のＳ１５０と同じである。またＳ２５２２〜Ｓ２５２５の処理（Ｉ／ＯモードがＬｏｃａｌの場合に行われる処理）は、図７のＳ１５２２〜Ｓ１５２５と同じである。またＳ２５３２〜Ｓ２５３４の処理（Ｉ／ＯモードがＲｅｍｏｔｅの場合に行われる処理）は、図７のＳ１５３２〜Ｓ１５３４と同じである。またＳ２５１２〜Ｓ２５１８の処理（Ｉ／ＯモードがＭｉｒｒｏｒの場合に行われる処理）は、図７のＳ１５１２〜Ｓ１５１８と同じである。【０１６０】
また、Ｓ２４１５，Ｓ２４３２、Ｓ２５１２、Ｓ２５３２が実行されることで、Ｓ−ＶＯＬ（またはＰ−ＶＯＬ）が存在するストレージ装置４００に対してＷＲＦＢＡコマンドが発行される。ただし、このコマンドを受信した時のストレージ装置４００の行うべき処理は、ＷＲＩＴＥ  ＳＡＭＥコマンドに係る処理で説明したもの（図８）と同じであるので、ここでは説明を省略する。【０１６１】
なお、図１２、図１３、または図８の処理が完了した後、ＭＰ５２１はライト対象領域が含まれているページ内の全領域に全て０が格納されているかどうかの判定を行う。全て０が格納されている場合には、当該ページについて、ページ割り当て解除を行う。この判定とページ割り当て解除は、図１２、図１３、または図８の処理に引き続いて必ず実施されるようにしてもよいし、あるいは図１２、図１３、または図８の処理とは非同期のタイミングで実行されるようにしてもよい。たとえば定期的に各ページ内の全領域に０が格納されているかの判定及びページ割り当ての解除を行うようにしてもよい。【０１６２】
また、上ではＳ−ＶＯＬ（またはＰ−ＶＯＬ）が存在するストレージ装置４００に対してＷＲＦＢＡコマンドを発行することで、Ｓ−ＶＯＬ（またはＰ−ＶＯＬ）にデータ（ａｌｌ  ｚｅｒｏ）を書き込んでいるが、［変形例］で説明したＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドを発行するようにしてもよい。このようにすることで、ストレージ装置４００−１とストレージ装置４００−２の間で伝送すべきライトデータの量、及び伝送すべきコマンドの数を削減することができる。【０１６３】
（３ーｅ）ＣＯＭＰＡＲＥ  ＡＮＤ  ＷＲＩＴＥ  （ＡＴＳ）コマンド
次に、ストレージ装置４００がＣＯＭＰＡＲＥ  ＡＮＤ  ＷＲＩＴＥ（ＡＴＳ）コマンドを受信した場合に行われる処理について説明していく。なお、以下の処理では一例として、Ｐ−ＶＯＬがストレージ装置４００−１に、そして当該Ｐ−ＶＯＬとペア関係にあるボリューム（Ｓ−ＶＯＬ）がストレージ装置４００−２に存在する場合を例にとって説明する。【０１６４】
最初に、ストレージ装置４００がＡＴＳコマンドを受信した場合で、かつ受信したＡＴＳコマンドによってアクセス対象ボリュームとして指定されているボリュームがＰ−ＶＯＬであった場合に、ストレージ装置４００で行われる処理の流れを、図１４を用いて説明する。以下で説明する処理は特に断りがない限り、ストレージ装置４００−１（Ｐ−ＶＯＬが存在するストレージ装置）のＭＰ５２１が実行する処理である。【０１６５】
まずＭＰ５２１は、ボリューム管理テーブルＴ３００を参照し、アクセス対象ボリュームのＩ／Ｏモードを判定する（Ｓ３４０）。この処理は、Ｓ１４０と同じ処理である。以下、Ｉ／ＯモードがＬｏｃａｌの場合、Ｒｅｍｏｔｅの場合、あるいはＭｉｒｒｏｒの場合について説明していく。なお以下では、説明が冗長にならないように、特に断りのない限り、ＡＴＳコマンドで指定される、論理ボリュームのアクセス対象領域の範囲が、１スロットに一致している場合について説明する。【０１６６】
Ｉ／ＯモードがＬｏｃａｌの場合、ＭＰ５２１は、キャッシュスロット確保処理を行う（Ｓ３４２２０）。この処理は、Ｓ１４２２と同じである。また、ＡＴＳコマンドで指定される論理ボリュームのアクセス対象領域の範囲が、複数スロット分の範囲である場合には複数のスロットを確保する点も、Ｓ１４２２と同様である。【０１６７】
Ｓ３４２２１でＭＰ５２１は、ＡＴＳコマンドで指定された論理ボリュームのアクセス対象領域の範囲のデータを、Ｓ３４２２０で確保したキャッシュ領域にリードする。リード処理が終了すると、ＭＰ５２１は一旦キャッシュ領域を解放する（Ｓ３４２２２）。なお、キャッシュ領域を解放しても、当該領域のデータがキャッシュ領域上から削除されることはなく、当該領域には論理ボリュームのアクセス対象領域の範囲のデータが格納されている状態にある。【０１６８】
また、キャッシュスロット確保処理（Ｓ３４２２０）の実行前に、論理ボリュームのアクセス対象領域の範囲のデータが格納されたキャッシュ領域が、すでに存在しているケースもあり得る（いわゆる「キャッシュヒット」状態）。その場合にはＳ３４２２１のリード処理を行う必要はない。【０１６９】
Ｓ３４２３０では、ＭＰ５２１は、Ｓ３４２２２で解放したキャッシュ領域を再び確保する。ここでの確保処理は、Ｓ３４２２０で行われたキャッシュスロット確保処理とは若干異なり、排他確保処理と呼ばれる。排他確保処理によって確保されたキャッシュ領域は、他の処理からアクセスできない状態になる。たとえばＡＴＳコマンドで指定された論理ボリュームのアクセス対象領域の範囲と同じ範囲に対するデータ書き込みを要求するＷＲＩＴＥコマンドを受信した場合、ＭＰ５２１はキャッシュ領域確保を試みるが、排他確保処理が行われていると、ＷＲＩＴＥコマンドに伴って行われるキャッシュスロット確保処理は、ＡＴＳコマンドに係る処理が終了するまで待たされる。【０１７０】
Ｓ３４２３１では、ＭＰ５２１は、Ｓ３４２３０で排他確保したキャッシュスロット上のデータと、ＡＴＳコマンドとともに受信したコンペアデータとを比較する。図示していないが、Ｓ３４２３１での比較の結果、両データが異なっていた場合、ＭＰ５２１はホスト１００に対してエラーを返却して、ＡＴＳコマンドに係る処理を終了する。【０１７１】
Ｓ３４２３１での比較の結果、Ｓ３４２３１で排他確保したキャッシュスロット上のデータと、ＡＴＳコマンドとともに受信したコンペアデータとが同一であった場合、Ｓ３４２４以降の処理が行われる。Ｓ３４２４でＭＰ５２１は、ＡＴＳコマンドとともに受信したライトデータを、Ｓ３４２２０で排他確保したキャッシュスロットに格納する。これにより、ＡＴＳコマンドとともに受信したライトデータが、論理ボリュームに格納されたことになる。【０１７２】
Ｓ３４２４の処理が終わると、ＭＰ５２１はホスト１００に対してＧＯＯＤステータスを返却する（Ｓ３４２５）。そしてＳ３４２６で、ＭＰ５２１は確保したキャッシュスロットを解放し（Ｓ３４２６）、処理を終了する。【０１７３】
一方Ｓ３４０の判定で、Ｉ／ＯモードがＲｅｍｏｔｅであると判断された場合、Ｓ３４３２以降の処理が実行される。Ｓ３４３２では、ＭＰ５２１はペア管理テーブルＴ４００を参照し、アクセス対象ボリュームとペア関係にあるボリューム（Ｓ−ＶＯＬ）の装置シリアル番号、ＬＤＥＶ＃を特定する。そして、Ｓ−ＶＯＬの存在するストレージ装置４００（ストレージ装置４００−２）に対して、ＡＴＳ伝搬コマンドと呼ばれるコマンドを送信する。【０１７４】
ＡＴＳ伝搬コマンドは、ＷＲＦＢＡコマンドと同様に、ストレージ装置４００間でのみ有効なコマンドである。ＡＴＳ伝搬コマンドのパラメータにはアクセス対象論理ボリュームの領域を特定する情報が含まれている。そのためＡＴＳ伝搬コマンドを受信したストレージ装置４００は、パラメータに指定されている情報に基づいて、アクセス対象論理ボリュームの領域に対してＡＴＳコマンドを受信した時と同様の処理（具体的にはＳ３４２２０〜Ｓ３４２４と同様の処理）を行うことができる。【０１７５】
さらにＡＴＳ伝搬コマンドが送信される時、ホスト１００がストレージ装置４００にＡＴＳコマンドを発行する時と同様に、ＡＴＳ伝搬コマンドとともに、コンペアデータとライトデータも、コマンド発行先のストレージ装置４００に送信される。ＡＴＳ伝搬コマンドを受信したストレージ装置４００は、受信したコンペアデータを用いてコンペア処理を行い、コンペア結果が正しい（コンペアデータと論理ボリュームのアクセス対象範囲に格納されているデータとが同一である）場合に、ライトデータを論理ボリュームに格納する処理を行う。この処理は後述する。【０１７６】
Ｓ３４３２で（ストレージ装置４００−１の）ＭＰ５２１がストレージ装置４００−２にＡＴＳ伝搬コマンドを送信すると、ＭＰ５２１はストレージ装置４００−２から応答が返信されて来るのを待つ。Ｓ３４３３でストレージ装置４００−２からの応答を受信し、その結果が正常であれば（つまりコンペア及びライトが成功した）、ＭＰ５２１はホスト１００に対してＧＯＯＤステータスを返却し（Ｓ３４３４）、処理を終了する。【０１７７】
Ｓ３４０の判定でＩ／ＯモードがＭｉｒｒｏｒであると判断された場合、Ｓ３４１１以降の処理が実行される。Ｓ３４１１では、論理ボリュームのアクセス対象領域の範囲全体のロックを確保する。この処理はＳ１４１１と同様である。続いて、Ｓ３４１２０〜Ｓ３４１４の処理を行うことで、自身の論理ボリューム（Ｐ−ＶＯＬ）のアクセス対象領域に対するコンペア及びライトを行う。この処理はＩ／ＯモードがＬｏｃａｌであると判断された場合に行われる処理（Ｓ３４２２０〜Ｓ３４２４）と同じである。【０１７８】
Ｓ３４１５ではＭＰ５２１は、Ｓ−ＶＯＬに対してＡＴＳコマンドとともに送信されてきたライトデータを、Ｓ−ＶＯＬのアクセス対象領域に格納させるため、Ｓ−ＶＯＬの存在するストレージ装置４００（ストレージ装置４００−２）に対してＷＲＦＢＡコマンドを発行する。ＷＲＦＢＡコマンドとともに送信されるライトデータは、ＡＴＳコマンドとともにストレージ装置４００−１に送信されてきたライトデータである。なお、コンペアデータの送信は行われない。ＷＲＦＢＡコマンドの送信が終了すると、ＭＰ５２１は、ストレージ装置４００−２から応答が戻ってくるのを待つ。【０１７９】
ＭＰ５２１はＳ３４１６でストレージ装置４００−２からの応答を受信すると、データ排他解放処理（Ｓ３４１７）、ホスト１００へのＧＯＯＤステータスの返信（Ｓ３４２５）、キャッシュスロット解放（Ｓ３４２６）を行って、処理を終了する。【０１８０】
次に、ストレージ装置４００がＡＴＳコマンドを受信した場合で、かつコマンドでアクセス対象ボリュームとして指定されているボリュームがＳ−ＶＯＬであった場合に、ストレージ装置４００で行われる処理の流れを、図１５を用いて説明する。以下で説明する処理は特に断りがない限り、ストレージ装置４００−２（Ｓ−ＶＯＬが存在するストレージ装置）のＭＰ５２１が実行する処理である。【０１８１】
まずＭＰ５２１は、ボリューム管理テーブルＴ３００を参照し、アクセス対象ボリュームのＩ／Ｏモードを判定する（Ｓ３５０）。この処理は、Ｓ３４０と同じ処理である。【０１８２】
Ｉ／ＯモードがＬｏｃａｌの場合、ＭＰ５２１はＳ３５２２０〜Ｓ３５２６の処理を行う。この処理は、図１４のＳ３４２２０〜Ｓ３４２６と同じ処理である。【０１８３】
Ｉ／ＯモードがＲｅｍｏｔｅの場合、ＭＰ５２１はＳ３５３２〜Ｓ３５３４の処理を行う。この処理は、図１４のＳ３４３２〜Ｓ３４３４とほとんど同じ処理である。Ｓ３５３２〜Ｓ３５３４の処理のうち、Ｓ３４３２〜Ｓ３４３４と異なる点は、図１４の処理ではＳ３５３２でＳ−ＶＯＬの存在するストレージ装置４００（４００−２）にＡＴＳ伝搬コマンドが送信されているのに対し、図１５のＳ３５３２では、ＭＰ５２１はＰ−ＶＯＬの存在するストレージ装置４００（４００−１）にＡＴＳ伝搬コマンドを送信する点、またＳ３５３３でストレージ装置４００−２ではなくストレージ装置４００−１（Ｐ−ＶＯＬの存在するストレージ装置）から応答を受信する点である。【０１８４】
Ｓ３５０の判定でＩ／ＯモードがＭｉｒｒｏｒであると判断された場合、Ｓ３５１２以降の処理が実行される。Ｓ３５１２、Ｓ３５１３の処理は、Ｓ３５３２、Ｓ３５３３と同じで、Ｐ−ＶＯＬの存在するストレージ装置４００−１にＡＴＳ伝搬コマンドを送信し、その処理結果を受信する処理が行われる。【０１８５】
Ｓ３５１４でＭＰ５２１は、キャッシュスロット確保処理を行い、その後ＡＴＳコマンドとともに受信したライトデータを、Ｓ３５１４で確保されたキャッシュ領域に格納する（Ｓ３５１５）。ＭＰ５１２はＳ３５１６で、ホスト１００に対してＧＯＯＤステータスを返信し、Ｓ３５１７ではＳ３５１４で確保したキャッシュスロットの解放処理を行う。その後ＭＰ５２１はストレージ装置４００−１に対して、データ排他解放コマンドを送信し、ストレージ装置４００−１にデータ排他解放処理を行わせ（Ｓ３５１８）、処理を終了する。【０１８６】
続いて、ストレージ装置４００がＡＴＳ伝搬コマンドを受信した時に行われる処理の流れを、図１６を用いて説明する。先に述べたとおり、ＡＴＳ伝搬コマンドを受信したストレージ装置４００は、ＡＴＳコマンドを受信した時と同様の処理を行う。【０１８７】
ストレージ装置４００がＡＴＳ伝搬コマンドを受信すると、ＭＰ５２１はアクセス対象論理ボリュームがＰ−ＶＯＬであるかＳ−ＶＯＬであるか判定する（Ｓ２００１）。アクセス対象論理ボリュームがＰ−ＶＯＬであった場合（Ｓ２００１：ＰＶＯＬ）、ＭＰ５２１はＳ２０１１で、アクセス対象ボリュームのペアボリューム（Ｓ−ＶＯＬ）のＩ／Ｏモードを判定する。ペアボリュームのＩ／Ｏモードは、（ＷＲＦＢＡコマンドと同様に）ＡＴＳ伝搬コマンドのパラメータに含まれているので、ＭＰ５２１はＡＴＳ伝搬コマンドのパラメータを参照することによって、Ｓ２０１１の判定を行える。【０１８８】
Ｓ２０１１の判定で、ペアボリュームのＩ／ＯモードがＭｉｒｒｏｒであった場合、ＭＰ５２１はＳ２０１２以降の処理を行う。Ｓ２０１２〜Ｓ２０１８は、Ｐ−ＶＯＬに対するデータコンペア及びライトを行う処理であり、図１４のＳ３４１１〜Ｓ３４１４と同じ処理が行われる。【０１８９】
Ｐ−ＶＯＬへのライト（Ｓ２０１８）が終了すると、ＭＰ５２１は、ＡＴＳ伝搬コマンドの発行元であるストレージ装置（たとえばＰ−ＶＯＬがストレージ装置４００−１に存在する場合には、ＡＴＳ伝搬コマンドの発行元ストレージ装置はストレージ装置４００−２である）に対して処理が終了したことを返答する。その後ＭＰ５２１は、ＡＴＳ伝搬コマンドの発行元であるストレージ装置から、データ排他解放コマンドが送信されて来るのを待つ。【０１９０】
Ｓ２０２０でＭＰ５２１がデータ排他解放コマンドを受信すると、ＭＰ５２１はデータ排他解放を実施する（Ｓ２０２１）。その後ＭＰ５２１はＳ２０１６で排他確保したキャッシュ領域を解放し（Ｓ２０２２）、処理を終了する。【０１９１】
アクセス対象論理ボリュームがＳ−ＶＯＬであった場合（Ｓ２００１：ＳＶＯＬ）、あるいはアクセス対象論理ボリュームがＰ−ＶＯＬだが、そのペアボリューム（Ｓ−ＶＯＬ）のＩ／ＯモードがＲｅｍｏｔｅであった場合（Ｓ２０１１：ｒｅｍｏｔｅ）、Ｓ２０３３以降の処理が行われる。Ｓ２０３３〜Ｓ２０３９は、先に説明したＳ２０１３〜Ｓ２０１９の処理と同じである。Ｓ２０３９の後、ＭＰ５２１はＳ２０３６で確保したキャッシュスロットを解放し（Ｓ２０４２）、処理を終了する。【０１９２】
（３−ｆ）ＷＲＩＴＥコマンド及びエラー時の処理
ここまで、ＷＲＩＴＥ  ＳＡＭＥ、ＵＮＭＡＰ、ＣＯＭＰＡＲＥ  ＡＮＤ  ＷＲＩＴＥコマンドを受信した時に、ストレージ装置４００が実施する処理の流れを説明してきたが、上で説明した処理は原則として、処理中にエラーが発生しなかった場合の処理である。ただし実際には、ストレージ装置４００の状態によっては処理中にエラーが発生することもあり、その場合にストレージ装置４００がどのような処理を行うか、以下で説明していく。【０１９３】
先にも述べたが、本発明の実施例に係るストレージ装置は、Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇ技術によって形成されるボリューム（論理ボリューム）をホスト１００に提供する。Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇ技術を用いると、（少なくとも初期状態では）物理記憶領域のサイズは論理ボリュームの総容量より小さくてもよい。ただし、物理記憶領域のサイズを論理ボリュームの総容量よりも少ない状態のままストレージ装置４００を運用していると、ホスト１００から論理ボリュームに対して多量のデータが書き込まれた時、論理ボリュームのページに割り当てるべき物理記憶領域がなくなるケースが発生し得る。その場合には、ストレージ装置４００はホスト１００からのライトデータを格納することができないため、ホスト１００に対して、物理記憶領域がなくなったためにライト等の処理が実行できない旨を報告する必要がある。【０１９４】
また、論理ボリュームのページに割り当てるべき物理記憶領域が全く存在しないわけではないが、ページに割り当て可能な（未使用の）物理記憶領域が少なくなった場合（たとえば所定の閾値以下になった場合）には、その旨をホスト１００に対して通知することが望ましい。以下では、未使用の物理記憶領域が全くなくなった場合、または未使用の物理記憶領域が少なくなった場合（未使用の物理記憶領域の量が、所定の閾値以下になった場合）にストレージ装置４００が行う処理について、ストレージ装置４００がＷＲＩＴＥコマンドを受信した時の処理を例にとって説明する。【０１９５】
図１７はホスト１００から受信したコマンドがＷＲＩＴＥであった場合の処理の流れを示した図である（図５のＳ４０に相当する処理である）。また、以下の説明では、ストレージ装置４００−１にＰ−ＶＯＬが存在し、ストレージ装置４００−２に、（ストレージ装置４００−１内の）Ｐ−ＶＯＬとペア関係にあるＳ−ＶＯＬが存在する場合を例にとって説明する。【０１９６】
Ｓ４１において、ＭＰ５２１はボリューム管理テーブルＴ３００を参照し、コマンドで指定されているＬＵＮを論理ボリューム番号に変換する。そしてペア管理テーブルＴ４００を参照し、変換された論理ボリューム番号で特定される論理ボリューム（アクセス対象ボリューム）がＰ−ＶＯＬであるかＳ−ＶＯＬであるかを判定する。【０１９７】
続いてＭＰ５２１は、アクセス対象ボリュームの状態がＢｌｏｃｋであるか否かを判定する（Ｓ４２，Ｓ４３）。アクセス対象ボリュームの状態がＢｌｏｃｋである場合には、ＭＰ５２１はエラーをホスト１００に返却し、処理を終了する。アクセス対象ボリュームの状態がＢｌｏｃｋでない場合、Ｓ４４またはＳ４５の処理を行う。【０１９８】
Ｓ４４またはＳ４５では、ボリューム管理テーブルＴ３００を参照し、アクセス対象ボリュームのＩ／Ｏモードを判定する。そしてＩ／Ｏモードに応じた処理を行う。以下、アクセス対象ボリュームのＩ／Ｏモードごとに、処理の流れを説明していく。【０１９９】
図１８は、アクセス対象ボリュームがＰ−ＶＯＬで、かつそのＩ／ＯモードがＭｉｒｒｏｒであった場合に、ストレージ装置４００が行う処理の流れを示している。Ｓ４２０１でＭＰ５２１は、ＷＲＩＴＥコマンドで指定される、論理ボリュームのアクセス対象領域の範囲全体のロックを確保する処理（データ排他確保処理）を行う。続いてＳ４２０２で、ＭＰ５２１はキャッシュスロット確保処理を行う。【０２００】
次にＭＰ５２１は、論理ボリュームのアクセス対象領域に該当するページに対して、新たに未使用の物理記憶領域を割り当てる必要があるか、かつ割り当てる必要がある場合に、未使用の物理記憶領域が存在するか否か判定する（Ｓ４２０３）。以下、未使用の物理記憶領域が存在しない状態のことを、「未使用物理記憶領域が枯渇している状態」（あるいは「未使用」を略して、「物理記憶領域が枯渇している状態」）、と呼ぶ。【０２０１】
物理記憶領域が枯渇していると判断された場合、ＭＰ５２１は、アクセス対象論理ボリュームのＩ／Ｏモード、ペアステータスを変更する（Ｓ４２２１）。具体的には、Ｐ−ＶＯＬのＩ／Ｏモードを「Ｂｌｏｃｋ」に変更する。さらに、ペアステータスを「ＳＵＳＰＥＮＤ」に変更する。同時にアクセス対象論理ボリュームのペアボリューム（Ｓ−ＶＯＬ）を有するストレージ装置４００−２には、ペアボリューム（Ｓ−ＶＯＬ）のＩ／Ｏモードを「Ｌｏｃａｌ」に変更し、ペアステータスを「ＳＵＳＰＥＮＤ」に変更するよう指示を出す。【０２０２】
Ｓ４２２２でＭＰ５２１は、ホスト１００に対して、エラーを返却する。先にも述べたが、処理中にエラーが発生したために処理が正常に終了しなかった場合には、ストレージ装置４００はホスト１００に「ＣＨＥＣＫ  ＣＯＮＤＩＴＩＯＮ」というステータスを返却する。この時、ＳＣＳＩの規格では、Ｓｅｎｓｅ  Ｋｅｙ，Ｓｅｎｓｅ  Ｃｏｄｅ等のエラーの詳細情報も返却される。Ｓ４２２２ではＭＰ５２１は詳細情報として、処理が中断されたことを示す、「ＡＢＯＲＴＥＤ  ＣＯＭＭＡＮＤ」というＳｅｎｓｅ  Ｋｅｙをホスト１００に返却する。以下、ＭＰ５２１がエラー詳細情報として「ＡＢＯＲＴＥＤ  ＣＯＭＭＡＮＤ」というＳｅｎｓｅ  Ｋｅｙをホスト１００に返却する場合には、「エラー（ＡＢＯＲＴ）を返却する」と表現する。【０２０３】
最後にＭＰ５２１はデータ排他解放処理、スロット解放処理を行い（Ｓ４２２３）、処理を終了する。【０２０４】
Ｓ４２０３の判定で、新たに未使用の物理記憶領域を割り当てる必要がない、または割り当てる必要があっても未使用の物理記憶領域が存在すると判定された場合には、ＭＰ５２１はＳ４２０４以降の処理を実行する。ＭＰ５２１はＳ４２０４で、ストレージ装置４００（アクセス対象ボリュームを有するストレージ装置）の未使用物理記憶領域の量が、所定の閾値以下になったか判定する。未使用物理記憶領域の量が所定の閾値以下であった場合（Ｓ４２０４：Ｙ）、ＭＰ５２１はホスト１００に対し、未使用物理記憶領域が所定の閾値以下であった旨を知らせるためのエラーを返却する（Ｓ４２１１）。本実施例に係るストレージ装置４００では、未使用物理記憶領域の量が所定の閾値以下であった場合に、Ｓｅｎｓｅ  Ｋｅｙとして「ＵＮＩＴ  ＡＴＴＥＮＴＩＯＮ」を返却し、また、未使用物理記憶領域の量が所定の閾値以下になったことをホスト１００が認識できるような詳細情報も、Ａｄｄｉｔｉｏｎａｌ  Ｓｅｎｓｅ  Ｃｏｄｅ等に含めて返送する。以下では、ホスト１００に対し未使用物理記憶領域が所定の閾値以下になった旨を返答する場合、「エラー（ＵＮＩＴ  ＡＴＴＥＮＴＩＯＮ）を返却する」または「エラー（ＵＡ）を返却する」と表現する。なお、上では、未使用物理記憶領域の量が、所定の閾値以下になったか判定する例を説明しているが、これ以外の判定方法を用いてもよい。たとえば、使用済みの物理記憶領域（すでに論理ボリュームのページに割り当てられている物理記憶領域）の量（あるいは物理記憶領域の使用率、つまり「使用済物理記憶領域量÷ページに割り当て可能な物理記憶領域の総量」）が、所定の上限値を超過したか否かを判定し、所定の上限値を超過した場合にその旨（使用済み物理記憶領域量が上限値に達した、あるいは上限値を超過した）を示すエラーをホスト１００に返却するようにしても良い。【０２０５】
その後ＭＰ５２１はキャッシュスロット解放処理を行い（Ｓ４２１３）、処理を終了する。【０２０６】
未使用物理記憶領域が所定の閾値以下であった場合（Ｓ４２０４：Ｙ）、Ｓ４２０５の処理が行われる。Ｓ４２０５では、ＭＰ５２１はＳ４２０２で確保されたキャッシュスロットに、ホスト１００からＷＲＩＴＥコマンドとともに送信されてきたライトデータを格納する。【０２０７】
Ｓ４２０６では、ＭＰ５２１はアクセス対象ボリュームのペアボリューム（Ｓ−ＶＯＬ）を有するストレージ装置４００−２に対してＷＲＦＢＡコマンドを送信することで、Ｓ−ＶＯＬへのライトデータの格納を指示し、ストレージ装置４００−２からの応答を待つ。なお、ストレージ装置４００−２は、Ｓ−ＶＯＬに割り当てるべき未使用の物理記憶領域が枯渇していたために、Ｓ−ＶＯＬへのデータ書き込みに失敗した場合には、その旨を応答情報としてストレージ装置４００−１に返却する。またストレージ装置４００−２は、Ｓ−ＶＯＬに割り当てるべき未使用の物理記憶領域が所定の閾値以下になっていた場合にも、その旨を応答情報としてストレージ装置４００−１に返却する。【０２０８】
Ｓ４２０７でＭＰ５２１がストレージ装置４００−２からの応答を受信すると、ＭＰ５２１は応答内容を参照し、ストレージ装置４００−２においてＳ−ＶＯＬに割り当てるべき未使用の物理記憶領域が枯渇したか否かを判定する（Ｓ４２０８）。【０２０９】
ストレージ装置４００−２からの応答情報の中に、Ｓ−ＶＯＬに割り当てるべき未使用の物理記憶領域が枯渇した旨の情報が含まれている場合、ＭＰ５２１はＳ４２３１以降の処理を行う。Ｓ４２３１では、ＭＰ５２１はアクセス対象論理ボリュームのＩ／Ｏモードを変更する。具体的には、Ｐ−ＶＯＬのＩ／Ｏモードを「Ｌｏｃａｌ」に変更する。またペアステータスを「ＳＵＳＰＥＮＤ」に変更する。さらにアクセス対象論理ボリュームのペアボリューム（Ｓ−ＶＯＬ）を有するストレージ装置４００−２に対し、ペアボリューム（Ｓ−ＶＯＬ）のＩ／Ｏモードを「Ｂｌｏｃｋ」に変更し、ペアステータスを「ＳＵＳＰＥＮＤ」に変更するよう指示を出す。【０２１０】
Ｓ４２３２でＭＰ５２１は、ホスト１００に対して、エラー（ＡＢＯＲＴ）を返却し、Ｓ４２３３でデータ排他解放処理、スロット解放処理を行い、処理を終了する。なお、各ステップの処理順は必ずしも上で説明したものに限定されない。たとえばデータ排他解放処理をＳ４２３１またはＳ４２３２の前に行うようにしてもよい。【０２１１】
Ｓ４２０８において、Ｓ−ＶＯＬに割り当てるべき未使用の物理記憶領域が枯渇していないと判定された場合、Ｓ４２０９以降の処理が行われる。ＭＰ５２１はデータ排他解放処理（Ｓ４２０９）を行い、ホスト１００に対してＧＯＯＤステータスを返却し（Ｓ４２１２）、スロット解放処理（Ｓ４２１３）を行った後、処理を終了する。【０２１２】
続いて、アクセス対象ボリュームがＰ−ＶＯＬで、かつそのＩ／ＯモードがＬｏｃａｌであった場合にストレージ装置４００が行う処理の流れを、図１９を用いて説明する。まずＭＰ５２１はＳ４３０１で、キャッシュスロット確保処理を行う。【０２１３】
次にＭＰ５２１は、物理記憶領域が枯渇しているか判定する（Ｓ４３０２）。物理記憶領域が枯渇していると判断された場合（Ｓ４３０２：Ｙ）、ＭＰ５２１は、ホスト１００に対してエラーを返却し（Ｓ４３１１）、処理を終了する。Ｓ４３１１で返却される詳細情報の中には、物理記憶領域が枯渇した旨を示す情報が含まれている。以下、このように、物理記憶領域が枯渇した旨を示す情報をホスト１００に返却することを、「エラー（Ｓｔｕｎ）を返却する」と呼ぶ。一方、Ｉ／ＯモードがＭｉｒｒｏｒの場合に、物理記憶領域が枯渇していた場合（Ｓ４２０３：Ｙ、あるいはＳ４２０８：Ｙに該当するケース）、ペアボリューム（たとえばＳ−ＶＯＬ）の物理記憶領域がまだ枯渇していない可能性がある。つまりＰ−ＶＯＬと同一内容のデータが格納されているＳ−ＶＯＬに対する書き込みはできる可能性があるので、エラー（Ｓｔｕｎ）の返却は行われない。【０２１４】
物理記憶領域が枯渇していない場合（Ｓ４３０２：Ｎ）、ＭＰ５２１はＳ４３０４で、ストレージ装置４００（アクセス対象ボリュームを有するストレージ装置）の未使用物理記憶領域の量が、所定の閾値以下になったか判定する。未使用物理記憶領域が所定の閾値以下であった場合（Ｓ４３０４：Ｙ）、ＭＰ５２１はホスト１００に対してエラー（ＵＡ）を返却する（Ｓ４３１５）。その後ＭＰ５２１はキャッシュスロット解放処理を行い（Ｓ４３０６）、処理を終了する。【０２１５】
未使用物理記憶領域が所定の閾値よりも多く存在する場合（Ｓ４３０４：Ｎ）には、ＭＰ５２１は、Ｓ４３０１で確保されたキャッシュスロットにライトデータを格納し（Ｓ４３０３）、ホスト１００に対し、ライト処理が正常終了した旨を返却する（Ｓ４３０５）。その後ＭＰ５２１はキャッシュスロット解放処理を行い（Ｓ４３０６）、処理を終了する。【０２１６】
続いて、アクセス対象ボリュームがＰ−ＶＯＬで、かつそのＩ／ＯモードがＲｅｍｏｔｅであった場合にストレージ装置４００が行う処理の流れを、図２０を用いて説明する。まずＭＰ５２１はアクセス対象ボリュームのペアボリューム（Ｓ−ＶＯＬ）を有するストレージ装置（ストレージ装置４００−２）に対し、ＷＲＦＢＡコマンドを送信することで、Ｓ−ＶＯＬへのライトデータの書き込みを指示し（Ｓ４４０１）、その後ストレージ装置４００−２からの応答を待つ。【０２１７】
Ｓ４４０２でＭＰ５２１がストレージ装置４００−２からの応答を受信すると、ＭＰ５２１は応答内容を参照し、ストレージ装置４００−２においてＳ−ＶＯＬに割り当てるべき物理記憶領域が枯渇したか否かを判定する（Ｓ４４０３）。Ｓ−ＶＯＬに割り当てるべき物理記憶領域が枯渇したと判定された場合（Ｓ４４０３：Ｙ）、ＭＰ５２１はホスト１００にエラー（Ｓｔｕｎ）を返却し（Ｓ４４０５）、処理を終了する。【０２１８】
Ｓ−ＶＯＬに割り当てるべき物理記憶領域が枯渇していないと判定された場合（Ｓ４４０３：Ｎ）、ＭＰ５２１はストレージ装置４００−２において未使用の物理記憶領域が所定の閾値以下になっているか判定する（Ｓ４４０４）。未使用物理記憶領域が所定の閾値以下になっている場合（Ｓ４４０４：Ｙ）、ＭＰ５２１はホスト１００に対してエラー（ＵＡ）を返却し（Ｓ４４１１）、処理を終了する。未使用物理記憶領域が所定の閾値以下になっていない場合（Ｓ４４０４：Ｎ）、ＭＰ５２１はホスト１００にＧＯＯＤステータスを返却して（Ｓ４４０５）、処理を終了する。【０２１９】
図２１は、アクセス対象ボリュームがＳ−ＶＯＬで、かつそのＩ／ＯモードがＭｉｒｒｏｒであった場合に、ストレージ装置４００が行う処理の流れを示している（以下では、ストレージ装置４００−２が処理を行う場合を例にとって説明する）。【０２２０】
Ｓ６２０１では、ＭＰ５２１はアクセス対象ボリュームのペアボリューム（Ｐ−ＶＯＬ）を有するストレージ装置４００−１に対してＷＲＦＢＡコマンドを送信することで、Ｐ−ＶＯＬへのライトデータの格納を指示し、ストレージ装置４００−１からの応答を待つ。なお、ストレージ装置４００−２と同様に、ストレージ装置４００−１は、Ｐ−ＶＯＬに割り当てるべき物理記憶領域が枯渇していたために、Ｐ−ＶＯＬへのデータ書き込みに失敗した場合には、その旨を応答情報としてストレージ装置４００−２に返却する。またストレージ装置４００−１は、Ｐ−ＶＯＬに割り当てるべき未使用物理記憶領域が所定の閾値以下になっていた場合にも、その旨を応答情報としてストレージ装置４００−２に返却する。【０２２１】
Ｓ６２０２でＭＰ５２１がストレージ装置４００−１からの応答を受信すると、ＭＰ５２１は応答内容を参照し、ストレージ装置４００−１においてＰ−ＶＯＬに割り当てるべき未使用の物理記憶領域が枯渇したか否かを判定する（Ｓ６２０３）。【０２２２】
Ｓ６２０３の判定で、物理記憶領域が枯渇したと判定された場合（Ｓ６２０３：Ｙ）、ＭＰ５２１はＳ６２２１以降の処理を行う。Ｓ６２２１でＭＰ５２１は、アクセス対象論理ボリュームのＩ／Ｏモードを変更する。具体的には、Ｓ−ＶＯＬのＩ／Ｏモードを「Ｌｏｃａｌ」に変更する。さらに、ペアステータスを「ＳＵＳＰＥＮＤ」に変更する。そしてＳ６２２２でＭＰ５２１はホスト１００にエラー（ＡＢＯＲＴ）を返却し、処理を終了する。【０２２３】
一方物理記憶領域が枯渇していないと判定された場合（Ｓ６２０３：Ｎ）、ＭＰ５２１はキャッシュスロット確保処理を行う（Ｓ６２０４）。続いて、ストレージ装置４００−２でＳ−ＶＯＬに割り当てるべき未使用物理記憶領域が枯渇しているか否か判定し（Ｓ６２０５）、枯渇している場合には（Ｓ６２０５：Ｙ）、Ｓ６２３１以降の処理を行う。【０２２４】
Ｓ６２３１でＭＰ５２１は、アクセス対象論理ボリュームのＩ／Ｏモードを変更する。具体的には、Ｓ−ＶＯＬのＩ／Ｏモードを「Ｂｌｏｃｋ」に変更する。そしてＳ６２３２でＭＰ５２１はホスト１００にエラー（ＡＢＯＲＴ）を返却し、Ｓ６２３３でキャッシュスロット解放処理を行う。【０２２５】
Ｓ６２３４でＭＰ５２１はストレージ装置４００−１に対してデータ排他解放コマンドの送信を行う。なお、Ｓ６２３４でＭＰ５２１は、データ排他解放コマンドのパラメータに、修復フラグをＯＮする旨の指示を含めたデータ排他解放コマンドを作成する。そしてこのデータ排他解放コマンドを受信したストレージ装置４００−１では、ボリューム管理テーブルＴ３００の修復フラグ（Ｔ４０７）をＯＮし（１を格納する）、位置（Ｔ４０８）にＷＲＩＴＥコマンド（またはＷＲＦＢＡコマンド）で指定されているアクセス対象領域の情報を格納する。これはＰ−ＶＯＬにはＷＲＩＴＥコマンドで指定されたデータが書き込まれたが、Ｓ−ＶＯＬにはデータが書き込まれず、Ｐ−ＶＯＬとＳ−ＶＯＬの内容が不一致になったためである。【０２２６】
修復フラグ（Ｔ４０７）がＯＮに設定された領域については、Ｓ−ＶＯＬに割り当てるべき未使用物理記憶領域の枯渇状態が解消された後で、当該領域に対するアクセス要求をホスト１００から受信した時に、Ｐ−ＶＯＬの内容をＳ−ＶＯＬに反映する処理が行われる。これにより再びＰ−ＶＯＬとＳ−ＶＯＬの内容が一致した（同期された）状態にすることができる。【０２２７】
Ｓ−ＶＯＬに割り当てるべき未使用物理記憶領域が枯渇していない場合（Ｓ６２０５：Ｎ）、ＭＰ５２１は未使用物理記憶領域の量の判定を行い（Ｓ６２０６）、未使用物理記憶領域が所定の閾値以下である場合（Ｓ６２０６：Ｙ）には、ＭＰ５２１はホスト１００にエラー（ＵＡ）を返却する（Ｓ６２１０）。その後ＭＰ５２１はスロット解放（Ｓ６２３３）、データ排他解放コマンドの送信（Ｓ６２３４）を行って、処理を終了する。【０２２８】
未使用物理記憶領域が所定の閾値よりも多い場合（Ｓ６２０６：Ｎ）には、ライト処理を行う（Ｓ６２１１）とともに、ホスト１００にＧＯＯＤステータスを返却する（Ｓ６２１２）。その後ＭＰ５２１は、キャッシュスロット解放処理（Ｓ６２１３）、及びストレージ装置４００−１に対してデータ排他解放コマンドの送信を行い（Ｓ６２１４）、処理を終了する。なおＳ６２１４での処理はＳ６２３４の処理と異なり、データ排他解放コマンドのパラメータには修復フラグをＯＮする旨の指示は含まれない。【０２２９】
続いて、アクセス対象ボリュームがＳ−ＶＯＬで、かつそのＩ／ＯモードがＭｉｒｒｏｒでない場合に、ストレージ装置４００が行う処理の流れを説明する。まずアクセス対象ボリュームがＳ−ＶＯＬで、かつそのＩ／ＯモードがＬｏｃａｌであった場合の処理は図１９と同じであるため、説明を省略する。【０２３０】
続いてアクセス対象ボリュームがＳ−ＶＯＬで、かつそのＩ／ＯモードがＲｅｍｏｔｅであった場合について、図２２を用いて説明する。この処理は図２０の処理とほとんど同様の処理が行われる【０２３１】
まずＳ６４０１でＭＰ５２１はアクセス対象ボリュームのペアボリューム（Ｐ−ＶＯＬ）を有するストレージ装置（ストレージ装置４００−１）に対し、ＷＲＦＢＡコマンドを送信することで、Ｐ−ＶＯＬへのライトデータの書き込みを指示し、その後ストレージ装置４００−１からの応答を待つ。【０２３２】
Ｓ６４０２でＭＰ５２１がストレージ装置４００−１からの応答を受信すると、ＭＰ５２１は応答内容を参照し、ストレージ装置４００−１においてＰ−ＶＯＬに割り当てるべき物理記憶領域が枯渇しているか否かを判定する（Ｓ６４０３）。Ｐ−ＶＯＬに割り当てるべき物理記憶領域が枯渇していると判定された場合（Ｓ６４０３：Ｙ）、ＭＰ５２１はホスト１００にエラー（Ｓｔｕｎ）を返却し、処理を終了する。【０２３３】
Ｐ−ＶＯＬに割り当てるべき物理記憶領域が枯渇していないと判定された場合（Ｓ６４０３：Ｎ）、ＭＰ５２１はストレージ装置４００−１において、未使用物理記憶領域が所定の閾値以下になっているか判定する（Ｓ６４０４）。未使用物理記憶領域が所定の閾値以下になっている場合（Ｓ６４０４：Ｙ）、ＭＰ５２１はホスト１００に対し、エラー（ＵＡ）を返却し（Ｓ６４１１）、処理を終了する。未使用物理記憶領域が所定の閾値以下になっていない場合（Ｓ６４０４：Ｎ）、ＭＰ５２１はホスト１００にＧＯＯＤステータスを返却して（Ｓ６４０５）、処理を終了する。【０２３４】
続いて、ストレージ装置４００がＷＲＦＢＡコマンドを受信した時に行われる処理の流れを、図２３、図２４を用いて説明する。なお、ストレージ装置４００がＷＲＦＢＡコマンドを受信した時に行われる処理の流れについては、上で図８を用いて説明しているが、図２３、図２４に記載の処理は、図８の処理に対して物理記憶領域の枯渇が検出された場合の処理が追加された点のみが異なり、それ以外の点は同じである。【０２３５】
なお本実施例では、ストレージ装置４００がＷＲＦＢＡコマンドに係る処理を実行した後に、処理が正常に行われた旨、あるいはエラーが発生した旨を通知する際には、ＳＣＳＩの規格に従ったステータスを返送することにしている。そのため、処理が正常に行われた場合には、ＧＯＯＤステータスが返却される。また、ストレージ装置４００の未使用物理記憶領域が枯渇していた場合には、エラー（Ｓｔｕｎ）が返却される。また、ストレージ装置４００の未使用物理記憶領域が所定の閾値以下であった場合には、エラー（ＵＮＩＴ  ＡＴＴＥＮＴＩＯＮ）が返却される。ただし、ＷＲＦＢＡコマンドはストレージ装置４００間でのみ用いられる、独自に定義されたコマンドであるから、コマンド発行元のストレージ装置４００に返却するステータスやエラー情報に、独自の情報を用いるようにしてもよい。【０２３６】
図２４において、物理記憶領域が枯渇しているかの判定（Ｓ５０１４，Ｓ５０１５）が、キャッシュスロット確保処理（Ｓ１０１４，Ｓ１０２２）の後に設けられる。そしてＳ−ＶＯＬのＩ／ＯモードがＭｉｒｒｏｒであり、かつ物理記憶領域が枯渇していると判定された場合（Ｓ５０１４：Ｙ）には、ＷＲＦＢＡコマンドを受信したストレージ装置４００のＭＰ５２１は、アクセス対象ボリューム（Ｐ−ＶＯＬ）のＩ／Ｏモードを「Ｂｌｏｃｋ」に変更し（Ｓ５２２１）、コマンド発行元のストレージ装置４００に対してエラー（Ｓｔｕｎ）を返却（Ｓ５２２２）、し、最後に、キャッシュスロット解放処理及びデータ排他解放処理を実施し（Ｓ５２２３）、処理を終了する。また、Ｓ−ＶＯＬのＩ／ＯモードがＲｅｍｏｔｅであり、かつ物理記憶領域が枯渇していると判定された場合（Ｓ５０１５：Ｙ）にも同様に、コマンド発行元のストレージ装置４００に対してエラー（Ｓｔｕｎ）を返却（Ｓ５２２２）、し、最後に、キャッシュスロット解放処理（Ｓ５２２３）を実施して処理を終了する。ただし、Ｉ／Ｏモードの変更（Ｓ５２２１）は行われない。【０２３７】
また、受信したＷＲＦＢＡコマンドで指定されているアクセス対象論理ボリュームがＰ−ＶＯＬで、かつ当該Ｐ−ＶＯＬのペアボリューム（Ｓ−ＶＯＬ）のＩ／ＯモードがＭｉｒｒｏｒの場合（Ｓ１０１１：ｍｉｒｒｏｒ）、物理記憶領域が枯渇していないときにはＰ−ＶＯＬへのライト処理（Ｓ１０１５）が行われる。そしてＰ−ＶＯＬへのライト処理（Ｓ１０１５）が終了した後、Ｓ−ＶＯＬを有するストレージ装置４００からデータ排他解放コマンドの受信を待つ（Ｓ１０１７）。【０２３８】
ここで、Ｓ−ＶＯＬを有するストレージ装置４００において、物理記憶領域が枯渇している場合があり得る。その場合にはＳ１０１７で受信するデータ排他解放コマンドには、物理記憶領域が枯渇していたためにＳ−ＶＯＬへのデータ書き込みが失敗した旨の通知が含まれている。Ｓ１０１７で、Ｓ−ＶＯＬへのデータ書き込みが失敗した旨の通知を受信した場合には、ＭＰ５２１はデータ排他解放処理（Ｓ１０１８）を実行するとともに、Ｓ５０１８で、アクセス対象ボリューム（Ｐ−ＶＯＬ）のＩ／Ｏモードを「Ｌｏｃａｌ」に変更する。またＳ５０１８では、ＭＰ５２１はボリューム管理テーブルＴ３００内のＰ−ＶＯＬに該当する行について、修復フラグ（Ｔ４０７）に１を格納し、修復が必要な領域の情報を、位置（Ｔ４０８）に格納する。【０２３９】
受信したＷＲＦＢＡコマンドで指定されているアクセス対象論理ボリュームがＰ−ＶＯＬで、かつ当該Ｐ−ＶＯＬのペアボリューム（Ｓ−ＶＯＬ）のＩ／ＯモードがＲｅｍｏｔｅの場合（Ｓ１０１１：ｒｅｍｏｔｅ）、物理記憶領域が枯渇しているかの判定（Ｓ５０１５）の後に、未使用物理記憶領域の量が所定の閾値以下であるか否かの判定が行われる（Ｓ５０２２）。未使用物理記憶領域の量が所定の閾値以下でない場合（Ｓ５０２２：Ｎ）は、図８の処理と同様、ＭＰ５２１は、ライト処理（Ｓ１０２３）、ＷＲＦＢＡコマンドの発行元のストレージ装置４００に対する、処理完了した旨（ＧＯＯＤステータス）の返答（Ｓ１０２４）、キャッシュスロットの解放処理（Ｓ１０２５）を行って、処理を終了する。【０２４０】
一方Ｓ５０２２の判定で、未使用物理記憶領域が所定の閾値以下であると判定された場合（Ｓ５０２２：Ｙ）、ＭＰ５２１はＷＲＦＢＡコマンドの発行元のストレージ装置４００（４００−２）に対して、エラー（ＵＮＩＴ  ＡＴＴＥＮＴＩＯＮ）を返却することで、未使用物理記憶領域の量が所定の閾値以下になったことを通知する（Ｓ５０２４）。そしてこの場合、ライト処理（Ｓ１０２３）は行われない。【０２４１】
その後ＭＰ５２１はキャッシュスロットの解放処理（Ｓ１０２５）を行って、処理を終了する。以上が図８との相違点であり、その他の点は図８で説明した処理と同じである。【０２４２】
また、受信したＷＲＦＢＡコマンドで指定されているアクセス対象論理ボリュームがＳ−ＶＯＬである場合（Ｓ１００１：ＳＶＯＬ）、図２４に記載のＳ１０５３以降の処理が行われる。この処理も図８に記載のＳ１０５３以降の処理と類似している。以下、図８の処理と異なる点を中心に説明する。【０２４３】
図２３に記載の処理と同様に、物理記憶領域が枯渇しているか否かの判定（Ｓ５１０２）が、キャッシュスロット確保処理（Ｓ１０２２）の後に設けられる。そして物理記憶領域が枯渇していると判定された場合（Ｓ５１０２：Ｙ）には、ＷＲＦＢＡコマンドを受信したストレージ装置４００のＭＰ５２１は、Ｐ−ＶＯＬのＩ／Ｏモードを判定する（Ｓ５１１０）。Ｓ５１１０の判定において、Ｉ／ＯモードがＭｉｒｒｏｒであった場合、ＭＰ５２１は、アクセス対象ボリューム（Ｓ−ＶＯＬ）のＩ／Ｏモードを「Ｂｌｏｃｋ」に変更し（Ｓ５１１１）、コマンド発行元のストレージ装置４００に対してエラー（Ｓｔｕｎ）を返却（Ｓ５１１２）する。最後にＭＰ５２１は、キャッシュスロット解放処理を実施し（Ｓ５１１３）、処理を終了する。また、Ｓ５１１０の判定において、Ｉ／ＯモードがＲｅｍｏｔｅであった場合には、ＭＰ５２１はＳ５１１２、Ｓ５１１３を実行するが、Ｓ５１１１（Ｉ／Ｏモードの変更）は行われない。【０２４４】
一方、Ｓ５１０２の判定で、物理記憶領域が枯渇していないと判定された場合（Ｓ５１０２：Ｎ）、未使用物理記憶領域が所定の閾値以下であるか否かの判定が行われる（Ｓ５１２２）。未使用物理記憶領域が所定の閾値以下でない場合（Ｓ５１２２：Ｎ）は、図８の処理と同様、ＭＰ５２１は、ライト処理（Ｓ１０２３）、ＷＲＦＢＡコマンドの発行元のストレージ装置４００に対する、処理完了した旨（ＧＯＯＤステータス）の返答（Ｓ１０２４）、キャッシュスロットの解放処理（Ｓ１０２５）を行って、処理を終了する。【０２４５】
一方Ｓ５０２２の判定で、未使用物理記憶領域が所定の閾値以下であると判定された場合（Ｓ５０２２：Ｙ）、ＭＰ５２１はＷＲＦＢＡコマンドの発行元のストレージ装置４００（４００−１）に対して、エラー（ＵＮＩＴ  ＡＴＴＥＮＴＩＯＮ）を返却することで、未使用物理記憶領域が所定の閾値以下になったことを通知する（Ｓ５１２４）。そしてこの場合、ライト処理は行われない。【０２４６】
その後ＭＰ５２１はキャッシュスロットの解放処理（Ｓ１０２５）を行って、処理を終了する。それ以外の点は、図８で説明した処理と同じである。【０２４７】
以上が、ストレージ装置４００がホスト１００からＷＲＩＴＥコマンドを受信した時に行う処理の流れである。参考までに、ホスト１００からＰ−ＶＯＬ、Ｓ−ＶＯＬのボリュームペアに対してＷＲＩＴＥコマンドを発行した際に、物理記憶領域が枯渇した場合の計算機システムの状態の変化について、図２７、図２８を用いて説明する。【０２４８】
図２７は、ホスト１００がＰ−ＶＯＬにＷＲＩＴＥコマンドを発行した際に、Ｐ−ＶＯＬのあるストレージ装置４００で物理記憶領域が枯渇した場合（ただしＳ−ＶＯＬのあるストレージ装置４００では物理記憶領域は枯渇していない）の計算機システムの状態の変化を説明する図である。なお、以下で説明する例は、ホスト１００がＷＲＩＴＥコマンドを発行する前のボリュームペアのペアステータスは「Ｐａｉｒ」であった場合の例である。また、Ｐ−ＶＯＬはストレージ装置４００−１に、Ｓ−ＶＯＬはストレージ装置４００−２に存在している構成とする。【０２４９】
ホスト１００がＷＲＩＴＥコマンドを発行する前の、計算機システムの状態を［状態１］と呼ぶ。状態１で、Ｐ−ＶＯＬに対するＷＲＩＴＥコマンドを受信した時、ストレージ装置４００−１では図１８で説明した処理フローに従って処理が行われる。物理記憶領域が枯渇していることを検知すると（図１８  Ｓ４２０３）、ホストにはエラー（ＡＢＯＲＴ）を返却する（図１８  Ｓ４２２２）。またＰ−ＶＯＬのＩ／ＯモードはＢｌｏｃｋに、Ｓ−ＶＯＬのＩ／ＯモードはＬｏｃａｌに変更され、またペアステータスはＳｕｓｐｅｎｄに変更（図１８  Ｓ４２２１）された状態になる（図２７  ［状態２］）。【０２５０】
［状態２］ではＰ−ＶＯＬのＩ／ＯモードがＢｌｏｃｋになっているため、ホスト１００はＰ−ＶＯＬへのコマンド発行は行わなくなる（ホスト１００は、Ｐ−ＶＯＬへのコマンド発行をリトライ（再試行）することはある。ただし、Ｐ−ＶＯＬのＩ／ＯモードがＢｌｏｃｋになっている場合、ストレージ装置４００はホスト１００にエラーを返却するとともに、エラー詳細情報（Ｓｅｎｓｅ  Ｋｅｙ等）として、ＮＯＴ  ＲＥＡＤＹ等、Ｐ−ＶＯＬにアクセス不可能である旨の情報を返却する。そのため、ホスト１００はＰ−ＶＯＬへのコマンド発行は行わなくなる）。代わりにホスト１００（の交替パスソフト１１１１）は、Ｓ−ＶＯＬに対してＩ／Ｏ要求を発行する。Ｓ−ＶＯＬのあるストレージ装置４００−２では物理記憶領域は枯渇していないため、Ｓ−ＶＯＬへのライト処理（図１９に記載の処理）を実行する。つまりＰ−ＶＯＬのあるストレージ装置４００−１で物理記憶領域が枯渇しても、Ｓ−ＶＯＬのあるストレージ装置４００−２で物理記憶領域が枯渇していない場合には、ホスト１００は業務継続が可能である。【０２５１】
ただしこの後、Ｓ−ＶＯＬへのライト処理が何回か行われた結果、ストレージ装置４００−２でも物理記憶領域は枯渇した場合には、エラーステータス（Ｓｔｕｎ）が返却される（図２７  ［状態３］）。エラーステータス（Ｓｔｕｎ）が返却されることにより、計算機システムのユーザは、ストレージ装置４００で物理記憶領域が枯渇していることを認識することができる。そのためユーザは、ストレージ装置４００に物理記憶領域を追加することで枯渇状態を解消し、ボリュームペアの状態を正常な状態（Ｐａｉｒ状態）に復旧させることができる。【０２５２】
また、ホスト１００がＰ−ＶＯＬにＷＲＩＴＥコマンドを発行した際に、Ｓ−ＶＯＬのあるストレージ装置４００で物理記憶領域が枯渇した場合（ただしＰ−ＶＯＬのあるストレージ装置４００では物理記憶領域は枯渇していない）には、図２８で示されている［状態１’］〜［状態３’］のように、計算機システムの状態が変化する。以下、図２８を用いて状態変化の様子を説明する。なお、以下で説明する例は、ホスト１００がＷＲＩＴＥコマンドを発行する前のボリュームペアのペアステータスは「Ｐａｉｒ」であった場合の例である。また、Ｐ−ＶＯＬはストレージ装置４００−１に、Ｓ−ＶＯＬはストレージ装置４００−２に存在している構成とする。【０２５３】
［状態１’］は、ホスト１００がＷＲＩＴＥコマンドを発行する前の、計算機システムの状態である。状態１’で、Ｐ−ＶＯＬに対するＷＲＩＴＥコマンドを受信した時、ストレージ装置４００−１では図１８で説明した処理フローに従って処理が行われる。Ｓ−ＶＯＬのあるストレージ装置４００−２で物理記憶領域が枯渇していることを検知すると（図１８  Ｓ４２０８）、ストレージ装置４００−１はホスト１００にエラーステータス（ＡＢＯＲＴ）を返却する（図１８  Ｓ４２３２）。またＰ−ＶＯＬのＩ／ＯモードはＬｏｃａｌに、Ｓ−ＶＯＬのＩ／ＯモードはＢｌｏｃｋに変更され、またペアステータスはＳｕｓｐｅｎｄに変更（図１８  Ｓ４２３１）された状態になる（図２７  ［状態２’］）。【０２５４】
［状態２’］ではＰ−ＶＯＬのＩ／ＯモードがＢｌｏｃｋになっていないため、ホスト１００はＰ−ＶＯＬへのＷＲＩＴＥコマンドの発行をリトライする。Ｐ−ＶＯＬのＩ／ＯモードがＬｏｃａｌで、またペアステータスはＳｕｓｐｅｎｄ（Ｓ−ＶＯＬへのコピーが行われない）状態であるため、Ｐ−ＶＯＬのあるストレージ装置４００−１は、ホスト１００からのＷＲＩＴＥコマンドを受け付けると、Ｐ−ＶＯＬへの書き込みを行い、ホスト１００にはＧｏｏｄステータスを返却するよう動作する。【０２５５】
つまり図２７の場合と同様、Ｓ−ＶＯＬのあるストレージ装置４００−２で物理記憶領域が枯渇しても、Ｐ−ＶＯＬのあるストレージ装置４００−１で物理記憶領域が枯渇していない場合には、ホスト１００は業務継続が可能である。もし仮に［状態２］と同様に、Ｐ−ＶＯＬのＩ／ＯモードがＢｌｏｃｋに変更されたとすると、ホスト１００（の交替パスソフト１１１１）は、Ｓ−ＶＯＬに対してＩ／Ｏ要求を発行する。しかし［状態２’］の場合、Ｓ−ＶＯＬのあるストレージ装置４００−２では物理記憶領域が枯渇しているため、ＷＲＩＴＥコマンドを受け付けることができず、ホスト１００は業務継続できなくなる。そのため、本発明の実施例に係るストレージ装置４００は、計算機システムの状態が［状態１’］から［状態２’］に遷移する際、Ｐ−ＶＯＬのＩ／ＯモードをＬｏｃａｌに設定している。また、上ではホスト１００がＰ−ＶＯＬに対して、ＷＲＩＴＥコマンドなどのＩ／Ｏコマンドを発行する例を説明したが、ホスト１００がＳ−ＶＯＬに対してＩ／Ｏコマンドを発行する場合でも、計算機システムでは同様のことが行われる。【０２５６】
上では、（未使用）物理記憶領域が枯渇した場合の例を説明したが、それ以外の障害が発生した場合にも同様に業務継続が可能である。また、障害の種類によっては、障害の発生したボリュームのＩ／ＯモードをＢｌｏｃｋにする代わりに、Ｒｅｍｏｔｅに変更する方法を採ってもよい。たとえば図２７［状態１］において、Ｐ−ＶＯＬの物理記憶領域（ドライブ９００）に障害が発生して、Ｐ−ＶＯＬへのアクセスができなくなった場合（ただしそれ以外の構成要素は正常で、Ｐ−ＶＯＬのあるストレージ装置４００−１も正常に稼働している場合）、Ｐ−ＶＯＬのＩ／ＯモードをＲｅｍｏｔｅに、Ｓ−ＶＯＬのＩ／ＯモードをＬｏｃａｌに変更してもよい。【０２５７】
このようにした場合、ホスト１００がＰ−ＶＯＬへのアクセス（たとえばＷＲＩＴＥ）を再試行すると、Ｐ−ＶＯＬのＩ／ＯモードがＲｅｍｏｔｅであるので、（ストレージ装置４００−１からストレージ装置４００−２を経由して）Ｓ−ＶＯＬにＷＲＩＴＥコマンドに係るデータが書き込まれる。つまりホスト１００は業務継続が可能であることに加えて、アクセスパスの交替もする必要がない。【０２５８】
もちろんこの場合、ホスト１００はＳ−ＶＯＬ（ストレージ装置４００−２）にアクセスしてもよい。つまりホスト１００は、ホスト１００からＰ−ＶＯＬへのアクセスパスとホスト２００からＰ−ＶＯＬへのアクセスパスの両方を用いることができるため、アクセスパスの負荷分散も可能になる。【０２５９】
以上が、ストレージ装置４００の未使用物理記憶領域が枯渇、あるいは未使用物理記憶領域の量が所定の閾値以下になった場合に行われる処理の説明である。なお上ではストレージ装置４００がＷＲＩＴＥコマンドを受信した時を例にとって説明したが、それ以外の更新系コマンドを受け付けた場合（たとえば上で説明してきたＷＲＩＴＥ  ＳＡＭＥ，ＵＮＭＡＰ，ＡＴＳコマンド）でも同様に、未使用物理記憶領域が枯渇、あるいは未使用物理記憶領域の量が所定の閾値以下になった場合に対応できることが望ましい。【０２６０】
上で説明してきた処理（ＷＲＩＴＥコマンドを受信した時の処理）では、論理ボリューム（正確には、論理ボリュームへのライトデータ一時格納用に確保されたキャッシュスロット）へのデータ書き込み処理（図１８  Ｓ４２０５等）の前、及びペアボリュームのあるストレージ装置４００から応答を受信する処理（図１８  Ｓ４２０７等）の後、ストレージ装置４００の未使用物理記憶領域が枯渇、あるいは未使用物理記憶領域の量が所定の閾値以下になった場合の処理（以下、これを枯渇エラー処理と呼ぶ）が挿入されている。そのため、他のコマンドに係る処理が行われる時にも、未使用物理記憶領域が枯渇、あるいは未使用物理記憶領域の量が所定の閾値以下になった場合に対応できるようにするためには、論理ボリュームへのデータ書き込み処理（たとえば図６  Ｓ１４１４等）の前、及びペアボリュームのあるストレージ装置４００から応答を受信する処理（図１８  Ｓ１４１６等）の後に、枯渇エラー処理を挿入すればよい。【０２６１】
以下、ＷＲＩＴＥ  ＳＡＭＥコマンドを受け付けた場合の処理（図６〜７）で、枯渇エラー処理が挿入される箇所を具体的に列挙する。なお、ＷＲＦＢＡコマンドを受け付けた場合は、図８に記載の処理に代えて、図２３、２４に記載の処理が行われるようにすればよい。
（１）  図６  Ｓ１４１４の前に、図１８のＳ４２０３、Ｓ４２２１〜Ｓ４２２３の処理、及び図１８のＳ４２０４、Ｓ４２１１〜Ｓ４２１３の処理が挿入される。
（２）  図６  Ｓ１４１６の後に、図１８のＳ４２０８、Ｓ４２３１〜Ｓ４２３３の処理が挿入される。
（３）  図６  Ｓ１４２３の前に、図１９のＳ４３０２、Ｓ４３１１の処理、及び図１９のＳ４３０４、Ｓ４３１５の処理が挿入される。
（４）  図６  Ｓ１４３３の後に、図２０のＳ４４０３、Ｓ４４１０、Ｓ４４０４，Ｓ４４１１の処理が挿入される。
（５）  図７  Ｓ１５１３の後に、図２１のＳ６２０３、Ｓ６２２１〜Ｓ６２２２の処理が挿入される。
（６）  図７  Ｓ１５１５の前に、図２１のＳ６２０５、Ｓ６２０６、Ｓ６２１０、Ｓ６２３１〜Ｓ５２３４の処理が挿入される。
（７）  図７  Ｓ１５２３の前に、図１９のＳ４３０２、Ｓ４３１１の処理、及び図１９のＳ４３０４、Ｓ４３１５の処理が挿入される。
（８）  図７  Ｓ１５３３の後に、図２２のＳ６４０３、Ｓ６４１０、Ｓ６４０４，Ｓ６４１１の処理が挿入される。【０２６２】
図６〜８の処理に、上で述べた変更を施すことにより、ストレージ装置４００がＷＲＩＴＥ  ＳＡＭＥコマンドに係る処理の実行中に、未使用物理記憶領域が枯渇、あるいは未使用物理記憶領域の量が所定の閾値以下になった場合にも、適切な処理が行われるようになる。また他のコマンド（ＵＮＭＡＰ、ＡＴＳ）についても同様に、論理ボリュームへのデータ書き込み処理の前、及びペアボリュームのあるストレージ装置４００から応答を受信する処理の後に、枯渇エラー処理を挿入することにより、未使用物理記憶領域が枯渇、あるいは未使用物理記憶領域の量が所定の閾値以下になった場合にも、適切な処理が行われるようになる。【０２６３】
以上が、本発明の実施例に係るストレージシステムで行われる処理の内容である。本発明のストレージシステムでは、２台のストレージ装置のボリュームに属性情報を設定している。そしてホストからボリュームに対するＩ／Ｏコマンドを受け付けた時に、ボリュームの属性情報（Ｌｏｃａｌ，Ｒｅｍｏｔｅ，Ｍｉｒｒｏｒ，Ｂｌｏｃｋ）に応じて、アクセス対象のボリュームに対するＩ／Ｏ処理を実行するか、アクセス対象のボリュームのペアボリュームに対するＩ／Ｏ処理を実行するかを決定する。またアクセス対象のボリュームと、そのペアボリュームの両方にＩ／Ｏ処理を実行する場合には、いずれのボリュームについて先にＩ／Ｏ処理を実行するかを決定する。【０２６４】
通常は、２台のストレージ装置の各ボリューム（第１ボリューム、第２ボリューム）には、属性情報としてＭｉｒｒｏｒ属性を設定することで、ホストが第１ボリューム、第２ボリュームのいずれに対してデータ更新を行うことが可能で、かつ第１ボリューム、第２ボリュームのいずれが更新されても、その内容がもう一方のボリュームにも反映され、第１ボリューム、第２ボリュームの二重化状態が維持されるように運用される。【０２６５】
１つのストレージ装置の未使用物理記憶領域が枯渇した場合には、未使用物理記憶領域の枯渇したストレージ装置のボリュームの属性情報をＢｌｏｃｋに変更することで、ホストからのＩ／Ｏを受け付け不可能な状態にする一方で、残りのストレージ装置のボリュームの属性情報をＬｏｃａｌ属性に設定することで、ボリュームの二重化は行われないが、ボリュームへのＩ／Ｏ（リード、ライト）を可能にする。これにより、物理記憶領域の枯渇など、ストレージ装置の状態に変化が生じた場合にも、計算機システムの業務継続を可能にすることができる。【０２６６】
なお、本発明は上で説明した実施例に限定されるものではなく、様々な変形例が含まれる。また、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。【０２６７】
各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置いてもよい。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。
【符号の説明】
【０２６８】
１００：  ホスト
２１０：  ＳＡＮ
２２０：  ＳＡＮ
３００  ストレージシステム
４００：  ストレージ装置
５００：  ストレージコントローラ
５１０：  メモリ
５２０：  ＭＰパッケージ
５２１：  ＭＰ
５２１：  ローカルメモリ
５３０：  チャネルアダプタ
５３１：  インタフェース
５３２：  バッファ
５４０：  ディスクアダプタ
９００：  ドライブ
【図１】
2015198412.tif 000003
【図２】
2015198412.tif 000004
【図３】
2015198412.tif 000005
【図４】
2015198412.tif 000006
【図５】
2015198412.tif 000007
【図６】
2015198412.tif 000008
【図７】
2015198412.tif 000009
【図８】
2015198412.tif 000010
【図９】
2015198412.tif 000011
【図１０】
2015198412.tif 000012
【図１１】
2015198412.tif 000013
【図１２】
2015198412.tif 000014
【図１３】
2015198412.tif 000015
【図１４】
2015198412.tif 000016
【図１５】
2015198412.tif 000017
【図１６】
2015198412.tif 000018
【図１７】
2015198412.tif 000019
【図１８】
2015198412.tif 000020
【図１９】
2015198412.tif 000021
【図２０】
2015198412.tif 000022
【図２１】
2015198412.tif 000023
【図２２】
2015198412.tif 000024
【図２３】
2015198412.tif 000025
【図２４】
2015198412.tif 000026
【図２５】
2015198412.tif 000027
【図２６】
2015198412.tif 000028
【図２７】
2015198412.tif 000029
【図２８】
2015198412.tif 000030
【手続補正書】
【提出日】平成28年7月15日(2016.7.15)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１ストレージ装置と、前記第１ストレージ装置に接続された第２ストレージ装置とから構成されるストレージシステムであって、
前記第１ストレージ装置と前記第２ストレージ装置はそれぞれ、ボリュームと、１以上の記憶デバイスを有し、ホスト計算機からＳＣＳＩ規格に従ったＩ／Ｏコマンドを受け付け可能に構成されており、
前記第１ストレージ装置内の第１ボリュームと前記第２ストレージ装置内の第２ボリュームには、ライト順及び／またはライト可否を表す属性情報が設定されており、
前記第１ボリュームと前記第２ボリュームは、前記ホスト計算機からのライトデータが前記第１ボリュームと前記第２ボリュームの両方に書き込まれるペア関係にあるボリュームとして管理されており、
前記第１ストレージ装置は、前記ホスト計算機から前記第１ボリュームに対するＩ／Ｏコマンドを受信すると、前記属性情報に基づいて、前記第１ボリュームと前記第２ボリュームへのＩ／Ｏ要否を決定する、
ことを特徴とする、ストレージシステム。
【請求項２】
前記第１ボリュームと前記第２ボリュームには、Ｍｉｒｒｏｒ属性、Ｌｏｃａｌ属性、Ｒｅｍｏｔｅ属性のうちの１つが前記属性情報として設定されており、
前記第１ボリュームと前記第２ボリュームにはまた、最初に更新が行われるボリュームであることを示すＰ−ＶＯＬ属性、または２番目に更新が行われるボリュームであることを示すＳ−ＶＯＬ属性、のいずれかの第２属性情報が設定されており、
前記第１ボリュームに、前記属性情報としてＭｉｒｒｏｒ属性が設定されている時、前記第１ボリュームと前記第２ボリュームに対して、前記Ｉ／Ｏコマンドで指定された処理を実行し、
前記第１ボリュームに前記属性情報としてＬｏｃａｌ属性が設定されている時、前記第１ボリュームのみに対して、前記Ｉ／Ｏコマンドで指定された処理を実行し、
前記第１ボリュームに前記属性情報としてＲｅｍｏｔｅ属性が設定されている時、前記第２ボリュームのみに対して、前記Ｉ／Ｏコマンドで指定された処理を実行する、
ことを特徴とする、請求項１に記載のストレージシステム。
【請求項３】
前記第１ストレージ装置が前記Ｉ／Ｏコマンドとして、前記第１ボリュームに対するＷＲＩＴＥ  ＳＡＭＥコマンドと１ブロックのパターンデータを受信した時、前記第１ボリュームに前記属性情報としてＭｉｒｒｏｒ属性が設定されている場合、
前記第１ストレージ装置は、
前記第１ボリューム内の、前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に対して、前記受信したパターンデータを格納する処理と、
前記第２ストレージ装置に対して、前記第２ボリューム内の前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に対して、前記受信したパターンデータを書き込むよう指示する処理の、２つの処理を実行する、
ことを特徴とする請求項２に記載のストレージシステム。
【請求項４】
前記第１ストレージ装置が前記Ｉ／Ｏコマンドとして、前記第１ボリュームに対するＷＲＩＴＥ  ＳＡＭＥコマンドと１ブロックのパターンデータを受信すると、
前記第１ストレージ装置は、全領域に前記パターンデータが書き込まれている、所定サイズのライトデータを作成し、
前記第１ストレージ装置は前記第２ストレージ装置に対して、前記所定サイズのライトデータを前記第２ボリュームの所定位置に書き込むことを指示するＷＲＦＢＡコマンドと前記所定サイズのライトデータを１回以上送信することにより、前記第２ボリューム内の前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に、前記受信したパターンデータを書き込ませる、
ことを特徴とする、請求項３に記載のストレージシステム。
【請求項５】
前記第１ストレージ装置が前記Ｉ／Ｏコマンドとして、前記第１ボリュームに対するＷＲＩＴＥ  ＳＡＭＥコマンドと１ブロックのパターンデータを受信すると、
前記第１ストレージ装置は前記第２ストレージ装置に対して、前記第２ボリューム内の前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された領域を指定したＷＲＩＴＥ  ＳＡＭＥ伝搬コマンドと、前記パターンデータを送信することにより、前記第２ボリューム内の前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に、前記受信したパターンデータを書き込ませる、
ことを特徴とする、請求項３に記載のストレージシステム。
【請求項６】
前記第１ストレージ装置が前記Ｉ／Ｏコマンドとして、前記第１ボリュームに対するＷＲＩＴＥ  ＳＡＭＥコマンドと１ブロックのパターンデータを受信した時、前記第１ボリュームに、Ｓ−ＶＯＬ属性が設定されている場合、
前記第１ストレージ装置は、前記第２ボリューム内の、前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に対して、前記受信したパターンデータが書き込まれた後に、
前記第１ボリューム内の、前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に対して、前記受信したパターンデータを格納する、
ことを特徴とする請求項３に記載のストレージシステム。
【請求項７】
前記第１ストレージ装置が前記Ｉ／Ｏコマンドとして、前記第１ボリュームに対するＷＲＩＴＥ  ＳＡＭＥコマンドと１ブロックのパターンデータを受信した時、前記第１ボリュームに、Ｐ−ＶＯＬ属性が設定されている場合、
前記第１ストレージ装置は、前記第１ボリューム内の、前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に対して、前記受信したパターンデータを格納した後に、
前記第２ストレージ装置に対して、前記第２ボリューム内の前記ＷＲＩＴＥ  ＳＡＭＥコマンドで指定された全ての領域に対して、前記受信したパターンデータを書き込むよう指示する、
ことを特徴とする請求項３に記載のストレージシステム。
【請求項８】
前記第１ストレージ装置が前記Ｉ／Ｏコマンドとして、前記第１ボリュームに対するＵＮＭＡＰコマンドを受信した時、
前記第１ボリュームと前記第２ボリュームに設定されている前記属性情報に基づいて、前記第１ボリューム及び／または前記第２ボリュームの、前記ＵＮＭＡＰコマンドで指定された全ての領域に対して、０データを格納する、
ことを特徴とする請求項２に記載のストレージシステム。
【請求項９】
前記ストレージシステムは、ボリュームの記憶空間を、固定サイズの領域であるページ単位に管理しており、
前記第１ストレージ装置は、前記第１ボリュームのページに対してＩ／Ｏコマンドを受信した時点で、前記記憶デバイスの中から、前記ページのサイズに相当する記憶領域を割り当てるように構成されており、
前記第１ストレージ装置は、前記ページ内の全領域に０データが格納されている場合、前記ページを、前記記憶領域が割り当てられていない状態に変更する、
ことを特徴とする、
請求項８に記載のストレージシステム。
【請求項１０】
前記第１ボリュームに前記属性情報としてＭｉｒｒｏｒ属性が設定されている場合、
前記第１ストレージ装置が前記Ｉ／Ｏコマンドとして、前記第１ボリュームに対するＣＯＭＰＡＲＥ  ＡＮＤ  ＷＲＩＴＥコマンドとコンペアデータとライトデータとを受信した時、
前記ストレージシステムは、
前記第１ボリュームと前記第２ボリュームのうち、前記Ｐ−ＶＯＬ属性の設定されているボリュームから、前記ＣＯＭＰＡＲＥ  ＡＮＤ  ＷＲＩＴＥコマンドで指定されている領域のデータを読み出して、前記コンペアデータと比較し、
前記読み出されたデータと前記コンペアデータの内容が同一である場合、前記Ｐ−ＶＯＬ属性の設定されているボリュームに対して前記ライトデータを格納した後、前記Ｓ−ＶＯＬ属性の設定されているボリュームに対して前記ライトデータを格納する、
ことを特徴とする、請求項２に記載のストレージシステム。
【請求項１１】
前記ストレージシステムは、ボリュームの記憶空間を、固定サイズの領域であるページ単位に管理しており、
前記第１ストレージ装置は、前記第１ボリュームのページに対してＩ／Ｏコマンドを受信した時点で、前記第１ストレージ装置の記憶デバイスの中から、前記ページのサイズに相当する記憶領域を割り当てるように構成されており、
前記第２ストレージ装置は、前記第２ボリュームのページに対してＩ／Ｏコマンドを受信した時点で、前記第２ストレージ装置の記憶デバイスの中から、前記ページのサイズに相当する記憶領域を割り当てるように構成されており、
前記ストレージシステムは前記ホスト計算機から、前記属性情報としてＭｉｒｒｏｒ属性が設定されている前記第１ボリュームまたは前記第２ボリュームに対するＩ／Ｏコマンドを受信すると、
前記第１ストレージ装置で、前記第１ボリュームに割り当て可能な記憶領域が枯渇した場合には、前記第１ボリュームの前記属性情報として、前記Ｉ／Ｏコマンドの受け付けが不可能であることを示すＢｌｏｃｋ属性を設定し、前記第２ボリュームの前記属性情報としてＬｏｃａｌ属性を設定した後、前記ホスト計算機にエラーを返却し、
前記第２ストレージ装置で、前記第２ボリュームに割り当て可能な記憶領域が枯渇した場合には、前記第２ボリュームの前記属性情報として、前記Ｉ／Ｏコマンドの受け付けが不可能であることを示すＢｌｏｃｋ属性を設定し、前記第１ボリュームの前記属性情報としてＬｏｃａｌ属性を設定した後、前記ホスト計算機にエラーを返却することを特徴とする、
請求項２に記載のストレージシステム。
【請求項１２】
前記ホスト計算機にエラーを返却した後に、前記ホスト計算機から前記第１ボリュームに対するＩ／Ｏコマンドを受け付けた時、
前記第１ボリュームに前記属性情報としてＬｏｃａｌ属性が設定されている場合、前記第１ストレージ装置は、前記第１ボリュームに割り当て可能な記憶領域が枯渇したか否かの判定を行い、
前記第１ボリュームに割り当て可能な記憶領域が枯渇していない場合には、前記第１ストレージ装置は前記第１ボリュームに対してＩ／Ｏコマンドで指定された処理を行い、
前記第１ボリュームに割り当て可能な記憶領域が枯渇している場合には、前記第１ストレージ装置は、前記ホスト計算機に、前記記憶領域が枯渇した旨を示すエラー情報を返却することを特徴とする、
請求項１１に記載のストレージシステム。
【請求項１３】
第１ストレージ装置と、前記第１ストレージ装置に接続された第２ストレージ装置とから構成されるストレージシステムと、前記第１ストレージ装置及び前記第２ストレージ装置に接続されるホスト計算機とを有する計算機システムの制御方法であって、
前記第１ストレージ装置と前記第２ストレージ装置はそれぞれ、ボリュームと、１以上の記憶デバイスを有し、ホスト計算機からＳＣＳＩ規格に従ったＩ／Ｏコマンドを受け付け可能に構成されており、
前記第１ストレージ装置内の第１ボリュームと前記第２ストレージ装置内の第２ボリュームには、ライト順及び／またはライト可否を表す属性情報が設定されており、
前記第１ボリュームと前記第２ボリュームは、前記ホスト計算機からのライトデータが前記第１ボリュームと前記第２ボリュームの両方に書き込まれるペア関係にあるボリュームとして管理されており、
前記ホスト計算機は前記第１ボリュームと前記第２ボリュームのいずれにもアクセス可能に構成されており、
前記第１ストレージ装置が、前記ホスト計算機から前記第１ボリュームに対するＩ／Ｏコマンドを受信すると、前記属性情報に基づいて、前記第１ボリュームと前記第２ボリュームへのＩ／Ｏ要否を決定する、
ことを特徴とする、計算機システムの制御方法。
【請求項１４】
前記第１ボリュームと前記第２ボリュームには、Ｍｉｒｒｏｒ属性、Ｌｏｃａｌ属性、Ｒｅｍｏｔｅ属性、Ｂｌｏｃｋ属性のうちの１つが前記属性情報として設定されており、
前記第１ボリュームと前記第２ボリュームにはまた、最初に更新が行われるボリュームであることを示すＰ−ＶＯＬ属性、または２番目に更新が行われるボリュームであることを示すＳ−ＶＯＬ属性、のいずれかの第２属性情報が設定されており、
前記第１ボリュームに、前記属性情報としてＭｉｒｒｏｒ属性が設定されている時、前記第１ボリュームと前記第２ボリュームに対して、前記Ｉ／Ｏコマンドで指定された処理を実行し、
前記第１ボリュームに前記属性情報としてＬｏｃａｌ属性が設定されている時、前記第１ボリュームのみに対して、前記Ｉ／Ｏコマンドで指定された処理を実行し、
前記第１ボリュームに前記属性情報としてＲｅｍｏｔｅ属性が設定されている時、前記第２ボリュームのみに対して、前記Ｉ／Ｏコマンドで指定された処理を実行する、
ことを特徴とする、請求項１３に記載の計算機システムの制御方法。
【請求項１５】
前記ストレージシステムは、ボリュームの記憶空間を、固定サイズの領域であるページ単位に管理しており、
前記第１ストレージ装置は、前記第１ボリュームのページに対してＩ／Ｏコマンドを受信した時点で、前記第１ストレージ装置の記憶デバイスの中から、前記ページのサイズに相当する記憶領域を割り当てるように構成されており、
前記第２ストレージ装置は、前記第２ボリュームのページに対してＩ／Ｏコマンドを受信した時点で、前記第２ストレージ装置の記憶デバイスの中から、前記ページのサイズに相当する記憶領域を割り当てるように構成されており、
前記ホスト計算機は、前記第１ストレージ装置から受信した前記第１ボリュームの識別情報と前記第２ストレージ装置から受信した前記第２ボリュームの識別情報に基づいて、前記第１ボリュームと前記第２ボリュームが同一ボリュームであると認識している状態において、
前記ストレージシステムが前記ホスト計算機から、前記属性情報としてＭｉｒｒｏｒ属性が設定されている前記第１ボリュームに対するＩ／Ｏコマンドを受信すると、
前記第１ストレージ装置で、前記第１ボリュームに割り当て可能な記憶領域が枯渇した場合には、前記ストレージシステムは前記第１ボリュームの前記属性情報として、前記Ｉ／Ｏコマンドの受け付けが不可能であることを示すＢｌｏｃｋ属性を設定し、前記第２ボリュームの前記属性情報としてＬｏｃａｌ属性を設定した後、前記ホスト計算機にエラーを返却し、
前記ホスト計算機はエラーが返却されたことに応じて、前記第１ボリュームに代えて前記第２ボリュームへＩ／Ｏコマンドを発行し、
前記ホスト計算機から前記第２ボリュームに対するＩ／Ｏコマンドを受け付けた前記第２ストレージ装置は、前記第２ボリュームに割り当て可能な記憶領域が枯渇したか否かの判定を行い、
前記第２ボリュームに割り当て可能な記憶領域が枯渇していない場合、前記第２ストレージ装置は前記第２ボリュームに対してＩ／Ｏコマンドで指定された処理を行い、
前記第２ボリュームに割り当て可能な記憶領域が枯渇している場合、前記第２ストレージ装置は、前記ホスト計算機に、前記記憶領域が枯渇した旨を示すエラー情報を返却することを特徴とする、
請求項１４に記載の計算機システムの制御方法。
【国際調査報告】
2015198412.tif 000031
2015198412.tif 000032
2015198412.tif 000033