(57)【要約】【課題】論理ボリュームを削除するための処理時間を短縮すること。【解決手段】ストレージ制御装置１０は、記憶部１１と制御部１２とを有する。記憶部１１は、記憶装置２０の記憶領域によって実現される論理ボリューム１２ａの各論理ブロックについて、データの書き込みの有無が登録されたビットマップ１１ａを記憶する。制御部１２は、第１の論理ブロックに対する書き込みが要求されると、記憶領域の第１の物理ブロックを第１の論理ブロックに割り当ててデータを格納するとともに、第１の論理ブロックにデータが書き込まれたことをビットマップ１１ａに登録し、論理ボリューム１２ａを削除する際に、ビットマップ１１ａを基にデータが書き込まれている第２の論理ブロックを特定し、論理ブロックと物理ブロックとが対応し、記憶領域に記憶された管理情報２１から、第２の論理ブロックに割り当てられた第２の物理ブロックを読み出し、解放処理を実行する。【選択図】図１
2017219913.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置の記憶領域によって実現される論理ボリュームを分割した複数の論理ブロックのそれぞれについて、データの書き込みの有無が登録された第１の管理情報を記憶する記憶部と、
前記複数の論理ブロックのうち第１の論理ブロックに対する書き込みデータの書き込みがホスト装置から要求されると、前記記憶領域を分割した複数の物理ブロックのうちの第１の物理ブロックを前記第１の論理ブロックに割り当てて前記書き込みデータを前記第１の物理ブロックに格納するとともに、前記第１の論理ブロックにデータが書き込まれたことを前記第１の管理情報に登録し、前記論理ボリュームを削除する際に、前記第１の管理情報に基づいて、前記複数の論理ブロックの中からデータが書き込まれている第２の論理ブロックを特定し、前記複数の論理ブロックのそれぞれについて前記複数の物理ブロックの中から割り当てられた物理ブロックのアドレスが登録され、前記記憶領域に記憶された第２の管理情報から、前記複数の物理ブロックのうち前記第２の論理ブロックに割り当てられた第２の物理ブロックのアドレスを読み出し、読み出したアドレスが示す前記第２の物理ブロックを解放するための解放処理を実行する制御部と、
を有するストレージ制御装置。
【請求項２】
前記記憶部は、前記複数の物理ブロックのそれぞれについて、前記複数の論理ブロックのそれぞれに対して割り当てられた割り当て数が登録された第３の管理情報をさらに記憶し、
前記制御部は、前記第１の論理ブロックに対する前記書き込みデータの書き込みが要求されたとき、前記記憶領域において重複データが除去されるように、前記第１の論理ブロックに対して前記第１の物理ブロックを割り当て、
前記解放処理では、前記第３の管理情報に登録された割り当て数のうち、前記第２の管理情報から読み出したアドレスが示す前記第２の物理ブロックに対応する割り当て数を減算し、減算後の割り当て数が０の場合、前記第２の物理ブロックを解放する、
請求項１記載のストレージ制御装置。
【請求項３】
前記ストレージ制御装置には、共通の前記記憶領域によって実現される前記論理ボリュームが複数設定され、
前記記憶部は、複数の前記論理ボリュームのそれぞれに対応する前記第１の管理情報を記憶するとともに、前記複数の物理ブロックのそれぞれについて、複数の前記論理ボリュームにおける前記複数の論理ブロックのそれぞれに対して割り当てられた割り当て数が登録された第３の管理情報をさらに記憶し、
前記記憶領域には、複数の前記論理ボリュームのそれぞれに対応する前記第２の管理情報が記憶され、
前記制御部は、複数の前記論理ボリュームのいずれかに含まれる前記第１の論理ブロックに対する前記書き込みデータの書き込みが要求されたとき、前記記憶領域において重複データが除去されるように、前記第１の論理ブロックに対して前記第１の物理ブロックを割り当て、
前記解放処理では、前記第３の管理情報に登録された割り当て数のうち、前記第２の管理情報から読み出したアドレスが示す前記第２の物理ブロックに対応する割り当て数を減算し、減算後の割り当て数が０の場合、前記第２の物理ブロックを解放する、
請求項１記載のストレージ制御装置。
【請求項４】
前記制御部は、前記複数の論理ブロックのうち第３の論理ブロックからの読み出しが前記ホスト装置から要求されると、前記第１の管理情報に基づいて、前記第３の論理ブロックにデータが書き込まれているか否かを判定し、データが書き込まれていない場合、データが書き込まれていないことを示す情報を前記ホスト装置に送信する、
請求項１または２記載のストレージ制御装置。
【請求項５】
論理ボリュームを実現する記憶領域を有するとともに、前記論理ボリュームを分割した複数の論理ブロックのそれぞれについて、前記記憶領域を分割した複数の物理ブロックの中から割り当てられた物理ブロックのアドレスが登録された第２の管理情報を記憶する記憶装置と、
前記複数の論理ブロックのそれぞれについて、データの書き込みの有無が登録された第１の管理情報を記憶する記憶部、および、
前記複数の論理ブロックのうち第１の論理ブロックに対する書き込みデータの書き込みがホスト装置から要求されると、前記複数の物理ブロックのうちの第１の物理ブロックを前記第１の論理ブロックに割り当てて前記書き込みデータを前記第１の物理ブロックに格納するとともに、前記第１の論理ブロックにデータが書き込まれたことを前記第１の管理情報に登録し、前記論理ボリュームを削除する際に、前記第１の管理情報に基づいて、前記複数の論理ブロックの中からデータが書き込まれている第２の論理ブロックを特定し、前記第２の管理情報から、前記複数の物理ブロックのうち前記第２の論理ブロックに割り当てられた第２の物理ブロックのアドレスを読み出し、読み出したアドレスが示す前記第２の物理ブロックを解放するための解放処理を実行する制御部、
を有するストレージ制御装置と、
を含むストレージシステム。
【請求項６】
記憶部を有するコンピュータに、
記憶装置の記憶領域によって実現される論理ボリュームを分割した複数の論理ブロックのうち第１の論理ブロックに対する書き込みデータの書き込みがホスト装置から要求されると、前記記憶領域を分割した複数の物理ブロックのうちの第１の物理ブロックを前記第１の論理ブロックに割り当てて前記書き込みデータを前記第１の物理ブロックに格納するとともに、前記記憶部に記憶され、前記複数の論理ブロックのそれぞれについてデータの書き込みの有無が登録された第１の管理情報に、前記第１の論理ブロックにデータが書き込まれたことを登録し、
前記論理ボリュームを削除する際に、前記第１の管理情報に基づいて、前記複数の論理ブロックの中からデータが書き込まれている第２の論理ブロックを特定し、
前記複数の論理ブロックのそれぞれについて前記複数の物理ブロックの中から割り当てられた物理ブロックのアドレスが登録され、前記記憶領域に記憶された第２の管理情報から、前記複数の物理ブロックのうち前記第２の論理ブロックに割り当てられた第２の物理ブロックのアドレスを読み出し、
読み出したアドレスが示す前記第２の物理ブロックを解放するための解放処理を実行する、
処理を実行させるストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージ制御装置、ストレージシステムおよびストレージ制御プログラムに関する。
【背景技術】
【０００２】
記憶装置にデータを格納する際に、重複データを除去して、記憶領域の使用効率を高めるようにした「重複除去（De-duplication）」と呼ばれる技術が知られている。例えば、当該技術では、データの書き込み要求があった場合、そのデータに基づいて算出されたハッシュ値と、既にストレージ制御装置に格納されているデータに基づくハッシュ値とが比較される。ハッシュ値が同一の場合、ストレージ制御装置は、重複するデータであると判定し、書き込みが要求されたデータを記憶装置に格納しないようにする。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−１８２３０２号公報
【特許文献２】国際公開第２０１１／１２１９０５号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記の重複除去技術は、論理記憶領域の論理ブロックのうちデータが書き込まれた論理ブロックにだけ物理記憶領域を割り当てる仮想記憶技術の一種である。このような仮想記憶技術では、論理ボリュームの各論理ブロックと、物理記憶領域から割り当てられた物理ブロックとの対応関係を示す管理情報が使用される。また、この管理情報は、データ量が大きいため、ストレージ制御装置ではなく、物理記憶領域を提供する記憶装置に格納される場合がある。
【０００５】
ここで、上記のような論理ボリュームを削除する場合には、論理ボリュームの各論理ブロックに割り当てられている物理ブロックを、再利用可能な未割り当て領域に戻す「解放」の処理が実行される。この解放処理のため、ストレージ制御装置は、上記の管理情報の全てのレコードを検索して、各論理ブロックに物理ブロックが割り当てられているかを判定し、割り当てられている物理ブロックを取得する。しかし、管理情報が記憶装置に格納されている場合には、管理情報の全レコードの検索のために記憶装置にアクセスする回数が多くなる。その結果、論理ボリュームの削除処理にかかる時間が長くなるという問題がある。
【０００６】
１つの側面では、本発明は、論理ボリュームを削除するための処理時間を短縮できるストレージ制御装置、ストレージシステムおよびストレージ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
１つの態様では、ストレージ制御装置が提供される。このストレージ制御装置は、記憶部と制御部とを有する。記憶部は、記憶装置の記憶領域によって実現される論理ボリュームを分割した複数の論理ブロックのそれぞれについて、データの書き込みの有無が登録された第１の管理情報を記憶する。制御部は、複数の論理ブロックのうち第１の論理ブロックに対する書き込みデータの書き込みがホスト装置から要求されると、記憶領域を分割した複数の物理ブロックのうちの第１の物理ブロックを第１の論理ブロックに割り当てて書き込みデータを第１の物理ブロックに格納するとともに、第１の論理ブロックにデータが書き込まれたことを第１の管理情報に登録し、論理ボリュームを削除する際に、第１の管理情報に基づいて、複数の論理ブロックの中からデータが書き込まれている第２の論理ブロックを特定し、複数の論理ブロックのそれぞれについて複数の物理ブロックの中から割り当てられた物理ブロックのアドレスが登録され、記憶領域に記憶された第２の管理情報から、複数の物理ブロックのうち第２の論理ブロックに割り当てられた第２の物理ブロックのアドレスを読み出し、読み出したアドレスが示す第２の物理ブロックを解放するための解放処理を実行する。
【０００８】
また、１つの態様では、ストレージシステムが提供される。このストレージシステムは、記憶装置とストレージ制御装置とを有する。記憶装置は、論理ボリュームを実現する記憶領域を有するとともに、論理ボリュームを分割した複数の論理ブロックのそれぞれについて、記憶領域を分割した複数の物理ブロックの中から割り当てられた物理ブロックのアドレスが登録された第２の管理情報を記憶する。ストレージ制御装置は、記憶部と制御部とを有する。記憶部は、複数の論理ブロックのそれぞれについて、データの書き込みの有無が登録された第１の管理情報を記憶する。制御部は、複数の論理ブロックのうち第１の論理ブロックに対する書き込みデータの書き込みがホスト装置から要求されると、複数の物理ブロックのうちの第１の物理ブロックを第１の論理ブロックに割り当てて書き込みデータを第１の物理ブロックに格納するとともに、第１の論理ブロックにデータが書き込まれたことを第１の管理情報に登録し、論理ボリュームを削除する際に、第１の管理情報に基づいて、複数の論理ブロックの中からデータが書き込まれている第２の論理ブロックを特定し、第２の管理情報から、複数の物理ブロックのうち第２の論理ブロックに割り当てられた第２の物理ブロックのアドレスを読み出し、読み出したアドレスが示す第２の物理ブロックを解放するための解放処理を実行する。
【０００９】
また、１つの態様では、記憶部を有するコンピュータによって実行されるストレージ制御プログラムが提供される。このストレージ制御プログラムは、コンピュータに、記憶装置の記憶領域によって実現される論理ボリュームを分割した複数の論理ブロックのうち第１の論理ブロックに対する書き込みデータの書き込みがホスト装置から要求されると、記憶領域を分割した複数の物理ブロックのうちの第１の物理ブロックを第１の論理ブロックに割り当てて書き込みデータを第１の物理ブロックに格納するとともに、記憶部に記憶され、複数の論理ブロックのそれぞれについてデータの書き込みの有無が登録された第１の管理情報に、第１の論理ブロックにデータが書き込まれたことを登録し、論理ボリュームを削除する際に、第１の管理情報に基づいて、複数の論理ブロックの中からデータが書き込まれている第２の論理ブロックを特定し、複数の論理ブロックのそれぞれについて複数の物理ブロックの中から割り当てられた物理ブロックのアドレスが登録され、記憶領域に記憶された第２の管理情報から、複数の物理ブロックのうち第２の論理ブロックに割り当てられた第２の物理ブロックのアドレスを読み出し、読み出したアドレスが示す第２の物理ブロックを解放するための解放処理を実行する、処理を実行させる。
【発明の効果】
【００１０】
１つの側面では、論理ボリュームを削除するための処理時間を短縮できる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態のストレージ制御装置を示す図である。
【図２】第２の実施の形態のストレージシステムを示す図である。
【図３】ＣＭのハードウェア例を示す図である。
【図４】アドレス対応テーブルの例を示す図である。
【図５】ハッシュ値管理テーブルの例を示す図である。
【図６】比較例（その１）を示す図である。
【図７】比較例（その２）を示す図である。
【図８】第２の実施の形態の具体例（その１）を示す図である。
【図９】第２の実施の形態の具体例（その２）を示す図である。
【図１０】ＣＭの機能例を示す図である。
【図１１】論理ボリュームの作成時の処理の例を示すフローチャートである。
【図１２】書き込み処理の例を示すフローチャートである。
【図１３】読み出し処理の例を示すフローチャートである。
【図１４】論理ボリュームの削除処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、実施の形態について図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のストレージ制御装置を示す図である。図１に示すストレージ制御装置１０には、記憶装置２０とホスト装置３０が接続されている。ストレージ制御装置１０と記憶装置２０とは、例えば、１つの筐体に搭載されるストレージ装置として実現される。また、ストレージ制御装置１０と記憶装置２０とで、ストレージシステムが構築されていると考えてもよい。
【００１３】
ストレージ制御装置１０は、ホスト装置３０からの要求に応じて、記憶装置２０に対するアクセスを制御する。例えば、ストレージ制御装置１０は、記憶装置２０の記憶領域によって実現される論理ボリューム１２ａを作成する。そして、ストレージ制御装置１０は、ホスト装置３０からのアクセス要求に応じて、論理ボリューム１２ａに対するアクセスを制御する。
【００１４】
記憶装置２０は、論理ボリューム１２ａを分割した複数の論理ブロックのそれぞれについて、記憶装置２０の記憶領域を分割した複数の物理ブロックの中から割り当てられた物理ブロックのアドレスが登録された管理情報２１を記憶する。管理情報２１には、論理ボリューム１２ａの全ての論理ブロックに対応するレコードが登録される。ただし、後述するように、論理ボリューム１２ａにおいては、データが書き込まれた論理ブロックにだけ物理ブロックが割り当てられる。このため、管理情報２１の全てのレコードに物理ブロックのアドレスが必ず登録される訳ではない。
【００１５】
また、上記のように、管理情報２１は、論理ボリューム１２ａの全ての論理ブロックに対応するレコードを有するので、データ量が大きい。このため、管理情報２１は、ストレージ制御装置１０ではなく、論理ボリューム１２ａの物理記憶領域を提供する記憶装置２０に格納される。
【００１６】
なお、図１では説明を簡単にするために、論理ボリューム１２ａは、それぞれ論理アドレスＸＡ１〜ＸＡ４によって識別される４つの論理ブロックを有するものとする。
ストレージ制御装置１０は、記憶部１１および制御部１２を有する。記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性記憶装置である。制御部１２は、例えば、プロセッサである。プロセッサには、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。また、制御部１２は、マルチプロセッサであってもよい。
【００１７】
記憶部１１は、論理ボリューム１２ａの各論理ブロックについて、データの書き込みの有無が登録された管理情報を記憶する。図１の例では、このような管理情報として、論理ボリューム１２ａの各論理ブロックに対応するビットを有するビットマップ１１ａが記憶される。ビットマップ１１ａにおいては、ビットの値が０の場合、対応する論理ブロックにデータが書き込まれていないことを示す。また、ビットの値が１の場合、対応する論理ブロックにデータが書き込まれていることを示す。なお、図１において、ビットマップ１１ａにおける領域１１ａａ，１１ａｂ，１１ａｃ，１１ａｄは、それぞれ論理アドレスＸＡ１，ＸＡ２，ＸＡ３，ＸＡ４によって識別される論理ブロックに対応する。
【００１８】
制御部１２は、論理ボリューム１２ａにおける指定された論理ブロックに対する書き込みデータの書き込みがホスト装置３０から要求されると、記憶装置２０の複数の物理ブロックの中から未割り当ての物理ブロックを１つ選択する。制御部１２は、選択した物理ブロックを指定された論理ブロックに割り当て、書き込みデータを選択した物理ブロックに格納する。このように、制御部１２は、論理ボリューム１２ａの論理ブロックのうち、データが書き込まれた論理ブロックにだけ物理ブロックを割り当てる。
【００１９】
図１では例えば、論理アドレスＸＡ１の論理ブロックに対するデータＤ１の書き込みが要求されると、制御部１２は、物理アドレスＹＡ１の物理ブロックを論理アドレスＸＡ１の論理ブロックに割り当てる。そして、データＤ１は、物理アドレスＹＡ１の物理ブロックに書き込まれる。また、論理アドレスＸＡ３の論理ブロックに対するデータＤ２の書き込みが要求されると、制御部１２は、物理アドレスＹＡ２の物理ブロックを論理アドレスＸＡ３の論理ブロックに割り当てる。そして、データＤ２は、物理アドレスＹＡ２の物理ブロックに書き込まれる。
【００２０】
また、制御部１２は、上記のような物理ブロックの割り当て処理とともに、指定された論理ブロックにデータが書き込まれたことを、ビットマップ１１ａに登録する。図１では例えば、制御部１２は、データＤ１の書き込み要求に応じて、ビットマップ１１ａのビットのうち、論理アドレスＸＡ１に対応する領域１１ａａのビットを１に更新する。また、制御部１２は、データＤ２の書き込み要求に応じて、ビットマップ１１ａのビットのうち、論理アドレスＸＡ３に対応する領域１１ａｃのビットを１に更新する。
【００２１】
また、制御部１２は、論理ボリューム１２ａを削除する際に、次のような処理を実行する。制御部１２は、ビットマップ１１ａに基づいて、論理ボリューム１２ａの論理ブロックの中からデータが書き込まれている論理ブロックを特定する。図１の例では、論理アドレスＸＡ１，ＸＡ３にそれぞれ対応する論理ブロックが特定される。次に、制御部１２は、管理情報２１の中から、特定された論理ブロックに割り当てられた物理ブロックのアドレスを読み出す。図１の例では、物理アドレスＹＡ１，ＹＡ３が読み出される。
【００２２】
制御部１２は、読み出した物理アドレスＹＡ１，ＹＡ３を解放するための解放処理を実行する。「解放」とは、物理アドレスを再利用可能な未割り当て領域に戻すことを言う。解放処理では、例えば、記憶装置２０における未割り当ての物理アドレスを管理する管理情報に対して、物理アドレスＹＡ１，ＹＡ３が追加される。また、例えば、重複データが除去されるように記憶装置２０にデータが格納される場合には、解放処理では、物理アドレスＹＡ１，ＹＡ３に対応する物理ブロックを解放可能か否かが判定されてもよい。例えば、この物理ブロックに対して他の論理ブロックが割り当てられている場合には、物理ブロックを解放できない。
【００２３】
以上の論理ボリューム１２ａの削除処理では、制御部１２は、記憶装置２０に記憶された管理情報２１を参照する前に、記憶部１１に記憶されたビットマップ１１ａを参照して、データが書き込まれている論理ブロックを特定する。このため、制御部１２は、管理情報２１の全レコードを検索せずに、特定された論理ブロックに対応するレコードから、登録された物理ブロックのアドレスを読み出すことができる。これにより、削除処理における記憶装置２０へのアクセス回数やアクセス時間を抑制でき、その結果、削除処理にかかる時間を短縮できる。
【００２４】
［第２の実施の形態］
次に、第２の実施の形態として、重複除去技術を用いたストレージシステムを例示して説明する。
【００２５】
図２は、第２の実施の形態のストレージシステムを示す図である。図２に示すストレージシステムは、ストレージ装置１００およびホスト装置４００を含む。ストレージ装置１００とホスト装置４００とは、例えば、ファイバチャネル（ＦＣ：Fibre Channel）やｉＳＣＳＩ（Internet Small Computer System Interface）などを用いたＳＡＮ（Storage Area Network）を介して接続される。
【００２６】
ストレージ装置１００は、ＣＭ（Controller Module）２００およびＤＥ（Device Enclosure）３００を有する。ＣＭ２００は、ストレージ装置１００全体を制御する。
ＤＥ３００は、複数の記憶装置を搭載する。ＤＥ３００は、記憶装置としてＨＤＤを備えたディスクアレイ装置である。なお、ＤＥ３００に搭載される記憶装置は、ＳＳＤ（Solid State Drive）などの他の種類の記憶装置であってもよい。
【００２７】
ストレージ装置１００においては、ＣＭ２００は、ホスト装置４００からの要求に応じて、ＤＥ３００に搭載された記憶装置に対するアクセスを制御する。詳細には、ＣＭ２００は、ＤＥ３００内の記憶装置の記憶領域によって実現される１つ以上の論理ボリュームを作成する。各論理ボリュームには、ＬＵＮ（Logical Unit Number）が割り当てられる。また、各論理ボリュームは、一定サイズの論理ブロックに分割され、各論理ブロックにはＬＢＡ（Logical Block Address）が付与されている。そして、ＣＭ２００は、ホスト装置４００から論理ボリュームのＬＵＮおよび論理ブロックのＬＢＡを指定したアクセス要求を受信する。ＣＭ２００は、アクセス要求に応じて、論理ボリュームに格納されているデータにアクセスする。
【００２８】
また、ＣＭ２００は、論理ボリュームのデータをＤＥ３００内の記憶装置の記憶領域に格納する際に、重複データが除去されるように制御する。具体的には、ＣＭ２００は、ＤＥ３００内の記憶装置の記憶領域を用いて１つ以上のプールボリュームを設定する。各プールボリュームは、ＤＥ３００内の１台以上の記憶装置の記憶領域の単なる集合として実現されてもよいし、ＲＡＩＤ（Redundant Array of Inexpensive Disks）によって制御される複数の記憶装置によって実現される論理記憶領域であってもよい。ＣＭ２００は、１つのプールボリュームに対して１つ以上の論理ボリュームを設定することができる。そして、ＣＭ２００は、１つのプールボリュームに設定された全論理ボリューム内のデータを、重複データが除去されるようにそのプールボリュームに格納する。
【００２９】
なお、各プールボリュームは、論理ボリュームの論理ブロックと同じサイズのブロックに分割され、各ブロックにはＬＢＡが付与されている。以下の説明では、論理ボリューム内の論理ブロックのＬＢＡを「論理アドレス」と記載し、プールボリューム内のブロックのＬＢＡを「物理アドレス」と記載する。
【００３０】
次に、ＣＭ２００のハードウェアについて、説明する。
図３は、ＣＭのハードウェア例を示す図である。ＣＭ２００は、プロセッサ２０１、ＲＡＭ２０２、ＳＳＤ２０３、ＣＡ（Channel Adapter）２０４およびＤＩ（Device Interface）２０５を有する。
【００３１】
プロセッサ２０１は、ＣＭ２００の情報処理を制御する。プロセッサ２０１は、複数のプロセッシング要素を含むマルチプロセッサであってもよい。
ＲＡＭ２０２は、ＣＭ２００の主記憶装置である。ＲＡＭ２０２は、プロセッサ２０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ２０２は、プロセッサ２０１による処理に用いる各種データを記憶する。
【００３２】
ＳＳＤ２０３は、ＣＭ２００の補助記憶装置である。ＳＳＤ２０３は、不揮発性の半導体メモリである。ＳＳＤ２０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ＣＭ２００は、補助記憶装置として、ＳＳＤ２０３の代わりにＨＤＤを備えていてもよい。
【００３３】
ＣＡ２０４は、ホスト装置４００と通信するためのインタフェースである。ＤＩ２０５は、ＤＥ３００と通信するためのインタフェースである。
図４は、アドレス対応テーブルの例を示す図である。アドレス対応テーブルは、ＤＥ３００内の記憶装置に格納される。アドレス対応テーブルは、論理ボリューム毎に作成される。例えば、図４のアドレス対応テーブル３０１ａ，３０１ｂ，３０１ｃは、それぞれ個別の論理ボリュームに対応する。以下、アドレス対応テーブルを総称して、アドレス対応テーブル３０１と表現する場合がある。
【００３４】
アドレス対応テーブル３０１は、論理アドレスおよび物理アドレスの項目を含む。論理アドレスの項目には、論理ボリュームのＬＵＮおよびＬＢＡを示す情報が登録される。ＬＵＮの項目には、ＬＵＮを示す情報が登録される。ＬＢＡの項目には、論理ボリュームのＬＢＡが登録される。
【００３５】
物理アドレスの項目には、論理アドレスに対してプールボリュームから割り当てられたブロックの識別情報が登録される。具体的には、物理アドレスの項目には、プールボリュームのプールＩＤ（identifier）、ＬＢＡを示す情報が登録される。プールＩＤの項目には、プールボリュームの識別情報が登録される。ＬＢＡの項目には、プールボリュームのＬＢＡが登録される。
【００３６】
アドレス対応テーブル３０１ａ〜３０１ｃは、それぞれに対応する論理ボリューム内のすべての論理ブロックに対応するレコードを有する。そのため、アドレス対応テーブル３０１ａ〜３０１ｃのデータ量は大きい。そこで、アドレス対応テーブル３０１ａ〜３０１ｃは、ＲＡＭ２０２に格納されるのではなく、ＤＥ３００内の記憶装置に格納される。また、アドレス対応テーブル３０１ａ〜３０１ｃの一部のレコード（例えば、アクセス頻度の高い論理ブロックに対応するレコード）のみ、ＲＡＭ２０２に格納されていてもよい。
【００３７】
図５は、ハッシュ値管理テーブルの例を示す図である。ハッシュ値管理テーブルは、重複除去を行うために使用される情報であり、ＲＡＭ２０２に格納される。ハッシュ値管理テーブルは、プールボリューム毎に作成される。例えば、図５のハッシュ値管理テーブル２１１ａ，２１１ｂ，２１１ｃは、それぞれ個別のプールボリュームに対応する。以下、ハッシュ値管理テーブルを総称して、ハッシュ値管理テーブル２１１と表現する場合がある。
【００３８】
ハッシュ値管理テーブル２１１は、ハッシュ値、物理アドレスおよびリファレンスカウントの項目を含む。ハッシュ値の項目には、ハッシュ値を示す情報が登録される。物理アドレスの項目には、ハッシュ値に対応するデータが格納されたプールボリュームのブロックの識別情報が登録される。具体的には、物理アドレスの項目には、プールボリュームのプールＩＤ、ＬＢＡを示す情報が登録される。プールＩＤの項目には、プールボリュームの識別情報が登録される。ＬＢＡの項目には、プールボリュームのＬＢＡが登録される。リファレンスカウントの項目には、物理アドレスに対して割り当てられている論理アドレスの数が登録される。リファレンスカウントの値は、物理アドレスの割り当て状況に応じて増減される。リファレンスカウントの値が０になると、対応する物理アドレスが示すプールボリュームのブロックは、未割り当て領域に戻されて、再利用可能になる。すなわち、このブロックは解放される。
【００３９】
なお、以下の説明では、論理アドレスに対して物理アドレスが割り当てられていることを、「論理アドレスが物理アドレスを参照する」と表現する場合がある。この表現を用いた場合、リファレンスカウントは、物理アドレスを参照している論理アドレスの数を示す。
【００４０】
次に、図６，７を用いて比較例を示し、比較例における問題点について説明した後、第２の実施の形態の処理を説明する。なお、比較例では、図２で説明した各装置が用いられるものとする。
【００４１】
図６は、比較例（その１）を示す図である。ＣＭ２００は、論理ボリューム３２０，３３０を作成する。論理ボリューム３２０には、ＬＵＮ１が割り当てられる。論理ボリューム３３０には、ＬＵＮ２が割り当てられる。ＣＭ２００は、論理ボリューム３２０，３３０を作成後、論理ボリューム３２０に対応するアドレス対応テーブル３０１ａと、論理ボリューム３３０に対応するアドレス対応テーブル３０１ｂを作成する。アドレス対応テーブル３０１ａ，３０１ｂの初期状態では、論理アドレスの項目にＬＵＮとＬＢＡを示す情報が登録され、物理アドレスの項目は空欄とされる（または“ＮＵＬＬ”が登録される）。
【００４２】
また、論理ボリューム３２０，３３０に対して割り当てられる記憶領域にプールボリューム３１０が設定される。
ＣＭ２００のＲＡＭ２０２には、ハッシュ値管理テーブル２１１ａが格納されている。ハッシュ値管理テーブル２１１ａは、論理ボリューム３２０，３３０で共用される。また、ＤＥ３００内の記憶装置には、アドレス対応テーブル３０１ａ，３０１ｂが格納されている。
【００４３】
図６では、ホスト装置４００から論理アドレス（ＬＵＮ、ＬＢＡ）を指定したデータの書き込み要求があった場合を示している。書き込み要求は、データブロック単位で行われる。例えば、データブロックのデータ量は、４ＫＢ（キロバイト）であり、これは論理ブロックのサイズと同じである。
【００４４】
ＣＭ２００は、ホスト装置４００から書き込み先の論理アドレス（ＬＵＮ１、ＬＢＡ１）とデータブロックとを受信する。すると、ＣＭ２００は、受信したデータブロックがプールボリューム３１０に格納されているデータブロックと重複するか否かを判定する。この判定は、受信したデータブロックに基づいて算出されたハッシュ値が、ハッシュ値管理テーブル２１１ａに登録されているか否かによって行われる。なお、ハッシュ値は、例えば、ＳＨＡ−１（Secure Hash Algorithm 1）のハッシュ関数を用いて算出される。
【００４５】
ここで、重複すると判定されたとする。また、ハッシュ値管理テーブル２１１ａから、受信したデータブロックと同じデータブロックがプールボリューム３１０の物理アドレス（ＰＶ１、ＰＡ１）に格納されていると判別されたとする。なお、ＰＶ１は、プールＩＤであり、ＰＡ１は、ＬＢＡである。この場合、ＣＭ２００は、受信したデータブロックをプールボリューム３１０に格納せずに、アドレス対応テーブル３０１ａに、論理アドレス（ＬＵＮ１、ＬＢＡ１）と物理アドレス（ＰＶ１、ＰＡ１）との関係を登録する。登録後、ＣＭ２００は、ハッシュ値管理テーブル２１１ａにおいて物理アドレス（ＰＶ１、ＰＡ１）に対応するリファレンスカウントを１から２に変更する。これにより、論理アドレス（ＬＵＮ１、ＬＢＡ１）と論理アドレス（ＬＵＮ２、ＬＢＡ１１）という２つの論理アドレスが物理アドレス（ＰＶ１、ＰＡ１）を参照することが登録される。
【００４６】
図７は、比較例（その２）を示す図である。図７は、図６の状態から、ＣＭ２００がホスト装置４００からの指示により論理ボリューム３２０を削除する場合を示している。
ＣＭ２００は、ホスト装置４００から論理ボリューム３２０の削除指示を受信し、論理ボリューム３２０の削除処理を開始する。ＣＭ２００は、論理ボリューム３２０の削除に伴い、ハッシュ値管理テーブル２１１ａに登録されているリファレンスカウントを減算する。ここで、ＣＭ２００は、リファレンスカウントを減算するために、アドレス対応テーブル３０１ａに登録されている全ての論理アドレスを対象に、どの論理アドレスがどの物理アドレスを参照しているかを検索する。
【００４７】
例えば、ＣＭ２００は、アドレス対応テーブル３０１ａを参照し、論理アドレス（ＬＵＮ１、ＬＢＡ１）が物理アドレス（ＰＶ１、ＰＡ１）を参照していることを特定する。ＣＭ２００は、ハッシュ値管理テーブル２１１ａを参照し、物理アドレス（ＰＶ１、ＰＡ１）に対応するリファレンスカウントの値を減算する。次に、ＣＭ２００は、アドレス対応テーブル３０１ａを参照し、論理アドレス（ＬＵＮ１、ＬＢＡ２）が物理アドレス（ＰＶ１、ＰＡ２）を参照していることを特定する。ＣＭ２００は、ハッシュ値管理テーブル２１１ａを参照し、物理アドレス（ＰＶ１、ＰＡ２）に対応するリファレンスカウントの値を減算する。次に、ＣＭ２００は、アドレス対応テーブル３０１ａを参照し、論理アドレス（ＬＵＮ１、ＬＢＡ３）がどの物理アドレスも参照していないことを判別する。このようにして、ＣＭ２００は、全ての論理アドレスを対象に検索する。
【００４８】
しかし、このように全ての論理アドレスを対象に検索すると、アドレス対応テーブル３０１ａを参照するために、ＤＥ３００内の記憶装置へのアクセス回数が増えるので、論理ボリュームの削除処理にかかる時間が長くなる。
【００４９】
そこで、第２の実施の形態では、アドレス対応テーブル３０１ａの必要なレコードだけを参照できるようにすることで、ＤＥ３００内の記憶装置に対するアクセス回数を減らし、論理ボリューム３２０の削除に伴う処理時間を短くする。第２の実施の形態について具体例を用いて説明する。
【００５０】
図８は、第２の実施の形態の具体例（その１）を示す図である。図６，７に対する図８の相違点は、ビットマップ２１２ａ，２１２ｂを新たに作成したことである。そのため、ビットマップ２１２ａ，２１２ｂを主に説明する。
【００５１】
ビットマップ２１２ａ，２１２ｂは、ＲＡＭ２０２に格納される。ビットマップ２１２ａは、論理ボリューム３２０の各論理ブロックに対応するビットを有する。ビットマップ２１２ｂは、論理ボリューム３３０の各論理ブロックに対応するビットを有する。ビットマップ２１２ａ，２１２ｂの各ビットでは、対応する論理ブロックにデータが書き込まれているか否かが管理される。例えば、ホスト装置４００から１回も書き込みが要求されていない論理ブロックに対応するビットには“０”が設定される。そして、その論理ブロックに書き込みが要求されると、その論理ブロックに対応するビットに“１”が設定される。
【００５２】
図８では、ホスト装置４００から論理アドレス（ＬＵＮ、ＬＢＡ）を指定したデータブロックの書き込み要求があった場合を示している。ＣＭ２００は、ホスト装置４００から書き込み先の論理アドレス（ＬＵＮ１、ＬＢＡ１）とデータブロックを受信する。ＣＭ２００は、受信したデータブロックに基づいて算出したハッシュ値を用いて、受信したデータブロックがプールボリューム３１０に格納されているデータブロックと重複するか否かを判定する。
【００５３】
ここで、図６の場合と同様に重複すると判定され、受信したデータブロックと同じデータブロックがプールボリューム３１０の物理アドレス（ＰＶ１、ＰＡ１）に格納されていると判別されたとする。この場合、ＣＭ２００は、受信したデータブロックをプールボリューム３１０に格納せずに、アドレス対応テーブル３０１ａに論理アドレス（ＬＵＮ１、ＬＢＡ１）と物理アドレス（ＰＶ１、ＰＡ１）との関係を登録する。登録後、ＣＭ２００は、ハッシュ値管理テーブル２１１ａにおいて物理アドレス（ＰＶ１、ＰＡ１）に対応するリファレンスカウントを１から２に変更する。
【００５４】
さらに、ＣＭ２００は、ビットマップ２１２ａにおける論理アドレス（ＬＵＮ１、ＬＢＡ１）に対応する領域２１２ａ１に、データが書き込まれたことを登録する。これにより、領域２１２ａ１のビットが０から１に変更される。
【００５５】
図９は、第２の実施の形態の具体例（その２）を示す図である。図９は、図８の状態から、ＣＭ２００がホスト装置４００からの指示により論理ボリューム３２０を削除する場合を示している。
【００５６】
ＣＭ２００は、ホスト装置４００から論理ボリューム３２０の削除指示を受信し、論理ボリューム３２０の削除処理を開始する。ＣＭ２００は、論理ボリューム３２０を削除するとプールボリューム３１０のブロックを参照する論理ブロックの数が減るため、ハッシュ値管理テーブル２１１ａに登録されているリファレンスカウントの値を減らす。
【００５７】
ＣＭ２００は、論理ボリューム３２０に対応するビットマップ２１２ａを参照し、ビットが１である論理アドレス（ＬＵＮ１、ＬＢＡ１）を特定する。ＣＭ２００は、アドレス対応テーブル３０１ａのレコードのうち、特定された論理アドレス（ＬＵＮ１、ＬＢＡ１）に対応するレコードを参照し、そのレコードから物理アドレス（ＰＶ１、ＰＡ１）を読み出す。ＣＭ２００は、ハッシュ値管理テーブル２１１ａを参照し、読み出した物理アドレス（ＰＶ１、ＰＡ１）に対応するリファレンスカウントの値を２から１に変更する。
【００５８】
また、ＣＭ２００は、ビットマップ２１２ａを参照し、ビットが１である論理アドレス（ＬＵＮ１、ＬＢＡ２）を特定する。ＣＭ２００は、アドレス対応テーブル３０１ａのレコードのうち、特定された論理アドレス（ＬＵＮ１、ＬＢＡ２）に対応するレコードを参照し、そのレコードから物理アドレス（ＰＶ１、ＰＡ２）を読み出す。ＣＭ２００は、ハッシュ値管理テーブル２１１ａを参照し、読み出した物理アドレス（ＰＶ１、ＰＡ２）に対応するリファレンスカウントの値を１から０に変更する。
【００５９】
以上の手順により、ＣＭ２００は、ビットマップ２１２ａに基づいてビットが１である論理ブロックを順次特定し、特定された論理アドレスに対応する物理アドレスをアドレス対応テーブル３０１ａから読み出し、対応するリファレンスカウントの値を減算する。ＣＭ２００は、このようなリファレンスカウントの減算処理が終了すると、アドレス対応テーブル３０１ａとビットマップ２１２ａと論理ボリューム３２０とを削除する。また、ＣＭ２００は、ハッシュ値管理テーブル２１１ａを参照し、リファレンスカウントの値が０である物理アドレスを解放する。図９の例では、物理アドレス（ＰＶ１、ＰＡ２）が示すブロックが解放され、未割り当てブロックに戻される。
【００６０】
このように、第２の実施の形態では、ＣＭ２００は、ビットマップ２１２ａでビットが“１”である論理アドレスだけを対象にアドレス対応テーブル３０１ａを検索する。すなわち、ＣＭ２００は、ビットが“０”である論理アドレスを対象にアドレス対応テーブル３０１ａを検索しない。例えば、論理アドレス（ＬＵＮ１、ＬＢＡ３）を検索しない。このように、アドレス対応テーブル３０１ａに登録されている全ての論理アドレスを検索せず、ビットマップ２１２ａのビットが“１”である論理アドレスを対象に検索するので、記憶装置２０に対するアクセス回数が減る。その結果、論理ボリュームを削除するための処理時間を短縮できる。
【００６１】
次に、ＣＭ２００の詳細について説明する。
図１０は、ＣＭの機能例を示す図である。ＣＭ２００は、記憶部２１０、作成部２２０、アクセス制御部２３０および削除処理部２４０を有する。
【００６２】
記憶部２１０は、例えば、ＲＡＭ２０２に確保した記憶領域として実装される。記憶部２１０は、ハッシュ値管理テーブル２１１および図８，９で例示したビットマップを記憶する。また、ビットマップのビットと論理アドレスとの対応関係を示す情報が、記憶部２１０に格納される。さらに、各プールボリュームにおけるブロックの空き状況を示す管理情報も、記憶部２１０に格納される。また、記憶部２１０が、アドレス対応テーブル３０１の一部の情報を記憶していてもよい。
【００６３】
作成部２２０、アクセス制御部２３０および削除処理部２４０の少なくとも一部の処理は、例えば、プロセッサ２０１が所定のプログラムを実行することによって実現される。
作成部２２０は、論理ボリュームを作成する。作成部２２０は、論理ボリュームに対応するビットマップと、論理ボリュームに対応するアドレス対応テーブル３０１とを作成する。
【００６４】
アクセス制御部２３０は、ホスト装置４００から論理ボリュームへのアクセス要求を受け付け、要求に応じたアクセス制御を実行する。例えば、アクセス制御部２３０は、ホスト装置４００から書き込み要求とデータブロックを受信すると、受信したデータブロックが既に対応するプールボリュームに格納されているか否かを判定する。格納されていない場合、アクセス制御部２３０は、データブロックを対応するプールボリュームに格納する。一方、格納されている場合、アクセス制御部２３０は、データブロックをプールボリュームに格納しないようにする。
【００６５】
アクセス制御部２３０は、書き込みが要求された論理アドレスに対応するビットマップのビットを１に設定する。また、アクセス制御部２３０は、書き込みが要求された論理アドレスと物理アドレスとの関係をアドレス対応テーブル３０１に登録する。さらに、アクセス制御部２３０は、ハッシュ値管理テーブル２１１のリファレンスカウントを更新する。
【００６６】
また、アクセス制御部２３０は、ホスト装置４００から読み出し要求を受信すると、データブロックの読み出し処理を行う。
削除処理部２４０は、ホスト装置４００から論理ボリュームの削除指示を受信すると、ビットマップを参照しながら論理ボリュームの削除に伴う処理を実行する。詳細には、削除処理部２４０は、ビットマップのビットが“１”の論理アドレスを特定し、特定した論理アドレスに対応付けられた物理アドレスをアドレス対応テーブル３０１から読み出す。削除処理部２４０は、ハッシュ値管理テーブル２１１を参照し、読み出した物理アドレスに対応するリファレンスカウントを減算する。また、削除処理部２４０は、必要な全てのリファレンスカウントの減算処理を完了すると、削除対象の論理ボリュームに対応するアドレス対応テーブル３０１とビットマップを削除する。また、削除処理部２４０は、削除対象の論理ボリュームを削除する。
【００６７】
次に、ＣＭ２００が実行する処理について、フローチャートを用いて説明する。
図１１は、論理ボリュームの作成時の処理の例を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。
【００６８】
（Ｓ１１）作成部２２０は、ホスト装置４００からの指示により論理ボリュームを作成する。作成された論理ボリュームには、プールボリュームが割り当てられる。
（Ｓ１２）作成部２２０は、作成した論理ボリュームに対応するビットマップを作成し、記憶部２１０に格納する。具体的には、作成部２２０は、作成した論理ボリュームの容量に合わせてビットマップを作成する。例えば、作成部２２０は、“論理ボリュームの容量／論理ブロックの容量（４キロバイト）”で算出された数のビットを含むビットマップを作成する。
【００６９】
（Ｓ１３）作成部２２０は、作成したビットマップを初期化する。すなわち、作成部２２０は、ビットマップのビットを全て０にする。
（Ｓ１４）作成部２２０は、作成した論理ボリュームに対応するアドレス対応テーブル３０１を作成する。作成部２２０は、作成した論理ボリュームの全ての論理ブロックに対応するレコードをアドレス対応テーブル３０１に作成し、各レコードの論理アドレスの項目にＬＵＮとＬＢＡを示す情報を登録し、物理アドレスの項目を空欄にする。作成部２２０は、作成したアドレス対応テーブル３０１を、ＤＥ３００内の記憶装置に格納する。そして、処理を終了する。
【００７０】
図１２は、書き込み処理の例を示すフローチャートである。以下、図１２に示す処理をステップ番号に沿って説明する。なお、図１２において参照されるハッシュ値管理テーブル２１１は、書き込み対象の論理ボリュームに割り当てられたプールボリュームに対応するハッシュ値管理テーブル２１１である。また、図１２において参照されるアドレス対応テーブル３０１は、書き込み対象の論理ボリュームに対応するアドレス対応テーブル３０１である。
【００７１】
（Ｓ２１）アクセス制御部２３０は、ホスト装置４００から書き込み要求とデータブロックを受信する。書き込み要求には、ＬＵＮとＬＢＡを示す情報が含まれる。アクセス制御部２３０は、ＳＨＡ−１のハッシュ関数を用いて、書き込み要求のデータブロックのハッシュ値を算出する。アクセス制御部２３０は、算出したハッシュ値がハッシュ値管理テーブル２１１に登録されているか否かにより、受信したデータブロックがプールボリューム３１０に格納されているデータブロックと重複するか否かを判定する。
【００７２】
算出したハッシュ値がハッシュ値管理テーブル２１１に登録されていない（重複していない）場合、処理をステップＳ２４に進める。一方、算出したハッシュ値がハッシュ値管理テーブル２１１に登録されている（重複する）場合、処理をステップＳ２２に進める。この場合、アクセス制御部２３０は、受信したデータブロックをプールボリューム３１０に格納する処理（ステップＳ２４に対応）をスキップする。
【００７３】
（Ｓ２２）アクセス制御部２３０は、重複すると判定したデータブロックが格納されている物理アドレスと書き込みが要求された論理アドレスとの関係をアドレス対応テーブル３０１に登録する。なお、登録される物理アドレスは、ハッシュ値管理テーブル２１１において、算出したハッシュ値と同じハッシュ値に対応付けられている物理アドレスである。
【００７４】
ここで、アドレス対応テーブル３０１の物理アドレスの項目へ物理アドレスを登録する前にすでに別の物理アドレスが登録されていた場合を、更新という。
（Ｓ２３）アクセス制御部２３０は、ハッシュ値管理テーブル２１１を参照し、重複すると判定したデータブロックが格納されている物理アドレスに対応するリファレンスカウントを１つ加算する。
【００７５】
また、アクセス制御部２３０は、更新の場合、アドレス対応テーブル３０１におけるステップＳ２２での登録対象のレコードにおいて、物理アドレスの項目にステップＳ２２での登録前に登録されていた物理アドレスを判別する。アクセス制御部２３０は、ハッシュ値管理テーブル２１１において、判別した物理アドレスに対応付けられているリファレンスカウントを１つ減算する。そして、処理をステップＳ２７に進める。
【００７６】
なお、減算後のリファレンスカウントが０になった場合には、アクセス制御部２３０は、このリファレンスカウントに対応付けられた物理アドレスが示すプールボリューム３１０のブロックを解放する。例えば、アクセス制御部２３０は、プールボリューム３１０の空き領域を管理している管理情報に、当該物理ブロックを未割り当てブロックとして登録する。また、アクセス制御部２３０は、減算したリファレントカウントを含むレコードをハッシュ値管理テーブル２１１から削除する。
【００７７】
（Ｓ２４）アクセス制御部２３０は、対応するプールボリューム３１０から未割り当ての物理アドレスを選択する。アクセス制御部２３０は、受信したデータブロックをプールボリューム３１０から選択した物理アドレスが示すブロックに格納する。
【００７８】
（Ｓ２５）アクセス制御部２３０は、データブロックを書き込んだ物理アドレスと書き込みが要求された論理アドレスとの関係をアドレス対応テーブル３０１に登録する。
ここで、アドレス対応テーブル３０１の物理アドレスの項目へ物理アドレスを登録する前にすでに別の物理アドレスが登録されていた場合を、更新という。
【００７９】
（Ｓ２６）アクセス制御部２３０は、ハッシュ値管理テーブル２１１に新規にレコードを追加する。アクセス制御部２３０は、追加したレコードの物理アドレスの項目に、データブロックを書き込んだ物理アドレスを登録する。アクセス制御部２３０は、追加したレコードのハッシュ値の項目に、ステップＳ２１で算出したハッシュ値を登録する。アクセス制御部２３０は、追加したレコードのリファレンスカウントの項目に１を登録する。
【００８０】
また、アクセス制御部２３０は、更新の場合、アドレス対応テーブル３０１におけるステップＳ２５での登録対象のレコードにおいて、物理アドレスの項目にステップＳ２５での登録前に登録されていた物理アドレスを判別する。アクセス制御部２３０は、ハッシュ値管理テーブル２１１において、判別した物理アドレスに対応付けられているリファレンスカウントを１つ減算する。
【００８１】
なお、減算後のリファレンスカウントが０になった場合には、アクセス制御部２３０は、ステップＳ２２で説明した手順と同様の手順で、プールボリューム３１０における該当するブロックを解放し、ハッシュ値管理テーブル２１１の該当するレコードを削除する。
【００８２】
（Ｓ２７）アクセス制御部２３０は、新規書き込みか否かを判定する。新規書き込みとは、アドレス対応テーブル３０１におけるステップＳ２２またはステップＳ２５での登録対象のレコードにおいて、物理アドレスの項目に物理アドレスが登録されていなかったケースである。なお、このケースについては、当該レコードに物理アドレスが登録されていたことではなく、当該レコードに対応するビットマップのビットが０であることで判定されてもよい。新規書き込みの場合、処理をステップＳ２８に進める。新規書き込みでない場合、処理を終了する。
【００８３】
（Ｓ２８）アクセス制御部２３０は、書き込みが要求された論理アドレス（ＬＵＮとＬＢＡ）に対応するビットマップのビットを１に設定する。そして、処理を終了する。
図１３は、読み出し処理の例を示すフローチャートである。以下、図１３に示す処理をステップ番号に沿って説明する。
【００８４】
（Ｓ３１）アクセス制御部２３０は、ホスト装置４００から読み出し要求を受信する。読み出し要求には、読み出し元の論理アドレスを示すＬＵＮとＬＢＡが含まれる。アクセス制御部２３０は、読み出し元の論理アドレス（ＬＵＮとＬＢＡ）に対応するビットマップのビットが０であるか否かを判定する。ビットが０の場合、処理をステップＳ３３に進める。ビットが１の場合、処理をステップＳ３２に進める。
【００８５】
（Ｓ３２）アクセス制御部２３０は、データブロックの読み出し処理を実行する。詳細には、アクセス制御部２３０は、アドレス対応テーブル３０１を参照し、読み出し元の論理アドレスに対応する物理アドレスを特定する。アクセス制御部２３０は、特定した物理アドレスが示すプールボリューム３１０のブロックに格納されているデータブロックを読み出す。アクセス制御部２３０は、読み出したデータブロックをホスト装置４００に送信する。そして、処理を終了する。
【００８６】
（Ｓ３３）アクセス制御部２３０は、ゼロデータをホスト装置４００に送信する。なお、ゼロデータは、データが存在しないことを示すデータであり、例えばビット値０が羅列されたデータである。そして、処理を終了する。
【００８７】
このように、読み出し元の論理アドレスに対応するビットマップのビットが０の場合、アクセス制御部２３０は、ＤＥ３００内の記憶装置にアクセスしない。すなわち、アクセス制御部２３０は、読み出しが要求されたデータがＤＥ３００内の記憶装置に存在しないことを確認するために、ＤＥ３００内の記憶装置に格納されたアドレス対応テーブル３０１を参照しなくて済む。よって、ビットマップを用いることで、読み出し要求に対する応答速度を速くすることができる。
【００８８】
図１４は、論理ボリュームの削除処理の例を示すフローチャートである。以下、図１４に示す処理をステップ番号に沿って説明する。
（Ｓ４１）削除処理部２４０は、ホスト装置４００から論理ボリュームの削除指示を受信する。削除指示には、削除対象の論理ボリュームを示すＬＵＮが含まれる。削除処理部２４０は、削除対象の論理ボリュームに対応するビットマップの先頭のビットを読み込む。
【００８９】
（Ｓ４２）削除処理部２４０は、ビットが１であるか否かを判定する。ビットが１の場合、処理をステップＳ４３に進める。ビットが０の場合、処理をステップＳ４４に進める。
【００９０】
（Ｓ４３）削除処理部２４０は、アドレス対応テーブル３０１を参照し、ステップＳ４２で判定したビットで管理する論理アドレスに対応付けられた物理アドレスを特定する。削除処理部２４０は、ハッシュ値管理テーブル２１１を参照し、特定した物理アドレスに対応するリファレンスカウントを減算する。
【００９１】
ここで、減算後のリファレンスカウントが０になった場合には、削除処理部２４０は、このリファレンスカウントに対応付けられた物理アドレスが示すプールボリューム３１０のブロックを解放する。また、削除処理部２４０は、減算したリファレントカウントを含むレコードをハッシュ値管理テーブル２１１から削除する。
【００９２】
（Ｓ４４）削除処理部２４０は、ビットマップの全てのビットを読み込んだか否かを判定する。読み込んでいない場合、処理をステップＳ４５に進める。読み込んだ場合、処理をステップＳ４６に進める。
【００９３】
（Ｓ４５）削除処理部２４０は、ビットマップの次のビットを読み込む。そして、処理をステップＳ４２に進める。
（Ｓ４６）削除処理部２４０は、削除対象の論理ボリュームに対応するビットマップおよびアドレス対応テーブル３０１を削除する。また、削除処理部２４０は、削除対象の論理ボリュームに関する他の管理情報を削除することで、この論理ボリュームを削除する。そして、処理を終了する。
【００９４】
また、第１の実施の形態の情報処理は、ストレージ制御装置１０に用いられるプロセッサに、プログラムを実行させることで実現できる。第２の実施の形態の情報処理は、プロセッサ２０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体に記録できる。
【００９５】
例えば、プログラムを記録した記録媒体を配布することで、プログラムを流通させることができる。また、作成部２２０、アクセス制御部２３０および削除処理部２４０に相当する機能を実現するプログラムを別個のプログラムとし、各プログラムを別個に配布してもよい。作成部２２０、アクセス制御部２３０および削除処理部２４０の機能が別個のコンピュータにより実現されてもよい。コンピュータは、例えば、記録媒体に記録されたプログラムを、ＲＡＭ２０２やＳＳＤ２０３に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【００９６】
また、以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  記憶装置の記憶領域によって実現される論理ボリュームを分割した複数の論理ブロックのそれぞれについて、データの書き込みの有無が登録された第１の管理情報を記憶する記憶部と、
前記複数の論理ブロックのうち第１の論理ブロックに対する書き込みデータの書き込みがホスト装置から要求されると、前記記憶領域を分割した複数の物理ブロックのうちの第１の物理ブロックを前記第１の論理ブロックに割り当てて前記書き込みデータを前記第１の物理ブロックに格納するとともに、前記第１の論理ブロックにデータが書き込まれたことを前記第１の管理情報に登録し、前記論理ボリュームを削除する際に、前記第１の管理情報に基づいて、前記複数の論理ブロックの中からデータが書き込まれている第２の論理ブロックを特定し、前記複数の論理ブロックのそれぞれについて前記複数の物理ブロックの中から割り当てられた物理ブロックのアドレスが登録され、前記記憶領域に記憶された第２の管理情報から、前記複数の物理ブロックのうち前記第２の論理ブロックに割り当てられた第２の物理ブロックのアドレスを読み出し、読み出したアドレスが示す前記第２の物理ブロックを解放するための解放処理を実行する制御部と、
を有するストレージ制御装置。
【００９７】
（付記２）  前記記憶部は、前記複数の物理ブロックのそれぞれについて、前記複数の論理ブロックのそれぞれに対して割り当てられた割り当て数が登録された第３の管理情報をさらに記憶し、
前記制御部は、前記第１の論理ブロックに対する前記書き込みデータの書き込みが要求されたとき、前記記憶領域において重複データが除去されるように、前記第１の論理ブロックに対して前記第１の物理ブロックを割り当て、
前記解放処理では、前記第３の管理情報に登録された割り当て数のうち、前記第２の管理情報から読み出したアドレスが示す前記第２の物理ブロックに対応する割り当て数を減算し、減算後の割り当て数が０の場合、前記第２の物理ブロックを解放する、
付記１記載のストレージ制御装置。
【００９８】
（付記３）  前記ストレージ制御装置には、共通の前記記憶領域によって実現される前記論理ボリュームが複数設定され、
前記記憶部は、複数の前記論理ボリュームのそれぞれに対応する前記第１の管理情報を記憶するとともに、前記複数の物理ブロックのそれぞれについて、複数の前記論理ボリュームにおける前記複数の論理ブロックのそれぞれに対して割り当てられた割り当て数が登録された第３の管理情報をさらに記憶し、
前記記憶領域には、複数の前記論理ボリュームのそれぞれに対応する前記第２の管理情報が記憶され、
前記制御部は、複数の前記論理ボリュームのいずれかに含まれる前記第１の論理ブロックに対する前記書き込みデータの書き込みが要求されたとき、前記記憶領域において重複データが除去されるように、前記第１の論理ブロックに対して前記第１の物理ブロックを割り当て、
前記解放処理では、前記第３の管理情報に登録された割り当て数のうち、前記第２の管理情報から読み出したアドレスが示す前記第２の物理ブロックに対応する割り当て数を減算し、減算後の割り当て数が０の場合、前記第２の物理ブロックを解放する、
付記１記載のストレージ制御装置。
【００９９】
（付記４）  前記制御部は、前記複数の論理ブロックのうち第３の論理ブロックからの読み出しが前記ホスト装置から要求されると、前記第１の管理情報に基づいて、前記第３の論理ブロックにデータが書き込まれているか否かを判定し、データが書き込まれていない場合、データが書き込まれていないことを示す情報を前記ホスト装置に送信する、
付記１または２記載のストレージ制御装置。
【０１００】
（付記５）  論理ボリュームを実現する記憶領域を有するとともに、前記論理ボリュームを分割した複数の論理ブロックのそれぞれについて、前記記憶領域を分割した複数の物理ブロックの中から割り当てられた物理ブロックのアドレスが登録された第２の管理情報を記憶する記憶装置と、
前記複数の論理ブロックのそれぞれについて、データの書き込みの有無が登録された第１の管理情報を記憶する記憶部、および、
前記複数の論理ブロックのうち第１の論理ブロックに対する書き込みデータの書き込みがホスト装置から要求されると、前記複数の物理ブロックのうちの第１の物理ブロックを前記第１の論理ブロックに割り当てて前記書き込みデータを前記第１の物理ブロックに格納するとともに、前記第１の論理ブロックにデータが書き込まれたことを前記第１の管理情報に登録し、前記論理ボリュームを削除する際に、前記第１の管理情報に基づいて、前記複数の論理ブロックの中からデータが書き込まれている第２の論理ブロックを特定し、前記第２の管理情報から、前記複数の物理ブロックのうち前記第２の論理ブロックに割り当てられた第２の物理ブロックのアドレスを読み出し、読み出したアドレスが示す前記第２の物理ブロックを解放するための解放処理を実行する制御部、
を有するストレージ制御装置と、
を含むストレージシステム。
【０１０１】
（付記６）  前記記憶部は、前記複数の物理ブロックのそれぞれについて、前記複数の論理ブロックのそれぞれに対して割り当てられた割り当て数が登録された第３の管理情報をさらに記憶し、
前記制御部は、前記第１の論理ブロックに対する前記書き込みデータの書き込みが要求されたとき、前記記憶領域において重複データが除去されるように、前記第１の論理ブロックに対して前記第１の物理ブロックを割り当て、
前記解放処理では、前記第３の管理情報に登録された割り当て数のうち、前記第２の管理情報から読み出したアドレスが示す前記第２の物理ブロックに対応する割り当て数を減算し、減算後の割り当て数が０の場合、前記第２の物理ブロックを解放する、
付記５記載のストレージシステム。
【０１０２】
（付記７）  前記ストレージ制御装置には、共通の前記記憶領域によって実現される前記論理ボリュームが複数設定され、
前記記憶部は、複数の前記論理ボリュームのそれぞれに対応する前記第１の管理情報を記憶するとともに、前記複数の物理ブロックのそれぞれについて、複数の前記論理ボリュームにおける前記複数の論理ブロックのそれぞれに対して割り当てられた割り当て数が登録された第３の管理情報をさらに記憶し、
前記記憶領域には、複数の前記論理ボリュームのそれぞれに対応する前記第２の管理情報が記憶され、
前記制御部は、複数の前記論理ボリュームのいずれかに含まれる前記第１の論理ブロックに対する前記書き込みデータの書き込みが要求されたとき、前記記憶領域において重複データが除去されるように、前記第１の論理ブロックに対して前記第１の物理ブロックを割り当て、
前記解放処理では、前記第３の管理情報に登録された割り当て数のうち、前記第２の管理情報から読み出したアドレスが示す前記第２の物理ブロックに対応する割り当て数を減算し、減算後の割り当て数が０の場合、前記第２の物理ブロックを解放する、
付記５記載のストレージシステム。
【０１０３】
（付記８）  前記制御部は、前記複数の論理ブロックのうち第３の論理ブロックからの読み出しが前記ホスト装置から要求されると、前記第１の管理情報に基づいて、前記第３の論理ブロックにデータが書き込まれているか否かを判定し、データが書き込まれていない場合、データが書き込まれていないことを示す情報を前記ホスト装置に送信する、
付記５または６記載のストレージシステム。
【０１０４】
（付記９）  記憶部を有するコンピュータに、
記憶装置の記憶領域によって実現される論理ボリュームを分割した複数の論理ブロックのうち第１の論理ブロックに対する書き込みデータの書き込みがホスト装置から要求されると、前記記憶領域を分割した複数の物理ブロックのうちの第１の物理ブロックを前記第１の論理ブロックに割り当てて前記書き込みデータを前記第１の物理ブロックに格納するとともに、前記記憶部に記憶され、前記複数の論理ブロックのそれぞれについてデータの書き込みの有無が登録された第１の管理情報に、前記第１の論理ブロックにデータが書き込まれたことを登録し、
前記論理ボリュームを削除する際に、前記第１の管理情報に基づいて、前記複数の論理ブロックの中からデータが書き込まれている第２の論理ブロックを特定し、
前記複数の論理ブロックのそれぞれについて前記複数の物理ブロックの中から割り当てられた物理ブロックのアドレスが登録され、前記記憶領域に記憶された第２の管理情報から、前記複数の物理ブロックのうち前記第２の論理ブロックに割り当てられた第２の物理ブロックのアドレスを読み出し、
読み出したアドレスが示す前記第２の物理ブロックを解放するための解放処理を実行する、
処理を実行させるストレージ制御プログラム。
【０１０５】
（付記１０）  前記記憶部には、前記複数の物理ブロックのそれぞれについて、前記複数の論理ブロックのそれぞれに対して割り当てられた割り当て数が登録された第３の管理情報がさらに記憶され、
前記第１の論理ブロックに対する前記書き込みデータの書き込みが要求されたとき、前記記憶領域において重複データが除去されるように、前記第１の論理ブロックに対して前記第１の物理ブロックを割り当て、
前記解放処理では、前記第３の管理情報に登録された割り当て数のうち、前記第２の管理情報から読み出したアドレスが示す前記第２の物理ブロックに対応する割り当て数を減算し、減算後の割り当て数が０の場合、前記第２の物理ブロックを解放する、
付記９記載のストレージ制御プログラム。
【０１０６】
（付記１１）  前記コンピュータには、共通の前記記憶領域によって実現される前記論理ボリュームが複数設定され、
前記記憶部には、複数の前記論理ボリュームのそれぞれに対応する前記第１の管理情報が記憶されるとともに、前記複数の物理ブロックのそれぞれについて、複数の前記論理ボリュームにおける前記複数の論理ブロックのそれぞれに対して割り当てられた割り当て数が登録された第３の管理情報がさらに記憶され、
前記記憶領域には、複数の前記論理ボリュームのそれぞれに対応する前記第２の管理情報が記憶され、
前記書き込みデータの書き込み要求では、複数の前記論理ボリュームのいずれかに含まれる前記第１の論理ブロックに対する書き込みが要求され、
前記第１の物理ブロックの割り当てでは、前記記憶領域において重複データが除去されるように、前記第１の論理ブロックに対して前記第１の物理ブロックを割り当て、
前記解放処理では、前記第３の管理情報に登録された割り当て数のうち、前記第２の管理情報から読み出したアドレスが示す前記第２の物理ブロックに対応する割り当て数を減算し、減算後の割り当て数が０の場合、前記第２の物理ブロックを解放する、
付記９記載のストレージ制御プログラム。
【０１０７】
（付記１２）  前記コンピュータに、
前記複数の論理ブロックのうち第３の論理ブロックからの読み出しが前記ホスト装置から要求されると、前記第１の管理情報に基づいて、前記第３の論理ブロックにデータが書き込まれているか否かを判定し、データが書き込まれていない場合、データが書き込まれていないことを示す情報を前記ホスト装置に送信する、
処理をさらに実行させる付記９または１０記載のストレージ制御プログラム。
【符号の説明】
【０１０８】
１０  ストレージ制御装置
１１  記憶部
１１ａ  ビットマップ
１１ａａ，１１ａｂ，１１ａｃ，１１ａｄ  領域
１２  制御部
１２ａ  論理ボリューム
２０  記憶装置
２１  管理情報
３０  ホスト装置
【図１】
2017219913.tif 000003
【図２】
2017219913.tif 000004
【図３】
2017219913.tif 000005
【図４】
2017219913.tif 000006
【図５】
2017219913.tif 000007
【図６】
2017219913.tif 000008
【図７】
2017219913.tif 000009
【図８】
2017219913.tif 000010
【図９】
2017219913.tif 000011
【図１０】
2017219913.tif 000012
【図１１】
2017219913.tif 000013
【図１２】
2017219913.tif 000014
【図１３】
2017219913.tif 000015
【図１４】
2017219913.tif 000016