(57)【要約】【課題】ストレージ装置がホスト装置と連携して重複データを排除することで、データの高速書き込みを可能とする。【解決手段】ホスト装置２０で書き込み要求が発生した場合、ホスト装置２０の比較部２２は、書き込みが指定されたデータを構成するブロックデータごとに、キャッシュ部２４に格納されているブロックデータと比較する。この比較の結果、ブロックデータの一致が検出された場合、一致したブロックデータと対応付けてキャッシュ部２４に格納されているブロック識別子及び対応するアドレスを含む新たな書き込み要求を、制御部２５がホスト装置２０からストレージ装置１０に送信する。ストレージ装置１０の制御部１５は、ホスト装置２０からの書き込み要求に含まれているアドレス及びブロック識別子を対応付けて格納部１４に格納する。【選択図】      図１
2011203842.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュを備えたホスト装置と連携して重複データを排除するストレージ装置であって、
ブロックデータごとに、当該ブロックデータに固有のブロック識別子と当該ブロックデータとを対応付けて格納する第１の記憶手段と、
ブロックデータのアドレスごとに、当該アドレスと当該アドレスに対応するブロックデータに固有のブロック識別子とを対応付けて格納する第２の記憶手段と、
前記ホスト装置からの書き込み要求を含む各種の要求を処理する制御手段と、
前記制御手段によって指定されたブロックデータに固有のブロック識別子を生成するブロック識別子生成手段と、
前記制御手段によって指定されたブロックデータを前記第１の記憶手段に格納されているブロックデータと比較する比較手段とを具備し、
前記制御手段は、
ブロックデータを単位に処理可能なデータの前記ストレージ装置への書き込みを指定する書き込み要求が前記ホスト装置で発生し、前記書き込みが指定されたデータに含まれている第１のブロックデータが、前記ホスト装置の前記キャッシュに格納されているブロックデータのいずれとも一致しないために、前記第１のブロックデータと当該第１のブロックデータの第１のアドレスとを含む第１種の書き込み要求が前記ホスト装置から前記ストレージ装置に送信された場合、前記第１のブロックデータを指定して前記比較手段によるブロックデータ比較を行わせ、このブロックデータ比較の結果、前記第１のブロックデータが、前記第１の記憶手段に格納されているブロックデータのいずれとも一致しない場合、前記ブロック識別子生成手段により当該第１のブロックデータに固有の第１のブロック識別子を生成させて、前記第１のブロック識別子と前記第１のブロックデータとを対応付けて前記第１の記憶手段に格納し、且つ前記第１のアドレスと前記第１のブロック識別子とを対応付けて前記第２の記憶手段に格納する一方、前記第１のブロック識別子と前記第１のブロックデータとを対応付けて、且つ前記第１のアドレスと前記第１のブロック識別子とを対応付けて、それぞれ前記ホスト装置の前記キャッシュに格納させるために、前記第１のブロック識別子を前記ホスト装置に送信し、
前記書き込みが指定されたデータに含まれている第２のブロックデータが、前記ホスト装置の前記キャッシュに格納されているブロックデータのいずれか１つと一致した結果、前記第２のブロックデータに固有の第２のブロック識別子と前記第２のブロックデータの第２のアドレスとを含む第２種の書き込み要求が前記ホスト装置から前記ストレージ装置に送信された場合、前記第２のアドレスと前記第２のブロック識別子とを対応付けて前記第２の記憶手段に格納する
ことを特徴とするストレージ装置。
【請求項２】
前記制御手段は、前記ブロックデータ比較の結果、前記第１のブロックデータが、前記第１の記憶手段に格納されているブロックデータのうちの第３のブロックデータと一致した場合、前記第３のブロックデータと対応付けて前記第１の記憶手段に格納されている第３のブロック識別子を前記第１のアドレスと対応付けて前記第２の記憶手段に格納する一方、前記第３のブロック識別子と前記第３のブロックデータとを対応付けて、且つ前記第１のアドレスと前記第３のブロック識別子とを対応付けて、それぞれ前記ホスト装置の前記キャッシュに格納させるために、前記第３のブロック識別子を前記ホスト装置に送信することを特徴とする請求項１記載のストレージ装置。
【請求項３】
前記制御手段は、ブロックデータを単位に処理可能なデータの前記ストレージ装置からの読み出しを指定する第１の読み出し要求が前記ホスト装置で発生し、前記読み出しが指定されたデータに含まれる第４のブロックデータが前記ホスト装置の前記キャッシュに格納されていないために、前記第４のブロックデータの第４のアドレスを含む第２の読み出し要求が前記ホスト装置から前記ストレージ装置に送信された場合、前記第４のアドレスに対応付けて前記第２の記憶手段に格納されている第４のブロック識別子を取得すると共に、前記第４のブロック識別子に対応付けて前記第１の記憶手段に格納されているブロックデータを前記第４のブロックデータとして取得して、前記取得した第４のブロック識別子及び前記第４のブロックデータを前記ホスト装置に送信することを特徴とする請求項２記載のストレージ装置。
【請求項４】
前記第１の記憶手段には、ブロックデータに基づいて生成された、当該ブロックデータよりもサイズが小さいブロック代表値が、当該ブロックデータに固有のブロック識別子に加えて、当該ブロックデータに対応付けて格納されており、
前記第１種の書き込み要求は、前記第１のブロックデータに基づいて前記ホスト装置で生成された第１のブロック代表値を、前記第１のブロックデータ及び前記第１のアドレスに加えて含んでおり、
前記比較手段は、前記制御手段によってブロック代表値が指定された場合、当該指定されたブロック代表値を前記第１の記憶手段に格納されているブロック代表値と順次比較し、
前記制御手段は、前記第１のブロックデータを指定する前に、前記第１のブロック代表値を指定して前記比較手段によるブロック代表値比較を行わせ、このブロック代表値比較の結果、前記第１のブロック代表値が前記第１の記憶手段に格納されているブロック代表値のいずれとも一致しない場合、前記第１のブロック識別子と前記第１のブロック代表値と前記第１のブロックデータとを対応付けて前記第１の記憶手段に格納し、且つ前記第１のアドレスと前記第１のブロック識別子とを対応付けて前記第２の記憶手段に格納することを特徴とする請求項１記載のストレージ装置。
【請求項５】
前記制御手段は、前記ブロック代表値比較により、前記第１のブロック代表値に一致する第４のブロック代表値が検出された場合、前記第４のブロック代表値と対応付けて前記第１の記憶手段に格納されている第４のブロックデータを前記比較手段により前記第１のブロックデータと比較させ、前記第１のブロックデータと前記第４のブロックデータとが一致した場合、前記第４のブロックデータと対応付けて前記第１の記憶手段に格納されている第４のブロック識別子を前記第１のアドレスと対応付けて前記第２の記憶手段に格納する一方、前記第４のブロック識別子と前記第４のブロック代表値と前記第４のブロックデータとを対応付けて、且つ前記第１のアドレスと前記第４のブロック識別子とを対応付けて、それぞれ前記ホスト装置の前記キャッシュに格納させるために、前記第４のブロック識別子及び前記第４のブロック代表値を前記ホスト装置に送信することを特徴とする請求項４記載のストレージ装置。
【請求項６】
前記制御手段は、前記ホスト装置で前記書き込み要求が発生した際に必要な重複排除のための処理のうちの一部の処理であって、前記書き込みが指定されたデータに含まれているブロックデータが前記ホスト装置の前記キャッシュに格納されているかの判定を含む一部の処理を前記ホスト装置に委譲するための指示を前記ホスト装置に与えることを特徴とする請求項１記載のストレージ装置。
【請求項７】
前記制御手段は、前記ホスト装置からのストレージ装置に対するデータの書き込みまたは読み出しが他のホスト装置と競合しない場合に、前記委譲するための指示を前記ホスト装置に与えることを特徴とする請求項６記載のストレージ装置。
【請求項８】
ストレージ装置とホスト装置とを備え、前記ストレージ装置が前記ホスト装置と連携して重複データを排除するストレージシステムであって、
前記ストレージ装置は、
ブロックデータごとに、当該ブロックデータに固有のブロック識別子と当該ブロックデータとを対応付けて格納する第１の記憶手段と、
ブロックデータのアドレスごとに、当該アドレスと当該アドレスに対応するブロックデータに固有のブロック識別子とを対応付けて格納する第２の記憶手段と、
前記ホスト装置からの書き込み要求を含む各種の要求を処理する第１の制御手段と、
前記第１の制御手段によって指定されたブロックデータに固有のブロック識別子を生成するブロック識別子生成手段と、
前記第１の制御手段によって指定されたブロックデータを前記第１の記憶手段に格納されているブロックデータと比較する第１の比較手段とを具備し、
前記ホスト装置は、
ブロックデータごとに、当該ブロックデータに固有のブロック識別子と当該ブロックデータとを対応付けて格納する第１のキャッシュと、
ブロックデータのアドレスごとに、当該アドレスと当該アドレスに対応するブロックデータに固有のブロック識別子とを対応付けて格納する第２のキャッシュと、
前記ホスト装置で発生した書き込み要求を含む各種の要求を処理する第２の制御手段と、
前記第２の制御手段によって指定されたブロックデータを前記第１のキャッシュに格納されているブロックデータと比較する第２の比較手段とを具備し、
前記第２の制御手段は、
ブロックデータを単位に処理可能なデータの前記ストレージ装置への書き込みを指定する書き込み要求が前記ホスト装置で発生した場合、前記書き込みが指定されたデータを構成するブロックデータごとに、前記第２の比較手段によるブロックデータ比較を行わせ、
前記第２の比較手段によるブロックデータ比較の結果、前記書き込みが指定されたデータに含まれている第１のブロックデータが、前記ホスト装置の前記第１のキャッシュに格納されているブロックデータのいずれとも一致しない場合には、前記第１のブロックデータと当該第１のブロックデータの第１のアドレスとを含む第１種の書き込み要求を前記ホスト装置から前記ストレージ装置に送信し、
前記第２の比較手段によるブロックデータ比較の結果、前記書き込みが指定されたデータに含まれている第２のブロックデータが、前記ホスト装置の前記第１のキャッシュに格納されているブロックデータのいずれか１つと一致した場合には、前記一致したブロックデータと対応付けて前記第１のキャッシュに格納されている第２のブロック識別子と前記第２のブロックデータの第２のアドレスとを含む第２種の書き込み要求を前記ホスト装置から前記ストレージ装置に送信し、
前記第１種の書き込み要求に対する完了応答として前記第１のブロックデータに固有の第１のブロック識別子が前記ストレージ装置から返された場合、前記第１のブロック識別子と前記第１のブロックデータとを対応付けて前記第１のキャッシュに格納し、且つ前記第１のアドレスと前記第１のブロック識別子とを対応付けて前記第２のキャッシュに格納し、
前記第２種の書き込み要求に対する前記ストレージ装置からの完了応答に応じて、前記第２のアドレスと前記第２のブロック識別子とを対応付けて前記第２のキャッシュに格納し、
前記第１の制御手段は、
前記第１種の書き込み要求が前記ストレージ装置で受信された場合、前記第１のブロックデータを指定して前記第１の比較手段によるブロックデータ比較を行わせ、このブロックデータ比較の結果、前記第１のブロックデータが、前記第１の記憶手段に格納されているブロックデータのいずれとも一致しない場合、前記ブロック識別子生成手段により当該第１のブロックデータに固有の前記第１のブロック識別子を生成させて、前記第１のブロック識別子と前記第１のブロックデータとを対応付けて前記第１の記憶手段に格納し、且つ前記第１のアドレスと前記第１のブロック識別子とを対応付けて前記第２の記憶手段に格納する一方、前記第１種の書き込み要求に対する完了応答として前記第１のブロック識別子を前記ホスト装置に送信し、
前記第２種の書き込み要求が前記ストレージ装置で受信された場合、前記第２のアドレスと前記第２のブロック識別子とを対応付けて前記第２の記憶手段に格納する一方、前記第２種の書き込み要求に対する完了応答を前記ホスト装置に送信する
ことを特徴とするストレージシステム。
【請求項９】
第１の比較手段、ブロック識別子生成手段及び第１の制御手段を含むストレージ装置と、第２の比較手段及び第２の制御手段を含むホスト装置とを備えたストレージシステムにおいて、前記ストレージ装置が前記ホスト装置と連携して重複データを排除するための重複排除方法であって、
ブロックデータを単位に処理可能なデータの前記ストレージ装置への書き込みを指定する書き込み要求が前記ホスト装置で発生した場合、前記書き込みが指定されたデータを構成するブロックデータごとに、前記第２の比較手段が、当該ブロックデータを、前記ホスト装置に含まれている第１のキャッシュに格納されているブロックデータと比較するステップと、
前記第２の比較手段によるブロックデータ比較の結果、前記書き込みが指定されたデータに含まれている第１のブロックデータが、前記第１のキャッシュに格納されているブロックデータのいずれとも一致しない場合、前記第１のブロックデータと当該第１のブロックデータの第１のアドレスとを含む第１種の書き込み要求を、前記第２の制御手段が前記ホスト装置から前記ストレージ装置に送信するステップと、
前記第１種の書き込み要求が前記ストレージ装置で受信された場合、前記第１の比較手段が、前記第１のブロックデータを、前記ストレージ装置に含まれている第１の記憶手段に格納されているブロックデータと比較するステップと、
前記第１の比較手段によるブロックデータ比較の結果、第１のブロックデータが、前記第１の記憶手段に格納されているブロックデータのいずれとも一致しない場合、前記ブロック識別子生成手段が当該第１のブロックデータに固有の第１のブロック識別子を生成するステップと、
前記第１の制御手段が、前記第１のブロック識別子と前記第１のブロックデータとを対応付けて前記第１の記憶手段に格納し、且つ前記第１のアドレスと前記第１のブロック識別子とを対応付けて、前記ストレージ装置に含まれている第２の記憶手段に格納するステップと、
前記格納するステップの後、前記第１の制御手段が、前記第１種の書き込み要求に対する完了応答として前記第１のブロック識別子を前記ホスト装置に送信するステップと、
前記第１種の書き込み要求に対する完了応答を受けて、前記第２の制御手段が、前記第１のブロック識別子と前記第１のブロックデータとを対応付けて前記第１のキャッシュに格納し、且つ前記第１のアドレスと前記第１のブロック識別子とを対応付けて前記ホスト装置に含まれている第２のキャッシュに格納するステップと、
前記第２の比較手段によるブロックデータ比較の結果、前記書き込みが指定されたデータに含まれている第２のブロックデータが、前記第１のキャッシュに格納されているブロックデータのいずれか１つと一致した場合には、前記一致したブロックデータと対応付けて前記第１のキャッシュに格納されている第２のブロック識別子と前記第２のブロックデータの第２のアドレスとを含む第２種の書き込み要求を、前記第２の制御手段が前記ホスト装置から前記ストレージ装置に送信するステップと、
前記第２種の書き込み要求が前記ストレージ装置で受信された場合、前記第１の制御手段が、前記第２のアドレスと前記第２のブロック識別子とを対応付けて前記第２の記憶手段に格納するステップと、
前記第２のアドレスと前記第２のブロック識別子との格納の後、前記第１の制御手段が、前記第２種の書き込み要求に対する完了応答を前記ホスト装置に送信するステップと、
前記第２種の書き込み要求に対する完了応答を受けて、前記第２の制御手段が、前記第２のアドレスと前記第２のブロック識別子とを対応付けて前記第２のキャッシュに格納するステップと
を具備することを特徴とする重複排除方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホスト装置と連携して重複するデータを排除しながらデータを格納するストレージ装置、同ストレージ装置を備えたストレージシステム、及び同システムにおける重複排除方法に関する。
【背景技術】
【０００２】
昨今、官公庁・企業・個人のデータを管理する基盤は急速に肥大化・複雑化しており、その基盤の構成要素であるストレージ装置に格納されるデータも増大の一途をたどっている。このようなデータの保管・管理コストを削減するための１つの技術として、重複排除技術（或いは重複データ排除技術）が注目されている。
【０００３】
重複排除技術とは、データ（以下、対象データと称する）をストレージ装置に格納する際に、既に同じ内容のデータが当該ストレージ装置に格納されているかを検出し、つまりデータの重複を検出し、既に格納されていれば当該対象データを例えばリンクで置き換えることにより重複データを１つにまとめる（排除する）技術をいう。この重複排除技術によれば、データの記憶に必要な記憶容量をより少なくすることができる。
【０００４】
一般に、対象データと同じデータがストレージ装置に格納されているかを高速に検出するためには、ハッシュ値のような、データの代表値を利用することが多い。即ち重複排除技術では、重複の検出のために、対象データ自身を既にストレージ装置に格納されている全データと比較する手法ではなくて、対象データの代表値を求めてこれを既存の格納済みのデータの代表値の各々と比較する手法が適用されている。
【０００５】
従来、このような重複排除技術を適用した製品としては、例えば特許文献１に記載されているような可変長データ分割の手法に、非特許文献１に記載されているような重複データ排除の技術を組み合わせた、バックアップ装置、ＶＴＬ（仮想テープライブラリ）等が主流であった。バックアップ用途の場合は、次のような理由から重複排除を高速に行うための技術的ハードルが、プライマリ用途と比べて比較的低く、製品に適用しやすいためである。その理由とは、バックアップ用途ではデータの書き込みがストリーム状（非ランダム）に行われ、一度書き込んだデータの更新は頻繁には行われないことである。
【０００６】
その一方、昨今では、重複排除技術への注目の高まりに支えられて、プライマリストレージ装置（以下、単にストレージ装置と称する）への重複排除技術の適用も進んでいる。例えば、ＳＡＮ（Storage Area Network）などを介して複数のホスト装置からのアクセスを受け付ける共有型のストレージ装置に重複排除技術を適用する手法は、重複排除の処理をストレージ装置で行うかホスト装置で行うかによって、大きく２種類に分けるられる。
【０００７】
まず、ストレージ装置側での重複排除（第１の手法）の手順について説明する。  
（１）ホスト装置は書き込みデータをストレージ装置に転送する。  
（２）ストレージ装置は、ホスト装置からのデータに基づき、当該データの代表値を生成する。
【０００８】
（３）ストレージ装置は、生成された代表値と、既に格納済みのデータの代表値の各々とを比較し、同一の代表値（データ）が既に格納されているか確認する。ストレージ装置は、同一の代表値が格納されていないときに限り、ホスト装置からのデータを書き込むことで、重複データを排除する。
【０００９】
次にホスト装置側での重複排除（第２の手法）の手順について説明する。  
（１）ホスト装置は、書き込みデータに基づき、当該データの代表値を生成する。  
（２）ホスト装置は、ストレージ装置に格納済みのデータの代表値を、ストレージ装置から読み込む。なお、ストレージ装置に代表値のインデックスを格納しておくことにより、ホスト装置による代表値の読み込み・比較の高速化を図るのが一般的である。
【００１０】
（３）ホスト装置は、生成した代表値と読み込んだ代表値とを比較し、同一の代表値（データ）が既に格納されているか確認する。ホスト装置は、同一の代表値が格納されていないときに限り、書き込みデータをストレージ装置に転送し、書き込むことで、重複データを排除する。  
現在の主流は第１の手法だが、例えば非特許文献２には、第２の手法が開示されている。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】米国特許第５９９０８１０号明細書
【非特許文献】
【００１２】
【非特許文献１】Benjamin Zhu et al., “Avoiding the Disk Bottleneck in the Data Domain Deduplication File System”, Data Domain, Inc., USENIX/FAST’08, (2008)
【非特許文献２】Austin T.Clements et al., “Decentralized Deduplication in SAN Cluster File Systems”, USENIX’09, (2009)
【発明の概要】
【発明が解決しようとする課題】
【００１３】
上述の第１の手法によれば、ストレージ装置を共有する複数のホスト装置からの書き込みに対して、ストレージ装置において排他制御を集中的に行うことができる。このため、ホスト装置同士での分散排他制御が不要となる。
【００１４】
しかし第１の手法では、ストレージ装置での重複排除の処理のために、ホスト装置とストレージ装置との間でのデータ送受信が必ず必要となる。特に、ホスト装置にデータがキャッシュされていたとしても、重複排除処理のためには一度ホスト装置からストレージ装置へデータを転送しなければならない。但し、ホスト装置で書き込んだデータと、ストレージ装置内に書き込まれているデータとの重複排除（データ比較）を行うときにはストレージ装置内で処理を閉じることができる。
【００１５】
また、一般的に、ストレージ装置は、ホスト装置と比較して、ＣＰＵ性能が低くメモリ搭載容量も少ない。そのため、ＣＰＵやメモリの性能が大きく影響する重複データ排除をストレージ装置内で高速に行うことは困難であり、例えばオフロードエンジンの搭載などの工夫が必要となる。
【００１６】
一方、上述の第２の手法によれば、ホスト装置で重複排除の処理を行うことから、ホスト装置側のバッファ／キャッシュに登録されているデータとの間で重複データ排除を行うときには、ホスト装置とストレージ装置との間でのデータ送受信を省くことができる。また、一般的に、ホスト装置は、ストレージ装置と比較して、ＣＰＵ性能が高くメモリ搭載容量も多い。そのため、ＣＰＵやメモリの性能が大きく影響する重複データ排除をホスト装置内で高速に行いやすくなる。
【００１７】
しかし第２の手法では、ホスト装置において、これから書き込むデータと、ストレージ装置内に書き込まれておりホスト装置内にキャッシュされていないデータとの間で重複排除を行うときには、ストレージ装置内のデータをホスト装置に読み込む必要がある。
【００１８】
また第２の手法では、ホスト装置の故障、停電等によるデータ保護等の処理が必要となる。また、ストレージ装置を複数のホスト装置で共有している場合、このストレージ装置内のデータに対して重複排除を行うためには、データ保護のためホスト装置間でアクセスを排他する必要がある。つまり、ホスト装置間で分散排他を実現しなければならない。しかし、ホスト間での分散排他は、ストレージ装置内での集中排他と比較して技術的に難易度が高く、性能上も課題がある。
【００１９】
本発明は上記事情を考慮してなされたものでその目的は、ホスト装置と連携して重複データを排除することで、データの高速書き込みが可能な、ストレージ装置、同ストレージ装置を備えたストレージシステム、及び同システムにおける重複排除方法を提供することにある。
【課題を解決するための手段】
【００２０】
本発明の１つの観点によれば、キャッシュを備えたホスト装置と連携して重複データを排除するストレージ装置が提供される。このストレージ装置は、ブロックデータごとに、当該ブロックデータに固有のブロック識別子と当該ブロックデータとを対応付けて格納する第１の記憶手段と、ブロックデータのアドレスごとに、当該アドレスと当該アドレスに対応するブロックデータに固有のブロック識別子とを対応付けて格納する第２の記憶手段と、前記ホスト装置からの書き込み要求を含む各種の要求を処理する制御手段と、前記制御手段によって指定されたブロックデータに固有のブロック識別子を生成するブロック識別子生成手段と、前記制御手段によって指定されたブロックデータを前記第１の記憶手段に格納されているブロックデータと比較する比較手段とを具備する。前記制御手段は、ブロックデータを単位に処理可能なデータの前記ストレージ装置への書き込みを指定する書き込み要求が前記ホスト装置で発生し、前記書き込みが指定されたデータに含まれている第１のブロックデータが、前記ホスト装置の前記キャッシュに格納されているブロックデータのいずれとも一致しないために、前記第１のブロックデータと当該第１のブロックデータの第１のアドレスとを含む第１種の書き込み要求が前記ホスト装置から前記ストレージ装置に送信された場合、前記第１のブロックデータを指定して前記比較手段によるブロックデータ比較を行わせ、このブロックデータ比較の結果、前記第１のブロックデータが、前記第１の記憶手段に格納されているブロックデータのいずれとも一致しない場合、前記ブロック識別子生成手段により当該第１のブロックデータに固有の第１のブロック識別子を生成させて、前記第１のブロック識別子と前記第１のブロックデータとを対応付けて前記第１の記憶手段に格納し、且つ前記第１のアドレスと前記第１のブロック識別子とを対応付けて前記第２の記憶手段に格納する一方、前記第１のブロック識別子と前記第１のブロックデータとを対応付けて、且つ前記第１のアドレスと前記第１のブロック識別子とを対応付けて、それぞれ前記ホスト装置の前記キャッシュに格納させるために、前記第１のブロック識別子を前記ホスト装置に送信する。また前記制御手段は、前記書き込みが指定されたデータに含まれている第２のブロックデータが、前記ホスト装置の前記キャッシュに格納されているブロックデータのいずれか１つと一致した結果、前記第２のブロックデータに固有の第２のブロック識別子と前記第２のブロックデータの第２のアドレスとを含む第２種の書き込み要求が前記ホスト装置から前記ストレージ装置に送信された場合、前記第２のアドレスと前記第２のブロック識別子とを対応付けて前記第２の記憶手段に格納する。
【発明の効果】
【００２１】
本発明によれば、ストレージ装置がホスト装置と連携して重複データを排除する構成としたことにより、重複排除処理をより高速に行うことができ、これによりデータの書き込み処理を高速化できる。
【図面の簡単な説明】
【００２２】
【図１】本発明の一実施形態に係るストレージシステムの構成を示すブロック図。
【図２】論理ディスクボリュームの例を示す図。
【図３】ストレージ装置の格納部に格納されるブロックテーブル及び論理ディスクボリュームテーブルの例を示す図。
【図４】ホスト装置のキャッシュ部に格納されるブロックテーブルキャッシュ及び論理ディスクボリュームテーブルキャッシュの例を示す図。
【図５】同実施形態におけるホスト装置側でのデータ書き込み処理の手順を示すフローチャート。
【図６】同実施形態におけるストレージ装置側での第１種のデータ書き込み処理の手順を示すフローチャート。
【図７】同実施形態におけるストレージ装置側での第２種のデータ書き込み処理の手順を示すフローチャート。
【図８】同実施形態におけるデータ書き込み処理の第１の例で用いられる論理ディスクボリュームの例を示す図。
【図９】同実施形態におけるデータ書き込み処理の第１の例で用いられるブロックテーブルキャッシュ及び論理ディスクボリュームテーブルキャッシュの例を示す図。
【図１０】同実施形態におけるデータ書き込み処理の第１の例で用いられるブロックテーブル及び論理ディスクボリュームテーブルの例を示す図。
【図１１】同実施形態におけるデータ書き込み処理の第２の例を説明するための論理ディスクボリュームの例を示す図。
【図１２】同実施形態におけるデータ書き込み処理の第２の例を説明するためのブロックテーブルキャッシュ及び論理ディスクボリュームテーブルキャッシュの例を示す図。
【図１３】同実施形態におけるデータ書き込み処理の第２の例を説明するためのブロックテーブル及び論理ディスクボリュームテーブルの例を示す図。
【図１４】同実施形態におけるホスト装置側でのデータ読み出し処理の手順を示すフローチャート。
【図１５】同実施形態におけるストレージ装置側でのデータ読み出し処理の手順を示すフローチャート。
【図１６】同実施形態におけるデータ読み出し処理の例を説明するための論理ディスクボリュームの例を示す図。
【図１７】同実施形態におけるデータ読み出し処理の例を説明するためのブロックテーブルキャッシュ及び論理ディスクボリュームテーブルキャッシュの例を示す図。
【図１８】同実施形態におけるデータ読み出し処理の例を説明するためのブロックテーブル及び論理ディスクボリュームテーブルの例を示す図。
【発明を実施するための形態】
【００２３】
以下、本発明の実施の形態につき図面を参照して説明する。  
図１は本発明の一実施形態に係るストレージシステムの構成を示すブロック図である。このストレージシステムは、ストレージ装置１０とホスト装置２０とから構成されている。ストレージ装置１０とホスト装置２０とは、例えばＳＡＮのようなネットワーク３０によって接続されている。なお、ストレージ装置１０とホスト装置２０とが、ネットワーク３０以外の接続手段により接続されていても構わない。また、ホスト装置２０を含む複数のホスト装置が、ストレージ装置１０と接続される構成、つまりストレージ装置１０が複数のホスト装置によって共有される構成であっても構わない。
【００２４】
ストレージ装置１０は、通信部１１、比較部１２、識別子生成部１３、格納部１４及び制御部１５を備えている。  
通信部１１は、ホスト装置２０とストレージ装置１０との間の通信を行う。この通信は、ホスト装置２０からのデータの書き込み要求及び読み出し要求の受信を含む。
【００２５】
比較部１２は、データを一定サイズのある単位で分割したブロックデータ同士の比較を行い、同一性を判定する。本実施形態では、説明の簡略化のために、１セクタを１ブロックとするが、これに限らない。例えば、１ブロックを２以上のセクタとしても構わない。
【００２６】
識別子生成部１３は、制御部１５によって指定されたブロックデータに固有の値（識別情報）であるブロック識別子を生成する。つまり識別子生成部１３は、入力として制御部１５によって指定されたブロックデータを受け取ると、当該ブロックデータに固有のブロック識別子を出力する。本実施形態では、ブロック識別子としてシリアル番号が用いられる。なお、ストレージ装置１０及びホスト装置２０内からあるブロックが消去された後であれば、そのブロックに付与されていた識別子を再利用しても構わない。
【００２７】
格納部１４は、データを格納するのに用いられる。格納部１４の構成形態として、ファイルシステムボリュームや、論理ディスクボリューム（論理ボリューム）など様々な形態をとることができる。本実施形態では、格納部１４は１つ以上の論理ディスクボリュームを構成するものとする。
【００２８】
格納部１４は、ブロックテーブル１４１及び論理ディスクボリュームテーブル１４２を格納する。ブロックテーブル１４１は、ブロックデータとブロック識別子との対を格納する。論理ディスクボリュームテーブル１４２は、ブロックデータのアドレス（例えば、ブロックデータの論理ディスクボリューム上のアドレス、つまり論理ブロックアドレス）とブロック識別子との対を格納する。
【００２９】
制御部１５は、通信部１１、比較部１２、識別子生成部１３及び格納部１４を制御する。
【００３０】
本実施形態において、ホスト装置２０内の比較部１２、識別子生成部１３及び制御部１５は、ホスト装置２０が一般に有するＣＰＵが、当該ホスト装置２０の記憶装置に格納されたプログラムを読み込んで実行することにより実現される機能モジュールであるものとする。
【００３１】
ホスト装置２０は、ストレージ装置１０と連携して重複データ排除を行うため、ストレージ装置１０内の通信部１１、比較部１２、格納部１４及び制御部１５にそれぞれ相当する、通信部２１、比較部２２、キャッシュ部２４及び制御部２５を備えている。この通信部２１、比較部２２、キャッシュ部２４及び制御部２５は、例えばホスト装置２０のドライバ層２６に備えられている。図１には、ホスト装置２０のドライバ層２６内に、バッファ部２８及び代表値生成部２９が更に備えられている状態が示されている。しかし後述するように、バッファ部２８は、上記実施形態の第１の変形例で適用され、代表値生成部２９は、上記実施形態の第２の変形例で適用されるものとする。つまりバッファ部２８及び代表値生成部２９は、それぞれ上記実施形態の第１の変形例及び第２の変形例の説明のために、便宜的に図１に示されており、上記実施形態では、ホスト装置２０内にバッファ部２８及び代表値生成部２９が必ずしも備えられている必要はない。
【００３２】
通信部２１は、ストレージ装置１０とホスト装置２０との間の通信を行う。この通信は、ストレージ装置１０へのデータの書き込み要求及び読み出し要求の送信を含む。  
比較部１２は、ブロックデータ同士の比較を行い、同一性を判定する。
【００３３】
キャッシュ部２４は、データを一時的に格納するのに用いられる。キャッシュ部２４は、ブロックテーブルキャッシュ２４１及び論理ディスクボリュームテーブルキャッシュ２４２を格納する。ブロックテーブルキャッシュ２４１はストレージ装置１０内のブロックテーブル１４１のキャッシュであり、ブロックデータとブロック識別子との対を一時格納する。論理ディスクボリュームテーブルキャッシュ２４２はストレージ装置１０内の論理ディスクボリュームテーブル１４２のキャッシュであり、ブロックデータのアドレス（例えば、ブロックデータの論理ディスクボリューム上のアドレス）とブロック識別子との対を一時格納する。
【００３４】
制御部２５は、通信部２１、比較部２２及びキャッシュ部２４を制御する。制御部２５はまた、ユーザ層２７とドライバ層２６との間の通信を行う。ユーザ層２７は、ファイルシステム、データベース（ＤＢ）、アプリケーション（アプリケーションプログラム）等を含む。
【００３５】
次に、ストレージ装置１０が構成する論理ディスクボリュームと、これに対応するストレージ装置１０内のブロックテーブル１４１及び論理ディスクボリュームテーブル１４２と、これに対応するホスト装置２０内のブロックテーブルキャッシュ２４１及び論理ディスクボリュームテーブルキャッシュ２４２とについて、例を挙げて説明する。
【００３６】
図２は、ストレージ装置１０によって構成される論理ディスクボリュームの例を示す。この例では、ストレージ装置１０は２種類の論理ディスクボリューム（論理ボリューム）である、論理ディスクボリュームＡと論理ディスクボリュームＢとを格納している。図２の例では説明の簡略化のために、論理ディスクボリュームＡが５セクタ（つまり５ブロック）から構成され、論理ディスクボリュームＢが４セクタ（つまり４ブロック）から構成されている場合を想定している。しかし、論理ディスクボリュームは、図２の例よりも多くのセクタ（ブロック）から構成されるのが一般である。
【００３７】
論理ディスクボリュームＡの第１セクタ（アドレス１）にはブロックデータ“ＤＡＴＡE”が、第２セクタ（アドレス２）にはブロックデータ“ＤＡＴＡA”が、それぞれ格納されている。論理ディスクボリュームＢの第１セクタ（アドレス１）にはブロックデータ“ＤＡＴＡA”が、第２セクタ（アドレス２）にはブロックデータ“ＤＡＴＡE”が、それぞれ格納されている。ここで、アドレスは、ボリュームにおけるセクタ（ブロック）のアドレス（論理ブロックアドレス）である。
【００３８】
図３は、ストレージ装置１０の格納部１４に格納（論理的に格納）される論理ディスクボリュームテーブル１４２及びブロックテーブル１４１の例を示す。より詳細には、図３は、図２に示される論理ディスクボリュームＡ及びＢを、ストレージ装置１０の格納部１４に格納される論理ディスクボリュームテーブル１４２及びブロックテーブル１４１を用いて構成した状態を示す。
【００３９】
論理ディスクボリュームテーブル１４２は論理ディスクボリュームＡ及びＢ上のアドレス（セクタ）とブロック識別子との対を格納する。つまり論理ディスクボリュームテーブル１４２は、論理ディスクボリュームＡ及びＢ上のアドレス（セクタ）とブロック識別子との対応を示す情報を格納する。本実施形態において論理ディスクボリュームテーブル１４２は、図３に示すように、論理ディスクボリュームＡに対応するサブテーブル１４２Ａと論理ディスクボリュームＢに対応するサブテーブル１４２Ｂとから構成される。一方、ブロックテーブル１４１は、ブロック識別子とブロックデータとの対を格納する。
【００４０】
これら２種類のサブテーブル１４２Ａ及び１４２Ｂとブロックテーブル１４１とは、図３から明らかなように、ブロック識別子により相互に結び付けられている。ここで、同じブロック識別子が付与されている（重複する）ブロックデータは、ブロックテーブル１４１上で１つにまとめられていること、つまり、重複排除されていることに注目されたい。例えば、図２において、論理ディスクボリュームＡの第２セクタに格納されているブロックデータ“ＤＡＴＡA”及び論理ディスクボリュームＢの第１セクタに格納されているブロックデータ“ＤＡＴＡA”は、図３に示すように、ブロック識別子“ＩＤA”によりブロックテーブル１４１上で１つにまとめられている。
【００４１】
このように図３の例では、ブロックテーブル１４１には、それぞれ固有の、且つ論理ディスクボリュームテーブル１４２のエントリより参照されているブロックデータ及びブロック識別子のみが格納されている。このようなデータ構造をとることにより、ストレージ装置１０でデータを格納するのに必要な記憶容量を削減することができる。
【００４２】
図４は、ブロックテーブルキャッシュ２４１及び論理ディスクボリュームテーブルキャッシュ２４２の例を示す。より詳細には、図４は、ストレージ装置１０が図２に示される論理ディスクボリュームＡ及びＢを格納しているときの、ホスト装置２０のキャッシュ部２４に格納される、ブロックテーブルキャッシュ２４１及び論理ディスクボリュームテーブルキャッシュ２４２の例を示す。ホスト装置２０では、ブロックテーブルキャッシュ２４１及び論理ディスクボリュームテーブルキャッシュ２４２の２種類のテーブルキャッシュにより、図２に示されるブロックテーブル１４１及び論理ディスクボリュームテーブル１４２に対応するキャッシュが構成される。
【００４３】
論理ディスクボリュームテーブルキャッシュ２４２は、図２に示される論理ディスクボリュームＡ及びＢにそれぞれ対応するサブテーブルキャッシュ２４２Ａ及び２４２Ｂから構成される。サブテーブルキャッシュ２４２Ａ及び２４２Ｂは、それぞれ図３に示されるサブテーブル１４２Ａ及び１４２Ｂに対応する。
【００４４】
図４の例では、論理ディスクボリュームテーブルキャッシュ２４２のサブテーブルキャッシュ２４２Ａは、論理ディスクボリュームＡの５セクタのうちの４セクタ分のブロックのブロック識別子を格納（キャッシュ）している。一方、論理ディスクボリュームテーブルキャッシュ２４２のサブテーブルキャッシュ２４２Ｂは、論理ディスクボリュームＢの４セクタのうちの３セクタ分のブロックのブロック識別子を格納（キャッシュ）している。なお、一般にキャッシュサイズは有限である。このため、ホスト装置２０の制御部２５は、例えばＬＲＵ（Least Recently Usued）のような手法によって、キャッシュするエントリの置き換えを行う。この置き換え手法は周知であるため、その詳細な説明を省略する。図４の例では、論理ディスクボリュームＡの第２セクタ（アドレス２）及び論理ディスクボリュームＢの第１セクタ（アドレス１）にそれぞれ対応するブロックデータ“ＤＡＴＡA”と、論理ディスクボリュームＢの第４セクタ（アドレス４）に対応するブロックデータ“ＤＡＴＡD”とが、何らかのキャッシュ置換方法により、ブロックテーブルキャッシュ２４１から捨てられている状態を示している。
【００４５】
次に、ホスト装置２０とストレージ装置１０が連携して効率的に重複排除を行いながら、ストレージ装置１０にデータを書き込むためのデータ書き込み処理の手順と、ストレージ装置１０からデータを読み出すためのデータ読み出し処理の手順とについて順次説明する。
【００４６】
１．データ書き込み処理
まず、データ書き込み処理の手順について、図５乃至図７のフローチャートを参照して説明する。図５はストレージ装置１０にデータを書き込む際のホスト装置２０側でのデータ書き込み処理の手順を示すフローチャート、図６及び図７はストレージ装置１０にデータを書き込む際のストレージ装置１０側での、それぞれ第１種及び第２種のデータ書き込み処理の手順を示すフローチャートである。
【００４７】
１．１．ホスト装置側のデータ書き込み処理
まず、ホスト装置２０側でのデータ書き込み処理について、図５のフローチャートを参照して説明する。  
今、ホスト装置２０内のユーザ層２７（より詳細には、ユーザ層２７に属する、例えばアプリケーションのような要素）から当該ホスト装置２０内のドライバ層２６に対して、書き込み要求が発行されたものとする。このときホスト装置２０は、ストレージ装置１０に格納されている論理ディスクボリュームＡまたはＢのいずれか一方を、当該ホスト装置２０からストレージ装置１０に対する要求により、リザーブしているものとする。この場合、上記書き込み要求は、データと、当該データが書き込まれるべき（現在ホスト装置２０によってリザーブされている）論理ディスクボリューム上のアドレス（開始アドレス）と、当該データのデータ長（セクタ数）とを引数として持つ。データは、ブロック（セクタ）を単位に処理可能である。
【００４８】
ドライバ層２６内の制御部２５は、ユーザ層２７からの書き込み要求を受け取ると、当該書き込み要求で指定されたデータ（以下、書き込みデータと称する）をブロックデータ（以下、書き込みブロックデータと称する）に分割する（ステップ５０１）。本実施形態では、１ブロックは１セクタであるため、書き込みデータは、１セクタ単位に分割される。以後、制御部２５は、ブロック（より詳細には、書き込みブロックデータ）ごとに以下の手順の繰り返しを制御する（ステップ５０２）。
【００４９】
なお、データ長が１（１セクタ）である場合、書き込みデータが、そのまま書き込みブロックデータとして用いられる。明らかなように、書き込みデータは、１以上の書き込ブロックデータを含んでいるのと等価である。
【００５０】
制御部２５は、キャッシュ部２４に格納されているブロックテーブルキャッシュ２４１の先頭エントリから順にブロックデータを読み出す（ステップ５０３）。このステップ５０３において制御部２５は、ブロックデータを読み出すごとに、比較部２２に対して当該ブロックデータを指定することにより、当該比較部２２によるブロックデータ比較を行わせる。これにより比較部２２は、制御部２５によってブロックテーブルキャッシュ２４１から順に読み出されるブロックデータを、現在処理対象となっている書き込みブロックデータと比較する。
【００５１】
制御部２５は、比較部２２による比較の結果に基づき、書き込みブロックデータと同一のブロックデータ（つまり、ブロックデータが同一のブロック）が、ブロックテーブルキャッシュ２４１にキャッシュされているかを判定する（ステップ５０４）。もし、キャッシュされていないならば（ステップ５０４のＮｏ）、制御部２５はステップ５０５に進む。
【００５２】
ステップ５０５において制御部２５は、ストレージ装置１０に対して通信部２１経由で第１種の書き込み要求を送信し、当該第１種の書き込み要求に対するストレージ装置１０による第１種のデータ書き込み処理の完了を示す完了応答を待ち合わせる。第１種の書き込み要求は、書き込みブロックデータのアドレスと当該書き込みブロックデータとを引数として持つ。ストレージ装置１０による第１種のデータ書き込み処理については後述する。
【００５３】
さて、ステップ５０５でストレージ装置１０から第１種のデータ書き込み処理の完了応答が返されるのを待ち合わせた結果、制御部２５が当該完了応答を受信したものとする。この完了応答は、後述するように、書き込みブロックデータのブロック識別子を含む。このため制御部２５は、完了応答の受信（待ち合わせ）により、ストレージ装置１０から書き込みブロックデータのブロック識別子を取得する。
【００５４】
すると制御部２５は、キャッシュ部２４に格納されている論理ディスクボリュームテーブルキャッシュ２４２の対応するサブテーブルキャッシュに、第１種の書き込み要求の引数としたアドレスと取得したブロック識別子とが対応付けて設定された新たなエントリを登録する（ステップ５０６）。本実施形態において、対応するサブテーブルキャッシュが、サブテーブルキャッシュ２４２Ａまたは２４２Ｂのいずれであるかは、論理ディスクボリュームＡまたはＢのいずれがホスト装置２０によりリザーブされているかによって決まる。
【００５５】
また、ステップ５０６において制御部２５は、キャッシュ部２４に格納されているブロックテーブルキャッシュ２４１に、取得したブロック識別子と第１種の書き込み要求の引数としたブロックデータ（書き込みブロックデータ）とが対応付けて設定された新たなエントリを登録する。このように、論理ディスクボリュームテーブルキャッシュ２４２のサブテーブルキャッシュとブロックテーブルキャッシュ２４１とに、それぞれ新たなエントリを登録するために、前述したように、適切なキャッシュ置換アルゴリズムが適用されているものとする。
【００５６】
一方、ブロックデータが同一のブロックが、ブロックテーブルキャッシュ２４１にキャッシュされているならば（ステップ５０４のＹｅｓ）、制御部２５はステップ５０７に進む。ステップ５０７において制御部２５は、ストレージ装置１０に対して第２種の書き込み要求を通信部２１経由で送信し、当該第２種の書き込み要求に対するストレージ装置１０による第２種のデータ書き込み処理の完了を示す完了応答を待ち合わせる。第２種の書き込み要求は、書き込みブロックデータのアドレスと当該書き込みブロックデータのブロック識別子とを引数として持つ。この引数としてのブロック識別子には、上記同一のブロックデータと対応付けてブロックテーブルキャッシュ２４１に登録されているブロック識別子が用いられる。ストレージ装置１０による第２種のデータ書き込み処理については後述する。
【００５７】
さて、ステップ５０７でストレージ装置１０から第２種のデータ書き込み処理の完了応答が返されるのを待ち合わせた結果、制御部２５が当該完了応答を受信したものとする。すると制御部２５は、第２種の書き込み要求の引数とした、アドレスとブロック識別子とが対応付けて設定された新たなエントリを、論理ディスクボリュームテーブルキャッシュ２４２の対応するサブテーブルキャッシュに登録する（ステップ５０８）。この新たなエントリを登録するために、適切なキャッシュ置換アルゴリズムが適用されているものとする。
【００５８】
制御部２５は、上述のステップ５０３乃至５０６の処理またはステップ５０３，５０４，５０７及び５０８の処理を、ステップ５０１で取得した全ての書き込みブロックデータの各々について繰り返す（ステップ５０２）。制御部２５は、全ての書き込みブロックデータについて上述の処理を実行し終えると、ホスト装置２０側のデータ書き込み処理を終了する。
【００５９】
１．２．ストレージ装置側のデータ書き込み処理
１．２．１．第１種のデータ書き込み処理
次に、ストレージ装置１０側での第１種のデータ書き込み処理について、図６のフローチャートを参照して説明する。  
今、ホスト装置２０内の制御部２５からストレージ装置１０に対して、第１種の書き込み要求が通信部２１経由で送信されたものとする。この第１種の書き込み要求は、ストレージ装置１０内の通信部１１で受信されて、当該ストレージ装置１０内の制御部１５に渡される。第１種の書き込み要求は、前述したように、書き込みブロックデータのアドレスと当該書き込みブロックデータとを引数として持つ。つまり第１種の書き込み要求は、書き込みブロックデータのアドレスと当該書き込みブロックデータとを含む。
【００６０】
制御部１５は、第１種の書き込み要求を受け取ると、格納部１４に格納されているブロックテーブル１４１の先頭エントリから順にブロックデータを読み出す（ステップ６０１）。このステップ６０１において制御部１５は、ブロックデータを読み出すごとに、通信部１１に対して当該ブロックデータを指定することにより、当該比較部１２によるブロックデータ比較を行わせる。これにより比較部１２は、制御部１５によってブロックテーブル１４１から順に読み出されるブロックデータを、第１種の書き込み要求に含まれている書き込みブロックデータと比較する。
【００６１】
制御部１５は、比較部１２による比較の結果に基づき、書き込みブロックデータと同一のブロックデータ（つまり、ブロックデータが同一のブロック）が、ブロックテーブル１４１に登録されているかを判定する（ステップ６０２）。もし、登録されているならば（ステップ６０２のＹｅｓ）、制御部１５はステップ６０３に進む。
【００６２】
ステップ６０３において制御部１５は、格納部１４に格納されている論理ディスクボリュームテーブル１４２の対応するサブテーブル内の、第１種の書き込み要求に含まれているアドレスに対応するエントリに、当該アドレスとブロック識別子とを対応付けて登録する（ステップ６０３）。ここで、登録されるブロック識別子には、上記同一のブロックデータと対応付けてブロックテーブル１４１に登録されているブロック識別子が用いられる。また、対応するサブテーブルが、サブテーブル１４２Ａまたは１４２Ｂのいずれであるかは、論理ディスクボリュームＡまたはＢのいずれがホスト装置２０によりリザーブされているかによって決まる。
【００６３】
一方、ブロックデータが同一のブロックが、ブロックテーブル１４１に登録されていないならば（ステップ６０２のＮｏ）、制御部１５は第１種の書き込み要求に含まれている書き込みブロックデータのブロック識別子の生成を識別子生成部１３に要求する。すると識別子生成部１３は、書き込みブロックデータのブロック識別子、つまり書き込みブロックデータに付与されるべき、要求されたブロック識別子を生成する（ステップ６０４）。シリアル番号がブロック識別子として用いられる本実施形態では、最も最近に生成されたブロック識別子に続く番号が、要求されたブロック識別子として生成される。
【００６４】
制御部１５は、識別子生成部１３によって生成されたブロック識別子と当該ブロック識別子が付与されるべき書き込みブロックデータとを対応付けて、ブロックテーブル１４１に登録する（ステップ６０５）。このステップ６０５において制御部１５は、論理ディスクボリュームテーブル１４２の対応するサブテーブル内の、第１種の書き込み要求に含まれているアドレスに対応するエントリに、当該アドレスと識別子生成部１３によって生成されたブロック識別子とを対応付けて登録する。
【００６５】
なお、ステップ６０５が実行される場合、論理ディスクボリューム上では論理的には書き込みブロックデータの上書きとなって、ブロックテーブル１４１内のあるエントリが論理ディスクボリュームテーブル１４２の全てのエントリから参照されなくなることがある。このような状態が発生し得るのは、論理ディスクボリュームのアドレス及びブロックデータが、それぞれ論理ディスクボリュームテーブル１４２及びブロックテーブル１４１に分けて管理されることによる。例えば、論理ディスクボリュームＡの第１セクタ（アドレス１）のブロックデータがブロックデータ“ＤＡＴＡE”からブロックデータ“ＤＡＴＡF”に更新される場合、アドレス１に対応付けられるブロック識別子は、例えば“ＩＤE”から“ＩＤF”となる。このときブロックテーブル１４１には、ブロックデータ“ＤＡＴＡE”が、ブロック識別子“ＩＤE”に対応付けた状態で残される可能性がある。このような場合、上述の状態が発生する。そこで、例えば、直ちにブロックテーブル１４１上の該当するエントリを削除する（捨てる）か、或いは削除を遅延させるかなど、様々な設計を考えることができる。
【００６６】
制御部１５は、ステップ６０３または６０５を実行し終えると、ステップ６０６に進む。ステップ６０６において制御部１５は、第１種の書き込み要求に対する第１種のデータ書き込み処理の完了を示す完了応答を、ブロック識別子を戻り値として、通信部１１経由でホスト装置２０に返す。これにより制御部１５は、ストレージ装置１０側での第１種のデータ書き込み処理を終了する。ここで、戻り値としてのブロック識別子には、ステップ６０３からステップ６０６に進んだ場合には、当該ステップ６０３で登録されたブロック識別子が用いられ、ステップ６０５からステップ６０６に進んだ場合には、当該ステップ６０５で登録されたブロック識別子が用いられる。
【００６７】
１．２．２．第２種のデータ書き込み処理
次に、ストレージ装置１０側での第２種のデータ書き込み処理について、図７のフローチャートを参照して説明する。  
今、ホスト装置２０内の制御部２５からストレージ装置１０に対して、第２種の書き込み要求が通信部２１経由で送信されたものとする。この第２種の書き込み要求は、ストレージ装置１０内の通信部１１で受信されて、当該ストレージ装置１０内の制御部１５に渡される。第２種の書き込み要求は、前述したように、書き込みブロックデータのアドレスと当該書き込みブロックデータのブロック識別子とを引数として持つ。つまり第２種の書き込み要求は、書き込みブロックデータのアドレスとブロック識別子とを含む。
【００６８】
制御部１５は、第２種の書き込み要求を受け取ると、当該第２種の書き込み要求に含まれているアドレスとブロック識別子とを対応付けて、論理ディスクボリュームテーブル１４２の対応するサブテーブル内の、当該アドレスに対応するエントリに登録する（ステップ７０１）。そして制御部１５は、第２種の書き込み要求に対する第２種のデータ書き込み処理の完了を示す完了応答を、通信部１１経由でホスト装置２０に返す（ステップ７０１）。これにより制御部１５は、ストレージ装置１０側での第２種のデータ書き込み処理を終了する。
【００６９】
１．３．データ書き込み処理の例
次に、上述のデータ書き込み処理の例について説明する。  
１．３．１．データ書き込み処理の第１の例
まず、データ書き込み処理の第１の例について、図２乃至図７に加えて、図８乃至図１０を参照して説明する。  
今、ストレージ装置１０によって構成される論理ディスクボリュームＡ及びＢが図２の状態にあり、ホスト装置２０が論理ディスクボリュームＡをリザーブしているものとする。このとき、ストレージ装置１０の格納部１４には、図３に示される状態のブロックテーブル１４１及び論理ディスクボリュームテーブル１４２が格納され、ホスト装置２０のキャッシュ部２４には、図４に示される状態のブロックテーブルキャッシュ２４１及び論理ディスクボリュームテーブルキャッシュ２４２が格納されているものとする。
【００７０】
このような状態で、ホスト装置２０が、例えば論理ディスクボリュームＡの第３セクタ（アドレス３）にブロックデータ“ＤＡＴＡF”を論理的に書き込んだ後の、論理ディスクボリュームＡ及びＢの状態を図８に示す。同様に、ブロックテーブルキャッシュ２４１及び論理ディスクボリュームテーブルキャッシュ２４２の状態を図９に示し、ブロックテーブル１４１及び論理ディスクボリュームテーブル１４２の状態を図１０に示す。
【００７１】
上述のブロックデータ“ＤＡＴＡF”の書き込み処理が開始される時点では、ホスト装置２０のキャッシュ部２４内のブロックテーブルキャッシュ２４１には、図４から明らかなように、ブロックデータ“ＤＡＴＡF”はキャッシュされていない（ステップ５０４のＮｏ）。このためホスト装置２０は、ストレージ装置１０に対して、第１種の書き込み要求により、ブロックデータ“ＤＡＴＡF”とアドレス３とを送信する（ステップ５０５）。
【００７２】
すると、ストレージ装置１０では、第１種のデータ書き込み処理が実行される。この第１種のデータ書き込み処理により、ブロックデータ“ＤＡＴＡF”のブロック識別子“ＩＤF”が生成される（ステップ６０４）。そして、図１０に示すように、ブロックテーブル１４１に、ブロックデータ“ＤＡＴＡF”及びそれに対応するブロック識別子“ＩＤF”の対が追加登録される（ステップ６０５）。つまり、ブロックデータ“ＤＡＴＡF”及びそれに対応するブロック識別子“ＩＤF”の対が登録されたエントリがブロックテーブル１４１に追加される。また、論理ディスクボリュームテーブル１４２のサブテーブル１４２Ａ内の、論理ディスクボリュームＡの第３セクタ（アドレス３）に対応するエントリの内容が、図３に示すアドレス３及びブロック識別子“ＩＤC”の対から、図１０に示すように、アドレス３及びブロック識別子“ＩＤF”の対に更新される（ステップ６０５）。
【００７３】
その後、ストレージ装置１０からホスト装置２０に、第１種のデータ書き込み処理の完了を示す完了応答が、ブロック識別子“ＩＤF”を戻り値として返される（６０６）。するとホスト装置２０では、キャッシュサイズの制限によるキャッシュエントリの置換により、ブロックテーブルキャッシュ２４１内の、例えば先頭のエントリ、つまり図４に示すようにブロック識別子“ＩＤB”及びブロックデータ“ＤＡＴＡB”の対が登録されていたエントリが、図９に示すように、ブロック識別子“ＩＤF”及びブロックデータ“ＤＡＴＡF”の対が登録されたエントリに置き換えられる（ステップ５０６）。また、論理ディスクボリュームテーブルキャッシュ２４２のサブテーブルキャッシュ２４２Ａ内の、論理ディスクボリュームＡの第３セクタ（アドレス３）に対応するエントリ、つまり、図４に示すようにアドレス３及びブロック識別子“ＩＤC”の対が登録されていたエントリが、図９に示すように、アドレス３及びブロック識別子“ＩＤF”の対が登録されたエントリに置き換えられる（ステップ５０６）。先に説明したように、この置き換えは一例であって、キャッシュ置換方法によって置き換えの挙動は異なる。
【００７４】
１．３．２．データ書き込み処理の第２の例
次に、データ書き込み処理の第２の例について、図５乃至図１０に加えて、図１１乃至図１３を参照して説明する。  
まず、図８乃至図１０に示したような状態で、ホスト装置２０が、例えば論理ディスクボリュームＢの第２セクタ（アドレス２）にブロックデータ“ＤＡＴＡF”を書き込んだ後の、論理ディスクボリュームＡ及びＢの状態を図１１に示す。同様に、ブロックテーブルキャッシュ２４１及び論理ディスクボリュームテーブルキャッシュ２４２の状態を図１２に示し、ブロックテーブル１４１及び論理ディスクボリュームテーブル１４２の状態を図１３に示す。このとき、ホスト装置２０が論理ディスクボリュームＢをリザーブしているものとする。
【００７５】
第２の例において、ブロックデータ“ＤＡＴＡF”の書き込み処理が開始される時点では、ホスト装置２０のキャッシュ部２４内のブロックテーブルキャッシュ２４１には、上述の第１の例と異なって、図９に示すようにブロックデータ“ＤＡＴＡF”がブロック識別子“ＩＤF”に対応付けてキャッシュされている（ステップ５０４のＹｅｓ）。このためホスト装置２０は、ストレージ装置１０に対して、第２種の書き込み要求により、ブロック識別子“ＩＤF”及びアドレス２を送信する（ステップ５０７）。ここでは、ブロックデータ“ＤＡＴＡF”ではなくて、ブロック識別子“ＩＤF”が送信されることに注目されたい。
【００７６】
すると、ストレージ装置１０では、第２種のデータ書き込み処理が実行される。この第２種のデータ書き込み処理により、論理ディスクボリュームテーブル１４２のサブテーブル１４２Ｂ内の、論理ディスクボリュームＢの第２セクタ（アドレス２）に対応するエントリ、つまり、図１０に示すようにアドレス２及びブロック識別子“ＩＤE”の対が登録されていたエントリが、図１３に示すように、アドレス２及びブロック識別子“ＩＤF”の対が登録されていたエントリに置き換えられる（ステップ７０１）。ここでは、ブロックテーブル１４１は書き換えられていないことに注目されたい。
【００７７】
その後、ストレージ装置１０からホスト装置２０に、第２種のデータ書き込み処理の完了を示す完了応答が返される（ステップ７０２）。するとホスト装置２０では、論理ディスクボリュームテーブル１４２のサブテーブルキャッシュ２４２Ｂ内の、論理ディスクボリュームＢの第２セクタ（アドレス２）に対応するエントリ、つまり図９に示すようにアドレス２及びブロック識別子“ＩＤE”の対が登録されていたエントリが、図１２に示すように、アドレス２及びブロック識別子“ＩＤF”の対が登録されたエントリに置き換えられる（ステップ５０８）。即ち、サブテーブルキャッシュ２４２Ｂ内の、第２セクタ（アドレス２）に対応するエントリの内容が、アドレス２及びブロック識別子“ＩＤF”の対に更新される。
【００７８】
２．データ読み出し処理
次に、ストレージ装置１０に格納されたデータを読み出すためのデータ読み出し処理の手順について、図１４及び図１５のフローチャートを参照して説明する。図１４はストレージ装置１０からデータを読み出す際のホスト装置２０側でのデータ読み出し処理の手順を示すフローチャート、図１５はストレージ装置１０からデータを読み出す際のストレージ装置１０側でのデータ読み出し処理の手順を示すフローチャートである。 
２．１．ホスト装置側のデータ読み出し処理
まず、ホスト装置２０側でのデータ読み出し処理について、図１４のフローチャートを参照して説明する。  
今、ホスト装置２０内のユーザ層２７（より詳細には、ユーザ層２７に属する、例えばアプリケーションのような要素）から当該ホスト装置２０内のドライバ層２６に対して、読み出し要求が発行されたものとする。この読み出し要求は、読み出されるべきデータが格納されている論理ディスクボリューム上のアドレス（開始アドレス）と、当該データのデータ長（セクタ数）とを引数として持つ。
【００７９】
ドライバ層２６内の制御部２５は、ユーザ層２７からの読み出し要求を受け取ると、当該読み出し要求で指定されたアドレス及びデータ長（セクタ数）の示す、論理ディスクボリューム上のアドレス範囲をブロック単位に分割し、ブロックごとのアドレスを生成する（ステップ１４０１）。本実施形態では、１ブロックは１セクタであるため、１セクタ単位にアドレスが生成される。以後、制御部２５は、ブロック（セクタ）ごとに（より詳細には、ブロックに対応するアドレスごとに）以下の手順の繰り返しを制御する（ステップ１４０２）。
【００８０】
制御部２５は、現在処理対象となっているブロックに対応するアドレス（以下、現アドレスと称する）に基づき、論理ディスクボリュームテーブルキャッシュ２４２の対応するサブテーブルキャッシュを参照する（ステップ１４０３）。制御部２５は、このエントリ参照結果に基づき、現アドレスに対応付けてブロック識別子がキャッシュされているかを判定する（ステップ１４０４）。つまり制御部２５は、論理ディスクボリュームテーブルキャッシュ２４２の対応するサブテーブルキャッシュ内に、現アドレスに対応付けてブロック識別子が登録されているエントリが存在するかを判定する。
【００８１】
現アドレスに対応付けてブロック識別子がキャッシュされているならば（ステップ１４０４のＹｅｓ）、制御部２５は、当該ブロック識別子に基づき、ブロックテーブルキャッシュ２４１を参照する（ステップ１４０５）。制御部２５は、このエントリ参照結果に基づき、上記ブロック識別子に対応付けてブロックデータがキャッシュされているかを判定する（ステップ１４０６）。
【００８２】
このように制御部２５は、論理ディスクボリュームテーブルキャッシュ２４２に現アドレスに対応するブロック識別子がキャッシュ（格納）されており、かつ当該ブロック識別子に対応するブロックデータがブロックテーブルキャッシュ２４１にキャッシュ（格納）されているかを判定する（ステップ１４０５，１４０６）。もし、ブロックデータがキャッシュされているならば（ステップ１４０５，１４０６のＹｅｓ）、制御部２５は、当該ブロックデータをブロックテーブルキャッシュ２４１から読み出す（ステップ１４０７）。次に制御部２５は、読み出されたブロックデータを、ユーザ層２７（より詳細には、ユーザ層２７内の読み出し要求の発行元）に返す（ステップ１４０８）。
【００８３】
一方、現アドレスに対応するブロック識別子がキャッシュされていないか（ステップ１４０５のＮｏ）、或いは当該ブロック識別子に対応するブロックデータがキャッシュされていないならば（ステップ１４０６のＮｏ）、制御部２５はステップ１４０９に進む。ステップ１４０９において制御部２５は、ストレージ装置１０から読み出されるべき論理ディスクボリューム上のブロックデータのアドレスを引数として持つ読み出し要求を、ストレージ装置１０に対して通信部２１経由で送信し、当該読み出し要求に対するストレージ装置１０によるデータ読み出し処理の完了を示す完了応答を待ち合わせる。
【００８４】
さて、ステップ１４０９でストレージ装置１０からデータ読み出し処理の完了応答が返されるのを待ち合わせた結果、制御部２５が当該完了応答を受信したものとする。この完了応答は、後述するように、読み出し要求の引数とした論理ディスクボリューム上のアドレスに対応するブロックデータ及び当該ブロックデータのブロック識別子を含む。このため制御部２５は、完了応答の受信により、ストレージ装置１０から読み出し要求で指定したブロックデータ及び当該ブロックデータのブロック識別子を取得する。
【００８５】
すると制御部２５は、キャッシュ部２４に格納されている論理ディスクボリュームテーブルキャッシュ２４２の対応するサブテーブルキャッシュに、読み出し要求の引数としたアドレスと取得したブロック識別子とが対応付けて設定された新たなエントリを登録する（ステッ１４１０）。このステップ１４１０において制御部２５は、キャッシュ部２４に格納されているブロックテーブルキャッシュ２４１に、取得したブロック識別子及びブロックデータが対応付けて設定された新たなエントリを登録する。前述したように、これらの新たなエントリを登録するために、適切なキャッシュ置換アルゴリズムが適用されているものとする。次に制御部２５は、ブロックテーブルキャッシュ２４１に登録したブロックデータをユーザ層２７（ユーザ層２７内の読み出し要求の発行元）に返す（ステップ１４０８）。
【００８６】
制御部２５は、上述のステップ１４０３乃至１４０８の処理を、ステップ１４０１で生成された全てのアドレスの各々について繰り返す（ステップ１４０２）。制御部２５は、全てのアドレスについて上述の処理を実行し終えると、ホスト装置２０側のデータ読み出し処理を終了する。
【００８７】
２．２．ストレージ装置側のデータ読み出し処理
次にストレージ装置１０側でのデータ読み出し処理について、図１５のフローチャートを参照して説明する。  
今、ホスト装置２０内の制御部２５からストレージ装置１０に対して、読み出し要求が通信部２１経由で送信されたものとする。この読み出し要求は、ストレージ装置１０内の通信部１１で受信されて、当該ストレージ装置１０内の制御部１５に渡される。読み出し要求は、前述したように、読み出されるべきブロックデータのアドレスを引数として持つ。つまり読み出し要求は、読み出されるべきブロックデータのアドレスを含む。
【００８８】
制御部１５は、読み出し要求を受け取ると、格納部１４に格納されている論理ディスクボリュームテーブル１４２から、当該読み出し要求に含まれているアドレスに対応付けられているブロック識別子を読み出す（ステップ１５０１）。そして制御部１５は、格納部１４に格納されているブロックテーブル１４１から、ステップ１５０１で読み出されたブロック識別子に対応付けられているブロックデータを読み出す（ステップ１５０２）。
【００８９】
次に制御部１５は、読み出し要求に対するデータ読み出し処理の完了を示す完了応答を、ブロックテーブル１４１から読み出されたブロックデータ及び当該ブロックデータのブロック識別子を戻り値として、通信部１１経由でホスト装置２０に返す（ステップ１５０３）。これにより制御部１５は、ストレージ装置１０側でのデータ読み出し処理を終了する。
【００９０】
２．３．データ読み出し処理の例
次に、データ読み込み処理の例について、図１１乃至図１５に加えて、図１６乃至図１８を参照して説明する。  
今、ストレージ装置１０によって構成される論理ディスクボリュームＡ及びＢが図１１の状態にあり、ホスト装置２０が論理ディスクボリュームＡをリザーブしているものとする。このとき、ホスト装置２０のキャッシュ部２４には、図１２に示される状態のブロックテーブルキャッシュ２４１及び論理ディスクボリュームテーブルキャッシュ２４２が格納され、ストレージ装置１０の格納部１４には、図１３に示される状態のブロックテーブル１４１及び論理ディスクボリュームテーブル１４２が格納されているものとする。
【００９１】
このような状態で、ホスト装置２０が、例えば論理ディスクボリュームＡの第２セクタ（アドレス２）のブロックデータを読み出すものとする。つまりホスト装置２０（より詳細には、ホスト装置２０のユーザ層２７）において、論理ディスクボリュームＡの第２セクタ（アドレス２）のブロックデータを読み出すための読み出し要求が発生したものとする。この読み出し要求は、論理ディスクボリュームＡ上のアドレス２と、ブロック数（セクタ数）１を示すデータ長とを含む。
【００９２】
この場合、ホスト装置２０では、論理ディスクボリュームＡのアドレス２についてのみ、当該アドレス２のブロックデータを読み出すための、データ読み出し処理が行われる。ここで、論理ディスクボリュームテーブルキャッシュ２４２のサブテーブルキャッシュ２４２Ａには、図１２から明らかなように、論理ディスクボリュームＡのアドレス２を含むエントリは存在しない。つまり、論理ディスクボリュームテーブルキャッシュ２４２のサブテーブルキャッシュ２４２Ａには、論理ディスクボリュームＡのアドレス２のブロックデータのブロック識別子が、当該アドレス２に対応付けてキャッシュされていない（ステップ１４０４のＮｏ）。したがって、ブロックテーブルキャッシュ２４１には、論理ディスクボリュームＡのアドレス２のブロックデータはキャッシュされていない。
【００９３】
そこでホスト装置２０は、論理ディスクボリュームＡのアドレス２のブロックデータ（ここでは、“ＤＡＴＡA”）とそのブロック識別子（ここでは、“ＩＤA”）を取得するために、論理ディスクボリュームＡのアドレス２を引数として持つ読み出し要求を、ストレージ装置１０に対して通信部２１経由で送信する（ステップ１４０９）。
【００９４】
するとストレージ装置１０ではデータ読み出し処理が実行される。このストレージ装置１０でのデータ読み出し処理により、論理ディスクボリュームテーブル１４２のサブテーブル１４２内で論理ディスクボリュームＡのアドレス２Ａが登録されているエントリ（図１８に示すサブテーブル１４２Ａ内でハッチングが施されているエントリ）から、当該アドレス２に対応付けて登録されているブロック識別子“ＩＤA”が読み出される（ステップ１５０１）。また、ブロックテーブル１４１内で、ブロック識別子“ＩＤA”が登録されているエントリ（図１８に示すブロックテーブル１４１内でハッチングが施されているエントリ）から、当該ブロック識別子“ＩＤA”に対応付けて登録されているブロックデータ“ＤＡＴＡA”が読み出される（ステップ１５０２）。
【００９５】
その後、ストレージ装置１０からホスト装置２０に、ブロックデータ“ＤＡＴＡA”及びそのブロック識別子“ＩＤA”を戻り値として含む完了応答が返される（ステップ１５０３）。  
するとホスト装置２０では、論理ディスクボリュームテーブル１４２のサブテーブルキャッシュ２４２Ａに、論理ディスクボリュームＡのアドレス２とブロックデータ“ＤＡＴＡA”のブロック識別子“ＩＤA”との対が設定されたエントリが登録される（ステップ１４１０）。ここでは、図１２に示されるサブテーブルキャッシュ２４２Ａ内の、論理ディスクボリュームＡの第４セクタ（アドレス４）のエントリが捨てられて、アドレス２とブロック識別子“ＩＤA”との対が設定されたエントリが登録される。つまり、図１２に示されるサブテーブルキャッシュ２４２Ａ内の、論理ディスクボリュームＡの第４セクタ（アドレス４）のエントリが、キャッシュエントリの置換により、図１７に示すように、アドレス２とブロック識別子“ＩＤA”の対が登録されたエントリ（サブテーブルキャッシュ２４２Ａ内でハッチングが施されているエントリ）に置き換えられる。
【００９６】
またステップ１４１０では、ブロックテーブル１４１に、ブロックデータ“ＤＡＴＡA”のブロック識別子“ＩＤA”と当該ブロックデータ“ＤＡＴＡA”との対が設定されたエントリが登録される。ここでは、図１２に示されるブロックテーブルキャッシュ２４１内の、ブロック識別子“ＩＤC”のエントリが捨てられて、ブロック識別子“ＩＤA”とブロックデータ“ＤＡＴＡA”との対が設定されたエントリが登録される。つまり、図１２に示されるブロックテーブルキャッシュ２４１内の、ブロック識別子“ＩＤA”のエントリが、キャッシュエントリの置換により、図１７に示すように、ブロック識別子“ＩＤA”とブロックデータ“ＤＡＴＡA”との対が登録されたエントリ（ブロックテーブルキャッシュ２４１内でハッチングが施されているエントリ）に置き換えられる。ブロックテーブルキャッシュ２４１にブロック識別子ＩＤA”のブロックデータ“ＤＡＴＡA”が登録されたことにより、論理ディスクボリュームテーブルキャッシュ２４２のサブテーブルキャッシュ２４２Ｂ内の第１セクタ（アドレス１）のエントリも、図１７に示すように当該ブロックデータ“ＤＡＴＡA”を指すことに注意されたい。
【００９７】
上述したように、本実施形態によれば、ホスト装置２０からストレージ装置１０にデータを書き込む際の、ブロックデータ（書き込みブロックデータ）と重複するブロックデータが既にストレージ装置１０に格納されているかを判定するための比較・重複判定処理（ステップ６０１，６０２）が、ストレージ装置１０において行われる。この判定処理の結果、重複が検出されなかったブロックデータには、ストレージ装置１０によって固有のブロック識別子が付与される。これらの処理は、ストレージ装置１０で集中的に行われることから、たとえホスト装置２０を含む複数のホスト装置がストレージ装置１０を共有する構成であっても、複数のホスト装置間でデータ保護のためにアクセスを排他する、いわゆる分散排他を行う必要がない。
【００９８】
また本実施形態では、ストレージ装置１０によってブロックデータに付与された固有のブロック識別子は、当該ストレージ装置１０からホスト装置２０に返されて、ホスト装置２０において、ブロック識別子とブロックデータとを対にしてキャッシュ部２４に登録（キャッシュ）される。そこで本実施形態では、ホスト装置２０からストレージ装置１０にデータを書き込む際には、まずホスト装置２０において、ブロックデータ（書き込みブロックデータ）と当該ホスト装置２０のキャッシュ部２４にキャッシュされているブロックデータとの間で、比較・重複判定処理（ステップ５０３，５０４）が行われる。ホスト装置２０において、重複が検出されたときには、ブロックデータに代えて、当該ブロックデータと対応付けてキャッシュされているブロック識別子が、ホスト装置２０からストレージ装置１０に送信される。これにより、頻繁に同じデータパタンからなるブロックデータがホスト装置２０からストレージ装置１０に書き込まれるときには、重複排除処理をストレージ装置１０からホスト装置２０にオフロードすることができ、ホスト装置２０とストレージ装置１０との間でのデータ転送量も削減できる。よって本実施形態においては、従来技術と比較して、重複排除処理をより高速に行うことができ、データの書き込み処理を高速化できる。
【００９９】
更に本実施形態によれば、ホスト装置２０内では、ブロックデータがブロックテーブルキャッシュ２４１に重複排除された形で保持される。このため、少ないメモリ容量で仮想的により多くのキャッシュデータを保持することができる。
【０１００】
なお、上記実施形態では、ホスト装置２０が論理ディスクボリュームＡまたはＢのいずれかをリザーブしている場合を想定している。しかし、ホスト装置２０が必ずしも論理ディスクボリュームＡまたはＢのいずれかをリザーブしている必要はない。この場合、書き込み要求または読み出し要求に、データが書き込まれるべきまたは読み出されるべき論理ディスクボリュームＡまたはＢの情報、例えば論理ディスクボリューム番号を含めればよい。
【０１０１】
［第１の変形例］
次に、上記実施形態の第１の変形例について、図１を援用して説明する。  
第１の変形例が上記実施形態と相違する点は、バッファ部２８が用いられる点にある。バッファ部２８は、図１に示すように、ホスト装置２０のドライバ層２６に備えられているものとする。このバッファ部２８は、制御部２５により制御される。制御部２５は、ホスト装置２０内のユーザ層２７からドライバ層２６に発行される、データ（書き込みデータ）を含む書き込み要求（例えばユーザ層２７内のアプリケーションなどからの書き込み要求）を、バッファ部２８内に格納（バッファリング）する。
【０１０２】
制御部２５は、例えば、バッファ部２８に格納されている書き込み要求がバッファサイズにまで達したとき、或いは、当該バッファ部２８に格納されている書き込み要求が最も最近に読み出された時点からの経過時間が閾値に達したときに、当該バッファ部２８から次に実行されるべき書き込み要求を読み込出し、当該読み出された書き込み要求に従って、上記実施形態と同様のデータ書き込み処理を行う。また制御部２５は、ユーザ層２７からドライバ層２６に対して読み出し要求が発行された場合、この読み出し要求に基づいて論理ディスクボリュームテーブルキャッシュ２４２を参照する前に、バッファ部２８を参照することで、データ読み出しのためのアドレスに対応する最新のデータ（目的のデータ）が当該バッファ部２８に格納されているかを調べる。目的のデータが格納されているならば、制御部２５は、当該データをバッファ部２８から読み込んで、ユーザ層２７（読み出し要求の発行元）に応答する。
【０１０３】
このように上記実施形態の第１の変形例によれば、書き込みデータを含む書き込み要求を、ホスト装置２０内でバッファ部２８に格納することで、書き込み処理を高速化することができる。この書き込み処理では、複数の書き込み要求に含まれている、アドレスが連続する書き込みデータを連結したり、書き込み順序を入れ替えるなどの手法を適用することで、書き込み処理を一層高速化することができる。また第１の変形例によれば、同じアドレスに対して上書き処理が繰り返されるようなときに、重複データ排除の処理回数を減らすことができるため（最新のデータに対してのみ処理すればよいため）、これによっても書き込み処理を高速化することができる。
【０１０４】
［第２の変形例］
次に、上記実施形態の第２の変形例について、図１を援用して説明する。  
第２の変形例が上記実施形態と相違する点は、代表値生成部２９が用いられる点にある。図１に示すように、代表値生成部２９はホスト装置２０のドライバ層２６に備えられているものとする。代表値生成部２９は、ホスト装置２０の制御部２５により利用される。
【０１０５】
代表値生成部２９は、入力としてブロックデータを受け取ると、当該ブロックデータに対応するブロック代表値を出力する。代表値生成部２９がブロックデータからブロック代表値を出力（生成）する仕組みには、例えばハッシュ関数（ＳＨＡ１など）を利用することができ、ブロックデータのハッシュ値をブロック代表値として用いることができる。ブロック代表値のサイズ（ブロック代表値の記憶に必要な記憶容量）はブロックデータのサイズと比較して小さいものとする。
【０１０６】
第２の変形例では更に、ストレージ装置１０の格納部１４に格納されるブロックテーブル１４１と、ホスト装置２０のキャッシュ部２４に格納されるブロックテーブルキャッシュ２４１とには、ブロックデータに固有のブロック識別子に加えて、当該ブロックデータに基づいて生成されたブロック代表値も保持される。つまりブロックテーブル１４１及びブロックテーブルキャッシュ２４１には、いずれも、ブロックデータに固有のブロック識別子と当該ブロックデータとが対応付けて保持されると共に、ブロックデータのブロック代表値と当該ブロックデータとが対応付けて保持される。なお、ブロック識別子、ブロック体表値及びブロックデータが対応付けて保持されるテーブルまたはテーブルキャッシュの構成では、ブロック代表値を高速に検索することが難しい。そこで、テーブルまたはテーブルキャッシュとは別に、ブロック代表値を高速に検索するための、例えばＢツリーのようなインデックスを用いてもよい。
【０１０７】
第２の変形例では、ホスト装置２０内の制御部２５は、図５に示すデータ書き込み処理のステップ５０３で重複（同一性）検出のためにブロックデータを比較する前に、代表値生成部２９を用いて、書き込みブロックデータのブロック代表値を生成する。そして代表値生成部２９は、生成されたブロック代表値を、ブロックテーブルキャッシュ２４１の各エントリにブロックデータ及びブロック識別子と対応付けて登録（キャッシュ）されているブロック代表値と比較する。
【０１０８】
もし、ブロック代表値の一致が検出されたならば、制御部２５は、一致したブロック代表値に対応するブロックデータ同士のみを比較する。つまり制御部２５は、書き込みブロックデータと、ブロックテーブルキャッシュ２４１にキャッシュされている、当該書き込みブロックデータのブロック代表値に一致したブロック代表値のブロックデータとを比較することで、両ブロックデータの同一性を検出（判定）する。制御部２５は、ブロックデータ同士の比較で一致（同一性）が検出されたならばキャッシュヒットと判定し、一致が検出されなかったならばキャッシュミスヒットと判定する。ブロック代表値のサイズはブロックデータに対して小さいため、より高速に比較する（キャッシュヒット判定を行う）ことが可能になる。
【０１０９】
制御部２５は、キャッシュミスヒットを判定したときには、ストレージ装置１０に対して第１種の書き込み要求を送信する。この第１種の書き込み要求には、上記実施形態と異なり、「書き込みブロックデータのアドレスと当該書き込みブロックデータ」に加えてブロック代表値が含まれる。
【０１１０】
ホスト装置２０からの第１種の書き込み要求を受信したストレージ装置１０では、図６に示すデータ書き込み処理のステップ６０１で重複（同一性）検出のためにブロックデータを比較する前に、制御部１５が、当該第１種の書き込み要求に含まれているブロック代表値を、ブロックテーブル１４１の各エントリにブロックデータ及びブロック識別子と対応付けて登録されているブロック代表値と比較する。
【０１１１】
もし、ブロック代表値の一致が検出されたならば、制御部１５は、一致したブロック代表値に対応するブロックデータ同士を比較することで、両ブロックデータの同一性を検出（判定）する。ブロックデータ同士の比較で一致（同一性）が検出されたならば、書き込みブロックデータに重複するブロックデータがブロックテーブル１４１に格納されていることから、制御部１５はブロックテーブル１４１へのブロックデータ登録を行わずに、論理ディスクボリュームテーブル１４２の対応するサブテーブル内の、第１種の書き込み要求に含まれているアドレスに対応するエントリに、当該アドレスとブロック識別子及びブロック代表値とを対応付けて登録する。
【０１１２】
これに対し、ブロックデータ同士の比較で一致が検出されなかったならば、書き込みブロックデータに重複するブロックデータはブロックテーブル１４１に格納されていないことから、制御部１５は、ブロックテーブル１４１に、ブロック識別子、ブロック代表値及びブロックデータを対応付けて登録する。また制御部１５は、論理ディスクボリュームテーブル１４２の対応するサブテーブル内の、第１種の書き込み要求に含まれているアドレスに対応するエントリに、当該アドレスとブロック識別子及びブロック代表値とを対応付けて登録する。
【０１１３】
このように、上記実施形態の第２の変形例によれば、ホスト装置２０及びストレージ装置１０のいずれにおいても、ブロックデータを同士を比較する前にブロックデータよりもデータサイズの小さなブロック代表値同士が比較される。そして、一致が検出された場合、一致したブロック代表値に対応するブロックデータ同士のみに絞って、両者が比較される。これにより、書き込みブロックデータを、ブロックテーブルキャッシュ２４１またはブロックテーブル１４１に登録されているブロックデータと順次比較する場合と比べて、より高速に比較することができる。
【０１１４】
背景技術の欄でも述べたように、重複排除処理では、データ自体を比較するのではなく、データから求めた代表値（具体的にはハッシュ値）を比較することが多い。理論上、代表値は代表値間での衝突の可能性をもっており、衝突が発生したときには、データ破壊が生じてしまうことになる。そのため様々な工夫が考案されているが、この課題を本質的に回避するためには、データ自体を比較するしかない。しかしデータ自体の比較は高コストである。
【０１１５】
これに対して上記実施形態の第２の変形例では、上述のように、まずブロックデータよりもデータサイズの小さなブロック代表値同士を比較し、一致が検出された場合、一致したブロック代表値に対応するブロックデータ同士のみに絞って、両者を比較する構成とすることにより、データ自体の比較回数を少なくし、より高速に重複排除処理を行うことができる
また第２の変形例によれば、ホスト装置２０で生成したブロック代表値をストレージ装置１０が利用する構成としているため、当該ストレージ装置１０側でのブロック代表値生成が不要になる。
【０１１６】
［第３の変形例］
次に、上記実施形態の第３の変形例について、図１を援用して説明する。ここでは、ストレージ装置１０が、ホスト装置２０を含む複数のホスト装置によって共有されるものとする。
【０１１７】
ホスト装置２０内の制御部２５は、ストレージ装置１０に対してデータの書き込みまたは読み出しを行う前の任意の機会に、重複排除動作に関する他のホスト装置との間の排他を、ストレージ装置１０に対して要求する。この排他の粒度として、例えば論理ディスクボリューム単位や、特定の論理ディスクボリュームのあるアドレス範囲（アドレス空間）などを指定することができる。
【０１１８】
ホスト装置２０からの排他要求を受けたストレージ装置１０の制御部１５は、当該ホスト装置２０と他のホスト装置との間で排他要求が衝突していなければ、当該ホスト装置２０に対して排他成功を通知する。これに対して排他要求が衝突しているときには、制御部１５は、ホスト装置２０に対して排他失敗を通知すると共に、既に排他成功を通知している他のホスト装置に対して、排他の終了（引き剥がし）を通知する。
【０１１９】
ホスト装置２０がストレージ装置１０から排他成功の通知を受けた場合、当該ホスト装置２０の制御部２５は、上記実施形態で適用されたようなデータ書き込み処理またはデータ読み出し処理を行う。つまり、ストレージ装置１０は、ホスト装置２０からの排他要求を受けた際に、他のホスト装置との間で排他要求が衝突しておらず、データの書き込みまたは読み出しが当該ホスト装置２０を含む複数のホスト装置の間で競合していないときは、当該ホスト装置２０に対して排他成功を通知することにより、重複排除をホスト装置２０と連携して行う。この排他成功の通知は、ストレージ装置１０からホスト装置２０への重複排除の連携の指示、または重複排除のための機能の一部の委譲の指示であるといえる。
【０１２０】
これに対し、ホスト装置２０が排他失敗の通知を受けた場合、当該ホスト装置２０の制御部２５は、上記実施形態で適用されたようなデータ書き込み処理またはデータ読み出し処理を行うことなく、例えば、ユーザ層２７から発行された書き込み要求または読み出し要求をそのままストレージ装置１０に送信する。一方、排他終了の通知を受けた他のホスト装置は、上記実施形態で適用されたような重複排除動作を終了する。
【０１２１】
このように、上記実施形態の第３の変形例によれば、例えば論理ディスクボリュームがホスト装置２０にリザーブされているときにのみ、重複排除のための機能の一部を当該ホスト装置２０に委譲することで、ホスト装置２０と他のホスト装置との間での書き込み競合によるデータ破壊を防ぐことができる。また、論理ディスクボリューム内の一部のアドレス範囲が、例えばホスト装置２０以外のホスト装置に対してロックされているときに、当該一部のアドレス範囲へのアクセスに限って、重複排除のための機能の一部を当該ホスト装置２０に委譲することでも、ホスト装置２０と他のホスト装置との間での書き込み競合によるデータ破壊を防ぐことができる。
【０１２２】
また、ストレージ装置１０の負荷が例えば閾値を超えた場合に、当該ストレージ装置１０が重複排除のための機能の一部をホスト装置２０に委譲して、重複排除を当該ホスト装置２０と連携して行うようにしてもよい。即ち、ストレージ装置１０の負荷状況に応じて、当該ストレージ装置１０がホスト装置２０との連係動作を動的に切り替えてもよい。
【０１２３】
なお、本発明は、上記実施形態またはその変形例そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態またはその変形例に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を形成できる。例えば、実施形態またはその変形例に示される全構成要素から幾つかの構成要素を削除してもよい。
【符号の説明】
【０１２４】
１０…ストレージ装置、１１…通信部、１２…比較部（第１の比較手段）、１３…識別子生成部、１４…格納部、１５…制御部（第１の制御手段）、２０…通信部、２２…比較部（第２の比較手段）、２４…キャッシュ部、２５…制御部（第２の制御手段）、２６…ドライバ層、２７…ユーザ層、２８…バッファ部、２９…代表値生成部、１４１…ブロックテーブル（第１の記憶手段）、１４２…論理ディスクボリュームテーブル（第２の記憶手段）、１４２Ａ，１４２Ｂ…サブテーブル、２４１…ブロックテーブルキャッシュ（第１のキャッシュ）、２４２…論理ディスクボリュームテーブルキャッシュ（第２のキャッシュ）、２４２Ａ，２４２Ｂ…サブテーブルキャッシュ。
【図１】
2011203842.tif 000003
【図２】
2011203842.tif 000004
【図３】
2011203842.tif 000005
【図４】
2011203842.tif 000006
【図５】
2011203842.tif 000007
【図６】
2011203842.tif 000008
【図７】
2011203842.tif 000009
【図８】
2011203842.tif 000010
【図９】
2011203842.tif 000011
【図１０】
2011203842.tif 000012
【図１１】
2011203842.tif 000013
【図１２】
2011203842.tif 000014
【図１３】
2011203842.tif 000015
【図１４】
2011203842.tif 000016
【図１５】
2011203842.tif 000017
【図１６】
2011203842.tif 000018
【図１７】
2011203842.tif 000019
【図１８】
2011203842.tif 000020