(57)【要約】  ストレージシステムにおいて、記憶デバイス内の物理アドレスと論理アドレスとの対応関係と、複数の記憶デバイスがそれぞれ提供する論理空間を管理し、論理空間内の第１のデータと第２のデータとを交換する場合、第１のデータ及び第２のデータが同一の記憶デバイスに格納されているか否かを判定し、その判定の結果が肯定である場合、記憶デバイスにおいて、第１のデータが格納されている物理領域の物理アドレスと第２のデータが格納されている物理領域の物理アドレスとをそれぞれ変更せずに、第１のデータに対応する論理アドレスと第２のデータに対応する論理アドレスとを入れ替える。
2016113831.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶デバイスと、
前記複数の記憶デバイスを制御するストレージコントローラと
を有し、
前記複数の記憶デバイスの各々は、サブ論理空間を前記ストレージコントローラに提供し、当該記憶デバイス内の物理アドレスと論理アドレスとの対応関係を管理し、
前記ストレージコントローラは、
前記複数の記憶デバイスがそれぞれ提供する複数のサブ論理空間に基づく空間である論理空間を管理し、
前記論理空間内の複数のデータの内の１つである第１のデータと前記複数のデータの内の１つである第２のデータとを交換する場合、前記第１のデータ及び前記第２のデータが同一の記憶デバイスに格納されているか否かを判定する第１判定を行い、
前記第１判定の結果が肯定である場合、当該記憶デバイスにおいて、前記第１のデータが格納されている物理領域の物理アドレスと前記第２のデータが格納されている物理領域の物理アドレスとをそれぞれ変更せずに、前記第１のデータに対応する論理アドレスと前記第２のデータに対応する論理アドレスとを入れ替える
ストレージシステム。
【請求項２】
前記複数の記憶デバイスの各々が、複数の物理領域を有する物理記憶媒体を有し、
前記論理空間は、複数の論理領域を有し、
前記複数の記憶デバイスの各々が、物理領域と論理領域の対応関係を管理する媒体コントローラを有し、
前記ストレージコントローラは、前記第１判定の結果が肯定である場合、前記第１のデータに対応する論理アドレスと前記第２のデータに対応する論理アドレスとを指定した交換指示を前記記憶デバイスへ送信し、
前記交換指示を受信した記憶デバイスの媒体コントローラは、デバイス内交換処理を行い、
前記デバイス内交換処理は、前記第１のデータ及び前記第２のデータの両方の移動が不要な処理であり、
前記第１のデータに対応する論理アドレスが属する第１の論理領域に割り当てられている第１の物理領域に代えて、前記第２のデータに対応する論理アドレスが属する第２の論理領域に割り当てられている第２の物理領域を、前記第１の論理領域に割り当てる処理と、
前記第２の物理領域に代えて、前記第１の物理領域を前記第２の論理領域に割り当てる処理と、を含む、
請求項１に記載のストレージシステム。
【請求項３】
前記複数の記憶デバイスによって、２以上のデータに基づき生成されるパリティを用いるＲＡＩＤグループが構成されており、
前記論理空間が、それぞれ複数の論理領域が属する複数のストライプグループに分割されており、
前記複数のストライプグループの各々が有する複数の論理領域には、２以上のデータと所定数のパリティとがそれぞれ格納され、
前記交換指示を受信した記憶デバイスの媒体コントローラは、前記第１のデータ及び前記第２のデータに基づいて、前記第１の論理領域が属するストライプグループ内のパリティと前記第２の論理領域が属するストライプグループ内のパリティとの両方の更新に用いられる中間パリティを生成する
請求項２に記載のストレージシステム。
【請求項４】
前記第１判定の結果が否定の場合、
前記第２の記憶デバイスの媒体コントローラは、前記第２のデータ及び前記第１のデータに基づいて、前記第２の論理領域が属するストライプグループ内のパリティの更新に用いられる中間パリティを生成し、
前記第１の記憶デバイスの媒体コントローラは、前記第１のデータ及び前記第２のデータに基づいて、前記第１の論理領域が属するストライプグループ内のパリティの更新に用いられる中間パリティを生成する
請求項３に記載のストレージシステム。
【請求項５】
前記ストレージコントローラは、メモリを有し、
各記憶デバイスで生成された中間パリティは、前記メモリに格納され、
前記ストレージコントローラは、前記メモリに格納された複数の中間パリティの内、同一の記憶デバイスに送信する複数の中間パリティを、１回のコマンドで前記記憶デバイスに送信する
請求項３に記載のストレージシステム。
【請求項６】
前記ストレージコントローラは、前記中間パリティを生成した記憶デバイスに対して、その記憶デバイスを含んだＲＡＩＤグループ内の記憶デバイスであってその生成した中間パリティの送信先である送信先記憶デバイスを示す送信先情報を送信し、
前記送信先情報を受信した記憶デバイスの媒体コントローラは、その生成した中間パリティを、前記ストレージコントローラを経由せずに、その受信した送信先情報が示す記憶デバイスへ送信する
請求項４に記載のストレージシステム。
【請求項７】
前記複数の記憶デバイスの各々の物理記憶媒体は、ＮＡＮＤフラッシュメモリを有し、
前記ストレージコントローラは、外部装置に接続されており、前記論理空間のデフラグコマンドを前記外部装置から受信し、前記デフラグコマンドに応答してデフラグ処理を実行し、
前記デフラグ処理において、前記ストレージコントローラは、第１のデータと第２のデータの組毎に、前記第１判定を行い、
前記第１判定の結果が否定である場合、前記第１のデータを格納する第１の記憶デバイスと前記第２のデータを格納する第２の記憶デバイスとの内の少なくとも一方に前記ストレージコントローラが要求を送信することで、デバイス間交換処理が行われ、
前記デバイス間交換処理は、前記第１のデータ及び前記第２のデータの両方の移動が必要な処理であり、
前記第１のデータが前記第１の記憶デバイスの物理領域から読み出され、前記第２の記憶デバイスの物理領域に書き込まれる処理と、
前記第２のデータが格納されている物理領域に代えて、前記第１のデータの書き込み先の物理領域が、前記第２の記憶デバイスの媒体コントローラにより、前記第２の論理領域に割り当てられる処理と、
前記第２のデータが前記第２の記憶デバイスの物理領域から読み出され、前記第１の記憶デバイスの物理領域に書き込まれる処理と、
前記第１のデータが格納されている物理領域に代えて、前記第２のデータの書き込み先の物理領域が、前記第１の記憶デバイスの媒体コントローラにより、前記第１の論理領域に割り当てられる処理と、を含む、
請求項３に記載のストレージシステム。
【請求項８】
前記ストレージコントローラは、外部装置に接続されており、
前記ストレージコントローラは、同一の記憶デバイス内におけるデータの交換に関する情報を含む第１の管理情報と、異なる記憶デバイス間におけるデータの交換に関する情報を含む第２の管理情報と、を更に有し、
前記ストレージコントローラは、
前記外部装置から、前記第１のデータと前記第２のデータとの交換要求を受信し、
前記交換要求に応答して行う処理において、前記第１判定の結果が肯定である場合、前記第１の管理情報に、前記第１のデータに対応する論理アドレス及び前記第２のデータに対応する論理アドレスのセットを登録し、
前記交換要求に応答して行う処理において、前記第１判定の結果が否定である場合、前記第２の管理情報に、前記第１のデータに対応する論理アドレス及び前記第２のデータに対応する論理アドレスのセットを登録し、
前記外部装置に、前記交換要求に対する完了応答を送信し、
前記ストレージコントローラは、前記外部装置に前記完了応答を送信した後に、
前記第１の管理情報に登録されているデータを格納する記憶デバイスに対して、前記デバイス内交換処理に係る指示を送信し、
前記第２の管理情報に登録されているデータを格納する少なくとも１の記憶デバイスに対して、前記デバイス間交換処理に係る指示を送信する
請求項７に記載のストレージシステム。
【請求項９】
前記ストレージコントローラは、前記外部装置から、前記第１の論理領域を対象とするライト要求を受信した場合であって、前記第１の論理領域が、前記第１の管理情報又は前記第２の管理情報の何れかに登録されている場合、前記第１の論理領域と前記第２の論理領域との間の交換処理が完了した後、前記ライト要求に関するライト処理を行う
請求項８に記載のストレージシステム。
【請求項１０】
前記ストレージコントローラは、前記外部装置から、前記第１の論理領域を対象とするリード要求を受信した場合であって、前記第１の論理領域が、前記第１の管理情報又は前記第２の管理情報の何れかに登録されている場合、前記第１の論理領域の交換相手である前記第２の論理領域に係るデータをリードする
請求項８に記載のストレージシステム。
【請求項１１】
前記ストレージコントローラは、前記第１の論理領域の属するストライプグループの更新後のパリティを、前記ストレージコントローラが生成するか、それとも、前記交換指示を送信した記憶デバイスの媒体コントローラに前記中間パリティを生成させるか、を判定する第２判定を行い、
前記交換指示を受信した記憶デバイスの媒体コントローラは、前記ストレージコントローラの前記第２判定の結果に基づいて、前記中間パリティを生成するか否かを決定する
請求項３に記載のストレージシステム。
【請求項１２】
前記複数の記憶デバイスの各々が、複数の物理領域を有する物理記憶媒体を有し、
前記複数の記憶デバイスの各々が、物理領域と論理領域の対応関係を管理し、
前記ストレージコントローラは、
それぞれ仮想的な論理ボリュームであり複数の仮想領域を有する第１の仮想ボリューム及び第２の仮想ボリュームを管理し、
前記第１の仮想ボリュームに属する第１の仮想領域と前記第２の仮想ボリュームに属する第２の仮想領域とが、前記複数の論理領域の１つである第１の論理領域を共に参照しており、
前記外部装置から前記第１の仮想領域に対するライト要求を受信した場合、前記第１の論理領域の論理アドレスを前記複数の論理領域の１つである第２の論理領域にコピーし、前記第２の仮想領域の参照先を前記第２の論理領域に変更する
請求項１に記載のストレージシステム。
【請求項１３】
記憶デバイス内の物理アドレスと論理アドレスとの対応関係を管理し、
複数の記憶デバイスがそれぞれ提供する複数のサブ論理空間に基づく空間である論理空間を管理し、
前記論理空間内の複数のデータの内の１つである第１のデータと前記複数のデータの内の１つである第２のデータとを交換する場合、前記第１のデータ及び前記第２のデータが同一の記憶デバイスに格納されているか否かを判定する第１判定を行い、
前記第１判定の結果が肯定である場合、当該記憶デバイスにおいて、前記第１のデータが格納されている物理領域の物理アドレスと前記第２のデータが格納されている物理領域の物理アドレスとをそれぞれ変更せずに、前記第１のデータに対応する論理アドレスと前記第２のデータに対応する前記論理アドレスとを入れ替える
記憶制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、ストレージシステム及び記憶制御方法の技術に関する。
【背景技術】
【０００２】
複数のフラッシュメモリパッケージ（以下「ＦＭパッケージ」という）でパリティグループを構成し、データの冗長性を高めるストレージシステムが知られている。ＦＭパッケージとは、複数のフラッシュメモリチップ（以下「ＦＭチップ」という）を搭載した記憶デバイスである。特許文献１には、ホストから受信したライト要求に係るデータをＦＭパッケージに格納するにあたり、パリティの生成処理をＦＭパッケージに実行させるストレージシステムが記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】ＵＳ２０１３／０２９０７７３
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ファイルを構成するデータ（以下「ファイルデータ」）のライト及び消去等が繰り返されるうちに、ファイルデータが断片化されてしまう。ファイルデータが断片化すると、ファイルのライト処理及びリード処理の速度が低下する。【０００５】
デフラグ処理は、ファイルデータを構成する複数の断片データを整理する処理、典型的には、複数の断片データを連続的に再配置する処理である。一般に、ストレージシステムは、複数の記憶デバイスによって構成されたパリティグループ（ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  （ｏｒ  Ｉｎｅｘｐｅｎｓｉｖｅ）  Ｄｉｓｋｓ）グループと呼ばれることもある）と、パリティグループを制御するストレージコントローラとを有する。パリティグループは、複数のストライプグループを有する。各ストライプグループは、複数の記憶デバイスに跨っており、具体的には、複数の記憶デバイスがそれぞれ有する複数のストライプで構成されている。ＲＡＩＤレベルがＲＡＩＤ５又はＲＡＩＤ６のようにパリティを必要とするＲＡＩＤレベルの場合、ストレージコントローラは、デフラグ処理において、移動されたデータが属するストライプグループ内の複数のデータをリードしてパリティを更新する必要がある。この観点から、ストライプグループとは、パリティの生成の単位となるデータ群（複数のデータ）が属するグループとも言える。【０００６】
また、ストレージコントローラは、更新後のパリティを、更新前のパリティを有する記憶デバイスに転送し、更新前のパリティを更新後のパリティで置換する必要もある。したがって、デフラグ処理が実行されると、ストレージコントローラの処理負荷が上昇し、また、ストレージコントローラと記憶デバイスとの間の通信負荷も上昇する可能性がある。なお、ストレージコントローラの処理負荷の上昇、又は、ストレージコントローラと記憶デバイスとの間の通信負荷の上昇は、デフラグ処理の場合に限られず、データの移動が発生する処理において発生し得る。【０００７】
そこで、本発明の目的は、データの移動が発生する処理において、ストレージコントローラの処理負荷の上昇を抑制するストレージシステム及び記憶制御方法を提供することにある。また、本発明の目的は、データの移動が発生する処理において、ストレージコントローラと記憶デバイスとの間の通信負荷の上昇を抑制するストレージシステム及び記憶制御方法を提供することにある。
【課題を解決するための手段】
【０００８】
一実施例に係るストレージシステムは、複数の記憶デバイスと、複数の記憶デバイスを制御するストレージコントローラとを有する。複数の記憶デバイスの各々は、サブ論理空間をストレージコントローラに提供し、記憶デバイス内の論理アドレスと物理アドレスとの対応関係を管理する。ストレージコントローラは、複数の記憶デバイスがそれぞれ提供する複数のサブ論理空間に基づく空間である論理空間を管理する。ストレージコントローラは、論理空間内の複数のデータの内の１つである第１のデータと複数のデータの内の１つである第２のデータとを交換する場合、第１のデータ及び第２のデータが同一の記憶デバイスに格納されているか否かを判定する第１判定を行う。
第１判定の結果が肯定である場合、当該記憶デバイスは、第１のデータが格納されている物理領域の物理アドレスと第２のデータが格納されている物理領域の物理アドレスとをそれぞれ変更せずに、第１のデータに対応する論理アドレスと第２のデータに対応する論理アドレスとを入れ替える。
【発明の効果】
【０００９】
本発明によれば、データの移動が発生する処理において、ストレージコントローラの処理負荷の上昇を抑制することができる。また、本発明によれば、データの移動が発生する処理において、ストレージコントローラと記憶デバイスとの間の通信負荷の上昇が抑制することができる。
【図面の簡単な説明】
【００１０】
【図１】実施例１の概要を示す模式図である。
【図２】実施例１に係るストレージシステムの構成例を示す模式図である。
【図３】実施例１に係るＦＭパッケージの構成例を示す模式図である。
【図４】実施例１に係るＰＧ管理情報のデータ構成例を示す図である。
【図５】実施例１に係る論理ＶＯＬ管理テーブルのデータ構成例を示す図である。
【図６】実施例１に係る物理ブロック情報、論理ブロック情報、及び、論理物理マップのデータ構成例を示す図である。
【図７】実施例１に係るデフラグ処理の一例を示すフローチャートである。
【図８Ａ】実施例１に係るデータ移動処理の一例を示すフローチャートである
【図８Ｂ】実施例１に係るパリティ更新処理の一例を示すフローチャートである。
【図８Ｃ】実施例１に係るデータ移動確定処理の一例を示すフローチャートである。
【図９】実施例２に係るストライプグループ単位でのデフラグ処理の一例を示すフローチャートである。
【図１０】実施例３に係るデフラグ管理情報のデータ構成例を示す図である。
【図１１】実施例３に係るデフラグ処理の一例を示すフローチャートである。
【図１２】実施例３に係るＩ／Ｏ処理の一例を示すフローチャートである。
【図１３】実施例４に係る差分スナップショット適用時におけるライト処理の概要を示す模式図である。
【図１４】実施例４に係るプール管理情報のデータ構成例を示す図である。
【図１５】実施例４に係る正ＶＯＬ管理情報、及び、副ＶＯＬ管理情報のデータ構成例を示す図である。
【図１６】実施例４に係るライト処理の一例を示すフローチャートである。
【図１７】実施例４に係る仮想コピー処理及びライト処理の一例を示すフローチャートである。
【図１８】実施例５に係るＦＭパッケージ間におけるデータ移動処理及びパリティ更新処理の概要を示す模式図である。
【発明を実施するための形態】
【００１１】
以下、一実施例を説明する。以下の説明では、「ｘｘｘテーブル」、「ｘｘｘキュー」又は「ｘｘｘリスト」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ｘｘｘテーブル」、「ｘｘｘキュー」又は「ｘｘｘリスト」を「ｘｘｘ情報」と呼ぶことができる。
【００１２】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び通信インターフェイスデバイスのうちの少なくとも１つを用いながら行うため、処理の主語が、プロセッサ、そのプロセッサを有する装置とされてもよい。プロセッサが行う処理の一部又は全部が、ハードウェア回路で行われてもよい。コンピュータプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア（例えば可搬型の記憶メディア）であってもよい。
【００１３】
また、以下の説明では、記憶デバイスの一例として、ＦＭパッケージが採用されている。ＦＭパッケージは、ＦＭ（フラッシュメモリ）を有し、ＦＭは、複数の「物理ブロック」で構成され、各物理ブロックは、複数の「物理ページ」で構成されているとする。物理ブロック又は物理ページが物理領域の一例である。また、以下の説明では、物理ページ単位でデータがアクセス（リード及びライト）され、物理ブロック単位でデータが消去される。また、以下の説明では、ＦＭパッケージが提供するサブ論理空間は、複数の「論理ブロック」で構成され、各論理ブロックは、複数の「論理ページ」で構成されていてもよい。論理ブロック又は論理ページが論理領域の一例でよい。また、以下の説明では、ＦＭは、追記型、具体的には、物理ページ（以下、ページ）が割り当てられている論理領域がライト先の場合、ライト先論理領域に、割当て済のページに代えて新たに空きページが割り当てられ、新たに割り当てられたページにデータが書き込まれる。各論理領域について、新たに割り当てられたページに書き込まれたデータは「有効データ」であり、有効データが書き込まれているページは「有効ページ」であり、過去に割り当てられていたページに格納されているデータは「無効データ」であり、無効データが書き込まれているページは「無効ページ」である。また、有効ページでも無効ページでも無く新たにデータを格納可能な物理ページが、「空きページ」である。
【００１４】
また、記憶デバイスが有する物理記憶媒体として、ＦＭ（例えば複数のＦＭチップの集合）に代えて、ＦＭ以外の不揮発半導体メモリ、例えばＰＲＡＭ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔａｎｃｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）又はＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）が採用されてもよい。
【００１５】
また、以下の説明では、同種の要素を区別して説明する場合には、「ｘｘｘ３６ａ」、「ｘｘｘ３６ｂ」のように、参照符号を使用し、同種の要素を区別しないで説明する場合には、「ｘｘｘ３６」のように参照符号のうちの共通番号のみを使用することがある。
【００１６】
また、以下の説明では、デフラグ要求を送信する外部装置（ストレージコントローラの外部の装置）は、ストレージシステムにＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）要求（ライト要求又はリード要求）を送信するホストシステム（以下「ホスト」）とストレージシステムとの間に介在するファイルコントローラであるとする。しかし、外部装置は、ファイルコントローラに代えて又は加えて、ホストでもよいし、ストレージシステムに接続され少なくともストレージシステムを管理する管理システムであってもよい。ホスト、ファイルコントローラ及び管理システムのうちの少なくとも１つが、１以上の計算機でよい。
【実施例１】
【００１７】
図１は、実施例１の概要を説明するための模式図である。【００１８】
ＦＭパッケージ８０は、記憶デバイスの一例であり、複数のＦＭチップを備えるＦＭデバイスである。ＦＭパッケージ８０に対するライトデータ（ライト対象のデータ）は、上書き方式ではなく、追記方式でライトされる。ＦＭパッケージ８０は、複数の物理ページから構成される物理空間（ＦＭ、具体的には、複数のＦＭチップ）３８を管理し、物理ページにデータを格納する。ＦＭパッケージ８０は、複数の論理ページから構成されるサブ論理空間３６を管理する。ＦＭパッケージ８０は、サブ論理空間３６における論理ページと、物理空間３８における物理ページとの対応関係を管理する論理物理マップを有してよい。典型的には、論理ページに対応付けられている物理ページは、有効ページである。【００１９】
ストレージコントローラ６２は、複数のＦＭパッケージ８０がそれぞれ提供する複数のサブ論理空間３６に基づく空間（例えば、複数のサブ論理空間の集合）を１つの論理空間として管理し、１つの論理空間の全部又は一部を、論理ＶＯＬ（論理ボリューム）２２として管理する。サブ論理空間は、複数の論理ページを有しており、故に、論理空間も、複数の論理ページを有している。論理ＶＯＬ２２は、複数のＶＯＬ領域に区切られてよい。１つのＶＯＬ領域は、１つの論理ページであってもよいし、２以上の論理ページの集合であってもよい（或いは、１つの論理ページが、２以上のＶＯＬ領域を有してもよい）。論理ＶＯＬ２２におけるＩ／Ｏ先領域（１以上のＶＯＬ領域の全部又は一部）を、論理アドレス（例えばＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ））により指定可能であり、ＦＭパッケージ８０が提供するサブ論理空間３６におけるＩ／Ｏ先領域（１以上の論理ページの全部又は一部）も、論理アドレス（例えばＬＢＡ）により指定可能である。ホスト（ファイルコントローラ）がストレージシステムに指定するＬＢＡは、論理ＶＯＬ２２用のＬＢＡであり、ストレージコントローラ６２がＦＭパッケージ８０に指定するＬＢＡは、サブ論理空間３６用のＬＢＡである。論理ＶＯＬ２２用のＬＢＡとサブ論理空間３６用のＬＢＡは、一致していてもよいし、異なっていてもよい。後者の場合、ストレージコントローラ６２は、論理ＶＯＬ２２用のＬＢＡとサブ論理空間３６用のＬＢＡとの対応関係を管理する情報を有してよい。【００２０】
図１において、データＣはＦＭパッケージ８０ｂに、データＤはＦＭパッケージ８０ｃに格納されている。ＦＭパッケージ８０ｂに属する論理ページ（ＦＭパッケージ８０ｂが提供する論理ページ）２８−２は、データＣの格納されている物理ページと対応付けられている。ＦＭパッケージ８０ｃに属する論理ページ３０−２は、データＤの格納されている物理ページと対応付けられている。一方、図１において、データＡ及びデータＢは、同一のＦＭパッケージ８０ａに格納されている。ＦＭパッケージ８０ａに属する論理ページ２４−２は、データＡの格納されている物理ページと対応付けられている。論理ページ２６−２は、データＢの格納されている物理ページと対応付けられている。【００２１】
ここで、ストレージコントローラ６２が、論理ＶＯＬ２２についてデフラグ処理を実行する場合、以下の処理を実行する。ストレージコントローラ６２は、交換対象のデータ（一方のデータを「第１データ」と言い、他方のデータを「第２データ」と言う）の組毎に、第１データのＬＢＡ及び第２データのＬＢＡが同一のＦＭパッケージに属する否かを判定する第１判定を行う。以下、下記２つのケースについて詳述する。【００２２】
（ケースＡ）交換対象の２つのデータが異なるＦＭパッケージに格納されているケースである。具体的には、例えば、論理ページ２８−２に対応するＬＢＡ２８−１が指す領域に位置するデータＣと、論理ページ３０−２に対応するＬＢＡ３０−１が指す領域に位置するデータＤと、を交換するケースである。なお、ここで言う「論理ページに対応するＬＢＡ」は、サブ論理空間３６用のＬＢＡでもよいし、論理ＶＯＬ２２用のＬＢＡでもよい。従って、「論理ページに対応するＬＢＡが指す領域」は、論理ページの全域又は一部でもよいし、その論理ページに対応したＶＯＬ領域の全域又は一部でもよい。【００２３】
（ケースＢ）交換対象の２つのデータが同一のＦＭパッケージに格納されているケースである。具体的には、例えば、論理ページ２４−２に対応するＬＢＡ２４−１が指す領域に位置するデータＡと、論理ページ２６−２に対応するＬＢＡ２８−１が指す領域に位置するデータＢと、を交換するケースである。【００２４】
＜ケースＡ＞
（Ａ１）ストレージコントローラ６２は、ＬＢＡ２８−１（論理ページ２８−２）及びＬＢＡ３０−１（論理ページ３０−２）が同一のＦＭパッケージに属する否かを判定する第１判定を行う。ここでは、第１判定の結果は否定、具体的には、論理ページ２８−２と論理ページ３０−２はそれぞれ異なるＦＭパッケージ８０ｂ及び８０ｃに属すとの判定結果になる。従って、ストレージコントローラ６２は、次の（Ａ２）乃至（Ａ４）を含むデバイス間交換処理を行う。【００２５】
（Ａ２）ストレージコントローラ６２は、ＦＭパッケージ８０ｂからデータＣをバッファメモリ５８にコピーする。同様に、ストレージコントローラ６２は、ＦＭパッケージ８０ｃからデータＤをバッファメモリ５８にコピーする。【００２６】
（Ａ３）ストレージコントローラ６２は、バッファメモリ５８内のデータＣのライト要求でありデータＤのＬＢＡを指定したライト要求を、ＦＭパッケージ８０ｃに送信する。ＦＭパッケージ８０ｃが、そのライト要求に従うデータＣを、ＦＭパッケージ８０ｃ内の空きページに格納し、そのライト要求で指定されているＬＢＡが属する論理ページ３０−２に、データＤの格納されている物理ページに代えて、データＣの格納された物理ページを割り当てる。この結果、論理ページ３０−２に対応付けられる物理ページが、データＤの格納されている物理ページからデータＣの格納された物理ページに変更される。このため、論理ページ３０−２について、データＤが無効データとなり、データＣが有効データとなる。【００２７】
（Ａ４）同様に、ストレージコントローラ６２は、バッファメモリ５８内のデータＤのライト要求でありデータＣのＬＢＡを指定したライト要求を、ＦＭパッケージ８０ｂに送信する。ＦＭパッケージ８０ｂが、そのライト要求に従うデータＤを、ＦＭパッケージ８０ｂ内の空きページに格納し、そのライト要求で指定されているＬＢＡが属する論理ページ２８−２に、データＣの格納されている物理ページに代えて、データＤの格納された物理ページを割り当てる。この結果、論理ページ２８−２に対応付けられる物理ページが、データＣの格納されている物理ページからデータＤの格納された物理ページに変更される。このため、論理ページ２８−２について、データＣが無効データとなり、データＤが有効データとなる。【００２８】
＜ケースＢ＞
（Ｂ１）ストレージコントローラ６２は、ＬＢＡ２４−１（論理ページ２４−２）及びＬＢＡ２６−１（論理ページ２６−２）が同一のＦＭパッケージに属する否かを判定する第１判定を行う。ここでは、第１判定の結果は肯定、具体的には、論理ページ２４−２と論理ページ２６−２は同一のＦＭパッケージ８０ａに属すとの判定結果になる。従って、ストレージコントローラ６２は、次の（Ｂ２）乃至（Ｂ３）を含むデバイス内交換処理を行う。【００２９】
（Ｂ２）ストレージコントローラ６２は、ＦＭパッケージ８０ａに対して、論理ページ２４−２に対応付けられている物理ページと、論理ページ２６−２に対応付けられている物理ページとを交換するよう指示する交換指示を送信する。具体的には、例えば、その交換指示は、データＡのＬＢＡとデータＢのＬＢＡとを含んだ交換指示である。いずれのＬＢＡも、ＦＭパッケージ８０ａが提供するサブ論理空間３６ａ用のＬＢＡである。【００３０】
（Ｂ３）交換指示を受信したＦＭパッケージ８０ａは、データＡのＬＢＡが属する論理ページ２４−２に対応付けられる物理ページを、データＡが格納されている物理ページから、データＢが格納されている物理ページ（データＢのＬＢＡが属する論理ページ２６−２に対応付けられている物理ページ）に変更する。同様に、ＦＭパッケージ８０ａは、データＢのＬＢＡが属する論理ページ２６−２に対応付けられる物理ページを、データＢが格納されている物理ページから、データＡが格納されている物理ページ（データＡのＬＢＡが属する論理ページ２４−２に対応付けられている物理ページ）に変更する。【００３１】
上記のデバイス内交換処理により、交換後の論理ページ２４−２に対応する物理ページにはデータＢが格納されていることになり、交換後の論理ページ２６−２に対応する物理ページにはデータＡが格納されていることになる。つまり、このデバイス内交換処理では、データＡ及びデータＢを実際にコピーする（移動する）処理が発生しない。【００３２】
このように、デバイス内交換処理によれば、第１のデータ（第１の論理ページ）と第２のデータ（第２の論理ページ）が同一のＦＭパッケージ８０に属する場合、第１及び第２のデータをバッファメモリ５８及びＦＭパッケージ８０にコピーすることなく、そのデータ交換（データ再配置）を完了することができる。よって、ストレージコントローラ６２とＦＭパッケージ８０との間の通信負荷の上昇を抑制することができる。【００３３】
図２は、実施例１に係るストレージシステムの構成例を示す模式図である。【００３４】
ストレージシステム５２は、ストレージパッケージ５４と、ＦＭパッケージボックス７６とを備える。ストレージシステム５２は、複数のＦＭパッケージボックス７６を備えてもよい。【００３５】
ＦＭパッケージボックス７６は、スイッチ７８と、そのスイッチ７８に接続されている複数のＦＭパッケージ８０とを有する。１つのＦＭパッケージボックス７６内の複数のＦＭパッケージ８０により、１以上のパリティグループが構成される。２以上のＦＭパッケージボックス７６内の２以上のＦＭパッケージによって１つのパリティグループが構成されてもよい。【００３６】
ＦＭパッケージ８０は、複数のＦＭチップ１００を有する記憶デバイスの一種である。ＦＭパッケージ８０の詳細については後述する（図３参照）。【００３７】
スイッチ７８は、複数のＦＭパッケージ８０を、ストレージパッケージ５４に接続するための装置である。スイッチ７８は、複数のＦＭパッケージ８０及びストレージパッケージ５４同士のデータ転送を制御する。【００３８】
ストレージパッケージ５４は、ストレージコントローラ６２と、共有メモリ６８と、バッファメモリ５８と、キャッシュメモリ６０と、ＦＥ（Ｆｒｏｎｔ−Ｅｎｄ）  Ｉ／Ｆ５６と、ＢＥ（Ｂａｃｋ−Ｅｎｄ）  Ｉ／Ｆ７４とを有する。これらの要素は、双方向通信が可能な内部バス８２で接続されている。【００３９】
ストレージコントローラ６２は、プロセッサ６４及びメインメモリ６６から構成されている。メインメモリ６６には、プログラム及びデータなどが格納される。メインメモリ６６に格納されるプログラムの一例としては、ストレージシステム５２を制御するためのストレージ制御プログラムなどがある。プロセッサ６４は、メインメモリ６６に格納されているプログラムを実行し、ストレージに関する様々な機能を実現する。なお、ストレージコントローラ６２は、プロセッサ６４及びメインメモリ６６（ローカルメモリと呼ばれてもよい）の組を複数有してもよい。複数のプロセッサ６４が、共有メモリ６８を参照可能でよい。【００４０】
ＦＥ  Ｉ／Ｆ５６は、ストレージパッケージ５４と、ファイルコントローラ５０とを接続するためのＩ／Ｆである。ファイルコントローラ５０から送信されたコマンドは、ＦＥ  Ｉ／Ｆ５６を通じて、ストレージコントローラ６２のプロセッサ６４に転送される。ストレージコントローラ６２のプロセッサ６４は、その受信したコマンドに応じて、メインメモリ６６に格納されているストレージ制御プログラムを実行する。【００４１】
共有メモリ６８には、ＰＧ（Ｐａｒｉｔｙ  Ｇｒｏｕｐ）管理テーブル７０と、論理ＶＯＬ管理テーブル７２とが格納されている。【００４２】
ＰＧ管理情報７０は、ＲＡＩＤレベルを構成するパリティグループを管理するための情報である。論理ＶＯＬ管理テーブル７２は、論理ＶＯＬを管理するためのテーブルである。【００４３】
ストレージコントローラ６２のプロセッサ６４は、ストレージ制御プログラムを実行し、必要に応じて、ＰＧ管理情報７０及び論理ＶＯＬ管理テーブル７２にアクセスする。【００４４】
共有メモリ６８に格納されているＰＧ管理情報７０及び論理ＶＯＬ管理テーブル７２は、ファイルコントローラ５０へ提供されてよい。ファイルコントローラ５０が、デフラグ要求の引数を設定できるようにするためである。【００４５】
キャッシュメモリ６０及びバッファメモリ５８の少なくとも一方に、ＦＭパッケージ８０に入出力されるデータが一時格納される。キャッシュメモリ６０とバッファメモリ５８の１つの違いは、読み出されたデータが残るか否かである。具体的には、キャッシュメモリ６０から読み出されたデータは、キャッシュメモリ６０に残る。一方、バッファメモリ５８から一旦読み出されたデータは、バッファメモリ５８には残らない。【００４６】
ＢＥ  Ｉ／Ｆ７４は、ＦＭパッケージボックス７６のスイッチ７８に接続されている。ストレージコントローラ６２のプロセッサ６４から発行されたコマンドは、ＢＥ  Ｉ／Ｆ７４及びスイッチ７８を通じて、ＦＭパッケージ８０に転送される。このコマンドを含む転送データには、冗長データ（例えばＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ））が付与されてもよい。【００４７】
以下の説明において、ストレージコントローラ６２のプロセッサ６４が主体である場合に、ストレージコントローラ６２を主体として表現することがある。【００４８】
ホスト５１は、ファイルコントローラ５０に接続されている。ファイルコントローラ５０は、ストレージシステム５２に接続されている。ファイルコントローラ５０は、例えばいわゆるＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）ヘッドであり、ストレージシステム５２内のデータ（ブロックデータ）をファイルデータとして管理するためのファイルシステム空間を構成する。ファイルコントローラ５０は、そのファイルシステム空間を、ホスト５１に提供する。【００４９】
ホスト５１は、ファイルコントローラ５０に対して、ファイルシステム空間のファイルデータのリード要求又はライト要求を送信する。ファイルコントローラ５０は、そのリード要求又はライト要求を受信すると、ストレージシステム５２に対して、そのリード要求又はライト要求のファイルデータを構成するブロックデータのリード要求又はライト要求を送信する。ブロックデータのリード要求又はライト要求では、論理ＶＯＬ用のＬＢＡが指定されてよい。【００５０】
ファイルコントローラ５０は、ストレージシステム５２に対して複数（又は１つ）のデフラグ要求を送信する。その複数のデフラグ要求にそれぞれ応答した複数の交換処理を含んだ処理が、論理ＶＯＬのデフラグ処理である。論理ＶＯＬのデフラグ処理の結果、論理ＶＯＬにおいて、同一ファイル（ファイルデータ）を構成する複数のデータ（ブロックデータ）が連続的に並ぶことになる。【００５１】
従って、本実施例では、デフラグ要求は、交換対象の第１及び第２のデータの格納位置を交換する、又は、第１のＦＭパッケージから第１のデータを第２のＦＭパッケージ（第２のデータを格納しているＦＭパッケージ）へ移動する移動処理の要求である。デフラグ要求は、第１の領域に格納されている第１のデータと第２の領域に格納されている第２のデータとの交換を設定するための引数を有してよい。又は、デフラグ要求は、第１の領域に格納されている第１のデータの空き領域への移動を設定するための引数を有してよい。【００５２】
具体的には、例えば、デフラグ要求は、「ＬＢＡ＿ＭＯＶＥ（デフラグＩＤ，ＳＲＣ＿ＬＢＡ０，ＤＳＴ＿ＬＢＡ０，ＳＲＣ＿ＬＢＡ１，ＤＳＴ＿ＬＢＡ１）」のように定義される。【００５３】
デフラグＩＤは、発行されたデフラグ要求を識別するための情報である。ＳＲＣ＿ＬＢＡ０及びＳＲＣ＿ＬＢＡ１は、移動元の論理ページを示すＬＢＡ（例えば論理ＶＯＬ用のＬＢＡ）である。ＤＳＴ＿ＬＢＡ０及びＤＳＴ＿ＬＢＡ１は、移動先の論理ページを示すＬＢＡ（例えば論理ＶＯＬ用のＬＢＡ）である。【００５４】
ＳＲＣ＿ＬＢＡ０及びＤＳＴ＿ＬＢＡ０の引数が設定されており、ＳＲＣ＿ＬＢＡ１及びＤＳＴ＿ＬＢＡ１の引数が設定されていないＬＢＡ＿ＭＯＶＥは、ＳＲＣ＿ＬＢＡ０の示す領域のデータを、ＤＳＴ＿ＬＢＡ０の示す領域に移動させるデフラグ要求であると定義されてよい。以下、このデフラグ要求を「移動用デフラグ要求」という。【００５５】
ＳＲＣ＿ＬＢＡ０及びＤＳＴ＿ＬＢＡ０の引数が設定されており、ＳＲＣ＿ＬＢＡ１及びＤＳＴ＿ＬＢＡ１の引数も設定されているＬＢＡ＿ＭＯＶＥは、ＳＲＣ＿ＬＢＡ０の示す論理ページに係るデータと、ＤＳＴ＿ＬＢＡ０の示す論理ページに係るデータとを交換するデフラグ要求であると定義されてよい。この場合、ＳＲＣ＿ＬＢＡ１にはＤＳＴ＿ＬＢＡ０のＬＢＡを、ＤＳＴ＿ＬＢＡ１にはＳＲＣ＿ＬＢＡ０のＬＢＡを設定すると定義されてよい。以下、このデフラグ要求を「交換用デフラグ要求」という。【００５６】
ファイルコントローラ５０は、複数のデフラグ要求をリスト化したデフラグ要求リストを生成し、そのデフラグ要求リストをストレージシステム５２へ送信してよい。この場合、ストレージコントローラ６２は、デフラグ要求リストに含まれる複数のデフラグ要求を順番に実行してよい。【００５７】
デフラグ要求リストは、次の制約に従うとしてもよい。すなわち、デフラグ要求リストには、同一のＦＭパッケージ８０内に対するデフラグ要求と、異なるＦＭパッケージ８０間に対するデフラグ要求とを混在させることができないとしてよい。ただし、後述の実施例２に示すストライプビットがＯＮの場合のデフラグ要求リストには、同一のＦＭパッケージ８０内に対するデフラグ要求と、異なるＦＭパッケージ８０間に対するデフラグ要求とを混在させることができるとしてよい。また、デフラグ要求リストには、異なるストレージシステム５２を対象とする、異なるＦＭパッケージ８０間に対するデフラグ要求を含めることができないとしてよい。【００５８】
ファイルコントローラ５０は、ＰＧ管理情報７０及び論理ＶＯＬ管理テーブル７２を参照し、上記の制約を満たすように、デフラグ要求リストを生成してよい。【００５９】
図３は、実施例１に係るＦＭパッケージ８０の構成例を示す模式図である。【００６０】
ＦＭパッケージ８０は、複数のＦＭチップ１００と、それらのＦＭチップ１００を制御するＦＭコントローラ１１６とを備える。各ＦＭチップ１００は、複数の物理ブロックを有し、各物理ブロックが、複数の物理ページを有する。【００６１】
ＦＭコントローラ１１６は、プロセッサ９２と、メインメモリ１０２と、バッファメモリ９６と、ＦＥ  Ｉ／Ｆ９０と、ＢＥ  Ｉ／Ｆ９８と、それらの要素間のデータ転送を制御するデータ転送制御部９４と、を有する。【００６２】
ＦＥ  Ｉ／Ｆ９０は、ＦＭパッケージボックス７６のスイッチ７８に接続されている。ストレージコントローラ６２から送信されたコマンドは、このＦＥ  Ｉ／Ｆ９０を通じて、ＦＭコントローラ１１６が受信する。【００６３】
ＢＥ  Ｉ／Ｆ９８は、ＦＭコントローラ１１６と、ＦＭチップ１００とを接続するためのＩ／Ｆである。【００６４】
メインメモリ１０２には、プログラム及びデータなどが格納される。メインメモリ１０２に格納されるプログラム及びデータの一例としては、ＦＭ制御プログラム１０４、ＦＭパッケージ情報１０６、ＦＭチップ情報１０８、物理ブロック情報１５０、論理ブロック情報１６４、及び、論理物理マップ１１４などがある。【００６５】
ＦＭ制御プログラム１０４は、ＦＭパッケージ８０を制御するためのプログラムである。プロセッサ９２は、メインメモリ１０２に格納されているプログラムを実行し、ＦＭパッケージ８０に関する機能を実現する。【００６６】
ＦＭパッケージ情報１０６は、ＦＭパッケージ８０に関する情報（構成及び設定値など）を有する。ＦＭチップ情報１０８は、ＦＭチップ１００の構成などに関する情報（構成及び設定値など）を有する。【００６７】
物理ブロック情報１５０は、ＦＭコントローラ１１６が管理する物理ブロックに関する情報を有する。物理ブロック情報１５０の詳細については後述する（図６参照）。【００６８】
論理ブロック情報１６４は、ＦＭコントローラ１１６が管理する論理ブロックに関する情報を有する。論理ブロック情報１６４の詳細については後述する（図６参照）。【００６９】
論理物理マップ１１４は、ＬＡＢ（サブ論理空間用のＬＢＡ）とＰＢＡ（Ｐｈｙｓｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）（物理アドレスの一例）との対応関係を管理する情報である。論理物理マップ１１４の詳細については後述する（図６参照）。【００７０】
ストレージパッケージ５４から送信されたライトデータは、ＦＥ  Ｉ／Ｆ９０及びデータ転送制御部９４を通じて、バッファメモリ９６に一旦格納される。プロセッサ９２は、そのライトデータを、ＢＥ  Ｉ／Ｆ９８を通じて、ＦＭチップ１００に格納する。以下の説明において、ＦＭコントローラ１１６のプロセッサ９２が主体である場合に、ＦＭコントローラ１１６を主体として表現することがある。【００７１】
図４は、実施例１に係るＰＧ管理情報７０のデータ構成例を示す図である。【００７２】
ＰＧ管理情報７０は、ストレージパッケージ５４の共有メモリ６８に格納され、パリティグループを管理するための情報を有する。１つのＰＧ管理情報７０は、ストレージシステム５２内における１つのパリティグループに関する情報を有してよい。ＰＧ管理情報７０は、ドライブ管理テーブル１２２と、ストライプグループ管理テーブル１３２とを含んでよい。【００７３】
ドライブ管理テーブル１２２は、パリティグループを構成するドライブ（ＦＭパッケージ８０）を管理するためのテーブルである。ドライブ管理テーブル１２２は、フィールド値として、論理ＶＯＬ  ＩＤ１２４と、ＲＡＩＤ構成１２６と、ドライブＩＤ１２８と、物理開始アドレス１３０とを有してよい。【００７４】
論理ＶＯＬ  ＩＤ１２４は、このパリティグループに基づいて生成されている論理ＶＯＬを識別するための情報である。【００７５】
ＲＡＩＤ構成１２６は、論理ＶＯＬ  ＩＤ１２４の論理ＶＯＬの基になっているパリティグループのＲＡＩＤレベルとＰＧ構成（例えば、１ストライプグループあたりのデータ数とパリティ数）とを示す情報である。【００７６】
ドライブＩＤ１２８は、ドライブ（ＦＭパッケージ８０）を識別するための情報である。論理ＶＯＬ  ＩＤ１２４に複数のドライブＩＤが対応付けられている場合、この論理ＶＯＬがこの複数のドライブ（ＦＭパッケージ８０）によって構成されていることを示す。【００７７】
物理開始アドレス１３０は、ドライブＩＤ１２８のドライブのサブ論理空間の内、論理ＶＯＬ  ＩＤ１２４の論理ＶＯＬの先頭に対応したＬＢＡ（サブ論理空間用のＬＢＡ）を示す情報である。【００７８】
ストライプグループ管理テーブル１３２は、パリティグループにおけるストライプグループを管理するためのテーブルである。ストライプグループは、パリティグループを構成する複数のドライブにそれぞれ対応した複数の記憶領域（ストライプ）のグループであり、パリティ生成の単位であってよい。パリティは、ストライプグループに属する複数のデータのＸＯＲ（排他的論理和）であってよい。ストライプは、１以上の論理ページの集合でよい。【００７９】
ストライプグループ管理テーブル１３２は、フィールド値として、論理ＶＯＬ  ＩＤ１３４と、ストライプグループＩＤ１３６と、パリティ格納ドライブＩＤ１３８とを有してよい。【００８０】
論理ＶＯＬ  ＩＤ１３４は、上記で説明したとおりである。ストライプグループＩＤ１３６は、ストライプグループを識別するための情報である。【００８１】
パリティ格納ドライブＩＤ１３８は、ストライプグループＩＤ１３６のストライプグループに属するパリティが格納されているドライブのＩＤである。パリティ格納ドライブＩＤ１３８に係るフィールド値は、複数であってもよい。例えば、論理ＶＯＬ  ＩＤ１３４の論理ＶＯＬがＲＡＩＤ５で構成されている場合、パリティ格納ドライブＩＤ１３８に係るフィールド値は、Ｐパリティ用の１つであってよい。例えば、論理ＶＯＬ  ＩＤ１３４の論理ＶＯＬがＲＡＩＤ６で構成されている場合、パリティ格納ドライブＩＤ１３８に係るフィールド値は、Ｐパリティ用とＱパリティ用の２つであってよい。【００８２】
本実施例では、図４に示すように、ＲＡＩＤ構成１２６が「ＲＡＩＤ５（３Ｄ＋１Ｐ）」の場合について説明をするが、ＲＡＩＤ構成１２６はこれに限られない。例えば、ＲＡＩＤ構成１２６は、ＲＡＩＤ４（例えば３Ｄ＋１Ｐ）又はＲＡＩＤ６（例えば６Ｄ＋２Ｐ）など、他のＲＡＩＤ構成であってもよい。【００８３】
図５は、実施例１に係る論理ＶＯＬ管理テーブル７２のデータ構成例を示す図である。【００８４】
論理ＶＯＬ管理テーブル７２は、ストレージパッケージ５４の共有メモリ６８に格納され、ストレージシステム５２が管理する論理ＶＯＬに関する情報を有する。【００８５】
論理ＶＯＬ管理テーブル７２は、フィールド値として、論理ＶＯＬ  ＩＤ１４０と、論理開始アドレス１４２と、ＰＧ  ＩＤ１４４とを有する。【００８６】
論理ＶＯＬ  ＩＤ１４０は、上記で説明したとおりである。論理開始アドレス１４２は、ＰＧ  ＩＤ１４４のパリティグループに基づく論理空間のうち、論理ＶＯＬ  ＩＤ１４０の論理ＶＯＬの先頭に対応したＬＢＡ（論理ＶＯＬ用のＬＢＡ）を示す情報である。ＰＧ  ＩＤ１４４は、論理ＶＯＬ  ＩＤ１４０の論理ＶＯＬに基づくパリティグループを識別するための情報である。【００８７】
図６は、実施例１に係る物理ブロック情報１５０、論理ブロック情報１６４、及び、論理物理マップ１１４のデータ構成例を示す図である。【００８８】
物理ブロック情報１５０は、ＦＭパッケージ８０のメインメモリ１０２に格納され、そのＦＭパッケージ８０の有する物理ブロックを管理するための情報である。物理ブロック情報１５０は、物理ブロックＩＤ１５２、物理ブロック内空き容量１５４と、空き物理ブロックキュー１５６とを含む。【００８９】
物理ブロックＩＤ１５２は、複数の物理ブロックにそれぞれ対応した複数の物理ブロックＩＤ（物理ブロックを識別するための情報）を含む。複数の物理ブロックの各々について、その物理ブロックの開始ＰＢＡが対応付けられていてよい。【００９０】
物理ブロック内空き容量１５４は、複数の物理ブロックの各々において、その物理ページ内の空き容量（空きページの総容量）を示す情報である。【００９１】
空き物理ブロックキュー１５６は、ＦＭパッケージ８０における空き物理ブロックの物理ブロックＩＤのキューである。例えば、空き物理ブロックキュー１５６は、空き物理ブロックポインタ１５８を先頭に、物理ブロックＩＤ１６０「０」と、物理ブロックＩＤ１６２「１」とがエンキューされていることを示す。【００９２】
論理ブロック情報１６４は、ＦＭパッケージ８０のメインメモリ１０２に格納され、そのＦＭパッケージ８０の有する論理ブロックを管理するための情報である。論理ブロック情報１６４は、論理ブロックＩＤ１６６と、データ格納量１６８とを含む。【００９３】
論理ブロックＩＤ１６６は、複数の論理ブロックにそれぞれ対応した複数の論理ブロックＩＤ（論理ブロックを識別するための情報）を含む。複数の論理ブロックの各々について、その論理ブロックの開始ＬＢＡが対応付けられていてよい。【００９４】
論理ブロック（論理ページ）と物理ブロック（物理ページ）のサイズは、同一でもよいし、異なってもよい。ＦＭパッケージ８０の有する論理ブロック（論理ページ）の数は、物理ブロック（物理ページ）の数と同じ又はそれ以上であってよい。逆に、ＦＭパッケージ８０の有する物理ブロック（物理ページ）の数は、論理ブロック（論理ページ）の数と同じ又はそれ以上であってよい。【００９５】
データ格納量１６８は、複数の論理ブロックの各々について、格納済のデータの総量（例えば、有効データの総量）（又は、空き容量）を示す情報である。【００９６】
論理物理マップ１１４は、ＬＢＡ（サブ論理空間用のＬＢＡ）１７２とＰＢＡ１７４との対応関係を示す情報である。ＬＢＡとＰＢＡの対応関係は、例えばページ単位で管理される。【００９７】
例えば、ストレージコントローラ６２が、ＦＭパッケージ８０に対して、ＬＢＡ１７２「０ｘ００６０」の示す論理ページに属するＬＢＡを指定したライト指示を送信した場合、ＦＭコントローラ１１６は、次の処理を行う。すなわち、ＦＭコントローラ１１６は、そのライト指示に従うデータを空きページに書き込み、その空きページのＰＢＡ１７４「０ｘ００２２」を、論理物理マップ１１４において、指定されたＬＢＡが属するＬＢＡ１７２「０ｘ００６０」に対応付ける。【００９８】
また、例えば、ストレージコントローラ６２が、ＦＭパッケージ８０に対して、ＬＢＡ１７２「０ｘ００６０」の示す論理ページに属するＬＢＡを指定したリード指示を送信した場合、ＦＭコントローラ１１６は、次の処理を行う。すなわち、ＦＭコントローラ１１６は、論理物理マップ１１４から、指定されたＬＢＡが属するＬＢＡ１７２「０ｘ００６０」に対応したＰＢＡ１７４「０ｘ００２２」の物理ページを特定する。ＦＭコントローラ１１６は、特定した物理ページからデータを読み出し、そのデータのうち、指定されたＬＢＡに該当する部分をストレージコントローラ６２に送信する。【００９９】
ＬＢＡ１７２に何れのＰＢＡ１７４も対応付けられていない場合、論理物理マップ１１４において、そのＬＢＡ１７２に対応するＰＢＡ１７４は「ＮＵＬＬ」とされてよい。また、ＬＢＡとＰＢＡの対応関係は、ページ単位より大きい又は小さい単位で管理されてもよい。【０１００】
図７は、実施例１に係るデフラグ処理の一例を示すフローチャートである。【０１０１】
ストレージコントローラ６２は、ファイルコントローラ５０からデフラグ要求を受信すると、そのデフラグ要求を解析する（Ｓ１８２）。例えば、ストレージコントローラ６２は、そのデフラグ要求が、移動用デフラグ要求又は交換用デフラグ要求の何れであるかを判定する。また、ストレージコントローラ６２は、そのデフラグ要求から、デフラグＩＤと、移動元ＬＢＡと、移動先ＬＢＡとを抽出する。ストレージコントローラ６２は、ファイルコントローラ５０から、デフラグ要求リストを受信した場合、そのデフラグ要求リストに含まれる複数のデフラグ要求について、順番に以降の処理を実行してよいし、同時に並行処理してもよい。【０１０２】
次に、ストレージコントローラ６２は、デフラグ要求の解析結果に基づき、データ移動処理を実行する（Ｓ１８４）。データ移動処理では、デフラグ要求に基づき、データの移動又は交換などが実行される。データ移動処理は、Ｓ１８２の処理と非同期に実行されてもよい。このデータ移動処理の詳細については後述する（図８Ａ参照）。【０１０３】
次に、ストレージコントローラ６２は、データ移動処理によってデータ移動が発生したＦＭパッケージ８０のＦＭコントローラ１１６に対して、パリティ更新処理の実行を指示する（Ｓ１８６）。なぜなら、データ移動によってパリティグループに属するデータが変わると、そのパリティグループに属するパリティも変わり得るからである。パリティ更新処理の詳細については後述する（図８Ｂ参照）。【０１０４】
次に、ストレージコントローラ６２は、データ移動処理によってデータ移動が発生したＦＭパッケージ８０のＦＭコントローラ１１６に対して、データ移動確定処理の実行を指示する（Ｓ１８８）。データ移動の確定指示には、物理ブロック情報１５０、論理ブロック情報１６４、及び、論理物理マップ１１４等の更新指示が含まれてよい。データ移動確定処理の詳細については後述する（図８Ｃ参照）。【０１０５】
最後に、ストレージコントローラ６２は、デフラグ要求の処理の完了を、ファイルコントローラ５０に通知し（Ｓ１９０）、本処理を完了する。【０１０６】
デフラグ要求を受信する処理（Ｓ１８２）と、それ以降の処理（Ｓ１８４〜Ｓ１９０）とを非同期に行う場合、ファイルコントローラ５０は、ストレージコントローラ６２に対して、デフラグ要求の処理が完了しているか否かを定期的に問い合わせることにより、デフラグ要求の処理の完了を確認してもよい。Ｓ１８４乃至Ｓ１８８と同様の処理は、ストレージコントローラ６２側で実行されてもよい。その場合、ストレージコントローラ６２は、当該データをキャッシュメモリ６０に格納し、そのキャッシュメモリ６０上でデータ移動処理（Ｓ１８４）を行っても良い。又は、ストレージコントローラ６２は、当該データをバッファメモリ５８に格納し、そのバッファメモリ５８の当該データをデータ移動先のキャッシュメモリ６０の領域に転送し、そのキャッシュメモリ６０上でデータ移動処理を行ってもよい。この場合、パリティ更新処理（Ｓ１８６）も、ストレージコントローラ６２が実行してよい。【０１０７】
図８Ａは、実施例１に係るデータ移動処理の一例を示すフローチャートである。本処理は、図７のＳ１８４の処理の詳細である。【０１０８】
ストレージコントローラ６２は、デフラグ要求に設定されている移動元ＬＢＡと移動先ＬＢＡとが、同一のＦＭパッケージ８０に属しているか否かを判定（第１判定）する（Ｓ２００）。【０１０９】
ストレージコントローラ６２は、次のように第１判定を行ってもよい。
（Ｃ１）ストレージコントローラ６２は、論理ＶＯＬ管理テーブル７２から、移動元ＬＢＡ（又は移動先ＬＢＡ）の属する論理ＶＯＬ  ＩＤ１４０及びＰＧ  ＩＤ１４４を取得する。本実施例では、移動元ＬＢＡと移動先ＬＢＡは、同一のパリティグループに属するので、移動元ＬＢＡと移動先ＬＢＡのどちらかをキーに、ＰＧ  ＩＤ１４４が取得されればよい。【０１１０】
（Ｃ２）ストレージコントローラ６２は、（Ｃ１）で取得されたＰＧ  ＩＤ１４４に対応するＰＧ管理情報７０を特定する。【０１１１】
（Ｃ３）ストレージコントローラ６２は、（Ｃ２）で特定したＰＧ管理情報７０のドライブ管理テーブル１２２から、移動元ＬＢＡの属する論理ＶＯＬ  ＩＤ１２４に対応するドライブＩＤ１２８及び物理開始アドレス１３０を取得する。ストレージコントローラ６２は、移動元ＬＢＡと、取得されたドライブＩＤ１２８及び物理開始アドレス１３０とを基に、移動元ＬＢＡの属するドライブＩＤ１２８を特定する。同様に、ストレージコントローラ６２は、そのドライブ管理テーブル１２２から、移動先ＬＢＡに関するドライブＩＤ１２８及び物理開始アドレス１３０を取得する。ストレージコントローラ６２は、移動先ＬＢＡと、取得されたドライブＩＤ１２８及び物理開始アドレス１３０とを基に、移動先ＬＢＡの属するドライブＩＤ１２８を特定する。【０１１２】
（Ｃ４）ストレージコントローラ６２は、移動元ＬＢＡの属するドライブＩＤ１２８と、移動先ＬＢＡの属するドライブＩＤ１２８とを対比し、それらのドライブＩＤ１２８が同一か否かを判定する。【０１１３】
デフラグ要求が「交換用デフラグ要求」の場合、ストレージコントローラ６２は、移動元ＬＢＡと移動先ＬＢＡとが同一のＦＭパッケージ８０に属していると判定してもよい。デフラグ要求リストを受信した場合、ストレージコントローラ６２は、このデフラグ要求リストに含まれるそれぞれのデフラグ要求について、上記の判定を行ってもよい。又は、デフラグ要求が上述の制約に従っている場合、ストレージコントローラ６２は、先頭のデフラグ要求のみ上記の判定を行い、それ以降のデフラグ要求については同じ判定としてよい。なぜなら、上述の制約により、デフラグ要求リストには、同一のＦＭパッケージ８０内に対するデフラグ要求と、異なるＦＭパッケージ８０間に対するデフラグ要求とが混在していないからである。【０１１４】
Ｓ２００の判定結果が肯定、すなわち、移動元ＬＢＡと移動先ＬＢＡとが同一のＦＭパッケージ８０に属しているとの判定結果の場合（Ｓ２００：ＹＥＳ）、ストレージコントローラ６２は、本処理を完了する。【０１１５】
Ｓ２００の判定結果が否定、すなわち、移動元ＬＢＡと移動先ＬＢＡとが異なるＦＭパッケージ８０に属しているとの判定結果の場合（Ｓ２００：ＮＯ）、ストレージコントローラ６２は、その異なるＦＭパッケージ８０間でデータを移動させ（Ｓ２０２）、本処理を完了する。【０１１６】
ストレージコントローラ６２は、異なるＦＭパッケージ８０間でのデータ移動を、次のように行ってよい。
（Ｄ１）ストレージコントローラ６２は、移動元のＦＭパッケージ８０（移動元ＬＢＡが属するドライブＩＤから特定されるＦＭパッケージ８０）から、その移動元ＬＢＡが示す領域に位置するデータを読み出し、読み出したデータをバッファメモリ５８に格納する。
（Ｄ２）ストレージコントローラ６２は、そのバッファメモリ５８に格納したデータを、移動先のＦＭパッケージ８０（移動先ＬＢＡが属するドライブＩＤから特定されるＦＭパッケージ８０）に書き込む。【０１１７】
又は、ストレージコントローラ６２は、異なるＦＭパッケージ８０間でのデータ移動を、次のように行ってよい。
（Ｅ１）ストレージコントローラ６２は、バッファメモリ５８に、データの格納領域を確保する。
（Ｅ２）ストレージコントローラ６２は、移動元のＦＭパッケージ８０に対して、移動元ＬＢＡが示す領域に位置するデータをバッファメモリ５８に格納するよう指示し、移動先のＦＭパッケージ８０に対してバッファメモリ５８に格納されたそのデータを取得するよう指示する。【０１１８】
又は、デフラグ要求リストを受信したストレージコントローラ６２は、異なるＦＭパッケージ８０間でのデータ移動を、次のように行ってよい。
（Ｆ１）ストレージコントローラ６２は、デフラグ要求リストに含まれる複数のデフラグ要求を、移動先のＦＭパッケージ８０毎にグループ化する。これにより、１以上のグループができ、１つの要求グループは、移動先ＬＢＡが属するＦＭパッケージが同一である１以上のデフラグ要求の集合である。
（Ｆ２）ストレージコントローラ６２は、同一の移動先のＦＭパッケージ８０のグループに属する複数の移動元のＦＭパッケージ８０から、それぞれその移動元ＬＢＡが示す領域に位置するデータを取得し、取得したデータを、バッファメモリ５８に格納する。
（Ｆ３）ストレージコントローラ６２は、そのバッファメモリ５８に格納した複数のデータを、１回のコマンドで（一括して）、同一の移動先のＦＭパッケージ８０に格納する。【０１１９】
図８Ｂは、実施例１に係る新パリティ作成指示の一例を示すフローチャートである。本処理は、図７のＳ１８６の処理の詳細である。【０１２０】
本処理は、ストレージコントローラ６２から指示を受けたデータの移動元又は移動先のＦＭパッケージ８０のＦＭコントローラ１１６が実行する。デフラグ要求が交換用デフラグ要求の場合、データの移動先のＦＭパッケージ８０は、データの移動元のＦＭパッケージ８０と同じになる。【０１２１】
ＦＭコントローラ１１６は、デフラグＩＤ毎に、更新前データと更新後データに基づいて、中間パリティを生成する（Ｓ２０４）。更新前データは、データの移動先のＦＭパッケージ８０に元々存在していたデータである。更新後データは、その更新前データを置き換えるデータである。中間パリティは、更新前データと更新後データのＸＯＲであってよい。【０１２２】
例えば、デフラグ要求が、データＡとデータＢの交換用デフラグ要求の場合、データＡから見るとデータＢが更新後データであり、データＢから見るとデータＡが更新後データとなる関係である。したがってこの場合、交換対象であるデータＡとデータＢに基づいて中間パリティを生成し、この１つの中間パリティを、データＡ及びデータＢのそれぞれの属するストライプグループのパリティの更新に用いてよい。なぜなら、この場合、２つのストライプグループについてそれぞれ中間パリティを生成しても、結局、同一の中間パリティが生成されるからである。【０１２３】
次に、ＦＭコントローラ１１６は、更新後データの属するストライプグループのパリティが、何れのＦＭパッケージ８０に格納されているかを検索する（Ｓ２０６）。【０１２４】
ＦＭコントローラ１１６は、次のように検索を行ってよい。
（Ｇ１）ＦＭコントローラ１１６は、Ｓ２００の場合と同様に、論理ＶＯＬ管理テーブル７２から、更新後データに係るＬＢＡの属する論理ＶＯＬ  ＩＤ１４０と、論理開始アドレス１４２と、ＰＧ  ＩＤ１４４とを取得する。
（Ｇ２）ＦＭコントローラ１１６は、（Ｇ１）で取得したＰＧ  ＩＤ１４４に対応するＰＧ管理情報７０のストライプグループ管理テーブル１３２から、（Ｇ１）で取得した論理ＶＯＬ  ＩＤ１３４に対応付けられている複数のストライプグループＩＤ１３６を取得する。
（Ｇ３）ＦＭコントローラ１１６は、（Ｇ１）で取得した論理開始アドレス１４２から更新後データに係るＬＢＡを算出し、（Ｇ２）で取得された複数のストライプグループＩＤ１３６から、この更新後データに係るＬＢＡの属するストライプグループＩＤ１３６を特定する。
（Ｇ４）ＦＭコントローラ１１６は、（Ｇ３）で特定したストライプグループＩＤ１３６に対応するパリティ格納ドライブＩＤ１３８を特定する。ＲＡＩＤ６の場合、ＦＭコントローラ１１６は、Ｑパリティ格納ドライブＩＤも特定する。【０１２５】
次に、ＦＭコントローラ１１６は、未処理のデフラグＩＤが残っているか否かを判定する（Ｓ２０８）。【０１２６】
未処理のデフラグＩＤが残っている場合（Ｓ２０８：ＹＥＳ）、ＦＭコントローラ１１６は、残りのデフラグＩＤについて、Ｓ２０４乃至Ｓ２０８の処理を実行する。【０１２７】
未処理のデフラグＩＤが残っていない場合（Ｓ２０８：ＮＯ）、ＦＭコントローラ１１６は、次のＳ２１０の処理へ進む。【０１２８】
次に、ＦＭコントローラ１１６は、Ｓ２０４の処理で生成した中間パリティを、Ｓ２０６の処理で特定したパリティ格納ドライブＩＤ１３８の示すＦＭパッケージ８０へ送信する（Ｓ２１０）。【０１２９】
この中間パリティの送信処理は、次のように実行されてもよい。
（Ｈ１）ＦＭコントローラ１１６は、ストレージコントローラ６２に対して、中間パリティを格納するための領域をバッファメモリ５８に確保するように指示する。そして、ＦＭコントローラ１１６は、ストレージコントローラ６２からバッファメモリ５８の領域を確保した旨の通知を受けた後、次の処理を実行する。
（Ｈ２）ＦＭコントローラ１１６は、複数の中間パリティの内、更新前パリティを有する同一のＦＭパッケージ８０へ転送すべき全ての中間パリティ（典型的には複数の中間パリティ）をバッファメモリ５８の確保領域に格納する。
（Ｈ３）バッファメモリ５８の確保領域に格納されたその複数の中間パリティは、１回のコマンドで、その同一のＦＭパッケージ８０へ転送される。【０１３０】
ここで、ＦＭコントローラ１１６は、その複数の中間パリティ（まとめられた中間パリティ）に１つの保証コード（例えばＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ））を付与してもよいし、それぞれの中間パリティに保証コードを付与してもよい。【０１３１】
又は、この中間パリティの送信処理は、次のように実行されてよい。すなわち、ストレージコントローラ６２が、ＦＭコントローラ１１６の生成した複数の中間パリティをバッファメモリ５８の確保領域へ格納し、その複数の中間パリティの内、更新前パリティを有する同一のＦＭパッケージ８０へ転送すべき全ての中間パリティを、１回のコマンドで、その同一のＦＭパッケージ８０へ一括送信してもよい。【０１３２】
このように、同一のＦＭパッケージ８０へ送信すべき複数の中間パリティを、１回のコマンドで送信する（一括で送信する）ことにより、コマンドの発行回数を減らすことができる。よって、ストレージコントローラ６２及びＦＭコントローラ１１６における処理負荷を低減することができる。また、パリティグループがＲＡＩＤ４の場合、パリティのみが格納されるＦＭパッケージ８０が存在する。この場合、Ｓ２０６の処理の検索結果は全て同じＦＭパッケージとなるので、Ｓ２１０乃至Ｓ２１４の処理も１回のループで完了する。すなわち、中間パリティを送信するためのコマンドの発行回数を減らすことができる。【０１３３】
ここで、中間パリティの送信先の（つまり、更新前のパリティを有する）ＦＭコントローラ１１６は、中間パリティを受信後、ストレージコントローラ６２に対して、中間パリティの送信完了通知を送信してよい。また、このＦＭコントローラ１１６は、更新前のパリティと中間パリティに基づいて、更新後のパリティを生成してよい。この更新後のパリティを生成する処理は、ストレージコントローラ６２から指示を受けてから実行されてもよい。このＦＭコントローラ１１６は、更新後のパリティの生成を完了した後、ストレージコントローラ６２に対して、更新後のパリティの生成を完了した旨の通知を送信してよい。【０１３４】
次に、中間パリティを送信したＦＭコントローラ１１６は、未送信の中間パリティが残っているか否か判定する（Ｓ２１４）。【０１３５】
未送信の中間パリティが残っている場合（Ｓ２１４：ＹＥＳ）、ＦＭコントローラ１１６は、残りの中間パリティについて、Ｓ２１０乃至Ｓ２１４の処理を実行する。【０１３６】
未送信の中間パリティが残っていない場合（Ｓ２１４：ＮＯ）、ＦＭコントローラ１１６は、本処理を完了する。【０１３７】
図８Ｃは、実施例１に係るデータ移動確定処理の一例を示すフローチャートである。本処理は、図７のＳ１８８の処理の詳細である。【０１３８】
本処理は、データの移動元及び移動先のＦＭパッケージ８０のＦＭコントローラ１１６が実行する。ＦＭパッケージ８０は、ストレージコントローラ６２から指示を受けて本処理を実行してよい。【０１３９】
ＦＭコントローラ１１６は、本処理の対象データの移動元と移動先が同一のＦＭパッケージ８０であるか否かを判定する（Ｓ２２０）。この判定結果は、図８ＡにおけるＳ２００の判定結果と一致する。【０１４０】
対象データの移動元と移動先が同一のＦＭパッケージ８０である場合（つまり、交換用デフラグ要求の場合）（Ｓ２２０：ＹＥＳ）、ＦＭコントローラ１１６は、デフラグＩＤ毎に、アドレス交換処理を実行する（Ｓ２２４）。アドレス交換処理とは、論理物理マップ１１４における、移動元ＬＢＡ１７２に対応するＰＢＡ１７４と、移動先ＬＢＡ１７２に対応するＰＢＡ１７４とを交換する処理であってよい。これにより、ＰＢＡ１７４の示すデータをコピーすることなく、デフラグ処理におけるデータ交換を実現することができる。【０１４１】
そして、ＦＭコントローラ１１６は、全てのデフラグＩＤについてアドレス交換処理を完了した後、ストレージコントローラ６２に対して、アドレス交換処理の完了通知を送信し、本処理を完了する。【０１４２】
対象データの移動元と移動先が異なるＦＭパッケージ８０である場合（つまり、移動用デフラグ要求の場合）（Ｓ２２０：ＮＯ）、ＦＭコントローラ１１６は、デフラグＩＤ毎に、次のデータ置換処理を実行する。【０１４３】
（Ｊ１）移動先のＦＭコントローラ１１６は、移動元からのデータを格納するための空き物理ページを、ＦＭチップ１００に確保する。移動先のＦＭコントローラ１１６は、その物理ページを確保した直後に移動元からデータを受信し格納してもよいし、その物理ページの確保で一旦処理を終了しその物理ページ確保とは非同期で移動元からデータを受信し確保された物理ページにデータを格納してもよい。
（Ｊ２）移動先のＦＭコントローラ１１６は、論理物理マップ１１４から、移動元からのデータの格納先ＬＢＡが属するＬＢＡ１７２に対応付けられているＰＢＡ１７４を特定する。
（Ｊ３）移動先のＦＭコントローラ１１６は、（Ｊ２）で特定したＰＢＡ１７４を、（Ｊ１）で確保した物理ページのＰＢＡに置換する。
（Ｊ４）（Ｊ１）乃至（Ｊ３）の処理を、移動先と移動元を入れ替えたＦＭパッケージ８０においても同様に実行する。例えば、（Ｊ１）乃至（Ｊ３）の説明において、移動先のＦＭパッケージがＦＭパッケージ８０ｃで移動元のＦＭパッケージがＦＭパッケージ８０ｂの場合、（Ｊ４）では、移動先のＦＭパッケージがＦＭパッケージ８０ｂで移動元のＦＭパッケージがＦＭパッケージ８０ｃとなる。【０１４４】
そして、その異なるＦＭパッケージ８０のＦＭコントローラ１１６の各々は、上記のデータ置換処理を完了した後、ストレージコントローラ６２に対して、データ置換処理の完了通知を送信し、本処理を終了する。【０１４５】
実施例１によれば、次の効果のうちの少なくとも１つを得ることができる。
（１）必要最低限のデータコピーのみ実施すればよいため、デフラグ処理時のデータコピー量を抑制することができる。
（２）移動先と移動元のデータが同一のＦＭパッケージに存在する場合において、ＦＭパッケージ間におけるデータ転送を抑制できる。これにより、ストレージパッケージ及びＦＭパッケージを接続する通信路におけるデータ転送負荷を軽減できる。
【実施例２】
【０１４６】
実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略又は簡略する。【０１４７】
更新後パリティの生成方法として、更新前データと更新後データのＸＯＲを算出して中間パリティを生成し、その中間パリティと更新前パリティのＸＯＲを算出して更新後パリティを生成する方法がある。以下、この方法を「第１の更新後パリティ生成方法」という。実施例１は、この第１の更新後パリティ生成方法によって、更新後パリティを生成している。【０１４８】
他の更新後パリティの生成方法として、ストライプグループに属する更新後データ及び他の各データ（更新前パリティを除く）のＸＯＲを算出して更新後パリティを生成する方法がある。以下、この方法を「第２の更新後パリティ生成方法」という。【０１４９】
１つのストライプグループ内に複数のドライブにまたがる大量の更新後データが存在する場合、第１の更新後パリティ生成方法では、更新後パリティの生成に要する処理回数が多くなってしまう。このような場合は、第２の更新後パリティ生成方法の方が、１回の処理で更新後パリティを生成することができる。【０１５０】
したがって、デフラグ処理においても、１つのストライプグループ内に大量の交換対象のデータが存在する場合は、第２の更新後パリティ生成方法を採用した方が、第１の更新後パリティ生成方法を採用するよりも、処理回数を少なくすることができる。【０１５１】
図９は、実施例２に係るストライプグループ単位でのデフラグ処理の一例を示すフローチャートである。【０１５２】
ストレージコントローラ６２は、ファイルコントローラ５０によって生成されたデフラグ要求を受信すると、そのデフラグ要求を解析する（Ｓ２４０）。この処理は、図７のＳ１８２の処理と同様であってよい。デフラグ要求には、ストライプビットが設定されていてよい。ストライプビットは、ストライプグループ毎に設定されてもよい。【０１５３】
ストライプビット「ＯＮ」は、デフラグ要求リストに含まれるデフラグ要求が交換対象とするデータは全て同一のストライプグループ内に属し、交換対象のデータがその同一ストライプグループ内に大量に存在しており、且つ、その交換対象のデータが複数のＦＭパッケージ８０に分散して格納されていることを示すとしてよい。例えば、交換対象のデータの数が所定の閾値以上であり、且つ、その交換対象のデータのＦＭパッケージ８０における分散の割合が所定の閾値以上の場合、ストライプビットが「ＯＮ」となってもよい。なお、ストライプビット「ＯＦＦ」は、同一のストライプグループ内における交換対象のデータが少ない、又は、その交換対象のデータが余り分散して格納されていないことを示すとしてもよい。【０１５４】
ストレージコントローラ６２は、デフラグ要求に設定されているストライプビットが「ＯＮ」であるか否か判定（第２判定）する（Ｓ２４４）。【０１５５】
第２判定においてストライプビットが「ＯＦＦ」の場合（Ｓ２４４：ＮＯ）、ストレージコントローラ６２は、図９に示すＳ１８４、Ｓ１８６及びＳ１８８の処理を実行する。これらの処理は、図７に示すＳ１８４、Ｓ１８６及びＳ１８８の処理と同様である。すなわち、ストレージコントローラ６２は、第１の更新後パリティ生成方法を採用する。その後、ストレージコントローラ６２は、デフラグ要求の処理の完了を、ファイルコントローラ５０に通知し（図７のＳ１９０参照）、本処理を終了する。【０１５６】
第２判定においてストライプビットが「ＯＮ」の場合（Ｓ２４４：ＹＥＳ）、ストレージコントローラ６２は、次の処理を実行する。【０１５７】
ストレージコントローラ６２は、オフロードビットが「ＯＮ」であるか否か判定する（Ｓ２４６）。オフロードビットは、ストライプグループに属する複数のデータのＸＯＲを、ストレージコントローラ６２とＦＭコントローラ１１６のどちらで算出するかを示す。オフロードビット「ＯＮ」は、ＦＭコントローラ１１６で算出することを示し、オフロードビット「ＯＦＦ」は、ストレージコントローラ６２で算出することを示してよい。オフロードビットは、ストレージパッケージ５４の共有メモリ６８に格納されてよい。【０１５８】
オフロードビットは、ストレージシステム５２の状況に応じて自動的に変更されてよい。ストレージコントローラ６２の処理負荷が高い場合、オフロードビットは「ＯＮ」に変更されてよい。ストレージコントローラ６２の処理負荷が高くなる一例としては、業務利用等の通常Ｉ／Ｏ処理が高い場合などがある。ＦＭコントローラ１１６の処理負荷が高い場合、オフロードビットは「ＯＦＦ」に変更されてよい。ＦＭコントローラ１１６の処理負荷が高くなる一例としては、ストレージコントローラ６２に対するＦＭパッケージ８０の数が少ない場合などがある。【０１５９】
以下、オフロードビットが「ＯＦＦ」の場合（Ｓ２４６：ＯＦＦ）について説明する。【０１６０】
ストレージコントローラ６２は、対象ストライプグループ内のデータを、各ＦＭパッケージ８０からリードし、ストレージパッケージ５４のバッファメモリ５８に格納する（Ｓ２４８）。このデータは、バッファメモリ５８に代えて、キャッシュメモリ６０に格納されてもよい。対象ストライプグループのＩＤは、デフラグ要求の引数の論理アドレスに基づき、論理ＶＯＬ管理テーブル７２及びＰＧ管理情報７０から検索することができる。【０１６１】
次に、ストレージコントローラ６２は、バッファメモリ５８に格納されたデータを、デフラグ要求に従って入れ替え、その入れ替えたデータをキャッシュメモリ６０に格納する（Ｓ２５０）。バッファメモリ５８に代えて、キャッシュメモリ６０にデータが格納されている場合、ストレージコントローラ６２は、キャッシュメモリ６０に格納されたデータを、デフラグ要求に従って入れ替え、その入れ替えたデータをキャッシュメモリ６０の新たに確保した領域に格納してよい。【０１６２】
次に、ストレージコントローラ６２は、全てのデフラグ対象のデータについて入れ替え処理を完了後、入れ替え処理後のストライプグループの各データを用いて更新後パリティを生成する（Ｓ２５２）。Ｓ２５０の処理とＳ２５２の処理とは、非同期に実行されてもよい。【０１６３】
次に、ストレージコントローラ６２は、ＰＧ  ＩＤに対応するストライプグループ管理テーブル１３２から、そのストライプグループに対応するパリティ格納ドライブＩＤ１３８を特定する。そして、ストレージコントローラ６２は、更新後パリティを、その特定したパリティ格納ドライブＩＤ１３８のＦＭパッケージ８０へ格納する。【０１６４】
次に、ストレージコントローラ６２は、デフラグ完了通知をファイルコントローラ５０へ送信し（Ｓ１９０）、本処理を終了する。【０１６５】
以下、オフロードビットが「ＯＮ」の場合（Ｓ２４６：ＯＮ）について説明する。【０１６６】
ストレージコントローラ６２は、デフラグＩＤに係る移動対象データを有するＦＭパッケージ８０に対して、実施例１で図８Ａを用いて説明したように、データ移動処理を実行する（Ｓ２５６）。【０１６７】
すなわち、異なるＦＭパッケージ８０間でデータを移動する場合、ストレージコントローラ６２は、実施例１で説明したように、移動元のＦＭパッケージ８０からデータをリードしてバッファメモリ５８に格納し、そのバッファメモリ５８に格納したデータを、移動先のＦＭパッケージ８０に格納する。【０１６８】
同一のＦＭパッケージ８０でデータを移動する場合、ストレージコントローラ６２は、実施例１の図８Ｃを用いて説明したように、その同一のＦＭパッケージ８０の論理物理マップ１１４において、移動元ＬＢＡ１７２に対応するＰＢＡ１７４と移動先ＬＢＡ１７２に対応するＰＢＡ１７４を交換する。【０１６９】
全ての移動対象のデータについてデータ移動処理を完了した後、ストレージコントローラ６２は、次の処理を実行する。【０１７０】
ストレージコントローラ６２は、ストライプグループに属する更新前パリティが格納されているＦＭパッケージ８０を特定する（Ｓ２５８）。【０１７１】
ストレージコントローラ６２は、各ＦＭパッケージ８０に対し、このストライプグループに属する更新後データを、その特定したＦＭパッケージ８０へ転送するよう指示する（Ｓ２６０）。この指示を受けたＦＭパッケージ８０は、そのストライプグループに属する自分の更新後データを、その特定したＦＭパッケージ８０へ転送する。【０１７２】
全ての転送が完了した後、ストレージコントローラ６２は、その特定したＦＭパッケージ８０に対して、更新後パリティの生成を指示する（Ｓ２６２）。この指示を受けたＦＭパッケージ８０は、各ＦＭパッケージ８０から転送された更新後データに基づいて更新後パリティを生成し、この更新後パリティで更新前パリティを置換する。【０１７３】
その後、ストレージコントローラ６２は、図７のＳ１８８と同様のデータ移動確定処理を実行する（Ｓ２６４）。そして、ストレージコントローラ６２は、デフラグ完了通知をファイルコントローラ５０へ送信し（Ｓ２６６）、本処理を終了する。【０１７４】
実施例２によれば、次の効果のうちの少なくとも１つを得ることができる。
（１）必要最低限のデータコピーのみ実施すればよいため、デフラグ処理時のデータコピー量を抑制することができる。
（２）移動先と移動元のデータが同一のＦＭパッケージに存在する場合において、ＦＭパッケージ間におけるデータ転送を抑制できる。これにより、ストレージパッケージ及びＦＭパッケージを接続する通信路におけるデータ転送負荷を軽減できる。
（３）ＦＭパッケージ側にデータコピー処理をオフロードすることにより、ストレージコントローラの処理負荷を低減させることができる。
（４）デフラグ処理の対象となるデータの配置等に合わせて、適切な方法で更新後パリティが生成される。これにより、更新後パリティの生成に関する処理負荷及び通信負荷等を低減できる。
【実施例３】
【０１７５】
実施例３を説明する。その際、実施例１及び２との相違点を主に説明し、実施例１及び２との共通点については説明を省略又は簡略する。【０１７６】
図１０は、実施例３に係るデフラグ管理情報２７０のデータ構成例を示す図である。【０１７７】
デフラグ管理情報２７０は、デフラグ非同期処理において利用される情報である。デフラグ非同期処理とは、ファイルコントローラ５０からデフラグ要求を受信したストレージコントローラ６２は、実際のデフラグ処理を完了する前に、完了通知をファイルコントローラ５０へ返し、その後、実際のデフラグ処理を実行する処理である。すなわち、デフラグ非同期処理では、ストレージコントローラ６２は、実際のデフラグ処理が完了するタイミングとは非同期に、デフラグ要求に対する完了通知をファイルコントローラ５０に送信する。これにより、デフラグ要求に対する応答性能が向上する。デフラグ要求に対する応答性能の向上を要する一例としては、通常業務中にデフラグ処理が頻繁に発生するような場合などがある。【０１７８】
デフラグ管理情報２７０には、同一のＦＭパッケージ８０内のデフラグ処理を管理する第１デフラグテーブル２７２及び第１デフラグ発生ビット２７８と、異なるＦＭパッケージ８０間のデフラグを管理する第２デフラグテーブル２７１及び第２デフラグ発生ビット２６９とが、含まれてよい。デフラグ管理情報２７０は、ストレージパッケージ５４の共有メモリ６８に格納されてよい。【０１７９】
第１デフラグテーブル２７２は、フィールド値として、デフラグＩＤ２７３と、移動元論理アドレス２７４と、移動先論理アドレス２７６とを有してよい。同様に、第２デフラグテーブル２７１は、フィールド値として、デフラグＩＤ２７５と、移動元論理アドレス２７７と、移動先論理アドレス２７９とを有してよい。【０１８０】
ストレージコントローラ６２は、受信したデフラグ要求に対応するデフラグＩＤと、そのデフラグ要求の引数に設定されている移動元論理アドレス及び移動先論理アドレスとを、第１デフラグテーブル２７２又は第２デフラグテーブル２７１に格納する。【０１８１】
ストレージコントローラ６２は、デフラグ要求における移動元論理アドレスと移動先論理アドレスとが同一のＦＭパッケージ８０に属する場合、それらの情報を、第１デフラグテーブル２７２に格納すると共に、第１デフラグ発生ビット２７８をＯＮに変更する。【０１８２】
ストレージコントローラ６２は、デフラグ要求における移動元論理アドレスと移動先論理アドレスとが異なるＦＭパッケージ８０に属する場合、それらの情報を、第２デフラグテーブル２７１に格納すると共に、第２デフラグ発生ビット２６９をＯＮに変更する。【０１８３】
デフラグテーブル及びデフラグ発生ビットは、ストレージシステムに１つであってもよいし、ＦＭパッケージ毎であってもよい。【０１８４】
図１１は、実施例３に係るデフラグ処理の一例を示すフローチャートである。【０１８５】
ストレージコントローラ６２は、デフラグ要求リストを受信すると、そのデフラグ要求リストに含まれるデフラグ要求を解析する（Ｓ２８０）。この処理は、図７のＳ１８２の処理と同様である。【０１８６】
ストレージコントローラ６２は、デフラグ要求リストの全てのデフラグ要求の移動元ＬＢＡと移動先ＬＢＡが同一のＦＭパッケージ８０に属するか否かを判定する（Ｓ２８１）。【０１８７】
全てのデフラグ要求の移動元ＬＢＡと移動先ＬＢＡが同一のＦＭパッケージ８０に属する場合（Ｓ２８１：ＹＥＳ）、ストレージコントローラ６２は、次の処理を実行する。すなわち、ストレージコントローラ６２は、デフラグ要求リストに含まれるデフラグ要求に係る情報を、第１デフラグテーブル２７２に格納すると共に、第１デフラグ発生ビット２７８を「ＯＮ」に変更する（Ｓ２８３）。そして、Ｓ１９０の処理へ進む。【０１８８】
デフラグ要求の移動元ＬＢＡと移動先ＬＢＡが異なるＦＭパッケージ８０に属する場合（Ｓ２８１：ＮＯ）、ストレージコントローラ６２は、次の処理を実行する。すなわち、ストレージコントローラ６２は、デフラグ要求リストに含まれるデフラグ要求に係る情報を、第２デフラグテーブル２７１に格納すると共に、第２デフラグ発生ビット２６９を「ＯＮ」に変更する（Ｓ２８２）。そして、Ｓ１９０の処理へ進む。【０１８９】
Ｓ１９０の処理において、ストレージコントローラ６２は、ファイルコントローラ５０に対して、デフラグ完了通知を送信する（Ｓ２８４）。そして、ストレージコントローラ６２は、デフラグ処理を実行する（Ｓ２８５〜Ｓ２８８）。Ｓ２８５〜Ｓ２８８のデフラグ処理は、図７のＳ１８４〜Ｓ１８８で説明した通りである。【０１９０】
ストレージコントローラ６２は、デフラグ完了通知を送信した後（Ｓ２８４）、すぐにＳ２８５の処理へ進んでもよい。又は、ストレージコントローラ６２は、デフラグ管理情報２７０にデフラグ要求に係る情報が所定数以上格納された後、Ｓ２８５の処理へ進んでもよい。又は、ストレージコントローラ６２は、一定の周期で、第１デフラグ発生ビット２７８（第２デフラグ発生ビット２６９）を確認し、そのビットが「ＯＮ」になった後、Ｓ２８５の処理へ進んでもよい。【０１９１】
ストレージコントローラ６２は、Ｓ２８８の処理の完了後、デフラグ管理情報を更新する（Ｓ２９０）。例えば、ストレージコントローラ６２は、デフラグ完了済みのデフラグＩＤのレコードを、第１デフラグテーブル２７２又は第２デフラグテーブル２７１から削除する。【０１９２】
そして、ストレージコントローラ６２は、第１デフラグテーブル２７２のレコードを削除した後、その第１デフラグテーブルに２７２にレコードが残っているか否か確認してよい。そして、第１デフラグテーブルにレコードが残っていない場合、ストレージコントローラ６２は、第１デフラグ発生ビット２７８を「ＯＦＦ」に変更してよい。ストレージコントローラ６２は、第２デフラグテーブル２７１及び第２デフラグ発生ビット２６９についても同様の処理を行ってよい。【０１９３】
ストレージコントローラ６２は、デフラグ管理情報２７０に含まれる全てのデフラグ発生ビット２７８、２６９が「ＯＦＦ」になった場合、デフラグ処理が完了したと判定してよい。【０１９４】
図１２は、実施例３に係るＩ／Ｏ処理の一例を示すフローチャートである。【０１９５】
実施例３では、ファイルコントローラ５０にデフラグ完了通知が送信されても、実際のデフラグ処理が完了していない場合が発生する。そこで、ストレージコントローラ６２は、ファイルコントローラ５０からＩ／Ｏ要求を受信した場合、次に示すような処理を行ってよい。【０１９６】
ストレージコントローラ６２は、第１デフラグ発生ビット２７８、及び、第２デフラグ発生ビット２６９の少なくとも一方が「ＯＮ」であるか否かを判定する（Ｓ３０２）。ＦＭパッケージ８０毎にデフラグテーブル及びデフラグ発生ビットを有する場合、ストレージコントローラ６２は、Ｉ／Ｏ対象のＦＭパッケージ８０に係る第１デフラグ発生ビット２７８及び第２デフラグ発生ビット２６９ついて判定してよい。【０１９７】
第１デフラグ発生ビット２７８、及び、第２デフラグ発生ビット２６９の何れも「ＯＦＦ」の場合（Ｓ３０２：ＮＯ）、ストレージコントローラ６２は、通常のＩ／Ｏ処理を実行し（Ｓ３１６）、本処理を完了する。【０１９８】
第１デフラグ発生ビット２７８、及び、第２デフラグ発生ビット２６９の少なくとも一方が「ＯＮ」の場合（Ｓ３０２：ＹＥＳ）、ストレージコントローラ６２は、次の処理を実行する。【０１９９】
ストレージコントローラ６２は、Ｉ／Ｏ対象の論理アドレスが、デフラグ処理の対象に含まれているか否かを判定する（Ｓ３０４）。例えば、ストレージコントローラ６２は、第１デフラグテーブル２７２及び第２デフラグテーブル２７１の移動元論理アドレス２７４及び２７７のそれぞれから、Ｉ／Ｏ対象の論理アドレスを検索して、この判定を行う。【０２００】
第１デフラグ発生ビット２７８のみが「ＯＮ」の場合、ストレージコントローラ６２は、第１デフラグテーブル２７２の移動元論理アドレス２７４のみを検索対象としてよい。第２デフラグ発生ビット２６９のみが「ＯＮ」の場合、ストレージコントローラ６２は、第２デフラグテーブル２７１の移動元論理アドレス２７７のみを検索対象としてよい。【０２０１】
なお、ＦＭパッケージ８０毎に第１デフラグテーブル２７２及び第１デフラグ発生ビット２７８を有し、Ｉ／Ｏ対象のＦＭパッケージ８０に係る第１デフラグ発生ビット２７８のみが「ＯＮ」の場合、ストレージコントローラ６２は、そのＦＭパッケージ８０に係る第１デフラグテーブル２７２の移動元論理アドレス２７４のみを検索対象としてよい。【０２０２】
Ｉ／Ｏ対象の論理アドレスがデフラグ処理の対象に含まれていない場合（Ｓ３０４：ＮＯ）、ストレージコントローラ６２は、上記のＳ３１６と同様、通常のＩ／Ｏ処理を実行し、本処理を完了する。【０２０３】
Ｉ／Ｏ対象の論理アドレスがデフラグ処理の対象に含まれている場合（Ｓ３０４：ＹＥＳ）、ストレージコントローラ６２は、Ｉ／Ｏ処理の種別がリード又はライトの何れであるかを判定する（Ｓ３０６）。【０２０４】
Ｉ／Ｏ処理の種別がライトの場合（Ｓ３０６：ライト）、ストレージコントローラ６２は、次の処理を実行する。【０２０５】
ストレージコントローラ６２は、図１１に示すデフラグ処理を実行した後（Ｓ３０８）、デフラグ管理情報２７０を更新する（Ｓ３０９）。そして、ストレージコントローラ６２は、ライト処理を実行し（Ｓ３１０）、本処理を完了する。【０２０６】
Ｉ／Ｏ処理の種類がリードの場合（Ｓ３０６：リード）、ストレージコントローラ６２は、次の処理を実行する。【０２０７】
ストレージコントローラ６２は、デフラグ管理情報２７０を参照し、リード要求で指定されたＬＢＡに対応する移動先ＬＢＡを特定する（Ｓ３１２）。そして、ストレージコントローラ６２は、その移動先ＬＢＡにアクセスしてデータをリードし（Ｓ３１４）、本処理を完了する。【０２０８】
実施例３によれば、次の効果のうちの少なくとも１つを得ることができる。
（１）必要最低限のデータコピーのみ実施すればよいため、デフラグ処理時のデータコピー量を抑制することができる。
（２）移動先と移動元のデータが同一のＦＭパッケージに存在する場合において、ＦＭパッケージ間におけるデータ転送を抑制できる。これにより、ストレージパッケージ及びＦＭパッケージを接続する通信路におけるデータ転送負荷を軽減できる。
（３）デフラグ処理の実行中における、通常のＩ／Ｏ処理の性能低下を抑制することができる。
【実施例４】
【０２０９】
実施例４を説明する。その際、実施例１乃至３との相違点を主に説明し、実施例１乃至３との共通点については説明を省略又は簡略する。
図１３は、実施例４に係る差分スナップショット適用時におけるライト処理の概要を示す模式図である。【０２１０】
図１３の構成は、図２の構成と比較し、ホスト５１が、ファイルコントローラ５０ではなく、ストレージパッケージ５４に直接接続されている点において相違するが、それ以外については同様であってよい。また、ストレージパッケージ５４の共有メモリ６８は、スナップショット管理情報３２２と、スナップショットモード３２５とを更に有する。【０２１１】
スナップショット管理情報３２２は、正ＶＯＬ管理情報３９０と、副ＶＯＬ管理情報３９２と、プール管理情報３２４と、を含む。【０２１２】
正ＶＯＬ管理情報３９０は、スナップショット元の論理ＶＯＬである正ＶＯＬ３３０を管理するための情報である。副ＶＯＬ管理情報３９２は、正ＶＯＬ３３０の複製に相当する論理ＶＯＬである副ＶＯＬ３３２を管理するための情報である。正ＶＯＬ３３０及び副ＶＯＬ３３２のうち少なくとも副ＶＯＬ３３２が、仮想的な論理ＶＯＬでよい。【０２１３】
プール管理情報３２４は、正ＶＯＬ３３０と副ＶＯＬ３３２の差分データが格納されるプール３３９を管理するための情報である。【０２１４】
スナップショットモード３２５は、ストレージシステム５２において、スナップショットが適用されている場合に「ＯＮ」であり、スナップショットが適用されていない場合に「ＯＦＦ」であってよい。スナップショットモード３２５は、正ＶＯＬ毎に存在してもよいし、複数の正ＶＯＬに共通でもよい。【０２１５】
論理ＶＯＬ管理テーブル３２９は、図５の論理ＶＯＬ管理テーブル７２に示すフィールド値に加え、ＶＯＬ種別に関するフィールド値を有してよい。ＶＯＬ種別は、論理ＶＯＬ  ＩＤ１４０の論理ＶＯＬが、正ＶＯＬ、副ＶＯＬ、又は、それ以外の何れであるかを示す値であってよい。【０２１６】
図１３において、ホスト５１が、正ＶＯＬ３３０に対して、データＹのライト要求を発行した場合の例を説明する。その際、混同を避けるために、正ＶＯＬ３３０、副ＶＯＬ３３２及びプール３３９の各々についての単位論理領域を「セグメント」と言い、論理空間（サブ論理空間）についての単位論理領域を「論理ページ」と言う。特に、正ＶＯＬ３３０及び副ＶＯＬ３３２の各々のセグメントを「仮想セグメント」と言い、プール３３９のセグメントを「プールセグメント」と言う。また、少なくとも副ＶＯＬの仮想セグメントとプールセグメントは、２以上の領域に区切られてもよく、各々の領域を「サブセグメント」と言うことができる。プールセグメント又はプールサブセグメントと論理ページは１：１で対応してよい。【０２１７】
データＹのライト先仮想セグメント（正ＶＯＬ３３０における仮想セグメント）３３４は、プールセグメント１３３６を参照している。このプールセグメント１３３６は、副ＶＯＬ３３２ａの仮想セグメント３３５ａ及び副ＶＯＬ３３２ｂの仮想セグメント３３５ｂからも参照されている。すなわち、プールセグメント１３３６は、正ＶＯＬ３３０、副ＶＯＬ３３２ａ及び３３２ｂから共有されている。【０２１８】
この場合、ストレージコントローラ６２は、次の処理を実行する。
（Ｋ１）ストレージコントローラ６２は、プールセグメント１３３６内のデータを、別のプールセグメント（コピー先プールセグメント）１３３７にコピーする。
（Ｋ２）ストレージコントローラ６２は、仮想セグメント３３５ａ及び３３５ｂの参照先を、コピー先プールセグメント１３３７に切り替える。
（Ｋ３）ストレージコントローラ６２は、仮想セグメント３３４（プールセグメント１３３６）に、データＹを上書きする。【０２１９】
コピー元プールセグメント１３３６からコピー先プールセグメント１３３７へのデータのコピーは、以下の仮想コピー処理でよい。仮想コピー処理は、次のように行われてよい。
（Ｌ１）ストレージコントローラ６２は、コピー元プールセグメント１３３６に割り当てられている論理ページ３３６と同じＦＭパッケージ８０内に、コピー先の論理ページを確保可能か否か判定する。例えば、その同じＦＭパッケージ８０内に、いずれの物理ページも割り当てられていない空きの論理ページ（例えば３３７）があれば、（Ｌ１）の判定結果は肯定、すなわち、コピー先の論理ページを確保可能との判定結果でよい。
（Ｌ２）（Ｌ１）の判定結果が肯定の場合、ストレージコントローラ６２は、コピー元ＬＢＡ（コピー元の論理ページ３３６のＬＢＡ）とコピー先ＬＢＡ（確保されたコピー先の論理ページ３３７のＬＢＡ）とを指定した仮想コピー指示を、ＦＭパッケージ８０に送信する。そのＦＭパッケージ８０内のＦＭコントローラ１１６が、仮想コピー指示を受信し、その仮想コピー指示に応答して、論理物理マップ１１４を更新する。具体的には、ＦＭコントローラ１１６が、コピー先ＬＢＡに、コピー元ＬＢＡに対応付けられているＰＢＡと同じＰＢＡを対応付ける。【０２２０】
ストレージコントローラ６２は、新たに確保された論理ページ３３７を含むストライプグループ、及び、データＹが上書きされたデータを含むストライプグループのそれぞれについて、更新後パリティを生成してよい。ライトデータのサイズと、仮想コピーのサイズとは、一致していなくてもよい。【０２２１】
図１４は、実施例４に係るプール管理情報３４０の一例を示すデータ構成図である。【０２２２】
プール管理情報３４０は、１のプールを管理するための情報である。したがって、ストレージコントローラ６２は、プール毎に、プール管理情報３４０を有してよい。【０２２３】
プール管理情報３４０は、シンプロビジョニング管理情報３４２と、スナップショット管理情報３６６とを有する。【０２２４】
シンプロビジョニング管理情報３４２は、仮想ＶＯＬに割り当てられているプールセグメントを管理するための情報である。仮想ＶＯＬは、シンプロビジョニングに基づいて構成される仮想的な論理ＶＯＬである。【０２２５】
シンプロビジョニング管理情報３４２は、セグメントサイズ管理情報３４４と、プール構成情報３４６と、シンプロビジョニング管理テーブル３４７と、シンプロビジョニングに係る空きセグメントキュー３５８とを含む。【０２２６】
セグメントサイズ管理情報３４４は、プールセグメントのサイズを示す情報である。【０２２７】
プール構成情報３４６は、プールセグメントを管理するための情報である。本実施例では、プールセグメントは、１つの論理ページが割り当てられた論理領域であるが、２以上のＦＭパッケージ８０が提供する２以上の論理ページが割り当てられた論理領域でもよい。【０２２８】
シンプロビジョニング管理テーブル３４７は、シンプロビジョニングに係る各プールセグメントに関する情報を有する。シンプロビジョニング管理テーブル３４７は、フィールド値として、セグメントＩＤ３４８と、プールＩＤ３５０と、プールＬＢＡ３５２と、ストライプグループＩＤ３５４と、スナップショットビット３５６と、有する。【０２２９】
セグメントＩＤ３４８は、プールセグメントを識別するための情報である。プールＩＤ３５０は、セグメントＩＤ３４８のプールセグメントが属するプールである。プールＬＢＡ３５２は、セグメントＩＤ３４８のプールセグメントを示すＬＢＡである。ストライプグループＩＤ３５４は、セグメントＩＤ３４８のプールセグメントが属するストライプグループのＩＤである。【０２３０】
スナップショットビット３５６は、セグメントＩＤ３４８のプールセグメントが、後述するスナップショットに使用されているか否かを示す情報である。スナップショットビット３５６「ＯＮ」は、セグメントＩＤ３４８のプールセグメントがスナップショットに使用されていることを示す。スナップショットビット３５６「ＯＦＦ」は、セグメントＩＤ３４８のプールセグメントがスナップショットに使用されていないことを示す。【０２３１】
シンプロビジョニングに係る空きセグメントキュー３５８は、空のセグメントを管理する。【０２３２】
図１４に示すシンプロビジョニングに係る空きキュー３５８は、シンプロビジョニングに係る空きキューの先頭ポインタ３６０に、セグメントＩＤ３６２「５」と、セグメントＩＤ３６４「６」とが、エンキューされていることを示す。つまり、セグメントＩＤ「５」と「６」のセグメントが空いていることを示す。【０２３３】
スナップショット管理情報３６６は、サブセグメントサイズ管理情報３７４と、スナップショット管理テーブル３６７と、スナップショットに係る空きサブセグメントキュー３７６とを含む。【０２３４】
サブセグメントサイズ管理情報３７４は、スナップショットの単位であるサブセグメントのサイズを示す情報である。【０２３５】
スナップショット管理テーブル３６７は、スナップショットに係る各サブセグメントに関する情報を有する。【０２３６】
スナップショット管理テーブル３６７は、フィールド値として、セグメントＩＤ３６８と、サブセグメントＩＤ３７０と、プールＬＢＡ３７２と、共有数カウンタ３７５と、を有する。【０２３７】
サブセグメントＩＤ３７０は、セグメントＩＤ３６８のセグメントから分割されたサブセグメントを識別するための情報である。プールＬＢＡ３７２は、サブセグメントＩＤ３７０のサブセグメントを示すＬＢＡである。共有数カウンタ３７５は、サブセグメントＩＤ３７０のサブセグメントが、幾つの副ＶＯＬから共有されているかを示す値である。サブセグメントに対応するプールＬＢＡ３７２と、セグメントに対応するプールＬＢＡ３５２とは、同じ論理空間で管理されてもよいし、異なる論理空間で管理されてもよい。【０２３８】
スナップショットに係る空きサブセグメントキュー３７６は、空のサブセグメントを管理する。【０２３９】
図１４に示すスナップショットに係る空きサブセグメントキュー３７６は、スナップショットに係る空きサブセグメントキューの先頭ポインタ３７８に、サブセグメントＩＤ３８０「１」と、サブセグメントＩＤ３８２「２」とが、エンキューされていることを示す。つまり、サブセグメントＩＤ「１」と「２」のサブセグメントが空いていることを示す。【０２４０】
図１５は、実施例４に係る正ＶＯＬ管理情報３９０、及び、副ＶＯＬ管理情報３９２の一例を示すデータ構成図である。【０２４１】
正ＶＯＬ管理情報３９０は、１つの正ＶＯＬを管理するための情報である。副ＶＯＬ管理情報３９２は、１つの副ＶＯＬを管理するための情報である。【０２４２】
正ＶＯＬ管理情報３９０は、正ＶＯＬを構成する仮想セグメントの各々について、仮想ＬＢＡ３９８と、プールＬＢＡ４００と、共有ビット４０１と、を有する。仮想ＬＢＡ３９８は、仮想セグメントのＬＢＡである。プールＬＢＡ４００は、仮想セグメントに対応付けられているプールセグメントのＬＢＡである。【０２４３】
仮想ＬＢＡ３９８は、スナップショットのサブセグメントの単位で管理されてもよい。例えば、仮想ＬＢＡ３９８「０ｘ００００」にサブセグメントのサイズを加算したものを、次の仮想ＬＢＡ３９８「０ｘ０３００」としてもよい。【０２４４】
共有ビット４０１は、仮想セグメントに対応付けられているプールセグメントが、副ＶＯＬと共有されているか否かを示す情報である。例えば、共有ビット４０１「１」の仮想セグメントに対応付けられているプールセグメントの少なくとも一部は、副ＶＯＬと共有されている。共有ビット４０１「０」の仮想ＬＢＡ３９８に対応付けられているプールセグメントは、副ＶＯＬと共有されていない（非共有）。【０２４５】
正ＶＯＬ管理情報３９０は、副ＶＯＬ  ＩＤ情報４０２と、プールＩＤ情報４０４とを有する。副ＶＯＬ  ＩＤ情報４０２は、この正ＶＯＬ管理情報３９０の正ＶＯＬに対応する副ＶＯＬのＩＤを有する。プールＩＤ情報４０４は、この正ＶＯＬ管理情報３９０の正ＶＯＬに割り当てられるプールセグメントのソースとなるプールのＩＤを有する。【０２４６】
副ＶＯＬ管理情報３９２は、副ＶＯＬを構成する仮想サブセグメントの各々について、仮想ＬＢＡ４０６と、プールＬＢＡ４０８とを有する。プールＬＢＡ４０８は、仮想サブセグメントに対応付けられているプールサブセグメントのＬＢＡである。正ＶＯＬ  ＩＤ情報４１０は、この副ＶＯＬ管理情報３９２の副ＶＯＬに対応する正ＶＯＬのＩＤを有する。【０２４７】
図１６は、実施例４に係るライト処理の一例を示すフローチャートである。【０２４８】
ストレージコントローラ６２は、ホスト５１からのライト要求に従うライト先仮想ＶＯＬについてのスナップショットモード３２５が「ＯＮ」であるか否かを判定する（Ｓ４２２）。【０２４９】
このスナップショットモード３２５が「ＯＦＦ」の場合（Ｓ４２２：ＮＯ）、ストレージコントローラ６２は、通常のライト処理（Ｓ４２６）を実行し、本処理を完了する。Ｓ４２６では、ライト要求に従うライト処理が行われる。【０２５０】
このスナップショットモード３２５が「ＯＮ」の場合（Ｓ４２２：ＹＥＳ）、ストレージコントローラ６２は、ライト先仮想ＬＢＡ（ライト先として指定されたＬＢＡ）が他の仮想ＶＯＬと共有されているか否かを判定する（Ｓ４２４）。【０２５１】
ライト先仮想ＶＯＬが正ＶＯＬの場合、ストレージコントローラ６２は、正ＶＯＬ管理情報３９０のライト先仮想ＬＢＡ３９８に対応する共有ビット４０１が「共有」を示すか、「非共有」を示すかを判定する。【０２５２】
ライト先仮想ＶＯＬが副ＶＯＬの場合、ストレージコントローラ６２は、副ＶＯＬ管理情報３９２のライト先仮想ＬＢＡ４０６に対応するプールＬＢＡ４０８が、この副ＶＯＬ管理情報３９２に対応する正ＶＯＬ管理情報３９０の何れかのプールＬＢＡ４００と一致しているか否か判定する。ここで、一致している場合、ストレージコントローラ６２は「共有」と判定する。一致していない場合、ストレージコントローラ６２は、更に、スナップショット管理情報３６６から、このプールＬＢＡ４０８と一致するプールＬＢＡ３７２を検索し、そのプールＬＢＡ３７２に対応する共有数カウンタ３７５が「０」以外であるか否かを判定する。ここで、一致するプールＬＢＡ３７２を発見し、且つ、共有数カウンタ２７５が「０」以外の場合、ストレージコントローラ６２は「共有」と判定する。それ以外の場合、ストレージコントローラ６２は「非共有」と判定する。【０２５３】
ライト先仮想ＬＢＡが「非共有」の場合（Ｓ４２４：ＮＯ）、ストレージコントローラ６２は、通常のライト処理を実行し（Ｓ４２６）、本処理を完了する。【０２５４】
ライト先仮想ＬＢＡが「共有」の場合（Ｓ４２４：ＹＥＳ）、ストレージコントローラ６２は、ＦＭパッケージ８０に対して仮想コピー処理及びライト処理を行い（Ｓ４２８）、本処理を完了する。この処理については後述する（図１７参照）。【０２５５】
図１７は、実施例４に係る仮想コピー処理及びライト処理の一例を示すフローチャートである。【０２５６】
ストレージコントローラ６２は、仮想コピー元のＦＭコントローラ１１６に対して、自分のＦＭパッケージ８０内に仮想コピー用のＬＢＡを確保可能か否か問い合わせる（Ｓ４４２）。この問い合わせを受けたＦＭパッケージ８０は、論理ブロック情報１６４を参照して、そのＬＢＡを確保可能か否か判定し、その判定結果を、ストレージコントローラ６２に返す。【０２５７】
仮想コピー元のＦＭコントローラ１１６の判定が肯定的な場合（Ｓ４４２：ＹＥＳ）、ストレージコントローラ６２は、次の処理を実行する。ストレージコントローラ６２は、仮想コピー元のＦＭコントローラ１１６に対して、仮想コピーの実行を指示する（Ｓ４４４）。この指示を受けたＦＭパッケージ８０は、仮想コピーを実行する。すなわち、ＦＭパッケージ８０は、論理物理マップ１１４において、仮想コピー先のためのＬＢＡを確保し、その確保したＬＢＡに、仮想コピー元のＰＢＡを対応付ける。そして、ストレージコントローラ６２は、Ｓ４４８の処理へ進む。【０２５８】
コピー元のＦＭコントローラ１１６の判定が否定的な場合（Ｓ４４２：ＮＯ）、ストレージコントローラ６２は、次の処理を実行する。ストレージコントローラ６２は、別のＦＭコントローラ１１６に仮想コピー用のＬＢＡを確保する。そして、ストレージコントローラ６２は、仮想コピー元のＬＢＡの示すデータを、その仮想コピー先のＬＢＡを確保したＦＭパッケージ８０に送信する（Ｓ４４６）。このデータの送信は、ストレージパッケージ５４のバッファメモリ５８を経由して行われてよい。又は、このデータの送信は、ストレージパッケージ５４のバッファメモリ５８を経由せず、ＦＭパッケージ８０同士が接続されているスイッチ７８のみを経由して行われてもよい（実施例５参照）。そして、ストレージコントローラ６２は、Ｓ４４８の処理へ進む。【０２５９】
Ｓ４４８の処理において、ストレージコントローラ６２は、ライト対象が正ＶＯＬであるか否か判定する（Ｓ４４８）。ストレージコントローラ６２は、Ｓ４２２の処理で正ＶＯＬ又は副ＶＯＬの何れであるかを検索した情報を用いて、この判定を行ってよい。【０２６０】
ライト対象が正ＶＯＬである場合（Ｓ４４８：ＹＥＳ）、ストレージコントローラ６２は、次の処理を実行する。ストレージコントローラ６２は、ライト対象の仮想ＬＢＡ３９８に対応するプールＬＢＡ４００を共有している全ての副ＶＯＬのプールＬＢＡ４０８を、仮想コピー先のプールＬＢＡへ変更する（Ｓ４５０）。ストレージコントローラ６２は、ライト対象の仮想ＬＢＡに対応するプールＬＢＡ４００を共有している副ＶＯＬを、次のように検索してよい。すなわち、ストレージコントローラ６２は、正ＶＯＬ管理情報３９０の副ＶＯＬ  ＩＤ情報４０２が示す副ＶＯＬ  ＩＤを特定する。そして、ストレージコントローラ６２は、その特定した副ＶＯＬ  ＩＤに係る副ＶＯＬ管理情報３９２において、ライト対象の仮想ＬＢＡのプールＬＢＡ４００と同じプールＬＢＡ４０８を検索する。そして、ストレージコントローラ６２は、その同じプールＬＢＡ４０８を変更した後、共有ビット４０１を「非共有」に変更する。ストレージコントローラ６２は、共有ビット４０１が「非共有」となった時点で検索を中止し、プールＬＢＡの変更の処理を完了する。そして、ストレージコントローラ６２は、Ｓ４５４の処理へ進む。【０２６１】
ライト対象が副ＶＯＬである場合（Ｓ４４８：ＮＯ）、ストレージコントローラ６２は、次の処理を実行する。ストレージコントローラ６２は、副ＶＯＬの共有されているプールＬＢＡ４０８を、仮想コピー先のプールＬＢＡへ変更し、仮想コピー元の正ＶＯＬ  ＩＤのその共有されていたプールＬＢＡ４００に対応する共有ビット４０１を「非共有」にする（Ｓ４５２）。そして、ストレージコントローラ６２は、Ｓ４５４の処理へ進む。【０２６２】
Ｓ４５４の処理において、ストレージコントローラ６２は、通常通りの上書き処理を実行する（Ｓ４５４）。共有データの退避が完了したからである。【０２６３】
そして、ストレージコントローラ６２は、図７の場合と同様に、パリティ更新処理（Ｓ４５６）及び、データ移動確定処理（Ｓ４５８）を実行し、本処理を完了する。
【実施例５】
【０２６４】
実施例５を説明する。その際、実施例１乃至４との相違点を主に説明し、実施例１乃至４との共通点については説明を省略又は簡略する。【０２６５】
図１８は、実施例５に係るＦＭパッケージ８０間でデータ移動処理及び更新後パリティ生成処理を行う場合の概要を示す模式図である。【０２６６】
実施例１に示すデフラグ処理では、異なるＦＭパッケージ８０間におけるデータ移動を、ストレージパッケージ５４のバッファメモリ５８を経由して行う。【０２６７】
これに対して、実施例５に係るデフラグ処理では、異なるＦＭパッケージ８０間におけるデータ移動を、ストレージパッケージ５４のバッファメモリ５８を経由せず、ＦＭパッケージボックス７６の有するスイッチ７８を経由して行う。【０２６８】
また、実施例５に係るデフラグ処理では、或るＦＭパッケージ８０で生成された中間パリティを、ストレージパッケージ５４のバッファメモリ５８を経由せず、ＦＭパッケージボックス７６の有するスイッチ７８を経由して、変更前パリティを有するＦＭパッケージ８０に送信する。【０２６９】
以下、図１８を参照しながら、ＦＭパッケージ８０ｂにおける論理ページ４６２に対応するデータを、ＦＭパッケージ８０ａに移動させる処理について説明する。【０２７０】
実施例５に係る処理は、実施例１と比較して、図８ＡのＳ２０２と、図８ＢのＳ２１０の処理が相違し、それ以外の処理については、実施例１と概ね同じである。よって、以下では、相違点の処理のみ説明する。【０２７１】
図８ＡのＳ２０２の処理において、ストレージコントローラ６２は、移動元のＦＭパッケージ８０ｂに対して、移動先のＦＭパッケージ８０ａのＩＤを送信する。【０２７２】
移動元のＦＭパッケージ８０ｂのコントローラは、移動先のＦＭパッケージ８０ａに対して、移動させるデータを格納するための領域を確保するように指示する。又は、ストレージコントローラ６２が、移動先のＦＭパッケージ８０ａに、その領域を確保するように指示してもよい。【０２７３】
そして、移動元のＦＭパッケージ８０ｂのコントローラは、移動先のＦＭパッケージ８０ａに対して、ライトコマンドを発行すると共に、そのデータを送信する。そのデータは、スイッチ７８を経由して、移動先のＦＭパッケージ８０ａに送信される。【０２７４】
図８ＢのＳ２１０の処理において、Ｓ２０２と同様に、中間パリティ４６４を、更新前パリティ４６６を有するＦＭパッケージ８０ｃに転送する。若しくは、ＦＭパッケージボックス７６内の複数のＦＭパッケージ８０の中から、代表のＦＭパッケージ８０を設定し、上述のＳ２００、Ｓ２０２、Ｓ２０８及びＳ２１０に係る処理、次のように行ってもよい。【０２７５】
ここでは、ＦＭパッケージ８０ｃが代表に設定されたとして説明する。代表のＦＭパッケージ８０ｃは、ＦＭパッケージボックス７６の中で１つであってもよいし、複数であってもよい。代表のＦＭパッケージ８０ｃを設定した場合、ＰＧ管理情報７０は、ストレージパッケージの共有メモリ６８に格納されてもよいし、代表のＦＭパッケージ８０ｃのメインメモリ１０２に格納されてもよい。【０２７６】
図８ＡのＳ２００の処理において、ＰＧ管理情報７０がストレージコントローラ６２の共有メモリ６８に格納されていない場合、移動元のＦＭパッケージ８０ｂは、代表のＦＭパッケージ８０ｃに問い合わせる。【０２７７】
図８ＡのＳ２０２の処理において、移動元のＦＭパッケージ８０ｂは、代表のＦＭパッケージ８０ｃにデータ転送開始準備コマンドを発行する。このデータ転送開始準備コマンドを受けた代表のＦＭパッケージ８０ｃは、移動先のＦＭパッケージ８０ａに対して、移動元のデータの格納領域を確保する旨のコマンドを送信する。そして、代表のＦＭパッケージ８０ｃは、移動元のＦＭパッケージ８０ｂに対して、移動先のＦＭパッケージ８０ａのＩＤを送信する。その移動先のＦＭパッケージ８０ａのＩＤを受信した移動元のＦＭパッケージ８０ｂは、移動対象のデータを、その移動先のＦＭパッケージ８０ａに対して送信する。【０２７８】
図８ＢのＳ２０８において、ＰＧ管理情報７０がストレージコントローラ６２の共有メモリ６８に格納されていない場合、中間パリティ４６４を生成したＦＭパッケージ８０ａは、代表のＦＭパッケージ８０ｃに問い合わせる。【０２７９】
図８ＢのＳ２１０において、ＦＭパッケージ８０ａは、上記のＳ２０２と同様に、中間パリティ４６４を、更新前パリティ４６６を有するＦＭパッケージ８０ｃに送信する。【０２８０】
実施例５によれば、次の効果のうちの少なくとも１つを得ることができる。
（１）必要最低限のデータコピーのみ実施すればよいため、デフラグ処理時のデータコピー量を抑制することができる。
（２）リード処理及びライト処理を繰り返すと空き領域の細分化が起こるような追記方式のストレージシステムでのデフラグ処理において、ストレージコントローラを経由せずにデフラグ処理を実行できる。
（３）ＦＭパッケージ側にデータコピー処理をオフロードすることにより、ストレージコントローラの処理負荷を低減させることができる。【０２８１】
上述した実施例は、本発明の説明のための例示であり、本発明の範囲をそれらの実施例にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。例えば、パリティグループを構成する記憶デバイスの数が、ストライプグループを構成するストライプの数より多くてもよい。
【符号の説明】
【０２８２】
５２：ストレージシステム  ５４：ストレージパッケージ  ６２：ストレージコントローラ６２  ８０：ＦＭパッケージ  １１６：ＦＭコントローラ
【図１】
2016113831.tif 000003
【図２】
2016113831.tif 000004
【図３】
2016113831.tif 000005
【図４】
2016113831.tif 000006
【図５】
2016113831.tif 000007
【図６】
2016113831.tif 000008
【図７】
2016113831.tif 000009
【図８Ａ】
2016113831.tif 000010
【図８Ｂ】
2016113831.tif 000011
【図８Ｃ】
2016113831.tif 000012
【図９】
2016113831.tif 000013
【図１０】
2016113831.tif 000014
【図１１】
2016113831.tif 000015
【図１２】
2016113831.tif 000016
【図１３】
2016113831.tif 000017
【図１４】
2016113831.tif 000018
【図１５】
2016113831.tif 000019
【図１６】
2016113831.tif 000020
【図１７】
2016113831.tif 000021
【図１８】
2016113831.tif 000022
【国際調査報告】
2016113831.tif 000023
2016113831.tif 000024
2016113831.tif 000025