実施形態1では、ストレージシステムに、一以上の論理ボリュームとコントローラが備えられる。一以上の論理ボリュームは、プライマリボリュームと、プライマリボリュームとボリュームペアを構成するセカンダリボリュームとのうちの少なくとも一方を含んでいる。コントローラは、プライマリボリュームに記憶されているデータ要素を、複数のデータ保存方式から選択されているデータ保存方式である選択保存方式に従って、プライマリボリュームとボリュームペアを構成するセカンダリボリュームに書込む。そのコントローラは、上記選択保存方式を、現在選択されているタイプのデータ保存方式からそれとは別のタイプのデータ保存方式に切替える機能を有する。
実施形態2では、実施形態1において、コントローラが、計算機からI/Oコマンドを受信した場合にそのI/Oコマンドで指定されている論理ボリューム及びそれの記憶領域にアクセスするよう構成されている。また、コントローラは、選択保存方式の切り替えの際、切替え前のデータ保存方式に伴うセカンダリボリュームを構成する各記憶領域について特定の処理を行うことで、セカンダリボリュームの種類を、切替え前のデータ保存方式に対応した種類から切替え後のデータ保存方式に対応した種類に変更するよう構成されている。更に、コントローラは、計算機からI/Oコマンドを受け付けつつ、選択保存方式の切替えを実行するよう構成されている。コントローラは、計算機から受けたI/Oコマンドがライトコマンドである場合、そのライトコマンドで指定されているライト先がプライマリボリュームであるか切り替え前のセカンダリボリュームであるか、及び、ライト先の記憶領域が上記特定の処理が済んだ記憶領域であるか否かに基づいて、そのライトコマンドに従うライト対象のデータ要素の書込みを制御する。
ここで、例えば、特定の処理とは、切替え前のデータ保存方式と切替え後のデータ保存方式によって異なる。具体的には、例えば、切替え前のデータ保存方式が、後述のレプリケーション方式であり、切替え後のデータ保存方式が、後述のスナップショット方式であれば、上記特定の処理では、切替え前のデータ保存方式におけるプライマリボリュームの記憶領域に記憶されているデータ要素とそれのセカンダリボリュームの記憶領域に記憶されているデータ要素とが互いに重複するか否かの判定が行われる。その際、重複していなければ、そのデータ要素が切替え後のデータ保存方式におけるセカンダリボリュームの記憶領域に書き込まれる処理も行われる。
実施形態3では、実施形態1乃至2のうちの少なくとも一つにおいて、コントローラが、選択保存方式の切り替えの際、切替え前のデータ保存方式に伴うセカンダリボリュームを構成する各記憶領域について特定の処理を行うことで、セカンダリボリュームの種類を、切替え前のデータ保存方式に対応した種類から切替え後のデータ保存方式に対応した種類に変更するよう構成されており、特定の処理において、その特定の処理の対象となっている記憶領域に記憶されているデータ要素が所定のデータパターンとなっていれば、その記憶領域を解放する。
ここで、所定のデータパターンとしては、例えば、データ要素が‘0’を表すデータパターンとすることができる。
また、例えば、実施形態3では、切替え前のデータ保存方式に対応した種類のセカンダリボリュームは、仮想的な論理ボリュームである仮想ボリュームであり、仮想ボリュームは、複数の仮想的な記憶領域である複数の仮想領域で構成されている。一以上の論理ボリュームには、プールを構成する論理ボリュームであるプールボリュームが含まれている。コントローラは、仮想ボリュームの仮想領域に、プールボリュームを構成する記憶領域であるプール領域を割り当て、割当てたプール領域に、その仮想領域に記憶させるデータ要素を書込むよう構成されている。コントローラは、選択保存方式の切替えの際、仮想領域に記憶されているデータ要素が所定のデータパターンとなっている場合に、その仮想領域に割当てられているプール領域を解放する。
実施形態4では、実施形態1乃至3のうちの少なくとも一つにおいて、コントローラは、プライマリボリュームに所定のデータパターンのデータ要素がどのぐらい保存されているかに応じて、プライマリボリュームを、物理的な記憶装置を基に形成された実体としての論理ボリュームから、仮想的な論理ボリューム(例えば、Thin Provisoing技術に従う仮想ボリューム)に切替える、又は、仮想的な論理ボリューム(例えば、Thin Provisoing技術に従う仮想ボリューム)から、実体としての論理ボリュームに切替える。
実施形態5では、コントローラが、実体としての論理ボリュームから、仮想的な論理ボリューム(例えば、Thin Provisoing技術に従う仮想ボリューム)に切替えにおいて、実体としての論理ボリュームに記憶されているデータ要素が所定のデータパターンとなっている場合に、そのデータ要素が記憶されている記憶領域を解放する。
実施形態6では、実施形態1乃至5のうちの少なくとも一つにおいて、コントローラが、セカンダリボリュームにどれだけデータ要素が記憶されているか、プライマリボリュームと複数のボリュームペアを構成する複数のセカンダリボリュームに互いに重複するデータ要素がどのぐらい存在するか、及び、セカンダリボリュームにどの程度アクセスが発生しているかの少なくとも一つを基に、選択保存方式を切替える。
実施形態7では、実施形態6において、コントローラが、複数のセカンダリボリュームのうちの或るセカンダリボリュームに記憶されている一以上の第一のデータ要素を基に算出されその一以上の第一のデータ要素よりもデータサイズの小さい第一の値と、或るセカンダリボリュームとは別のセカンダリボリュームに記憶されている一以上の第二のデータ要素を基に算出されその一以上の第二のデータ要素よりもデータサイズの小さい第二の値とを比較する。コントローラは、第一の値と第二の値が不一致であれば、第一のデータ要素と第二のデータ要素とが互いに重複しないと判断し、第一の値と第二の値が一致すれば、第一のデータ要素と第二のデータ要素とを比較する。コントローラは、第一のデータ要素と第二のデータ要素が不一致であれば、第一のデータ要素と第二のデータ要素とが互いに重複しないと判断し、第一のデータ要素と第二のデータ要素が一致すれば、第一のデータ要素と第二のデータ要素とが互いに重複すると判断する。
実施形態8では、実施形態7において、第一の値は、一以上の第一のデータ要素のハッシュ値、又は、一以上の第一のデータ要素に対応した冗長コードである。第二の値は、一以上の第二のデータ要素のハッシュ値、又は、一以上の第二のデータ要素に対応した冗長コードである。
実施形態9では、実施形態1乃至8のうちの少なくとも一つにおいて、コントローラは、選択保存方式の切り替えの際、切替え前のデータ保存方式に伴う切替え前のセカンダリボリュームを構成する各記憶領域について特定の処理を行うことで、セカンダリボリュームの種類を、切替え前のデータ保存方式に対応した種類から切替え後のデータ保存方式に対応した種類に変更するよう構成されている。コントローラは、切り替え前のセカンダリボリュームに記憶されているデータ要素が暗号化されているデータ要素であれば、切替え後のセカンダリボリュームに記憶されるデータ要素を暗号化されているデータ要素とする。
実施形態10では、実施形態9において、コントローラは、切り替え前のセカンダリボリュームに記憶されているデータ要素が暗号化されているデータ要素であっても、切替え後のセカンダリボリュームに記憶されるデータ要素を暗号化されているデータ要素としない場合に、ユーザに警告を出す。
実施形態11では、実施形態9乃至10のうちの少なくとも一つにおいて、コントローラは、プライマリボリュームに記憶されているデータ要素の暗号化で使用された暗号化方法及び/又は暗号キーと、切替え前のセカンダリボリュームに記憶されているデータ要素の暗号化で使用された暗号化方法及び/又は暗号キーとが異なっていれば、切替え後のセカンダリボリュームに記憶されるデータ要素の暗号化方法及び/又は暗号キーを、プライマリボリュームに記憶されているデータ要素の暗号化方法及び/又は暗号キーと違える。
実施形態12では、実施形態1乃至11のうちの少なくとも一つにおいて、コントローラが、キャッシュメモリを有し、計算機からのリードコマンドに応答して、キャッシュメモリにリード対象のデータ要素があるというキャッシュヒットとなれば、そのデータ要素を計算機に送信し、キャッシュヒットとならなければ、そのリードコマンドで指定されている論理ボリュームからデータ要素を読み出してキャッシュメモリに記憶させ、キャッシュメモリに記憶されたデータ要素を計算機に送信するよう構成されている。第一の論理ボリュームと第二の論理ボリュームとを含んだ第一の連結ボリュームがある。コントローラが、複数のデータ保存方式のうちの非重複保存方式を第一の連結ボリュームに適用することで、第三の論理ボリュームと第四の論理ボリュームとを含んだ第二の連結ボリュームを作成する。第一乃至第四の論理ボリュームのうちの少なくとも第一の論理ボリュームが、物理的な記憶装置を基に形成された実体としての論理ボリュームである。第一の論理ボリュームと第三の論理ボリュームで第一のボリュームペアが構成され、第一の論理ボリュームが、プライマリボリュームであり、第三の論理ボリュームが、第一の論理ボリュームをプライマリボリュームとするセカンダリボリュームである。第二の論理ボリュームと第四の論理ボリュームで第二のボリュームペアが構成され、第二の論理ボリュームが、プライマリボリュームであり、第四の論理ボリュームが、第二の論理ボリュームをプライマリボリュームとするセカンダリボリュームである。非重複保存方式とは、プライマリボリュームとそれぞれ複数のボリュームペアを構成する複数のセカンダリボリュームに重複するデータ要素が記憶されている場合に、一方のデータ要素が記憶されている一方の記憶領域を他方のデータ要素が記憶されている他方の記憶領域に関連付けることで、以後、一方の記憶領域に対するアクセスが発生した場合には、一方の記憶領域に関連付けられている他方の記憶領域にアクセスする保存方式である。第一の論理ボリュームに、第一の連結ボリュームと第二の連結ボリュームとで共通のデータ要素、又は、キャッシュヒット率の低いデータ要素が保存される。第二の論理ボリュームに、上記共通のデータ要素ではないデータ要素、又は、キャッシュヒット率の高いデータ要素が保存される。
実施形態13では、実施形態1乃至12のうちの少なくとも一つにおいて、一以上の論理ボリュームには、プールを構成する論理ボリュームであるプールボリュームが含まれている。コントローラが、選択保存方式を、レプリケーション方式からスナップショット方式に切り替え、又は、スナップショット方式からレプリケーション方式に切り替える。レプリケーション方式では、セカンダリボリュームが、物理的な記憶装置を基に形成された実体としての論理ボリュームであり、プライマリボリュームに記憶されている全てのデータ要素が記憶される。スナップショット方式では、プライマリボリュームのスナップショットイメージがプライマリボリュームとセカンダリボリュームで構成され、そのセカンダリボリュームが、仮想的な論理ボリュームである仮想ボリュームである。仮想ボリュームは、複数の仮想的な記憶領域である複数の仮想領域で構成されている。仮想領域に、プールボリュームを構成する記憶領域であるプール領域が割り当てられ、割り当てられたプール領域に、その仮想領域に記憶させるデータ要素が記憶される。
実施形態14では、実施形態13において、コントローラが、切替え前のデータ保存方式がレプリケーション方式であれば、セカンダリボリュームの記憶容量に対するデータ要素の総量の割合である消費率が所定の消費率よりも低い場合、プライマリボリュームと複数のボリュームペアを構成する複数のセカンダリボリュームに互いに重複するデータ要素の総量が所定の総量よりも多い場合、及び、セカンダリボリュームに対するアクセス頻度が所定のアクセス頻度よりも低い場合のうちの少なくとも一つの場合に、レプリケーション方式からスナップショット方式に切り替える。
実施形態15では、実施形態13乃至14のうちの少なくとも一つにおいて、コントローラが、切替え前のデータ保存方式がスナップショット方式であれば、セカンダリボリュームの記憶容量に対するデータ要素の総量の割合である消費率が所定の消費率よりも高い場合、プライマリボリュームと複数のボリュームペアを構成する複数のセカンダリボリュームに互いに重複するデータ要素の総量が所定の総量よりも少ない場合、及び、セカンダリボリュームに対するアクセス頻度が所定のアクセス頻度よりも高い場合のうちの少なくとも一つの場合に、選択保存方式を、スナップショット方式からレプリケーション方式に切り替える。
実施形態16では、実施形態13乃至15のうちの少なくとも一つにおいて、スナップショット方式には、重複スナップショット方式と、非重複スナップショット方式とがある。重複スナップショット方式では、一のプライマリボリュームに複数のセカンダリボリュームがある場合、一のプライマリボリュームにおけるデータ要素が、複数のセカンダリボリュームに退避される。非重複スナップショット方式では、一のプライマリボリュームに複数のセカンダリボリュームがある場合、一のプライマリボリュームにおけるデータ要素が、複数のセカンダリボリュームのうちの或る仮想領域に一のセカンダリボリュームに退避され、複数のセカンダリボリュームにおける各他のセカンダリボリュームにおける仮想領域が、或る仮想領域又はその或る仮想領域に割当てられたプール領域に関連付けられる。コントローラが、選択保存方式を、レプリケーション方式から重複スナップショット方式に切替えた後に、重複スナップショット方式から非重複スナップショット方式に切替えるか、或いは、レプリケーション方式から非重複スナップショット方式に切替える。又は、コントローラは、非重複スナップショット方式から重複スナップショット方式に切替えた後に、重複スナップショット方式からレプリケーション方式に切替えるか、或いは、非重複スナップショット方式からレプリケーション方式に切替える。
実施形態17では、実施形態16において、コントローラが、切替え前のデータ保存方式がレプリケーション方式の場合、プライマリボリュームと複数のボリュームペアを構成する複数のセカンダリボリュームに互いに重複するデータ要素の総量が第一の閾値以上の場合、セカンダリボリュームに対するアクセス頻度が第三の閾値未満の場合、及び、セカンダリボリュームの記憶容量に対するデータ要素の総量の割合である消費率が第五の閾値未満の場合のうちの少なくとも一つの場合に、選択保存方式を、レプリケーション方式から重複スナップショット方式に切り替える。コントローラは、切替え前のデータ保存方式が重複スナップショット方式の場合、重複するデータ要素の総量が、第一の閾値よりも高い第二の閾値以上の場合、及び、セカンダリボリュームに対するアクセス頻度が、第三の閾値よりも低い第四の閾値未満の場合のうちの少なくとも一つの場合に、選択保存方式を、重複スナップショット方式から非重複スナップショット方式に切り替える。
実施形態18では、実施形態17において、コントローラが、切替え前のデータ保存方式がレプリケーション方式の場合、重複するデータ要素の総量が第二の閾値以上の場合、セカンダリボリュームに対するアクセス頻度が第四の閾値未満の場合、及び、消費率が第五の閾値以上の場合のうちの少なくとも一つの場合に、選択保存方式を、レプリケーション方式から非重複スナップショット方式に切り替える。
実施形態19では、実施形態1乃至18のうちの少なくとも一つにおいて、コントローラが、切替え前のデータ保存方式におけるセカンダリボリュームを、切替え後のデータ保存方式でのセカンダリボリュームのプライマリボリュームとする。
実施形態20では、実施形態9乃至11のうちの少なくとも一つにおいて、コントローラが、切替え後のデータ保存方式におけるセカンダリボリュームに記憶されるデータ要素が暗号化されるようになっているが、そのセカンダリボリュームに対応するプライマリボリュームに記憶されているデータ要素が暗号化されていなければ、そのプライマリボリュームに記憶されているデータ要素を暗号化する。
上述した実施形態1乃至20のうちの二以上の実施形態を組み合わせることができる。また、コントローラが行う各種処理は、ハードウェア、コンピュータプログラム又はそれらの組み合わせ(例えば一部をコンピュータプログラムにより実現し残りをハードウェアで実現すること)により行うことができる。コンピュータプログラムは、所定のプロセッサに読み込まれて実行される。また、コンピュータプログラムがプロセッサに読み込まれて行われる情報処理の際、適宜に、メモリ等のハードウェア資源上に存在する記憶領域が使用されてもよい。また、コンピュータプログラムは、CD−ROM等の記録媒体から計算機にインストールされてもよいし、通信ネットワークを介して計算機にダウンロードされてもよい。
以下、図面を用いて、本発明の実施形態を詳細に説明する。
<第一の実施形態>。
<<システム構成の一例>>。
図1は、本発明の一実施形態に係るシステム全体の構成例を示す。以下の説明では、同種の要素を区別しないで説明する場合には、親番号のみ(例えば100)を用いて説明し、同種の要素を区別して説明する場合には、親番号と子符号(例えば100A、100B)を用いて説明することにする。
仮想ストレージシステム100Aは、複数のストレージシステム20A及び20Bを備える。仮想ストレージシステム100Bは、複数のストレージシステム20C及び20Dを備える。仮想化ストレージシステム100Aと仮想化ストレージシステム100Bが、SAN(Storage Area Network)41に接続されている。各ストレージシステム20A、20B、20C及び20Dが、SAN43を介して外部ストレージシステム70に接続されている。
管理ネットワーク(例えばLAN(Local Area Network))40に、各ストレージシステム20A、20B、20C及び20Dと、管理措置50と、各ホスト計算機51A及び51Bとが接続されている。
ホスト計算機51は、図示しないCPUや記憶資源(例えばメモリ)を備える。記憶資源に、コンピュータプログラムが記憶されており、CPUが、そのコンピュータプログラムを実行することができる。以下、コンピュータプログラムが主語になる場合は、実際にはそのコンピュータプログラムを実行するCPUによって処理が行われるものとする。
それぞれのストレージシステム20A、20Bには、SAN41を介して、ホスト計算機51Aが接続されている。ホスト計算機51Aは、仮想化プログラム63を有し、仮想化プログラム63の機能により、複数のストレージシステム20A及び20Bを論理的に一つの記憶資源(仮想ストレージシステム)100Aとして認識することができる。
仮想化プログラム63を有しない他のホスト計算機51Bは、SAN42、仮想化装置52、及びSAN41を介して、それぞれのストレージシステム20A、20Bに接続している。ホスト計算機51Bは、仮想化装置52内の仮想化プログラム63の機能により、複数のストレージシステム20A及び20Bを一つの記憶資源(仮想ストレージシステム)100Aとして認識することができる。
仮想化装置52は、複数のストレージシステム20A及び20Bのそれぞれが提供する記憶領域を論理的に一つの記憶領域に仮想化する。仮想化装置52は、例えば、仮想化スイッチ、インテリジェントスイッチ、又は仮想化専用装置などである。
各ホスト計算機51は、アプリケーションプログラム60を有する。アプリケーションプログラム60は、例えば、データベース管理ソフトウェア、Webアプリケーションソフトエア、ストリーミングアプリケーションソフトウェアなどの業務プログラムである。
仮想化プログラム63は、ホスト計算機51Aと各仮想ストレージシステム100A、100B内の論理ボリュームとの間の論理パスを管理する。
ストレージシステム20は、例えば、制御部と、記憶部とに大別することができる。制御部は、例えば、CPU(Central Processing Unit)21、メモリ22、ディスクインターフェース制御部(ディスクI/F)23、FC(Fibre Channel)インターフェース制御部(FC I/F)25、26、及びLANインターフェース制御部(LAN I/F)27を備える。記憶部は、例えば、ディスクユニット24である。
CPU21は、メモリ22に格納されている各種コンピュータプログラムを実行することにより、各種処理を実行する。メモリ22は、各種コンピュータプログラムを記憶する不揮発性メモリと、論理ボリュームに書き込まれたり論理ボリュームから読み出されたりするデータを一時的に記憶する揮発性メモリ(キャッシュメモリ)とを含む。
CPU21は、ディスクI/F23を介してディスクユニット24に接続されている。ディスクI/F23は、CPU21による論理ボリュームへのアクセスを可能とする。
ディスクユニット24は、複数のRAIDグループを有し、各RAIDグループは、複数のディスクドライブ240で構成される。RAIDグループには、そのRAIDグループのRAID(Redundant Array of Independent (or Inexpensive) Disks)レベルに従って、データが書き込まれる。ディスクドライブは、ディスク型の記憶メディア(例えばハードディスク或いはDVD(Digital Versatile Disk))のドライブであり、例えば、FC(Fibre Channel)ディスクドライブ、SATA(Serial Advanced Technology Attachment)ディスクドライブ、PATA(Parallel Advanced Technology
Attachment)ディスクドライブ、FATA(Fibre Attached Technology Adapted)ディスクドライブ、SAS(Serial Attached SCSI)ディスクドライブ或いはSCSI(Small
Computer System Interface)ディスクドライブ等である。ディスクドライブ240に限らず、他種の物理的な記憶デバイスが採用されても良い。他種の物理的な記憶デバイスとしては、例えば、ディスク型の記憶メディアとは異なるタイプの記憶メディア(例えばフラッシュメモリ)のドライブであっても良い。
ストレージシステム20Aには、例えば、実ボリューム240と、仮想ボリューム241とが備えられる。実ボリュームとは、RAIDグループの記憶空間を基に形成された、実体のある論理ボリュームである。仮想ボリュームとは、仮想的な論理ボリュームである。仮想ボリュームには、実ボリュームの全部又はその一部分である後述のプール領域が対応付けられる。
実ボリューム240としては、ホスト計算機51に提供される実ボリューム(以下、ホスト提供実VOL)と、ホスト計算機51に提供されない実ボリューム(以下、ホスト非提供実VOL)とがある。
ホスト提供実VOLとしては、後述するレプリケーション保存においてレプリケーション元となるプライマリの実ボリューム(以下、実PVOL)と、そのレプリケーションにおいてレプリケーション先となるセカンダリの論理ボリューム(以下、レプリケーション実SVOL)とがある。以下、実VOLを構成する各記憶領域を、「実領域」と呼ぶ。
ホスト非提供実VOLとしては、プールの構成要素となる論理ボリューム(以下、プールVOL)がある。以下、プールVOLを構成する実領域を、「プール領域」と呼ぶ。
仮想ボリューム241としては、Thin Provisioning技術により動的に記憶容量が拡張され仮想ボリューム(以下、容量拡張VOL)と、外部ストレージシステム70に存在する実ボリューム(以下、外部実VOL)700に対応した仮想ボリューム(以下、内部仮想VOL)と、後述するクイックスナップショット(以下、QS)保存やCopy On Writeスナップショット(以下、COWS)保存におけるセカンダリの論理ボリューム(以下、仮想SVOL)とがある。例えば、CPU21が、容量拡張VOLを指定したI/Oコマンドを受けた場合、容量拡張VOLにプール領域を割り当て、その割り当てたプール領域にアクセスする。また、例えば、CPU21が、内部仮想VOLを指定したI/Oコマンドを受けた場合、その内部仮想VOLに対応付けられている外部実VOL700を指定したI/Oコマンドを外部ストレージシステム70に送信する。以下、仮想VOLを構成する各記憶領域を、「仮想領域」と呼ぶ。
仮想ストレージシステム100Aにおいて、ストレージシステム20Aと20Bとが専用の通信線44で接続されている。その通信線44を、コマンドやデータが流れる。なお、通信線44が無い構成の場合には、ストレージシステム20Aと20Bは、ホスト計算機51を介してコマンドやデータを送受信しても良い。
FC I/F25は、ストレージシステム20Aと外部ストレージシステム70との間のSAN43を通じてのコマンドやデータの転送を制御する。FC I/F26は、ストレージシステム20Aとホスト計算機51との間のSAN41を通じてのコマンドやデータの転送を制御する。SAN41及び43を介した通信のプロトコルとしては、例えば、ファイバチャネルプロトコルやiSCSIプロトコルなどを採用することができる。尚、SAN43に代えて、FC I/F25と外部ストレージシステム70とが光ファイバケーブルなどで直接接続されていてもよい。
LAN I/F27は、管理ネットワーク40を介して管理装置50に接続される。管理装置50は、例えば、CPUやメモリ等を備えた計算機であり、仮想ストレージシステム100内の論理ボリュームの作成、ホスト計算機51への論理ボリュームの割り当て、ホスト計算機51と仮想ストレージシステム100との間の論理パスの設定(LUNマスキングやゾーニングなど)などを管理することができる。
以上が、本実施形態のシステム全体の構成例についての説明である。なお、この構成例によれば、管理装置50から各ストレージシステム20に情報を設定する方式は、いわゆるアウトバウンド方式(管理装置50から各ストレージシステム20へのコマンドが経由する通信ネットワーク(管理ネットワーク40)が、ホスト計算機51から各ストレージシステム20へのコマンドが経由する通信ネットワーク(SAN41、42)と異なる方式)であるが、その方式に代えて、インバウンド方式が採用されても良い。例えば、管理装置50がSAN41経由で各ストレージシステム20との間で管理情報を送受信するような構成となれば、インバウンド方式となる。また、外部ストレージシステム70は無くても良い。また、システム全体において、メインフレームシステムとオープンシステムのいずれか一方で構成されても良いし、それらの両方が混在してもよい。
前述した仮想ストレージシステム100A、100Bが行うデータ保存の方式として、「レプリケーション保存」、「QS保存」及び「COWS保存」の3タイプがある。以下、それぞれのタイプのデータ保存方式について説明する。なお、以下の説明では、レプリケーション保存が行われるVOLペアを「レプリケーションペア」と言い、QS保存が行われるVOLペアを「QSペア」と言い、COWS保存が行われるVOLペアを「COWSペア」と言う。また、以下の説明では、論理ボリュームを構成する一記憶領域に記憶されるデータを「データ要素」と言う。
<<レプリケーション保存>>。
図3Aは、レプリケーション保存の概要図である。なお、図3Aには、1〜3世代のバックアップにそれぞれ対応した3つのレプリケーション実SVOL240S1、240S2及び240S3が示されているが、以下、レプリケーション実SVOL240S1を例に採り説明する。
レプリケーションペアを構成する実PVOL240Pに記憶されている全てのデータ要素が、そのレプリケーションペアを構成するレプリケーション実SVOL240S1にレプリケーションされる。具体的には、一つのレプリケーションペアについて、実PVOL240Pを構成する複数の実領域にそれぞれ対応した複数のビットで構成される差分ビットマップが用意される。実PVOL240Pの先頭実領域から順に、差分有りを表すビット(差分ビットマップにおけるビット(例えば‘1’))に対応した実領域に記憶されているデータ要素が、レプリケーション実SVOL240S1における実領域にコピーされる。データ要素のコピーが済む都度に、そのデータ要素を記憶している実領域に対応したビット(差分ビットマップにおけるビット)が、差分無しを表す値に更新される(例えば‘1’から‘0’に更新される)。実PVOLに記憶されている全てのデータ要素のコピーが済んだら、その実PVOLを含んだレプリケーションペアは論理的に分割される(例えばペアの状態が‘スプリットに更新される)。ペアが論理的に分割されている状態では、実PVOLにおける或る実領域に新たにデータ要素が書き込まれても、レプリケーション実SVOLは更新されない(但し、差分ビットマップにおけるその或る実領域に対応したビットが、差分有りを表す値“1”に更新される)。
図4Aは、差分ビットマップの一例を示す。一つのレプリケーションペアに対する差分ビットマップ群4100には、例えば、一つの差分ビットマップ401が含まれている。差分ビットマップ401におけるビット‘0’は、実PVOLからのレプリケーション実SVOLへのコピーが終了した箇所(つまり、差分無しの実領域)を表し、ビット‘1’は、そのコピーが終了していない箇所(つまり、差分有りの実領域)を表している(PVOL及びSVOLの少なくとも一方が仮想VOLであっても良い)。差分ビットマップ401を構成する各ビットには、予め決められたサイズの各実領域が対応している。例えば、或る実領域において一部分でも更新があった場合は、その実領域に対応したビットが‘0’から‘1’に更新される。
図4Aは、1つのレプリケーションペアについて差分ビットマップが1つ用意される例を示しているが、図4Bに示すように、1つのレプリケーションペアについて同じサイズの差分ビットマップが2つ用意されても良い。2つの差分ビットマップが利用される場合には、例えば以下の流れでレプリケーション保存が行われる。
実PVOL240Pに記憶されている全てのデータ要素をレプリケーション実SVOL240S1に最初にコピーする処理を、以下、「形成コピー」と呼ぶ。形成コピーでは、CPU21が、形成コピー用の差分ビットマップ(以下、「形成BM」と略記する)403を構成する全てのビットを‘1’に変更する。形成コピーにおいて、CPU21は、形成BM403からビット‘1’を検出した場合、そのビット‘1’に対応する実領域に記憶されているデータ要素がキャッシュメモリ(図1に示すメモリ22の一部)に記憶されているか否かの判定を行う。キャッシュメモリに記憶されていなければ、CPU21は、実PVOL240Pからデータ要素を読み出してキャッシュメモリに書き込み、キャッシュメモリにおいて、そのデータ要素のコピーを作成する。そして、CPU21は、そのデータ要素が正しいか否かを判定するための冗長情報(例えば、パリティデータ)を新規に作成し、その冗長情報をデータ要素の複製に付随させる。CPU21は、キャッシュメモリにデータ要素を書込んだら、形成BM403の該当ビット(読出し元の実領域に対応したビット)を、‘1’から‘0’に更新する。CPU21は、形成BM403における全てのビットが‘0’になるまで、上述の処理を繰り返す。なお、実PVOL240Pからデータ要素を読み出す際に、レプリケーション実SVOL240S1用の冗長情報を作成し、その冗長情報をレプリケーション実SVOL240S1用のデータ要素としてキャッシュメモリに格納する方法が採用されても良い。また、例えば、実PVOL240Pからのキャッシュメモリへのデータ要素の読出しとは非同期のタイミングで、キャッシュメモリ上のレプリケーション実SVOL240S1用のデータ要素をレプリケーション実SVOL240S1に書込む方法が採用されても良い。
上記の形成コピーが完了した場合、実PVOL240Pとレプリケーション実SVOL240S1とのペアにおいて差分が存在しない状態となる。言い換えれば、形成コピーの完了した直後は、そのレプリケーションペアの状態は‘ペア同期’である。CPU21が、そのペアの状態を、任意の時刻において‘ペア同期’から‘スプリット’に更新することで、レプリケーション実SVOL240S1は、その任意の時刻における実PVOL240Pのバックアップとなる。
なお、レプリケーションペアにおいて差分が無い場合にペア状態が‘非同期’に更新されるが、例えば、CPU21が、ホスト計算機51からスプリット要求を受けた場合、形成コピーの実行中(つまり、ペアにおいて差分が生じている間)であっても、ホスト計算機51に、スプリットの完了を報告することができる。この場合、CPU21は、形成BM403及び差分コピー用の差分ビットマップ402(ペア状態をスプリットにした後の差分を管理する差分ビットマップ、以下、「更新BM」と略記する)を併用する。例えば、CPU21は、スプリットの完了を報告した後に、実PVOL240Pの或る実領域に新たにデータ要素が書込まれた場合、その実領域に対応した、更新BM402におけるビットを‘1’に更新する。CPU21は、形成コピー中、或いは、形成コピー完了後にコピー要求をホスト計算機51から受信した場合、更新BM402からビット‘1’を検出したならば、そのビット‘1’に対応した実領域(実PVOLにおける実領域)に記憶されているデータ要素をレプリケーション実SVOL240S1にコピーする。つまり、いわゆる差分コピーが行われる。
<<QS保存>>。
図3Bは、QS保存の概要図である。なお、図3Bには、1〜3世代のスナップショットにそれぞれ対応した3つの仮想SVOL241S1、241S2及び241S3が示されているが、以下、仮想SVOL241S1を例に採り説明する。
QS保存では、データ要素の保存先となる仮想領域(仮想SVOL241S1を構成する仮想領域)分のプール領域がプール2400から確保される。QS保存では、レプリケーション保存における形成コピーは実行されず、実PVOL240Pに新たなデータ要素が書き込まれる場合に、実PVOL240Pから仮想SVOL241S1へ旧いデータ要素が移動される。実PVOL240Pの或る実領域にデータ要素Aが記憶されている状態の、実PVOL240Pのスナップショットを取得する場合、その或る実領域に、データ要素Bが書きこまれ、その後、データ要素Cが書込まれる場合、更新前のデータ要素Aは、仮想SVOL241S1に書き込まれるが、その次の更新前のデータ要素Bは、仮想SVOL241S1に書き込まれず、データ要素Cに上書きされる。
また、例えば、3つの仮想SVOL241S1、241S2及び241S3が存在する場合に、実PVOL240Pの或る実領域が初めて更新される場合、その或る実領域に記憶されているデータ要素Aの複製が作成され、データ要素Aの複製が、3つの仮想SVOL241S1、241S2及び241S3にそれぞれ保存される(図10A参照)。このため、プール2400における3つの実領域に、それぞれ、3つのデータ要素Aの複製が記憶されることになる。
<<COWS保存>>。
図3Cは、COWS保存の概要図である。なお、図3Cには、1〜3世代のスナップショット(バックアップ)にそれぞれ対応した3つの仮想SVOL241S4、241S5及び241S6が示されているが、以下、仮想SVOL241S4を例に採り説明する。
実PVOL240Pの更新前のデータ要素が仮想SVOL241S4を通じてプール2400に退避される点が、QS保存と共通している。しかし、COWS保存は、下記の第一及び第二の点で、QS保存と相違する。
第一の点は、同一の実領域に何回データ要素が更新されても全ての更新前のデータ要素がプール2400に退避される点である。具体的には、例えば、データ要素Aの存在する実領域にデータ要素Bが書き込まれ、更に、その実領域にデータ要素Cが書き込まれる場合には、データ要素Aのみならずデータ要素Bもプール2400に退避される。但し、これは、1つの更新のたびに、スナップショット取得指示が入った場合であり、スナップショット取得の指示が入らず、かつ、他のVOLがデータを共有していなければ、退避せずに、データに上書きする。
第二の点は、複数世代の仮想SVOL241Sにおいて互いに重複する複数のデータ要素のうちの一つだけがプール2400におけるプール領域に保存され、他のデータ要素については、複数世代の仮想SVOL241Sを通じてそのデータ要素が参照される点である。具体的には、例えば、3つの仮想SVOL241S4、241S5及び241S6のそれぞれの仮想領域(以下、仮想領域1、2、3とする)に同じデータ要素Aが記憶されることになる場合、仮想領域1、2及び3が、プール2400における当該プール領域(データ要素Aが記憶される領域)と直接的に対応付けられるか(図10B参照)、或いは、仮想領域1のみが直接的に当該プール領域に対応付けられ、他の仮想領域2及び3が、仮想領域1に対応付けられる(つまり間接的に当該プール領域に対応付けられる)(図10C参照)。前者の場合は、仮想領域1、2及び3にリードアクセスが発生した場合、当該プール領域にリードアクセスが発生し、後者の場合は、仮想領域2及び3にリードアクセスが発生した場合には、仮想領域1を通じて当該プール領域にリードアクセスが発生する。
以上が、レプリケーション保存、QS保存及びCOWS保存についての説明である。なお、QS保存、COWS保存、容量拡張VOLのそれぞれに対応したプールは、別々であっても良いし共通であっても良い。また、採用されるデータ保存方式は、上記の3タイプに限定されず、3タイプ未満であっても良いし、4タイプ以上であっても良いし、3タイプであっても上記のデータ保存方式に限定する必要は無い。例えば、COWS保存に類似したデータ保存方式であって、更新前のデータ要素ではなく更新後のデータ要素がプール2400に退避され、更新前のデータ要素が実PVOL240Pに残るタイプのデータ保存方式が採用されても良い。また、上記のいずれのデータ保存方式においても、PVOLは仮想ボリューム(例えば容量拡張VOL或いは内部仮想VOL)であっても良い。
<<メモリ22に記憶されるコンピュータプログラム及び情報>>。
図17は、メモリ22に記憶されるコンピュータプログラム及び情報の一例を示す。
コンピュータプログラムとしては、例えば、レプリケーション保存を実行するレプリケーションプログラム2201、論理ボリュームに対するI/O(入力/出力)を制御するI/Oプログラム2202、データ保存方式の切替えを行う切替えプログラム2203、及び、所定の監視を行う監視プログラム2204がある。監視プログラム2204は、ストレージシステム20に代えて、管理装置50で実行されても良い。
情報としては、例えば、論理ボリュームやデータ保存方式タイプなどの管理のための構成情報2205がある。構成情報2205には、例えば、VOL管理テーブル、領域マッピングテーブル及びプール領域管理テーブルが含まれる。
図18は、VOL管理テーブル22051の構成例を示す。
VOL管理テーブル22041には、論理ボリューム毎に、VOL番号(例えばLUN)、VOL種別、データ保存方式タイプ、ペア相手VOL番号、ペア状態などが記録される。VOL種別としては、例えば、実VOLと仮想VOLのどちらであるか、PVOL、SVOL、プールVOL、外部実VOLのいずれであるか、仮想VOLでPVOLの場合には、容量拡張VOLと内部仮想VOLのいずれであるか等がある。
I/Oプログラム2202は、例えば、ホスト計算機51からI/Oコマンドを受けた場合、そのI/Oコマンドで指定されているLUNに対応した行(VOL管理テーブル22041における行)を参照する。I/Oプログラム2202は、そのLUNに対応したVOL種別やデータ保存方式タイプ等に応じて、アクセスを制御する。
図9Aは、領域マッピングテーブル910の一レコードの構成例を示す。
領域マッピングテーブル910は、VOL(例えば、仮想SVOL或いは容量拡張VOLといった仮想SVOL)毎に対応している。領域マッピングテーブル910の各レコード(行)は、対応するVOLにおける記憶領域(例えば仮想VOLにおける仮想領域)に対応している。レコードには、そのレコードに対応する記憶領域のアドレス901と、その記憶領域に対応付けられた記憶領域(例えば、PVOL或いはプール2400における実領域)のアドレス902とが記録される。
図9Bは、プール領域管理テーブル920の一レコードの構成例を示す。
プール領域管理テーブル920は、プール2400毎に対応している。プール領域管理テーブル920の各レコード(行)は、対応するプールにおける各プール領域に対応している。レコードには、そのレコードに対応するプール領域のアドレス911と、そのプール領域に関する情報(以下、プール領域管理情報)912とが記録される。プール領域のアドレス911は、例えば、プールVOLのIDと、そのプールVOLにおける位置を表す情報との組合せで表されている。プール領域管理情報912には、例えば、対応するプール領域に幾つの仮想領域が対応付けられているかや、そのプール領域に関するステータス(例えば、割当て済み、割り当て可能など)などが含まれる。
<<データ保存方式切替え>>。
図2は、データ保存方式の段階的な切替えの流れの一例を示す。
監視プログラム2204が起動される。監視プログラム2204は、定期的に起動しても良いし、ホスト計算機51から所定のコマンドを受信したことを契機に起動しても良い。例えば、PVOL又はSVOLを指定したライトコマンド又はリードコマンドがきたタイミングで、起動されても良い。
複数のレプリケーションペアについて、監視プログラム2204は、第一の判断を行う。第一の判断としては、例えば、以下の(第一の判断1)、(第一の判断2)及び(第一の判断3)のうちの少なくとも一つが行われる。
(第一の判断1)複数のレプリケーションペアにおける複数のレプリケーション実SVOLのうちの二以上のレプリケーション実SVOLにおいて、重複したデータ要素の総量がどのぐらいあるか。
(第一の判断2)複数のレプリケーションペアにおける複数のレプリケーション実SVOLのそれぞれのアクセス頻度はどのぐらいか。
(第一の判断3)レプリケーション実SVOLの消費容量割合(レプリケーション実SVOLの記憶容量のうちのどのぐらいに実際にデータ要素が記憶されているか)。
監視プログラム2204は、第一の判断において、以下の判断結果(11a)、(12a)及び(13a)のうちの少なくとも一つが得られた場合に、切替えプログラム2003に、レプリケーション保存からQS保存へ切替えることを実行させる(矢印201)。これにより、各レプリケーション実SVOL内のデータが各仮想SVOLを通じてプール領域に保存される。
(11a)(第一の判断1)において、重複したデータ要素の総量が第一の閾値以上第二の閾値未満である(第一の閾値<第二の閾値)。
(12a)(第一の判断2)において、所定数のレプリケーション実SVOLについてのアクセス頻度が第三の閾値以上第四の閾値未満である(第三の閾値<第四の閾値)。
(13a)(第一の判断3)において、レプリケーション実SVOLの消費容量割合が第五の閾値未満である。
監視プログラム2204は、第一の判断において、以下の判断結果(11b)、(12b)及び前述の(13a)のうちの少なくとも一つが得られた場合に、切替えプログラム2003に、レプリケーション保存からCOWS保存へ切替えることを実行させる。
(11b)(第一の判断1)において、重複したデータ要素の総量が第二の閾値以上である。
(12b)(第一の判断2)において、所定数のレプリケーション実SVOLについてのアクセス頻度が第三の閾値未満である。
上記の第一の判断において、前述したいずれの判断結果にもならない場合には、レプリケーション保存におけるレプリケーション実SVOLは残されたままとなる。
複数のQSペアについて、監視プログラム2204は、第二の判断を行う。第二の判断としては、例えば、以下の(第二の判断1)及び/又は(第二の判断2)が行われる。
(第二の判断1)複数のQSペアにおける複数の仮想SVOLのうちの二以上の仮想SVOLにおいて、重複したデータ要素の総量がどのぐらいあるか。
(第二の判断2)複数のQSペアにおける複数の仮想SVOLのそれぞれのアクセス頻度はどのぐらいか。
監視プログラム2204は、第二の判断において、以下の判断結果(21a)及び/又は(22a)が得られた場合に、切替えプログラム2003に、QS保存からCOWS保存へ切替えることを実行させる(矢印203)。これにより、複数の仮想SVOLにそれぞれ記憶されている複数のデータ要素が互いに重複している場合には、それら複数のデータ要素のうちの一つのデータ要素が記憶されているプール領域が、直接的に又は間接的に、複数の仮想SVOLにおいてそのデータ要素が存在する仮想領域にマッピングされる。互いに重複する複数のデータ要素のうちの他のデータ要素が存在するプール領域は、未使用のプール領域とされ、それ故、そのプール領域は、他のデータ要素の保存のために使用可能である。
(21a)(第二の判断1)において、重複したデータ要素の総量が第二の閾値以上である。
(22a)(第二の判断2)において、所定数の仮想SVOLについてのアクセス頻度が第三の閾値未満である。
監視プログラム2204は、第二の判断において、以下の判断結果(22b)が得られた場合に、切替えプログラム2003に、QS保存からレプリケーション保存へ切替えることを実行させる(矢印208)。
(22b)(第二の判断2)において、所定数の仮想SVOLについてのアクセス頻度が第四の閾値以上である。
複数のCOWSペアについて、監視プログラム2204は、第三の判断を行う。第三の判断は、例えば、複数の仮想SVOLのそれぞれのアクセス頻度はどのぐらいかの判断である。
監視プログラム2204は、第三の判断において、所定数の仮想SVOLについてのアクセス頻度が第三の閾値以上第四の閾値未満であるとの判断結果が得られた場合、切替えプログラム2003に、COWS保存からQS保存へ切替えることを実行させる(矢印206)。
監視プログラム2204は、第三の判断において、所定数の仮想SVOLについてのアクセス頻度が第四の閾値以上であるとの判断結果が得られた場合、切替えプログラム2003に、COWS保存からレプリケーション保存へ切替えることを実行させる(矢印207)。
以上が、データ保存方式の段階的な切替えの流れの概要である。なお、上記の流れにおいては、レプリケーション保存からQS保存或いはCOWS保存への切り替え、QS保存からCOWS保存或いはレプリケーション保存への切替え、及び、COWS保存からQS保存或いはレプリケーション保存への切替えにおいて、データ要素0の総量に応じて実PVOLから容量拡張VOLへの切り替えが行われても良い。具体的には、例えば、監視プログラム2204は、第一の判断、第二の判断及び第三の判断の各々において、データ要素を構成する全てのデータブロックが‘0’であるデータ要素(以下、「データ要素0」と言う)が実PVOLを占める割合が所定値以上かどうかを判断し、所定値以上であれば、実PVOLから容量拡張VOLへの切り替えを行い(矢印202、205、211、212、213、214)、所定値未満であれば、実PVOLから容量拡張VOLへの切替えを行わない(矢印201、204、203、206、207、208)。
上記の3タイプのデータ保存方式のそれぞれの容量効率(記憶容量の消費効率)について言うと、COWS保存の容量効率が最も良く、その次に、QS保存の容量効率が良く、レプリケーション保存の容量効率が最も悪い。なぜなら、レプリケーション保存では、レプリケーション実SVOLに空きの記憶容量があっても他の論理ボリュームに記憶されたデータ要素のコピー先として使用することは不可能であり、QS保存では、仮想SVOLの実際に使用される仮想領域の分だけプール領域が使用され、COWS保存では、複数の仮想SVOLに存在する複数のデータ要素が互いに重複してればそれらのデータ要素のうちの一つのデータ要素についてのみプール領域が使用され、他のプール領域は未使用扱いとなるからである。
一方、上記の3タイプのバックアップのそれぞれのSVOLについてのアクセス性能(I/Oの速度)で言うと、レプリケーション保存でのSVOLのアクセス性能が最も高く、その次に、QS保存でのSVOLのアクセス性能が高く、COWS保存でのSVOLのアクセス性能が最も低い。なぜなら、COWS保存では、複数の仮想SVOLに存在する複数の仮想領域にアクセスが発生することにより一つのプール領域にアクセスが集中するおそれがあり、QS保存では、どの仮想領域にどこのプール領域が割当てられているかを表す領域マッピングテーブルを参照するといった特段の処理が必要となり、レプリケーション保存では、領域マッピングテーブルの参照無しにアクセスすることが可能だからである。
本実施形態では、重複したデータ要素の総量、SVOLのアクセス頻度及びレプリケーション実SVOLの消費容量割合の少なくとも一つに応じて、レプリケーション保存からQS保存へ、レプリケーション保存からCOWS保存へ、或いは、QS保存からCOWS保存へと切替えられる。また、重複したデータ要素の総量、SVOLのアクセス頻度及びレプリケーション実SVOLの消費容量割合の少なくとも一つに応じて、COWS保存からQS保存へ、COWS保存からレプリケーション保存へ、或いは、QS保存からレプリケーション保存へと切替えられる。これにより、ストレージシステムの容量効率及び性能を高めることができる。
なお、データ保存方式の切替えにおいて、切替え前のSVOL(レプリケーション実SVOL又は仮想SVOL)のレプリカ(バックアップ)を作成した後に、データ保存方式を切替える方法と、レプリカを取らずにオンラインのまま切替える処理する方法とがある。
以下、各種のデータ保存方式切替えについて詳細に説明する。
<<図2の矢印201:レプリケーション保存からQS保存への切替え>>。
図5は、レプリケーション保存からQS保存への切替えの処理の流れの一例を示す。図5、図7、図13及び図15の説明において、切替え元となるレプリケーション実SVOLを「当該レプリケーション実SVOL」と呼び、当該レプリケーション実SVOLとペアを構成する実PVOLを「当該実PVOL」と呼び、切替え先となる仮想SVOLを「当該仮想SVOL」と呼ぶ。
ステップ2011において、切替えプログラム2203は、全てのビットが所定値(例えば0となった)移行用の差分ビットマップ(以下、移行BM)を準備し、その移行BMにおける先頭ビットの位置を表す番号を、カウント値としてセットする(移行BMの各ビット(以下、移行ビット)は、当該レプリケーション実SVOLの各実領域に対応している)。また、切替えプログラム2203は、当該レプリケーション実SVOLに対応した当該仮想SVOLを設定する(例えば、図18のボリューム管理テーブル22051に、当該仮想SVOLに対応した新たなレコードを設定する)。また、切替えプログラム2203は、当該仮想SVOLに対応した領域マッピングテーブル910も用意する。その際、領域マッピングテーブル910における各仮想領域(当該仮想SVOLを構成する仮想領域)に対応する各対応領域アドレス902として、当該実PVOLにおける各実領域のアドレスを記録しても良い。その領域マッピングテーブル910は、適宜に、ステップ2014によって更新される。
ステップ2012において、切替えプログラム2203は、カウント値が示す移行ビットに対応した実領域(当該レプリケーション実SVOLにおける実領域、以下、この図5の説明において、「当該実領域S」と言う)にデータ要素が保存されているか否かを判定する。データ要素が保存されていれば、ステップ2013が実行され、データ要素が保存されていなければ、ステップ2015が実行される。
ステップ2013において、切替えプログラム2203は、当該実領域Sに記憶されているデータ要素と、当該実PVOLにおける実領域(当該実領域に対応した位置にある実領域、以下、この図5の説明において、「当該実領域P」と言う)に記憶されているデータ要素とが重複しているか否かを判断する。重複していないとの判断結果になれば、ステップ2014が実行され、重複しているとの判断結果になれば、ステップ2015が実行される。
ステップ2014において、切り替えプログラム2203は、当該実領域Sに対応する仮想領域(以下、この図5の説明において、「当該仮想領域」と言う)に、未使用のプール領域(以下、この図5の説明において、「当該プール領域」と言う)を割り当てる。切り替えプログラム2203は、当該実領域Sに記憶されているデータ要素を当該プール領域にコピーする。切り替えプログラム2203は、当該プール領域と当該仮想領域とを対応付ける。具体的には、例えば、切り替えプログラム2203は、当該仮想SVOLに対応する領域マッピングテーブル910(図9A参照)に、当該仮想領域のアドレス901と、当該プール領域のアドレス902とを登録する。
ステップ2015において、切替えプログラム2203は、前述したカウント値をインクリメントし、インクリメント後のカウント値が所定値(例えば、移行BMを構成するビットの数)であるか否かを判定する。カウント値が所定値でなければ、切替えプログラム2203は、ステップ2012を実行し、カウント値が所定値であれば、ステップ2017を実行する。
ステップ2016において、切り替えプログラム2203は、当該レプリケーション実SVOLを構成要素とするペアを解除し、当該実PVOLと当該仮想SVOLとのペアをQS保存が行われるペアとして作成する。具体的には、例えば、切り替えプログラム2203は、ボリューム管理テーブル22051において、当該実PVOLに対応したペア相手VOL番号から当該レプリケーション実SVOLのVOL番号を除去する。また、例えば、切り替えプログラム2203は、当該実PVOLに対応したペア相手VOL番号に、当該仮想SVOLのVOL番号を含め、当該実PVOLに対応したデータ保存方式としてQS保存を表す値を設定する。同様に、例えば、切り替えプログラム2203は、当該仮想SVOLに対応したペア相手VOL番号に、当該実PVOLのVOL番号を含め、当該仮想SVOLに対応したデータ保存方式としてQS保存を表す値を設定する。
以下、図5のステップ2012及び2013で行われる処理の詳細の一例を説明する。ステップ2012及び2013では、差分ビットマップが使用されるか、或いは、データ要素の比較が行われる。以下、形成BM403における或るビットを「当該形成ビット」と言い、当該形成ビットに対応する、更新BM402におけるビットを「当該更新ビット」と言う。また、当該形成ビット(及び当該更新ビット)に対応する、実PVOLにおける実領域を「当該実領域P」と言い、当該実領域Pに対応する、レプリケーション実SVOLにおける実領域を「当該実領域S」と言う。
<<図5のステップ2012で行われる処理の詳細の一例>>。
切替えプログラム2203は、当該形成ビットが‘1’の場合、当該実領域Pについては、形成コピーが未実施なため、当該実領域Sにはデータ要素が無いと判定し、当該形成ビットが‘0’の場合、形成コピーが実施されたため、当該実領域Sにデータ要素が有ると判定する。
<<図5のステップ2013で行われる処理の詳細の一例>>。
切替えプログラム2203は、当該形成ビットと当該更新ビットがそれぞれ‘0’である場合、当該実領域Pにおけるデータ要素と、当該実領域Sにおけるデータ要素とが互いに重複していると判断し(つまりステップ2015が実行されることになり)、一方、当該形成ビットが‘0’であるが当該更新ビットが‘1’であるならば、それらのデータ要素が互いに重複していないと判断する(つまりステップ2014が実行されることになる)。或いは、例えば、切替えプログラム2203は、当該実領域Pと当該実領域Sからそれぞれデータ要素をリードし、リードされた2つのデータ要素を照合することで、それら2つのデータ要素が互いに重複しているか否かを判断する。重複していれば、ステップ2015が実行され、重複していなければ、ステップ2014が実行される。
ところで、データ保存方式の切り替え中において、I/Oプログラム2202は、当該実PVOL、当該レプリケーション実SVOL及び当該仮想SVOLのいずれについてもI/O禁止とすれば(例えば、それらのうちのいずれのVOLを指定したI/Oコマンドを受けても、ビジー或いはリトライといった応答を返すようにすれば)、データ保存方式の切り替え中に、VOLにおけるデータ要素が更新されてしまうのを防ぐことができる。
しかし、そのようにI/O禁止とすると、一時的にホスト計算機51が行う業務を停止することになり得る。
そこで、本実施形態では、I/Oプログラム2202は、データ保存方式の切替え中であっても、I/Oコマンドをホスト計算機51から受け付け、I/Oコマンドを受信した場合には、そのI/Oコマンドの処理を実行する。なお、I/Oプログラム2202は、データ保存方式の切り替え中であるか否かを、例えば、メモリ22に記録されている切り替え管理テーブル(図示せず)を参照することで判断することができる。切り替えプログラム2203は、例えば、データ保存方式の切替えを実行する場合には、どのPVOLとどのSVOLとのペアについてどのデータ保存方式からどのデータ保存方式への切替えを実行している最中かを表す情報(例えば、PVOLのVOL番号、SVOLのVOL番号、データ保存方式を表す情報を含んだ情報)を切り替え管理テーブルに登録し、切替えが終了した場合には、その登録した情報を切り替え管理テーブルから削除する。
以下、適宜に、データ保存方式の切り替え中におけるI/O処理を説明する。
<<レプリケーション保存からQS保存への切替え中におけるI/O処理>>。
図13は、レプリケーション保存からQS保存への切替え中にI/Oコマンドをホスト計算機51Aから受信した場合に実行される処理の流れを示す。図13(及び図15)を参照した説明では、I/Oコマンドで指定されている、当該実PVOLにおける実領域を、「指定実領域P」と言い、I/Oコマンドで指定されている、当該レプリケーション実SVOLにおける実領域を、「指定実領域S」と言う。また、当該レプリケーション実SVOLにおける、指定実領域Pに対応した位置にある実領域を、「対応実領域S」と言い、当該実PVOLにおける、指定実領域Sに対応した位置にある実領域を、「対応実領域P」と言う。また、リードコマンドに従うリード対象のデータ要素を「リード対象データ要素」と言い、ライトコマンドに従うライト対象のデータ要素を「ライト対象データ要素」と言う。
I/Oプログラム2202は、受信したI/Oコマンドが当該実PVOLを指定したリードコマンドであるか否かを判断する(ステップ2111)。
ステップ2111において、リードコマンドであるとの判断結果になれば、I/Oプログラム2202は、リードコマンドで指定されている指定実領域Pからリード対象データ要素をリードし、そのリード対象データ要素をホスト計算機51Aに送信する。
ステップ2111において、リードコマンドではないとの判断結果になれば、I/Oプログラム2202は、受信したI/Oコマンドが、当該実PVOLを指定したライトコマンド、又は当該レプリケーション実SVOLを指定したI/Oコマンドであるか否かを判断する(ステップ2113)。そのようなライトコマンド或いはI/Oコマンドであるとの判断結果になれば、ステップ2114以降が実行される。
I/Oプログラム2202は、指定実領域Pからの形成コピー或いは指定実領域Sへの形成コピーが済んでおらず(ステップ2114でYES)、移行BMについてのカウント値が、指定実領域P或いは指定実領域Sに対応した移行ビットの位置を表す番号未満であれば(つまり、指定実領域S或いは対応実領域Sから仮想SVOLへのデータ要素の移行が済んでいなければ)(ステップ2115でYES)、ステップ2116を実行する。ステップ2116において、I/Oプログラム2202は、指定実領域P或いは対応実領域Pにあるデータ要素を、対応実領域S或いは指定実領域Sにコピーし、その後、指定実領域P又は指定実領域Sへのライト対象データ要素のライト、或いは、指定実領域Sからのリード対象データのリードを行う。この後、I/Oプログラム2202は、指定実領域P或いは指定実領域Sに対応した形成ビットを‘0’に更新し、指定実領域P或いは指定実領域Sに対応した移行ビット及び更新ビットを‘1’に更新する。
I/Oプログラム2202は、指定実領域Pからの形成コピー或いは指定実領域Sへの形成コピーが済んでおらず(ステップ2114でYES)、移行BMについてのカウント値が、指定実領域P或いは指定実領域Sに対応した移行ビットの位置を表す番号以上であれば(つまり、指定実領域S或いは対応実領域Sから仮想SVOLへのデータ要素の移行が済んでいれば)(ステップ2115でNO)、ステップ2117を実行する。ステップ2117において、I/Oプログラム2202は、指定実領域P或いは対応実領域Pにあるデータ要素を、対応実領域S或いは指定実領域Sに対応した、当該仮想SVOLにおける仮想領域(実際にはその仮想領域に割り当てたプール領域)にコピーし、その後、指定実領域P又はコピー先の仮想領域へのライト対象データ要素のライト、或いは、その仮想領域からのリード対象データのリードを行う。
I/Oプログラム2202は、指定実領域Pからの形成コピー或いは指定実領域Sへの形成コピーが済んでおり(ステップ2114でNO)、移行BMについてのカウント値が、指定実領域P或いは指定実領域Sに対応した移行ビットの位置を表す番号未満であれば(ステップ2118でYES)、ステップ2119を実行する。ステップ2119において、I/Oプログラム2202は、指定実領域Sからのリード対象データのリードを行うか、或いは、指定実領域P又は指定実領域Sへのライト対象データ要素のライトを行い、指定実領域P又は指定実領域Sに対応した移行ビット及び更新ビットを‘1’に更新する。
I/Oプログラム2202は、指定実領域Pからの形成コピー或いは指定実領域Sへの形成コピーが済んでおり(ステップ2114でNO)、移行BMについてのカウント値が、指定実領域P或いは指定実領域Sに対応した移行ビットの位置を表す番号以上であれば(ステップ2118でNO)、ステップ2120を実行する。ステップ2120において、I/Oプログラム2202は、指定実領域Sに対応した仮想領域からのリード対象データのリードを行うか、或いは、指定実領域P(又は、指定実領域Sに対応した仮想領域)へのライト対象データ要素のライトを行い、指定実領域P又は指定実領域Sに対応した移行ビット及び更新ビットを‘1’に更新する。
<<図2の矢印203:QS保存からCOWS保存への切替え>>。
図6は、QS保存からCOWS保存への切替えの処理の流れの一例を示す。図6及び後述の図14の説明において、QSペアを構成する仮想SVOLを「QS仮想SVOL」と呼び、COWSペアを構成する仮想SVOLを「COWS仮想PVOL」と呼ぶ。
QS保存からCOWS保存への切替えが行われるということは、同一のVOLをPVOLとする複数のQSペアが存在するということ、言い換えれば、同一のPVOLについて複数のQS仮想SVOLが存在するということである。
ステップ2032において、切替えプログラム2203は、複数のQS仮想SVOLから、QS仮想SVOLの組合せを一つ選択する。
ステップ2033において、切り替えプログラム2203は、選択した組合せにおける一方のQS仮想SVOLに対応した移行BMを準備し、その移行BMにおける先頭移行ビットの位置を表す番号を、カウント値としてセットする。
ステップ2034において、切り替えプログラム2203は、カウント値が表す移行ビットに対応した二つの仮想領域(ステップ2032で選択された組合せを構成する二つのQS仮想SVOLにおける二つの仮想領域)に記憶されている二つのデータ要素が重複しているか否かを判断する。重複していると判断された場合、ステップ2035が行われ、重複していないと判断された場合、ステップ2036が行われる。
ステップ2035において、切り替えプログラム2203は、一方の仮想領域と一方のプール領域との対応付けを解除し、その一方の仮想領域と、他方の仮想領域に対応付けられている他方のプール領域とを対応付ける。具体的には、例えば、切り替えプログラム2203は、一方のQS仮想SVOLに対応した領域マッピングテーブル910における、一方の仮想領域のアドレス901に対応付けるアドレス902を、他方のプール領域のアドレスとする。対応付けが解除された一方のプール領域は、未割当てのプール領域として管理されても良い。もし、上記他方のプール領域に二つ以上の仮想領域が直接的に又は間接的に対応付けられている場合には、その他方のプール領域に、一方の仮想領域が対応付けられる。プール領域に幾つの仮想領域が対応付けられているかは、例えば、そのプール領域に対応したプール領域管理テーブル920に記録されるプール領域管理情報912に含まれる。
ステップ2036において、切り替えプログラム2203は、移行ビットの位置を表すカウント値をインクリメントする。
ステップ2037において、切り替えプログラム2203は、インクリメント後のカウント値が所定値(例えば、移行BMを構成するビットの数)であるか否かを判定する。カウント値が所定値でなければ、切替えプログラム2203は、ステップ2034を実行し、カウント値が所定値であれば、ステップ2038を実行する。
ステップ2038において、切り替えプログラム2203は、未選択の組合せ(QS仮想SVOLの組合せ)があるかどうかを判断し、有れば、ステップ2032を実行し、無ければ、ステップ2039を実行する。
ステップ2039において、切り替えプログラム2203は、VOL管理テーブル22051における、上記同一のPVOL及び複数のQS仮想SVOLにそれぞれ対応したデータ保存方式を、“QS”から“COWS”に更新する。これにより、ストレージシステム20において、各QS仮想SVOLが各COWS仮想SVOLとなる。
<<QS保存からCOWS保存への切り替え中におけるI/O処理>>。
図14は、QS保存からCOWS保存への切替え中にI/Oコマンドをホスト計算機51Aから受信した場合に実行される処理の流れを示す。
I/Oプログラム2202は、受信したI/Oコマンドがリードコマンドである場合(ステップ2131でYES)、そのリードコマンドで指定されている記憶領域(QSペアを構成するPVOLの記憶領域、又は、QSペアを構成するQS仮想SVOLの記憶領域)からデータ要素を読出し、読出したデータ要素をホスト計算機51Aに送信する(ステップ2132)。
I/Oプログラム2202は、受信したI/Oコマンドが、PVOLの記憶領域を指定したライトコマンドである場合(ステップ2131でNO、ステップ2133でYES)、そのライトコマンドで指定されている記憶領域にデータ要素を書込む(ステップ2134)。
I/Oプログラム2202は、受信したI/Oコマンドが、QS仮想SVOLの記憶領域を指定したライトコマンドである場合(ステップ2131でNO、ステップ2133でNO、ステップ2135でYES)、そのライト先の仮想領域が移行の済んでいない仮想領域であれば(具体的には、そのライト先仮想領域に対応した移行ビットが移行済みを表す値に更新されていなければ)(ステップ2136でYES)、その仮想領域にデータ要素を書込む(ステップ2134)。
そのライト先記憶領域が移行済みの仮想領域であれば(ステップ2136でNO)、I/Oプログラム2202は、そのライト先仮想領域が、他のQS仮想SVOLにおける他の仮想領域にマッピングされているかどうかを判断する(例えば、他のQS仮想SVOLに対応した領域マッピングテーブル910において、他のQS仮想SVOLの他の仮想領域のアドレス901にそのライト先仮想領域のアドレス902が対応付けられているかどうかを判断する)(ステップ2137)。
ステップ2137の判断の結果が、マッピングされているとの判断結果であれば(ステップ2137でYES)、I/Oプログラム2202は、上記他の仮想領域のマッピング先を、ライト先仮想領域からそのライト仮想憶領域に対応するプール領域に変更し、ライト先仮想領域に別のプール領域を対応付け(ステップ2138)、その別のプール領域に、ライトコマンドに従うデータ要素を書込む(ステップ2139)。この場合、例えば、ライト先仮想領域S1に対応するプール領域PLにデータ要素Aが記憶されており、ライト先記憶領域S1に他のQS仮想SVOLにおける他の仮想領域S2がマッピングされている場合、他の仮想領域S2のマッピング先がライト先仮想領域S1からプール領域SLに変更され、ライト先仮想領域S1に別のプール領域PL´が割当てられ、別のプール領域PL´に、ライトコマンドに従うデータ要素Bが書き込まれる。つまり、ライト先記憶領域S1に記憶されていたデータ要素Aが上書きされず残ることになる。
一方、ステップ2137の判断の結果が、マッピングされていないとの判断結果であれば(ステップ2137でNO)、I/Oプログラム2202は、ライト先記憶領域に対応付けられているプール領域に、ライトコマンドに従うデータ要素を書込む(ステップ2139)。この場合、例えば、ライト先仮想領域S1に対応するプール領域PLにデータ要素Aが記憶されている場合、そのプール領域PLに、ライトコマンドに従うデータ要素Bが書き込まれる。つまり、ライト先記憶領域S1に記憶されていたデータ要素Aがデータ要素Bに更新される。
<<図2の矢印204:レプリケーション保存からCOWS保存への切替え>>。
図7は、レプリケーション保存からCOWS保存への切替えの処理の流れの一例を示す。
ステップ2041〜ステップ2046´は、図5におけるステップ2011〜ステップ2016にそれぞれ対応している。図7に示す処理流れは、図5に示した処理流れと下記の点で相違しており、その他の点は実質的に同じである。
ステップ2042及びステップ2043でNOとなった場合は、レプリケーション実SVOLのデータの中身が、レプリケーション実PVOLと同じである。このため、切替えプログラム2203は、当該仮想SVOL(今回の切替え先である仮想SVOL)に対応する領域マッピングテーブル910を更新する(ステップ12001)。具体的には、例えば、切替えプログラム2203は、その領域マッピングテーブル910において、実領域SRに対応した仮想領域SV´(当該仮想SVOLにおける仮想領域)に対応するアドレス902として、仮想領域SV(既存のCOWS仮想SVOLの仮想領域)のアドレス、又は、仮想領域SVに対応したプール領域のアドレスを書込む。この場合、ステップ2044が行われない。これにより、重複したデータ要素がプール2400に存在するのを防ぐことができる。ステップ2043でYESとなった場合は、レプリケーション実SVOLのデータの中身が、レプリケーション実PVOLと異なるため、データを格納する領域を確保してデータを格納するステップ2014の処理と同様に行う(ステップ2044)。
・ステップ2046´において、切り替えプログラム2203は、当該レプリケーション実SVOLを構成要素とするペアを解除し、当該実PVOLと当該仮想SVOLとのペアをCOWS保存が行われるペアとして作成する。
<<レプリケーション保存からCOWS保存への切替え中におけるI/O処理>>。
図15は、レプリケーション保存からCOWS保存への切替え中にI/Oコマンドをホスト計算機51Aから受信した場合に実行される処理の流れを示す。
ステップ2141〜ステップ2150´は、図13におけるステップ2111〜ステップ2120にそれぞれ対応している。図15に示す処理流れは、図13に示した処理流れと下記の点で相違しており、その他の点は実質的に同じである。
・ステップ2150´において、I/Oプログラム2202は、指定実領域P或いは対応実領域Pにあるデータ要素を、対応実領域S或いは指定実領域Sに対応した、当該仮想SVOLにおける仮想領域(実際にはその仮想領域に割り当てたプール領域)にコピーし、その後、指定実領域P又はコピー先の仮想領域へのライト対象データ要素のライトを行う。
<<実PVOLから容量拡張VOLへの移行>>。
次に、実PVOLから容量拡張VOL(Thin Provisioning技術に従う仮想ボリューム)への移行の処理を、図8を参照して説明する。
I/Oプログラム2202は、実PVOLを指定したライトコマンドを受けた場合、そのライトコマンドで指定されている実領域Pに旧データ要素(保存済みのデータ要素)が記憶されているかどうかを判断する(ステップ2051)。I/Oプログラム2202は、旧データ要素が記憶されている場合(ステップ2051でYES)、旧データ要素を使用する仮想SVOL(例えば実PVOLをPVOLとする仮想SVOL)があるか否か検索する(ステップ2052)。もし、あれば(ステップ2052でYES)、I/Oプログラム2202は、旧データ要素が記憶されている実領域Pに対応する、仮想SVOLの仮想領域SVに、プール領域を割当て、そのプール領域に、その旧データ要素を書込むか、或いは、その仮想領域SVに既に同じデータ要素が記憶されていれば、その旧データ要素を実領域Pから破棄する(ステップ2053)。I/Oプログラム2202は、ライトコマンドで指定されている実領域Pに対応した、容量拡張VOLにおける仮想領域PVに、プール領域を割当て、プール領域に、ライトコマンドに従うデータ要素を書込む(ステップ2054)。その際、I/Oプログラム2202は、容量拡張VOLに対応する領域マッピングテーブル910に、割当てたプール領域のアドレス902と、そのプール領域の割当て先の仮想領域PVのアドレス901とを記録する。
実PVOLから容量拡張VOLへの移行の別の例として、図16を参照して説明する。この例では、移行BMが利用される。具体的には、まず、I/Oプログラム2202が、実PVOLのどの実領域まで容量拡張VOLに適用したかを示す移行BMを初期化し、カウント値を、移行BMの先頭の移行ビットを表す値にセットする(ステップ2151)。I/Oプログラム2202は、カウント値が表す移行ビットに対応した実領域から順に処理する。I/Oプログラム2202は、カウント値が表す移行ビットに対応した実領域Pに旧データ要素が保存されているかいないかを判定し(ステップ2152)、保存されていれば(ステップ2152でYES)、図8のステップ2052及び2053と同様の処理を行う(ステップ2153乃至2154)。その後、I/Oプログラム2202は、実領域Pに対応する仮想領域PVに、プール領域を割当て、プール領域に、旧データ要素を書込む(ステップ2055)。その際、I/Oプログラム2202は、容量拡張VOLに対応する領域マッピングテーブル910に、割当てたプール領域のアドレス902と、そのプール領域の割当て先の仮想領域PVのアドレス901とを記録する。その後、I/Oプログラム2202は、カウント値をインクリメントし、未処理の実領域があれば、ステップ2152を行う。
図16(及び/又は図8)において、前述の形成BMや更新BMを使用する方法について説明する。
例えば、移行ビットに対応する実領域P(又はライトコマンドで指定されている実領域P)に対応した形成ビットと更新ビットの両方が‘0’の場合、その実領域Pについては、形成コピーが済みで更新がなかったので、その実領域Pにおけるデータ要素と、その実領域Pに対応した記憶領域S(例えばレプリケーション実SVOLにおける記憶領域)に記憶されているデータ要素が同じである。そのため、I/Oプログラム2202により、記憶領域Sにおけるデータ要素が破棄されて、記憶領域Sが解放される。さらに、実領域Pにおけるデータ要素が、容量拡張VOLに割当てたプール領域へ格納される。実領域P及び記憶領域Sに、容量拡張VOLに割当てたプール領域とするよう、実PVOLやSVOLに対応するデータマッピングテーブル910がそれぞれ更新される。
また、例えば、移行ビットに対応する実領域P(又はライトコマンドで指定されている実領域P)に対応した形成ビットが‘0’で更新ビットが‘1’の場合、その実領域Pについて、形成コピーが済みで更新があったため、実領域Pに記憶されているデータ要素と記憶領域Sに記憶されているデータ要素が異なる。記憶領域Sにおけるデータ要素は、その記憶領域Sに対応する仮想領域SVに割当てられたプール領域に記憶される。
また、例えば、移行ビットに対応する実領域P(又はライトコマンドで指定されている実領域P)に対応した形成ビットが‘1’の場合、形成コピーが未実施なため、その実領域Pに所定のデータパターンではないデータ要素(例えば‘0’ではなく‘1’を表すデータ要素)があれば、その実領域Pに対応する仮想領域PVに、プール領域が割り当てられ、そのプール領域に、そのデータ要素が記憶され、その実領域Pが解放される。データ無し、或いは、所定のデータパターンのデータ要素があれば、プール領域が割当てられることなく、実領域Pが解放される。
図8では、所定のデータパターンでは無いデータ要素が記憶されている一以上の実領域に対応した一以上の仮想領域(容量拡張VOLにおける仮想領域)の全てにプール領域が割当てられた場合に、実PVOLから容量拡張VOLへの移行の完了となる。図16では、所定値(最後の移行ビットを表す値)を表すカウント値についてステップ2152乃至ステップ2155が終了した場合に、実PVOLから容量拡張VOLへの移行の完了となる。I/Oプログラム2202は、プール領域の割当てられていない仮想領域(容量拡張VOL)を指定したリードコマンドをホスト計算機51Aから受けた場合には、所定のデータパターンのデータ要素(例えば‘0’を表すデータ要素)をホスト計算機51Aに返す。これは、例えば、仮想SVOLについても適用することができる。すなわち、仮想SVOLについて、プール領域の割当てられていない仮想領域を指定したリードコマンドをホスト計算機51Aから受けた場合には、I/Oプログラム2202(又は切替えプログラム2203)は、所定のデータパターンのデータ要素(例えば‘0’を表すデータ要素)をホスト計算機51Aに返す。
<<データ保存方式の切り替え中における、実PVOLに対するリード/ライト処理>>。
I/Oプログラム2202は、例えば、データ保存方式の切り替え中において、実領域Pを指定したライトコマンドを受けた場合、その実領域Pへのライトが、実PVOLから容量拡張VOLへの移行の開始後初めてならば、I/Oプログラム2202は、実領域Pに対応したプール領域を確保し、そのプール領域に、ライトコマンドに従うデータ要素を格納する。旧データ要素が既に実領域Pにある場合、I/Oプログラム220は、そのデータ要素を記憶しているSVOL(例えば、レプリケーション保存におけるレプリケーション実SVOL)あるか否か検索する。もし、あれば、I/Oプログラム2202は、仮想SVOLに割当てたプール領域にその旧データ要素を書込む。または、I/Oプログラム2202は、仮想SVOLがすでに同じ旧データ要素を記憶していれば、その仮想SVOLに対して旧データ要素を書込むことなく、ライトコマンドに従うデータ要素を、実領域Pにおける旧データ要素に上書きする(或いは、実領域Pを破棄し、実領域Pに対応する仮想領域PV(容量拡張VOLにおける仮想領域)にプール領域を割当て、そのプール領域に、ライトコマンドに従うデータ要素を書込む)。COWS仮想SVOLにおける仮想領域へのライトの場合、その仮想領域が、レプリケーション保存における実PVOLに記憶されているデータ要素を共有している仮想領域であれば、I/Oプログラム2202は、COWS仮想SVOLに、その共有されているデータ要素を退避した後、ライトコマンドに従うデータ要素を、実領域Pにおける旧データ要素に上書きする(或いは、実領域Pを破棄し、実領域Pに対応する仮想領域PV(容量拡張VOLにおける仮想領域)にプール領域を割当て、そのプール領域に、ライトコマンドに従うデータ要素を書込む)。この後、COWS仮想SVOLにおける仮想領域に対応した形成ビットを‘0’、に更新し、差分ビットを‘1’に更新する。
<<領域の解放>>。
データ保存方式の移行の処理、及び/又は、実PVOLから容量拡張VOLへの移行の処理において、重複したデータ要素が記憶されている一方の記憶領域、及び/又は、所定のデータパターンのデータ要素が記憶されている記憶領域の解放が行われる。その記憶領域が仮想領域であれば、仮想領域に割当てられているプール領域の割り当てが解除され、そのプール領域が、他の仮想領域に割当てることが可能な状態とされる。
具体的には、例えば、レプリケーション保存からスナップショット保存(QS保存又はCOWS保存)への移行において、レプリケーション実SVOLにデータ要素が格納されていない場合、実PVOLからデータ要素が未コピーの場合、或いは、実PVOLにデータ要素が格納されていない場合は、そのデータ要素に対応する、仮想SVOLにおける仮想領域が解放される。実PVOLに代えて容量拡張VOLがレプリケーション保存におけるPVOLとなっている場合は、そのデータ要素が記憶されている、容量拡張VOLにおける仮想領域も解放される。PVOLからコピー済みの場合でも、レプリケーション実SVOLにデータ要素が無ければ、そのデータ要素に対応する、仮想SVOLにおける仮想領域が解放される。なお、データ要素が格納されていないとは、論理ボリュームのフォーマットによってデータ要素として‘0’が入っている場合を示す。フォーマットによりデータ要素‘0’が格納されているのか、或いは、ライト対象のデータ要素としてデータ要素‘0’が格納されているのかどうかは、ストレージシステム20が判断することができる。なお、例えば、実PVOLから容量拡張VOLへの移行の際には、I/Oプログラム2202は、データ要素‘0’がフォーマットによるものかライトコマンドによるものかに関わらず、データ要素‘0’が記憶される仮想領域を解放してよい。その場合、I/Oプログラム2202は、プール領域の割当てられていない仮想領域を指定したリードコマンドをホスト計算機51Aから受けた場合、データ要素‘0’をホスト計算機51Aに返す。
以上が、第一の実施形態についての説明である。なお、上記の実施形態において、例えば、レプリケーションペアにおいてPVOLとレプリケーション実SVOLが全く同じ内容の場合は、そのPVOLが、QS仮想SVOLのPVOLとなるだけで、レプリケーション保存からQS保存への切り替えが完了する。その場合、レプリケーション実SVOLの全ての記憶領域が解放されて良い。
<第二の実施形態>。
以下、本発明の第二の実施形態について説明する。その際、第一の実施形態との相違点を主に説明し、第一の実施形態との共通点については説明を省略或いは簡略する。
本実施形態では、切替え前のデータ保存方式におけるSVOLに記憶されているデータ要素が暗号化されている場合には、切替え後のデータ保存方式におけるSVOLに記憶されるデータ要素も暗号化される。即ち、セキュリティの保証は変わらない。暗号化が行われる単位は、何でも良い。例えば、論理ボリュームを構成する記憶領域単位でも良いし、所定数の記憶領域単位でも良いし、プール単位でも良い。
以下、幾つかの具体例を説明する。
図19Aに示す具体例によれば、レプリケーション実SVOLの属性が暗号化属性となっている。この場合、例えば、I/Oプログラム2202は、レプリケーション実SVOLにデータ要素を書込む場合、そのデータ要素を暗号化した上でそのレプリケーション実SVOLに書込む。この状態において、レプリケーション保存からCOWS保存へ切替えられる場合、言い換えれば、PVOL80Pに対応するSVOLが、レプリケーション実SVOL80RSからCOWS仮想SVOL80CS1に切替えられる場合、切替え元であるレプリケーション実SVOL80RSは暗号化属性となっているため、切替え先のCOWS仮想SVOL80CS1も暗号化属性とされる。具体的には、例えば、切替えプログラム2203が、レプリケーション実SVOL80RSに記憶されている、暗号化されているデータ要素をそのまま、COWS仮想SVOL80CS1の仮想領域に割当てたプール領域に書込むか、或いは、暗号化されているデータ要素を第一の暗号化/復号化方式及び/又は第一の暗号キー(例えばレプリケーション実SVOL80RSに対応した暗号化/復号化方式及び/又は暗号キー)で一旦復号し、復号されたデータ要素を第二の暗号化/復号化方式及び/又は第二の暗号キー(例えばCOWS仮想SVOL80CS1に対応した暗号化/復号化方式及び/又は暗号キー)で暗号化し、暗号化されたデータ要素を、COWS仮想SVOL80CS1の仮想領域に割当てたプール領域に書込む。
COWS保存の場合は、プール2400が、暗号化属性となっていない他のCOWS仮想SVOL80CS2と共有される場合がある。このため、プール2400には、暗号化されているデータ要素(暗号文)と暗号化されていないデータ要素(平文)とが混在することがある。
また、COWS仮想SVOL80CS1における仮想領域が、PVOL80Pにおける記憶領域にマッピングされている可能性があるため(言い換えれば、PVOL80Pに記憶されているデータ要素がCOWS仮想SVOL80CS1に共有される可能性があるため)、COSW仮想SVOL80CS1のPVOL80Pも暗号化されていないと、セキュリティが保障されているとは言えない。そこで、本実施形態では、図19Bに示すように、レプリケーションペアにおけるPVOLが暗号化属性となっておらず、レプリケーション実SVOL80RSが暗号化属性となっている状態から、そのレプリケーション実SVOL80RSからCOWS仮想SVOLへの切替えが行われた場合は、COWS仮想SVOL80CS1のみならず、PVOL80Pも暗号化属性とされる(例えば、PVOL80Pに記憶済みのデータ要素がI/Oプログラム2202によって暗号化される)。
また、図20に示すように、論理ボリューム毎に異なる暗号キーが用意されても良い。例えば、PVOL80P及びレプリケーション実SVOL80RSとで異なる暗号キーが、例えばメモリ22に記憶される(例えば、メモリ22では、どの論理ボリュームにどの暗号キーが対応しているかが記憶される)。以下、PVOL80Pに対応する暗号キーを「暗号キーA」とし、レプリケーション実SVOL80RSに対応する暗号キーを「暗号キーB」とする。レプリケーション保存からCOWS保存への切替えにおいて、COWS仮想SVOL80CS1に記憶されるデータ要素のうち、PVOL80Pと共有されるデータ要素については、暗号キーAで暗号化されていても良いし、そうではないデータ要素については、暗号キーBで暗号化されていても良い。或いは、COWS仮想SVOL80CS1に対応する暗号キーCが用意されれば、暗号キーBに代えて暗号キーCで暗号化されても良い。要するに、切り替え前において、PVOLとSVOLの暗号キーが違っているので、切り替え後も、PVOLとSVOLの暗号キーを違える(暗号キーBのままであっても、切り替え後のSVOLにおけるデータ要素は、PVOLとの暗号キーAと違った暗号キーで暗号化されていることになる)。
以上、レプリケーション保存からCOWS保存への切替えを例に採って幾つかの具体例を説明したが、上記の処理は、他のデータ保存方式切り替えに応用することができる。例えば、上記の処理は、レプリケーション保存からQS保存への切り替えに応用することができる。その場合、プール2400上のデータ要素の共有が発生しない点が、レプリケーション保存からCOWS保存への切替えの場合と異なる。また、例えば、切り替え元のSVOLで暗号化されていても切り替え先のSVOLで暗号しない形態も採用することができるが、その場合、CPU21は、ユーザ(ホスト計算機又は管理計算機などの所定の計算機)に警告を出すことができる。
<第三の実施形態>。
第三の実施形態では、複数の論理ボリュームから読み出されたデータ要素が互いに重複するか否かの判定に、データ要素を基に得られた値であって、データ要素のサイズよりも小さいサイズの値が利用される。その値としては、例えば、データ要素のハッシュ値、或いは、そのデータ要素の冗長コード(例えば、CRC(Cyclic Redundancy Check)やLRC(Longitudinal Redundancy Check))を採用することができる。
以下、幾つか具体例を説明する。
<<ハッシュ値利用方式>>。
図20Bは、ハッシュ値利用方式の概念を示す。以下、この図を参照して、ハッシュ値利用方式における処理の流れを説明する。
(ステップ1)例えば、CPU21は、論理ボリューム毎に、各一以上の記憶領域をセグメントとして管理する。ここでは、説明を分かり易くするため、一記憶領域が一セグメントであるとする。
(ステップ2)任意のタイミング(例えば、データ要素が重複しているか否かの判定の際、或いはそれよりも前の段階で)、各論理ボリュームのセグメントに記憶されているデータ要素のハッシュ値が算出される。ハッシュ値の算出は、所定のハッシュアルゴリズムでデータ要素のハッシュ値を算出するコンピュータプログラムがCPU21で実行されることにより行われても良いし、所定のハッシュアルゴリズムを実行するハードウェア回路にデータ要素を入力することでそのハードウェア回路により行われても良い。以下、CPU21によって実行されることとする。算出された複数のデータ要素にそれぞれ対応する複数のハッシュ値が、メモリ22に記憶される。
(ステップ3)CPU21は、メモリ22に記憶された或るハッシュ値と同じ値のハッシュ値があるかどうかを、複数のハッシュ値の中から検索することで、その或るハッシュ値に対応したセグメントと同じデータ要素が記憶されているセグメントを検索する。CPU21は、同じ値のハッシュ値が見つかれば、(ステップ4)を実行し、見つからなければ、重複するデータ要素が存在しないと判断する。
(ステップ4)CPU21は、値が同じハッシュ値に対応するデータ要素同士を比較する。その結果、一致が得られた場合、CPU21は、それらのデータ要素が互いに重複すると判断し、不一致であれば、それらのデータ要素が重複しないと判断する。
以上が、ハッシュ値利用方式についての説明である。
ハッシュ値が互いに異なる場合、それらに対応するデータ要素も必ず互いに異なる。このため、本方式によれば、ハッシュ値が互いに異なれば、データ要素同士を比較する必要が無くなる。
また、ハッシュ値は、データ要素よりもデータサイズが小さい。このため、小さいデータサイズであるハッシュ値同士の比較で、データ要素の重複を判定することができる。また、例えば、上記のように、一度計算した全てのハッシュ値をメモリ22に記憶しておき、適宜に、メモリ22に記憶されているハッシュ値を利用することで、データ要素の判定の都度にディスクドライブからデータ要素を読み出す負担を無くすことができる。
なお、本方式では、例えば、論理ボリュームに新たにデータ要素が書き込まれた場合には、その書込みと同期或いは非同期で(言い換えれば任意のタイミングで)、そのデータ要素を含んだ一以上のデータ要素のハッシュ値を計算してメモリ22に保存しておくことができる。
<<冗長コード利用方式>>。
図21Aは、冗長コード利用方式の概念を示す。
本方式では、ハッシュ値に代えて、一つの(二以上でも良い)データ要素に対応した冗長コード(例えば、メディアドライブのデータ化けの検出のために生成されて割り当てられているコード)が利用される。具体的には、例えば、上記の(ステップ3)において、冗長コード同士が比較される。冗長コードが互いに重複していなければ、互いにデータ要素が重複していないとの判断になり、冗長コードが互いに重複していれば、(ステップ4)において、データ要素同士が比較される。
上記のハッシュ値利用方式では、データ要素それ自体がメディアドライブ(例えばHDD或いはフラッシュメモリドライブ等の記憶装置)から読み出されるが、本方式では、冗長コードが読み出されれば良く、データ要素それ自体の読出しは不要である。また、本方式では、上記のハッシュ値同士の比較に代えて、読み出された冗長コード同士の比較が行われるため、ハッシュ値の計算も不要となる。
なお、冗長コードのハッシュ値が計算され、ハッシュ値同士が比較されても良い。すなわち、ハッシュ値利用方式と冗長コード利用方式を組み合わせた方式が利用されても良い。この場合、データ要素よりもデータサイズの小さい冗長コードを用いてハッシュ値を算出することができる。また、この場合でも、ハッシュ値の計算のためにデータ要素をメディアドライブから読み出すことは不要である。
<<メディアドライブ生成の冗長コードを利用する方式>>。
図21Bは、メディアドライブ生成の冗長コードを利用する方式の概念を示す。
本方式は、上述した冗長コード利用方式における冗長コード(つまり、ストレージシステム20におけるCPU21が算出した冗長コード)に代えて、メディアドライブ内部で計算され保持されている冗長コードを利用する方式である。
なお、本方式では、例えば、CPU21が、メディアドライブが生成した冗長コードを取得するためのコマンド(以下、冗長コードコマンド)を送信する機能を有している必要がある。そして、メディアドライブが、冗長コードコマンドをCPU21から受領した場合に、それを解析して、その冗長コードコマンドに応答して、メディアドライブ内部で作成された冗長コード(例えばメディアドライブ内のCPUによって作成された冗長コード)をCPU21に送信する機能(例えばインタフェース)を備えている必要がある。
この方式によれば、CPU21が個々の一以上のデータ要素について冗長コードを作成しなくても済む。
ちなみに、本方式では、メディアドライブ(具体的には、例えば、メディアドライブの種類、ベンダ、インタフェース等)によっては、冗長コードを作成するための計算方式が異なる可能性がある。そして、ストレージシステムには、冗長コードの計算方式が異なる複数のメディアドライブが混在している可能性がある。この場合、例えば、メモリ22に、どんな計算方式がどんなメディアドライブで実行されるかを表す情報や、算出される冗長コードに互換性のあるメディアドライブの組合せを表す情報などが記憶される。CPU21は、それらの情報を基に、冗長コードの計算方式が異なっていても比較可能な冗長コード同士であれば、本方式での重複判定(データ要素同士が重複するか否かの判定)を行い、比較不可能な冗長コード同士であれば、上述したハッシュ値利用方式、冗長コード利用方式或いはそれらの組合せの方式で、重複判定を行う。
<第四の実施形態>。
ストレージシステム20A、20B間で、レプリケーション保存、QS保存及びCOWS保存が行われる。
ストレージシステム20毎にプール2400がある。例えば、ストレージシステム20A、20B間で、レプリケーション保存が行われていて、レプリケーション保存からCOWS保存に切り替えられる場合、PVOLを有するストレージシステム20Aが、形成BMと、PVOLに対応した更新BM(以下、PVOL更新BM)とを有し、SVOLを有するストレージステム20Bが、SVOLに対応した更新BM(以下、SVOL更新BM)とを設ける。それらのビットマップの使用方法は、例えば以下の通りである。なお、以下の説明では、PVOL更新BMにおけるビットを「PVOL更新ビット」と言い、SVOL更新BMにおけるビットを「SVOL更新ビット」と言う。
すなわち、例えば、形成ビット、PVOL更新ビット、及びSVOL更新ビットが‘0’の場合、形成コピー済みで更新がなかったので、PVOLにおける記憶領域P上のデータ要素とレプリケーション実SVOLにおける実領域RS上のデータ要素が同じである。このため、実領域RS上のデータ要素が破棄され、その実領域RSが解放される。そして、COWS仮想SVOLにおける仮想領域VSが、実領域Pにマッピングされる。
また、例えば、形成ビットが‘0’で、PVOL更新ビット又はSVOL更新ビットが‘1’の場合、形成コピー済みで更新があったため、記憶領域Pと実領域RSにおけるデータ要素が互いに異なる。実領域RSのデータ要素は、対応する仮想領域VSに割当てられたプール領域に書き込まれる。
また、例えば、形成ビットが‘1’の場合、形成コピーが未実施なため、現状のままとされる。
<第五の実施形態>。
2つ以上の論理ボリューム(VOL)を連結して1つのVOLとして定義される連結LOLが構成される。これにより、VOLサイズの上限がストレージシステム20内で予め設定されても、その上限を超えたサイズのVOLをホスト計算機に提供することが可能である。
本実施形態では、連結PVOLが、実PVOLと仮想PVOL(例えば容量拡張VOL)で構成される(実PVOL及び仮想PVOLの数はそれぞれ1以上である)。テスト環境或いは並列処理システムなどで、複数のユーザ(複数のホスト計算機)にとっての共通のデータ(例えば、オペレーティングシステム(OS)などのデータ)が、実PVOLに格納され、各ユーザが個別に書き換えるデータは、仮想PVOLに格納される。
以下、この連結VOLのCOWS保存を行う処理について、図11Aを参照して説明する。
連結VOL1101のスナップショット(COWS保存のための連結VOL1111)が取得される。連結VOL1101の実PVOL1102とペアになるCOWS仮想SVOLは、仮想SVOL1112であり、連結VOL1101の仮想PVOL1103とペアになるCOWS仮想SVOLは、仮想SVOL1113である。仮想SVOL1112及び1113で連結VOL1111が構成される。
一例として、コピー元の連結VOL1101をユーザA(ホスト計算機A)が使用し、コピー先の連結VOL1111をユーザB(ホスト計算機B)が使用する。ユーザA、Bが使用する共通のデータ(例えばOS)が、ユーザAが使用する連結VOL1101の実PVOL1102に格納される。仮想SVOL1112の各仮想領域が、実PVOL1102の各実領域にマッピングされている。このため、ユーザBが、OS等の共通データをロードする場合には、仮想SVOL1112を指定したI/Oコマンドを送信することで、その仮想SVOL1112の各仮想領域がマッピングされた、実PVOL1102の実領域から、共通データが読み出される。
実PVOL1102の書き換え無しの形態(以下、パターン1)では、例えば、ユーザAとBは、それぞれ、仮想PVOL1103と仮想SVOL1113にデータ要素を書込む。
実PVOL11102の書き換え有りの形態(以下、パターン2)では、例えば、実PVOL1102を指定したライトコマンドを受けた場合、CPU21は、ユーザBが、実PVOL1102における旧データ要素(保存済みデータ要素)を使用する可能性があるため、その旧データ要素を、プール2400におけるプール領域に退避する。その際、CPU21は、そのプール領域を、そのプール領域の退避元の実領域に対応した、仮想SVOL1112における仮想領域に、マッピングする。
また、別の例では、図11Bに示すように、システム管理者(Root)からOSのバージョンアップなどによって、ユーザAとBの共通部分の書き換えを行う場合(以下、パターン3)、パターン1との組み合わせにより、ユーザA及びBともにOSのバージョンアップを行う。または、パターン2との組み合わせにより、ユーザAのみバージョンアップを行い、ユーザBは旧バージョンのままにすることも可能である。パターン2及びパターン3において、ユーザBの共通部分のスナップショットを取得しておき、ある時点まで共通部分(OSなど)の状態を戻せるようにしておくことも考えられる。
複数ユーザには共通となるデータがあり、それを実PVOLに集約することで、容量効率の向上を図るとともに、共通部のためキャッシュに載っている可能性が高く、キャッシュヒット率の向上も期待できる。なお、キャッシュヒットとは、例えば、リードコマンドを受けた場合に、そのリードコマンドでの対象であるデータ要素が、キャッシュメモリ(メモリ22に含まれる)から見つかることである。もし、CPU21は、キャッシュヒットによりデータ要素が見つかったならば、そのキャッシュメモリ上のデータ要素をホスト計算機に送信する。もし、キャッシュヒットとならなかった場合(そのデータ要素がキャッシュメモリ見つからなかった場合)、CPU21は、メディアドライブからデータ要素を読出し、読み出したデータ要素をキャッシュメモリに一時保存し、そのキャッシュメモリ上のデータ要素をホスト計算機に送信する。
上述した連結VOL1101において、CPU21が、実PVOL1102に、キャッシュヒット率が低いデータ要素(例えば、キャッシュヒット率が或る閾値未満のデータ要素)を保存し、仮想PVOL1103に、キャッシュヒット率の高いデータ要素(例えば、キャッシュヒット率が或る閾値以上のデータ要素)を保存しても良い。仮想PVOL1103よりも実PVOL1102の方が、どの仮想領域にどのプール領域が割当てられているかサーチが不要な分、リード性能が高いと考えられる。このため、キャッシュヒット率が低いが故にリードが発生する可能性の高いデータ要素を、実PVOL1102に保存しておくことで、リード性能の低下を抑えることができる。
<第六の実施形態>。
第六の実施形態では、ストレージシステムの構成が異なる。以下、その一例を、図12を参照して説明する。
ストレージシステム110は、I/Fパッケージ部90(90A、90B)、制御部80(80A、80B)、不揮発メモリ29(29A、29B、I/Fパッケージ部90と制御部80を接続するネットワーク33、記憶部24及び70を備える。各要素は少なくとも1つからなる。
ストレージシステム110が、SAN41を介してホスト計算機51に接続されている。
I/Fパッケージ部90Aが有する記憶資源(図示せず)には、どのVOLがどの制御部80に格納されているかを認識するための構成情報が記憶されている。構成情報は、制御部80内のローカルメモリ22や不揮発メモリ29にも格納されている。
I/Fパッケージ部90Aは、ホスト計算機51からI/Oコマンドを受けると、I/Oコマンドを解析して、そのI/Oコマンドで要求されているデータが格納されているVOLがどの制御部80の配下に管理されているかを判断し、その制御部80へ、I/Oコマンドを振り分ける処理を行う。また、別のI/Fパッケージ部90B、記憶部24及び70へのデータ転送も行う。制御部80は、不揮発メモリ29へデータ要素を転送する。
<第七の実施形態>。
本実施形態では、切り替え前のデータ保存方式におけるSVOLが、切り替え後のデータ保存方式におけるSVOLのPVOLとされる。具体的には、例えば、PVOLに対して2個のレプリケーション実SVOL1及び2があるとする。例えば、切替えプログラム2203は、図22Aに示すように、PVOLとレプリケーション実SVOL1が同じ内容で、且つ、レプリケーション保存からCOWS保存に切替える場合、図22Bに示すように、レプリケーション実SVOL1をPVOLとし、レプリケーション実SVOL2をCOWS仮想SVOL1とし、元々もPVOLを破棄することができる。
レプリケーション実SVOLが複数個ある場合、レプリケーション実SVOLの1つが、COWS仮想PVOLに変更され、他のレプリケーション実SVOLが、COWS仮想PVOLをPVOLとしたSVOLであるCOWS仮想SVOLに変更されるとする。
まず、図5や図7のように、移行用BMが使用され、VOLの先頭から順にデータが参照される。レプリケーション実SVOL1、2及び3のうち、レプリケーション実SVOL1が、COW仮想PVOLとし、レプリケーション実SVOL2及び3が、それぞれ、その変更後のCOWS仮想PVOLをPVOLとしたSVOLであるCOWS仮想SVOLに変更される。
レプリケーション実SVOL2及び3のそれぞれの先頭の実領域から、レプリケーション実SVOL1とデータと同じであるかどうかが判定する。もし、判定対象の実領域(レプリケーション実SVOL2及び3における実領域)に記憶されているデータ要素と、それに対応する、レプリケーション実SVOL1における実領域に記憶されているデータ要素とが、同じである場合は、その判定対象の実領域をアクセス先とする場合は、レプリケーション実SVOL1における実領域がアクセス先とされる(つまり実領域同士がマッピングされる)。具体的には、判定対象の実領域(レプリケーション実SVOL2及び3における実領域)について、ステップ12001と同様の処理が行われる。判定対象の実領域(レプリケーション実SVOL2及び3における実領域)に記憶されているデータ要素と、それに対応する、レプリケーション実SVOL1における実領域に記憶されているデータ要素とが、異なる場合は、判定対象の実領域について、ステップ2014と同様の処理が行われる。
このようにすることで、元のレプリケーション実PVOLにライトが入った場合、レプリケーション実PVOLと前記レプリケーション実SVOL1にライトデータを書き込み、レプリケーション実SVOL2及び3についてはデータ要素を参照するためのアドレスのみ格納すればよいため、データ要素を格納するために必要な記憶領域が減り、書き込み処理回数も1回ですむ。
上記でSVOLがn個ある場合,ペア関係はn個でそれぞれ独立な関係である。また、スナップショットを構成するPVOLを指定したライト要求を受信した場合、SVOLへデータ要素をコピーし終わっていなければ、ライトデータを格納する前に、SVOLへのコピー処理を行う必要がある。このコピー処理は、コピーをn個作成すればn回コピーが必要となる。しかし、本処理を実施すれば、コピーは1回ですむ。
上記のバリエーションとして、QSの仮想SVOLを他のQSの仮想SVOLのPVOLとするものもある。
以上、本発明の幾つかの実施形態を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、上述した複数の実施形態の二以上の実施形態を組み合わせることもできる。
20A、20B、20C、20D…ストレージシステム 51…ホスト計算機 52…仮想化装置 70…外部ストレージシステム 100A、100B…仮想ストレージシステム