(57)【要約】【課題】  データ自体の大きさが変わるデータ処理後のデータを格納するストレージシステムを利用するホストコンピュータの負荷を軽減することが可能な技術を提供することを目的とする。【解決手段】  ホストコンピュータに対しては、第１ブロックを最小単位としてデータ転送を行う。記憶領域に対しては、第２ブロックを最小単位としてデータ転送を行う。記憶領域の第２ブロックセットは、第１ブロックセットを単位として、データ自体の大きさが変わるデータ変換処理を実行して得られたデータを格納する。ここで、第１ブロックセットと第２ブロックセットとの対応関係を生成する。さらに、ホストコンピュータからの読み出し要求に応じて、要求された第１ブロックを含む第１ブロックセットに対応する第２ブロックセットを読み出し、逆変換処理を実行して、ホストコンピュータにデータを送信する。【選択図】  図８
2006259962.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する記憶領域をホストコンピュータに提供するストレージシステムであって、
データを記憶する記憶領域を有するデータ記憶部と、
前記ホストコンピュータと前記記憶領域との間のデータ転送を制御する制御部と、
を備え、
前記制御部は、
前記ホストコンピュータとの間では、所定サイズの第１ブロックを最小単位として前記ホストコンピュータから指定された第１ブロックの論理的な格納位置に従ってデータの受信及び送信を実行し、
前記記憶領域との間では、所定サイズの第２ブロックを最小単位としてデータの格納と読み出しとを実行するとともに、
前記記憶領域にデータを格納する際には、Ｎ個（Ｎは１以上の整数）の第１ブロックで構成される第１ブロックセットを単位として、データ自体の大きさが変わるデータ変換処理を実行して１以上の第２ブロックで構成される第２ブロックセットを生成するとともに、前記第２ブロックセットを前記記憶領域へ格納する変換格納モードを有し、
前記ストレージシステムは、さらに、
複数の前記第１ブロックセットと複数の前記第２ブロックセットとの対応関係を示すブロック対応関係を記憶する対応関係記憶部を備え、
前記制御部は、前記ホストコンピュータから特定の第１ブロックのデータ読み出し要求を受信したときに、前記ブロック対応関係を参照して、前記要求された第１ブロックを含む第１ブロックセットに対応付けられた読出第２ブロックセットを認識し、前記読出第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、前記要求された第１ブロックのデータを前記ホストコンピュータに送信する、
ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記制御部は、さらに、前記ホストコンピュータから特定の第１ブロックに関するデータ更新格納要求を受けたときに、前記要求された第１ブロックを含む更新対象第１ブロックセットの更新処理を実行し、
前記更新処理において、前記制御部は、前記ブロック対応関係を参照して、前記更新対象第１ブロックセットに含まれる全ての第１ブロックの更新が要求されているか否かを判定し、全ての第１ブロックの更新が要求されていない場合には、
前記更新対象第１ブロックセットに対応付けられた第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、得られたデータに前記要求された第１ブロックのデータを上書きしてから前記変換処理を実行して更新対象第２ブロックセットを生成するとともに、前記更新対象第２ブロックセットを前記記憶領域に格納し、さらに、
前記ブロック対応関係に、前記更新対象第１ブロックセットと前記更新対象第２ブロックセットとの対応関係を書き込む、
ストレージシステム。
【請求項３】
請求項１に記載のストレージシステムであって、
前記記憶領域は、論理的な格納位置が同一の第１ブロックセットに対応付けられているとともにバージョンが異なる複数の異バージョン第２ブロックセットを格納することが可能であり、
前記ブロック対応関係は、前記第１ブロックセットの論理的な格納位置と、前記複数の異バージョン第２ブロックセットの物理的な格納位置及びバージョンとの対応関係を含んでおり、
前記制御部は、前記ホストコンピュータから特定の第１ブロックと特定のバージョンとに関するデータ読み出し要求を受けたときには、バージョン読み出し処理を実行し、
前記バージョン読み出し処理において、前記制御部は、前記ブロック対応関係を参照して、前記要求された第１ブロックを含む第１ブロックセットと、前記要求されたバージョンと、の双方に対応付けられた第２ブロックセットを認識し、前記認識した第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、前記要求された第１ブロックのデータを前記ホストコンピュータに送信する、
ストレージシステム。
【請求項４】
請求項３に記載のストレージシステムであって、
前記制御部は、前記第１ブロックセットから前記データ変換処理を実行せずに１以上の第２ブロックで構成される未変換ブロックセットを生成するとともに、前記未変換ブロックセットを前記記憶領域に格納する未変換格納モードを有し、
前記制御部は、前記未変換ブロックセットの格納の後に前記ホストコンピュータから特定の第１ブロックに関するデータ更新要求を受けたときには、変換更新処理を実行し、
前記変換更新処理において、前記制御部は、
（ｉ）前記要求された第１ブロックを含む対象第１ブロックセットの更新後のデータについては、前記変換格納モードと前記未変換格納モードとの一方に従って前記記憶領域に格納し、
（ｉｉ）前記対象第１ブロックセットの更新前のデータについては、前記対象第１ブロックセットに対応付けられた未変換ブロックセットを読み出し、前記データ変換処理を実行して更新前第２ブロックセットを生成するとともに、前記更新前第２ブロックセットを前記記憶領域へ格納し、さらに、前記ブロック対応関係に、前記対象第１ブロックセットと、前記更新前第２ブロックセットと、所定の規則に従って定められるバージョンと、の３者の対応関係を追加する、
ストレージシステム。
【請求項５】
請求項４に記載のストレージシステムであって、
前記制御部は、前記変換更新処理において、前記対象第１ブロックセットの更新後のデータから前記データ変換処理を実行せずに１以上の第２ブロックで構成される更新後未変換ブロックセットを生成するとともに、前記更新後未変換ブロックセットを前記記憶領域に格納し、
さらに、前記ホストコンピュータからバージョン指定無しのデータ読み出し要求を受けたときには、前記更新後未変換ブロックセットを読み出して、前記要求された第１ブロックのデータを前記ホストコンピュータに送信する、
ストレージシステム。
【請求項６】
請求項１に記載のストレージシステムであって、
前記記憶領域は、論理的な格納位置が同一の第１ブロックに対応付けられているとともにバージョンが異なる複数の異バージョン第２ブロックセットを格納することが可能であり、
前記ブロック対応関係は、前記第１ブロックセットの論理的な格納位置と前記第２ブロックセットの物理的な格納位置及びバージョンとの対応関係を含んでおり、
前記制御部は、前記ホストコンピュータから特定の第１ブロックに関するデータ更新要求を受けたときには、ログ更新処理を実行し、
前記ログ更新処理において、前記制御部は、前記要求された第１ブロックで構成される更新対象第１ブロックセットの更新後のデータに前記データ変換処理を実行して更新後第２ブロックセットを生成するとともに、前記更新後第２ブロックセットを前記記憶領域へ格納し、さらに、前記ブロック対応関係に、前記更新対象第１ブロックセットと、前記更新後第２ブロックセットと、所定の規則に従って定められるバージョンと、の３者の対応関係を追加し、
前記制御部は、前記ホストコンピュータから特定の第１ブロックと特定のバージョンとに関するデータ読み出し要求を受けたときには、バージョン読み出し処理を実行し、
前記バージョン読み出し処理において、前記制御部は、前記ブロック対応関係を参照して、前記要求された第１ブロックを含む第１ブロックセットと、前記要求されたバージョンと、の双方に対応付けられた第２ブロックセットを認識し、前記認識した第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、前記要求された第１ブロックのデータを前記ホストコンピュータに送信する、
ストレージシステム。
【請求項７】
請求項１ないし請求項５のいずれかに記載のストレージシステムであって、
前記第１ブロックセットのブロック数Ｎは可変値である、
ストレージシステム。
【請求項８】
請求項１ないし請求項７のいずれかに記載のストレージシステムであって、
前記第２ブロックのデータサイズは、前記第１ブロックのデータサイズよりも小さい、
ストレージシステム。
【請求項９】
ストレージシステムが有するデータを記憶する記憶領域をホストコンピュータに提供する方法であって、
（Ａ）前記ホストコンピュータと前記ストレージシステムとの間で、所定サイズの第１ブロックを最小単位として前記ホストコンピュータから指定された第１ブロックの論理的な格納位置に従ってデータの受信及び送信を実行する工程と、
（Ｂ）前記記憶領域に対して、所定サイズの第２ブロックを最小単位としてデータの格納と読み出しとを実行する工程と、
を備え、
前記工程（Ｂ）は、前記記憶領域にデータを格納する際には、Ｎ個（Ｎは１以上の整数）の第１ブロックで構成される第１ブロックセットを単位として、データ自体の大きさが変わるデータ変換処理を実行して１以上の第２ブロックで構成される第２ブロックセットを生成するとともに、前記第２ブロックセットを前記記憶領域へ格納する変換格納モードでデータの格納を実行する工程を含み、
前記提供方法は、さらに、
（Ｃ）複数の前記第１ブロックセットと複数の前記第２ブロックセットとの対応関係を示すブロック対応関係を生成する工程を備え、
前記工程（Ｂ）は、前記ホストコンピュータから特定の第１ブロックのデータ読み出し要求を受信したときに、前記ブロック対応関係を参照して、前記要求された第１ブロックを含む第１ブロックセットに対応付けられた読出第２ブロックセットを認識し、前記読出第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、前記要求された第１ブロックのデータを前記ホストコンピュータに送信する工程を含む、
提供方法。
【請求項１０】
請求項９に記載の提供方法であって、
前記工程（Ｂ）は、さらに、前記ホストコンピュータから特定の第１ブロックに関するデータ更新格納要求を受けたときに、前記要求された第１ブロックを含む更新対象第１ブロックセットの更新処理を実行する更新工程を含み、
前記更新工程は、前記ブロック対応関係を参照して、前記更新対象第１ブロックセットに含まれる全ての第１ブロックの更新が要求されているか否かを判定し、全ての第１ブロックの更新が要求されていない場合には、
前記更新対象第１ブロックセットに対応付けられた第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、得られたデータに前記要求された第１ブロックのデータを上書きしてから前記変換処理を実行して更新対象第２ブロックセットを生成するとともに、前記更新対象第２ブロックセットを前記記憶領域に格納し、さらに、
前記ブロック対応関係に、前記更新対象第１ブロックセットと前記更新対象第２ブロックセットとの対応関係を書き込む工程を含む、
提供方法。
【請求項１１】
請求項９に記載の提供方法であって、
前記記憶領域は、論理的な格納位置が同一の第１ブロックセットに対応付けられているとともに、バージョンが異なる複数の異バージョン第２ブロックセットを格納することが可能であり、
前記ブロック対応関係は、前記第１ブロックセットの論理的な格納位置と、前記複数の異バージョン第２ブロックセットの物理的な格納位置及びバージョンとの対応関係を含んでおり、
前記工程（Ｂ）は、前記ホストコンピュータから特定の第１ブロックと特定のバージョンとに関するデータ読み出し要求を受けたときには、バージョン読み出し処理を実行するバージョン読み出し工程を含み、
前記バージョン読み出し工程は、前記ブロック対応関係を参照して、前記要求された第１ブロックを含む第１ブロックセットと、前記要求されたバージョンと、の双方に対応付けられた第２ブロックセットを認識し、前記認識した第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、前記要求された第１ブロックのデータを前記ホストコンピュータに送信する工程を含む、
提供方法。
【請求項１２】
請求項１１に記載の提供方法であって、
前記工程（Ｂ）は、前記第１ブロックセットから前記データ変換処理を実行せずに１以上の第２ブロックで構成される未変換ブロックセットを生成するとともに、前記未変換ブロックセットを前記記憶領域に格納する未変換格納モードでデータの格納を実行する工程を含み、
前記工程（Ｂ）は、前記未変換ブロックセットの格納の後に前記ホストコンピュータから特定の第１ブロックに関するデータ更新要求を受けたときには、変換更新処理を実行する変換更新工程を含み、
前記変換更新工程は、
（ｉ）前記要求された第１ブロックを含む対象第１ブロックセットの更新後のデータについては、前記変換格納モードと前記未変換格納モードとの一方に従って前記記憶領域に格納し、
（ｉｉ）前記対象第１ブロックセットの更新前のデータについては、前記対象第１ブロックセットに対応付けられた未変換ブロックセットを読み出し、前記データ変換処理を実行して更新前第２ブロックセットを生成するとともに、前記更新前第２ブロックセットを前記記憶領域へ格納し、さらに、前記ブロック対応関係に、前記対象第１ブロックセットと、前記更新前第２ブロックセットと、所定の規則に従って定められるバージョンと、の３者の対応関係を追加する工程を含む、
提供方法。
【請求項１３】
請求項１２に記載の提供方法であって、
前記変換更新工程は、前記対象第１ブロックセットの更新後のデータから前記データ変換処理を実行せずに１以上の第２ブロックで構成される更新後未変換ブロックセットを生成するとともに、前記更新後未変換ブロックセットを前記記憶領域に格納する工程を含み、
前記工程（Ｂ）は、前記ホストコンピュータからバージョン指定無しのデータ読み出し要求を受けたときには、前記更新後未変換ブロックセットを読み出して、前記要求された第１ブロックのデータを前記ホストコンピュータに送信する工程を含む、
提供方法。
【請求項１４】
請求項９に記載の提供方法であって、
前記記憶領域は、論理的な格納位置が同一の第１ブロックに対応付けられているとともにバージョンが異なる複数の異バージョン第２ブロックセットを格納することが可能であり、
前記ブロック対応関係は、前記第１ブロックセットの論理的な格納位置と前記第２ブロックセットの物理的な格納位置及びバージョンとの対応関係を含んでおり、
前記工程（Ｂ）は、前記ホストコンピュータから特定の第１ブロックに関するデータ更新要求を受けたときには、ログ更新処理を実行するログ更新工程を含み、
前記ログ更新工程は、前記要求された第１ブロックで構成される更新対象第１ブロックセットの更新後のデータに前記データ変換処理を実行して更新後第２ブロックセットを生成するとともに、前記更新後第２ブロックセットを前記記憶領域へ格納し、さらに、前記ブロック対応関係に、前記更新対象第１ブロックセットと、前記更新後第２ブロックセットと、所定の規則に従って定められるバージョンと、の３者の対応関係を追加する工程を含み、
前記工程（Ｂ）は、前記ホストコンピュータから特定の第１ブロックと特定のバージョンとに関するデータ読み出し要求を受けたときには、バージョン読み出し処理を実行するバージョン読み出し工程を含み、
前記バージョン読み出し工程は、前記ブロック対応関係を参照して、前記要求された第１ブロックを含む第１ブロックセットと、前記要求されたバージョンと、の双方に対応付けられた第２ブロックセットを認識し、前記認識した第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、前記要求された第１ブロックのデータを前記ホストコンピュータに送信する工程を含む、
提供方法。
【請求項１５】
請求項９ないし請求項１３のいずれかに記載の提供方法であって、
前記第１ブロックセットのブロック数Ｎは可変値である、
提供方法。
【請求項１６】
請求項９ないし請求項１５のいずれかに記載の提供方法であって、
前記第２ブロックのデータサイズは、前記第１ブロックのデータサイズよりも小さい、
提供方法。
【請求項１７】
ストレージシステムが有するデータを記憶する記憶領域をホストコンピュータに提供する処理を実行するためのコンピュータプログラムであって、
（Ａ）前記ホストコンピュータと前記ストレージシステムとの間で、所定サイズの第１ブロックを最小単位として前記ホストコンピュータから指定された第１ブロックの論理的な格納位置に従ってデータの受信及び送信を実行する機能と、
（Ｂ）前記記憶領域に対して、所定サイズの第２ブロックを最小単位としてデータの格納と読み出しとを実行する機能と、
をコンピュータに実現させるコンピュータプログラムを含み、
前記機能（Ｂ）は、前記記憶領域にデータを格納する際には、Ｎ個（Ｎは１以上の整数）の第１ブロックで構成される第１ブロックセットを単位として、データ自体の大きさが変わるデータ変換処理を実行して１以上の第２ブロックで構成される第２ブロックセットを生成するとともに、前記第２ブロックセットを前記記憶領域へ格納する変換格納モードでデータの格納を実行する機能を含み、
前記プログラムは、さらに、
（Ｃ）複数の前記第１ブロックセットと複数の前記第２ブロックセットとの対応関係を示すブロック対応関係を生成する機能を備え、
前記機能（Ｂ）は、前記ホストコンピュータから特定の第１ブロックのデータ読み出し要求を受信したときに、前記ブロック対応関係を参照して、前記要求された第１ブロックを含む第１ブロックセットに対応付けられた読出第２ブロックセットを認識し、前記読出第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、前記要求された第１ブロックのデータを前記ホストコンピュータに送信する機能を含む、
コンピュータプログラム。
【請求項１８】
請求項１７に記載のコンピュータプログラムであって、
前記機能（Ｂ）は、さらに、前記ホストコンピュータから特定の第１ブロックに関するデータ更新格納要求を受けたときに、前記要求された第１ブロックを含む更新対象第１ブロックセットの更新処理を実行する更新機能を含み、
前記更新機能は、前記ブロック対応関係を参照して、前記更新対象第１ブロックセットに含まれる全ての第１ブロックの更新が要求されているか否かを判定し、全ての第１ブロックの更新が要求されていない場合には、
前記更新対象第１ブロックセットに対応付けられた第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、得られたデータに前記要求された第１ブロックのデータを上書きしてから前記変換処理を実行して更新対象第２ブロックセットを生成するとともに、前記更新対象第２ブロックセットを前記記憶領域に格納し、さらに、
前記ブロック対応関係に、前記更新対象第１ブロックセットと前記更新対象第２ブロックセットとの対応関係を書き込む機能を含む、
コンピュータプログラム。
【請求項１９】
請求項１７に記載のコンピュータプログラムであって、
前記記憶領域は、論理的な格納位置が同一の第１ブロックセットに対応付けられているとともに、バージョンが異なる複数の異バージョン第２ブロックセットを格納することが可能であり、
前記ブロック対応関係は、前記第１ブロックセットの論理的な格納位置と、前記複数の異バージョン第２ブロックセットの物理的な格納位置及びバージョンとの対応関係を含んでおり、
前記機能（Ｂ）は、前記ホストコンピュータから特定の第１ブロックと特定のバージョンとに関するデータ読み出し要求を受けたときには、バージョン読み出し処理を実行するバージョン読み出し機能を含み、
前記バージョン読み出し機能は、前記ブロック対応関係を参照して、前記要求された第１ブロックを含む第１ブロックセットと、前記要求されたバージョンと、の双方に対応付けられた第２ブロックセットを認識し、前記認識した第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、前記要求された第１ブロックのデータを前記ホストコンピュータに送信する機能を含む、
コンピュータプログラム。
【請求項２０】
請求項１９に記載のコンピュータプログラムであって、
前記機能（Ｂ）は、前記第１ブロックセットから前記データ変換処理を実行せずに１以上の第２ブロックで構成される未変換ブロックセットを生成するとともに、前記未変換ブロックセットを前記記憶領域に格納する未変換格納モードでデータの格納を実行する機能を含み、
前記機能（Ｂ）は、前記未変換ブロックセットの格納の後に前記ホストコンピュータから特定の第１ブロックに関するデータ更新要求を受けたときには、変換更新処理を実行する変換更新機能を含み、
前記変換更新機能は、
（ｉ）前記要求された第１ブロックを含む対象第１ブロックセットの更新後のデータについては、前記変換格納モードと前記未変換格納モードとの一方に従って前記記憶領域に格納し、
（ｉｉ）前記対象第１ブロックセットの更新前のデータについては、前記対象第１ブロックセットに対応付けられた未変換ブロックセットを読み出し、前記データ変換処理を実行して更新前第２ブロックセットを生成するとともに、前記更新前第２ブロックセットを前記記憶領域へ格納し、さらに、前記ブロック対応関係に、前記対象第１ブロックセットと、前記更新前第２ブロックセットと、所定の規則に従って定められるバージョンと、の３者の対応関係を追加する機能を含む、
コンピュータプログラム。
【請求項２１】
請求項２０に記載のコンピュータプログラムであって、
前記変換更新機能は、前記対象第１ブロックセットの更新後のデータから前記データ変換処理を実行せずに１以上の第２ブロックで構成される更新後未変換ブロックセットを生成するとともに、前記更新後未変換ブロックセットを前記記憶領域に格納する機能を含み、
前記機能（Ｂ）は、前記ホストコンピュータからバージョン指定無しのデータ読み出し要求を受けたときには、前記更新後未変換ブロックセットを読み出して、前記要求された第１ブロックのデータを前記ホストコンピュータに送信する機能を含む、
コンピュータプログラム。
【請求項２２】
請求項１７に記載のコンピュータプログラムであって、
前記記憶領域は、論理的な格納位置が同一の第１ブロックに対応付けられているとともにバージョンが異なる複数の異バージョン第２ブロックセットを格納することが可能であり、
前記ブロック対応関係は、前記第１ブロックセットの論理的な格納位置と前記第２ブロックセットの物理的な格納位置及びバージョンとの対応関係を含んでおり、
前記機能（Ｂ）は、前記ホストコンピュータから特定の第１ブロックに関するデータ更新要求を受けたときには、ログ更新処理を実行するログ更新機能を含み、
前記ログ更新機能は、前記要求された第１ブロックで構成される更新対象第１ブロックセットの更新後のデータに前記データ変換処理を実行して更新後第２ブロックセットを生成するとともに、前記更新後第２ブロックセットを前記記憶領域へ格納し、さらに、前記ブロック対応関係に、前記更新対象第１ブロックセットと、前記更新後第２ブロックセットと、所定の規則に従って定められるバージョンと、の３者の対応関係を追加する機能を含み、
前記機能（Ｂ）は、前記ホストコンピュータから特定の第１ブロックと特定のバージョンとに関するデータ読み出し要求を受けたときには、バージョン読み出し処理を実行するバージョン読み出し機能を含み、
前記バージョン読み出し機能は、前記ブロック対応関係を参照して、前記要求された第１ブロックを含む第１ブロックセットと、前記要求されたバージョンと、の双方に対応付けられた第２ブロックセットを認識し、前記認識した第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、前記要求された第１ブロックのデータを前記ホストコンピュータに送信する機能を含む、
コンピュータプログラム。
【請求項２３】
請求項１７ないし請求項２１のいずれかに記載のコンピュータプログラムであって、
前記第１ブロックセットのブロック数Ｎは可変値である、
コンピュータプログラム。
【請求項２４】
請求項１７ないし請求項２３のいずれかに記載のコンピュータプログラムであって、
前記第２ブロックのデータサイズは、前記第１ブロックのデータサイズよりも小さい、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの記憶領域をホストコンピュータに提供するストレージシステムに関するものである。
【背景技術】
【０００２】
近年、データの記憶領域をホストコンピュータに提供するストレージシステムが普及しつつある。このようなストレージシステムを利用する際には、ホストコンピュータは、単にアプリケーションのデータをストレージシステムに記憶させるだけではなく、ホストコンピュータでデータの圧縮を行って、圧縮後のデータをストレージシステムに記憶させ、圧縮データを管理したり、バックアップデータをストレージシステムに記憶させ、記憶されたバックアップデータを管理する等の種々のデータ処理を実行している（例えば、特許文献１〜３参照）。
【０００３】
【特許文献１】米国特許第５６４９１５２号明細書
【特許文献２】米国特許第５５５５３８９号明細書
【特許文献３】特開平７−７２９８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところが、このような処理を実行するために、ホストコンピュータの負荷が高くなる場合があった。特に、データファイルを圧縮して記憶させる場合には、データの圧縮処理そのものや、圧縮後のデータの位置管理のために、ホストコンピュータの負担増大が顕著であった。
【０００５】
なお、このような問題は、データ圧縮処理を実行する場合に限らず、データ暗号化処理を実行する場合等、データ自体の大きさが変わるデータ処理を実行する場合に共通する問題であった。
【０００６】
本発明は、上記の課題を解決するためになされたものであり、データ自体の大きさが変わるデータ処理後のデータを格納するストレージシステムを利用するホストコンピュータの負荷を軽減することが可能な技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述の課題の少なくとも一部を解決するため、本発明のストレージシステムは、データを記憶する記憶領域をホストコンピュータに提供するストレージシステムであって、データを記憶する記憶領域を有するデータ記憶部と、前記ホストコンピュータと前記記憶領域との間のデータ転送を制御する制御部と、を備え、前記制御部は、前記ホストコンピュータとの間では、所定サイズの第１ブロックを最小単位として前記ホストコンピュータから指定された第１ブロックの論理的な格納位置に従ってデータの受信及び送信を実行し、前記記憶領域との間では、所定サイズの第２ブロックを最小単位としてデータの格納と読み出しとを実行するとともに、前記記憶領域にデータを格納する際には、Ｎ個（Ｎは１以上の整数）の第１ブロックで構成される第１ブロックセットを単位として、データ自体の大きさが変わるデータ変換処理を実行して１以上の第２ブロックで構成される第２ブロックセットを生成するとともに、前記第２ブロックセットを前記記憶領域へ格納する変換格納モードを有し、前記ストレージシステムは、さらに、複数の前記第１ブロックセットと複数の前記第２ブロックセットとの対応関係を示すブロック対応関係を記憶する対応関係記憶部を備え、前記制御部は、前記ホストコンピュータから特定の第１ブロックのデータ読み出し要求を受信したときに、前記ブロック対応関係を参照して、前記要求された第１ブロックを含む第１ブロックセットに対応付けられた読出第２ブロックセットを認識し、前記読出第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、前記要求された第１ブロックのデータを前記ホストコンピュータに送信する。
【０００８】
このストレージシステムによれば、対応関係記憶部が、データ変換処理の前後のブロックセットの対応関係を示すブロック対応関係を記憶し、制御部は、ホストコンピュータからの読み出し要求に応じて、ブロック対応関係を参照して記憶領域から変換処理後のデータを読み出し、読み出したデータに逆変換処理を実行し、得られたデータを用いてホストコンピュータに要求されたデータを送信するので、データ自体の大きさが変わるデータ処理後のデータを格納するストレージシステムを利用するホストコンピュータの負荷を軽減することが可能となる。
【０００９】
上記ストレージシステムにおいて、前記制御部は、さらに、前記ホストコンピュータから特定の第１ブロックに関するデータ更新格納要求を受けたときに、前記要求された第１ブロックを含む更新対象第１ブロックセットの更新処理を実行し、
前記更新処理において、前記制御部は、前記ブロック対応関係を参照して、前記更新対象第１ブロックセットに含まれる全ての第１ブロックの更新が要求されているか否かを判定し、全ての第１ブロックの更新が要求されていない場合には、前記更新対象第１ブロックセットに対応付けられた第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、得られたデータに前記要求された第１ブロックのデータを上書きしてから前記変換処理を実行して更新対象第２ブロックセットを生成するとともに、前記更新対象第２ブロックセットを前記記憶領域に格納し、さらに、前記ブロック対応関係に、前記更新対象第１ブロックセットと前記更新対象第２ブロックセットとの対応関係を書き込むこととしてもよい。
【００１０】
この構成によれば、制御部は、第１ブロックセットの全ての第１ブロックの更新が要求されていない場合であっても、要求されていない第１ブロックのデータを読み出すことによって、第１ブロックセットを単位とする変換処理を実行するので、変換後のデータの管理が過剰に複雑化することを防止できる。
【００１１】
上記ストレージシステムにおいて、前記記憶領域は、論理的な格納位置が同一の第１ブロックセットに対応付けられているとともに、バージョンが異なる複数の異バージョン第２ブロックセットを格納することが可能であり、前記ブロック対応関係は、前記第１ブロックセットの論理的な格納位置と、前記複数の異バージョン第２ブロックセットの物理的な格納位置及びバージョンとの対応関係を含んでおり、前記制御部は、前記ホストコンピュータから特定の第１ブロックと特定のバージョンとに関するデータ読み出し要求を受けたときには、バージョン読み出し処理を実行し、前記バージョン読み出し処理において、前記制御部は、前記ブロック対応関係を参照して、前記要求された第１ブロックを含む第１ブロックセットと、前記要求されたバージョンと、の双方に対応付けられた第２ブロックセットを認識し、前記認識した第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、前記要求された第１ブロックのデータを前記ホストコンピュータに送信することとしてもよい。
【００１２】
この構成によれば、制御部は、ホストコンピュータからの特定のバージョンのデータ読み出し要求に応じて、要求されたバージョンの第２ブロックセットを読み出して逆変換処理を実行し、要求されたデータを送信するので、バージョンを特定したデータの読み出しを行うホストコンピュータの負荷を軽減することが可能となる。
【００１３】
上記ストレージシステムにおいて、前記制御部は、前記第１ブロックセットから前記データ変換処理を実行せずに１以上の第２ブロックで構成される未変換ブロックセットを生成するとともに、前記未変換ブロックセットを前記記憶領域に格納する未変換格納モードを有し、前記制御部は、前記未変換ブロックセットの格納の後に前記ホストコンピュータから特定の第１ブロックに関するデータ更新要求を受けたときには、変換更新処理を実行し、前記変換更新処理において、前記制御部は、（ｉ）前記要求された第１ブロックを含む対象第１ブロックセットの更新後のデータについては、前記変換格納モードと前記未変換格納モードとの一方に従って前記記憶領域に格納し、（ｉｉ）前記対象第１ブロックセットの更新前のデータについては、前記対象第１ブロックセットに対応付けられた未変換ブロックセットを読み出し、前記データ変換処理を実行して更新前第２ブロックセットを生成するとともに、前記更新前第２ブロックセットを前記記憶領域へ格納し、さらに、前記ブロック対応関係に、前記対象第１ブロックセットと、前記更新前第２ブロックセットと、所定の規則に従って定められるバージョンと、の３者の対応関係を追加することとしてもよい。
【００１４】
この構成によれば、制御部は、データ更新時に、更新前のデータに変換処理を実行して記憶領域に格納し、ブロック対応関係に、更新前データの第２ブロックセットと、そのバージョンと、の対応関係を追加するので、更新前のデータを読み出すホストコンピュータの負荷を軽減することが可能となる。
【００１５】
上記ストレージシステムにおいて、前記制御部は、前記変換更新処理において、前記対象第１ブロックセットの更新後のデータから前記データ変換処理を実行せずに１以上の第２ブロックで構成される更新後未変換ブロックセットを生成するとともに、前記更新後未変換ブロックセットを前記記憶領域に格納し、さらに、前記ホストコンピュータからバージョン指定無しのデータ読み出し要求を受けたときには、前記更新後未変換ブロックセットを読み出して、前記要求された第１ブロックのデータを前記ホストコンピュータに送信することとしてもよい。
【００１６】
この構成によれば、制御部は、更新後のデータを変換処理を実行せずに記憶領域に格納し、バージョンを特定しない読み出し要求に対しては、更新後のデータを読み出して送信するので、最新データの読み出しの処理速度が低下することを抑制できる。
【００１７】
上記ストレージシステムにおいて、前記記憶領域は、論理的な格納位置が同一の第１ブロックに対応付けられているとともにバージョンが異なる複数の異バージョン第２ブロックセットを格納することが可能であり、前記ブロック対応関係は、前記第１ブロックセットの論理的な格納位置と前記第２ブロックセットの物理的な格納位置及びバージョンとの対応関係を含んでおり、前記制御部は、前記ホストコンピュータから特定の第１ブロックに関するデータ更新要求を受けたときには、ログ更新処理を実行し、前記ログ更新処理において、前記制御部は、前記要求された第１ブロックで構成される更新対象第１ブロックセットの更新後のデータに前記データ変換処理を実行して更新後第２ブロックセットを生成するとともに、前記更新後第２ブロックセットを前記記憶領域へ格納し、さらに、前記ブロック対応関係に、前記更新対象第１ブロックセットと、前記更新後第２ブロックセットと、所定の規則に従って定められるバージョンと、の３者の対応関係を追加し、
前記制御部は、前記ホストコンピュータから特定の第１ブロックと特定のバージョンとに関するデータ読み出し要求を受けたときには、バージョン読み出し処理を実行し、前記バージョン読み出し処理において、前記制御部は、前記ブロック対応関係を参照して、前記要求された第１ブロックを含む第１ブロックセットと、前記要求されたバージョンと、の双方に対応付けられた第２ブロックセットを認識し、前記認識した第２ブロックセットを読み出して前記データ変換処理の逆変換処理を実行し、前記要求された第１ブロックのデータを前記ホストコンピュータに送信することとしてもよい。
【００１８】
この構成によれば、制御部は、ホストコンピュータからの特定のバージョンのデータ読み出し要求に応じて、要求されたバージョンの第２ブロックセットを読み出して逆変換処理を実行し、要求されたデータを送信するので、バージョンを特定したデータの読み出しを行うホストコンピュータの負荷を軽減することが可能となる。
【００１９】
上記各ストレージシステムにおいて、前記第１ブロックセットのブロック数Ｎは可変値であってもよい。
【００２０】
この構成によれば、より柔軟なデータの管理を行うことができる。
【００２１】
上記各ストレージシステムにおいて、前記第２ブロックのデータサイズが、前記第１ブロックのデータサイズよりも小さいこととしてもよい。
【００２２】
この構成によれば、データ変換処理によってデータの大きさが変化した場合に、データの格納に用いられる記憶領域が過剰に大きくなることを抑制することが可能となる。
【００２３】
なお、本発明は、種々の形態で実現することが可能であり、例えば、記憶領域の提供方法および装置、それらの方法または装置の機能を実現するためのコンピュータプログラム、そのコンピュータプログラムを記録した記録媒体、そのコンピュータプログラムを含み搬送波内に具現化されたデータ信号、等の形態で実現することができる。
【発明を実施するための最良の形態】
【００２４】
次に、本発明の実施の形態を実施例に基づいて以下の順序で説明する。
Ａ．第１実施例：
Ｂ．第２実施例：
Ｃ．第３実施例：
Ｄ．変形例：
【００２５】
Ａ．第１実施例：
Ａ１．装置の構成：
図１は、本発明の一実施例としてのストレージシステムの構成を示す説明図である。このストレージシステム２００は、ホストインターフェイス２１０と、管理インターフェイス２２０と、ディスクインターフェイス２３０と、各インターフェイス２１０、２２０、２３０に接続されたディスクアレイ制御部３００と、ディスクインターフェイス２３０に接続されたディスクアレイ２５０と、を有している。ディスクアレイ２５０は、複数のディスク装置を有している。
【００２６】
ホストインターフェイス２１０には、ホスト計算機１１０が接続される。このホスト計算機１１０は、ストレージシステム２００によって提供されるデータ記憶領域を利用しつつ、所定の機能を実現する。ホスト計算機１１０の機能としては、例えば、データファイルをクライアント装置（図示せず）に提供するファイルサーバとしての機能や、種々のデータを管理するデータベースサーバとしての機能がある。
【００２７】
管理インターフェイス２２０には、管理端末１２０が接続される。ストレージシステム２００の管理者（オペレータ）は、この管理端末１２０を操作することによって、ストレージシステム２００の動作の設定を行うことができる。
【００２８】
ディスクアレイ制御部３００は、ＣＰＵ３１０と、データ圧縮回路３２０と、データ伸長回路３３０と、メモリ部３４０と、を有している。これらの各構成要素はバス３９０を介して互いに接続されている。また、メモリ部３４０は、キャッシュメモリ３４２と、ローカルメモリ３４４と、を有している。キャッシュメモリ３４２は、ディスクアレイ２５０とホスト計算機１１０との間で転送されるデータを一時的に記憶する。また、ローカルメモリ３４４は、ＣＰＵ３１０が種々のデータ処理（詳細は後述）を実行する際に用いるデータとプログラムとを記憶する。
【００２９】
図２は、ローカルメモリ３４４の内部構成を示す概略図である。ローカルメモリ３４４は、圧縮ＬＢＡ管理テーブル５００と、論理ボリューム管理テーブル５１０と、ボリューム状態管理テーブル５２０と、データ中継モジュール６００と、を有している。データ中継モジュール６００は、ホスト計算機１１０とディスクアレイ２５０との間のデータ転送を中継する機能を有している（詳細は後述）。データ中継モジュール６００の機能は、ＣＰＵ３１０（図１）が実行するコンピュータプログラムによって実現されている。
【００３０】
また、データ中継モジュール６００は、ディスクアレイ２５０を用いたＲＡＩＤ（Redundant Array of Inexpensive Disks）システムを構成する。図２の例では、データ中継モジュール６００は、ＲＡＩＤシステムを構成することによって、５つの論理ボリュームＬＤＥＶ０〜ＬＤＥＶ４を形成している。
【００３１】
ここで、論理ボリュームとは、複数の論理ブロックを含むデータの記憶領域である。論理ブロックとは、論理ボリュームを対象とするデータ転送の最小単位である。第１実施例では、各論理ボリュームＬＤＥＶ０〜ＬＤＥＶ４の論理ブロックのデータサイズは同一である。１つの論理ボリューム内の論理ブロックは、各論理ブロック毎に固有な論理ブロックアドレス（以下「ＬＢＡ」とも呼ぶ）によって識別される。第１実施例では、ＬＢＡとして、「０」から始まる通し番号が用いられる。データ中継モジュール６００は、ＬＢＡを用いてアクセス対象の論理ブロックを特定する。以下、論理ボリュームのことを、「論理デバイス」、あるいは、単に「ボリューム」とも呼ぶ。また、論理ブロックのことを、単に「ブロック」とも呼ぶ。また、データ中継モジュール６００は、各論理ボリュームを識別するために、各論理ボリューム（論理デバイス）に固有な番号（以下「ＬＤＥＶＮ」とも呼ぶ）を割り当てる。図２の例では、５つの論理ボリュームに０〜４までの番号を割り当てている。
【００３２】
さらに、データ中継モジュール６００は、論理ボリュームを選択的にホスト計算機１１０に利用させる。図２の例では、データ中継モジュール６００は、２つの論理ボリュームＬＤＥＶ０、ＬＤＥＶ４をホスト計算機１１０に提供している。このように、ホスト計算機１１０が利用可能な論理ボリュームのことを「論理ユニット」と呼ぶ。データ中継モジュール６００は、論理ユニットに、各論理ユニット毎に固有な論理ユニット番号（以下「ＬＵＮ」とも呼ぶ）を割り当てる。図２の例では、第０論理ボリュームＬＤＥＶ０に「０番」を割り当て、第４論理ボリュームＬＤＥＶ４に「１番」を割り当てている。このようなＬＵＮとＬＤＥＶＮとの対応関係は、論理ボリューム管理テーブル５１０に格納されている。
【００３３】
第１実施例では、ホスト計算機１１０とデータ中継モジュール６００との間のデータ転送の最小単位は論理ブロックであり、データ中継モジュール６００と論理ボリュームとの間のデータ転送の最小単位（論理ブロック）と同じである。ホスト計算機１１０は、ＬＵＮとＬＢＡとを指定することによって、論理ユニットに対するデータ転送の要求を行う。データ中継モジュール６００は、ホスト計算機１１０からの要求に応じて、論理ボリュームを対象とするデータ転送を中継する。ただし、後述するように、第１実施例では、複数の論理ブロックに格納されるべきデータが、まとめて圧縮され、より少ない数の論理ブロックに格納される。従って、ホスト計算機１１０によって指定されたＬＢＡと、データ転送に用いられる実際の論理ブロックのＬＢＡとは、異なっている場合がある。このような指定されたＬＢＡと実際のＬＢＡとの対応関係は、圧縮ＬＢＡ管理テーブル５００に格納されている（詳細は後述）。以下、ホスト計算機１１０によって指定されたＬＢＡを「指定ＬＢＡ」とも呼ぶ。
【００３４】
Ａ２．圧縮処理：
図３は、管理端末１２０に表示される設定画面の一例を示す説明図である。この設定画面は、論理ボリュームの圧縮マイグレーションを行うための設定画面である。圧縮マイグレーションとは、論理ボリュームに格納されたデータを圧縮して格納し直す処理を意味している。第１実施例では、１つの論理ボリューム全体のデータを、圧縮させつつ他の論理ボリュームに移行させることとしている。オペレータは、図３に示す設定画面を操作することによって、処理対象（移行元）の論理ボリュームと、処理内容と、処理のアルゴリズムと、を選択することができる。図３の例では、「第０論理ボリュームＬＤＥＶ０」が選択されている。また、移行時の処理として「圧縮」が選択され、圧縮処理のアルゴリズムとして「ＬＨＡ」が選択されている。移行時の処理としては、圧縮以外にも「暗号化」を選択することが可能である（後述）。圧縮処理のアルゴリズムとしては、ＬＨＡ以外にもＺＩＰを選択することが可能である。オペレータが、「ＯＫボタン」を操作すると、ディスクアレイ制御部３００（図１）は、圧縮マイグレーション処理を開始する。なお、移行先の論理ボリュームについては、データ中継モジュール６００が、空いている論理ボリュームの中から自動的に選択する。図３の例では、第１論理ボリュームＬＤＥＶ１が選択されている。ただし、オペレータが選択できることとしてもよい。
【００３５】
図４は、圧縮マイグレーション処理の概要を示す説明図である。図４には、第０論理ボリュームＬＤＥＶ０と第１論理ボリュームＬＤＥＶ１とが示されている。各論理ボリュームＬＤＥＶ０、ＬＤＥＶ１は、同数の論理ブロックＬＢを有している。
【００３６】
第０論理ボリュームＬＤＥＶ０は、非圧縮領域Ａ１と、圧縮領域Ａ２と、に区分されている。この区分は予め設定されたものである。また、各論理ブロックと各領域との対応関係は、ローカルメモリ３４４に予め格納されている。例えば、論理ボリュームにファイルシステムを構築すると、論理ボリュームが、データファイルを格納するデータ領域と、データファイルを管理する情報（例えば、ファイル名とＬＢＡとの対応関係）を格納する管理領域と、に区分される場合がある。このような場合には、管理領域が非圧縮領域Ａ１に設定され、データ領域が圧縮領域Ａ２に設定される。一般には、非圧縮領域Ａ１として、アクセス頻度が比較的高いデータを格納する部分領域を採用し、圧縮領域Ａ２として、アクセス頻度が比較的低いデータを格納する部分領域を採用することが好ましい。また、論理ボリュームの全領域を圧縮領域として採用してもよい。なお、オペレータが、このような区分を設定することとしてもよい。
【００３７】
図５は、圧縮マイグレーション処理の手順を示すフローチャートである。データ中継モジュール６００（図２）は、前（ＬＢＡの小さい方）から順番に圧縮単位でデータを移行させる。第１実施例では、圧縮単位は、ＬＢＡが連続する１０個の論理ブロックで構成されるブロックセットである。論理ボリュームＬＤＥＶ０は、複数のブロックセットに区分されることとなる。
【００３８】
まず、非圧縮領域Ａ１内のデータを移行する場合の手順について説明する。ステップＳ１００では、データ中継モジュール６００が、移行元論理ボリュームＬＤＥＶ０内の１つのブロックセットからデータを読み出す。図４上側の例では、データ中継モジュール６００が、非圧縮領域Ａ１内の第１ブロックセットＢＳ１からデータＤＢＳ１を読み出している。
【００３９】
次のステップＳ１０５では、データ中継モジュール６００は、読み出し元のブロックセットが圧縮領域Ａ２内であるか否かを判断する。図４上側の例では、第１ブロックセットＢＳ１は非圧縮領域Ａ１内である。従って、データ中継モジュール６００は、ステップＳ１４０に移行する。ステップＳ１４０では、データ中継モジュール６００は、読み出したデータをそのまま移行先論理ボリュームＬＤＥＶ１に格納する。ここで、「そのまま格納する」とは、データの中身を変えずに格納するという意味である。この際、移行先の論理ブロックを、前（ＬＢＡの小さい方）から順番に選択する。図４の例では、データＤＢＳ１が第１ブロックセットＢＳ１１に格納されている。各ブロックセットＢＳ１、ＢＳ１１は、同数の論理ブロックを含んでいる。
【００４０】
次のステップＳ１２０では、データ中継モジュール６００は、圧縮ＬＢＡ管理テーブル５００を更新する。図６（Ａ）は、圧縮ＬＢＡ管理テーブル５００の一例を示す説明図である。圧縮ＬＢＡ管理テーブル５００は、圧縮前後、すなわち、移行前後のブロックセットのペアと、移行時に圧縮したか否かに関する情報と、の対応関係を格納している。図６（Ａ）の例では、ブロックセットは、先頭ＬＢＡとサイズ（ブロック数）との組み合わせによって特定される。データ中継モジュール６００は、移行前の第１ブロックセットＢＳ１と移行後の第１ブロックセットＢＳ１１との対応関係を圧縮ＬＢＡ管理テーブル５００に格納する。図６（Ａ）の例では、第１ブロックセットＢＳ１については、先頭ＬＢＡが「００００」で、サイズが「１０」である。また、移行後の第１ブロックセットＢＳ１１についても、先頭ＬＢＡが「００００」で、サイズが「１０」である。
【００４１】
なお、圧縮ＬＢＡ管理テーブル５００に格納する情報としては、先頭ＬＢＡとサイズとの組み合わせに限らず、ブロックセットを特定可能な任意の情報を採用することが可能である。例えば、先頭ＬＢＡと終端ＬＢＡとの組み合わせを採用してもよい。
【００４２】
次のステップＳ１２５では、データ中継モジュール６００は、全データの移行が終了したか否かを判定する。終了していない場合には、ステップＳ１００に戻る。
【００４３】
次に、圧縮領域Ａ２内のデータを移行する場合の手順について説明する。図４の下側の例では、データ中継モジュール６００が、圧縮領域Ａ２内の第５ブロックセットＢＳ５からデータＤＢＳ５を読み出している（ステップＳ１００）。
【００４４】
ステップＳ１００が終了したら、データ中継モジュール６００は、ステップＳ１０５に移行する。第５ブロックセットＢＳ５は圧縮領域Ａ２内であるので、ステップＳ１１０に移行する。
【００４５】
ステップＳ１１０では、データ中継モジュール６００は、データ圧縮回路３２０（図１）に、読み出したデータを圧縮させる。この際、図３の設定画面で指定されたアルゴリズムが使用される。図４の例では、データ圧縮回路３２０は、データＤＢＳ５を圧縮することによって、データＤＢＳ１５ｃを生成している。この圧縮後のデータＤＢＳ１５ｃのサイズは、５ブロックである。
【００４６】
次のステップＳ１１５では、データ中継モジュール６００は、圧縮後のデータを移行先論理ボリュームＬＤＥＶ１に格納する。この際、移行先のブロックを、前（ＬＢＡの小さい方）から順番に選択する。図４の例では、データＤＢＳ１５ｃが第５ブロックセットＢＳ１５ｃに格納されている。この第５ブロックセットＢＳ１５ｃのサイズは、５ブロックである。
【００４７】
次のステップＳ１２０では、データ中継モジュール６００は、移行前後のブロックセットＢＳ５、ＢＳ１５ｃの対応関係を圧縮ＬＢＡ管理テーブル５００に格納する。図６（Ａ）の例では、移行前の第５ブロックセットＢＳ５については、先頭ＬＢＡが「７９９０」で、サイズが「１０」である。移行後の第５ブロックセットＢＳ１５ｃについては、先頭ＬＢＡが「５８０８」で、サイズが「５」である。
【００４８】
他のブロックセットについても、同様に移行処理が実行される。図４の例では、第２ブロックセットＢＳ２は、第２ブロックセットＢＳ１２に移行し、第３ブロックセットＢＳ３は、圧縮された後に、第３ブロックセットＢＳ１３ｃに移行し、第４ブロックセットは、圧縮された後に、第４ブロックセットＢＳ１４ｃに移行する。なお、図５の例では、ステップＳ１００からステップＳ１２５へ至る一連の処理が、１つのブロックセット毎に実行されていたが、複数のブロックセット毎に実行することとしてもよい。
【００４９】
こうして全データの移行か終了したら、次のステップＳ１３０で、データ中継モジュール６００は、ボリューム状態管理テーブル５２０を更新する。図６（Ｂ）は、ボリューム状態管理テーブル５２０の一例を示す説明図である。ボリューム状態管理テーブル５２０は、ＬＤＥＶＮと、圧縮の有無と、暗号化の有無と、アルゴリズムと、の対応関係を格納している。データ中継モジュール６００は、移行先論理ボリュームＬＤＥＶ１に関する情報として、「圧縮：有効」、「暗号化：無効」、「アルゴリズム：ＬＨＡ」を格納する。
【００５０】
次のステップＳ１３５では、データ中継モジュール６００は、論理ボリューム管理テーブル５１０を更新する。図６（Ｃ）は、論理ボリューム管理テーブル５１０の一例を示す説明図である。データ中継モジュール６００は、第０論理ユニットＬＵ０に対応するＬＤＥＶＮを「０」から「１」へ変更する。
【００５１】
以上の処理が終了したら、ディスクアレイ制御部３００は、圧縮マイグレーション処理を終了する。この結果、移行先論理ボリュームＬＤＥＶ１には、非圧縮領域Ａ１１と、圧縮領域Ａ１２と、空き領域Ａ１３と、が形成されることとなる。
【００５２】
Ａ３．読み出し処理：
図７は、ストレージシステム２００に対するデータ読み出し処理の手順を示すフローチャートである。上述したように、ホスト計算機１１０は、ストレージシステム２００に対して、ＬＵＮとＬＢＡとを指定して、データの読み出し要求を行う。以下、第１論理ボリュームＬＤＥＶ１（ＬＵＮ＝０）が指定されたものとして説明を行う。
【００５３】
図８は、読み出し処理の概要を示す説明図である。図８の上側には、非圧縮領域Ａ１１からデータを読み出す場合が示され、下側には、圧縮領域Ａ１２からデータを読み出す場合が示されている。
【００５４】
まず、非圧縮領域Ａ１１内のデータを読み出す場合の手順について説明する。ステップＳ２００（図７）では、データ中継モジュール６００が、指定された論理ブロックを含む移行前ブロックセットと、移行後ブロックセットと、の組み合わせを、圧縮ＬＢＡ管理テーブル５００（図６（Ａ））から検索する。図８の上側の例では、指定ＬＢＡが「０００５」から「０００９」までである。この場合には、第１ブロックセットＢＳ１と第１ブロックセットＢＳ１１との組み合わせを検出する。
【００５５】
次のステップＳ２０５では、データ中継モジュール６００は、検出したブロックセットが圧縮処理の対象であるか否かを判定する。この判定は、圧縮ＬＢＡ管理テーブル５００を参照することによって行われる。図８の上側の例では「Ｎｏ」と判定する。
【００５６】
次のステップＳ２４０では、データ中継モジュール６００は、第１論理ボリュームＬＤＥＶ１内の、ステップＳ２００で検出した移行後ブロックセットからデータを読み出す。図８の上側の例では、第１ブロックセットＢＳ１１からデータＤＢＳ１を読み出す。
【００５７】
次のステップＳ２３０では、データ中継モジュール６００は、読み出したデータの中から、指定ＬＢＡに対応付けられたデータを取得して、ホスト計算機１１０に転送する。図８の上側の例では、データＤＢＳ１に含まれる１０ブロック分のデータの中の、５番目から９番目までが、それぞれ、「ＬＢＡ＝０００５」から「ＬＢＡ＝０００９」までの各論理ブロックのデータとなる。
【００５８】
次のステップＳ２３５では、データ中継モジュール６００は、指定ＬＢＡの全てについてデータ転送が終了したか否かを判定する。終了していない場合には、ステップＳ２００に戻り、データ転送の終了していない指定ＬＢＡについて、ステップＳ２００からステップＳ２３０へ至る一連の処理を繰り返し実行する。これらの一連の処理は１つのブロックセット毎に実行される。ただし、複数のブロックセット毎に実行してもよい。
【００５９】
次に、圧縮領域Ａ１２（図８）内のデータを読み出す場合の手順について説明する。図８の下側には、指定ＬＢＡが「７９９０」から「７９９４」までである場合が示されている。この場合には、データ中継モジュール６００は、ステップＳ２００で、第５ブロックセットＢＳ５と第５ブロックセットＢＳ１５ｃとの組み合わせを検出する（図６（Ａ））。
【００６０】
ステップＳ２００が終了したら、データ中継モジュール６００は、次のステップＳ２０５に移行する。図８の下側の例では「Ｙｅｓ」と判定する。
【００６１】
次のステップＳ２１０では、データ中継モジュール６００は、ステップＳ２００で検出した移行後ブロックセットからデータを読み出す。図８の下側の例では、第５ブロックセットＢＳ５に対応付けられた第５ブロックセットＢＳ１５ｃからデータＤＢＳ１５ｃを読み出す。
【００６２】
なお、指定ＬＢＡを含む移行前の第５ブロックセットＢＳ５が、本発明における「第１ブロックセット」に相当する。また、移行後の第５ブロックセットＢＳ１５ｃが、本発明における「第２ブロックセット」に相当する。また、ＬＵＮと圧縮前の先頭ＬＢＡと圧縮前のサイズとの全体が、本発明における「第１ブロックセットの論理的な格納位置」を示す情報に相当する。また、ＬＤＥＶＮと圧縮後の先頭ＬＢＡと圧縮後のサイズとの全体が、本発明における「第２ブロックセットの物理的な格納位置」を示す情報に相当する。
【００６３】
次のステップＳ２２５では、データ中継モジュール６００は、データ伸長回路３３０（図１）に、読み出したデータを伸長させる。この伸長処理は、データ圧縮回路３２０が実行した圧縮処理の逆変換処理である。データ伸長回路３３０は、ボリューム状態管理テーブル５２０（図６（Ｂ））を参照することによって、適切なアルゴリズムの伸長処理を選択する。図８の下側の例では、データ伸長回路３３０は、データＤＢＳ１５ｃを伸長することによって、データＤＢＳ５を生成する。
【００６４】
次のステップＳ２３０では、データ中継モジュール６００は、生成されたデータの中から、指定ＬＢＡに対応付けられたデータを取得して、ホスト計算機１１０に転送する。図８の下側の例では、データＤＢＳ５に含まれる１０ブロック分のデータの中の、０番目から４番目までのデータが、それぞれ、「ＬＢＡ＝７９９０」から「ＬＢＡ＝７９９４」までの各ブロックのデータとなる。
【００６５】
こうして全指定ＬＢＡのデータ転送が終了したら、ディスクアレイ制御部３００は、データ読み出し処理を終了する。
【００６６】
以上説明した読み出し処理では、ストレージシステム２００は、圧縮ＬＢＡ管理テーブル５００を有し、さらに、データ中継モジュール６００は、この圧縮ＬＢＡ管理テーブル５００を参照することによってデータを読み出して伸長し、ホスト計算機１１０に要求された論理ブロックのデータを転送する。従って、ストレージシステム２００がデータを圧縮して格納する場合であっても、ホスト計算機１１０は、伸長処理や圧縮データの管理を行うことなく、圧縮前のＬＢＡを指定することによってデータの読み出しを行うことが可能となる。
【００６７】
Ａ４．書き込み処理：
図９は、ストレージシステム２００に対するデータ書き込み処理の手順を示すフローチャートである。読み出し処理と同様に、ホスト計算機１１０は、ストレージシステム２００に対して、ＬＵＮとＬＢＡとを指定して、データの書き込み要求を行う。以下、第１論理ボリュームＬＤＥＶ１（ＬＵＮ＝０）が指定されたものとして説明を行う。
【００６８】
図１０は、書き込み処理の概要を示す説明図である。図１０は、圧縮領域Ａ１２内にデータを書き込む場合の処理の概要を示している。まず、ステップＳ３００（図９）では、データ中継モジュール６００は、指定ＬＢＡが、１つの圧縮単位（ブロックセット）の全ての論理ブロックを含むか否かを判定する。この判定は、圧縮ＬＢＡ管理テーブル５００（図６（Ａ））を参照することによって行われる。図１０には、指定ＬＢＡが「７９９０」から「７９９５」までの場合が示されている。指定されたブロックは、第５ブロックセットＢＳ５の一部の（６つの）論理ブロックのみである。従って、この場合には、データ中継モジュール６００は「Ｎｏ」と判定する。
【００６９】
なお、指定ＬＢＡが複数の圧縮単位（ブロックセット）のブロックを含む場合がある。このような場合には、データ中継モジュール６００は、各ブロックセット毎に、ステップＳ３００に続く一連の処理（後述）を実行する。
【００７０】
次のステップＳ３０５では、データ中継モジュール６００が、圧縮ＬＢＡ管理テーブル５００（図６（Ａ））を参照することによって、指定された論理ブロックを含む移行前ブロックセットと、移行後ブロックセットと、の組み合わせを検索する。この処理は、図７のステップＳ２００の処理と同じである。図１０の例では、第５ブロックセットＢＳ５と第５ブロックセットＢＳ１５ｃとの組み合わせを検出する。
【００７１】
次のステップＳ３１０では、データ中継モジュール６００は、ステップＳ３０５で検出した移行後ブロックセットからデータを読み出す。図１０の例では、第５ブロックセットＢＳ１５ｃからデータＤＢＳ１５ｃを読み出す。
【００７２】
次のステップＳ３１５では、データ中継モジュール６００は、データ伸長回路３３０（図１）に、読み出したデータを伸長させる。この処理は、図７のステップＳ２２５と同じである。図１０の例では、データ伸長回路３３０は、データＤＢＳ１５ｃを伸長することによって、データＤＢＳ５を生成する。こうして生成されたデータは、更新対象のブロックセットの更新前のデータとして利用される。
【００７３】
次のステップＳ３２０では、データ中継モジュール６００は、更新前のデータに、ホスト計算機１１０に書き込み要求されたデータを上書きすることによって、圧縮単位の書き込みデータを生成する。図１０の例では、データ中継モジュール６００は、更新前データＤＢＳ５の０番目から５番目のブロックのデータを、ホスト計算機１１０から受け取った更新データＤＵＬＢに置き換えることによって、更新後データＤＢＳ５ｕを生成する。
【００７４】
次のステップＳ３２５では、データ中継モジュール６００は、データ圧縮回路３２０（図１）に、更新後データを圧縮させる。この処理は、図５のステップＳ１１０の処理と同じである。図１０の例では、データ圧縮回路３２０は、更新後データＤＢＳ５ｕを圧縮することによって圧縮後データＤＢＳ１５ｕｃを生成している。この新たな圧縮後データＤＢＳ１５ｕｃのサイズは、６ブロックである。
【００７５】
なお、１つの圧縮単位（ブロックセット）の全ての論理ブロックのデータを更新する場合には、ステップＳ３０５からＳ３２０の処理が省略される。そして、書き込み要求された１ブロックセット分のデータが、更新後データとして圧縮される。
【００７６】
次のステップＳ３３０では、データ中継モジュール６００は、圧縮後データを第１論理ボリュームＬＤＥＶ１の空き領域Ａ１３に格納する。この際、格納先の論理ブロックを、前（ＬＢＡの小さい方）から順番に選択する。図１０の例では、データＤＢＳ１５ｕｃが第５ブロックセットＢＳ１５ｕｃに格納されている。
【００７７】
このステップＳ３３０では、データ中継モジュール６００は、空き領域Ａ１３内の未使用領域から論理ブロックを選択する。空き領域Ａ１３内の使用済領域と未使用領域とを区別する方法としては、任意の方法を採用可能である。例えば、データ中継モジュール６００が、使用済領域と未使用領域との境界を示すＬＢＡをローカルメモリ３４４に格納し、さらに、このＬＢＡの参照と更新とを適宜実行する方法を採用可能である。
【００７８】
次のステップＳ３３５では、データ中継モジュール６００は、圧縮ＬＢＡ管理テーブル５００を更新する。図１１は、更新後の圧縮ＬＢＡ管理テーブル５００の一例を示す説明図である。データ中継モジュール６００は、第５ブロックセットＢＳ５に対応付けられた移行後ブロックセットの情報を、古い第５ブロックセットＢＳ１５ｃから、新しい第５ブロックセットＢＳ１５ｕｃのものに更新する。図１１の例では、先頭ＬＢＡが「５８１３」で、サイズが「６」である。以後、データ中継モジュール６００は、第５ブロックセットＢＳ５に対する読み出し要求を受けると、新しい第５ブロックセットＢＳ１５ｕｃからデータを読み出す。古い第５ブロックセットＢＳ１５ｃのデータは、以後、使用されない。
【００７９】
次のステップＳ３４０では、データ中継モジュール６００は、指定ＬＢＡの全てについて書き込みが終了したか否かを判定する。終了していない場合には、ステップ３００に戻り、書き込みの終了していない指定ＬＢＡについて、ステップＳ３００からステップＳ３３５へ至る一連の処理を繰り返し実行する。これらの一連の処理は１つのブロックセット毎に実行される。ただし、複数のブロックセット毎に実行してもよい。
【００８０】
こうして全指定ＬＢＡのデータの書き込みが終了したら、次のステップＳ３４５で、データ中継モジュール６００は、ホスト計算機１１０にデータ書き込み終了の通知を送信する。
【００８１】
以上説明した書き込み処理では、データ中継モジュール６００は、ホスト計算機１１０からデータ書き込み要求を受けると、データを圧縮して格納し、さらに、圧縮前後（移行前後）のブロックセットの新たな対応関係を圧縮ＬＢＡ管理テーブル５００に格納する。従って、ストレージシステム２００がデータを圧縮して格納する場合であっても、ホスト計算機１１０は、圧縮処理や圧縮データの管理を行うことなく、圧縮前のＬＢＡを指定することによってデータの書き込みを行うことが可能となる。
【００８２】
また、指定ＬＢＡを含む移行前ブロックセットの全てのブロックの更新が要求されていない場合であっても、データ中継モジュール６００は、ブロックセットの更新前のデータに、要求されたデータを上書きすることによって、ブロックセットを単位とする圧縮処理を実行する。その結果、圧縮後のデータの管理が過剰に複雑化することを防止できる。
【００８３】
なお、更新後の圧縮後データを、更新前の圧縮後データを格納する論理ボリュームとは異なる論理ボリュームに格納することとしてもよい。こうすれば、空き領域Ａ１３よりも大きな記憶領域を有する論理ボリュームに更新後のデータを書き込むことが可能となるので、大量のデータ更新にも対応することが可能となる。この場合には、圧縮ＬＢＡ管理テーブル５００（図６（Ａ））に、圧縮前後（移行前後）のブロックセットの対応関係に加えて、移行後のブロックセットを含むＬＤＥＶＮを格納すればよい。
【００８４】
また、更新後の圧縮データが、更新前の圧縮データよりも小さい場合には、更新前の圧縮データを格納していた論理ブロックに、更新後の圧縮データを格納することとしてもよい。こうすれば、論理ブロックの利用効率の向上を図ることが可能となる。
【００８５】
Ａ５．圧縮解除処理：
図１２は、圧縮解除処理の手順を示すフローチャートである。圧縮解除処理とは、論理ボリュームに格納された圧縮データを伸長して格納し直す処理を意味している。第１実施例では、論理ボリューム１つ分のデータを、伸長させつつ他の論理ボリュームに移行させることとしている。圧縮解除処理は、管理端末１２０（図１）からの指示に従って、ディスクアレイ制御部３００が実行する。以下、第１論理ボリュームＬＤＥＶ１を第２論理ボリュームＬＤＥＶ２に移行させることとして説明を行う。なお、伸長先（移行先）の論理ボリュームについては、データ中継モジュール６００が、空いている論理ボリュームの中から自動的に選択する。ただし、オペレータが選択できることとしてもよい。
【００８６】
ディスクアレイ制御部３００は、図７に示す読み出し処理と同様に、ブロックセット毎にデータを読み出し、さらに、読み出したデータを適宜伸長する。ただし、図７の読み出し処理との差異は３点ある。１つ目の差異は、ホスト計算機１１０によって指定されたデータの代わりに、論理ボリューム１つ分のデータを読み出す点である。２つ目の差異は、読み出したデータをホスト計算機１１０へ転送する処理（図７：ステップＳ２３０）の代わりに、伸長先（移行先）の論理ボリュームに書き込む処理（ステップＳ２５０）を実行している点である。３つ目の差異は、移行が完了した後に、ボリューム状態管理テーブル５２０（図６（Ｂ））と論理ボリューム管理テーブル５１０（図６（Ｃ））とを更新する点である（ステップＳ２６０、Ｓ２６５）。
【００８７】
ステップＳ２００からステップＳ２５０へ至る処理は、図７の読み出し処理と同じである。
【００８８】
ステップＳ２５０では、データ中継モジュール６００は、読み出したデータを、伸長先（移行先）の論理ボリュームに格納する。第１実施例では、データ中継モジュール６００は、伸長先の論理ブロックのＬＢＡと、圧縮前の論理ブロックのＬＢＡと、が一致するように、伸長先の論理ブロックを選択する。
【００８９】
次のステップＳ２５５では、データ中継モジュール６００は、圧縮前ＬＢＡの全てについてのデータ移行が終了したか否かを判定する。終了していない場合には、ステップＳ２００に戻り、データ移行の終了していないブロックセットについて、ステップＳ２００からステップＳ２５０へ至る一連の処理を繰り返し実行する。これらの一連の処理は１つのブロックセット毎に実行される。ただし、複数のブロックセット毎に実行してもよい。
【００９０】
データ移行が終了したら、次のステップＳ２６０で、データ中継モジュール６００は、ボリューム状態管理テーブル５２０（図６（Ｂ））における、伸長先の論理ボリュームに関する情報を更新する。例えば、伸長先の第２論理ボリュームＬＤＥＶ２に関して、「圧縮：無効」、「暗号化：無効」、「アルゴリズム：無し」に設定する。
【００９１】
次のステップＳ２６５では、データ中継モジュール６００は、論理ボリューム管理テーブル５１０におけるＬＤＥＶＮを切り替える。例えば、データ中継モジュール６００は、第０論理ユニットＬＵ０に対応するＬＤＥＶＮを「１」から「２」へ変更する。なお、ＬＤＥＶＮの切り替えは、管理端末１２０からの指示に従ったタイミングで行うこととしてもよい。
【００９２】
以後、データ中継モジュール６００は、第０論理ユニットＬＵ０を対象とするデータ転送要求（例えば、読み出し要求や、書き込み要求）を受けると、新しい第２論理ボリュームＬＤＥＶ２を対象とするデータ転送を行う。この際、論理ボリュームに対するＬＢＡとしては、指定ＬＢＡ（圧縮前のＬＢＡ）をそのまま用いる。
【００９３】
以上説明した圧縮解除処理では、ディスクアレイ制御部３００は、ホスト計算機１１０に負荷をかけることなく、データの伸長を行う。さらに、データ中継モジュール６００は、圧縮前ＬＢＡと伸長先のＬＢＡとが一致するように、伸長後のデータを格納する論理ブロックを選択する。従って、ストレージシステム２００が圧縮を解除する場合であっても、ホスト計算機１１０は、伸長処理や伸長データの管理を行うことなく、圧縮前のＬＢＡを指定することによってデータ転送要求を行うことが可能である。
【００９４】
なお、伸長先の論理ブロックのＬＢＡと、圧縮前の論理ブロックのＬＢＡとは、一致していなくてもよい。この場合には、ストレージシステム２００に、圧縮前のＬＢＡと伸長後のＬＢＡとの対応関係を格納しておくことが好ましい。こうすれば、データ中継モジュール６００は、データ転送要求を受けた場合には、このような対応関係を参照することによって、適切なデータ転送を行うことができる。
【００９５】
以上説明した第１実施例によれば、ディスクアレイ制御部３００（図１）は、ホスト計算機１１０から独立して圧縮マイグレーション処理を実行するので、ホスト計算機１１０に負荷をかけずに記憶領域の節約を図ることが可能となる。
【００９６】
また、第１実施例では、論理ボリュームのデータが、複数のブロックセットに分割して圧縮される。従って、論理ボリューム全体を１つのデータとして圧縮する場合と比べて、論理ボリュームの部分領域を対象とするデータ転送処理の速度が過剰に遅くなることを防止できる。
【００９７】
さらに、第１実施例では、ストレージシステム２００は、圧縮前後のブロックセットの対応関係に関する管理データ（圧縮ＬＢＡ管理テーブル５００と、論理ボリューム管理テーブル５１０と、ボリューム状態管理テーブル５２０）を格納するとともに、データの圧縮と伸長と、管理データの更新とを、ホスト計算機１１０から独立して実行する。従って、ホスト計算機１１０に負荷をかけずに、データの圧縮と伸長とを実行することができる。
【００９８】
特に、第１実施例では、ストレージシステム２００は、ホスト計算機１１０に指定させるためのＬＢＡ（圧縮前ＬＢＡ）と、実際のＬＢＡ（圧縮後ＬＢＡ）と、の対応関係を格納する圧縮ＬＢＡ管理テーブル５００を有している。その結果、ディスクアレイ制御部３００は、ホスト計算機１１０からは、データの圧縮状況（圧縮の有無や、データを格納するブロックのＬＢＡの変更）に拘わらずに一貫して、圧縮前ＬＢＡを指定するデータ転送要求を受けることが可能である。換言すれば、ディスクアレイ制御部３００は、データの圧縮状況を、ホスト計算機１１０から隠すことが可能である。従って、ホスト計算機１１０は、データの圧縮状況の管理をすることなく、所定の圧縮前ＬＢＡを用いたデータ転送を要求することができる。
【００９９】
また、複数のホスト計算機でストレージシステム２００に格納されたデータを共有する場合であっても、各ホスト計算機は、データの圧縮状況に拘わらずに、共通の圧縮前ＬＢＡを用いてデータ転送要求を行うことができる。このように、第１実施例のストレージシステム２００は、データの圧縮状況に拘わらずに、ホスト計算機を限定せずに記憶領域を提供することが可能である。以下、ホスト計算機を限定せずに動作可能なことを「ホスト透過（Host Transparent）」とも呼ぶ。
【０１００】
なお、第１実施例では、圧縮ＬＢＡ管理テーブル５００と論理ボリューム管理テーブル５１０との全体が、本発明における「ブロック対応関係」に相当する。
【０１０１】
Ｂ．第２実施例：
図１３は、第２実施例におけるストレージシステム２００ｂの構成を示す説明図である。図１に示すストレージシステム２００との差異は、データ中継モジュール６００ｂが、データの更新履歴を保存するとともに、その更新履歴を世代管理する点である。また、ローカルメモリ３４４ｂは、圧縮ＬＢＡ管理テーブル５００の代わりに、更新状態管理テーブル５３０と、世代・圧縮管理テーブル５４０と、を格納している。これらのテーブル５３０、５４０は、世代管理に用いられる。他の構成は、図１、図２のストレージシステム２００と同じである。なお、図１３では、ストレージシステム２００ｂの構成要素として、ディスクアレイ制御部３００ｂのローカルメモリ３４４ｂのみが示されており、他の構成要素は図示が省略されている。
【０１０２】
第２実施例では、第０論理ユニットＬＵ０と第０論理ボリュームＬＤＥＶ０とが対応付けられている（図１３：論理ボリューム管理テーブル５１０）。また、第０論理ボリュームＬＤＥＶ０のデータは、圧縮されていない。そこで、データ中継モジュール６００ｂは、第０論理ボリュームＬＤＥＶ０に対するＬＢＡとしては、指定ＬＢＡをそのまま用いる。
【０１０３】
また、データ中継モジュール６００ｂは、第０論理ボリュームＬＤＥＶ０におけるデータの更新履歴を保存し、さらに、その更新履歴を世代管理する。これは、最新のデータに加えて、過去のある時点における第０論理ボリュームＬＤＥＶ０のデータを、ホスト計算機１１０に提供するためである。このような、過去のある時点におけるデータのバックアップは「時点コピー（Point In Time Copy）」や「スナップショット（Snapshot）（商標）」とも呼ばれている。
【０１０４】
データ中継モジュール６００ｂは、ホスト計算機１１０や管理端末１２０から「時点コピー」を作成するように指示を受ける。すると、データ中継モジュール６００ｂは、指示を受けた時点（以下「指示時点」と呼ぶ）での任意の論理ブロックのデータを後で提供できるように、バックアップデータを保存する。この際、バックアップデータとして、指示時点以降に更新された部分領域のみの更新前データを保存する。このような、更新（変更）部分のみをコピーする処理は「コピー・オン・ライト（Copy On Write）」とも呼ばれている。なお、データ中継モジュール６００ｂは、バックアップデータを、元の第０論理ボリュームＬＤＥＶ０とは異なる第１論理ボリュームＬＤＥＶ１に格納する。この際、バックアップデータを圧縮して格納する（詳細は後述）。
【０１０５】
Ｂ１．書き込み処理（更新処理）：
図１４は、更新状態管理テーブル５３０と世代・圧縮管理テーブル５４０との一例を示す説明図である。これらのテーブル５３０、５４０は、図１４の下側に示したステップＳ１からＳ７の手順に従ってデータの更新が行われた場合の例を示している。
【０１０６】
更新状態管理テーブル５３０は、第０論理ボリュームＬＤＥＶ０内のブロックセットと、退避情報の有無と、の対応関係を格納している。第２実施例では、データ中継モジュール６００ｂは、第０論理ボリュームＬＤＥＶ０を複数のブロックセットに区分する。さらに、このブロックセットを処理単位として、更新履歴の保存と世代管理とを行う。図１４の例では、処理単位は、ＬＢＡが連続する１００（１６進法）個の論理ブロックで構成されるブロックセットである。更新状態管理テーブル５３０では、ブロックセットが、開始ＬＢＡと終端ＬＢＡとの組み合わせによって特定されている。図１４には、４つのブロックセットＢＳ１００〜ＢＳ１３０の例が示されている。一方、退避情報としては、更新前データの退避状況を表す情報（詳細は後述）を参照するポインタが用いられる。データが更新されていないブロックセットに対しては、ポインタは設定されない。
【０１０７】
なお、ＬＢＡに付された符号「（ｈ）」は、ＬＢＡが１６進法で表されていることを意味している。以下、符号「（ｈ）」が付されたＬＢＡは「１６進法」で表され、何も付されていないＬＢＡは「１０進法」で表されていることとする。
【０１０８】
一方、世代・圧縮管理テーブル５４０は、更新前データの退避状況を格納している。具体的には、更新前データを格納するブロックセットと、その更新前データの世代番号と、他世代の更新前データの情報を参照するポインタと、の対応関係を格納している。他世代の情報を参照するポインタは、この世代・圧縮管理テーブル５４０の中の他の１つの対応関係を参照している。また、上述の更新状態管理テーブル５３０における「ポインタ」は、この世代・圧縮管理テーブル５４０の中の１つの対応関係を参照している。世代番号については後述する。
【０１０９】
まず、最初のステップＳ１では、管理端末１２０がディスクアレイ制御部３００ｂへ
時点コピーの作成指示を送信する。このような指示は、オペレータの操作によって送信される。また、ディスクアレイ制御部３００ｂ、あるいは、管理端末１２０が、予め設定されたタイミングで自発的に指示を行ってもよく、また、他の任意の条件に従って自発的に指示を行うこととしてもよい。
【０１１０】
第２実施例では、ディスクアレイ制御部３００ｂは、時点が異なる複数の時点コピーを作成可能である。時点コピーは、各時点コピー毎に固有な世代番号によって識別される。第２実施例では、世代番号として、「０」から始まる通し番号が用いられる。図１４の例では、データ中継モジュール６００ｂは、ステップＳ１で指示された時点コピーに「０番」を割り当てている。なお、世代（時点）は、本発明における「バージョン」に相当する。
【０１１１】
次のステップＳ２では、ホスト計算機１１０が、ストレージシステム２００ｂに対して、データの書き込み要求を行う。ここで、指定ＬＢＡは「０００００〜０００５０（ｈ）」であることとしている。
【０１１２】
図１５は、データ書き込み処理の手順を示すフローチャートである。最初のステップＳ４００では、データ中継モジュール６００ｂは、データ退避の要否を判定する。指定ＬＢＡを含むブロックセット（以下「指定ブロックセット」とも呼ぶ）に対する書き込みが、最新の指示時点以降の最初の書き込みである場合、すなわち、指定ブロックセットのデータが最新の指示時点以降に１度も退避されていない場合には、「退避要」と判定する。指定ブロックセットのデータが最新の指示時点以降に既に退避されている場合には、「退避不要」と判定する。ステップＳ２（図１４）の書き込み処理では、「退避要」と判定する。
【０１１３】
なお、指定ＬＢＡが複数の処理単位（ブロックセット）のブロックを含む場合がある。このような場合には、データ中継モジュール６００ｂは、各ブロックセット毎に、ステップＳ４００に続く一連の処理（後述）を実行する。
【０１１４】
次のステップＳ４０５（図１５）では、データ中継モジュール６００ｂは、第０論理ボリュームＬＤＥＶ０内の指定ブロックセットからデータを読み出す。図１６は、ステップＳ２における書き込み処理の概要を示す説明図である。図１６の例では、データ中継モジュール６００ｂは、指定ＬＢＡを含む第１ブロックセットＢＳ１００からデータＤＢＳ２００を読み出す。ここで読み出されたデータは、指定ブロックセットの更新前のデータである。なお、図１６では、１つの四角記号ＳＱが１つのブロックを示しているものではなく、四角記号ＳＱの数は、ブロックの数の概要を示している。
【０１１５】
次のステップＳ４１０（図１５）では、データ中継モジュール６００ｂは、データ圧縮回路３２０（図１）に、読み出した更新前データを圧縮させる。図１６の例では、データ圧縮回路３２０は、更新前データＤＢＳ２００を圧縮することによって、圧縮後の更新前データＤＢＳ２００ｃを生成している。この圧縮後データＤＢＳ２００ｃのブロック数は、圧縮前データＤＢＳ２００のブロック数よりも少ない。
【０１１６】
次のステップＳ４１５では、データ中継モジュール６００ｂは、圧縮後の更新前データを第１論理ボリュームＬＤＥＶ１に格納する。図１６の例では、圧縮後の更新前データＤＢＳ２００ｃが第１ブロックセットＢＳ２００ｃに格納されている。
【０１１７】
次のステップＳ４２０では、データ中継モジュール６００ｂは、世代・圧縮管理テーブル５４０に、更新前データを格納するブロックセットの情報を追加する。図１７は、ステップＳ２（図１４）の書き込み処理における更新状態管理テーブル５３０と世代・圧縮管理テーブル５４０との一例を示す説明図である。世代・圧縮管理テーブル５４０には第１ブロックセットＢＳ２００ｃに関する情報が追加されている。世代が「０」であり、さらに、開始ＬＢＡが「０００００」で、終端ＬＢＡが「０００５０」で、他世代情報が「無し」である。「世代」が「０」であるのは、更新前データＤＢＳ２００ｃが、第０世代のデータであるからである。
【０１１８】
次のステップＳ４２５では、データ中継モジュール６００ｂは、更新状態管理テーブル５３０の退避情報を更新する。図１７の例では、第１ブロックセットＢＳ１００の退避情報にポインタが追加される。このポインタは、世代・圧縮管理テーブル５４０の第１ブロックセットＢＳ２００ｃに関する情報を参照するデータである。
【０１１９】
次のステップＳ４３０では、データ中継モジュール６００ｂは、指定ＬＢＡの全てについて、データの退避処理が終了したか否かを判定する。終了していない場合には、ステップＳ４００に戻り、終了していない指定ＬＢＡについて、ステップＳ４００からステップＳ４２５へ至る処理を繰り返し実行する。なお、データ中継モジュール６００ｂは、ステップＳ４００で「退避不要」と判定したブロックセットについては、ステップＳ４０５からＳ４２５へ至る処理を省略し、データの退避を実行しない。
【０１２０】
次のステップＳ４３５では、データ中継モジュール６００ｂは、ホスト計算機１１０から要求されたデータを論理ボリュームに書き込む。この際、指定ＬＢＡをそのまま用いる。図１６の例では、データ中継モジュール６００ｂは、第０論理ボリュームＬＤＥＶ０の指定ＬＢＡ（０００００〜０００５０）のブロックに、ホスト計算機１１０から受け取った新データＤＵＬＢ１００を書き込む。なお、ステップＳ４３５の処理を、データ退避が完了した後のステップＳ４３０の前に実行してもよい。例えば、ブロックセットを退避するたびに、そのブロックセットへのデータの書き込みを実行してもよい。
【０１２１】
こうして全指定ＬＢＡのデータの書き込みが終了したら、次のステップＳ４４０で、データ中継モジュール６００ｂは、ホスト計算機１１０にデータの書き込み終了の通知を送信する。
【０１２２】
以後、データ中継モジュール６００ｂは、ホスト計算機１１０からの読み出し要求に対して、第０論理ボリュームＬＤＥＶ０に格納された最新のデータを転送する。
【０１２３】
一方、世代を指定した読み出し要求に対しては、データ中継モジュール６００ｂは、更新状態管理テーブル５３０と世代・圧縮管理テーブル５４０とを参照することによって、指定された世代のデータを格納するブロックセットからデータを読み出し、要求されたデータを転送する。例えば、第０世代の第１ブロックセットＢＳ１００を指定した読み出し要求に対するデータ転送について説明する。データ中継モジュール６００ｂは、まず、第０世代用のブロックセットＢＳ２００ｃから、圧縮後の更新前データＤＢＳ２００ｃを読み出す。次に、データ伸長回路３３０（図１）に、読み出したデータを伸長させる。すると、データ伸長回路３３０は、圧縮前の更新前データＤＢＳ２００を生成する。データ中継モジュール６００ｂは、生成された更新前データＤＢＳ２００を用いて、指定ＬＢＡのデータをホスト計算機１１０に転送する。指定された世代に関する情報が世代・圧縮管理テーブル５４０に無い場合には、第０論理ボリュームＬＤＥＶ０に格納されたデータをそのまま転送する。
【０１２４】
ステップＳ２（図１４）が終了したら、次のステップＳ３では、管理端末１２０がディスクアレイ制御部３００ｂへ、新たな時点コピーの作成指示を送信する。この時点コピーの世代番号は「１」となる。次のステップＳ４では、さらに、管理端末１２０がディスクアレイ制御部３００ｂへ、新たな時点コピーの作成指示を送信する。この時点コピーの世代番号は「２」となる。
【０１２５】
次のステップＳ５では、ホスト計算機１１０が、ストレージシステム２００ｂに対して、データの書き込み要求を行う。ここで、指定ＬＢＡは「０００００〜０００４０（ｈ）」であり、指定ブロックセットは、上述のステップＳ１と同じ第１ブロックセットＢＳ１００であることとしている。
【０１２６】
図１８は、ステップＳ５における書き込み処理の概要を示す説明図である。書き込み処理の内容は、図１６のステップＳ２と同様である。ただし、データ中継モジュール６００ｂは、第１ブロックセットＢＳ１００の更新前データを、先の第１ブロックセットＢＳ２００ｃとは異なる空きの第２ブロックセットＢＳ２１０ｃに格納する。なお、１つの四角記号ＳＱは１つのブロックを示しているものではなく、四角記号ＳＱの数は、ブロックの数の概要を示している。
【０１２７】
具体的には、データ中継モジュール６００ｂは、ステップＳ４０５（図１５）で第１ブロックセットＢＳ１００の更新前データＤＢＳ２１０を読み出す。ステップＳ４１０では、データ圧縮回路３２０（図１）が、更新前データＤＢＳ２１０を圧縮することによって圧縮後の更新前データＤＢＳ２１０ｃを生成する。ステップＳ４１５では、データ中継モジュール６００ｂは、圧縮後の更新前データＤＢＳ２１０ｃを第１論理ボリュームＬＤＥＶ１の第２ブロックセットＢＳ２１０ｃに格納する。ステップＳ４３５では、データ中継モジュール６００ｂは、ホスト計算機１１０から受け取った新データＤＵＬＢ１１０を、第０論理ボリュームＬＤＥＶ０の指定ＬＢＡのブロックに書き込む。その結果、２つのブロックセットＢＳ２００ｃ、ＢＳ２１０ｃのそれぞれは、互いに世代が異なる第１ブロックセットＢＳ１００の過去のデータを格納することとなる。
【０１２８】
図１９は、ステップＳ５の書き込み処理における更新状態管理テーブル５３０と世代・圧縮管理テーブル５４０との一例を示す説明図である。図１７に示す例との差異は、世代・圧縮管理テーブル５４０に、第２ブロックセットＢＳ２１０ｃに関する情報が追加されている点である。第２ブロックセットＢＳ２１０ｃに関しては、世代が「１、２」であり、さらに、開始ＬＢＡが「０００５１」で、終端ＬＢＡが「０００ＢＦ」で、他世代情報が「無し」である。また、第１ブロックセットＢＳ２００ｃの他世代情報にポインタが追加されている。このポインタは、第２ブロックセットＢＳ２１０ｃに関する情報を参照している。
【０１２９】
次のステップＳ６（図１４）では、ホスト計算機１１０が、ストレージシステム２００ｂに対して、データの書き込み要求を行う。データ中継モジュール６００ｂは、上述のステップＳ２、Ｓ５と同様に、図１５のフローチャートに従って、書き込み処理を実行する。図１４の例では、指定ＬＢＡは「００１００〜００１２０（ｈ）」であることとしている。世代・圧縮管理テーブル５４０には、更新前データを格納するブロックセットの情報が追加される（図１４）。
【０１３０】
Ｂ２．世代を指定した更新処理：
ステップＳ７では、ホスト計算機１１０が、ストレージシステム２００ｂに対してデータの書き込み要求を行う。上述のステップＳ２、Ｓ５、Ｓ６との差異は、過去の世代を指定した書き込み要求を行っている点である。
【０１３１】
図２０は、過去の世代に対するデータの書き込み処理の手順を示すフローチャートである。図２０の例では、指定ブロックセットに対する処理が、以下の３つのケースＡ〜Ｃに分けて実行される。なお、指定ＬＢＡが複数のブロックセットのブロックを含む場合には、各ブロックセット毎に場合分けがなされる。
ケースＡ：指定世代のデータが退避されていない場合：
ケースＢ：指定世代のデータが退避済みであり、
かつ、退避データは他世代との共有データではない：
ケースＣ：指定世代のデータが退避済みであり、
かつ、退避データは他世代との共有データである：
【０１３２】
Ｂ３．ケースＡ：
図２１は、ケースＡにおける更新状態管理テーブル５３０と世代・圧縮管理テーブル５４０との一例を示す説明図である。図２１には、図１４のステップＳ７の後のテーブル５３０、５４０の内容の一部が示されている。
【０１３３】
ステップＳ５１０（図２０）では、データ中継モジュール６００ｂは、ホスト計算機１１０から受け取った新データを用いて、指定ブロックセットの圧縮データを生成する。この際、図９のステップＳ３００〜Ｓ３２５の手順と同様に、１つの指定ブロックセットの全ブロックのデータを取得する。データ中継モジュール６００ｂは、全ブロックのデータを取得したら、データ圧縮回路３２０（図１）に圧縮させ、圧縮されたデータを第１論理ボリュームＬＤＥＶ１に格納（退避）する。図２１の例では、圧縮後のデータが、ブロックセットＢＳ２３０ｃに格納されている。この際、元の第０論理ボリュームＬＤＥＶ０のデータは更新されない。
【０１３４】
次のステップＳ５１３では、データ中継モジュール６００ｂは、世代・圧縮管理テーブル５４０に、新たな圧縮後データを格納する退避先ブロックセットＢＳ２３０ｃの情報を追加する。図２１の例では、世代が「２」であり、さらに、開始ＬＢＡが「０００Ｃ０」で、終端ＬＢＡが「００１２Ｆ」で、他世代情報が「無し」である。世代は、ホスト計算機１１０によって指定された世代に設定される。
【０１３５】
次のステップＳ５１６では、データ中継モジュール６００ｂは、更新状態管理テーブル５３０を更新する。具体的には、指定ブロックセットの退避情報にポインタを追加する。このポインタは、世代・圧縮管理テーブル５４０の退避先ブロックセットに関する情報を参照する。
【０１３６】
以上の処理が終了したら、データ中継モジュール６００ｂは、ケースＡにおける過去の世代への書き込み処理を終了する。
【０１３７】
Ｂ４．ケースＢ：
図２２は、ケースＢにおける更新状態管理テーブル５３０と世代・圧縮管理テーブル５４０との一例を示す説明図である。図２２には、図１４のステップＳ７の後に、さらに、ホスト計算機１１０が、ステップＳ７と同じ指定ブロックセットと指定世代とを対象とする書き込み要求を行った場合の一例が示されている。
【０１３８】
ステップＳ５２０（図２０）では、データ中継モジュール６００ｂは、ホスト計算機１１０から受け取った新データを用いて指定世代のデータを生成し、指定世代データを第０論理ボリュームＬＤＥＶ０に格納（退避）する。この処理は、上述のステップＳ５１０の処理と同様の処理である。ただし、指定ブロックセットの中の指定されていないブロックのデータは、第０論理ボリュームＬＤＥＶ０の代わりに、第１論理ボリュームＬＤＥＶ１の退避先ブロックセットから読み出される。この退避先ブロックセットは、指定世代に対応付けられたブロックセットである。データ中継モジュール６００ｂは、このような退避先ブロックセットを、更新前の世代・圧縮管理テーブル５４０を参照することによって取得する。
【０１３９】
また、データ中継モジュール６００ｂは、新たな圧縮後の指定世代データを格納する論理ブロックを、第１論理ボリュームＬＤＥＶ１の空いている論理ブロックから選択する。図２２の例では、ブロックセットＢＳ２４０ｃを選択している。ただし、新たな圧縮後の指定世代データが、古い（退避済みの）圧縮後の指定世代データと比べて小さい場合には、古い指定世代データを格納していた論理ブロックに、新たな指定世代データを格納することが好ましい。
【０１４０】
次のステップＳ５２５では、データ中継モジュール６００ｂは、世代・圧縮管理テーブル５４０を更新する。具体的には、退避先ブロックセットの情報を、新たな圧縮後データを格納するブロックセットのものに置き換える。図２２の例では、開始ＬＢＡが「００３１０」に更新され、終端ＬＢＡが「００３Ａ５」に更新されている。
【０１４１】
以上の処理が終了したら、データ中継モジュール６００ｂは、ケースＢにおける過去の世代への書き込み処理を終了する。
【０１４２】
Ｂ５．ケースＣ：
図２３は、ケースＣにおける更新状態管理テーブル５３０と世代・圧縮管理テーブル５４０との一例を示す説明図である。図２３には、図１４のステップＳ７の後に、さらに、ホスト計算機１１０が、第１世代のＬＢＡ「００１００（ｈ）」を対象とする書き込み要求を行った場合の一例が示されている。図１４のテーブル５３０、５４０に示すように、「００１００（ｈ）」を含むブロックセットＢＳ１１０については、ブロックセットＢＳ２２０ｃに、「０〜２」世代のデータが既に退避済みである。図２３の例では、ホスト計算機１１０は、この中の第１世代のみについて、新たなデータの書き込みを要求している。
【０１４３】
ステップＳ５３０（図２０）では、データ中継モジュール６００ｂは、ホスト計算機１１０から受け取った新データを用いて指定世代のデータを生成し、指定世代データを第０論理ボリュームＬＤＥＶ０に格納（退避）する。この処理は、上述のステップＳ５２０の処理と同様の処理である。ただし、退避済みのブロックセットのデータを保存したまま、空いた論理ブロックに新たなデータを格納する。図２３の例では、退避済みのブロックセットＢＳ２２０ｃのデータを保存したまま、空いたブロックセットＢＳ２５０ｃに新たな圧縮後のデータを格納する。
【０１４４】
次のステップＳ５３５では、データ中継モジュール６００ｂは、世代・圧縮管理テーブル５４０を更新する。具体的には、退避済みのブロックセットの情報から指定世代を削除し、新たな圧縮後データを格納する退避先ブロックセットの情報を追加する。図２３の例では、ブロックセットＢＳ２２０ｃの世代情報から指定世代「１」が削除され、さらに、新たなブロックセットＢＳ２５０ｃの情報が追加されている。世代は指定世代と同じ「１」であり、開始ＬＢＡは「００５１Ａ」であり、終端ＬＢＡは「００５９０」である。また、退避済みのブロックセットの他世代情報にポインタが追加される。このポインタはブロックセットＢＳ２５０ｃに関する情報を参照している。
【０１４５】
以上の処理が終了したら、データ中継モジュール６００ｂは、ケースＣにおける過去の世代への書き込み処理を終了する。
【０１４６】
以上説明した第２実施例では、ストレージシステム２００ｂは、更新前データを退避しつつ、更新後のデータを格納するので、最新データと、指定時点でのデータと、を容易に提供することができる。また、ディスクアレイ制御部３００ｂ（図１３）は、ホスト計算機１１０から独立して、このようなバックアップ処理を実行するので、ホスト計算機１１０に負荷をかけずにデータのバックアップを行うことができる。
【０１４７】
また、第２実施例では、論理ボリュームのデータが複数のブロックセットに分割され、更新のあったブロックセットについてのみ、更新前データが退避される。その結果、論理ボリュームの全体の複製を保存する場合と比べて、記憶領域の節約を図ることが可能となる。また、更新前データは圧縮して格納されるので、さらに、記憶領域の節約を図ることができる。
【０１４８】
また、第２実施例では、ストレージシステム２００ｂは、データの圧縮（退避）前後の対応関係に関する管理データ（論理ボリューム管理テーブル５１０と、ボリューム状態管理テーブル５２０と、更新状態管理テーブル５３０と、世代・圧縮管理テーブル５４０）を格納するとともに、データの圧縮と伸長と、管理データの更新とを、ホスト計算機１１０から独立して実行する。従って、ホスト計算機１１０に負荷をかけずに、データの圧縮と伸長とを実行することができる。
【０１４９】
特に、第２実施例では、更新状態管理テーブル５３０と世代・圧縮管理テーブル５４０との組み合わせによって、圧縮前後（退避前後）のブロックセットの対応関係が定められている。その結果、ディスクアレイ制御部３００ｂは、ホスト計算機１１０からは、一貫して、圧縮（退避）前ＬＢＡを指定するデータ転送要求を受けることが可能である。また、複数のホスト計算機がデータを共有する場合であっても、ディスクアレイ制御部３００ｂは、各ホスト計算機から、共通の圧縮（退避）前ＬＢＡを用いたデータ転送要求を受けることができる。すなわち、ストレージシステム２００ｂは、「ホスト透過」である。
【０１５０】
さらに、第２実施例では、ディスクアレイ制御部３００ｂは、世代・圧縮管理テーブル５４０に、ブロックセットと世代との対応関係を格納する。従って、ディスクアレイ制御部３００ｂは、ホスト計算機１１０から世代を指定したデータ転送要求を受けることができる。
【０１５１】
また、第２実施例では、ストレージシステム２００ｂは、最新データを圧縮せずに格納するので、最新データの読み出しの処理速度が低下することを抑制できる。
【０１５２】
なお、第２実施例では、論理ボリューム管理テーブル５１０と、更新状態管理テーブル５３０と、世代・圧縮管理テーブル５４０と、の全体が、本発明における「ブロック対応関係」に相当する。
【０１５３】
Ｃ．第３実施例：
図２４は、第３実施例におけるストレージシステム２００ｃの構成を示す説明図である。図１に示すストレージシステム２００との際は、データ中継モジュール６００ｃが、圧縮マイグレーション処理の後のデータの更新を、ログ方式で管理している点である。他の構成は、図１、図２に示すストレージシステム２００と同じである。なお、図２４では、ストレージシステム２００ｃの構成要素として、ディスクアレイ制御部３００ｃのローカルメモリ３４４ｃのみが示されており、他の構成要素は図示が省略されている。
【０１５４】
データ中継モジュール６００ｃは、圧縮マイグレーション処理を実行する。圧縮マイグレーション処理の内容は、図３〜図６に示す第１実施例と同じである。
【０１５５】
Ｃ１．書き込み処理：
図２５は、第３実施例における書き込み処理の概要を示す説明図である。この書き込み処理は、圧縮マイグレーションの後の処理である。ここでは、指定ＬＢＡが「７９９０〜７９９５」であることとしている。
【０１５６】
データ中継モジュール６００ｃは、ホスト計算機１１０から受け取った新データＤＵＬＢ３００を、データ圧縮回路３２０（図１）に圧縮させる。データ圧縮回路３２０は、新データＤＵＬＢ３００を圧縮することによって、圧縮後データＤＵＬＢ３００ｃを生成する。
【０１５７】
また、データ中継モジュール６００ｃは、圧縮後（更新後）データＤＵＬＢ３００ｃに関するログ情報ＤＬＯＧ３００を生成する。このログ情報ＤＬＯＧ３００は、圧縮前ＬＢＡ（指定ＬＢＡ）と、圧縮後データＤＵＬＢ３００ｃを格納するブロックセットを特定する実ＬＢＡと、データの書き込み日時と、を含んでいる。
【０１５８】
次に、データ中継モジュール６００ｃは、ログ情報ＤＬＯＧ３００と圧縮後データＤＵＬＢ３００ｃとを、空き領域Ａ１３内の未使用領域に格納する。このように、ログ情報ＤＬＯＧ３００は、データと同様に、論理ボリュームに格納される。ただし、ログ情報の格納方法としては、ログ情報ＤＬＯＧ３００を格納するブロックを、他のブロックから区別できるような方法を採用する。このような格納方法としては、周知の種々の方法を採用可能である。例えば、ログ情報ＤＬＯＧ３００の開始ブロックと終端ブロックとに、他のブロックでは起こり得ないデータを格納する方法を採用すればよい。
【０１５９】
なお、ログ情報ＤＬＯＧ３００と圧縮後データＤＵＬＢ３００ｃとを、他の論理ボリュームに格納することとしてもよい。
【０１６０】
なお、図２５の例では、ログ情報ＤＬＯＧ３００と圧縮後データＤＵＬＢ３００ｃとを並べたデータＤＢＳ３００ｃが、ブロックセットＢＳ３００ｃに格納されている。ブロックセットＢＳ３００ｃの中のデータブロックセットＢＳＤ３００ｃには、圧縮後データＤＵＬＢ３００ｃが格納されている。ログ情報ＤＬＯＧ３００の実ＬＢＡは、このデータブロックセットＢＳＤ３００ｃのＬＢＡを示している。
【０１６１】
このように、データ中継モジュール６００ｃは、ホスト計算機１１０から書き込みの要求を受けるたびに、空き領域Ａ１３に更新後データとログ情報とを追記する。
【０１６２】
なお、実ＬＢＡによって特定されるブロックセット（圧縮後ブロックセット）は、圧縮前ＬＢＡで特定されるブロックセット（圧縮前ブロックセット）の各ブロックのデータを含んでいる。従って、圧縮後ブロックセットは、圧縮前ＬＢＡの各ブロックのそれぞれと対応付けられているということもできる。これは、他の実施例についても同様である。また、第３実施例では、圧縮前ブロックセットのブロック数は、ホスト計算機１１０の書き込み要求に応じた可変値である。
【０１６３】
Ｃ２．読み出し処理：
データ中継モジュール６００ｃは、ホスト計算機１１０からの読み出し要求に対しては、図７、図８に示した第１実施例と同様に、データ転送を行う。ただし、データ中継モジュール６００ｃは、空き領域Ａ１３のログ情報の中から、指定ＬＢＡを含むログ情報（以下「指定ログ情報」と呼ぶ）を検索する。指定ログ情報を見つけたら、指定ログ情報の実ＬＢＡが表すブロックセットからデータを読み出し、読み出したデータをデータ伸長回路３３０（図１）に伸長させる。データ中継モジュール６００ｃは、伸長によって生成されたデータを用いて、指定ＬＢＡのデータをホスト計算機１１０に転送する。
【０１６４】
なお、データ中継モジュール６００ｃは、複数の指定ログ情報を見つけた場合には、書き込み日時が最新の指定ログ情報を用いる。また、データ中継モジュール６００ｃは、ホスト計算機１１０から過去の日時を指定した読み出し要求を受けることが可能である。この場合には、指定日時における最新の指定ログ情報を用いる。すなわち、指定日時以前のログ情報の中から、最新の指定ログ情報を検索する。このように、日時は、本発明における「バージョン」に相当する。
【０１６５】
以上説明した第３実施例によれば、ストレージシステム２００ｃは、更新前データを残しつつ、更新後データを格納するので、最新データと、更新前のデータと、を容易に提供することができる。また、更新後データを圧縮して格納するので、記憶領域の節約を図ることができる。
【０１６６】
また、第３実施例では、ディスクアレイ制御部３００ｃは、データの更新と圧縮とに関するログ情報を格納するとともに、データの圧縮と伸長とを、ホスト計算機１１０から独立して実行する。従って、ホスト計算機１１０に負荷をかけずに、データの圧縮と伸長とを実行することができる。
【０１６７】
特に、第３実施例では、ログ情報によって、更新前後のブロックセットの対応関係が定められている。その結果、ディスクアレイ制御部３００ｃは、ホスト計算機１１０から、一貫して、更新前（圧縮前）ＬＢＡを指定するデータ転送要求を受けることが可能である。
【０１６８】
なお、第３実施例では、圧縮ＬＢＡ管理テーブル５００と、論理ボリューム管理テーブル５１０と、ログ情報と、の全体が、本発明における「ブロック対応関係」に相当する。また、これらの情報を格納するローカルメモリ３４４ｃと移行先論理ボリュームＬＤＥＶ１（すなわち、ディスクアレイ２５０）との全体が、本発明における「対応関係記憶部」に相当する。
【０１６９】
Ｄ．変形例：
なお、この発明は上記の実施例や実施形態に限られるものではなく、その要旨を逸脱しない範囲において種々の態様において実施することが可能であり、例えば次のような変形も可能である。
【０１７０】
変形例１：
図３〜図６に示す圧縮マイグレーション処理において、移行先の論理ボリュームを、移行元の論理ボリュームと同じとしてもよい。この場合には、圧縮後のデータを、圧縮前のデータを格納していた論理ブロックに上書きすればよい。
【０１７１】
変形例２：
図４、図８に示す第１実施例では、非圧縮領域Ａ１１に関しても、ブロックセットを単位とするデータの読み書きを行っていたが、１個の論理ブロックを単位とする読み書きを行ってもよい。これは、他の処理や他の実施例についても同様である。
【０１７２】
変形例３：
図６に示す第１実施例では、圧縮処理の単位の大きさが「１０ブロック」で固定されている。従って、圧縮前のブロックセットに関しては、先頭ＬＢＡを特定すればブロックセットを特定することが可能である。そこで、圧縮ＬＢＡ管理テーブル５００における圧縮前のサイズデータを省略してもよい。さらに、非圧縮領域Ａ１（非圧縮領域Ａ１１）に関しては、圧縮前（移行前）ＬＢＡと、圧縮後（移行後）ＬＢＡとが同じであるので、圧縮ＬＢＡ管理テーブル５００の、非圧縮領域Ａ１（非圧縮領域Ａ１１）に関するデータを省略してもよい。一方、図１４に示す第２実施例においても、圧縮処理の単位の大きさが「１００（ｈ）ブロック」に固定されている。従って、更新状態管理テーブル５３０における終端ＬＢＡデータを省略してもよい。なお、圧縮後のブロックセットに関しては、大きさが可変値であるので、サイズデータや、終端ＬＢＡデータを省略せずに用いることが好ましい。
【０１７３】
また、第１実施例と第２実施例とにおいて、圧縮処理の単位の大きさを可変値としてもよい。例えば、記憶領域内の位置によって圧縮処理単位の大きさが異なることとしてもよい。
【０１７４】
また、図６（Ｂ）の例では、圧縮の有無やアルゴリズムを論理ボリューム毎に設定することとしているが、圧縮の有無やアルゴリズムの設定単位としては、任意のものを採用可能である。例えば、論理ブロック毎に設定することとしてもよく、ＲＡＩＤグループ毎に設定することとしてもよく、ストレージシステム全体で共通の設定を用いることとしてもよい。いずれの場合も、ストレージシステムに設定記憶部（例えば、メモリ部３４０や、ディスクアレイ２５０）を設け、この設定記憶部に、設定単位毎の設定内容を格納しておくことが好ましい。これは、圧縮処理を行う場合に限らず、他の処理（例えば、暗号化処理）を行う場合も同様である。
【０１７５】
変形例４：
上述の第２実施例では、更新前のデータを圧縮して退避（格納）することとしていたが、この代わりに、更新後のデータを圧縮して退避（格納）することとしてもよい。この場合も、図１４の例と同様に、圧縮管理テーブル５４０に、更新後のデータを格納するブロックセットの情報を格納すればよい。
【０１７６】
変形例５：
図２４、図２５に示す第３実施例では、圧縮マイグレーション処理を実行することとしているが、実行しないこととしてもよい。この場合も、更新後のデータを圧縮してログ情報とともに格納すればよい。この際、更新後のデータとログ情報とを、元のデータの論理ボリュームとは異なる論理ボリュームに格納すればよい。
【０１７７】
また、第３実施例においても、第２実施例と同様に、更新後データの圧縮と格納とを、固定サイズのブロックセット毎に行うこととしてもよい。
【０１７８】
また、第３実施例においても、時点コピーを保存することとしてもよい。例えば、各圧縮前ＬＢＡの更新後データとして、指示時点の直前の更新後データのみを保存し、他の更新後データは破棄することとすればよい。
【０１７９】
変形例６：
上記各実施例において、ストレージシステム２００、２００ｂ、２００ｃからホスト計算機１１０へデータを読み出す場合には、論理ボリュームから読み出した指定ＬＢＡのデータを、一旦、キャッシュメモリ３４２に格納しておき、後でまとめてホスト計算機１１０に送信することとしてもよい。同様に、ホスト計算機１１０からストレージシステム２００、２００ｂ、２００ｃへデータを書き込む場合には、ホスト計算機１１０から送信されたデータを、一旦、キャッシュメモリ３４２に格納しておき、ホスト計算機１１０にデータ書き込み終了の通知を送信した後に、論理ボリュームに実際に書き込むこととしてもよい。
【０１８０】
変形例７：
上述の各実施例では、ホスト計算機１１０が指定するＬＢＡ（指定ＬＢＡ）と、圧縮前（移行前、退避前）の論理ボリューム上のＬＢＡ（以下「物理的ＬＢＡ」とも呼ぶ）と、が一致しているが、一致していなくてもよい。この場合には、ストレージシステムに設定記憶部（例えば、メモリ部３４０やディスクアレイ２５０）を設け、設定記憶部に、指定ＬＢＡと物理的ＬＢＡとのＬＢＡ対応関係を格納しておくことが好ましい。
【０１８１】
また、上述の各実施例では、ディスクアレイ制御部３００、３００ｂ、３００ｃとホスト計算機１１０との間のデータ転送の最小単位（以下「ホストブロック」と呼ぶ）の大きさ（データサイズ）と、論理ボリュームとの間のデータ転送の最小単位（以下「ボリュームブロック」と呼ぶ）の大きさとが同じであった。ただし、ホストブロックの大きさとボリュームブロックの大きさとは、互いに異なっていてもよい。例えば、ボリュームブロックの大きさを、ホストブロックの大きさよりも小さな値に設定してもよい（例えば、ホストブロックの大きさの１／Ｌ倍（Ｌは２以上の整数））。こうすれば、１個のホストブロックが複数のボリュームブロックで表されることとなるので、データ変換処理によってデータの大きさが変化した場合に、データの格納に用いられる記憶領域が過剰に大きくなることを抑制することが可能となる。
【０１８２】
なお、このような場合には、ストレージシステムの設定記憶部に、ホストブロックとボリュームブロックとの対応関係を示す構成情報を格納することが好ましい。こうすれば、ディスクアレイ制御部は、構成情報を参照して、ボリュームブロックからホストブロックを再構成することが可能となる。構成情報としては、例えば、ホストブロックのＬＢＡと、そのホストブロックを構成するボリュームブロックのＬＢＡとの対応関係を採用することができる。
【０１８３】
なお、このようなＬＢＡ対応関係や、構成情報や、上記各テーブル５００、５１０、５２０、５３０、５４０、は、ストレージシステムが有する任意の記憶部に記憶させることができる。例えば、ローカルメモリ（例えば、ローカルメモリ３４４（図１））に格納してもよく、キャッシュメモリ（例えば、キャッシュメモリ３４２）に格納してもよく、ディスクアレイ（例えば、ディスクアレイ２５０）に格納してもよい。
【０１８４】
変形例８：
上記各実施例において、ストレージシステム２００、２００ｂ、２００ｃが、複数のホスト計算機に論理ボリュームを提供する場合がある。このような場合には、ホスト計算機毎に論理ボリューム管理テーブル５１０（図６（Ｃ））を設けることが好ましい。ここで、あるホスト計算機用の論理ボリューム管理テーブル５１０に登録されていない論理ボリュームについては、そのホスト計算機との間のデータ転送を禁じることが好ましい。こうすれば、意図しないホスト計算機との間のデータ転送を防止することができる。
【０１８５】
変形例９：
上述の各実施例では、論理ボリュームの形成方法として、ＲＡＩＤシステムを用いる方法を採用しているが、他の任意の方法を採用可能である。例えば、１つのディスク装置によって提供される記憶領域を、そのまま１つの論理ボリュームとして用いてもよい。
【０１８６】
また、記憶領域としては、ディスク装置を用いたものに限らず、任意のものを採用可能である。例えば、半導体メモリを用いた記憶領域を採用してもよい。
【０１８７】
変形例１０：
上記各実施例では、データの圧縮処理を行うこととしていたが、データ変換処理としては、データ自体の大きさが変わる任意の処理を採用することができる。例えば、暗号化処理を行うこととしてもよい。暗号化処理としては、ＤＥＳ暗号化処理等の周知の種々の処理を採用することができる。また、パスワードを用いる暗号化処理を採用する場合には、パスワードを、管理端末１２０やホスト計算機１１０から指定することとすればよい。また、圧縮処理と暗号化処理との両方を実行してもよい。
【０１８８】
変形例１１：
上記各実施例において、ソフトウェアによって実現されていた構成の一部をハードウェアに置き換えるようにしてもよく、逆に、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよい。例えば、データ圧縮回路３２０（図１）とデータ伸長回路３３０との機能を、プログラムによって実現することとしてもよい。
【図面の簡単な説明】
【０１８９】
【図１】本発明の一実施例としてのストレージシステムの構成を示す説明図である。
【図２】ローカルメモリ３４４の内部構成を示す概略図である。
【図３】管理端末１２０に表示される設定画面の一例を示す説明図である。
【図４】圧縮マイグレーション処理の概要を示す説明図である。
【図５】圧縮マイグレーション処理の手順を示すフローチャートである。
【図６】テーブル５００、５１０、５２０の一例を示す説明図である。
【図７】ストレージシステム２００に対するデータ読み出し処理の手順を示すフローチャートである。
【図８】読み出し処理の概要を示す説明図である。
【図９】ストレージシステム２００に対するデータ書き込み処理の手順を示すフローチャートである。
【図１０】書き込み処理の概要を示す説明図である。
【図１１】更新後の圧縮ＬＢＡ管理テーブル５００の一例を示す説明図である。
【図１２】圧縮解除処理の手順を示すフローチャートである。
【図１３】第２実施例におけるストレージシステム２００ｂの構成を示す説明図である。
【図１４】更新状態管理テーブル５３０と世代・圧縮管理テーブル５４０との一例を示す説明図である。
【図１５】データ書き込み処理の手順を示すフローチャートである。
【図１６】ステップＳ２における書き込み処理の概要を示す説明図である。
【図１７】ステップＳ２の書き込み処理における更新状態管理テーブル５３０と世代・圧縮管理テーブル５４０との一例を示す説明図である。
【図１８】ステップＳ５における書き込み処理の概要を示す説明図である。
【図１９】ステップＳ５の書き込み処理における更新状態管理テーブル５３０と世代・圧縮管理テーブル５４０との一例を示す説明図である。
【図２０】過去の世代に対するデータの書き込み処理の手順を示すフローチャートである。
【図２１】ケースＡにおける更新状態管理テーブル５３０と世代・圧縮管理テーブル５４０との一例を示す説明図である。
【図２２】ケースＢにおける更新状態管理テーブル５３０と世代・圧縮管理テーブル５４０との一例を示す説明図である。
【図２３】ケースＣにおける更新状態管理テーブル５３０と世代・圧縮管理テーブル５４０との一例を示す説明図である。
【図２４】第３実施例におけるストレージシステム２００ｃの構成を示す説明図である。
【図２５】第３実施例における書き込み処理の概要を示す説明図である。
【符号の説明】
【０１９０】
１１０...ホスト計算機
１２０...管理端末
２００、２００ｂ、２００ｃ...ストレージシステム
２１０...ホストインターフェイス
２２０...管理インターフェイス
２３０...ディスクインターフェイス
２５０...ディスクアレイ
３００、３００ｂ、３００ｃ...ディスクアレイ制御部
３１０...ＣＰＵ
３２０...データ圧縮回路
３３０...データ伸長回路
３４０...メモリ部
３４２...キャッシュメモリ
３４４、３４４ｂ、３４４ｃ...ローカルメモリ
３９０...バス
５００...圧縮ＬＢＡ管理テーブル
５１０...論理ボリューム管理テーブル
５２０...ボリューム状態管理テーブル
５３０...更新状態管理テーブル
５４０...世代・圧縮管理テーブル
６００、６００ｂ、６００ｃ...データ中継モジュール
【図１】
2006259962.tif 000003
【図２】
2006259962.tif 000004
【図３】
2006259962.tif 000005
【図４】
2006259962.tif 000006
【図５】
2006259962.tif 000007
【図６】
2006259962.tif 000008
【図７】
2006259962.tif 000009
【図８】
2006259962.tif 000010
【図９】
2006259962.tif 000011
【図１０】
2006259962.tif 000012
【図１１】
2006259962.tif 000013
【図１２】
2006259962.tif 000014
【図１３】
2006259962.tif 000015
【図１４】
2006259962.tif 000016
【図１５】
2006259962.tif 000017
【図１６】
2006259962.tif 000018
【図１７】
2006259962.tif 000019
【図１８】
2006259962.tif 000020
【図１９】
2006259962.tif 000021
【図２０】
2006259962.tif 000022
【図２１】
2006259962.tif 000023
【図２２】
2006259962.tif 000024
【図２３】
2006259962.tif 000025
【図２４】
2006259962.tif 000026
【図２５】
2006259962.tif 000027