(57)【特許請求の範囲】
【請求項１】
記憶デバイスと、
制御プログラムを備えるメモリと、
ホストからの前記記憶デバイスに対するデータのライトアクセス又は当該データに対するリードアクセスを、前記制御プログラムに基づいて制御するコントローラと、を備えるストレージサブシステムであって、
前記メモリには、前記記憶デバイスに書き込まれるデータの内容に基づくハッシュ値と前記ホストがアクセスに用いる論理アドレスとの対応付けを記憶して管理するハッシュテーブルと、前記データの前記記憶デバイスにおけるデータの格納先論理アドレスと前記ホストがアクセスに用いる論理アドレスとの対応付けを記憶するＬＡ（論理アドレス）を読み替えるためのテーブルと、が格納され、
前記コントローラは、
前記データの固有な属性に基づいて保証コードを生成し、
前記保証コードを付加して前記データを前記記憶デバイスにライトし、
前記データを前記記憶デバイスからリードする際に前記ＬＡを読み替えるためのテーブルに格納された、前記格納先論理アドレス又は前記ホストがアクセスに用いる論理アドレスに基づく、前記データに対応する保証コードとして期待される値と前記保証コードを比較して前記データの適正を判定し、
前記データとして第１のデータと第２のデータがあり、前記第１のデータと前記第２のデータとが同一内容のものである場合、前記第２のデータを前記記憶デバイスに格納することなく、前記第１のデータを前記第１のデータに基づく保証コードと共に前記記憶デバイスに格納し、
前記第２のデータに対する前記ホストからのリードアクセスを、前記ＬＡを読み替えるためのテーブルに基づき、前記第１のデータに対応付け、
前記記憶デバイスに格納した前記第１のデータと当該第１のデータに基づく保証コードとを読み出す、前記第２のデータに対する前記ホストからのリードアクセスの処理の際に、前記ＬＡを読み替えるためのテーブルを参照し、読み出した前記保証コードを検査する際の元情報となる、前記第２のデータの保証コードとして期待される保証コードの値を前記第１のデータの保証コードとして期待される値に読み替える、
ストレージサブシステム。
【請求項２】
前記コントローラは、
前記ホストがアクセスする第１の論理ボリュームと、前記記憶デバイスの記憶領域が割
り当てられる第２の論理ボリュームと、を備え、
前記第１の論理ボリュームの前記第１の論理アドレスに対する前記ホストからのライト
アクセスに基づいて、前記第１のデータを前記第２の論理ボリュームの第２の論理アドレスにライトし、
前記第１の論理ボリュームの第３の論理アドレスに対する前記ホストからの前記第２のデータをリードするためのリードアクセスに基づいて、前記第１のデータを前記第２の論理アドレスからリードし、
前記第１のデータをライトする際に付帯させる前記保証コードを前記第２の論理アドレスに基づいて生成し、
前記ＬＡを読み替えるためのテーブルとして、前記第１の論理アドレスと前記第３の論理アドレスとをそれぞれ前記第２の論理アドレスに対応させて管理し、
前記ホストから前記第１の論理ボリュームの第３の論理アドレスを通じて行われる前記第２のデータに対するリードアクセスを処理する際に、前記ＬＡを読み替えるためのテーブルに基づいて前記第２の論理ボリュームの第２の論理アドレスを取得し、
前記第２のデータへのリードアクセスに基づいて前記第１のデータを読み出した際に実施する保証コード検査において、
前記取得した前記第２の論理アドレスに基づいて、前記第１のデータに付帯する前記保証コードを検査する際の元となる、保証コードとして期待される値を設定し、前記保証コードとして期待される値と前記第１のデータに付帯する前記保証コードとの照合を以ってデータの適正を判定する、
請求項１記載のストレージサブシステム。
【請求項３】
前記コントローラは、
前記ホストがアクセスする第１の論理ボリュームと、前記記憶デバイスの記憶領域が割り当てられる第２の論理ボリュームと、を備え、
前記メモリには、前記第１の論理ボリュームの前記第１の論理アドレスと前記第２の論理ボリュームの第２の論理アドレスとを対応させる対応テーブルが格納され、
前記ＬＡを読み替えるためのテーブルとして前記第１の論理ボリュームの第３の論理アドレスを第１の論理アドレスとして読み替えるように管理し、
前記第１の論理アドレスに対する前記ホストからのライトアクセスに基づいて、前記第１のデータを前記第２の論理アドレスにライトし、
前記第１の論理ボリュームの第３の論理アクセスに対する前記ホストからの前記第２のデータをリードするためのリードアクセスに基づいて、前記第１のデータを前記第２の論理アドレスからリードし、
前記第１のデータをライトする際に付帯させる前記保証コードを前記第１の論理アドレスに基づいて生成し、
前記ホストから前記第１の論理ボリュームの第３の論理アドレスを通じて行われる前記第２のデータに対するリードアクセスを処理する際に、前記ＬＡを読み替えるためのテーブルに基づいて前記第３の論理アドレスから前記第２の論理ボリュームの第２の論理アドレスを取得し、
前記第２の論理アドレスから前記第１のデータを読み出した際に実施する保証コード検査において、
前記取得した前記第１の論理アドレスに基づいて検査部での前記第１のデータに付帯する前記保証コードを検査する際の元となる保証コードとして期待される値を設定し、前記生成した保証コードとして期待される値と前記第１のデータに付帯する前記保証コードとの照合を以ってデータの適正を判定する、
請求項１記載のストレージサブシステム。
【請求項４】
前記第１の論理ボリュームは、前記ホストからのライトアクセスに基づいて、前記第２の論理ボリュームから前記記憶デバイスの記憶容量が動的に割り当てられる仮想ボリュームである、請求項２又は３記載のストレージサブシステム。
【請求項５】
前記コントローラは、前記第１のデータと前記第２のデータが同一であるか否かをハッシュ値に基づいて判定する第１の判定を行い、前記第１の判定でデータ同一の可能性があると判断された場合、前記第１のデータと前記第２のデータの内容を直接比較に基づいて第２の判定を行う、請求項１記載のストレージサブシステム。
【請求項６】
前記第２のデータの固有な属性が当該第２のデータが格納される論理ボリュームの論理アドレスである、請求項１記載のストレージサブシステム。
【請求項７】
記憶デバイスと、
制御プログラムを備えるメモリと、
ホストからの前記記憶デバイスに対するデータのライトアクセス又は当該データに対するリードアクセスを、前記制御プログラムに基づいて制御するコントローラと、を備えるストレージサブシステムの制御方法であって、
前記メモリには、前記記憶デバイスに書き込まれるデータの内容に基づくハッシュ値と前記ホストがアクセスに用いる論理アドレスとの対応付けを記憶して管理するハッシュテーブルと、前記データの前記記憶デバイスにおけるデータの格納先論理アドレスと前記ホストがアクセスに用いる論理アドレスとの対応付けを記憶するＬＡ（論理アドレス）を読み替えるためのテーブルと、が格納され、
前記コントローラは、
前記データの固有な属性に基づいて保証コードを生成し、
前記保証コードを付加して前記データを前記記憶デバイスにライトし、
前記データを前記記憶デバイスからリードする際に前記ＬＡを読み替えるためのテーブルに格納された、格納先論理アドレス又は前記ホストがアクセスに用いる論理アドレスに基づく、前記データに対応する保証コードとして期待される値と前記保証コードを比較して前記データの適正を判定し、
前記データとして第１のデータと第２のデータがあり、前記第１のデータと前記第２のデータとが同一内容のものである場合、前記第２のデータを前記記憶デバイスに格納することなく、前記第１のデータを前記第１のデータに基づく保証コードと共に前記記憶デバイスに格納し、
前記第２のデータに対する前記ホストからのリードアクセスを、前記ＬＡを読み替えるためのテーブルに基づき、前記第１のデータに対応付け、
前記記憶デバイスに格納した前記第１のデータと当該第１のデータに基づく保証コードとを読み出す、前記第２のデータに対する前記ホストからのリードアクセスの処理の際に、前記ＬＡを読み替えるためのテーブルを参照し、読み出した前記保証コードを検査する際の元情報となる、前記第２のデータの保証コードとして期待される保証コードの値を前記第１のデータの保証コードとして期待される値に読み替える、
ストレージサブシステムの制御方法。
【請求項８】
前記コントローラは、
前記ホストがアクセスする第１の論理ボリュームと、前記記憶デバイスの記憶領域が割
り当てられる第２の論理ボリュームと、を備え、
前記第１の論理ボリュームの前記第１の論理アドレスに対する前記ホストからのライト
アクセスに基づいて、前記第１のデータを前記第２の論理ボリュームの第２の論理アドレスにライトし、
前記第１の論理ボリュームの第３の論理アドレスに対する前記ホストからの前記第２のデータをリードするためのリードアクセスに基づいて、前記第１のデータを前記第２の論理アドレスからリードし、
前記第１のデータをライトする際に付帯させる前記保証コードを前記第２の論理アドレスに基づいて生成し、
前記ＬＡを読み替えるためのテーブルとして、前記第１の論理アドレスと前記第３の論理アドレスとをそれぞれ前記第２の論理アドレスに対応させて管理し、
前記ホストから前記第１の論理ボリュームの第３の論理アドレスを通じて行われる前記第２のデータに対するリードアクセスを処理する際に、前記ＬＡを読み替えるためのテーブルに基づいて前記第２の論理ボリュームの第２の論理アドレスを取得し、
前記第２のデータへのリードアクセスに基づいて前記第１のデータを読み出した際に実施する保証コード検査において、
前記取得した前記第２の論理アドレスに基づいて、前記第１のデータに付帯する前記保証コードを検査する際の元となる、保証コードとして期待される値を設定し、前記保証コードとして期待される値と前記第１のデータに付帯する前記保証コードとの照合を以ってデータの適正を判定する、
請求項７記載のストレージサブシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータの非重複化（de-duplication）機能を備えたストレージサブシステムとその制御方法に関するものである。
【背景技術】
【０００２】
ストレージサブシステムとしてのディスクアレイ装置は、複数の磁気ディスクないし不揮発メモリ等を用いた半導体ディスク(SSD; Solid State Disk)をアレイ状に構成して、ディスクアレイコントローラ配下に置いている。ディスクアレイ装置は、ホストコンピュータからのリード要求（データの読み出し要求）およびライト要求（データの書き込み要求）を複数のディスクを並列に動作させて高速に処理する。
【０００３】
多くのディスクアレイ装置では、ディスクの故障によるデータ損失を防ぐために、RAID(Redundant Array of Inexpensive Disks)と呼ばれるデータ冗長化技術を採用している(例えば、非特許文献1参照)。RAIDは特定のディスクや特定のセクタが故障しデータがディスクから読み出せない障害が発生したとき、有効に機能する。
【０００４】
しかしながら、このような機械的な故障がなく、ディスクアレイコントローラがデータをディスクから読み出すことができるものの、そもそも何らかのトラブルによりディスクの正しいアドレスにデータが書き込まれていなかったり、データそのものが化けたものであるなどの場合の障害には、RAIDでは対処できない。
【０００５】
そこで、このようなデータについての障害に対処するため、一部のディスクアレイ装置は、ホストから論理ボリュームに対する書き込み要求に基づくデータブロックに、保証コードと呼ばれる、データブロックの属性に基づく冗長情報を付加してこれをディスクに格納し、データ読み出しの際に、この冗長情報である保証コードをチェックすることで、既述のデータについての障害を検出しようとしている。
【０００６】
例えば、特許文献1は、データブロックの論理アドレス(LA, Logical Address)値を保証コードとしてデータの内容に付する方法を開示しており、特許文献2では、LA/LRC(LAとLRC(Longitudinal Redundancy Check))を保証コードとして付す形態を開示している。
【０００７】
一方、ディスクへ格納するデータ量を削減する技術としてData De-duplicationと呼ばれるデータの重複を排除する制御技術が知られている。De-duplicationとは、ホストから書き込まれたデータブロックの内容が、先にディスクの別の場所に格納されたデータブロックの内容と同じだった場合、重複データはディスクに書き込まず、同じ内容のデータが格納されているアドレスを参照するようにテーブルやデータベースに記録するにとどめることで、ディスクに格納される総データ量を削減する制御方法である。
【０００８】
例えば、特許文献3では、既に格納されたデータか否かをチェックするモジュールを持ち、データが同一の場合には当該モジュールが当該ブロックのIDを返すデータ格納方法について開示している。
【非特許文献１】"A Case for Redundant Arrays of Inexpensive Disks (RAID)", David A. Patterson, Garth Gibson, and Randy H. Katz, Computer Science Division Department of Electrical Engineering and Computer Sciences, University of California Berkeley
【特許文献１】特開2000-347815
【特許文献２】特開2001-202295
【特許文献３】米国特許 6928526
【発明の開示】
【発明が解決しようとする課題】
【０００９】
既述の保証コードを利用したデータチェック技術と、Data De-duplicationと呼ばれるデータ削減制御技術は別々に存在しており、この２つの技術を組み合わせるというこころみは従来行われていなかった。そこで、本願発明者が鋭意検討したところ、これら２つの技術を単に組み合わせるだけだと以下の問題が生じることが分かった。
【００１０】
ホストから論理ボリュームの異なる論理アドレスに書き込まれようとする二つのデータA、Bがあり、共にデータの内容が同じだとする。De-duplicationは、内容の重複を取り去るために、データAだけをディスクに格納し、データBをディスクに格納せず、データBをデータAへのポインタに置き換える。従って、ホストからデータBに対するリード要求があった場合には、ディスクアレイコントローラは、データAを参照する。
【００１１】
データ保証コードを利用するディスクアレイ装置では、ホストからリード要求があった際、データがディスクの正しい位置から読み出されたかを、保証コードを用いてチェックする。ホストからデータBに対するリード要求があった場合、ディスクアレイコントローラはリード要求に基づき、データBに対応する論理アドレスからデータBが正しく読み出されたか否かを、保証コードを用いてチェックしようとする。
【００１２】
De-duplicationにより、データBに対するリード要求に対して、ディスクアレイコントローラが参照するのはデータAである。このため、読み出されたデータの保証コードはデータAに対する論理アドレスに基づいたものとなる。しかし、ディスクアレイコントローラはデータBに対応する保証コードを期待してチェックを行うため、保証コードチェックエラーと判定してしまう。したがって、これでは、保証コードを利用したデータチェック技術とData De-duplicationと呼ばれるデータ削減制御技術とを組み合わせることはできない。
【００１３】
そこで、データそのものの内容に加え保証コードの内容まで含めて全体として同じ内容である場合にDe-duplicationを行うようにすることが考えられる。
【００１４】
しかしながら、保証コードはLAなどデータブロックに固有の値であるため、全体の内容が重複する複数のデータが存在する可能性は極めて低い。従って、この方法では、保証コードを利用したデータチェック技術をディスクアレイ装置が利用する限り、De-duplicationによるデータ総量を低減させるという恩恵をほとんど受けられない。
【００１５】
そこで、本発明は、保証コードを利用したデータチェック技術を利用しながら、De-duplicationによるデータ量を低減する機能を実装することができるストレージサブシステム及びその制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１６】
前記目的を達成するために、本発明は、記憶デバイスと、制御プログラムを備えるメモリと、ホストからの前記記憶デバイスに対するデータのライトアクセス又は当該データに対するリードアクセスを、前記制御プログラムに基づいて制御するコントローラと、を備えるストレージサブシステム及びその制御方法であって、前記メモリは、保証コード期待値管理テーブルと、保証コード期待値読み替えテーブルとが格納され、前記コントローラは、前記データの固有な属性に基づいて保証コードを生成し、前記保証コードを付加して前記データを前記記憶デバイスにライトし、前記データを前記記憶デバイスからリードする際に前記保証コード期待値管理テーブルに格納された、前記データに対応する保証コード期待値と前記保証コードを比較して前記データの適正を判定し、前記データとして第１のデータと第２のデータがあり、前記第１のデータと前記第２のデータとが同一内容のものである場合、前記第２のデータを前記記憶デバイスに格納することなく、前記第１のデータを前記保証コードと共に前記記憶デバイスに格納し、前記第２のデータに対する前記ホストからのリードアクセスを前記第１のデータに対応付け、前記第２のデータに対する前記ホストからのリードアクセスを処理する際に、前記保証コード期待値読み替えテーブルを参照し、前記第２のデータの保証コード期待値を前記第１のデータの保証コード期待値に読み替えることを特徴とするものである。
【発明の効果】
【００１７】
本発明によれば、保証コードを利用したデータチェック技術を利用しながら、De-duplicationによるデータ量を低減する機能を実装することができるストレージサブシステム及びその制御方法を提供することができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の実施の形態を、図面を参照して説明する。図１は本発明におけるディスクアレイ装置の構成を表した図である。ディスクアレイ装置１は、管理用ネットワーク3を介して管理用端末装置5と接続されている。また、ディスクアレイ装置１は、ストレージネットワーク４を介して複数のホスト計算機2と接続されている。
【００１９】
ディスクアレイ装置１には、ディスクアレイコントローラ１７１、１７２が備えられており、ストレージネットワークとの間で同時に多くのデータを入出力できるようにしている。なお、実施の形態によっては、ディスクアレイコントローラは１つでもよいし、３つ以上あってもよい。また、ディスクアレイコントローラの機能や部品ごとに複数に分割されて実装されていても良い。また、ディスクアレイ装置１には、複数のディスクドライブ（以下、単にディスク）D００、D０１、D０２、・・・、D２N等が備えられている。
【００２０】
ディスクアレイコントローラ１７１、１７２は接続インターフェース１３０およびインターフェース間を接続する信号線１０３を介して、ディスクD００〜D２Nと接続されている。これにより、ディスクアレイコントローラ１７１、１７２とディスクD００〜D２Nは互いにデータの入出力を行うことができる。ディスクアレイコントローラ１７１，１７２とディスクD００〜D２Nとの接続には、SATA（Serial ATA）やSAS（Serial Attached SCSI）、Fibre Channelなどデータ転送に適切な通信路が用いられる。
【００２１】
ディスクアレイコントローラ１７１等では、制御プログラムが動作しており、ディスクD００等に対するデータの入出力を制御する。また、ディスクD００等によって構成されるRAIDの構成やRAID上に構築される論理ボリュームを管理する。また、管理用端末装置5と通信を行い、ディスクアレイ装置１の設定や管理、保守に必要な種々のデータをやりとりする。
【００２２】
ディスクD００等は、SATA、SAS、Fibre Channel等で接続可能なディスクであり、媒体には磁気ディスク、不揮発メモリを利用した半導体ディスク等が用いられている。
【００２３】
管理用端末装置５は、CPU、メモリ、記憶装置、インターフェース、入力装置および表示装置が備わるコンピュータ装置である。管理用端末装置５では管理プログラムが動作しており、当該管理プログラムによってディスクアレイ装置１の動作状態を把握し、ディスクアレイ装置１の動作を制御する。なお、管理用端末装置５ではWebブラウザ等のクライアントプログラムが動作し、ディスクアレイ装置１から供給される管理プラグラム（Common Gateway InterfaceやJava（登録商標）等）によってディスクアレイ装置１の動作状態の把握や動作の制御をするようにしてもよい。表示画面５１は管理用端末装置５に備わる表示装置の画面である。
【００２４】
ホスト計算機２は、CPU、メモリ、記憶装置およびインターフェースが備わるコンピュータ装置であり、ディスクアレイ装置から供給されるデータを利用して、データベースサービスやウェブサービス等を利用可能にする。
【００２５】
ストレージネットワーク４は、例えばSASプロトコル、Fibre Channelプロトコル、iSCSIプロトコルのような、データの転送に適するプロトコルで通信可能なネットワークである。
【００２６】
管理用ネットワーク3は、例えば、TCP/IPプロトコルによって、コンピュータ間でデータや制御情報を通信可能であり、例えばイーサネット（登録商標）が用いられる。
【００２７】
図２は、本発明の実施の形態のディスクアレイ装置の構成を示す概観図である。ディスクアレイコントローラ１７１等、およびディスクD００等、ファンおよび電源８は、ディスクアレイ装置１に内蔵されており、ディスクの台数に応じてディスク格納筐体Ｅ００、Ｅ１０、・・・、Ｅ８０などの複数の筐体を接続して構成される。
【００２８】
図３は、本発明の実施の形態におけるディスクアレイコントローラ１７１の内部構成を示すブロック図である。なお、ディスクアレイコントローラコントローラ１７２も同様である。
【００２９】
ディスクアレイコントローラ１７１には、CPU１９０１、メモリ１９０２、データ演算およびデータ転送コントローラ１９０４、データバッファ１９０７、ホスト接続インターフェースコントローラ１９０５、バックエンド接続インターフェースコントローラ１９０６、LANインターフェースコントローラ１９０８が備えられている。これらは実装に適切なデータ転送路を介して、互いに接続されている。
【００３０】
CPU１９０１は、メモリ１９０２に格納される制御プログラム１９０３を読み込んでディスクアレイ装置のさまざまな制御を行う。データ演算およびデータ転送コントローラ１９０４は、CPU１９０１の指示に基づいて、メモリ１９０２、ホスト接続インターフェースコントローラ１９０５、バックエンド接続インターフェースコントローラ１９０６、データバッファ１９０７との間で互いのデータの転送を行う。また、データバッファ１９０７を用いて、所定のデータに対するパリティ計算やハッシュ計算をはじめとする所定の演算のほか、保証コードの生成・付加、チェック・除去を実行する。
【００３１】
ホスト接続インターフェース１９０５は、図１にて示した、ホスト計算機２との間でデータの入出力の制御を行い、必要に応じて、データバッファ１９０７にデータを格納したり、取り出したりする。
【００３２】
バックエンド接続インターフェース１９０６は、ディスクD００等との間でデータの入出力を行い、必要に応じてデータバッファ１９０７にデータを格納したり、取り出したりする。
【００３３】
データバッファ１９０７は、例えばDIMM等で構成されるメモリであり、不揮発メモリないし、バッテリ等によって不揮発にされた揮発メモリが用いられる。
【００３４】
LANインターフェースコントローラ１９０８は、管理用端末装置５と管理用ネットワーク３を通じてデータや制御情報の入出力を行うインターフェースコントローラである。
【００３５】
なお、図２に示すディスクアレイコントローラのブロック構成は一例であり、同様の機能を有せば、実装にハードウェア、ソフトウェアを問わない。また、ブロックの構成が異なっていてもよい。例えば、ホスト接続インターフェースコントローラ１９０５やバックエンド接続インターフェースコントローラ１９０６、データバッファ１９０７、ＣＰＵ１９０１が別々の基板に実装され、互いに高速なネットワークで結合されているような形態でも良い。
【００３６】
図４は、制御プログラム１９０３を構成するプログラムおよび情報管理テーブルを示す説明図である。制御プログラム１９０３には以下のものが含まれる。すなわち、RAID制御プログラム１９１１、RAIDグループ設定プログラム１９１２、論理ボリューム設定プログラム１９１３、管理・通知プログラム１９１４、De-duplication制御プログラム１９１５、保証コードチェックプログラム１９１６、ディスク情報管理テーブルT1、RAIDグループ情報管理テーブルT2、論理ボリューム情報管理テーブルT3、空きプール領域管理リストＴ４，使用済みプール領域管理リストＴ５である。
【００３７】
RAID制御プログラム１９１１は、ホスト計算機２と入出力されたデータをRAIDの仕組み基づいて処理し、ディスクD００等と入出力を行う。また、同制御にかかわる障害復旧処理を行う。
【００３８】
RAIDグループ設定プログラム１９１２は、管理用端末装置５からの指示やRAID制御プログラム１９１１の指示に基づき、RAIDグループ情報管理テーブルT2を用いて、RAIDグループの作成、変更、削除を行う。
【００３９】
論理ボリューム設定プログラム１９１３は、管理用端末装置５からの指示やRAID制御プログラム１９１１の指示に基づき、論理ボリューム情報管理テーブルT3を用いて、論理ボリュームの作成、変更、削除を行う。論理ボリュームはLU(Logical Unit)と呼ばれることもある。
【００４０】
管理・通知プログラム１９１４は、管理用端末装置５とデータや制御情報の授受を行う。De-duplication制御プログラム１９１５は、RAID制御プログラム１９１１と連携し、重複データの排除に伴う一連の処理を行う。
【００４１】
保証コードチェックプログラム１９１６は、ホストからリード要求があった際、データが正しい位置から読み出されたかをチェックする。
【００４２】
ディスク情報管理テーブルT1は、ディスクD００等の各種情報を記録するテーブルである。ここで各種情報とは、具体的には、ディスクの番号、ディスクの容量、ディスクの状態(「正常」か「故障」か、など)、所属するＲＡＩＤグループの番号、などである。
【００４３】
RAIDグループ情報管理テーブルT2は、ディスクD００等から構成されるRAIDグループの各種情報を記録するテーブルである。ここで各種情報とは、具体的には、RAIDグループの番号、RAIDレベル、RAIDに含まれるディスク数、RAIDの有効容量（実際にデータを書き込める容量）、当該RAIDグループの状態（「正常」か「縮退」か「閉塞」か）、論理ボリュームへの割当済容量、未使用容量である。
【００４４】
論理ボリューム情報管理テーブルT3は、RAID上に構成される論理的なディスク(ボリューム、LU)の各種情報を記録するテーブルである。ここで各種情報とは、具体的には、論理ボリュームの番号、論理ボリュームの容量、論理ボリュームの形態（「実」か「仮想」か「プール」か）、割当元のRAIDグループまたはプールボリュームの番号、実ボリュームであれば当該ボリュームの割当開始LBA(Logical Block Address)や終了LBA、仮想ボリュームであれば実際の使用量やDe-duplicationによる重複削減率、プールボリュームであれば割当済み容量や未使用容量など、である。
【００４５】
実ボリュームとはあらかじめ全容量がディスク上に確保される通常のボリュームであり、仮想ボリュームとは、データが書き込まれた部分にだけ動的に容量が割り当てられるボリュームであり、プールボリュームとは、仮想ボリュームに動的に容量(データブロック)を提供するボリュームである。
【００４６】
テーブルＴ１、Ｔ２、Ｔ３の内容は、メモリ１９０２上に置かれると共に、管理用端末装置５からも確認することができる。論理ボリューム情報であれば、例えば図２０のＶ１のように管理画面５１に表示される。
【００４７】
空きプール領域管理リストＴ４は、前記論理ボリュームのうち、プールボリュームとして指定されたボリュームの未使用容量を論理データブロック単位で管理するリストである。
【００４８】
使用済みプール領域管理リストＴ５は、前記論理ボリュームのうち、プールボリュームとして指定されたボリュームの使用済み容量を論理データブロック単位で管理するリストである。
【００４９】
図５はデータバッファ１９０７に格納される情報管理テーブルやキャッシュ情報を示す説明図である。データバッファ１９０７には、以下のものが含まれる。すなわち、ＬＡ(Logical Address)読替えテーブルＴ６、ハッシュテーブルの一部分Ｔ７，入出力データキャッシュ領域Ａ１である。
【００５０】
ＬＡ読替えテーブルＴ６は、ＣＰＵ１９０１がデータ演算およびデータ転送コントローラ１９０４を用いて、De-duplicationされたボリュームの保証コードチェック（LA/LRCチェック）を行う際、チェック元のＬＡ情報を書き換えるために用いる情報テーブルである。
【００５１】
ハッシュテーブルの一部分Ｔ７はハッシュテーブル全体Ｔ８の一部をキャッシングしたものである。ハッシュテーブルＴ８はサイズが非常に大きいため、ディスクの管理情報格納領域等に格納される。なお、データバッファ１９０７のサイズが十分に大きいときは、ハッシュテーブルの一部分Ｔ７のようなキャッシングは行わず、ハッシュテーブル全体Ｔ８を配置しても良い。
【００５２】
入出力データキャッシュ領域Ａ１は、ホスト３等やディスクＤ００等の間で入出力されるデータをキャッシングしたり、ＲＡＩＤのパリティ演算や、ハッシュ値の演算のために用いられるワーキングメモリ領域である。
【００５３】
図６は、本発明の実施の形態における空きプール領域管理リストの説明図である。空きプール領域管理リストＴ４には、仮想ボリュームに割り当てられていない未使用の論理データブロックがLAを用いて記録されている。LA(Logical Address)は、論理ボリュームの番号(LUN, Logical Unit Number)と論理ボリューム上のデータブロックのアドレス(LBA, Logical Block Address)から構成され、論理データブロックに固有なアドレス情報である。
【００５４】
図７は、本発明の実施の形態における使用済みプール領域管理リストの説明図である。使用済みプール領域管理リストＴ５には、仮想ボリュームに既に割り当てられている論理データブロックがLAを用いて記録されている。また同時に、そのブロックがDe-duplicationによって何重に参照されているかについても記録している。
【００５５】
図８は、本発明の実施の形態におけるハッシュテーブルの説明図である。ハッシュテーブルＴ６は実際にディスクに書き込まれたデータブロックの内容のハッシュ値と、当該データブロックのＬＡを記録しているテーブルである。例えば、ハッシュ値が603AB32353を示す内容が書かれたデータブロックは、アドレスがLUN90：LBA353462の位置に格納されていることが分かる。
【００５６】
図９は、本発明の実施の形態におけるＬＡ読み替えテーブルの説明である。ＬＡ読み替えテーブルＴ６は、保証コードチェック（LA/LRCチェック）の際に読替えるべきＬＡの情報が記録されている。例えば、ＬＵＮ１０：ＬＢＡ８８５９０がチェックの対象のときは、ＬＡ情報をＬＵＮ９０：ＬＢＡ３４３５６２に読替える必要があることが分かる。
【００５７】
図１０は、以上の説明の理解を助けるために、仮想ボリューム、プールボリューム、空きプール領域管理リスト、使用済みプール領域管理リスト、および、LA読み替えテーブルの関係を模式的に示した図である。
【００５８】
ホスト計算機には、仮想ボリュームがあたかも実ボリュームのように見えている。ホスト計算機は、仮想ボリューム上のアドレスを指定してデータの書き込みを行う。仮想ボリュームのアドレスを指定して書き込まれたデータは一旦ディスクアレイコントローラのキャッシュ上に蓄えられ、所定の演算や処理を終えた後、プールボリュームとして確保されたディスク領域に書き込まれる。空きプール領域管理リストと使用済みプール領域管理リストは互いに連携し、どのブロックが使用されたか、あるいはどのブロックが開放されたか(すなわち、未使用（空き）となったか)を記録する。また、必要に応じてLA読み替えテーブルがディスクアレイコントローラの制御プログラムによって更新される。
【００５９】
図１１は、本発明の実施の形態におけるDe-duplication処理において、ホストからデータが書き込まれたときにDe-duplication制御プログラム１９１５が行う、重複データ排除処理を示すフローチャートである。
【００６０】
De-duplication制御プログラム１９１５は、ホストから仮想ボリュームのアドレスを指定して書き込まれた(ライトされた)ブロックＢがディスクアレイコントローラ１７１等の入出力データキャッシュ領域Ａ１に格納されると、書き込まれたブロックBのデータ内容からハッシュ値ＨBを計算する（Ｓ１０００）。なお、この時点で、ブロックＢには、仮想ボリュームのアドレスに基づく保証コード(LA/LRC)がデータ演算およびデータ転送コントローラ１９０４によって自動的に付加されている。
【００６１】
次に、同制御プログラム１９１５はハッシュテーブルＴ７，Ｔ８を検索し、ハッシュ値ＨBと一致するハッシュ値Ｈがないか検索する（Ｓ１０１０）。検索の結果、一致するハッシュ値Ｈが存在した場合（Ｓ１０２０：Ｙｅｓ）は、実際にブロックＢのデータ内容とハッシュ値Ｈを持つブロックＤの内容を比較する（Ｓ１０３０）。これは、ハッシュ値が同じでも、内容が異なるケース（シノニムが存在するケース）があるからである。
【００６２】
比較の結果、ブロックＢとブロックＤの内容が一致すれば（Ｓ１０４０：Ｙｅｓ）、ブロックＢはブロックＤと内容が重複しているので、De-duplication可能だと判断する。その結果、ブロックDの参照回数が増えるので、これを記録するために、使用済みプール領域管理リストＴ５を用いて、ブロックＤの参照数を１増加させる（Ｓ１０５０）。
【００６３】
次に、ＬＡ読み替えテーブルＴ６に関する処理に入る。De-duplication制御プログラム１９１５は、ＬＡ読替えテーブルＴ６を参照し、読替え元がブロックＢのＬＡとなっているレコードがないか検索する（Ｓ１０６０）。該当するレコードが存在しない場合（Ｓ１０７０：Ｎｏ）、ＬＡ読み替えテーブルＴ６に、ブロックＢへのアクセスをブロックＤへ読替えるよう、両者のＬＡを用いて記録する（Ｓ１０８０）。
【００６４】
一方、Ｓ１０２０において、ハッシュ値ＨＢと一致するハッシュ値Ｈが存在しなかった場合（Ｓ１０２０：Ｎｏ）、ブロックＢは過去にディスクに記録されたいずれのデータブロックとも内容が重複していないことを意味する。従って、De-duplication制御プログラム１９１５は、新たにブロックＢの内容を書き込むためのボリューム上の空きブロックＤＢを空きプール領域管理リストＴ４から確保し（Ｓ１１１０）、ブロックＤＢを使用済みプール領域管理リストＴ５に登録する（Ｓ１１２０）。
【００６５】
次に、同プログラムは、ブロックＢが入出力データキャッシュ領域Ａ１に格納される際に自動的に付加された仮想ボリュームのアドレスに基づく保証コード(LA/LRC)を破棄し、ブロックＤＢのLAおよびブロックＢのデータ内容から新たな保証コード(LA/LRC)を生成して（Ｓ１１３０）、ブロックＢの内容とともに、ブロックＤＢに書き込む（Ｓ１１４０）。
【００６６】
そして、ハッシュ値ＨＢを示すブロックＢの内容がブロックＤＢに書き込まれたことをハッシュテーブルＴ７，Ｔ８に記録し（Ｓ１１５０）、ブロックＤＢの参照数を１増やす（Ｓ１０５０）。以降、Ｓ１０６０，Ｓ１０７０に示す処理を行い、Ｓ１０８０にてブロックＢへのアクセスをブロックＤＢへ読替えるよう、両者のＬＡを用いてＬＡ読み替えテーブルＴ６に記録する。
【００６７】
一方、Ｓ１０４０において、ブロックＢのデータ内容とハッシュ値Ｈを持つブロックＤの内容を比較した結果、内容が一致しなかった場合（Ｓ１０４０：Ｎｏ）、ブロックＢとブロックＤは同じハッシュ値を持つが内容が異なる（シノニムである）ということが分かる。
【００６８】
そこで、De-duplication制御プログラム１９１５は、更に同一ハッシュ値Ｈを持つブロックが他にないかハッシュテーブルＴ７，Ｔ８を検索し（Ｓ１１００）、存在した場合には（Ｓ１１００：Ｙｅｓ）、同様にしてブロックＢとの比較を実施する（Ｓ１０３０に戻る）。
【００６９】
また、存在しなかった場合には（Ｓ１１００：Ｎｏ）、ブロックＢは過去にディスクに記録されたいずれのデータブロックとも内容が重複していないので、ディスクへの新規書き込みを行うためのＳ１１１０以降の処理を実施する。Ｓ１１１０以降の処理については先に説明した通りである。
【００７０】
一方、Ｓ１０７０において、読替え元がブロックＢのＬＡとなっているレコードがＬＡ読替えテーブルＴ６に存在した場合（Ｓ１０７０：Ｙｅｓ）、ホストは過去にブロックＢのアドレスに対して書き込みを行っており、今回その内容が更新されたことを意味する。すなわち、ブロックＢの内容書き換えに伴う処理が必要となる。はじめに過去の関連付け情報を消去するために、De-duplication制御プログラム１９１５は、使用済みプール領域管理リストＴ５を用いて、前記レコードの読替え先に指定されているブロックDOLDの参照数を1減じ（Ｓ１２００）、その後、ＬＡ読替えテーブルＴ６から前記レコードを削除する（Ｓ１２１０）。次に、使用済みプール領域管理リストＴ５を再度参照し、ブロックＤOLDの参照数が０になっていないかチェックする（Ｓ１２２０）。
【００７１】
チェックの結果、参照数が０の場合（Ｓ１２２０：Ｙｅｓ）には、ブロックＤOLDはどこからも参照されていないデータである、ということが分かるので、使用済みプール領域管理リストＴ５から削除し、空きプール領域管理リストＴ４に登録する（Ｓ１２３０）。そして、ハッシュテーブルＴ７，Ｔ８からもDOLDに関するレコードを削除する(Ｓ１２４０)。そして、新たな関連付けをＬＡ読替えテーブルに登録する（Ｓ１０８０）。
【００７２】
図１２は、以上の図１１における動作の説明の理解を助けるために、説明を模式図に表したものである。ホストから書き込まれたブロックＢはディスクアレイコントローラのキャッシュに格納されるとハッシュ値ＨＢが計算される（Ｓ１０００、Ｚ１）。ＨＢはハッシュテーブルと比較され（Ｓ１０１０、Ｚ２）、新規ならプール領域から書き込み用ブロックＤＢが割り当てられる（Ｓ１１１０、Ｓ１１２０、Ｚ３）。保証コードが生成され（Ｓ１１３０，Ｚ４）、プールボリューム上のブロックＤＢに書き込まれる（Ｓ１１４０、Ｚ５）。
【００７３】
ブロックＢの書き込みが内容更新に相当するとき（Ｓ１０７０：Ｙｅｓ）は、旧読み替え先ＤOLDに対する処理が施される。ＤOLDがもはやどこからも参照されていなければ（Ｓ１２２０：Ｙｅｓ）、ＤOLDの情報は使用済みプール領域管理リスト、ハッシュテーブルから削除され、空きプール領域管理リストに登録される（Ｓ１２３０，Ｓ１２４０、Ｚ６）。
【００７４】
図１３は、本発明の実施の形態におけるDe-duplication処理において、ホストがデータを読み出そうとしたときにDe-duplication制御プログラム１９１５と保証コードチェックプログラム１９１６が行う処理を示すフローチャートである。
【００７５】
ホストから仮想ボリュームのアドレスを指定してブロックＢの読み出し（リード要求）が指示されると、De-duplication制御プログラム１９１５はリード要求先であるブロックＢのＬＡをＬＡ読替えテーブルＴ６から検索する（Ｓ２０００）。該当レコードが存在した場合（Ｓ２０１０：Ｙｅｓ）、読替え先に指定されているブロックＤからデータ内容と保証コードを読み出し、入出力キャッシュ領域Ａ１に格納する（Ｓ２０２０）。
【００７６】
この時点では、保証コードチェックプログラム１９１６はブロックＢのＬＡを用いて、入出力キャッシュ領域Ａ１に格納されたブロックＤの保証コードのチェックを行おうとしている。そこで、De-duplication制御プログラム１９１５は、ＬＡ読替えテーブルＴ６の情報を用いて、保証コードチェックプログラム１９１６のチェック元ＬＡ情報をブロックＢのＬＡからブロックＤのＬＡに書き換える（Ｓ２０３０）。
【００７７】
保証コードチェックプログラム１９１６は、入出力キャッシュ領域Ａ１に格納された保証コード（LA/LRC）を用いて、まずLRCをチェックしてデータ化けがないかを確認し、次にＳ２０３０で書き換えられたＬＡ情報を用いてチェックを行い、データが正しい位置から読み出されたかを確認する。
【００７８】
ディスクからデータ化けなく正しい位置（すなわち、ブロックＤ）から読み出されていれば、チェック結果は正常となる。その場合（Ｓ２０４０）、保証コードチェックプログラム１９１６は保証コード(LA/LRC)を除去し、データの内容をホストへ返す（Ｓ２０５０）。
【００７９】
一方、Ｓ２０１０において、ＬＡ読み替えテーブルＴ６に該当レコードが存在しない場合は、ブロックＢのアドレスに対して過去に書き込みは行われていないため、ヌルデータ(ゼロ等のダミーデータ)を返す（Ｓ２１００）。
【００８０】
一方、Ｓ２０４０において、データ化けや、正しい位置から読み出されていない場合（Ｓ２０４０：Ｎｏ）には、ＲＡＩＤ制御におけるコレクションリードを実施し、当該ブロックのデータを回復して、ホストへ返す（Ｓ２２００）。
【００８１】
以上の実施形態によれば、保証コード付加・チェック機構のあるディスクアレイ装置においても、効果的にDe-duplicationによるデータ量削減機能を実装することができる。
【００８２】
また、本実施形態では、ホストからのオンラインデータ書き込み・読み出しの動作について説明したが、ホストをコピー元ボリュームに読替えれば、ディスクアレイ装置内のボリューム複製の際にコピー先ボリュームをDe-duplication処理する場合等にも適用できる。
【００８３】
第２の実施形態として、ホストからのアクセス要求そのものを読替える方法がある。すなわち、ブロックＢ２へのリード要求を、あたかも最初からブロックＢ１へのリード要求であったかのように処理する。以下、本実施形態を図１４〜図１９を用いて説明する。
【００８４】
図１４は、本実施形態における制御プログラム１９０３を構成するプログラムおよび情報管理テーブルを示す説明図である。制御プログラム１９０３には、第１の実施形態の構成に含まれるプログラムおよび情報管理テーブルに加え、アクセス読み替えリストＴ１０が含まれる。
【００８５】
アクセス読み替えリストＴ１０は、ホストからのアクセス要求を、重複排除により同一データを参照している、代表のアクセス要求に読替えるためのリストである。
【００８６】
図１５は、本実施形態におけるデータバッファ１９０７に格納される情報管理テーブルやキャッシュ情報を示す説明図である。データバッファ１９０７には、第１の実施形態におけるＬＡ読み替えテーブルＴ６に代わり、仮想ブロック〜実ブロック変換テーブルＴ１１が含まれる。仮想ブロック〜実ブロック変換テーブルＴ１１は、アクセス読み替えリストＴ１０で代表アクセス要求先となっている仮想ボリューム上のＬＡをプールボリューム上の実ブロックのＬＡへ変換するためのテーブルである。
【００８７】
図１６は、本実施形態におけるアクセス読み替えリストＴ１０の構造を説明した図である。アクセス読み替えリストＴ１０はDe-duplicationで同一データ内容を参照する仮想ボリューム上のブロックのＬＡをリスト構造で保持している。例えば、ブロックＢ１、Ｂ２、Ｂ７は同一のデータ内容を参照する仮想ボリューム上のブロックであり、これらのブロックへのアクセスは、リスト構造の要素であるブロックＢ１で代表されることを示している。
【００８８】
図１７は、本実施形態における仮想ブロック〜実ブロック変換テーブルＴ１１の構造を説明した図である。仮想ブロック〜実ブロック変換テーブルＴ１１は、仮想ボリューム上の代表アクセスブロックとプールボリューム上の実ブロックの対応を、ＬＡを用いて管理している。
【００８９】
図１８−１及び図１８−２は、本実施形態におけるDe-duplication処理において、ホストからデータが書き込まれたときにDe-duplication制御プログラム１９１５が行う、重複データ排除処理を示すフローチャートである。
【００９０】
De-duplication制御プログラム１９１５は、ホストから仮想ボリュームのアドレスを指定して書き込まれた(ライトされた)ブロックＢがディスクアレイコントローラ１７１等の入出力データキャッシュ領域Ａ１に格納されると、書き込まれたブロックBからハッシュ値ＨBを計算する（Ｓ３０００）。なお、この時点で、ブロックＢには、仮想ボリュームのアドレスに基づく保証コード(LA/LRC)がデータ演算およびデータ転送コントローラ１９０４によって自動的に付加されている。
【００９１】
次に、同プログラムはハッシュテーブルＴ７，Ｔ８を検索し、ハッシュ値ＨBと一致するハッシュ値Ｈがないか検索する（Ｓ３０１０）。検索の結果、一致するハッシュ値Ｈが存在した場合（Ｓ３０２０：Ｙｅｓ）は、実際にブロックＢのデータ内容とハッシュ値Ｈを持つブロックＤの内容を比較する（Ｓ３０３０）。これは、ハッシュ値が同じでも、内容が異なるケース（シノニムが存在するケース）があるからである。
【００９２】
比較の結果、ブロックＢとブロックＤの内容が一致すれば（Ｓ３０４０：Ｙｅｓ）、ブロックＢはブロックＤと内容が重複しているのでDe-duplication可能だと判断する。そして、プログラム内部にもつ新規記録ビットを０にする（Ｓ３０５０）。これは、同プログラムが、ブロックＢは新たにディスクに記録するデータではないことを一時的に記憶しておくためのフラグである。
【００９３】
次に、同プログラムは以降の処理のために仮想ブロック〜実ブロック変換テーブルＴ１１を参照し、ブロックＤに対応する仮想ボリューム上の代表ブロック（以下、代表仮想ブロック）ＢＶを特定しておく（Ｓ３０６０）。
【００９４】
次に、アクセス読み替えリストＴ１０の書き換えに関する処理に入る。De-duplication制御プログラム１９１５は、アクセス読替えリストＴ１０を参照し、リスト上のいずれかにブロックＢのＬＡが記録されていないか検索する（Ｓ３０７０）。記録が存在しない場合（Ｓ３０８０：Ｎｏ）、先に内部記憶しておいた新規記録ビットをチェックする（Ｓ３０９０）。新規記録ビットが０であった場合（Ｓ３０９０：Ｙｅｓ）には、ＢＶを代表仮想ブロックとするリストにブロックＢのＬＡを登録する。
【００９５】
一方、Ｓ３０２０において、ハッシュ値ＨＢと一致するハッシュ値Ｈが存在しなかった場合（Ｓ３０２０：Ｎｏ）、ブロックＢは過去にディスクに記録されたいずれのデータブロックとも内容が重複していないことを意味する。従って、De-duplication制御プログラム１９１５は、新たにブロックＢの内容を書き込むためのボリューム上の空きブロックＤＢを空きプール領域管理リストＴ４から確保し（Ｓ３２１０）、ブロックＤＢを使用済みプール領域管理リストＴ５に登録する（Ｓ３２２０）。次に、同プログラムは、ブロックＢのデータおよび保証コードをブロックＤＢに書き込む（Ｓ３２３０）。
【００９６】
そして、ハッシュ値ＨＢを示すブロックＢの内容がブロックＤＢに書き込まれたことをハッシュテーブルＴ７，Ｔ８に記録し（Ｓ３２４０）、De-duplication制御プログラム１９１５が内部に持つ新規記録ビットを１にする。これは、同プログラムが以降の処理の為にブロックＢは新たにディスクに記録するデータであることを一時的に記憶しておくためのフラグである。
【００９７】
新規記録ビットが１であった場合（Ｓ３０９０：Ｎｏ）、ブロックＢは新たな代表仮想ブロックであるので、仮想ブロック〜実ブロック変換テーブルＴ１１に、ブロックＢと書込み先であるブロックＤＢとの対応関係を記録する（Ｓ３４００）。また、アクセス読み替えリストＴ１０に、ブロックＢを代表仮想ブロックとするリストを新たにに作成する（Ｓ３４１０）。
【００９８】
一方、Ｓ３０８０において、アクセス読み替えリストＴ１０にブロックＢのＬＡが記録されていた場合（Ｓ３０８０：Ｙｅｓ）、ホストは過去にブロックＢのアドレスに対して書き込みを行っており、今回その内容が更新されたことを意味する。すなわち、ブロックＢの内容書き換えに伴う処理が必要となる。そこで、De-duplication制御プログラム１９１５は、ブロックＢが代表仮想ブロックかどうかをチェックする（Ｓ３３００）。代表仮想ブロックでなかった場合（Ｓ３３００：Ｎｏ）には、他のブロックへの影響はないので、単にアクセス読み替えリストＴ１０からブロックＢの記録を消去する（Ｓ３３１０）。
【００９９】
一方、Ｓ３３００においてブロックＢが代表仮想ブロックであった場合（Ｓ３３００：Ｙｅｓ）には、当該リストに他の要素が存在するか否かで処理が異なる。他の要素が存在する場合（Ｓ３３２０：Ｙｅｓ）は、読み替え元の先頭要素Ｃを新たな代表仮想ブロックとし（Ｓ３３３０）、仮想ブロック〜実ブロック変換テーブルＴ１０において、ブロックＢのＬＡをブロックＣのＬＡで書き換える（Ｓ３３４０）。
【０１００】
他の要素が存在しない場合（Ｓ３３２０：Ｎｏ）は、ブロックＢのデータ内容を格納していた実ブロックを消去する(未使用状態として登録する)必要がある。すなわち、ブロックＢに対応していた実ブロックＤOLDを使用済みプール領域管理リストＴ５から削除し、空きプール領域管理リストＴ４に登録する（Ｓ３３５０）。その後、仮想ブロック〜実ブロック変換テーブルＴ１１からブロックＢとブロックＤOLDの対応関係を記したレコードを削除し（Ｓ３３６０）、ハッシュテーブルＴ７，Ｔ８からブロックＤOLDに関するレコードを削除する（Ｓ３３７０）。そして、最後にアクセス読み替えリストＴ１０からブロックＢの記録を消去する（Ｓ３３１０）
【０１０１】
図１９は、本発明の実施の形態におけるDe-duplication処理において、ホストがデータを読み出そうとしたときにDe-duplication制御プログラム１９１５と保証コードチェックプログラム１９１６が行う処理を示すフローチャートである。
【０１０２】
ホストから仮想ボリュームのアドレスを指定してブロックＢ２の読み出し（リード要求）が指示されると、De-duplication制御プログラム１９１５はリード要求先であるブロックＢ２のＬＡをアクセス読み替えリストＴ１１から検索する（Ｓ４０００）。検索の結果、Ｂ２のＬＡが記録されていた場合には（Ｓ４０１０：Ｙｅｓ）、リストを走査して、ブロックＢ２が含まれるリストの代表仮想ブロックＢ１を特定し、以降あたかもブロックＢ１へのリード要求であったかのように処理する（Ｓ４０２０）。
【０１０３】
De-duplication制御プログラム１９１５は仮想ブロック〜実ブロック変換テーブルＴ１１を参照してブロックＢ１の実際の格納先であるブロックＤを特定し（Ｓ４０３０）、当該ブロックのデータと保証コードをディスクから読み出して、入出力キャッシュ領域Ａ１に格納する（Ｓ４０４０）。
【０１０４】
保証コードチェックプログラム１９１６は、ブロックＢ１からのリード要求であると思い込んで保証コード(LA/LRC)チェックを行う。すなわち、ＬＲＣチェックの後、チェック元情報をＢ１のＬＡとして、入出力キャッシュ領域Ａ１に格納された保証コードのＬＡをチェックする（Ｓ４０５０）。
【０１０５】
ディスクからデータ化けなく正しい位置（すなわち、ブロックＤ）から読み出されていれば、ブロックＤの保証コードにはブロックＢ１のＬＡに基づくLA/LRCが格納されているので、チェック結果は正常となる。その場合（Ｓ４０６０）、保証コードチェックプログラム１９１６は保証コード(LA/LRC)を除去し、データの内容をホストへ返す（Ｓ４０７０）。
【０１０６】
一方、Ｓ４０１０において、アクセス読み替えリストＴ１１にブロックＢ２のＬＡが記録されていなかった場合（Ｓ４０１０：Ｎｏ）は、ブロックＢ２のアドレスに対して過去に書き込みは行われていないため、ヌルデータ(ゼロ等のダミーデータ)を返す（Ｓ２１００）。
【０１０７】
一方、Ｓ４０６０において、データ化けや、正しい位置から読み出されていない場合（Ｓ４０６０：Ｎｏ）には、ＲＡＩＤ制御におけるコレクションリードを実施し、当該ブロックのデータを回復して、ホストへ返す（Ｓ４２００）。
【０１０８】
以上の第２の実施形態によれば、第１の実施形態と同様に、保証コード付加・チェック機構のあるディスクアレイ装置においても、効果的にDe-duplicationによるデータ量削減機能を実装することができる。
【０１０９】
また、ホストをコピー元ボリュームに読替えれば、ディスクアレイ装置内のボリューム複製の際にコピー先ボリュームをDe-duplication処理する場合等にも適用できる点も同様である。
【０１１０】
更に、第１の実施形態では、ディスクに格納される保証コードがプールボリューム上のブロックＤのＬＡに依存しているため、例えばブロックＤのＬＢＡが変わってしまうようなプールボリュームの物理的移動は容易にはできなかった。これに対し、第２の実施形態における保証コードは、プールボリューム上のブロックＤの格納位置には依存しない。このため、プールボリュームを、例えば、安価なディスクで構成される他のボリュームへマイグレーションしたり、遠隔地のディスクアレイ上のボリュームに移動あるいは複製したりすることが容易に可能となる。
【０１１１】
以上、２つの実施形態に基づき、本発明に係るディスクアレイ装置およびその制御方法について説明したが、これらの実施形態は発明の理解を助けるためのものであり、本発明を限定するものではない。本発明は、その趣旨ならびに特許請求の範囲を逸脱することなく、変更・改良され得ると共に、本発明にはその等価物が含まれることは勿論である。
【図面の簡単な説明】
【０１１２】
【図１】本発明におけるディスクアレイ装置の構成を表した図である。
【図２】本発明の実施の形態のディスクアレイ装置の構成を示す概観図である。
【図３】本発明の実施の形態におけるディスクアレイコントローラ１７１の内部構成を示すブロック図である。
【図４】制御プログラム１９０３を構成するプログラムおよび情報管理テーブルを示す説明図である。
【図５】データバッファ１９０７に含まれる情報管理テーブルおよびデータキャッシュ領域を示す説明図である。
【図６】本発明の実施の形態における空きプール領域管理リストの説明図である。
【図７】本発明の実施の形態における使用済みプール領域管理リストの説明図である。
【図８】本発明の実施の形態におけるハッシュテーブルの説明図である。
【図９】本発明の実施の形態におけるＬＡ読み替えテーブルの説明図である。
【図１０】本発明の実施の形態における仮想ボリューム、プールボリューム、各情報管理テーブル等の関係を示す模式図である。
【図１１】本発明の実施の形態において、De-duplication制御プログラム１９１５がホストのライト要求に対して行う処理の手順を示したフローチャートである。
【図１２】本発明の実施の形態において、De-duplication制御プログラム１９１５がホストのライト要求に対して行う処理を模式的に説明した図である。
【図１３】本発明の実施の形態において、De-duplication制御プログラム１９１５および保証コードチェックプログラム１９１６がホストのリード要求に対して行う処理の手順を示したフローチャートである。
【図１４】本発明の第２の実施形態における制御プログラム１９０３を構成するプログラムおよび情報管理テーブルを示す説明図である。
【図１５】本発明の第２の実施形態におけるデータバッファ１９０７に含まれる情報管理テーブルおよびデータキャッシュ領域を示す説明図である。
【図１６】本発明の第２の実施の形態におけるアクセス読み替えリストの説明図である。
【図１７】本発明の第２の実施の形態における仮想ブロック〜実ブロック変換テーブルの説明図である。
【図１８−１】本発明の第２の実施の形態において、De-duplication制御プログラム１９１５がホストのライト要求に対して行う処理の手順を示したフローチャートの前半部である。
【図１８−２】本発明の第２の実施の形態において、De-duplication制御プログラム１９１５がホストのライト要求に対して行う処理の手順を示したフローチャートの後半部である。
【図１９】本発明の第２の実施の形態において、De-duplication制御プログラム１９１５および保証コードチェックプログラム１９１６がホストのリード要求に対して行う処理の手順を示したフローチャートである。
【図２０】管理端末５の表示画面５１において、論理ボリューム情報管理テーブルT３で管理されるボリュームのうちDe-duplicationボリュームに関する情報を表示した際の画面例である。
【符号の説明】
【０１１３】
１ ディスクアレイ装置
２ ホスト計算機
３ 管理用ネットワーク
４ ストレージネットワーク
５ 管理用端末装置
１３０ 接続インターフェース
１７１，１７２ ディスクアレイコントローラ
１９０１ CPU
１９０２ メモリ
１９０４ データ演算及びデータ転送コントローラ
１９０５ ホスト接続インターフェースコントローラ
１９０６ バックエンド接続インターフェースコントローラ
１９０７ データバッファ
１９０８ LANインターフェースコントローラ
Ｖ１ 論理ボリューム管理画面
【図１】
0005331323.tif 000002
【図２】
0005331323.tif 000003
【図３】
0005331323.tif 000004
【図４】
0005331323.tif 000005
【図５】
0005331323.tif 000006
【図６】
0005331323.tif 000007
【図７】
0005331323.tif 000008
【図８】
0005331323.tif 000009
【図９】
0005331323.tif 000010
【図１０】
0005331323.tif 000011
【図１１】
0005331323.tif 000012
【図１２】
0005331323.tif 000013
【図１３】
0005331323.tif 000014
【図１４】
0005331323.tif 000015
【図１５】
0005331323.tif 000016
【図１６】
0005331323.tif 000017
【図１７】
0005331323.tif 000018
【図１８−１】
0005331323.tif 000019
【図１８−２】
0005331323.tif 000020
【図１９】
0005331323.tif 000021
【図２０】
0005331323.tif 000022