(57)【要約】【課題】RAW技術を用いることなく、記憶部に正しい情報が記憶されていることを保証すること。【解決手段】サーバ１０からアクセス要求を受けたときに、マイクロプロセッサ５０は、ユーザデータの格納先として指定されたLU＃、LBAとは異なるデータの格納先として、フリースロット３４を割当て、フリースロット３４にユーザデータとユーザデータを識別するデータ識別情報を格納し、LU＃、LBAで指定された更新前のデータスロット３０をゼロクリアし、次のリードアクセス時に、データスロット３０をアクセスし、読み出したデータ識別情報とサーバ１０からのリードアクセスで指定されたデータ識別情報とが一致したときには、正しいデータとしてこのリードデータをサーバ１０へ転送し、一致しないときには読み出したデータ識別情報を基に正しいデータを回復するための処理を行う。【選択図】図１
2009294699.tif 000002
【特許請求の範囲】
【請求項１】
上位装置のアクセス対象となるデータを記憶するデータ記憶領域と前記データ記憶領域に記憶されたデータの移動先となる予備記憶領域を有する記憶部と、前記上位装置からのアクセス要求に応答して、前記上位装置と情報の授受を行うとともに、前記アクセス要求を基に前記記憶部をライトまたはリードアクセスする制御部と、を備え、
前記制御部は、前記記憶部へのライトアクセス時に、前記アクセス要求で指定されたアクセス対象のデータ格納先とは異なる新データ格納先を前記予備記憶領域に設定し、当該設定された新データ格納先に、前記アクセス要求に付されたデータとデータ識別情報を格納してなる、ストレージ装置。
【請求項２】
前記制御部は、前記記憶部へのライトアクセス時に、前記アクセス対象のデータ格納先に格納されたデータを旧データとしてゼロクリアしてなる、請求項１に記載のストレージ装置。
【請求項３】
前記制御部は、前記記憶部へのライトアクセス時に、前記新データ格納先に、前記アクセス要求に付されたデータとデータ識別情報を格納したことを条件に、前記データ識別情報を前記新データ格納先に対するリードアクセス時のゼロクリア判定情報に設定してなる、請求項１に記載のストレージ装置。
【請求項４】
前記制御部は、前記記憶部へのリードアクセス時に、前記アクセス要求で指定されたアクセス対象のデータ格納先からデータとデータ識別情報を読み出し、読み出したデータ識別情報と前記アクセス要求に付されたデータ識別情報とを比較し、両者のデータ識別情報が一致したことを条件に、前記読み出したデータを前記上位装置に転送してなる、請求項１に記載のストレージ装置。
【請求項５】
前記制御部は、前記記憶部へのリードアクセス時に、前記アクセス要求で指定されたアクセス対象のデータ格納先からデータとデータ識別情報を読み出し、読み出したデータ識別情報と前記アクセス要求に付されたデータ識別情報とを比較し、両者のデータ識別情報が不一致であるときには、前記読み出したデータに関連する情報を前記データ記憶領域から読み出して、前記アクセス対象のデータを回復し、前記回復したデータを前記上位装置に転送してなる、請求項１に記載のストレージ装置。
【請求項６】
前記制御部は、前記記憶部へのライトアクセス時に、前記アクセス対象のデータ格納先に格納されたデータを旧データとしてゼロクリアし、前記記憶部へのリードアクセス時に、前記アクセス要求で指定されたアクセス対象のデータ格納先からデータとデータ識別情報を読み出し、前記読み出したデータがゼロクリアされたデータであるときには、前記ライトアクセスに伴うデータの上書きは失敗した旨を前記上位装置に転送してなる、請求項１に記載のストレージ装置。
【請求項７】
前記制御部は、前記記憶部へのライトアクセス時に、前記予備記憶領域の新データ格納先に前記データと前記データ識別情報が格納されたときには、前記予備記憶領域のうち前記新データ格納先に対応した領域の所属先を前記予備記憶領域から前記データ記憶領域に変更し、前記新データ格納先に、前記アクセス要求に付されたデータとデータ識別情報が格納されたときには、前記アクセス対象のデータ格納先に格納されていたデータを旧データとしてゼロクリアし、前記データがゼロクリアされたときには、前記データ記憶領域のうちデータがゼロクリアされた領域の所属先を前記データ記憶領域から前記予備記憶領域に変更してなる、請求項１に記載のストレージ装置。
【請求項８】
前記制御部は、前記記憶部へのライトアクセス時に、前記予備記憶領域の新データ格納先に前記データと前記データ識別情報が格納されたときには、前記予備記憶領域のうち前記新データ格納先に対応した領域の所属先を前記予備記憶領域から前記データ記憶領域に変更し、前記新データ格納先に、前記アクセス要求に付されたデータとデータ識別情報が格納されたときには、前記アクセス対象のデータ格納先をゼロクリア候補の開放待ちスロットとして開放待ちキューに記録して管理し、その後、前記開放待ちキューに記録された前記開放待ちスロットのデータをゼロクリアし、前記データがゼロクリアされたときには、前記データ記憶領域のうちデータがゼロクリアされた領域の所属先を前記データ記憶領域から前記予備記憶領域に変更してなる、請求項１に記載のストレージ装置。
【請求項９】
前記制御部は、前記記憶部へのライトアクセス時に、前記予備記憶領域の新データ格納先に前記データと前記データ識別情報が格納されたときには、前記予備記憶領域のうち前記新データ格納先に対応した領域の所属先を前記予備記憶領域から前記データ記憶領域に変更し、前記新データ格納先に、前記アクセス要求に付されたデータとデータ識別情報が格納されたときには、前記アクセス対象のデータ格納先をゼロクリア候補の開放待ちスロットとして、前記記憶部を構成するデバイス毎に開放待ちキューに記録するとともに、前記各デバイス毎に、ゼロクリアの対象となる総スロット数に対する、前記開放待ちスロットの数との比率を記録して管理し、その後、前記開放待ちキューに記録されたデバイスのうち前記比率の高いデバイスに対応した前記開放待ちスロットのデータから順番にゼロクリアし、前記データがゼロクリアされたときには、前記データ記憶領域のうちデータがゼロクリアされた領域の所属先を前記データ記憶領域から前記予備記憶領域に変更してなる、請求項１に記載のストレージ装置。
【請求項１０】
前記データ識別情報は、前記記憶部のデータ記憶領域を論理領域で構成したときの論理ユニットの番号と前記上位装置が認識する論理ブロックアドレスで構成されてなる、請求項１に記載のストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置に係り、特に、安価なディスクを利用したディスクアレイ装置に関する。
【背景技術】
【０００２】
近年、企業や官庁におけるデータ保存用のストレージ装置として、複数のハードディスクデバイスをRAID（Redundant  Array  of  Inexpensive  Disks）方式で管理・運用するようになされた、いわゆるディスクアレイ装置が広く用いられている。
【０００３】
ディスクアレイ装置においては、近年、低価格化が進み、これに伴い、ハードディスクデバイスとして、ファイバチャネルディスクよりも安価なSATA（Serial  AT  Attachment）ディスクが用いられている。
【０００４】
ところが、SATAディスクは安価な分、信頼性が低い。このため、例えば、ディスクアレイ装置を動作させるのに必要なシステム情報と呼ばれる情報のように、特に、信頼性を確保する必要がある情報を格納するハードディスクドライブも単にファイバチャネルディスクからSATAディスクに置き換えるだけでは、ディスクアレイ装置全体としての信頼性が低下する。
【０００５】
そこで、ホストからの要求に応答して、ストレージ部に対して、ライトデータに基づく第１のチェックコードをキャッシュメモリに記憶し、第１のチェックコードが付加されたライトデータの書き込みを、所定の記憶領域を指定して指示したあと、当該所定の記憶領域に記憶されているデータの読み出しを、ストレージ部に対して指示し、読み出されたデータに基づいて第２のチェックコードを生成し、第１および第２のチェックコードの対応関係が正しい場合に、ライトデータがストレージ部に正常に記憶されたと判断する方法が提案されている（特許文献１参照）。
【特許文献１】特開２００６−７２４３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載されている方法は、ハードディスクドライブ（HDD）にデータを書き込む際に、キャッシュメモリに記憶したデータをハードディスクドライブ（HDD）に書き込んだあと、ハードディスクドライブから読み出したデータとキャッシュメモリに記憶されたデータとを比較して、両者のデータが一致するか否かをチェックする、いわゆるRAW（Read  After  Write）技術を使用しているため、データの信頼性を確保することができる。
【０００７】
しかし、ハードディスクドライブにデータを書き込む際に、RAW技術を使用してデータのチェックを行うと、その分データのチェックに伴う時間がオーバーヘッドとなり、ハードディスクドライブの性能を十分に発揮できない。
【０００８】
そこで、本発明は、RAW技術を用いることなく、記憶部に正しい情報が記憶されていることを保証することができるディスクアレイ装置を提供することを目的とするものである。
【課題を解決するための手段】
【０００９】
前記目的を達成するために、本発明は、データライト時に、リードアフターライト技術を実施せずに、上位装置からの要求で指定されたデータ記憶領域とは異なる予備記憶領域にデータおよびデータの識別情報を書き込んだ後、上位装置からの要求とは非同期に更新前データの格納先データをゼロクリアし、データリード時に、上位装置からの要求で指定されたデータ格納先からデータの識別情報を読み出し、読み出したデータ識別情報を基に実際に書き込むべきデータが書き込まれていたかを検証することで、データの信頼性を確保することを特徴とするものである。
【発明の効果】
【００１０】
本発明によれば、RAW技術を用いることなく、データライト時のオーバーヘッドを低減し、記憶部内のデータの信頼性を保証することができる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の一実施形態を図面に基づいて説明する。
（第１実施形態）
この実施形態は、上位装置（サーバ）が認識するデータ領域としてのLU（Logical  Unit）をRAID構成のHDD（Hard  Disk  Drive）上に任意のアドレスを割当てるとともに、HDDへの書込みが発生するごとにデータ記憶領域とは異なる新しい記憶領域（予備記憶領域）を動的に割当ててデータを書き込むとともに、データを識別するためのデータ識別情報を付加情報として書込み、HDDからのデータの読出し時に、読み出したデータ識別情報と上位装置の指定によるリード領域が一致しているときには正しいデータと処理し、不一致であれば書き込まれたデータは不正データとしてコレクションリードでデータを回復するようにしたものである。
【００１２】
（第１実施形態におけるストレージシステムの構成）
図１は、第1実施形態におけるストレージシステムのブロック構成図である。図1において、ストレージシステムは、上位装置あるいはホストとなる、複数のサーバ（上位サーバ）１０と、各サーバ１０と通信ネットワーク１２を介して情報の授受を行うディスクアレイ装置１４と、ディスクアレイ装置１４と通信ネットワーク１６を介して情報の授受を行う管理端末１８を備えて構成されている。
【００１３】
各サーバ１０は、CPU（Central  Processing  Unit）やメモリなどの情報処理資源を備えたコンピュータ装置であり、例えば、パーソナルコンピュータや、ワークステーション、メインフレームなどから構成される。また各サーバ１０は、キーボード、スイッチやポインティングデバイス、マイクロフォンなどの情報入力装置（図示せず）と、モニタディスプレイやスピーカなどの情報出力装置（図示せず）を備えている。
【００１４】
通信ネットワーク１２、１６は、例えば、SAN（Storage  Area  Network）、LAN(Local  Area  Network)、インターネット、公衆回線または専用回線などから構成される。各サーバ１０とディスクアレイ装置１４間の通信は、例えば、ネットワーク１２がSANである場合には、ファイバチャネルプロトコルにしたがって行われる。一方、ディスクアレイ装置１４と管理端末１８間の通信は、例えば、ネットワーク１６がLANである場合には、TCP/IP（Transmission  Control  Protocol/Internet  Protocol）プロトコルにしたがって行われる。
【００１５】
ディスクアレイ装置１４は、HDD２０群で構成されたディスクユニット２２と、ディスクユニット２２の各HDD２０を制御するディスクコントローラ（ディスク制御部）２４を備えている。ディスクユニット２２は、記憶部として、RAIDグループ５を構成するHDD２０を複数備え、各HDD２０は複数の筐体２６内に分散して収納されている。
【００１６】
RAIDグループとは、１つ以上のHDD２０を、RAID構成等の冗長構成を有するグループとして定義したものである。１つのRAIDグループを構成する１以上のHDD２０が有する全ての記憶領域または一部の記憶領域は、１または複数の論理ユニットLUとして定義される。サーバ１０からのデータは、論理ユニットLU内に所定の大きさの論理ブロックを単位として記憶される。各論理ユニットLUには、それぞれ固有の識別番号（LUN）が付与される。データの入出力は、この識別番号（LUN）と、各論理ブロックにそれぞれ付与される論理ブロック固有の番号である、論理ブロックアドレス（LBA）を組み合わせたものをアドレスとして用いる。
【００１７】
各HDD２０の記憶領域は、初期LU割当時には、基本エリア２８とオーバフローエリア２９に分かれて設定されている。基本エリア２８には、＃１〜＃nのデータスロット３０と、＃１〜＃nのパリティスロット３２がストライプの最小単位として、各HDD２０に均等に配置されている。オーバフローエリア３０には、＃１〜＃nのフリースロット３４と＃１〜＃ｎのパリティスロット３２が各HDD２０に均等に配置されている。
【００１８】
データスロット３０とパリティスロット３２はデータを記憶するデータ記憶領域を構成し、フリースロット３４は、データ書込み時に、データスロット３０とは異なるデータ格納先として、動的に割当てられるスロットであって、データスロット３０に記憶されたデータの移動先となる予備記憶領域を構成する。
【００１９】
この際、フリースロット３４に対する割当前には、図２に示すように、フリースロット３４のデータ格納領域３６には、NULL（ゼロ）が格納され、付加情報格納領域３８には、付加情報としてNULL（ゼロ）が格納されている。
【００２０】
一方、フリースロット３４が動的に割当てられたときには、図３に示すように、フリースロット３４のデータ格納領域３６には、データスロット３０に記憶されていたデータと同様に更新データが格納され、付加情報格納領域３８には、フリースロット３４に格納されたデータを識別するためのデータ識別情報として、LU＃とLBA（Logical  Block  Address）が格納される。
【００２１】
すなわち、フリースロット３４は、データ書込み時に動的に割当てられる前は予備記憶領域として機能するが、データ書込み時に動的に割当てられて、データとデータ識別情報が格納されたときには、データ記憶領域、すなわちデータスロット３０として機能することになる。言い換えると、フリースロット３４は、データ書込み時に動的に割当てられる前は、その所属先は、予備記憶領域であるが、データ書込み時に動的に割当てられて、データとデータ識別情報が格納されたときには、その所属先は、データ記憶領域に変更される。
【００２２】
一方、データ書込み時には、サーバ１０からのアクセス要求（ライトアクセス）でいずれかのデータスロット３０がデータ格納先として指定されるが、データスロット３０はデータ格納先に割当てられずに、フリースロット３４がデータ格納先として動的に割当てられるので、アクセス要求で指定されたデータスロット３０に格納されている、更新前のデータは旧データとなる。
【００２３】
このため、アクセス要求で指定されたデータスロット３０のうちデータ格納領域３６には、NULL（ゼロ）が格納され、付加情報格納領域３８に、NULL（ゼロ）が格納され、アクセス要求で指定されたデータスロット３０は、フリースロット３４として再利用される。言い換えると、データスロット３０は、アクセス要求（ライトアクセス）で指定される前は、その所属先は、データ記憶領域であるが、アクセス要求（ライトアクセス）で指定された後は、その所属先は、予備記憶領域に変更される。
【００２４】
ディスクコントローラ２４は、複数のチャネルアダプタ（CHA）４０と、複数のディスクアダプタ（DKA）４２と、複数のキャッシュメモリ４４と、複数のスイッチ４６と、複数の共有メモリ４８と、複数のマイクロプロセッサ（Micro  Processing  Unit）５０と、サービスプロセッサ（SVP）５２を備えている。
【００２５】
各チャネルアダプタ４０は、各サーバ１０との間のデータ通信を行うためのポートとして、例えば、イニシエータポート、ターゲットポートを備えているとともに、CPUやメモリなどを備えたマイクロコンピュータシステムとして構成されており、各サーバ１０から受信した各種コマンドを解釈して実行する。各チャネルアダプタ４０には、各チャネルアダプタ４０を識別するためのネットワークアドレスが割当てられており、各チャネルアダプタ４０は、それぞれが個別にNAS(Network  Attached  Storage)として機能することも可能である。また各チャネルアダプタ４０は各サーバ１０からの要求をそれぞれ個別に受付けて処理することもできる。
【００２６】
各ディスクアダプタ４２は、ディスクユニット２２が有するHDD２０との間でデータ授受を行うものである。各ディスクアダプタ４２は、チャネルアダプタ４０と同様に、CPUやメモリなどを備えたマイクロコンピュータシステムとして構成され、指定のHDD２０に対してライトアクセスまたはリードアクセスを行う。
【００２７】
この際、各ディスクアダプタ４２は、HDD２０がRAIDグループ５で構成されているため、RAID構成に応じたデータアクセスを行う。例えば、各ディスクアダプタ４２は、同一のデータを別々のHDD２０群にそれぞれ書き込んだり、あるいは、パリティ計算を実行して、データおよびパリティをHDD２０群に書き込んだりする。
【００２８】
各キャッシュメモリ４４は、各サーバ１０から受信したデータやHDD２０から読み出したデータを一時記憶するものである。
【００２９】
スイッチ４６は、各チャネルアダプタ４０、各ディスクアダプタ４２、各キャッシュメモリ４４および各マイクロプロセッサ５０を相互に接続させるものである。スイッチ４６は、例えば、高速スイッチング動作によってデータ伝送を行う超高速クロスバースイッチなどのような高速パスとして構成することができる。
【００３０】
共有メモリ４８には、ディスクアレイ装置１４の動作を制御するために使用される各種の制御情報や構成情報が記憶されているとともに、後述するように、開放待ちキュー、フリーキュー、LU管理テーブル、コレクションリードカウンタテーブルに関する情報が格納されている。
【００３１】
各マイクロプロセッサ５０は、共有メモリ４８内の情報を基にディスクアレイ装置１４全体の動作を制御するものである。
【００３２】
サービスプロセッサ５２は、各マイクロプロセッサ５０に接続されているとともに、ネットワーク１６を介して管理端末１８に接続されている。このサービスプロセッサ５２は、ディスクアレイ装置１４内の各種情報を収集して、ネットワーク１６を介して管理端末１８に出力する。また、サービスプロセッサ５２は、管理端末１８からの指示に応じて、共有メモリ４８に記憶されている構成情報などを書換え、ディスクアレイ装置１４の構成を変更させることができる。
【００３３】
図４に、開放待ちキュー６０の構成を示す。開放待ちキュー６０とは、サーバ１０からのアクセス要求で指定されたデータスロット３０に格納されたデータである、更新前のデータを、ゼロクリア候補のデータあるいはNULLクリア（ゼロクリア）待ちのデータとして管理するためのものである。この開放待ちキュー６０は、開放待ちスロットポインタ欄６２と、開放前LU＃、LBA（Logical  Block  Address）欄６４から構成され、RAIDグループ単位で用いられる。開放待ちスロットポインタ欄６２には、ポインタ（物理HDDとHDD上に書かれているデータのアドレスを示す情報）に従って、HDD＃とアドレスが格納され、開放前LU＃、LBA欄６４には、開放前のデータ識別情報として、開放前のデータスロット３０のLU＃とLBA（データ格納アドレス）が格納される。
【００３４】
図５に、フリーキュー６６の構成を示す。フリーキュー６６とは、データ書込み時に、新データ格納先として動的に割当てられるフリースロット３４を管理するものである。このフリーキュー６６は、フリースロットポインタ欄６８と、開放前LBA欄７０から構成され、LU単位で用いられる。フリースロットポインタ欄６８には、ポインタに従ってHDD＃、アドレスが格納され、開放前LBA欄６６には、開放前のデータスロット３０のLBA（データ格納アドレス）が格納される。
【００３５】
図６に、LU管理テーブル７２の構成を示す。LU管理テーブル７２は、データスロット３０を管理するためのテーブルであって、LU単位で用いられる。LU管理テーブル３２は、LBA欄７４と、割当てスロットポインタ欄７６から構成される。LBA欄７４には、１〜nnnnnnnnが格納され、割当てスロットポインタ欄７６には、ポインタとして、HDD＃とアドレスが格納される。
【００３６】
図７に、コレクションリード（READ）カウンタテーブル７８の構成を示す。コレクションリードカウンタテーブル７８は、RAIDグループを構成するHDD＃１〜＃４ごとに、コレクションリードの回数を記録して管理するものである。このコレクションリードカウンタテーブル７８は、RAIDグループ欄８０、HDD＃１欄８２、HDD＃２欄８４、HDD＃３欄８６、HDD＃４欄８８から構成されている。RAIDグループ欄８０には、１-１〜X-Yが格納され、HDD＃１欄８２〜HDD＃４欄８８には、それぞれコレクションションリードの回数が数値で格納される。
【００３７】
次に、RAIDグループ内のデータ配置例として、HDDフォーマット時の例を図８（a）に示し、使用時の例を図８（b）に示す。
【００３８】
図８（a）において、LU管理テーブル７２におけるポインタが１のデータは、＃１のデータスロット３０に対応し、ポインタが１００のものは＃nのデータスロット３０に対応していることを示す。またフリーキュー６６におけるポインタが１のものは、＃１のフリースロット３４に対応していることを示す。
【００３９】
図８（b）において、LU管理テーブル７２におけるポインタ１は、＃１のデータスロット３０に対応し、ポインタ１００は、＃mのデータスロット３０に対応し、フリーキュー６６におけるポインタ１は、＃１のフリースロット３４に対応し、開放待ちキュー６２におけるポインタ１は、＃１の開放待ちスロット３５に対応していることを示す。
【００４０】
次に、HDDへの書込み処理を図９のフローチャートにしたがって説明する。サーバ１０からのアクセス要求として、HDD２０へのデータの書込み（ライトアクセス）が要求されたときに、マイクロプロセッサ５０は、サーバ１０からのデータ（ユーザデータ）を一旦キャッシュメモリ４４に格納し、キャッシュメモリ４４に格納されたデータをHDD２０へ書き込むための処理を開始する。
【００４１】
まず、マイクロプロセッサ５０は、サーバ１０からのアクセス要求を解釈し、各ＬＵのフリーキュー６６を検索し、アクセス要求で指定されたライト先（データ格納先）LU＃とは異なるLU＃のフリーキュー６６に登録情報があるか否かを判定し（S１）、ここで登録情報がないと判定したときにはライト先LU＃と同じLU＃のフリーキュー６６に登録情報があるか否かを判定し（S２）、ここで登録情報があると判定したときには、ライト先LBA＃と異なるフリースロット情報があるか否かを判定し（S３）、ここで肯定の判定結果を得たとき、あるいは、ステップS１で肯定の判定結果を得たときには、フリーキュー６６からフリースロット情報を取得する（S４）。
【００４２】
一方、ステップS２、S３でいずれも否定の判定結果を得たときには、マイクロプロセッサ５０は、緊急開放処理へジャンプし（S５）、ステップS６に移行する。
【００４３】
ここで、サーバ１０からLU＃１のLBA＝１へのライトアクセスが発生した場合、マイクロプロセッサ５０は、キャッシュ４４上にユーザデータを書き込んだあと、その旨をサーバ１０へ返信する。このときの状態として、LU＃１管理テーブル７２、LU＃２管理テーブル７２、LU＃１フリーキュー６６、LU＃２フリーキュー６６、LU＃１開放待ちキュー６０の構成を図１０（a）に示す。
【００４４】
また、サーバ１０からのアクセス要求で指定されたLU＃とはLU＃が異なるフリーキュー６６からフリースロット情報を取得したときの状態として、LU＃１の管理テーブル７２からライト前のスロット情報を取得したときのHDD２０の構成と、LU＃１フリーキュー６６、LU＃２フリーキュー６６の構成を図１０（b）に示す。すなわち、LU＃１とはLU＃が異なるLU＃２フリーキュー６６の先頭アドレスからポインタを取得し、例えば、F２をフリースロット３４とする。
【００４５】
次に、マイクロプロセッサ５０は、LU管理テーブル７２から現在使用中のスロット情報を取得し（S６）、キャッシュメモリ４４上に格納されたユーザデータに、データチェック用の付加情報として、ユーザデータを識別するためのデータ識別情報である、LU＃とLBAを付与し（S７）、フリースロット３４及び、フリースロット３４に対応するパリティをキャッシュメモリ４４上に読み込み、ライトデータにデータチェック用の付加情報を付与したあと新パリティを生成する（S８）。このときのHDD２０とキャッシュメモリ４４の状態を図１１（a）に示す。
【００４６】
次に、マイクロプロセッサ５０は、HDD２０のうち、新データ格納先として動的に割当てられたフリースロット３４に、ライトデータを書き込むとともに、新パリティを書込み（S９）、LU管理テーブル７２に、新データ格納先のフリースロット３４をデータスロット３０とするための新スロット情報を登録する（S１０）。
【００４７】
続いて、マイクロプロセッサ５０は、開放待ちキュー６０に、サーバ１０からのアクセス要求で指定されたデータスロット３０のデータを旧データとしてNULLクリアするための前処理として、サーバ１０からのアクセス要求で指定されたデータスロット３０を旧スロット情報に登録するとともに、使用したフリースロット３４をフリーキュー６６から削除し（S１１）、このルーチンでの処理を終了する。
【００４８】
ライトデータと新パリティをHDD２０に書込み、開放待ちキュー６０に使用済みとなったデータスロット３０の情報を登録したときのHDD２０とキャッシュメモリ４４の状態および開放キュー６０、LU＃１管理テーブル７２、LU＃２フリーキュー６６の状態を図１１（b）に示す。すなわち、F２のフリースロット３４に更新データとしてのライトデータを書込み、このスロットをLU＃１、LAB＃１のデータスロット３０として、LU＃１管理テーブル７２の先頭アドレスに登録し、サーバ１０からのアクセス要求で指定された、LU＃１、LAB＃１のデータスロット３０を開放待ちスロット３５として、開放待ちキュー６０に登録し、LU＃２フリーキュー６６からF２のフリースロット３４に対応したポインタを削除する。なお、開放待ちキュー６０に登録された開放待ちスロット３５のデータは、スロット開放処理でゼロクリアされる。
【００４９】
以上の処理により、ライト先のLU＃またはLBA＃と異なるフリースロット３４をデータ格納先に動的に割当て、割当てられたフリースロット３４にユーザデータとユーザデータを識別するためのデータ識別情報（LU＃、LBA＃）を格納することができる。また、データの書込み時には、データのチェックを行わない分HDD２０の性能を引き出すことができる。
【００５０】
次に、開放待ちスロット緊急開放処理を図１２のフローチャートにしたがって説明する。マイクロプロセッサ５０は、フリースロット３４が不足した際に、開放待ちキュー６０に、サーバ１０からのアクセス要求で指定されたライト先LU＃、LBAとは異なるスロット情報があるか否かを判定し（S２１）、肯定の判定結果を得たときには、開放待ちキュー６０からポインタ情報を取得し（S２２）、取得したポインタ情報から得られたスロットをフリースロット３４として、図９のステップS６に移行する。
【００５１】
一方、ステップS２１で否定の判定結果を得たときには、プロセッサ５０は、フリースロット３４がないとして、エラーメッセージを出力し（S２３）、このルーチンでの処理を終了する。
【００５２】
次に、HDDに対するリード処理を図１３のフローチャートにしたがって説明する。サーバ１０からのアクセス要求として、HDD２０に対するリードアクセスを受けたときに、マイクロプロセッサ５０は、HDD２０をリードアクセスするに先立って、キャッシュメモリ４４上に該当データが存在しないときには、リードアクセスすべきデータ格納先に関する情報、例えば、ポインタをLU管理テーブル７２から取得し（S３１）、取得した情報を基に、HDD２０のデータスロット３０から該当データとデータ識別情報をキャッシュメモリ４４上に読み込む（S３２）。
【００５３】
このとき、例えば、サーバ１０からLU＃１、LBA＝１のデータに対するリードが要求された場合の例として、キャッシュメモリ４４とHDD２０の状態と、LU＃１管理テーブル７２の構成を図１４（ａ）に示す。すなわち、LU＃１の管理テーブル７２のポインタ情報を取得し、LU＃１、LBA＝１のデータのデータがキャッシュメモリ４４上にないときには、HDD２０のうちLU＃１、LBA＝１のデータスロット３０からデータを読み込む。
【００５４】
次に、マイクロプロセッサ５０は、キャッシュメモリ４４上に読み込んだデータが０データか否かを判定し（S３３）、０データであると判定したときには、データの上書きに失敗した旨をサーバ１０と管理端末１８に出力し（S３４）、このルーチンでの処理を終了する。
【００５５】
一方、マイクロプロセッサ５０は、キャッシュメモリ４４上に読み込んだデータが０データでないと判定したときには、データの不整合をチェックするために、データ保証コードによるデータチェック（CRCチェック）を行い、エラーがないと判定したときには、リードデータのエラーチェックとして、LU＃とLBAが一致するか否かの判定を行う（S３６）。
【００５６】
このステップS３６では、マイクロプロセッサ５０は、ゼロクリアが失敗したか否かを判定するために、サーバ１０のリード要求で指定されたLU＃とHDD２０から読み出したLU＃が一致するか否かを判定するとともに、サーバ１０のリード要求で指定されたLBAとHDD２０から読み出したLBAが一致するか否かを判定する。
【００５７】
このステップS３６において、両者の内容が一致すると判定したときには、マイクロプロセッサ５０は、前回のライト処理は成功していたとして、リードデータをサーバ１０に送信する（S３７）。この際、マイクロプロセッサ５０は、サーバ１０には、データ識別情報である付加情報を取り除いたデータのみ返信する。このときの状態を図１４（b）に示す。
【００５８】
一方、ステップS３５においてエラーがあると判定したときには、マイクロプロセッサ５０は、エラー訂正処理を実行し、S３６の処理に移行する（S３８）。
【００５９】
さらに、マイクロプロセッサ５０は、ステップS３６において、両者の内容が不一致であると判定したときには、キャッシュメモリ４４上のリードデータを無効化し、コレクションリードを行い（S３９）、コレクションリードカウンタテーブル７８のうち該当するHDD＃のエラーカウントに＋１を加算し（S４０）、エラーカウントが閾値よりも小さいか否かを判定し（S４１）、エラーカウントが閾値よりも小さいときにはステップS３７の処理に移行し、エラーカウントが閾値よりも大きいときには、エラーカウントが閾値を超過した旨のメッセージをサービスプロセッサ５２に出力する（S４２）。
【００６０】
この後、マイクロプロセッサ５０は、エラーカウントが閾値を超過したHDD２０をスペアHDDにコピー、例えば、ダイナミックまたはコレクションコピーし（S４３）、その後、ステップS３７の処理に移行し、ステップS３７の処理を行ったあと、このルーチンでの処理を終了する。
【００６１】
ここで、LU＃、LBAが異なっていたときに、コレクションリードでデータを格納し、正常なリードデータをサーバ１０へリターンしたときのキャッシュ４４とHDD２０の状態と、コレクションリードカウンタテーブル７８の状態を図１４（c）に示す。すなわち、LU＃１、LBA＝１のデータスロット３０のデータの代わりに、F２のフリースロット３４の情報とLU＃１、LBA＝３のデータとパリティスロット３２のパリティPを用いてデータを回復し、回復したデータをサーバ１０へ転送する。
【００６２】
上記の処理により、データのリード時に、データ書込み時に付与された付加情報（データ識別情報）としてのLU＃およびLBAと、サーバ１０のリードアクセスで指定されたLU＃およびLBAの一致をチェックすることで、不正データ（データ上書き失敗）を発見することができるとともに、コレクションリードによって正しいデータを回復することができる。
【００６３】
次に、開放処理を図１５のフローチャートにしたがって説明する。マイクロプロセッサ５０は、開放待ちキュー６０を検索し、登録データがあるか否かを判定し（S５１）、登録データがないときには、このルーチンでの処理を終了し、登録データあると判定したときには、開放待ちキュー６０から、開放待ちスロット３５のポインタと開放前LU＃、LBAに関する情報を取得し（S５２）、当該開放待ちスロット３５の情報とパリティをキャッシュメモリ４４上に読み込む（S５２）。このときのキャッシュメモリ４４とHDD２０の状態および開放キュー６０の状態を図１６（a）に示す。
【００６４】
このあと、マイクロプロセッサ５０は、現在のパリティを取得し（S５３）、データおよびLU＃、LBAに関するエリアを全てNULLクリア（ゼロクリア）した開放待ちスロット３５の旧データをキャッシュメモリ４４上に生成し、旧データとパリティおよびNULLデータを基に新パリティを生成する（S５４）。このときのキャッシュメモリ４４とHDD２０の状態を図１６（b）に示す。
【００６５】
次に、マイクロプロセッサ５０は、開放待ちスロット３５にNULLデータ（ゼロクリアデータ）を書き込むと共に新パリティを書込み（S５５）、開放前LU＃と同じLU＃のフリーキュー６６に、開放待ちスロット３５をフリースロット３４に変更するためのスロット情報を登録するための処理、すなわち解放前のLBA情報を付加するための処理を行い（S５６）、開放待ちキュー６０から、開放が完了した開放待ちスロット３５に関するスロット情報を削除し（S５７）、このルーチンでの処理を終了する。
【００６６】
開放待ちスロット３５にNULLデータと新パリティを書き込んだときのHDDの状態と、開放待ちキュー６０とLU＃フリーキュー６６の構成を図１６（c）に示す。すなわち、開放待ちキュー６０からポインタの先頭アドレスにあったLU＃１、２を削除し、LU＃１フリーキュー６６の２番目のポインタの開放前LBAを２とする。
【００６７】
以上の処理により、開放待ちキュー６０に登録された開放待ちスロット３５は、フリースロット３４に変更された後、フリーキュー６６で管理されるため、結果として、データのライト先エリアとして指定されるフリースロット３４を、データのライト前に、ゼロクリアすることを保証することができる。
【００６８】
データスロット３０のうち更新前データ（旧データ）が格納されたものをゼロクリアすることで、データスロット３０をフリースロット３４として再利用することができる。また、ゼロクリアはサーバ１０のアクセス要求とは非同期で実施することができるため、開放待ちキュー６０とフリーキュー６６を用いて、新データ格納先となるフリースロット３４を管理することができる。
【００６９】
本実施形態によれば、RAW技術を用いることなく、記憶部としてのHDD２０に正しい情報が記憶されていることを保証することができるとともに、データライト時のオーバーヘッドを低減し、且つキャッシュメモリ４４の領域を圧迫せずに、HDD２０内のデータの信頼性を保証することができる。
【００７０】
一方、HDD２０に対する書込み（ライと）処理を行うときに、次回リード時までにキャッシュメモリ４４上に書き込みデータを保持し、次回リード時にHDD２０から読み出したデータとキャッシュメモリ４４上のデータとを比較することも考えられるが、この方式では、ライト処理のオーバーヘッドは低減できるが、サーバ１０からのリード要求受領前のライトベンディングデータを保持することになり、キャッシュメモリ４４の領域を圧迫することになる。
【００７１】
これに対して、本実施形態では、キャッシュメモリ４４の領域を無駄に使用せずに、且つデータチェックのためのオーバーヘッドを小さくするために、旧データと異なるエリア（フリースロット３４）へライト処理を実施したあとに、旧データをゼロクリアしておき、リード時にゼロデータと比較することで、オーバーヘッドを小さくすることができる。
【００７２】
（第２実施形態）
次に、本発明の第２実施形態を図１７にしたがって説明する。本実施形態は、ディスクアレイ装置１４として、ディスクコントローラ２４の代わりに、ディスクコントローラ１００を用いたものであり、他の構成は第１実施形態と同様である。
【００７３】
ディスクコントローラ１００は、ディスク制御部として、１台のマイクロプロセッサ５０、単一のキャッシュメモリ４４を備えているとともに、LANインターフェイス１０２、フロントエンドインターフェイス１０４、データ転送コントローラ１０６、ローカルメモリ１０８、バックエンドインターフェイス１１０を備えて構成されている。LANインターフェイス１０２はサービスプロセッサ５２と同等の機能を備え、フロントエンドインターフェイス１０４はチャネルアダプタ４０と同様な機能を備えている。
【００７４】
データ転送コントローラ１０６は、ディスクコントローラ１００内におけるデータの転送を制御するために、フロントエンドインターフェイス１０４、マイクロプロセッサ５０、キャッシュメモリ４４、バックエンドインターフェイス１１０に接続されている。
【００７５】
バックエンドインターフェイス１１０は、ディスクアダプタ４２と同様な機能を備え、各HDD２０に接続されている。ローカルメモリ１０８には、マイクロプロセッサ５０が実行するためのプログラムが格納されている。キャッシュメモリ４４には、図１の共有メモリ４８に格納された構成情報や開放待ちキュー６０、フリーキュー６６、LU管理テーブル７２、コレクションリードカウンタテーブル７８に関する情報が格納されている。
【００７６】
本実施形態におけるディスクアレイ装置１４は小型RAIDに適用したものであって、第１実施形態と同様に、HDD２０へのデータの書込み時には、データ格納先としてフリースロット３４を動的に割当てることができ、フリースロット３４にユーザデータと共にユーザデータを識別するためデータ識別情報を格納することができる。またデータの読出し時には、HDD２０から読み出したデータをキャッシュメモリ４４上に書き込み、キャッシュメモリ４４上で、サーバ１０からのリードアクセスの内容とHDD２０から読み出したデータの内容とを比較し、両者の内容が一致していれば正しいデータとして、サーバ１０へ送信したり、不一致のときには、コレクションリードでデータを回復したりすることができる。
【００７７】
本実施形態によれば、小型RAIDを用いても、RAW技術を用いることなく、記憶部としてのHDD２０に正しい情報が記憶されていることを保証することができるとともに、データライト時のオーバーヘッドを低減し、且つキャッシュメモリ４４の領域を圧迫せずに、HDD２０内のデータの信頼性を保証することができる。
【００７８】
（第３実施形態）
次に、本発明の第３実施形態を説明する。本実施形態は、各HDDに、新データ格納先としてのフリースロット３４を均等に配分するものであり、キャッシュメモリ４４に格納するテーブルあるいはキューとして、図１８に示すLU管理テーブル１１２、図１９に示すHDD割当管理テーブル１１４、図２０に示すフリーキュー１１６を備えている。
【００７９】
LU管理テーブル１１２は、LBA欄１１８と割当スロットポインタ欄１２０から構成され、LU単位で用いられる。LBA欄１１８には１、２、・・・、nnnnnnnnが格納され、割当スロットポインタ欄１２０にはHDD＃とアドレスが互いに関連付けて格納される。
【００８０】
HDD割当管理テーブル１１４は、HDD＃欄１２２、平均フリースロット数欄１２４、フリースロット欄１２６、開放待ち数欄１２８、比率欄１３０から構成され、RAIDグループに対応して用いられている。
【００８１】
HDD＃欄１２２には、HDD＃１〜＃４が格納され、平均フリースロット数欄１２４には、平均フリースロットの数が格納され、フリースロット欄１２６には、フリースロットの数が格納され、開放待ち数欄１１４には、開放待ちとなる開放待ちスロット３５の数が格納され、比率欄１３０には、平均フリースロット数に対する、フリースロットと開放待ちスロットとの比率が数値で格納される。なお、平均フリースロット数はLUの初期割当時に算出され、算出された値が平均フリースロット数欄１２４にセットされる。
【００８２】
フリーキュー１１６は、物理アドレス欄１３２と、開放前LU＃、LBA欄１３４から構成され、RAIDグループ#のHD単位で用いられる。物理アドレス欄１３２には、HDD２０の物理アドレスが格納され、開放前LU＃、LBA欄１３４には、開放前のLU＃xxとLBAとしての、nnnnnnnn、mmmmmが格納される。
【００８３】
次に、HDDへの書込み処理を図２１のフローチャートにしたがって説明する。マイクロプロセッサ５０は、HDD２０に対するライト処理を行うに際して、フリースロット３４が特定のHDD２０に偏るのを防止するために、HDD割当管理テーブル１１４を検索し、フリーキュー１１６のうち比率の高いHDD２０が登録されているフリーキュー１１６から比率の高いHDD２０（キュー）をサーチし（S６１）、LU管理テーブル１１２から、比率の高いHDD２０に関するスロット情報として、現在使用中のスロット情報を取得し（S６２）、ユーザデータにデータチェック用の付加情報を付与する（S６３）。
【００８４】
この後、マイクロプロセッサ５０は、格納先となるフリースロット３４と対応するパリティを取得し、取得したパリティを基に新パリティを生成し（S６４）、フリースロット３４にライトデータと新パリティを書込み（S６５）、LU管理テーブル１１２に、フリースロット３４をデータスロット３０として用いるための新スロット情報を登録し（S６６）、開放待ちキュー６２に、旧データを格納しているデータスロット３０を旧スロット情報を登録するとともに、使用したフリースロット３４をデータスロット３０に変更するために、フリーキュー１３４から削除し（S６７）、このルーチンでの処理を終了する。
【００８５】
この処理により、HDD＃１〜＃４のHDDのうち比率の高いものから順番にフリースロット３４に割当ててデータを格納することで、フリースロット３４が特定のHDDに偏るのを防止することができる。
【００８６】
次に、フリーキューサーチ処理を図２２のフローチャートにしたがって説明する。マイクロプロセッサ５０は、フリーキュー１１６をサーチするに際して、HDD割当管理テーブル１１４より比率の一番大きいHDD＃を取得し（S７１）、全てのフリーキュー１１６に対するサーチを完了した否かを判定し（S７２）、全てサーチ済みでないと判定したときには、フリーキュー１１６から、ライト先LU＃あるいはLBA番号と異なるスロット情報があるかを判定するために、比率の高いものから順番に判定し（S７３）、このステップで否定の判定結果を得たときには、HDD割当管理テーブル１１４から、次に比率の高いHDD＃を取得し（S７４）、ステップS７２の処理に戻る。
【００８７】
ステップS７２において、全てのHDDのフリーキュー１１６をサーチ済みと判定したときには、マイクロプロセッサ５０は、緊急開放処理へジャンプし（S７５）、このルーチンでの処理を終了する。
【００８８】
また、マイクロプロセッサ５０は、ステップS７３において、肯定の判定結果を得たときには、フリーキュー１１６からフリースロット情報を取得し（S７６）、このルーチンでの処理を終了する。
【００８９】
この処理により、比率の高いものから順にフリースロット３４に該当するものを取得することができる。
【００９０】
次に、開放待ちスロット緊急開放処理を図２３のフローチャートにしたがって説明する。まず、マイクロプロセッサ５０は、開放待ちキュー６０から、ライト先HDD＃またはLU＃あるいはLBAと異なるスロット情報があるか否かを判定し（S８１）、肯定の判定結果を得たときには、開放待ちキュー６０からスロット情報を取得し（S８２）、フリーキューサーチの処理に戻る。
【００９１】
一方、ステップS８１において、否定の判定結果を得たときには、マイクロプロセッサ５０は、フリースロット３５が存在しないとして、エラーメッセージを出力し（S８３）、管理端末１８の画面上にエラーメッセージを表示させ、このルーチンでの処理を終了する。
【００９２】
本実施形態によれば、RAW技術を用いることなく、記憶部としてのHDD２０に正しい情報が記憶されていることを保証することができるとともに、データライト時のオーバーヘッドを低減し、且つキャッシュメモリ４４の領域を圧迫せずに、HDD２０内のデータの信頼性を保証することができ、さらに、フリースロット３４が特定のHDDに偏るのを防止することができる。
【図面の簡単な説明】
【００９３】
【図１】ディスクアレイ装置を用いたストレージシステムのブロック構成図である。
【図２】フリースロット内のデータ論理形式を説明するための図である。
【図３】ライト処理時におけるスロット内データ論理形式を説明するための図である。
【図４】開放待ちキューの構成図である。
【図５】フリーキューの構成図である。
【図６】LU管理テーブルの構成図である。
【図７】コレクションリードカウンタテーブルの構成図である。
【図８】RAIDグループ内のデータ配置例を説明するための図である。
【図９】HDDへの書込み処理を説明するためのフローチャートである。
【図１０】書込み時におけるHDDスロットの割当方を説明するための図である。
【図１１】データ書込み時におけるHDDスロットの割当方を説明するための図である。
【図１２】開放待ちスロット緊急開放処理を説明するためのフローチャートである。
【図１３】HDDに対するリード処理を説明するためのフローチャートである。
【図１４】HDDスロットからデータを読み込むときの状態を説明するための図である。
【図１５】スロット開放処理を説明するためのフローチャートである。
【図１６】スロット開放処理の状態を説明するための図である。
【図１７】第２実施形態におけるストレージシステムのブロック構成図である。
【図１８】LU管理テーブルの構成図である。
【図１９】HDD割当管理テーブルの構成図である。
【図２０】フリーキューの構成図である。
【図２１】HDDに対する書込み処理を説明するためのフローチャートである。
【図２２】フリーキューサーチ処理を説明するためのフローチャートである。
【図２３】開放待ちスロット緊急開放処理を説明するためのフローチャートである。
【符号の説明】
【００９４】
１０  サーバ、１４  ディスクアレイ装置、１８  管理端末、２０  HDD、２２  ディスクユニット、２４  ディスクコントローラ、２８  基本エリア、２９  オーバフローエリア、３０  データスロット、３２  パリティスロット、３４  フリースロット、３５  開放待ちスロット、４４  キャッシュメモリ、４８  共有メモリ、５０  マイクロプロセッサ
【図１】
2009294699.tif 000003
【図２】
2009294699.tif 000004
【図３】
2009294699.tif 000005
【図４】
2009294699.tif 000006
【図５】
2009294699.tif 000007
【図６】
2009294699.tif 000008
【図７】
2009294699.tif 000009
【図８】
2009294699.tif 000010
【図９】
2009294699.tif 000011
【図１０】
2009294699.tif 000012
【図１１】
2009294699.tif 000013
【図１２】
2009294699.tif 000014
【図１３】
2009294699.tif 000015
【図１４】
2009294699.tif 000016
【図１５】
2009294699.tif 000017
【図１６】
2009294699.tif 000018
【図１７】
2009294699.tif 000019
【図１８】
2009294699.tif 000020
【図１９】
2009294699.tif 000021
【図２０】
2009294699.tif 000022
【図２１】
2009294699.tif 000023
【図２２】
2009294699.tif 000024
【図２３】
2009294699.tif 000025