(57)【特許請求の範囲】
【請求項１】
ストレージ制御装置において、
記憶部と、
書込みの対象となる対象データに、該対象データに基づく誤り検出符号及び第１の書込み先に関する情報を含む第１の符号情報を付した第１の符号付きデータを複数取得し、
前記各第１の符号付きデータから前記第１の符号情報を除外して前記対象データを取得し、該対象データの重複を排除して、残った前記対象データについて誤り検出符号及び第２の書込み先に関する情報を含む第２の符号情報を生成し、前記第２の符号情報を含む第２の符号付きデータを前記ストレージ制御装置の外部に接続された記憶装置に書き込ませるとともに、前記各第１の符号付きデータから除外された前記第１の符号情報と、該第１の符号情報と前記対象データとの関係を特定する情報とを含むコード情報と、前記重複の排除によって排除された前記対象データを復元するための復元情報とを前記記憶部に格納する制御を行う制御部と
を有する、ストレージ制御装置。
【請求項２】
前記制御部は、さらに、
前記記憶装置から前記第２の符号付きデータを読み出して、該第２の符号付きデータに含まれる前記第２の符号情報を用いて該第２の符号付きデータに含まれる前記対象データの正当性をチェックし、
該対象データが正常の場合、該対象データに対応する重複排除前の前記対象データに対応する前記復元情報を前記記憶部から読み出して、該復元情報を用いて重複排除前の前記対象データを復元し、前記記憶部に格納された該対象データに対応する前記第１の符号情報を付加してバッファ領域に格納し、
該第１の符号情報が付加された該対象データを前記バッファ領域から読み出して、該第１の符号情報を用いて該対象データの正当性をチェックする
請求項１に記載のストレージ制御装置。
【請求項３】
前記制御部は、前記重複の排除によって残った前記対象データのそれぞれについて、該対象データを圧縮した圧縮データを所定サイズ毎に分割して分割データを生成し、所定サイズより小さい前記分割データには所定のデータを付加して前記所定サイズとなるようにサイズを調整し、該分割データに基づいて前記第２の符号情報を生成する
請求項１又は２に記載のストレージ制御装置。
【請求項４】
コンピュータに、
書込みの対象となる対象データに、該対象データに基づく誤り検出符号及び第１の書込み先に関する情報を含む第１の符号情報を付した第１の符号付きデータを複数取得し、
前記各第１の符号付きデータから前記第１の符号情報を除外して前記対象データを取得し、該対象データの重複を排除して、残った前記対象データについて誤り検出符号及び第２の書込み先に関する情報を含む第２の符号情報を生成し、前記第２の符号情報を含む第２の符号付きデータを前記コンピュータの外部に接続された記憶装置に書き込ませるとともに、前記各第１の符号付きデータから除外された前記第１の符号情報と、該第１の符号情報と前記対象データとの関係を特定する情報とを含むコード情報と、前記重複の排除によって排除された前記対象データを復元するための復元情報とを、前記コンピュータが有する記憶部に格納する制御を行う
処理を実行させる、プログラム。
【請求項５】
前記コンピュータに、
前記記憶装置から前記第２の符号付きデータを読み出して、該第２の符号付きデータに含まれる前記第２の符号情報を用いて該第２の符号付きデータに含まれる前記対象データの正当性をチェックし、
該対象データが正常の場合、該対象データに対応する重複排除前の前記対象データに対応する前記復元情報を前記記憶部から読み出して、該復元情報を用いて重複排除前の前記対象データを復元し、前記記憶部に格納された該対象データに対応する前記第１の符号情報を付加してバッファ領域に格納し、
該第１の符号情報が付加された該対象データを前記バッファ領域から読み出して、該第１の符号情報を用いて該対象データの正当性をチェックする
処理をさらに実行させる、請求項４記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、及びプログラムに関する。
【背景技術】
【０００２】
近年、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）技術などを用いて複数のＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）を冗長化構成とし、データの信頼性向上及び大容量化を実現したストレージシステムが広く利用されている。また、データの信頼性を向上させるために、ＨＤＤやＳＳＤなどの記憶装置に書き込まれるデータに誤り検出符号（例えば、ＣＲＣ（Cyclic Redundancy Check）符号）を付加することも行われている。こうした技術によりストレージシステムの信頼性が維持されている。
【０００３】
ところで、技術発展に伴って記憶装置の容量も増大してはいるが、ユーザが利用するデータの量も急速に増大している。そのため、記憶装置に書き込むデータの量を削減する技術が研究されている。その１つとして、重複排除と呼ばれる技術が開発された。この技術は、記憶装置に書き込まれるデータや既に記憶装置に書込み済みのデータの中で内容が重複する複数のデータ部分（チャンク）を特定し、特定した１つのチャンクを残し、これと内容が重複する他のチャンクを除去する技術である。
【０００４】
他のチャンクを除去する際、ストレージシステムは、残したチャンクと他のチャンクとの関係を示す情報（リパースポイント）を生成する。そして、他のチャンクに対する読み出し要求を受けた場合、ストレージシステムは、リパースポイントに基づいて、残したチャンクを特定し、特定したチャンクを用いて応答処理を実行する。この重複排除を適用することで、記憶装置の容量を効率的に利用することができる。また、ＳＳＤのように書き換え回数に制限がある記憶装置については、書き換え回数の低減に寄与する。
【０００５】
上記のように、データの信頼性を向上させるため、記憶装置に書き込まれるデータにはＣＲＣ符号とデータの書込み先を示す情報とを含むチェックコードが付加されることがある。このようなチェックコード付きのデータについて重複排除を行う技術として、データからチェックコードを分離して重複排除を実施し、重複排除後のデータに、重複排除前に分離したチェックコードを連結して記憶装置に書き込む技術が提案されている。
【０００６】
なお、ＣＲＣ符号に関し、圧縮前のデータからＣＲＣ符号を生成し、このＣＲＣ符号と、圧縮後のデータにダミー符号を付加したデータから生成されるＣＲＣ符号とが一致するようにダミー符号を生成する技術が提案されている。この技術では、圧縮後のデータと共に、ダミー符号及び圧縮前のデータから生成したＣＲＣ符号が記憶装置に書き込まれる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特表２０１３−５３２８５３号公報
【特許文献２】特開平８−１１６２７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
同じデータから生成したＣＲＣ符号は同じ値をとるが、チェックコードには、そのデータの書込み先に関する情報が含まれる。データの内容が同じでも書込み先は異なることが多いため、チェックコードを含めて重複排除をすると、除去できるデータが少なくなる。そのため、記憶領域の利用効率を高める上で、チェックコードを分離してから重複排除を実施する方法は有効である。
【０００９】
但し、重複排除後に残ったデータは圧縮してから記憶装置に書き込まれうる。この場合、重複排除の際に分離したチェックコードを圧縮後のデータに連結して記憶装置に書き込んでも、そのチェックコードを圧縮後のデータに生じた誤りの判定に利用できないため、信頼性が低下してしまう。一方、上述したダミー符号の生成方法に係る技術は重複排除を全く考慮していない。
【００１０】
そのため、圧縮に限らず、重複排除後のデータにストレージシステムで何らかの変更が加えられうる場合には、変更後のデータについて信頼性を保証する仕組みを設けることがストレージシステムの信頼性を維持する上で有効である。
【００１１】
本開示の一態様によれば、信頼性を低下させずに記憶装置の容量効率を高めることが可能なストレージ制御装置、及びプログラムが提供される。
【課題を解決するための手段】
【００１２】
一態様によれば、書込みの対象となる対象データに、該対象データに基づく誤り検出符号及び第１の書込み先に関する情報を含む第１の符号情報を付した第１の符号付きデータを複数取得し、各第１の符号付きデータから第１の符号情報を除外して対象データを取得し、該対象データの重複を排除して、残った対象データについて誤り検出符号及び第２の書込み先に関する情報を含む第２の符号情報を生成し、第２の符号情報を含む第２の符号付きデータを記憶装置に書き込ませる制御部を有する、ストレージ制御装置が提供される。
【発明の効果】
【００１３】
本発明によれば、信頼性を低下させずに記憶装置の容量効率を高めることができる。
【図面の簡単な説明】
【００１４】
【図１】第１実施形態に係るストレージ制御装置の一例を示した図である。
【図２】重複排除について説明するための図である。
【図３】チェックコードについて説明するための図である。
【図４】重複排除の効率について説明するための図である。
【図５】第２実施形態に係るストレージシステムの一例を示した図である。
【図６】第２実施形態に係るコントローラの機能の一例を示した図である。
【図７】第２実施形態に係るストレージ制御装置による書込み処理の一例を示した図である。
【図８】第２実施形態に係るストレージ制御装置による書込み処理の一変形例を示した第１の図である。
【図９】第２実施形態に係るストレージ制御装置による書込み処理の一変形例を示した第２の図である。
【図１０】第２実施形態に係るストレージシステムにおけるデータの書込みについて、処理の流れを示したシーケンス図である。
【図１１】第２実施形態に係るコントローラによる重複排除・圧縮処理の流れを示したフロー図である。
【図１２】第２実施形態に係るコントローラによるチェックコード（Ｃｏｄｅ（Ｐ））の付加処理の流れを示したフロー図である。
【図１３】第２実施形態に係るストレージシステムにおける読み出しについて、処理の流れを示したシーケンス図である。
【発明を実施するための形態】
【００１５】
以下に添付図面を参照しながら、本発明の実施形態について説明する。なお、本明細書及び図面において実質的に同一の機能を有する要素については、同一の符号を付することにより重複説明を省略する場合がある。
【００１６】
＜１．第１実施形態＞
図１を参照しながら、第１実施形態について説明する。図１は、第１実施形態に係るストレージ制御装置の一例を示した図である。第１実施形態は、誤り検出に用いる符号情報が付加されたデータの重複排除に関し、重複排除後のデータに対する信頼性を高めたストレージシステムを提供する。
【００１７】
図１に示したストレージ制御装置１０は、第１実施形態に係るストレージ制御装置の一例である。ストレージ制御装置１０及び記憶装置２０は、サーバなどのホストコンピュータ（非図示）から受けた読み書き命令に応じて記憶装置２０に対するデータの読み書きを実施するストレージ装置として動作する。このストレージ装置とホストコンピュータとを含めてストレージシステムと称する場合がある。
【００１８】
図１に示すように、ストレージ制御装置１０は、制御部１１及び記憶部１２を有する。ストレージ制御装置１０は、記憶装置２０に接続されている。記憶装置２０は、例えば、ＨＤＤやＳＳＤである。記憶装置２０は、複数のＨＤＤやＳＳＤを組み合わせ、ＲＡＩＤ技術によって冗長化したディスクアレイであってもよい。
【００１９】
制御部１１は、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサである。但し、制御部１１は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの電子回路であってもよい。制御部１１は、例えば、記憶部１２又は他のメモリに記憶されたプログラムを実行する。記憶部１２は、ＲＡＭ（Random Access Memory）などの揮発性記憶装置、或いは、ＨＤＤやフラッシュメモリなどの不揮発性記憶装置である。
【００２０】
制御部１１は、第１の符号付きデータＣＤ００、ＣＤ１１、ＣＤ０２、ＣＤ２３を取得する。第１の符号付きデータＣＤ００、ＣＤ１１、ＣＤ０２、ＣＤ２３は、（ii）に示すように、書込みの対象となる対象データＤ０、Ｄ１、Ｄ０、Ｄ２に、それぞれ第１の符号情報Ｃ０、Ｃ１、Ｃ２、Ｃ３を付したデータである。
【００２１】
第１の符号情報Ｃ０、Ｃ１、Ｃ２、Ｃ３は、（i）に示すように、それぞれ対象データＤ０、Ｄ１、Ｄ０、Ｄ２に基づく誤り検出符号及び第１の書込み先に関する情報を含む。第１の符号情報Ｃ０は、誤り検出符号Ｃｈ０と第１の書込み先に関する情報ＩＤ０とを含む。
【００２２】
誤り検出符号Ｃｈ０は、対象データＤ０から計算されたＣＲＣ符号である。第１の書込み先に関する情報ＩＤ０は、対象データＤ０が書き込まれる論理ユニット（ＬＵ：Logical Unit）の位置を特定するための情報を含む。例えば、第１の書込み先に関する情報ＩＤ０は、対象データＤ０が書き込まれる論理領域の先頭アドレスやオフセット値を含む。なお、第１の符号情報Ｃ０と同様に、第１の符号情報Ｃ１、Ｃ２、Ｃ３も、それぞれ対象データＤ１、Ｄ２、Ｄ３に関する誤り検出符号と第１の書込み先に関する情報とを含む。
【００２３】
制御部１１は、（iii）に示すように、各第１の符号付きデータＣＤ００、ＣＤ１１、ＣＤ０２、ＣＤ２３から第１の符号情報Ｃ０、Ｃ１、Ｃ２、Ｃ３を除外して対象データＤ０、Ｄ１、Ｄ０、Ｄ２を取得する。なお、制御部１１は、（iv）に示すように、第１の符号付きデータＣＤ００、ＣＤ１１、ＣＤ０２、ＣＤ２３から除外した第１の符号情報Ｃ０、Ｃ１、Ｃ２、Ｃ３を記憶部１２に格納しておいてもよい。
【００２４】
制御部１１は、対象データＤ０、Ｄ１、Ｄ０、Ｄ２の重複を排除する。図１の例では、第１の符号付きデータＣＤ００、ＣＤ０２から取得された２つの対象データＤ０が重複しているため、制御部１１は、一方を残して他方を排除（削除）する。したがって、図１の例では、（v）に示すように、対象データＤ０、Ｄ１、Ｄ２だけが残る。
【００２５】
制御部１１は、残った対象データＤ０、Ｄ１、Ｄ２について誤り検出符号及び第２の書込み先に関する情報を含む第２の符号情報Ｃ４、Ｃ５、Ｃ６を生成する。例えば、制御部１１は、対象データＤ０、Ｄ１、Ｄ２をそれぞれ圧縮して圧縮後のデータＤ０ｃ、Ｄ１ｃ、Ｄ２ｃを生成し、圧縮後のデータＤ０ｃ、Ｄ１ｃ、Ｄ２ｃのそれぞれから誤り検出符号を計算する。そして、制御部１１は、計算した誤り検出符号及び第２の書込み先に関する情報を含む第２の符号情報Ｃ４、Ｃ５、Ｃ６を生成する。第２の書込み先に関する情報は、圧縮後のデータＤ０ｃ、Ｄ１ｃ、Ｄ２ｃが書き込まれる記憶装置２０の書込み位置を特定するための情報（例えば、物理アドレスなど）を含む。例えば、第２の書込み先に関する情報は、圧縮後のデータＤ０ｃ、Ｄ１ｃ、Ｄ２ｃが書き込まれる物理領域の先頭アドレスやオフセット値を含む。なお、記憶装置２０が複数のＨＤＤを組み合わせたＲＡＩＤ装置である場合、第２の書込み先に関する情報としては、ＨＤＤのスロット番号とＨＤＤのＬＢＡ（Logical Block Addressing）とを組み合わせた情報を適用することができる。
【００２６】
制御部１１は、第１の符号情報Ｃ０、Ｃ１、Ｃ２、Ｃ３とは独立して生成した第２の符号情報Ｃ４、Ｃ５、Ｃ６を圧縮後のデータＤ０ｃ、Ｄ１ｃ、Ｄ２ｃに付加して第２の符号付きデータＣＤ０４、ＣＤ１５、ＣＤ２６を生成する。そして、制御部１１は、（vi）に示すように、第２の符号付きデータＣＤ０４、ＣＤ１５、ＣＤ２６を記憶装置２０に書き込む。
【００２７】
上記のように、重複排除の前に第１の符号付きデータから第１の符号情報を排除し、対象データを対象に重複排除することで効率的にデータの重複を排除することができる。また、重複排除後の対象データについて新たに第２の符号情報を生成し、この第２の符号情報を付加した第２の符号付きデータを記憶装置２０に書き込むことで、記憶装置２０から読み出したデータの正誤をチェックすることが可能になる。その結果、ストレージシステムの信頼性を低下させることなく、効率的な重複排除によって記憶装置２０の容量効率を高めることができる。
【００２８】
なお、図１の例では、重複排除後の対象データを圧縮しているが、一部の対象データだけが圧縮される場合や、圧縮以外の処理により対象データの内容に変更が加えられる場合に対しても同様に第１実施形態の技術を応用することができる。つまり、第１の符号情報と無相関に第２の符号情報が生成されるため、第１の符号情報で対象データの正しさが保証されなくなるような変更が対象データに加えられる場合でも、記憶装置２０に書き込まれたデータの誤りを検出することができる。
【００２９】
以上、第１実施形態について説明した。
＜２．第２実施形態＞
次に、第２実施形態について説明する。第２実施形態は、ＣＲＣを含むチェックコードが付加されたデータの重複排除に関し、重複排除後のデータに対する信頼性を高めたストレージシステムを提供する。
【００３０】
（重複排除の効率について）
図２に示すように、重複排除とは、内容が同じデータが複数存在する場合に、１つのデータを残して同じ内容のデータを消去する技術である。なお、図２は、重複排除について説明するための図である。一例として、図２（Ａ）には、Ｄａｔａ０、Ｄａｔａ１、Ｄａｔａ０、Ｄａｔａ２、Ｄａｔａ３を含む元データを示した。この例では、左側から１番目と３番目が同じＤａｔａ０であるから、図２（Ｂ）に示すように、一方のＤａｔａ０を残して他方のＤａｔａ０が重複排除により消去される。
【００３１】
重複排除により消去されたＤａｔａ０については、残されたＤａｔａ０の格納場所を示す情報などを含む復元情報が生成される。この復元情報は、リパースポイントと呼ばれることがある。重複排除後のデータから元データを復元する場合、復元情報に基づいて残されたＤａｔａ０が取得され、消去されたＤａｔａ０の代わりに復元に利用される。重複排除を利用することで、データ量を削減することができ、データが格納される記憶領域の容量を効率的に利用できるようになる。
【００３２】
ところで、ストレージシステムでは、データの信頼性を高めるためにデータにチェックコードが付加される。チェックコードは、例えば、図３のような構造を有する。図３は、チェックコードについて説明するための図である。図３に示すように、チェックコードには、データの誤り検出に用いるＣＲＣ符号と、データの格納場所に関する位置情報とが含まれる。ＣＲＣ符号はデータに基づいて計算される。位置情報は、例えば、データの格納場所となるＬＵの先頭アドレス及びオフセットなどで表現される。
【００３３】
データの内容が同じであればＣＲＣ符号も同じ値をとる。一方、重複排除の対象となるデータについて、内容が同じデータ同士であっても、多くの場合には格納場所が異なることが多い。そのため、図４に示すように、チェックコードを付加したデータを対象に重複排除を実施しようとすると、チェックコードの位置情報が異なるために消去できないデータの割合が増えてしまう。図４は、重複排除の効率について説明するための図である。
【００３４】
図４の例では、元データに対してチェックコードＣ０、Ｃ１、Ｃ２、Ｃ３、Ｃ４、Ｃ５が付加されている。チェックコードＣ０、Ｃ３が互いに異なる位置情報を含む場合、Ｄａｔａ０が共通していても重複排除による一方の消去は行われない。しかし、チェックコードを外すとデータの信頼性が低下するため、チェックコードによる信頼性の維持と、重複除去による記憶領域の効率向上とを両立させる工夫が求められる。第２実施形態は、これら２つの要求を両立することができるストレージシステムを提供する。
【００３５】
［２−１．ストレージシステム］
図５を参照しながら、第２実施形態に係るストレージシステムについて説明する。図５は、第２実施形態に係るストレージシステムの一例を示した図である。
【００３６】
図５に示すように、第２実施形態に係るストレージシステムは、サーバ５０、ストレージ制御装置１００、及びディスク２００を含む。ストレージ制御装置１００及びディスク２００は、サーバ５０が利用するデータを格納するストレージ装置として機能する。
【００３７】
なお、ここでは説明の都合上、「ディスク」と表現するが、ＳＳＤなどの半導体記憶装置を含む回転機構を有しない記憶装置をディスク２００として、又はディスク２００の一部として利用してもよい。ディスク２００は、複数のＨＤＤやＳＳＤなどを組み合わせたディスクアレイであってもよい。サーバ５０、ストレージ制御装置１００、ディスク２００は、例えば、ＬＡＮ（Local Area Network）やＦＣ（Fibre Channel）などの通信回線により接続される。
【００３８】
サーバ５０は、ＣＰＵなどのプロセッサ、ＲＡＭなどの揮発性メモリ、及びＨＤＤやＳＳＤなどの不揮発性メモリを有するコンピュータである。サーバ５０は、例えば、プロセッサ及び揮発性メモリなどにより、不揮発性メモリに格納されたアプリケーションプログラムに規定された処理を実行する。サーバ５０は、ストレージ制御装置１００に対し、データの書込み処理及びデータの読み出し処理を指示する。ストレージ制御装置１００は、サーバ５０から受けた読み書き要求に応じてディスク２００に対するデータの読み書きを制御する。
【００３９】
（ハードウェア）
ここで、ストレージ制御装置１００のハードウェアについて説明する。
図５に示すように、ストレージ制御装置１００は、メモリ１０１、チャネルアダプタ１０２、コントローラ１０３、及びディスクアダプタ１０４を有する。以下、チャネルアダプタ１０２をＣＡ、コントローラ１０３をＣＭ、ディスクアダプタ１０４をＤＡと表記する場合がある。
【００４０】
メモリ１０１は、ディスク２００に比べて読み書き速度が速いデバイスである。メモリ１０１は、バッファ１０１ａとして機能する記憶領域と、キャッシュ１０１ｂとして機能する記憶領域とを有する。バッファ１０１ａには、サーバ５０からチャネルアダプタ１０２が受信したデータ、及びチャネルアダプタ１０２からサーバ５０へ送信されるデータが一時的に格納される。キャッシュ１０１ｂには、ディスク２００に書き込まれるデータが一時的に格納される。なお、バッファ１０１ａとして用いるメモリと、キャッシュ１０１ｂとして用いるメモリとを別体としてもよい。
【００４１】
チャネルアダプタ１０２は、サーバ５０との間でデータや制御信号をやりとりする通信アダプタである。また、チャネルアダプタ１０２は、ＣＲＣ符号の計算などの演算を実行可能なＣＰＵを有する。コントローラ１０３は、ストレージ制御装置１００の動作を制御するプログラムなどの処理を実行可能なＣＰＵ及びＲＡＭを有する。ディスクアダプタ１０４は、ディスク２００と接続する接続アダプタである。また、ディスクアダプタ１０４は、ＣＲＣ符号のチェック計算などの演算を実行可能なＣＰＵを有する。
【００４２】
［２−２．機能］
次に、チャネルアダプタ１０２、コントローラ１０３、及びディスクアダプタ１０４の機能について説明する。
【００４３】
（２−２−１．チャネルアダプタ１０２の機能）
まず、チャネルアダプタ１０２の機能について説明する。
（書込み時）
チャネルアダプタ１０２は、サーバ５０から受信したデータに基づいてＣＲＣ符号を生成する。また、チャネルアダプタ１０２は、生成したＣＲＣ符号と、データの書込み先に関する位置情報とを含むチェックコードをデータに付加する。そして、チャネルアダプタ１０２は、チェックコードを付加したデータをバッファ１０１ａに格納する。以下、バッファ１０１ａに格納されたデータに付加されるチェックコードをＣｏｄｅ（Ｌ）、Ｃｏｄｅ（Ｌ）に含まれるＣＲＣ符号をＣＲＣ（Ｌ）と表記する場合がある。なお、Ｃｏｄｅ（Ｌ）は、サーバ５０がデータに付加してもよい。
【００４４】
（読み出し時）
チャネルアダプタ１０２は、Ｃｏｄｅ（Ｌ）が付加されたデータをバッファ１０１ａから読み出し、Ｃｏｄｅ（Ｌ）に含まれるＣＲＣ（Ｌ）を用いてデータの誤り検出を実施する。誤りが検出されなかった場合、チャネルアダプタ１０２は、データからＣｏｄｅ（Ｌ）を除去し、データをサーバ５０へ送信する。誤りが検出された場合、チャネルアダプタ１０２は、データの読み出しエラーをサーバ５０へ通知する。
【００４５】
以上、チャネルアダプタ１０２の機能について説明した。
（２−２−２．コントローラ１０３の機能）
次に、図６を参照しながら、コントローラ１０３の機能について説明する。図６は、第２実施形態に係るコントローラの機能の一例を示した図である。
【００４６】
図６に示すように、コントローラ１０３は、記憶部１３１、Ｒ／Ｗ制御部１３２、チェックコード管理部１３３、及び重複排除・圧縮処理部１３４を有する。なお、記憶部１３１の機能は、ＲＡＭやＨＤＤなどを用いて実現できる。Ｒ／Ｗ制御部１３２、チェックコード管理部１３３、及び重複排除・圧縮処理部１３４の機能は、ＣＰＵなどを用いて実現できる。
【００４７】
記憶部１３１には、コード情報１３１ａ、及び復元情報１３１ｂが格納される。コード情報１３１ａは、バッファ１０１ａから読み出したデータに付加されているＣｏｄｅ（Ｌ）、及びＣｏｄｅ（Ｌ）とデータとの関係を特定する情報を含む。復元情報１３１ｂは、重複排除により除外したデータと同じ内容の残したデータを特定する情報である。Ｒ／Ｗ制御部１３２は、ディスクアダプタ１０４を介してディスク２００に対するデータの読み書き処理を制御する。
【００４８】
（書込み時）
チェックコード管理部１３３は、バッファ１０１ａからＣｏｄｅ（Ｌ）が付加されたデータを読み出し、Ｃｏｄｅ（Ｌ）に含まれるＣＲＣ（Ｌ）を用いてデータの誤り検出を実施する。
【００４９】
誤りが検出された場合、チェックコード管理部１３３は、チャネルアダプタ１０２を介してサーバ５０に書込みエラーを通知する。誤りが検出されなかった場合、チェックコード管理部１３３は、データからＣｏｄｅ（Ｌ）を除去し、除去したＣｏｄｅ（Ｌ）をコード情報１３１ａとして記憶部１３１に格納する。チェックコード管理部１３３は、Ｃｏｄｅ（Ｌ）を除去したデータを重複排除・圧縮処理部１３４に入力する。
【００５０】
重複排除・圧縮処理部１３４は、チェックコード管理部１３３から入力されたデータの重複排除を実施する（図２を参照）。重複排除の方法としては、例えば、バッファ１０１ａから読み出されたデータの集合を対象にする方法や、バッファ１０１ａのデータ、キャッシュ１０１ｂのデータ及びディスク２００のデータを含むデータの集合を対象にする方法を適用しうる。
【００５１】
重複排除・圧縮処理部１３４は、重複排除後に残ったデータを圧縮して圧縮データを生成する。そして、重複排除・圧縮処理部１３４は、圧縮データを単位サイズの分割データに分割し、分割データに基づくＣＲＣ符号を計算する。また、重複排除・圧縮処理部１３４は、計算したＣＲＣ符号と分割データの書込み先に関する位置情報とを含むチェックコードを生成する。以下、重複排除・圧縮処理部１３４が計算したＣＲＣ符号をＣＲＣ（Ｐ）、ＣＲＣ（Ｐ）を含むチェックコードをＣｏｄｅ（Ｐ）と表記する場合がある。
【００５２】
なお、Ｃｏｄｅ（Ｐ）に含まれる書込み先に関する位置情報は、分割データが書き込まれるディスク２００上の位置を特定するための情報を含む。例えば、この位置情報は、ディスク２００の物理領域における書込み先の先頭アドレスとオフセットとを含む。つまり、Ｃｏｄｅ（Ｌ）に含まれる位置情報と、Ｃｏｄｅ（Ｐ）に含まれる位置情報とは異なる。
【００５３】
重複排除・圧縮処理部１３４は、生成したＣｏｄｅ（Ｐ）を分割データに付加する。そして、重複排除・圧縮処理部１３４は、Ｃｏｄｅ（Ｐ）を付加した分割データをキャッシュ１０１ｂに書き込む。そして、重複排除・圧縮処理部１３４は、チャネルアダプタ１０２を介してデータの書込み完了をサーバ５０へと通知する。なお、データの書込み完了を通知するタイミングは、ディスク２００への書込みが完了した時点であってもよい。
【００５４】
（読み出し時）
サーバ５０からコントローラ１０３がデータの読み出し要求（ＲＥＡＤ要求）を受けると、重複排除・圧縮処理部１３４は、キャッシュ１０１ｂ及び／又はディスク２００から読み出す分割データを特定する。ＲＥＡＤ要求で指定されたデータが書込み時に重複排除されている場合、重複排除・圧縮処理部１３４は、復元情報１３１ｂを参照し、復元に用いるデータの分割データを全て特定する。
【００５５】
特定した分割データがキャッシュ１０１ｂにある場合、重複排除・圧縮処理部１３４は、特定した分割データをキャッシュ１０１ｂから読み出す。
特定した分割データがディスク２００にある場合、重複排除・圧縮処理部１３４は、Ｒ／Ｗ制御部１３２を介して、特定した分割データをディスク２００から読み出す。このとき、ディスク２００から読み出した分割データのエラーがディスクアダプタ１０４から通知される場合がある。この場合、重複排除・圧縮処理部１３４は、チャネルアダプタ１０２を介してサーバ５０に読み出しエラーを通知する。
【００５６】
特定した分割データが全て正常に読み出せた場合、重複排除・圧縮処理部１３４は、読み出した分割データに付加されているＣｏｄｅ（Ｐ）からＣＲＣ（Ｐ）を取得し、分割データの誤り検出を実施する。
【００５７】
誤りが検出された場合、重複排除・圧縮処理部１３４は、チャネルアダプタ１０２を介してサーバ５０に読み出しエラーを通知する。誤りが検出されなかった場合、重複排除・圧縮処理部１３４は、分割データからＣｏｄｅ（Ｐ）を除去する。そして、重複排除・圧縮処理部１３４は、分割データを結合して圧縮データを復元すると共に圧縮データを伸張し、復元情報１３１ｂに基づいて重複排除前のデータを復元する。
【００５８】
チェックコード管理部１３３は、コード情報１３１ａとして記憶部１３１に格納しておいたＣｏｄｅ（Ｌ）を取得し、重複排除・圧縮処理部１３４が復元したデータに付加する。そして、チェックコード管理部１３３は、Ｃｏｄｅ（Ｌ）を付加したデータをバッファ１０１ａに書き込む。
【００５９】
以上、コントローラ１０３の機能について説明した。
（２−２−３．ディスクアダプタ１０４の機能）
次に、ディスクアダプタ１０４の機能について説明する。
【００６０】
（書込み時）
ディスクアダプタ１０４は、所定の書込み条件を充足した場合に、キャッシュ１０１ｂからＣｏｄｅ（Ｐ）が付加されたデータを読み出す。書込み条件は、例えば、キャッシュ１０１ｂにデータが書き込まれてから経過した時間が所定の閾値を超えたことや、キャッシュ１０１ｂの空き容量が所定容量以下となったことなどである。
【００６１】
ディスクアダプタ１０４は、キャッシュ１０１ｂから読み出したデータに付加されているＣｏｄｅ（Ｐ）からＣＲＣ（Ｐ）を取得する。そして、ディスクアダプタ１０４は、取得したＣＲＣ（Ｐ）に基づいてデータの誤り検出を実施する。誤りが検出されなかった場合、ディスクアダプタ１０４は、Ｃｏｄｅ（Ｐ）が付加されたデータをディスク２００に書き込む。誤りが検出された場合、ディスクアダプタ１０４は、キャッシュ１０１ｂから読み出したデータのエラーをコントローラ１０３へ通知する。
【００６２】
（読み出し時）
ディスクアダプタ１０４は、ディスク２００からＣｏｄｅ（Ｐ）が付加されたデータを読み出す。ディスクアダプタ１０４は、読み出したデータに付加されたＣｏｄｅ（Ｐ）に含まれるＣＲＣ（Ｐ）を取得する。そして、ディスクアダプタ１０４は、取得したＣＲＣ（Ｐ）に基づいてデータの誤り検出を実施する。誤りが検出されなかった場合、ディスクアダプタ１０４は、Ｃｏｄｅ（Ｐ）が付加されたデータをキャッシュ１０１ｂに書き込む。誤りが検出された場合、ディスクアダプタ１０４は、読み出したデータのエラーをコントローラ１０３へ通知する。
【００６３】
以上、ディスクアダプタ１０４の機能について説明した。
（２−２−４．書込み処理＃１）
ここで、図７を参照しながら、データの書込み時におけるチェックコードの管理に係る処理の内容について、さらに説明する。図７は、第２実施形態に係るストレージ制御装置による書込み処理の一例を示した図である。
【００６４】
図７（Ａ）の例において、サーバ５０から書込み要求（ＷＲＩＴＥ要求）と共にチャネルアダプタ１０２に入力されたデータ（元データ）は、Ｄａｔａ０、Ｄａｔａ１、Ｄａｔａ０、Ｄａｔａ２、Ｄａｔａ３を含む。この元データは、Ｄａｔａ０の部分が重複している。チャネルアダプタ１０２は、図７（Ｂ）に示すように、Ｄａｔａ０、Ｄａｔａ１、Ｄａｔａ０、Ｄａｔａ２、Ｄａｔａ３にそれぞれチェックコードＣ０、Ｃ１、Ｃ２、Ｃ３、Ｃ４を付加する。Ｃ０、Ｃ１、Ｃ２、Ｃ３、Ｃ４は、Ｃｏｄｅ（Ｌ）の一例である。
【００６５】
上記のように、チェックコードＣ０、Ｃ１、Ｃ２、Ｃ３、Ｃ４が付加されることで、チャネルアダプタ１０２からコントローラ１０３までの区間（配線や回路及びバッファ１０１ａを含む区間）で生じうるデータの誤りを検出可能になる。
【００６６】
次に、コントローラ１０３のチェックコード管理部１３３は、図７（Ｃ）に示すように、チェック済みのデータからチェックコードＣ０、Ｃ１、Ｃ２、Ｃ３、Ｃ４を分離する。そして、チェックコード管理部１３３は、分離したチェックコードＣ０、Ｃ１、Ｃ２、Ｃ３、Ｃ４をコード情報１３１ａとして記憶部１３１に保存する。
【００６７】
次に、コントローラ１０３の重複排除・圧縮処理部１３４は、図７（Ｄ）に示すように、重複排除を実施する。この例では、Ｄａｔａ０の部分が重複しているため、１つの部分を残し、これと内容が重複する他の部分が全て消去される。このとき、重複排除で消去された部分を特定する復元情報１３１ｂが生成される（図７（Ｃ）を参照）。
【００６８】
次に、重複排除・圧縮処理部１３４は、図７（Ｅ）に示すように、重複排除後に残ったＤａｔａ０、Ｄａｔａ１、Ｄａｔａ２、Ｄａｔａ３をそれぞれ圧縮した圧縮データＣｍｐ０、Ｃｍｐ１、Ｃｍｐ２、Ｃｍｐ３を生成する。そして、重複排除・圧縮処理部１３４は、圧縮データの集合を単位サイズ（この例ではＨＤＤ等の物理記憶装置への入出力コマンドの規約サイズに対応させた５１２Ｂｙｔｅ）毎に分割し、それぞれが単位サイズを有する分割データＤｉｖ０、Ｄｉｖ１、Ｄｉｖ２を生成する。
【００６９】
次に、チェックコード管理部１３３は、図７（Ｇ）に示すように、Ｄｉｖ０、Ｄｉｖ１、Ｄｉｖ２のそれぞれからＣＲＣ符号を計算し、計算したＣＲＣ符号を含むチェックコードＣ５、Ｃ６、Ｃ７を生成する。そして、チェックコード管理部１３３は、チェックコードＣ５、Ｃ６、Ｃ７をそれぞれＤｉｖ０、Ｄｉｖ１、Ｄｉｖ２に付加する。なお、チェックコードＣ５、Ｃ６、Ｃ７はＣｏｄｅ（Ｐ）の一例である。
【００７０】
上記のように、チェックコードＣ５、Ｃ６、Ｃ７が付加されることで、コントローラ１０３からディスク２００までの区間（配線や回路及びキャッシュ１０１ｂやディスク２００を含む区間）で生じうるデータの誤りを検出可能になる。
【００７１】
（２−２−５．書込み処理＃２：変形例）
図７の例では、ディスク２００に書き込まれるデータの単位サイズを基準に重複排除していたが、図８に示すように、単位サイズより大きなサイズのデータを基準に重複排除してもよい。また、複数の圧縮データが１つの分割データ内で混在（図７（Ｆ）を参照）しないように、図９に示すように、該圧縮データ毎に分割データを生成してもよい。ここでは、これらの変形例について説明する。
【００７２】
図８は、第２実施形態に係るストレージ制御装置による書込み処理の一変形例を示した第１の図である。図９は、第２実施形態に係るストレージ制御装置による書込み処理の一変形例を示した第２の図である。
【００７３】
図８の例は、（Ａ）に示すように、Ｄａｔａ００、Ｄａｔａ０１、Ｄａｔａ０２、Ｄａｔａ０３を含む２つの元データと、Ｄａｔａ１０、Ｄａｔａ１１、Ｄａｔａ１２、Ｄａｔａ１３を含む１つの元データとがコントローラ１０３に入力された場合を示している。つまり、Ｄａｔａ００、Ｄａｔａ０１、Ｄａｔａ０２、Ｄａｔａ０３が重複している。
【００７４】
チャネルアダプタ１０２は、図８（Ｂ）に示すように、２組のＤａｔａ００、…、Ｄａｔａ０３、及びＤａｔａ１０、…、Ｄａｔａ１３のそれぞれについてＣＲＣ符号を計算する。そして、チャネルアダプタ１０２は、計算したＣＲＣ符号を含むチェックコードＣ００、…、Ｃ０７、Ｃ１０、…、Ｃ１３を生成し、２組のＤａｔａ００、…、Ｄａｔａ０３、及びＤａｔａ１０、…、Ｄａｔａ１３のそれぞれに付加する。なお、Ｃ００、…、Ｃ０７、Ｃ１０、…、Ｃ１３は、Ｃｏｄｅ（Ｌ）の一例である。
【００７５】
上記のように、チェックコードＣ００、…、Ｃ０７、Ｃ１０、…、Ｃ１３が付加されることで、チャネルアダプタ１０２からコントローラ１０３までの区間（配線や回路及びバッファ１０１ａを含む区間）で生じうるデータの誤りを検出可能になる。
【００７６】
次に、コントローラ１０３のチェックコード管理部１３３は、図８（Ｃ）に示すように、チェック済みのデータからチェックコードＣ００、…、Ｃ０７、Ｃ１０、…、Ｃ１３を分離する。そして、チェックコード管理部１３３は、分離したチェックコードＣ００、…、Ｃ０７、Ｃ１０、…、Ｃ１３をコード情報１３１ａとして記憶部１３１に保存する。
【００７７】
次に、コントローラ１０３の重複排除・圧縮処理部１３４は、図８（Ｄ）に示すように、重複排除を実施する。このとき、重複排除・圧縮処理部１３４は、単位サイズ（この例では５１２Ｂｙｔｅ）より大きいサイズ（この例では２ＫＢｙｔｅ）を基準に重複排除を実施する。図８の例では、合計サイズが２ＫＢｙｔｅとなるＤａｔａ００、…、Ｄａｔａ０３の集合が重複しているため、１つの集合を残し、これと内容が重複する他の集合が全て消去される。このとき、重複排除で消去された集合を特定する復元情報１３１ｂが生成される（図８（Ｃ）を参照）。
【００７８】
次に、重複排除・圧縮処理部１３４は、図９（Ｅ）に示すように、重複排除後に残ったＤａｔａ００、…、Ｄａｔａ０３の集合、及びＤａｔａ１０、…、Ｄａｔａ１３の集合をそれぞれ集合毎に圧縮した圧縮データＣｍｐ０ｘ、Ｃｍｐ１ｘを生成する。そして、重複排除・圧縮処理部１３４は、図９（Ｆ）に示すように、圧縮データＣｍｐ０ｘ、Ｃｍｐ１ｘをそれぞれ単位サイズ（この例では５１２Ｂｙｔｅ）毎に分割する。
【００７９】
例えば、図９（Ｆ）のように、圧縮データＣｍｐ０ｘを分割データＤｉｖ００、Ｄｉｖ０１、Ｄｉｖ０２に分割した場合、一部の分割データＤｉｖ０２が単位サイズよりも小さなサイズになる場合がある。この場合、重複排除・圧縮処理部１３４は、分割データＤｉｖ０２にＮｕｌｌデータ（値０のデータ）を追加し、分割データＤｉｖ０２のサイズが単位サイズとなるようにサイズを調整する。圧縮データＣｍｐ１を分割した分割データＤｉｖ１１についても同様である。
【００８０】
次に、チェックコード管理部１３３は、図９（Ｇ）に示すように、Ｄｉｖ００、…、Ｄｉｖ０２、Ｄｉｖ１０、Ｄｉｖ１１のそれぞれからＣＲＣを計算し、計算したＣＲＣを含むチェックコードＣ１ｘ、…、Ｃ５ｘを生成する。そして、チェックコード管理部１３３は、チェックコードＣ１ｘ、…、Ｃ５ｘをそれぞれＤｉｖ００、…、Ｄｉｖ０２、Ｄｉｖ１０、Ｄｉｖ１１に付加する。なお、チェックコードＣ１ｘ、…、Ｃ５ｘはＣｏｄｅ（Ｐ）の一例である。
【００８１】
上記のように、チェックコードＣ１ｘ、…、Ｃ５ｘが付加されることで、コントローラ１０３からディスク２００までの区間（配線や回路及びキャッシュ１０１ｂやディスク２００を含む区間）で生じうるデータの誤りを検出可能になる。また、分割データと、重複排除の対象となる集合との関係が１対１になるため、重複排除前のデータを復元する際に用いるデータの特定及び取得にかかる処理が効率化される。
【００８２】
以上、チャネルアダプタ１０２、コントローラ１０３、及びディスクアダプタ１０４の機能について説明した。
［２−３．処理の流れ］
次に、処理の流れについて説明する。
【００８３】
（書込み動作）
まず、図１０を参照しながら、書込み処理の流れについて説明する。図１０は、第２実施形態に係るストレージシステムにおけるデータの書込みについて、処理の流れを示したシーケンス図である。
【００８４】
（Ｓ１０１）チャネルアダプタ１０２は、サーバ５０からＷＲＩＴＥ要求を受け付け、ＷＲＩＴＥ要求で指定されたデータを取得する。
（Ｓ１０２）チャネルアダプタ１０２は、サーバ５０から取得したデータに基づいてＣＲＣ符号（ＣＲＣ（Ｌ））を計算し、計算したＣＲＣ（Ｌ）とデータの書込み先に関する位置情報とを含むチェックコード（Ｃｏｄｅ（Ｌ））を生成する。そして、チャネルアダプタ１０２は、生成したＣｏｄｅ（Ｌ）をデータに付加する。
【００８５】
（Ｓ１０３、Ｓ１０４）チャネルアダプタ１０２は、Ｃｏｄｅ（Ｌ）を付加したデータをバッファ１０１ａに書き込む。そして、チャネルアダプタ１０２は、バッファ１０１ａへの書込みが完了した旨の通知をコントローラ１０３に入力する。
【００８６】
（Ｓ１０５）コントローラ１０３のチェックコード管理部１３３は、バッファ１０１ａから、Ｃｏｄｅ（Ｌ）が付加された書込み対象のデータを読み出す。
（Ｓ１０６）チェックコード管理部１３３は、読み出したデータに付加されたＣｏｄｅ（Ｌ）からＣＲＣ（Ｌ）を取得する。そして、チェックコード管理部１３３は、取得したＣＲＣ（Ｌ）を用いてデータの誤りの有無をチェックする。データに誤りがある場合、チェックコード管理部１３３は、チャネルアダプタ１０２を介してサーバ５０に書込みエラーを通知し、書込み処理を異常終了する。一方、データに誤りがない場合、処理はＳ１０７へと進む。
【００８７】
（Ｓ１０７）チェックコード管理部１３３は、データからＣｏｄｅ（Ｌ）を除去し、除去したＣｏｄｅ（Ｌ）をコード情報１３１ａとして記憶部１３１に保存する。
（Ｓ１０８）コントローラ１０３の重複排除・圧縮処理部１３４は、チェックコード管理部１３３によりＣｏｄｅ（Ｌ）が除去されたデータについて重複排除を実施する。
【００８８】
例えば、重複排除・圧縮処理部１３４は、バッファ１０１ａ、キャッシュ１０１ｂ、及びディスク２００にあるデータを参照し、内容が重複するデータが存在する場合には、書込み対象のデータの重複部分を消去する。そして、重複排除・圧縮処理部１３４は、消去した重複部分と同じ内容のデータを特定するための復元情報１３１ｂを生成する。
【００８９】
また、重複排除・圧縮処理部１３４は、重複排除後に残った書込み対象のデータを圧縮して圧縮データ（例えば、図９（Ｅ）を参照）を生成する。そして、重複排除・圧縮処理部１３４は、圧縮データを単位サイズに分割して分割データ（例えば、図９（Ｆ）を参照）を生成する。
【００９０】
（Ｓ１０９）チェックコード管理部１３３は、分割データに基づいてＣＲＣ符号（ＣＲＣ（Ｐ））を計算し、計算したＣＲＣ（Ｐ）と分割データの書込み先に関する位置情報とを含むチェックコード（Ｃｏｄｅ（Ｐ））を生成する。そして、チェックコード管理部１３３は、生成したＣｏｄｅ（Ｐ）を分割データに付加する。
【００９１】
（Ｓ１１０、Ｓ１１１）チェックコード管理部１３３は、Ｃｏｄｅ（Ｐ）を付加した分割データをキャッシュ１０１ｂに書き込む。そして、チェックコード管理部１３３は、チャネルアダプタ１０２を介して、データの書込みが完了した旨の通知をサーバ５０に送信する。つまり、キャッシュ１０１ｂへの書込みが完了したタイミングで、ＷＲＩＴＥ要求に対する完了応答がサーバ５０に通知される。
【００９２】
（Ｓ１１２）ディスクアダプタ１０４は、予め設定された書込み条件を充足したか否かを判定する。書込み条件は、例えば、キャッシュ１０１ｂにデータが書き込まれてから経過した時間が所定の閾値を超えたことや、キャッシュ１０１ｂの空き容量が所定容量以下となったことなどである。書込み条件を充足した場合、処理はＳ１１３へと進む。書込み条件を充足していない場合、Ｓ１１２の判定処理が繰り返される。
【００９３】
（Ｓ１１３）ディスクアダプタ１０４は、ディスク２００に書き込むデータをキャッシュ１０１ｂから読み出す。
例えば、ディスクアダプタ１０４は、キャッシュ１０１ｂに格納されているデータのうち、書き込まれてから経過した時間が所定の閾値を超えたデータをディスク２００に書き込むデータとしてキャッシュ１０１ｂから読み出す。また、ディスクアダプタ１０４は、より古いデータやより読み出し頻度が低いデータから順にディスク２００に書き込むデータを選択し、選択したデータをキャッシュ１０１ｂから読み出してもよい。
【００９４】
（Ｓ１１４）ディスクアダプタ１０４は、キャッシュ１０１ｂから読み出したデータに付加されているＣｏｄｅ（Ｐ）からＣＲＣ（Ｐ）を取得する。そして、ディスクアダプタ１０４は、取得したＣＲＣ（Ｐ）を用いてデータの誤りの有無をチェックする。データに誤りがある場合、ディスクアダプタ１０４は、コントローラ１０３に書込みエラーを通知する。データに誤りがない場合、処理はＳ１１５へと進む。
【００９５】
（Ｓ１１５）ディスクアダプタ１０４は、Ｃｏｄｅ（Ｐ）が付加されているデータをディスク２００に書き込む。Ｓ１１５の処理が完了すると、図１０に示した一連の処理は正常終了する。なお、ディスク２００への書込みが完了したタイミングで、ＷＲＩＴＥ要求に対する完了通知がサーバ５０に通知されるようにしてもよい。
【００９６】
（重複排除・圧縮処理）
ここで、図１１を参照しながら、重複排除・圧縮処理について、さらに説明する。図１１は、第２実施形態に係るコントローラによる重複排除・圧縮処理の流れを示したフロー図である。
【００９７】
（Ｓ１２１）コントローラ１０３の重複排除・圧縮処理部１３４は、バッファ１０１ａ内にあるデータの中から重複排除の対象とするデータを１つ選択する。
（Ｓ１２２）重複排除・圧縮処理部１３４は、Ｓ１２１で選択したデータと比較して重複排除するかを判定するための比較対象となるデータを１つ選択する。例えば、重複排除・圧縮処理部１３４は、バッファ１０１ａ、キャッシュ１０１ｂ、及びディスク２００の中から比較対象のデータを選択する。
【００９８】
（Ｓ１２３）重複排除・圧縮処理部１３４は、Ｓ１２１、Ｓ１２２で選択した各データのハッシュ値を取得する。なお、重複排除・圧縮処理部１３４は、データを選択する度にデータからハッシュ値を計算してもよいし、事前に計算したハッシュ値を記憶部１３１に格納しておき、利用する際に記憶部１３１から取得してもよい。
【００９９】
（Ｓ１２４）重複排除・圧縮処理部１３４は、Ｓ１２３で取得した２つのハッシュ値が一致するか否かを判定する。２つのハッシュ値が一致する場合、処理はＳ１２６へと進む。ハッシュ値としては、例えば、ＳＨＡ（Secure Hash Algorithm）−１などを利用することができる。ハッシュ値の一致は、その計算の元となったデータの一致を意味する。一方、２つのハッシュ値が一致しない場合、処理はＳ１２５へと進む。
【０１００】
（Ｓ１２５）重複排除・圧縮処理部１３４は、Ｓ１２２の処理で、比較対象のデータを選択し終えたか否かを判定する。比較対象のデータを選択し終えた場合、処理はＳ１２７へと進む。一方、未選択の比較対象のデータが存在する場合、処理はＳ１２２へと進む。
【０１０１】
（Ｓ１２６）重複排除・圧縮処理部１３４は、バッファ１０１ａ内のデータを除去し、除去したデータと同じ内容のデータを特定する復元情報１３１ｂを作成する。例えば、キャッシュ１０１ｂやディスク２００に格納されているデータを特定する復元情報１３１ｂとしては、例えば、そのデータの格納場所を示すアドレスなどを利用できる。また、バッファ１０１ａ内のデータを特定する復元情報１３１ｂとしては、例えば、そのデータのチェックコードに含まれる位置情報などを利用できる。
【０１０２】
（Ｓ１２７）重複排除・圧縮処理部１３４は、Ｓ１２１の処理で、バッファ１０１ａ内のデータを選択し終えたか否かを判定する。バッファ１０１ａ内のデータを選択し終えた場合、処理はＳ１２８へと進む。一方、バッファ１０１ａ内に未選択のデータが存在する場合、処理はＳ１２１へと進む。
【０１０３】
（Ｓ１２８）重複排除・圧縮処理部１３４は、重複排除後に残存するバッファ１０１ａ内のデータをそれぞれ圧縮し、圧縮データを生成する。Ｓ１２８の処理が完了すると、図１１に示した一連の処理は終了する。
【０１０４】
（Ｃｏｄｅ（Ｐ）の付加）
ここで、図１２を参照しながら、Ｃｏｄｅ（Ｐ）の付加処理について、さらに説明する。図１２は、第２実施形態に係るコントローラによるチェックコード（Ｃｏｄｅ（Ｐ））の付加処理の流れを示したフロー図である。
【０１０５】
（Ｓ１３１）コントローラ１０３の重複排除・圧縮処理部１３４は、圧縮データを１つ選択する。
（Ｓ１３２）重複排除・圧縮処理部１３４は、Ｓ１３１で選択した圧縮データを単位サイズに分割して分割データを生成する。例えば、重複排除・圧縮処理部１３４は、図９（Ｆ）に示すように、単位サイズに満たない分割データについて、Ｎｕｌｌデータ（値０のデータ）を追加して単位サイズとなるようにサイズを調整する（パディング）。
【０１０６】
（Ｓ１３３）コントローラ１０３のチェックコード管理部１３３は、重複排除・圧縮処理部１３４が生成した分割データからＣＲＣ（Ｐ）を計算し、計算したＣＲＣ（Ｐ）と位置情報とを含むＣｏｄｅ（Ｐ）を生成する。そして、チェックコード管理部１３３は、分割データにＣｏｄｅ（Ｐ）を付加する。
【０１０７】
（Ｓ１３４）重複排除・圧縮処理部１３４は、圧縮データを選択し終えたか否かを判定する。圧縮データを選択し終えた場合、図１２に示した一連の処理は終了する。一方、未選択の圧縮データが存在する場合、処理はＳ１３１へと進む。
【０１０８】
（読み出し動作）
次に、図１３を参照しながら、読み出し処理の流れについて説明する。図１３は、第２実施形態に係るストレージシステムにおける読み出しについて、処理の流れを示したシーケンス図である。
【０１０９】
（Ｓ１４１）コントローラ１０３は、チャネルアダプタ１０２を介してサーバ５０からＲＥＡＤ要求を受け付ける。
（Ｓ１４２）コントローラ１０３の重複排除・圧縮処理部１３４は、ＲＥＡＤ要求で指定されたデータを取得するために、キャッシュ１０１ｂ及び／又はディスク２００から読み出す分割データを特定する。
【０１１０】
分割データが書込み時に重複排除されている場合、重複排除・圧縮処理部１３４は、復元情報１３１ｂを参照し、復元に用いる分割データを全て特定する。また、重複排除・圧縮処理部１３４は、特定した分割データがディスク２００にある場合、その分割データをディスク２００から読み出すようにディスクアダプタ１０４を制御する（ＲＥＡＤ制御）。この場合、Ｓ１４３からＳ１４６の処理が実行される。
【０１１１】
（Ｓ１４３）ＲＥＡＤ制御を受けたディスクアダプタ１０４は、重複排除・圧縮処理部１３４が特定した分割データをディスク２００から読み出す。なお、読み出された分割データには、Ｃｏｄｅ（Ｐ）が付加されている。
【０１１２】
（Ｓ１４４）ディスクアダプタ１０４は、読み出した分割データに付加されているＣｏｄｅ（Ｐ）からＣＲＣ（Ｐ）を取得し、取得したＣＲＣ（Ｐ）を用いて分割データの誤りの有無をチェックする。
【０１１３】
分割データに誤りがある場合、ディスクアダプタ１０４は、読み出しエラーをコントローラ１０３に通知する。このエラーを受けたコントローラ１０３は、ＲＥＡＤ要求に対する応答として、チャネルアダプタ１０２を介してサーバ５０に読み出しエラーを通知する。この場合、読み出し処理は異常終了となる。一方、分割データに誤りがない場合、処理はＳ１４５へと進む。
【０１１４】
（Ｓ１４５、Ｓ１４６）ディスクアダプタ１０４は、Ｃｏｄｅ（Ｐ）が付加されている分割データをキャッシュ１０１ｂに書き込む。そして、ディスクアダプタ１０４は、キャッシュ１０１ｂへの書込みが完了した旨をコントローラ１０３に通知する。
【０１１５】
（Ｓ１４７）コントローラ１０３のチェックコード管理部１３３は、Ｓ１４２で特定した全ての分割データをキャッシュ１０１ｂから読み出す。
（Ｓ１４８）チェックコード管理部１３３は、キャッシュ１０１ｂから読み出した各分割データに付加されているＣｏｄｅ（Ｐ）からＣＲＣ（Ｐ）を取得し、取得したＣＲＣ（Ｐ）を用いて各分割データの誤りの有無をチェックする。誤りのある分割データが検出された場合、チェックコード管理部１３３は、チャネルアダプタ１０２を介してサーバ５０に読み出しエラーを通知する。この場合、読み出し処理は異常終了となる。一方、誤りのある分割データが検出されなかった場合、処理はＳ１４９へと進む。
【０１１６】
（Ｓ１４９）チェックコード管理部１３３は、分割データに付加されているＣｏｄｅ（Ｐ）を除去する。
（Ｓ１５０）重複排除・圧縮処理部１３４は、分割データを結合して圧縮データを復元し、復元した圧縮データを伸張して重複排除前のデータを復元する。
【０１１７】
なお、Ｓ１４２の処理で重複排除前のデータに対応する全ての分割データが特定され、特定された分割データに基づいて圧縮データが得られるため、圧縮データを伸張して得られたデータから、重複排除前のデータを復元できる。Ｎｕｌｌデータがパディングされた分割データがある場合には、圧縮データを復元する際にＮｕｌｌデータが除去される。
【０１１８】
（Ｓ１５１）チェックコード管理部１３３は、コード情報１３１ａとして記憶部１３１に保存されているＣｏｄｅ（Ｌ）を取得し、復元した重複排除前のデータに付加する。
（Ｓ１５２、Ｓ１５３）チェックコード管理部１３３は、Ｃｏｄｅ（Ｌ）が付加されたデータをバッファ１０１ａに書き込む。そして、チェックコード管理部１３３は、ＲＥＡＤ要求で指定されたデータのバッファ１０１ａへの書込み完了をチャネルアダプタ１０２に通知する。
【０１１９】
（Ｓ１５４）チャネルアダプタ１０２は、バッファ１０１ａに書き込まれたデータに付加されているＣｏｄｅ（Ｌ）からＣＲＣ（Ｌ）を取得し、取得したＣＲＣ（Ｌ）を用いてデータの誤りの有無をチェックする。データに誤りがある場合、チャネルアダプタ１０２は、読み出しエラーをサーバ５０に通知する。この場合、読み出し処理は異常終了となる。一方、データに誤りがない場合、処理はＳ１５５へと進む。
【０１２０】
（Ｓ１５５、Ｓ１５６）チャネルアダプタ１０２は、データに付加されているＣｏｄｅ（Ｌ）を除去し、ＲＥＡＤ要求に対する応答として、Ｃｏｄｅ（Ｌ）が除去されたデータをサーバ５０に送信する。Ｓ１５６の処理が完了すると、図１３に示した一連の処理は終了する。
【０１２１】
以上、処理の流れについて説明した。上記のように、重複排除を考慮してＣｏｄｅ（Ｌ）及びＣｏｄｅ（Ｐ）の付加・除去を適切なタイミングで実施することにより、データの信頼性を下げることなく効率的な重複排除を実現することができる。また、Ｃｏｄｅ（Ｌ）及びＣｏｄｅ（Ｐ）という２種類の独立したチェックコードを利用することで、重複排除をしつつ、ストレージ制御装置１００及びディスク２００においてデータの伝送及び入出力が生じる各区間でのデータの信頼性を維持することができる。
【０１２２】
以上、第２実施形態について説明した。
【符号の説明】
【０１２３】
１０  ストレージ制御装置
１１  制御部
１２  記憶部
２０  記憶装置
Ｃ０、Ｃ１、Ｃ２、Ｃ３  第１の符号情報
Ｃ４、Ｃ５、Ｃ６  第２の符号情報
Ｄ０、Ｄ１、Ｄ２  対象データ
Ｃｈ０  誤り検出符号
ＩＤ０  書込み先に関する情報
ＣＤ００、ＣＤ１１、ＣＤ０２、ＣＤ２３  第１の符号付きデータ
ＣＤ０４、ＣＤ１５、ＣＤ２６  第２の符号付きデータ
【図１】
0006666540.tif 000002
【図２】
0006666540.tif 000003
【図３】
0006666540.tif 000004
【図４】
0006666540.tif 000005
【図５】
0006666540.tif 000006
【図６】
0006666540.tif 000007
【図７】
0006666540.tif 000008
【図８】
0006666540.tif 000009
【図９】
0006666540.tif 000010
【図１０】
0006666540.tif 000011
【図１１】
0006666540.tif 000012
【図１２】
0006666540.tif 000013
【図１３】
0006666540.tif 000014