(57)【要約】【課題】本発明の記憶制御装置は、異なるサイズのブロック間でデータを効率よく入出力できる。【解決手段】記憶制御装置１内におけるデータ入出力の単位である拡張論理ブロック３のサイズBS１と、記憶装置２内に設けられる物理ブロック４のサイズBS２とは、異なっている。ライト対象範囲生成部１Ｃは、ライトデータ３Ｗに隣接する拡張論理ブロック３Ｆ，３Ｂをそれぞれ読み出して、ライトデータ３Ｗに結合させることにより、ライト対象範囲を生成する。保証コード検査部１Ｄは、各拡張論理ブロック３Ｆ，３Ｗ，３Ｂについて、それぞれの保証コード５を検査する。ブロックサイズ調整部１Ｅは、隣接ブロック３Ｆ，３Ｂから余分なデータを破棄し、ライト対象範囲のサイズを物理ブロック４のサイズの整数倍となるように調整する。【選択図】図１
2007264917.tif 000002
【特許請求の範囲】
【請求項１】
上位装置と記憶装置との間のデータ入出力を制御するための記憶制御装置であって、
記憶制御装置内でのデータ入出力処理に使用される第１ブロックのサイズと、前記記憶装置内に設けられる複数の第２ブロックのサイズとはそれぞれ異なっており、
前記第１ブロック単位のライトデータの一端または他端のいずれか一方が、前記各第２ブロック間の境界と不一致の場合は、前記不一致の端部に連続する他の第１ブロックのデータを取得し、この他の第１ブロックのデータと前記ライトデータとを結合させて、結合データを生成する結合データ生成部と、
前記ライトデータに結合された前記他の第１ブロックのデータの端部が前記各第２ブロック間の境界に一致するように、前記他の第１ブロックのデータの一部を破棄することにより、前記結合データのサイズを前記第２ブロックのサイズの整数倍に調整するデータサイズ調整部と、
前記サイズの調整された結合データを前記記憶装置に書き込ませる書込み部と、
を備えた記憶制御装置。
【請求項２】
上位装置と記憶装置との間のデータ入出力を制御するための記憶制御装置であって、
記憶制御装置内でのデータ入出力処理に使用される第１ブロックのサイズと、前記記憶装置内に設けられている複数の第２ブロックのサイズとはそれぞれ異なっており、
前記上位装置の要求に応じて、前記上位装置からライトデータを受信するライトデータ受信部と、
前記記憶装置からデータを読み出す読出し部と、
前記受信されたライトデータについて、前記第２ブロックのサイズのデータ毎に、データ内容を保証するための保証コードをそれぞれ設定することにより、前記ライトデータを前記第１ブロック単位のライトデータに変換する保証コード設定部と、
前記第１ブロック単位のライトデータを記憶するキャッシュメモリと、
前記キャッシュメモリに記憶されたライトデータの一端または他端のいずれか一方が、前記各第２ブロック間の境界と不一致の場合は、前記不一致の端部に連続する他の第１ブロックのデータを前記読出し部を介して前記記憶装置から取得し、この取得された他の第１ブロックのデータと前記ライトデータとを結合させて、結合データを生成する結合データ生成部と、
前記結合データに含まれる前記各保証コードに基づいて、前記結合データの内容が正常であるか否かを検査する検査部と、
前記検査部により正常であるとの検査結果が得られた場合には、前記ライトデータに結合された前記他の第１ブロックのデータの端部が前記各第２ブロック間の境界に一致するように、前記他の第１ブロックのデータの一部を破棄することにより、前記結合データのサイズを前記第２サイズの整数倍に調整するデータサイズ調整部と、
前記サイズの調整された結合データを前記記憶装置に書き込ませる書込み部と、
を備えた記憶制御装置。
【請求項３】
前記記憶装置によって、冗長データを用いる冗長記憶構造が提供されており、
さらに、前記受信されたライトデータに関して、前記第１ブロック単位の冗長データを生成する冗長データ生成部を備え、
前記結合データ生成部と、前記検査部と、前記データサイズ調整部及び前記書込み部は、前記冗長データを前記ライトデータと同様に処理するものである請求項２に記載の記憶制御装置。
【請求項４】
前記記憶装置によって、冗長データを用いる冗長記憶構造が提供されており、
さらに、前記受信されたライトデータに関して、前記第１ブロック単位の冗長データを生成する冗長データ生成部を備え、
前記結合データ生成部と、前記検査部と、前記データサイズ調整部及び前記書込み部は、前記冗長データを前記ライトデータと同様に処理し、かつ、
前記読出し部は、前記第１ブロックのサイズと前記第２ブロックのサイズとの最小公倍数のサイズで、前記記憶装置からデータを読み出すようになっている請求項２に記載の記憶制御装置。
【請求項５】
前記記憶装置は、冗長データを用いる冗長記憶構造を提供するものであり、
さらに、前記受信されたライトデータに関して、前記第１ブロック単位の冗長データを生成する冗長データ生成部とを備え、
前記結合データ生成部と、前記検査部と、前記データサイズ調整部及び前記書込み部は、前記冗長データを、前記ライトデータと同様に処理し、
さらに、前記結合データ生成部が前記結合データを生成するよりも前に、前記ライトデータにより更新される前記第１ブロック単位の旧データ及びこの旧データに連続する他の第１ブロックのデータを、前記記憶装置からそれぞれ予め読み出して前記キャッシュメモリに記憶させる旧データ読出し部と、
前記結合データ生成部が前記新たな冗長データに関する結合データを生成するよりも前に、前記新たな冗長データにより更新される前記第１ブロック単位の旧冗長データ及びこの旧冗長データに連続する他の第１ブロックのデータを、前記記憶装置からそれぞれ予め読み出して前記キャッシュメモリに記憶させる旧冗長データ読出し部と、
を備えた請求項２に記載の記憶制御装置。
【請求項６】
さらに、前記キャッシュメモリへのデータ入出力を制御するキャッシュコントローラを備えており、
前記保証コード設定部と、前記検査部と、前記データサイズ調整部とは、前記キャッシュコントローラ内にそれぞれ設けられている請求項２に記載の記憶制御装置。
【請求項７】
さらに、データ入出力処理を制御するマイクロプロセッサを備えており、
前記保証コード設定部と、前記検査部と、前記結合データ生成部及び前記データサイズ調整部とは、前記マイクロプロセッサによってそれぞれ実現される請求項２に記載の記憶制御装置。
【請求項８】
前記保証コードには、前記第２サイズ毎のデータの誤りを検出するための誤り検出符号が含まれている請求項２に記載の記憶制御装置。
【請求項９】
前記保証コードには、前記第２サイズ毎のデータの書込み先アドレスの誤りを検出するためのアドレス情報が含まれている請求項２に記載の記憶制御装置。
【請求項１０】
前記保証コードには、前記第２サイズ毎のデータの誤りを検出するための誤り検出符号と、前記第２サイズ毎のデータの書込み先アドレスの誤りを検出するためのアドレス情報とが含まれている請求項２に記載の記憶制御装置。
【請求項１１】
上位装置と記憶装置との間のデータ入出力を行う記憶制御装置を制御するための方法であって、
前記記憶制御装置内でのデータ入出力処理に使用される第１ブロックのサイズと、前記記憶装置内に設けられる複数の第２ブロックのサイズとはそれぞれ異なっており、
前記上位装置から受信したライトデータをキャッシュメモリに記憶させるライトデータ受信ステップと、
前記キャッシュメモリに記憶されたライトデータの一端または他端のいずれか一方が、前記第２ブロック間の境界と不一致であるか否かをそれぞれ判定し、不一致の場合は、この不一致の端部に連続して隣接する他の第１ブロックのデータを前記記憶装置から取得する隣接ブロック取得ステップと、
前記取得された隣接ブロックと前記ライトデータとを結合させて、結合データを生成する結合データ生成ステップと、
前記ライトデータに結合された前記他の第１ブロックのデータの端部が前記各第２ブロック間の境界に一致するように、前記他の第１ブロックのデータの一部を破棄することにより、前記結合データのサイズを前記第２サイズの整数倍に調整するデータサイズ調整ステップと、
前記サイズの調整された結合データを前記記憶装置に書き込ませる書込みステップと、を実行させる記憶制御装置の制御方法。
【請求項１２】
前記ライトデータ受信ステップと前記隣接ブロック取得ステップとの間に保証コード設定ステップを設け、かつ、前記結合データ生成ステップと前記データサイズ調整ステップとの間に検査ステップを設け、
前記保証コード設定ステップでは、前記受信されたライトデータについて、前記第２ブロックのサイズのデータ毎に、データ内容を保証するための保証コードをそれぞれ設定することにより、前記ライトデータを前記第１ブロック単位のライトデータに変換し、
前記検査ステップでは、前記結合データに含まれる前記各保証コードに基づいて、前記結合データの内容が正常であるか否かを検査する、ようになっている請求項１１に記載の記憶制御装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御装置及び記憶制御装置の制御方法に関し、例えば、データ入出力の管理単位が異なる記憶装置との間でデータ入出力を行う記憶制御装置及び記憶制御装置の制御方法に関する。
【背景技術】
【０００２】
サーバやメインフレームマシン等のホストコンピュータ（以下、「ホスト」）に接続されるストレージシステムの一種としては、ディスクアレイシステムが知られている。ディスクアレイシステムは、RAID（Redundant Array of Inexpensive Disks）システムとも呼ばれ、アレイ状に配置された複数のディスクドライブ及びそれらを制御する制御部を備えている。
【０００３】
ディスクアレイシステムでは、データのリード要求及びライト要求を、複数のディスクドライブの並列動作によって、高速に処理することができる。また、RAID１〜RAID５として知られているように、ディスクアレイシステムでは、データに冗長性を付加することもできる（非特許文献１）。
【０００４】
このように、ディスクアレイシステムでは、ディスクドライブに障害が生じた場合でもデータを復元できるように、冗長データを作成し、この冗長データをデータとは異なるディスクドライブに保存している。
【０００５】
RAID構成に加えて、さらに、保証コードを使用するディスクアレイシステムも知られている（特許文献１，特許文献２，特許文献３）。一つの従来技術では、保証コードとして、ホストコンピュータがアクセス先として指定する論理ブロックの論理アドレス（以下、「LA（Logical Address）」）、及び、論理ブロックのデータについて排他的論理和演算を実施して求められるLRC（Longitudinal Redundancy Check）を論理ブロックに付加し、保証コードと論理ブロックとをディスクドライブに保存させる。LAは、論理ブロックのデータが書き込まれる記憶領域のアドレスの誤りを検出するために用いられる。LRCは、論理ブロックのデータの誤りを検出するための誤り検出符号として用いられる。
【特許文献１】特開２０００−３４７８１５号公報
【特許文献２】米国特許第５,８１９,０５４号公報
【特許文献３】米国特許第５,７０６,２９８号公報
【非特許文献１】ディー・パターソン（D.Patterson）、外2名、「ケース・フォー・リダンダント・アレイ・オブ・インエクスペンシブ・ディスク（A Case for Redundant Arrays of Inexpensive Disks(RAID)）」、エー．シー．エム．シグモッド  コンファレンスプロシーディング(ACM SIGMOD Conference Proceeding)、1988年6月、p.109-116
【発明の開示】
【発明が解決しようとする課題】
【０００６】
従来技術では、RAID及び保証コードによって、ストレージシステムの信頼性向上を図っている。ところで、例えば、ATA（AT Attachment）ディスク等のような、ブロック長（セクタ長）が固定されている記録媒体をストレージシステムに用いる場合、ストレージシステムの制御部が記録媒体に対してデータを入出力する際のデータ単位と、記録媒体がデータの入出力処理を行う際のデータ単位とが異なる可能性がある。この場合、記録媒体にデータを入出力するのは、難しくなる。
【０００７】
なお、記録媒体の扱うデータ単位が固定されていない場合でも、制御部が記録媒体に対してデータの入出力処理を行う際のデータ単位と、記録媒体が扱うデータ単位とを同一サイズにできない場合には、上記同様の問題が生じ得る。
【０００８】
また、ホストがデータを取り扱う場合の単位である論理ブロックのサイズと、ディスクドライブのセクタ長とが一致しても、ストレージシステムの制御部が、ホストから受信した論理ブロックに保証コードを付加する場合は、上記同様の問題を生じる。保証コードを用いるストレージシステムでは、ディスクドライブへの書込み対象は、論理ブロック及び保証コードとなる。従って、ディスクドライブへの書込み対象となるデータのサイズと、ディスクドライブのセクタ長とが一致しなくなる。
【０００９】
上述のように、保証コードの付加された論理ブロックを、異なるサイズのセクタにそのまま記録させるのは難しい。しかし、保証コードを検査することにより、データの内容の誤り及び書込み先の間違いを検出することができるため、保証コードの付加された論理ブロックを、異なるセクタ長を有する記録媒体に容易に入出力できるようにした技術開発が求められている。
【００１０】
本発明は、上記の問題点に鑑みてなされたもので、その目的は、記憶制御装置内でのデータ入出力処理に使用される第１ブロックのサイズと、記憶装置内に設けられる複数の第２ブロックのサイズとがそれぞれ異なる場合でも、データを効率的に入出力できるようにした記憶制御装置及び記憶制御装置の制御方法を提供することにある。本発明の他の目的は、記憶制御装置内におけるデータ入出力処理に用いられるデータ管理単位と記憶装置内に記憶されるデータの管理単位とが異なる場合でも、保証コードを用いて信頼性を向上できるようにした記憶制御装置及び記憶制御装置の制御方法を提供することにある。本発明の更なる目的は、後述する実施の形態の記載から明らかになるであろう。
【課題を解決するための手段】
【００１１】
上記課題を解決すべく、本発明に従う記憶制御装置では、記憶制御装置内におけるデータ入出力処理のデータ管理単位と、記憶装置内に格納されるデータの管理単位とが異なる場合に、ライト対象範囲のデータを、ライトデータの両端側まで拡大した後、記憶装置内のデータ管理単位に合わせて縮小させる。
【００１２】
即ち、本発明の一つの観点に従う記憶制御装置は、上位装置と記憶装置との間のデータ入出力を制御するための記憶制御装置であって、記憶制御装置内でのデータ入出力処理に使用される第１ブロックのサイズと、記憶装置内に設けられる複数の第２ブロックのサイズとはそれぞれ異なっており、第１ブロック単位のライトデータの一端または他端のいずれか一方が、各第２ブロック間の境界と不一致の場合は、不一致の端部に連続する他の第１ブロックのデータを取得し、この他の第１ブロックのデータとライトデータとを結合させて、結合データを生成する結合データ生成部と、ライトデータに結合された他の第１ブロックのデータの端部が各第２ブロック間の境界に一致するように、他の第１ブロックのデータの一部を破棄することにより、結合データのサイズを第２ブロックのサイズの整数倍に調整するデータサイズ調整部と、サイズの調整された結合データを記憶装置に書き込ませる書込み部と、を備える。
【００１３】
本発明の他の観点に従う記憶制御装置は、上位装置と記憶装置との間のデータ入出力を制御するための記憶制御装置であって、記憶制御装置内でのデータ入出力処理に使用される第１ブロックのサイズと、記憶装置内に設けられている複数の第２ブロックのサイズとはそれぞれ異なっており、上位装置の要求に応じて、上位装置からライトデータを受信するライトデータ受信部と、記憶装置からデータを読み出す読出し部と、受信されたライトデータについて、第２ブロックのサイズのデータ毎に、データ内容を保証するための保証コードをそれぞれ設定することにより、ライトデータを第１ブロック単位のライトデータに変換する保証コード設定部と、第１ブロック単位のライトデータを記憶するキャッシュメモリと、キャッシュメモリに記憶されたライトデータの一端または他端のいずれか一方が、各第２ブロック間の境界と不一致の場合は、不一致の端部に連続する他の第１ブロックのデータを読出し部を介して記憶装置から取得し、この取得された他の第１ブロックのデータとライトデータとを結合させて、結合データを生成する結合データ生成部と、結合データに含まれる各保証コードに基づいて、結合データの内容が正常であるか否かを検査する検査部と、検査部により正常であるとの検査結果が得られた場合には、ライトデータに結合された他の第１ブロックのデータの端部が各第２ブロック間の境界に一致するように、他の第１ブロックのデータの一部を破棄することにより、結合データのサイズを第２サイズの整数倍に調整するデータサイズ調整部と、サイズの調整された結合データを記憶装置に書き込ませる書込み部と、を備える。
【００１４】
本発明の実施形態では、記憶装置によって、冗長データを用いる冗長記憶構造が提供されており、さらに、受信されたライトデータに関して、第１ブロック単位の冗長データを生成する冗長データ生成部を備え、結合データ生成部と、検査部と、データサイズ調整部及び書込み部は、冗長データをライトデータと同様に処理する。
【００１５】
本発明の実施形態では、記憶装置によって、冗長データを用いる冗長記憶構造が提供されており、さらに、受信されたライトデータに関して、第１ブロック単位の冗長データを生成する冗長データ生成部を備え、結合データ生成部と、検査部と、データサイズ調整部及び書込み部は、冗長データをライトデータと同様に処理し、かつ、読出し部は、第１ブロックのサイズと第２ブロックのサイズとの最小公倍数のサイズで、記憶装置からデータを読み出すようになっている。
【００１６】
本発明の実施形態では、記憶装置は、冗長データを用いる冗長記憶構造を提供するものであり、さらに、受信されたライトデータに関して、第１ブロック単位の冗長データを生成する冗長データ生成部とを備え、結合データ生成部と、検査部と、データサイズ調整部及び書込み部は、冗長データを、ライトデータと同様に処理し、さらに、結合データ生成部が結合データを生成するよりも前に、ライトデータにより更新される第１ブロック単位の旧データ及びこの旧データに連続する他の第１ブロックのデータを、記憶装置からそれぞれ予め読み出してキャッシュメモリに記憶させる旧データ読出し部と、結合データ生成部が新たな冗長データに関する結合データを生成するよりも前に、新たな冗長データにより更新される第１ブロック単位の旧冗長データ及びこの旧冗長データに連続する他の第１ブロックのデータを、記憶装置からそれぞれ予め読み出してキャッシュメモリに記憶させる旧冗長データ読出し部と、を備える。
【００１７】
本発明の実施形態では、さらに、キャッシュメモリへのデータ入出力を制御するキャッシュコントローラを備えており、保証コード設定部と、検査部と、データサイズ調整部とは、キャッシュコントローラ内にそれぞれ設けられている。
【００１８】
本発明の実施形態では、さらに、データ入出力処理を制御するマイクロプロセッサを備えており、保証コード設定部と、検査部と、結合データ生成部及びデータサイズ調整部とは、マイクロプロセッサによってそれぞれ実現される。
【００１９】
本発明の実施形態では、保証コードには、第２サイズ毎のデータの誤りを検出するための誤り検出符号が含まれている。
【００２０】
本発明の実施形態では、保証コードには、第２サイズ毎のデータの書込み先アドレスの誤りを検出するためのアドレス情報が含まれている。
【００２１】
本発明の実施形態では、保証コードには、第２サイズ毎のデータの誤りを検出するための誤り検出符号と、第２サイズ毎のデータの書込み先アドレスの誤りを検出するためのアドレス情報とが含まれている。
【００２２】
本発明の別の観点に従う記憶制御装置の制御方法は、上位装置と記憶装置との間のデータ入出力を行う記憶制御装置を制御するための方法であって、記憶制御装置内でのデータ入出力処理に使用される第１ブロックのサイズと、記憶装置内に設けられる複数の第２ブロックのサイズとはそれぞれ異なっており、上位装置から受信したライトデータをキャッシュメモリに記憶させるライトデータ受信ステップと、キャッシュメモリに記憶されたライトデータの一端または他端のいずれか一方が、第２ブロック間の境界と不一致であるか否かをそれぞれ判定し、不一致の場合は、この不一致の端部に連続して隣接する他の第１ブロックのデータを記憶装置から取得する隣接ブロック取得ステップと、取得された隣接ブロックとライトデータとを結合させて、結合データを生成する結合データ生成ステップと、ライトデータに結合された他の第１ブロックのデータの端部が各第２ブロック間の境界に一致するように、他の第１ブロックのデータの一部を破棄することにより、結合データのサイズを第２サイズの整数倍に調整するデータサイズ調整ステップと、サイズの調整された結合データを記憶装置に書き込ませる書込みステップと、を実行させる。
【００２３】
また、ライトデータ受信ステップと隣接ブロック取得ステップとの間に保証コード設定ステップを設け、かつ、結合データ生成ステップとデータサイズ調整ステップとの間に検査ステップを設け、保証コード設定ステップでは、受信されたライトデータについて、第２ブロックのサイズのデータ毎に、データ内容を保証するための保証コードをそれぞれ設定することにより、ライトデータを第１ブロック単位のライトデータに変換し、検査ステップでは、結合データに含まれる各保証コードに基づいて、結合データの内容が正常であるか否かを検査することもできる。
【００２４】
本発明の各部または各ステップの少なくとも一部は、コンピュータプログラムとして構成される場合がある。このコンピュータプログラムは、記録媒体に固定して配布したり、ネットワークを介して配信することができる。
【発明を実施するための最良の形態】
【００２５】
以下、図面に基づいて、本発明の実施の形態を説明する。まず最初に、本発明の概念を説明し、その次に、具体的な実施例について説明する。図１は、本発明の概念を模式的に示す説明図である。
【００２６】
ストレージシステムは、例えば、記憶制御装置１及び記憶装置２を備えて構成することができる。記憶制御装置１は、ホストＨから発行されたリード要求またはライト要求に従って、記憶装置２からデータを読み出したり、または、記憶装置２にデータを書き込んだりする。記憶装置２は、例えば、ハードディスクドライブ等の記憶デバイスを少なくとも１つ以上備えており、ホストＨによって使用されるデータを格納している。
【００２７】
ここで、記憶制御装置１の内部でデータを取り扱う場合のデータ管理単位と、記憶装置２内に記憶されるデータの管理単位とは異なっている。記憶制御装置１は、例えば、５２０バイトのサイズBS１を有する拡張論理ブロック３を用いて、データ入出力処理を行うようになっている。
【００２８】
拡張論理ブロックとは、例えば、５１２バイトのサイズBS２を有する論理ブロックに、８バイトの保証コード５を付加することにより生成されるブロックである。論理ブロックとは、ホストＨが記憶装置２を使用する場合のデータ入出力単位である。保証コード５とは、各論理ブロック毎にそれぞれ生成されて付加されるもので、例えば、論理ブロックの内容の誤りを検出するための情報（LRC）及び論理ブロックの書込み先の誤りを検出するための情報（LA）等を含んでいる。
【００２９】
保証コード５は、例えば、LRC及びLAの両方を含んでもよいし、LRCまたはLAのいずれか一方のみを含んでもよい。なお、LRC及びLAは、保証コードに含まれる情報の一例であり、LRC及びLAに類する他の情報を含んでもよく、LRC及びLA以外の他の情報を含んでもよい。
【００３０】
記憶制御装置１が５２０バイトの拡張論理ブロック３を用いるのに対して、記憶装置２では、例えば、５１２バイトのサイズBS２を有する物理ブロック４の単位で、データを入出力させる。物理ブロック４とは、例えば、ハードディスク、フレキシブルディスク、光ディスク等のような記録媒体に設けられる「セクタ」に該当する。このように、ホストＨと記憶制御装置１との間で使用される論理ブロックのサイズと、記憶装置２内で管理される物理ブロック４のサイズとは、一致する。換言すれば、本実施形態では、記憶制御装置１内で保証コード５を付加するため、記憶制御装置１内のデータ管理単位（拡張論理ブロック３）と記憶装置２内のデータ管理単位（物理ブロック４）とが一致しない。
【００３１】
記憶制御装置１の備えるデータ処理機能を説明する。記憶制御装置１は、例えば、ライト要求受信部１Ａと、保証コード設定部１Ｂと、ライト対象範囲生成部１Ｃと、保証コード検査部１Ｄと、ブロックサイズ調整部１Ｅ及びライト対象範囲書込み部１Ｆとを備えることができる。
【００３２】
ライト要求受信部１Ａは、ホストＨから発行されたライト要求を受信するためのものである。ライト要求受信部１Ａは、ホストＨからのライト要求を受信すると、ライトデータWDを記憶するための領域をキャッシュメモリに確保し、ホストＨから受信したライトデータWDをキャッシュメモリに記憶させる。ここで、ライトデータWDは、一つまたは複数の論理ブロックから構成されている。
【００３３】
保証コード設定部１Ｂは、ライトデータWDの各論理ブロック毎にそれぞれ保証コード５を生成して、各論理ブロックにそれぞれ付加するものである。論理ブロックに保証コードを付加することにより、論理ブロックよりもサイズの大きい拡張論理ブロック３が形成される（拡張論理ブロック＝論理ブロック＋保証コード）。これにより、ライトデータWDは、拡張論理ブロック単位で構成されるライトデータ３Ｗとなる（ライトデータ３Ｗ＝ライトデータWD＋保証コード５）。
【００３４】
ライト対象範囲生成部１Ｃは、「結合データ生成部」に対応する。ライト対象範囲生成部１Ｃは、拡張ブロック単位のデータとして構成されたライトデータ３Ｗを、その両端側まで拡大して、ライト対象範囲を生成する。
【００３５】
ライト対象範囲生成部１Ｃは、拡張ブロック単位のライトデータ３Ｗの両端にそれぞれ連続して隣接する他の拡張論理ブロック３Ｆ，３Ｂを、記憶装置２内からそれぞれ取得し、これら拡張論理ブロック３Ｆ，３Ｂをライトデータ３Ｗと結合させる。これにより、ライト対象範囲（結合データ）が生成される。拡張論理ブロック３Ｆ，３Ｂを、以下の説明では、隣接ブロック３Ｆ，３Ｂと呼ぶ場合がある。
【００３６】
一方の隣接ブロック３Ｆは、ライトデータ３Ｗの先頭側に隣接する拡張論理ブロックである。他方の隣接ブロック３Ｂは、ライトデータ３Ｗの終端側に隣接する拡張論理ブロックである。
【００３７】
記憶制御装置１は、記憶装置２内の各物理ブロック４と、記憶制御装置１の管理する各拡張論理ブロック３との対応関係を把握している。従って、ライト対象範囲生成部１Ｃは、各隣接ブロック３Ｆ，３Ｂのデータを記憶している物理ブロック４を記憶装置２内からそれぞれ読出し、この読み出した各物理ブロック４の中から、隣接ブロック３Ｆ，３Ｂのデータをそれぞれ取得する。
【００３８】
先頭側の隣接ブロック３Ｆをライトデータ３Ｗの先頭側に配置し、終端側の隣接ブロック３Ｂをライトデータ３Ｗの終端側に配置することにより、記憶装置２へのライト対象となるデータの範囲は、ライトデータ３Ｗの前後方向に拡大される。
【００３９】
後述の実施例で述べるように、常に、２つの隣接ブロック３Ｆ，３Ｂが記憶装置２からそれぞれ読み出されて、ライトデータ３Ｗに結合されるとは限らない。拡張論理ブロック単位で再構成されたライトデータ３Ｗの先頭側または終端側のいずれか一方の端部が、各物理ブロック４間の境界に一致しない場合にのみ、その不一致の端部に連続して隣接する拡張論理ブロック（３Ｆまたは３Ｂ）が取得され、ライトデータ３Ｗと結合される。
【００４０】
換言すれば、一つまたは複数の拡張論理ブロックから構成されるライトデータ３Ｗの先頭側または終端側が、物理ブロック４間の境界に一致する場合、この一致する端部に連続して隣接する拡張論理ブロックは、記憶装置２から取得されない。
【００４１】
保証コード検査部１Ｄは、ライト対象範囲（＝３Ｆ＋３Ｗ＋３Ｂ）に含まれる各保証コード５をそれぞれ検査する。これにより、ライト対象範囲のデータについて、各拡張論理ブロック毎に、内容の誤りの有無や書込み先アドレスの誤りの有無を、それぞれ検出することができる。図１に示す例では、各拡張論理ブロック３Ｆ，３Ｗ，３Ｂ毎に、それぞれのブロックに付加されている保証コードが検査される。
【００４２】
ブロックサイズ調整部１Ｅは、書込み先デバイスである記憶装置２の管理単位に合わせて、ライト対象範囲のデータのサイズを調整するものである。ブロックサイズ調整部１Ｅは、保証コード検査部１Ｄによる検査に合格したライト対象範囲について、その両端のいずれか一方または両方に位置するデータを一部破棄することにより、ライト対象範囲のサイズを物理ブロック４の整数倍のサイズに調整する。
【００４３】
図１に示す例では、先頭側の隣接ブロック３Ｆについて、各物理ブロック４間の境界から外側にはみ出した部分のデータは、切り捨てられる。同様に、終端側の隣接ブロック３Ｂについても、各物理ブロック４間の境界から外側にはみ出した部分のデータは、切り捨てられる。なお、拡張論理ブロック単位に再構成されたライトデータ３Ｗについては、データの部分的破棄は行われない。ライトデータ３Ｗの両側に結合されたデータ（３Ｆ，３Ｂ）のみが、部分的破棄の対象となる。
【００４４】
ライト対象範囲のサイズは、Ｎ×BS２となる。ここで、Ｎは、正の整数である。例えば、ライトデータ３Ｗに含まれる論理ブロックの数をＮ１、ライトデータ３Ｗに接続される隣接ブロックの数をＮ２とすると、Ｎ＝Ｎ１＋Ｎ２として表現可能である。
【００４５】
ライト対象範囲書込み部１Ｆは、ブロックサイズの調整されたライト対象範囲のデータを、記憶装置２の所定の場所に書き込むものである。
【００４６】
このように、本実施形態では、記憶制御装置１内におけるデータ入出力の単位である拡張論理ブロック３のサイズBS１と、記憶装置２内に設けられる物理ブロック４のサイズBS２とが異なる場合でも、ライト対象範囲となるデータのサイズを、物理ブロック４のサイズに合わせて調整し、記憶装置２に書き込むことができる。
【００４７】
また、本実施形態では、ライトデータ３Ｗに隣接する拡張論理ブロック３Ｆ，３Ｂを読み出して、ライトデータ３Ｗに結合させることにより、ライト対象範囲を生成する。従って、各拡張論理ブロック３Ｆ，３Ｗ，３Ｂについて、それぞれの保証コード５を検査してから、記憶装置２に記憶させることができ、信頼性を高めることができる。以下、本実施形態を詳述する。
【実施例１】
【００４８】
図１は、本実施例に係るストレージシステム１０の全体構成を示す説明図である。このストレージシステム１０は、例えば、コントローラ１００及び記憶部２００を備えて構成される。ストレージシステム１０は、ホスト２０に、例えば、RAID１〜RAID６のような冗長化された記憶領域を提供することができる。なお、本発明は、冗長化されていない記憶領域を提供するストレージシステム１０にも適用することができる。本発明の範囲は、以下に述べるストレージシステム１０の構成に限定されない。ストレージシステム１０は、図２に示す以外に種々の形態で構成可能である。
【００４９】
（１）システム構成
ホスト２０は、例えば、サーバコンピュータやメインフレームコンピュータ等のようなコンピュータとして構成される。ホスト２０は、例えば、LAN（Local Area Network）やSAN（Storage Area Network）等の通信経路CN１を介して、ストレージシステム１０に接続されている。説明の都合上、ホスト２０を一つだけ図示するが、複数のホスト２０をストレージシステム１０にそれぞれ接続してもよい。
【００５０】
ストレージシステム１０は、ホスト２０によって利用されるデータを、記憶部２００内に記憶させている。記憶部２００へのデータの入出力（データの読出し及びデータの書込み）は、コントローラ１００によって制御される。
【００５１】
コントローラ１００は、例えば、キャッシュコントローラ１１０と、ホスト通信部１２０（以下、「ホストI/F１２０」）と、ディスク通信部１３０（以下、「ディスクI/F１３０」）と、キャッシュメモリ１４０と、プログラムメモリ１５０と、マイクロプロセッサ１６０（以下、「MPU１６０」）及びバスブリッジ１７０を備えて構成される。なお、コントローラ１００の構成は一例であって、本発明はこれに限定されない。例えば、それぞれ独立した制御モジュールとして構成されるチャネルアダプタ及びディスクアダプタと、キャッシュメモリ及び共有メモリ等から、コントローラ１００を構成してもよい。
【００５２】
キャッシュコントローラ１１０は、キャッシュメモリ１４０へのデータ入出力等を制御するものである。キャッシュコントローラ１１０は、例えば、保証コード付加／削除回路１１１と、保証コード検査回路１１２と、冗長データ生成回路１１３と、ブロックサイズ変換回路１１４とを備えることができる。
【００５３】
各回路１１１〜１１４の動作は後述するが、簡単に説明すると、保証コード付加／削除回路１１１は、データに保証コードを付加したり、あるいは、データから保証コードを削除するための回路である。保証コード検査回路１１２は、データに付加された保証コードを用いて、データの内容等を検査するための回路である。冗長データ生成回路１１３は、パリティデータ等のような冗長データを生成するための回路である。ブロックサイズ変換回路１１４は、記憶部２００の物理フォーマットに合わせて、ライトデータを含むライト対象範囲のデータのサイズを調整する。
【００５４】
ホストI/F１２０は、ホスト２０との間で送受信を行うためのものである。ディスクI/F１３０は、記憶部２００内の各ディスクドライブ２１０との間で送受信を行うためのものである。図中では、説明の便宜上、ホストI/F１２０及びディスクI/F１３０をそれぞれ一つずつ示すが、複数のI/F１２０，１３０を設けることもできる。
【００５５】
キャッシュメモリ１４０は、ホスト２０からアクセスされるデータを一時的に記憶するためのメモリである。プログラムメモリ１５０は、例えば、ディスクアレイ制御プログラム１５１等の制御プログラムや、制御情報を記憶するためのメモリである。なお、例えば、メモリの一部の領域に制御プログラムや制御情報を記憶し、残りの領域をキャッシュ領域として使用する構成でもよい。
【００５６】
MPU１６０は、ストレージシステム１０の動作を制御するものである。MPU１６０は、例えば、ディスクアレイ制御プログラム１５１を読み込んで実行することにり、ストレージシステム１０の動作を制御する。
【００５７】
バスブリッジ１７０は、MPU１６０及びプログラムメモリ１５０を、キャッシュコントローラ１１０に接続させる。キャッシュコントローラ１１０は、ホストI/F１２０，ディスクI/F１３０及びキャッシュメモリ１４０に接続されている。
【００５８】
記憶部２００は、少なくとも一つ以上のディスクドライブ２１０を備えている。ディスクドライブ２１０としては、例えば、ハードディスクドライブ、フレキシブルディスクドライブ、光ディスクドライブ等を挙げることができる。本実施例では、例えば、ATAディスクのような固定サイズのセクタが設けられるディスクドライブを使用する。しかし、本発明はこれに限らず、セクタサイズ（物理ブロックサイズ）を可変に設定可能なディスクドライブの場合でも適用可能である。
【００５９】
ディスクドライブ２１０の有する物理的な記憶領域の全部または一部を用いることにより、ホスト２０からのアクセス対象となる論理ボリューム（LU：Logical Unit）２２０が形成される。LU２２０は、物理的な記憶領域上に設定される論理的な記憶領域であり、論理的記憶デバイスと呼ぶこともできる。
【００６０】
例えば、正ディスクドライブ及び副ディスクドライブのペアによって、RAID１のＬＵ２２０を構成することができる。また、例えば、複数のデータディスクドライブと一つまたは複数のパリティディスクドライブとにより、RAID５等のような冗長性を備えるLU２２０を構成することもできる。以下の説明では、パリティデータを冗長データと呼ぶ場合がある。なお、冗長データを記憶するディスクドライブは、固定されている必要はなく、RAIDグループを構成する各ディスクドライブに、所定の順番で、冗長データを分散して記憶させることもできる。
【００６１】
（２）ブロックサイズの対応関係
図３は、コントローラ１００が扱うデータの単位と、ディスクドライブ２１０が扱うデータの単位との対応関係を模式的に示す説明図である。
【００６２】
図３の上段は、コントローラ１００がディスクドライブ２１０にデータを入出力する際に扱うデータの単位を示す。コントローラ１００がデータを取り扱う単位を、本明細書では、「拡張論理ブロック３００」と定義する。
【００６３】
拡張論理ブロック３００は、例えば、５２０バイトのサイズを有する。拡張論理ブロック３００は、論理ブロック３１０及び保証コード３２０から構成される。論理ブロック３１０は、ホスト２０がストレージシステム１０にデータを入出力する際の単位であり、５１２バイトのデータから構成される。
【００６４】
保証コード３２０は、論理ブロック３１０の記憶内容や論理ブロック３１０の格納先を保証する情報であり、LAやLRCを含む８バイトのデータとして構成される。従って、拡張論理ブロック３００のサイズは、５１２バイトに８バイトを加えた値である５２０バイトとなる。なお、保証コード３２０の全バイトが使用されている必要はなく、例えば、２バイト程度の領域が空き領域であってもよい。
【００６５】
図３の下段は、ディスクドライブ２１０がデータ入出力を行う際のデータの単位を示している。ディスクドライブ２１０がデータを取り扱う単位を、本明細書では、「物理ブロック４００」と定義する。物理ブロック４００は、５１２バイトのサイズを有する。
【００６６】
さらに、本明細書では、拡張論理ブロック３００間の境界を「拡張論理ブロック境界B1」と定義する。同様に、物理ブロック４００間の境界を「物理ブロック境界B2」と定義する。
【００６７】
図３に示す例では、拡張論理ブロック３００は、物理ブロック４００と比較して、そのサイズが８バイトだけ大きい。従って、拡張論理ブロック３００を６４個連続して配置し、物理ブロック４００を６５個連続して配置すると、両ブロック３００，４００間のサイズの差分（８バイト）の合計値が、物理ブロック４００のサイズと等しい５１２バイトとなる。従って、拡張論理ブロック３００を6４個（M1個）連続して並べた場合の合計サイズと、物理ブロック４００を６５個（M2個）連続して並べた場合の合計サイズとは、一致する。
【００６８】
拡張論理ブロック３００の合計サイズと物理ブロック４００の合計サイズが一致する場合の拡張論理ブロック３００の個数をM1、拡張論理ブロック３００のサイズをBS１、物理ブロック４００のサイズをBS２とすると、M1＝BS２／（BS１−BS２）となる。
【００６９】
この場合、拡張論理ブロック境界B1と物理ブロック境界B2とは、一致する。即ち、６４個連続して並べられた拡張論理ブロック３００群の先頭から終端までの合計サイズと、６５連続して並べられた物理ブロック４００群の先頭から終端までの合計サイズとは、等しい。従って、拡張論理ブロック３００群の両端と物理ブロック４００群の両端とは、それぞれ一致する。つまり、この場合、拡張論理ブロック３００群の両端に位置する拡張論理ブロック境界B1は、物理ブロック４００群の両端に位置する物理ブロック境界B2にそれぞれ一致する。このように、拡張論理ブロック境界B1と物理ブロック境界B2とが一致する状態を、本明細書では、「ブロック境界一致」と定義する。
【００７０】
なお、拡張論理ブロック３００のサイズを５２０バイトと、物理ブロック４００のサイズを５１２バイトとして述べたが、これらの値は例示であって、本発明は、他の場合にも適用できる。本発明は、拡張論理ブロック３００のサイズと物理ブロック４００のサイズとが異なる場合に適用することができる。従って、拡張論理ブロック３００が、保証コード３２０を備えていない場合であっても、拡張論理ブロック３００のサイズが物理ブロック４００のサイズと異なるのであれば、本発明を適用可能である。
【００７１】
（３）リード処理
図４のフローチャートを参照して、ホスト２０から発行されたリード要求を処理する方法を説明する。以下の各フローチャートは、本発明の理解及び実施に必要な範囲内で、処理の概要を示しており、実際のコンピュータプログラムとは異なる場合がある。また、説明の便宜上、「ステップ」を「Ｓ」と略記する場合がある。
【００７２】
図４に示すリード処理は、コントローラ１００のMPU１６０がディスクアレイ制御プログラム１５１を実行することによって、実現される。しかし、説明の便宜上、主として、コントローラ１００を動作の主体として説明する。
【００７３】
ホスト２０は、リード対象のデータを記憶しているLU２２０の番号（ボリューム番号）を特定し、さらに、読出し先の先頭アドレス（先頭LA）及び論理ブロック数を指定することにより、リード要求（リードコマンド）を発行する。先頭LAに続く論理ブロック数は、リード対象データのサイズを示している。
【００７４】
コントローラ１００は、ホスト２０からのリード要求を受信すると、先頭LA及び論理ブロック数を確認する（Ｓ１１）。また、コントローラ１００は、先頭LAおよび論理ブロック数に基づいて、ディスクドライブ２１０から読み出すべき論理ブロックと、この論理ブロックに付与されている保証コードとを、それぞれ特定する（Ｓ１１）。
【００７５】
そして、コントローラ１００は、特定された論理ブロック及び保証コード（即ち、拡張論理ブロック３００のデータ）が記憶されている物理ブロック４００を特定し、いずれのディスクドライブ２１０からデータを読み出すかを決定する（Ｓ１２）。
【００７６】
コントローラ１００は、拡張論理ブロック３００と物理ブロック４００との対応関係を把握しているため、このブロック間の対応関係に基づいて、データを読み出すべき物理ブロック４００を決定することができる。
【００７７】
例えば、リード対象の拡張論理ブロック３００が一つであって、この一つの拡張論理ブロック３００が２つの連続する物理ブロック４００に跨って記憶されている場合、コントローラ１００は、これら２つの連続する物理ブロック４００が、データ読出し元の物理ブロック４００となる。コントローラ１００は、データ読出し元の物理ブロック４００を有するディスクドライブを、読出し元のディスクドライブとして特定する。
【００７８】
なお、コントローラ１００は、リード対象のデータを記憶する物理ブロック４００以外に、他の物理ブロック４００も一緒に読み出すこともできる。即ち、リード対象のデータを記憶するリード対象の物理ブロック４００に加えて、このリード対象の物理ブロック４００以外の他の物理ブロック４００についても一緒に、一回のリードコマンドで読み出すことができる。これにより、コントローラ１００からディスクドライブ２１０へのデータ読出し回数を低減することができる。この場合、ディスクドライブ２１０から余分に読み出されたデータの中から、必要なデータのみを使用すればよい。
【００７９】
例えば、リード対象のデータが、飛び飛びの論理ブロックに分散して記憶されている場合を考える。この場合、この飛び飛びの論理ブロックを含むようにして、連続する複数の物理ブロック４００を、一回のリードコマンドで一度に読み出す構成でもよい。これにより、コントローラ１００がディスクドライブ２１０にアクセスする頻度を低減させることができ、ストレージシステム１０の応答性能が改善される。
【００８０】
次に、コントローラ１００は、ディスクドライブ２１０から読み出される論理ブロック３１０のデータ及び保証コード３２０を記憶させるための記憶領域を、キャッシュメモリ１４０に確保する（Ｓ１３）。
【００８１】
コントローラ１００は、読出し元の物理ブロック４００を明示して、ディスクI/F１３０に指示を出す。ディスクI/F１３０は、コントローラ１００から指定されたディスクドライブ２１０に、指定された物理ブロック４００のデータを読み出させるためのコマンドを発行する。ディスクI/F１３０は、ディスクドライブ２１０から読み出したデータを、Ｓ１３で確保されたキャッシュメモリ１４０上の領域に記憶させる（Ｓ１４）。
【００８２】
コントローラ１００の保証コード検査回路１１２は、キャッシュメモリ１４０に記憶された保証コード３２０を検査する（Ｓ１５）。これにより、ディスクドライブ２１０から読み出された論理ブロック３１０の内容に誤りの無いことを確認できる。保証コード３２０の検査によって誤りが発見された場合、エラー処理が行われる。エラー処理では、例えば、データの再読出しや、データの自動修復、ホスト２０へのエラー発生通知等を行うことができる。
【００８３】
ディスクドライブ２１０から読み出したデータにエラーの無いことを確認すると、コントローラ１００は、ホストI/F１２０を介して、論理ブロック３１０のデータのみをホスト２０に送信する（Ｓ１５）。即ち、保証コード３２０は、コントローラ１００からホスト２０に送信されない。保証コード３２０は、ストレージシステム１０の内部で使用される情報である。
【００８４】
（４）ライト処理
次に、ホスト２０から発行されたライト要求を処理する方法について説明する。まず、図５は、ライトデータがキャッシュメモリ１４０に記憶されている状態を示す。本明細書では、ライトデータを記憶する論理ブロック３１０及びその保証コード３２０を有する拡張論理ブロック３００を「ライトデータブロック３０１」と定義する。また、本明細書では、ライトデータブロック３０１の前後にそれぞれ隣接する拡張論理ブロック３００を「隣接ブロック３０２」と定義する。隣接ブロック３０２のうち、ライトデータブロック３０１の先頭側に隣接するものは、先頭側隣接ブロック３０２Ｆと呼び、ライトデータブロック３０１の終端側に隣接するものを終端側隣接ブロック３０２Ｂと呼ぶ。
【００８５】
ライトデータのサイズによっては、連続する複数の連続するライトデータブロック３０１に、ライトデータ及びその保証コードがそれぞれ格納される。連続するライトデータブロック３０１の前後それぞれに、隣接ブロック３０２が存在する。一方の隣接ブロック３０２Ｆは、連続するライトデータブロック３０１の最も先頭に位置するライトデータブロック３０１の一つ前の拡張論理ブロック３００である。他方の隣接ブロック３０２Ｂは、連続するライトデータブロック３０１の終端のライトデータブロック３０１の一つ後ろの拡張論理ブロック３００である。前者の隣接ブロック３０２Ｆを先頭側隣接ブロックと、後者の隣接ブロック３０２Ｂを終端側隣接ブロックと、それぞれ定義する。
【００８６】
このように、ディスクドライブ２１０への書込みを行う前に、キャッシュメモリ１４０上には、少なくとも一つ以上のライトデータブロック３０１と、隣接ブロック３０２とがそれぞれ読み出されて記憶されている。そして、後述のように、隣接ブロック３０２のうち余分なデータを破棄して、ライト対象範囲となるデータのサイズを調整した後、ディスクドライブ２１０への書込みが行われる。
【００８７】
図６は、ライト処理を示すフローチャートである。ホスト２０は、書込み先アドレス等を指定してライトコマンドを発行する。ホスト２０がストレージシステム１０にライトコマンドを発行すると、コントローラ１００は、ホストI/F１２０によって、ライトコマンドを受領する（Ｓ２１）。
【００８８】
ここで、ホスト２０は、５１２バイト長の論理ブロック３１０を１単位として、論理ブロックのｍ倍（ｍは１以上の整数）分のデータを書き込むことを明示して、ライトコマンドを発行する。ライトコマンドには、ライトコマンドによって書き込まれるデータの先頭LAと、ライトデータのサイズ（論理ブロック何個分のデータであるかを示す論理ブロック数）とが含まれている。
【００８９】
コントローラ１００は、ライトコマンドに含まれる書込み先の先頭LAに基づいて、ライトデータを書き込むべきディスクドライブ２１０を特定する（Ｓ２２）。また、コントローラ１００は、ライトデータを一時的に記憶させるための記憶領域及びこのライトデータについて生成される冗長データを一時的に記憶させるための記憶領域を、キャッシュメモリ１４０内にそれぞれ確保する（Ｓ２３）。なお、この際、コントローラ１００は、保証コード付加／削除回路１１１によってライトデータに付加される保証コード３２０を記憶するための記憶領域も、キャッシュメモリ１４０内に確保する（Ｓ２３）。
【００９０】
コントローラ１００は、ホストI/F１２０を介して、データの受信準備が完了した旨をホスト２０に通知する（Ｓ２４）。ホスト２０は、ライトコマンドで指定した論理ブロック数分のライトデータを、ホストI/F１２０に送信する。
【００９１】
コントローラ１００は、ホストI/F１２０を介して、ホスト２０からのライトデータを受信する（Ｓ２５）。なお、コントローラ１００は、ライトデータの受信を完了した時点で、ライト要求の処理が完了した旨を、ホスト２０に通知することができる。
【００９２】
受信されたライトデータは、キャッシュコントローラ１１０に転送される。キャッシュコントローラ１１０内の保証コード付加／削除回路１１１は、各論理ブロック３１０毎に、保証コード３２０（即ち、当該論理ブロックの先頭LA及びLRC）をそれぞれ生成し、各論理ブロック３１０に保証コード３２０をそれぞれ設定して、キャッシュメモリ１４０に記憶させる（Ｓ２６）。なお、ホスト２０から受信したライトデータが論理ブロック１個分のサイズの場合は、この一つの論理ブロック３１０について、一つの保証コード３２０が生成される。
【００９３】
コントローラ１００は、ライトデータが拡張論理ブロック３００の形態でキャッシュメモリ１４０に記憶されると、即ち、図５に示したライトデータブロック３０１がキャッシュメモリ１４０に記憶されると、冗長データを生成する（Ｓ２７）。
【００９４】
より詳しくは、ライトデータの受信完了をホストI/F１２０がMPU１６０に通知すると、MPU１６０は、ディスクアレイ制御プログラム１５１を用いて、冗長データ生成回路１１３を制御する。これにより、冗長データ生成回路１１３は、キャッシュメモリ１４０に記憶されたライトデータに対応する冗長データを生成する。生成された冗長データは、Ｓ２３で確保されたキャッシュメモリ１４０内の記憶領域に記憶される（Ｓ２７）。なお、例えば、RAID５等のようなパリティデータを用いる場合の詳細については、別の実施例で説明する。
【００９５】
コントローラ１００のディスクI/F１３０は、MPU１６０からの指示に従って、キャッシュメモリ１４０に格納されているライトデータ及び保証コード３２０、あるいは、冗長データを、Ｓ２２で特定されたディスクドライブ２１０に書き込む（Ｓ２８）。
【００９６】
この際、キャッシュメモリ１４０上のライトデータは、保証コード３２０の付加された５２０バイトの拡張論理ブロック３００として構成されている。これに対し、キャッシュメモリ１４０上のデータの書き込み先であるディスクドライブ２１０は、５１２バイトの物理ブロック４００で構成されている。
【００９７】
このように、ディスクドライブ２１０に書き込もうとしているライトデータは、５２０バイトの拡張論理ブロック３００として構成され、書込み先のディスクドライブ２１０は、５１２バイト単位でデータを記憶する。従って、拡張論理ブロック３００として構成されたライトデータのサイズを物理ブロック４００のサイズに適合させる必要がある。本明細書では、このブロックサイズを変換してからディスクドライブ２１０へデータを書き込む処理を「ブロックサイズ変換を伴うライト処理」と呼ぶ（Ｓ２８）。
【００９８】
なお、後述のように、ディスクドライブ２１０にライトデータブロック３０１のデータを書き込む前に、書き込もうとするライトデータの内容（LRC）及び書込み先（LA）が正しいか否かについて、保証コード検査回路１１２による検査が行われる。
【００９９】
図７は、図６中のＳ２８に示す「ブロックサイズ変換を伴うライト処理」を示すフローチャートである。このブロックサイズ変換を伴うライト処理（Ｓ２８）は、図７に示すように、隣接ブロックのリード処理（Ｓ３１）とディスクへのライト処理（Ｓ３２）とに大別することができる。
【０１００】
Ｓ３１，Ｓ３２の詳細は、それぞれ後述する。先に簡単に説明すると、隣接ブロックのリード処理（Ｓ３１）では、コントローラ１００は、ライトデータブロック３０１に隣接するブロック３０２のデータを、書込み先として特定されたディスクドライブ２１０から読出して、キャッシュメモリ１４０に記憶させる。図５と共に述べたように、ライトデータブロック３０１及び隣接ブロック３０２は、キャッシュメモリ１４０にそれぞれ記憶される。但し、常に、複数の隣接ブロック３０２，３０２Ｂが読み出されるわけではなく、いずれか一方の隣接ブロック３０２のみが読み出される場合もあるし、隣接ブロック３０２Ｆ，３０２Ｂのいずれも読み出されない場合もある。
【０１０１】
ディスクへのライト処理（Ｓ３２）では、コントローラ１００は、ライトデータブロック３０１及び隣接ブロック３０２を、書込み先として特定されたディスクドライブ２１０に書き込む。この書込みの際に、MPU１６０は保証コード検査回路１１２を制御し、ライトデータブロック３０１及び隣接ブロック３０２の保証コード３２０をそれぞれ検査させる。
【０１０２】
さらに、MPU１６０は、ブロックサイズ変換回路１１４を制御することにより、ライトデータブロック３０１と隣接ブロック３０２とをマージした結果（ライト対象範囲）が、物理ブロック４００のブロックサイズの整数倍となるように、隣接ブロック３０２のサイズを調整させる。ライトデータブロック３０１のサイズに変更はない。
【０１０３】
図８は、図７中のＳ３１で示す隣接ブロックのリード処理の詳細を示すフローチャートである。まず、コントローラ１００は、キャッシュメモリ１４０に記憶されているライトデータブロック３０１の先頭側の拡張論理ブロック境界B1が、物理ブロック境界B2と一致するか否かを判定する（Ｓ４１）。複数のライトデータブロック３０１が連続する場合、最も先頭のライトデータブロック３０１の先頭側の境界B1が物理ブロック境界B2に一致するか否かを判定する。
【０１０４】
拡張論理ブロック境界B1と物理ブロック境界B2とが一致するか否かは、ホスト２０から受信したライトコマンドに基づいて行うことができる。上述のように、ライトコマンドには、ライトデータの先頭アドレスに加えて、ライトデータの総サイズを示す論理ブロック数が含まれている。
【０１０５】
論理ブロック３１０のサイズは５１２バイトであるから、論理ブロック数が64の倍数であれば、キャッシュメモリ１４０に格納されたライトデータブロック３０１の両端の拡張論理ブロック境界B1は、物理ブロック境界B2にそれぞれ一致し、「ブロック境界一致」の状態であると判断できる。
【０１０６】
さて、コントローラ１００は、ライトデータブロック３０１の先頭側の拡張論理ブロック境界B1が、物理ブロック境界B２と一致するか否かを判定し（Ｓ４１）、ブロック境界一致の状態でない場合（S41:NO）、先頭側隣接ブロック３０２Ｆをディスクドライブ２１０から読み出して、キャッシュメモリ１４０に記憶させる（Ｓ４２）。この先頭側隣接ブロック３０２Ｆの取得には、図４と共に述べたリード処理が用いられる。なお、ライトデータブロック３０１の先頭側の拡張論理ブロック境界B1が物理ブロック境界B2に一致する場合（S41:YES）、Ｓ４２はスキップされてＳ４３に移る。即ち、両境界B1，B2が一致する場合（S41:YES）、先頭側隣接ブロック３０２Ｆは読み出されない。
【０１０７】
次に、コントローラ１００は、ライトデータブロック３０１の終端側の拡張論理ブロック境界B1が、物理ブロック境界B２と一致するか否かを判定する。(Ｓ４３)。前記同様に、複数のライトデータブロック３０１が連続する場合、最も終端のライトデータブロック３０１の終端側の境界B1が物理ブロック境界B2に一致するか否かを判定する。
【０１０８】
両境界B1，B2が一致しない場合（S43:NO）、コントローラ１００は、ライトデータブロック３０１の終端側の隣接ブロック３０２Ｂを、前記リード処理を用いてディスクドライブ２１０から読出し、キャッシュメモリ１４０に記憶させる。（Ｓ４４）。ライトデータブロック３０１の終端側の境界B1が物理ブロック境界B2に一致する場合（S43:YES）、Ｓ４４はスキップされる。終端側の境界B1が物理ブロック境界B2に一致する場合（S43:YES）、終端側隣接ブロック３０２Ｂは読み出されない。
【０１０９】
なお、ディスクドライブ２１０から読み出された隣接ブロック３０２は、キャッシュメモリ１４０に記憶されるだけであり、隣接ブロック３０２のデータをホスト２０に送信する必要はない。
【０１１０】
図９は、図７中のＳ３２で示す「ディスクへのライト処理」の詳細を示すフローチャートである。
コントローラ１００は、ライトデータブロック３０１に隣接する隣接ブロック３０２が読み出されたか否かを判定する（Ｓ５１）。隣接ブロック３０２がディスクドライブ２１０から読み出されてキャッシュメモリ１４０に記憶されたか否かの判定（Ｓ５１）は、先頭側隣接ブロック３０２Ｆ及び終端側隣接ブロック３０２Ｂのそれぞれについて、個別に行われる。
【０１１１】
隣接ブロック３０２が、キャッシュメモリ１４０に記憶されている場合（S51:YES）、コントローラ１００は、隣接ブロック３０２とライトデータブロック３０１とを、「ライト対象範囲」のデータとする。ライト対象範囲とは、ディスクドライブ２１０へ書き込まれるデータを意味する。隣接ブロック３０２が読み出された場合（S51:YES）、ライト対象範囲には、ライトデータブロック３０１のみならず、ライトデータブロック３０１以外の他のデータ（隣接ブロック３０２のデータ）が含まれる。
【０１１２】
隣接ブロック３０２が、キャッシュメモリ１４０に記憶されていない場合（S51:NO）、コントローラ１００は、ライトデータブロック３０１のみを「ライト対象範囲」とする（Ｓ５３）。
【０１１３】
従って、先頭側隣接ブロック３０２Ｆ及び終端側隣接ブロック３０２Ｂの両方がキャッシュメモリ１４０に記憶されている場合、ディスクドライブ２１０へ書き込まれるデータ範囲は、ライトデータブロック３０１と先頭側隣接ブロック３０２Ｆ及び終端側隣接ブロック３０２Ｂとなる。先頭側隣接ブロック３０２Ｆ及び終端側隣接ブロック３０２Ｂのいずれもキャッシュメモリ１４０に記憶されていない場合、ディスクドライブ２１０へ書き込まれるデータ範囲は、ライトデータブロック３０１のみとなる。先頭側隣接ブロック３０２Ｆまたは終端側隣接ブロック３０２Ｂのいずれか一方のみがキャッシュメモリ１４０に記憶されている場合、ディスクドライブ２１０へ書き込まれるデータ範囲は、ライトデータブロック３０１と、先頭側隣接ブロック３０２Ｆまたは終端側隣接ブロック３０２Ｂのいずれか一方となる。
【０１１４】
このようにしてライト対象範囲を決定した後、コントローラ１００は、保証コード検査回路１１２を用いて、決定されたライト対象範囲の保証コードを検査する。コントローラ１００は、ライト対象範囲として選択されたライトデータブロック３０１，隣接ブロック３０２がそれぞれ有する保証コードを、それぞれ検査させる。
【０１１５】
検査の結果、もしもエラーが検出された場合は、上述のように、エラー修復等のエラー処理を行うことができる。保証コードを用いた検査方法及びエラー検出時のエラー処理については、本発明の要旨ではなく、公知技術であるから、説明を省略する。
【０１１６】
保証コードの検査結果が正常である場合、コントローラ１００は、Ｓ５５〜Ｓ５９で述べる通り、ブロックサイズ変換回路１１４を用いて、隣接ブロック３０２から余分なデータを破棄させる。これにより、コントローラ１００は、ライト対象範囲のデータのサイズを、物理ブロック４００の整数倍（１以上）に変換させる。
【０１１７】
まず、コントローラ１００は、ライト対象範囲の先頭の境界B1が物理ブロック境界B2に一致するか否かを判定する（Ｓ５５）。先頭側の境界B1が物理ブロック境界B2に一致しない場合（S55:NO）、コントローラ１００は、先頭側隣接ブロック３０２Ｆのうち、物理ブロック境界B2からはみ出した部分のデータを、破棄する（Ｓ５６）。
【０１１８】
同様に、コントローラ１００は、ライト対象範囲の終端の境界B1が物理ブロック境界B2に一致するか否かを判定する（Ｓ５７）。終端側の境界B1が物理ブロック境界B2に一致しない場合（S57:NO）、コントローラ１００は、終端側隣接ブロック３０２Ｂのうち、物理ブロック境界B2からはみ出した部分のデータを、破棄する（Ｓ５８）。
【０１１９】
このようにして、コントローラ１００は、ライト対象範囲の両端を物理ブロック境界B2にそれぞれ一致させた後、このライト対象範囲のデータをディスクI/F１３０を介して、ディスクドライブ２１０に書き込ませる（Ｓ５９）。
【０１２０】
図１０は、図９の処理を模式的に示す説明図である。図１０（ａ）は、ライトデータブロック３０１の前後の隣接ブロック３０２Ｆ，３０２Ｂがそれぞれキャッシュメモリ１４０に読み出された場合を示す。
【０１２１】
コントローラ１００は、先頭側隣接ブロック３０２Ｆのうち、物理ブロック境界B2からはみ出した部分DA1のデータを破棄する。これにより、ライト対象範囲の先頭側、つまり、先頭側隣接ブロック３０２Ｆの先頭は、物理ブロック境界B2に一致する。
【０１２２】
コントローラ１００は、終端側隣接ブロック３０２Ｂのうち、物理ブロック境界B2からはみ出した部分DA2のデータを破棄する。これにより、ライト対象範囲の終端側、即ち、終端側隣接ブロック３０２Ｂの終端は、物理ブロック境界B2に一致する。
【０１２３】
破棄されるデータDA1，DA2は、例えば、「破棄データ」と呼ぶこともできる。なお、これら破棄データDA1，DA2を破棄する前に、Ｓ５４において、コントローラ１００は、保証コード３２０を検査している。従って、破棄される範囲に保証コード３２０が含まれている場合でも、既に検査は完了しているため、何ら不都合を生じない。
【０１２４】
図１０（ｂ）に示すように、隣接ブロック３０２Ｆ，３０２Ｂから余分なデータDA1，DA2をそれぞれ破棄（切除）することにより、ライト対象範囲の両端は、物理ブロック境界B2にそれぞれ一致する。この場合、ライト対象範囲のデータサイズは、物理ブロック４００のサイズの整数倍となっている。
【０１２５】
図１０（ｃ）に示すように、コントローラ１００は、サイズ調整後のライト対象範囲のデータを、ディスクドライブ２１０に書き込む。ライト対象範囲のデータは、上述のように、ライトデータブロック３０１と、破棄データDA1，DA2が除かれた隣接ブロック３０２Ｆ，３０２Ｂとから構成されており、物理ブロック４００のサイズの整数倍のサイズとなっている。従って、コントローラ１００は、ライト対象範囲のデータをディスクドライブ２１０に書き込むことができる。
【０１２６】
また、本実施例のコントローラ１００は、ライトデータブロック３０１の両端に隣接するブロック３０２Ｆ，３０２Ｂをそれぞれ一つずつ読み出して、ライト対象範囲のサイズを調整する。従って、例えば、拡張論理ブロック３００のサイズと物理ブロック４００のサイズとの最小公倍数のデータサイズをライト対象範囲とする場合に比較して、ライト対象範囲のサイズを小さくすることができる。この結果、各ブロック３００，４００の最小公倍数をライト対象範囲の単位として使用する場合に比べて、より効率的にライト処理を行うことができる。
【０１２７】
図１１は、終端側隣接ブロック３０２Ｂのみが読み出されてキャッシュメモリ１４０に記憶された場合を示す。図１１（ａ）に示すように、終端側隣接ブロック３０２Ｂの後側は、物理ブロック境界B2からDA2だけ、外側にはみ出している。この場合、ライト対象範囲の先頭は、ライトデータブロック３０１の先頭であり、物理ブロック境界B2に一致している。従って、先頭側隣接ブロック３０２Ｆは、ディスクドライブ２１０から読み出されない。
【０１２８】
図１１（ｂ）に示すように、コントローラ１００は、このはみ出した部分DA2のデータを破棄することにより、ライト対象範囲のサイズが物理ブロック４００の整数倍となるように調整する。そして、図１１（ｃ）に示すように、コントローラ１００は、サイズを調整したライト対象範囲のデータを、ディスクドライブ２１０に書き込む。
【０１２９】
図１１に示す例とは逆に、ライトデータブロック３０１の終端が物理ブロック境界B2に一致する場合、先頭側隣接ブロック３０２Ｆのみが読み出されてキャッシュメモリ１４０に記憶される。終端側隣接ブロック３０２Ｂは読み出されない。この場合、コントローラ１００は、先頭側隣接ブロック３０２Ｆのうち、物理ブロック境界B2からはみ出した部分DA1のデータを破棄して、ディスクドライブ２１０に書き込む。先頭側隣接ブロック３０２Ｆのみが読み出される場合の処理例は、図１１に示す処理例から容易に理解されるので、その図示を省略する。
【０１３０】
図１２は、ライトデータブロック３０１の最先頭及び最終端が、それぞれ物理ブロック境界B2に一致する場合を示す。図１２に示す例は、連続する複数のライトデータブロック３０１の合計サイズが、拡張論理ブロック３００のサイズと物理ブロック４００のサイズの最小公倍数に等しい場合を示す。
【０１３１】
図１２（ａ）に示すように、この場合は、先頭側隣接ブロック３０２Ｆ及び終端側隣接ブロック３０２Ｂのいずれも、ディスクドライブ２１０から読み出されない。従って、図１２（ｂ）に示すように、この場合、余分なデータDA1，DA2は存在しないため、これらの余分なデータDA1，DA2の破棄も行われない。そこで、図１２（ｃ）に示すように、コントローラ１００は、ライトデータブロック３０１をそのままディスクドライブ２１０に書き込む。
【０１３２】
なお、後述の実施例からも明らかなように、コントローラ１００は、ホスト２０から受信したライトデータに関する冗長データについても、ライトデータと同様の方法で、ディスクドライブ２１０に書き込む。つまり、ライトデータと冗長データを特に区別することなく、コントローラ１００は、冗長データのブロックサイズを調整してから、ディスクドライブ２１０に書き込むことができる。この場合の具体的な処理方法は、後述の実施例で説明する。
【０１３３】
本実施例は、上述のように、ストレージシステム１０内（コントローラ１００内）におけるデータ入出力の単位である拡張論理ブロック３００のサイズと、ディスクドライブ２１０内のデータ入出力単位である物理ブロック４００のサイズとが異なる場合でも、ライト対象範囲のデータのサイズを、物理ブロック４００の整数倍に調整して、ディスクドライブ２１０に書き込むことができる。
【０１３４】
本実施例では、ライトデータブロック３０１に隣接するブロック３０２Ｆ，３０２Ｂを読み出してライトデータブロック３０１にマージすることにより、ライト対象範囲のデータを生成する。従って、各拡張論理ブロック３００に含まれている保証コード３２０を用いてデータ内容等を検査することができ、検査を完了してからディスクドライブ２１０に書き込むことができる。これにより、サイズの異なるブロック間でデータを入出力する場合の信頼性を向上させることができる。
【０１３５】
本実施例では、ライトデータブロック３０１の両端がそれぞれ物理ブロック境界B2に一致しない場合でも、ライトデータブロック３０１の両端に隣接するブロック３０２Ｆ，３０２Ｂをそれぞれ一つだけ読み出して、ライト対象範囲のサイズを調整する。従って、拡張論理ブロック３００のサイズと物理ブロック４００のサイズとの最小公倍数のデータサイズをライト対象範囲とする場合に比較して、ライト対象範囲のサイズを小さくすることができ、より効率的にライト処理を行うことができる。
【実施例２】
【０１３６】
図１３〜図１７に基づいて、本発明の第２実施例を説明する。本実施例は、前記第１実施例の変形例に該当する。本実施例では、サイズの異なるブロック間で、冗長データをディスクドライブ２１０に書き込む方法を説明する。本実施例では、冗長データを用いるRAID構成の一例として、RAID５で構成されたLU２２０を例に挙げる。これに限らず、例えば、RAID３やRAID６等の他のRAID構成であってもよい。
【０１３７】
（１）RAID５によるライト処理
図１３は、RAID５で構成されるLU２２０にライトデータ及び冗長データ（パリティデータ）を書き込む場合の概要を模式的に示す説明図である。図１３に示す例では、データD1〜D3の排他的論理和を演算することにより、冗長データとしての「旧パリティ」が算出されている。以下の説明では、冗長データを「パリティ」と略す場合がある。
【０１３８】
もしも、ホスト２０から発行されたライトコマンドが、全データD1〜D3の更新を命じるものである場合、コントローラ１００は、新たに受信する新データ（新D1〜新D3）のみに基づいて、新たなパリティを生成することができる。
【０１３９】
これに対し、パリティの生成に関わる各データD1〜D3のうち、一部のデータについてのみホスト２０が更新を要求する場合は、旧データの読出し処理と、新パリティの生成処理と、新データ及び新パリティの書込み処理とが行われる。
【０１４０】
即ち、コントローラ１００は、ホスト２０から新データD1を受信すると（Ｓ６１）、新パリティを算出するために、新データD1によって更新される旧データD1をディスクドライブ２１０から読み出す（Ｓ６２）。同様に、コントローラ１００は、新パリティを算出するために、旧パリティを別のディスクドライブ２１０から読み出す（Ｓ６３）。
【０１４１】
そして、コントローラ１００は、新データD1と、旧データD1と、旧パリティとを用いて排他的論理和を演算することにより、新パリティを生成する（Ｓ６４）。新パリティの生成後に、コントローラ１００は、新データD1をディスクドライブ２１０に書込み（Ｓ６５）、また、新パリティを別のディスクドライブ２１０に書き込む（Ｓ６６）。
【０１４２】
（２）ブロックサイズ変換を伴うライト処理の一例
図１４は、上述したRAID５構成のLU２２０にライトデータを書き込む処理において、第１実施例で述べた保証コード３２０の付加及びブロックサイズの調整を行う場合のフローチャートである。なお、説明の便宜上、図１４では、一つのフローチャートにまとめて説明する。
【０１４３】
コントローラ１００は、ホスト２０から受信した新データに保証コードを付加して、キャッシュメモリ１４０に記憶させる（Ｓ７１）。保証コードの付加は、キャッシュコントローラ１１０内の保証コード付加／削除回路１１１によって、各論理ブロック毎にそれぞれ行われる。新データに保証コードが付加されることにより、ライトデータブロック３０１が生成されることになる。
【０１４４】
コントローラ１００は、新データに対応する旧データ及び保証コードをディスクドライブ２１０から読み出す（Ｓ７２）。即ち、コントローラ１００は、旧データ及び保証コードを記憶する複数の物理ブロック４００をディスクドライブ２１０から読出し、この読み出した物理ブロック４００のデータのうち、旧データ及び保証コードのみを取り出して、キャッシュメモリ１４０に記憶させる。
【０１４５】
同様に、コントローラ１００は、旧パリティ及び保証コードをディスクドライブ２１０から読み出してキャッシュメモリ１４０に記憶させる（Ｓ７３）。コントローラ１００は、冗長データ生成回路１１３を用いて、新データと旧データ及び旧パリティから、新パリティを算出させる（Ｓ７４）。算出された新パリティは、キャッシュメモリ１４０に記憶される（Ｓ７５）。この新パリティにも保証コードが設定されている。
【０１４６】
次に、コントローラ１００は、新データの書込み先であるディスクドライブ２１０から、新データに隣接するブロック３０２を読み出して、キャッシュメモリ１４０に記憶させる（Ｓ７６）。なお、第１実施例で述べた通り、常に、隣接ブロック３０２Ｆ，３０２Ｂの両方が読み出されるとは限らない。新データの端部が物理ブロック境界B2に一致する場合、その端部に隣接するブロック３０２は読み出されない。
【０１４７】
コントローラ１００は、新データを含むライトデータブロック３０１及び隣接ブロック３０２に基づいて、ライト対象範囲を決定する（Ｓ７７）。コントローラ１００は、ライト対象範囲に含まれる保証コードを用いて、ライト対象範囲のデータの記憶先や記憶内容を検査する（Ｓ７８）。
【０１４８】
検査の結果が正常である場合、コントローラ１００は、ライト対象範囲の両端が、物理ブロック境界B2にそれぞれ一致するように、物理ブロック境界B2からはみ出した部分のデータを破棄することにより、ライト対象範囲のサイズを調整する（Ｓ７９）。コントローラ１００は、物理ブロック４００の整数倍のサイズに調整されたライト対象範囲のデータを、ディスクドライブ２１０に書き込む（Ｓ８０）。
【０１４９】
続いて、コントローラ１００は、新パリティについても、新データと同様の処理（Ｓ８１〜Ｓ８５）を実行する。即ち、コントローラ１００は、新パリティの書込み先ディスクドライブ２１０から、新パリティに隣接するブロック３０２を読出す（Ｓ８１）。コントローラ１００は、新パリティ及びその保証コードと、隣接ブロック３０２のデータとを結合させることにより、ライト対象範囲を決定し（Ｓ８２）、ライト対象範囲に含まれる保証コードを用いて、ライト対象範囲のデータを検査する（Ｓ８３）。なお、新パリティ及びその保証コードを含むブロックの最先頭または最終端が、物理ブロック境界B2に一致する場合、その一致する端部に隣接するブロック３０２は読み出されない。
【０１５０】
検査結果が正常な場合、コントローラ１００は、ライト対象範囲に含まれる隣接ブロック３０２から余分なデータを破棄することにより、ライト対象範囲のサイズが物理ブロック４００のサイズの整数倍となるように調整する（Ｓ８４）。そして、コントローラ１００は、ライト対象範囲のデータをディスクドライブ２１０に書き込む（Ｓ８５）。
【０１５１】
図１５は、ライト処理を実行する際に、コントローラ１００がディスクドライブ２１０にアクセスする様子を示す模式図である。データを記憶するディスクドライブ２１０をデータディスクと、パリティを記憶するディスクをパリティディスクと呼ぶ。なお、RAID５等の場合、パリティは特定のディスクドライブにのみ記憶されるのではなく、各ディスクドライブに順番に分散されて記憶されていく。
【０１５２】
コントローラ１００によるデータディスクへのアクセスを先に説明する。RAID５構成のLU２２０にライトデータを書き込む場合、コントローラ１００は、データディスクから旧データ及び隣接ブロック３０２をそれぞれ別々のアクセスで読出し（Ｓ７２，Ｓ７６）、そして、データディスクに新データ（詳しくは、新データを含むライト対象範囲のデータ）を書き込む（Ｓ８０）。従って、データディスクに対しては、２回のリードアクセスと１回のライトアクセスとが行われる。
【０１５３】
コントローラ１００によるパリティディスクへのアクセスに着目すると、コントローラ１００は、旧パリティ及び隣接ブロック３０２をそれぞれ別々のアクセスで読出し（Ｓ７３，Ｓ８１）、新パリティをパリティディスクに書き込む（Ｓ８５）。正確には、コントローラ１００は、新パリティを含むライト対象範囲のデータを、パリティディスクに書き込む。従って、パリティディスクに対しても、２回のリードアクセス及び１回のライトアクセスが行われることになる。
【実施例３】
【０１５４】
図１６，図１７に基づいて、本発明の第３実施例を説明する。本実施例では、旧データ等をディスクドライブ２１０から読み出す際に、一緒に隣接ブロック３０２を読み出すことにより、コントローラ１００によるディスクドライブ２１０へのアクセス回数を低減している。
【０１５５】
前記第２実施例では、図１５に示すように、データディスク及びパリティディスクの両方についてそれぞれ３回ずつ、合計６回のアクセスを行う必要がある。従って、前記第２実施例では、ストレージシステム１０の応答性が低下する可能性がある。
【０１５６】
そこで、本実施例では、隣接ブロック３０２を読み出すタイミングを工夫することにより、リードアクセスの回数を低減する。図１６は、本実施例によるブロックサイズ変換を伴うライト処理を示すフローチャートである。
【０１５７】
このフローチャートは、図１４に示すフローチャートと共通のステップＳ７１，Ｓ７４，Ｓ７５，Ｓ７７〜Ｓ８０，Ｓ８２〜Ｓ８５を備えている。即ち、図１６のフローチャートでは、図１４中に示すＳ７６及びＳ８１を備えていない。
【０１５８】
図１６に示すフローチャートでは、コントローラ１００は、旧データ及びその保証コードをディスクドライブ２１０から読み出す際に、旧データ及びその保証コードに隣接するブロック３０２を一緒に読み出す（Ｓ７２Ａ）。
【０１５９】
旧データ及びその保証コードと、新データ及びその保証コードとは同一サイズであるから、隣接ブロック３０２は、新データ及びその保証コード（即ち、ライトデータブロック３０１）に隣接するブロックでもある。
【０１６０】
同様に、コントローラ１００は、旧パリティ及びその保証コードをディスクドライブ２１０から読み出す際に、旧パリティ及びその保証コードに隣接するブロック３０２を一緒に読み出す（Ｓ７３Ａ）。
【０１６１】
この結果、本実施例では、ライトデータ及びパリティに関する隣接ブロック３０２を別のリードアクセスで読み出す必要がない。従って、図１７の模式図に示すように、コントローラ１００によるディスクドライブ２１０へのアクセス回数を合計４回に低減することができる。
【０１６２】
従って、本実施例では、アクセス回数を増大させることなく、異なるサイズのブロック間で効率的にデータを入出力させることができ、また、保証コードを用いた信頼性を確保することができる。
【実施例４】
【０１６３】
図１８は、本発明の第４実施例に係るストレージシステム１０のブロック図である。本実施例では、プログラムメモリ１５０Ａ内に、保証コード付加／削除プログラム１５２と、保証コード検査プログラム１５３と、冗長データ生成プログラム１５４及びブロックサイズ変換プログラム１５５を記憶させている。
【０１６４】
保証コード付加／削除プログラム１５２は、第１実施例で述べた保証コード付加／削除回路１１１の機能を、MPU１６０が実現するためのプログラムである。以下同様に、保証コード検査プログラム１５３は保証コード検査回路１１２の機能を、冗長データ生成プログラム１５４は冗長データ生成回路１１３の機能を、ブロックサイズ変換プログラム１５５はブロックサイズ変換回路１１４の機能を、それぞれMPU１６０によって実現させるためのプログラムである。
このように、MPU１６０に保証コードやブロックサイズの変換等を行わせることもできる。
【０１６５】
なお、本発明は、上述した実施形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。
【０１６６】
例えば、冗長データを利用するRAID構成としてRAID５を例に挙げたが、これに限らず、RAID６等の他のRAID構成にも、本発明を適用することができる。
【０１６７】
また、保証コードの付加やプログラムサイズの変換等の各機能を、キャッシュコントローラ１１０内のハードウェア回路、または、コンピュータプログラムのいずれかで全て実現する場合を説明した。しかし、本発明はこれに限らず、一部の機能をハードウェア回路で実現し、残りの機能をコンピュータプログラムで実現してもよい。
【０１６８】
さらに、前記実施例では、物理ブロックサイズが固定化されたATAディスクを例に挙げて説明したが、本発明は、ATAディスクに限定されるものではなく、その他の種類のディスクドライブにも適用することができる。また、ディスクドライブの取り扱うデータの単位とコントローラの取り扱うデータの単位とが異なっていれば、本発明を適用することができる。
【図面の簡単な説明】
【０１６９】
【図１】本発明の全体概念を示す説明図である。
【図２】本発明の実施例によるストレージシステムの全体構成を示すブロック図である。
【図３】キャッシュメモリに記憶された拡張論理ブロックとディスクドライブ内の物理ブロックとの関係を模式的に示す説明図である。
【図４】リード処理を示すフローチャートである。
【図５】ライトデータブロックと該ライトデータに隣接するブロックとを結合させて、ライト対象範囲のデータを得る様子を示す説明図である。
【図６】ライト処理の全体を示すフローチャートである。
【図７】図６中のＳ２８の詳細を示すフローチャートである。
【図８】図７中のＳ３１の詳細を示すフローチャートである。
【図９】図７中のＳ３２の詳細を示すフローチャートである。
【図１０】ライト対象範囲の両端から余分なデータをそれぞれ破棄して、物理ブロックのサイズに調整する様子を示す説明図である。
【図１１】ライト対象範囲のいずれか一方の端部から余分なデータを破棄して、物理ブロックのサイズに調整する様子を示す説明図である。
【図１２】ライト対象範囲の両端が物理ブロック間の境界にそれぞれ一致する場合の書込み方法を示す説明図である。
【図１３】第２実施例によるライト処理の全体概要を示す説明図である。
【図１４】ブロックサイズ変換を伴うライト処理を示すフローチャートである。
【図１５】ディスクドライブへのアクセス状況を模式的に示す説明図である。
【図１６】第３実施例によるライト処理を示すフローチャートである。
【図１７】ディスクドライブへのアクセス状況を模式的に示す説明図である。
【図１８】第４実施例によるストレージシステムの構成を示すブロック図である。
【符号の説明】
【０１７０】
１…記憶制御装置、１Ａ…ライト要求受信部、１Ｂ…保証コード設定部、１Ｃ…ライト対象範囲生成部、１Ｄ…保証コード検査部、１Ｅ…ブロックサイズ調整部、１Ｆ…ライト対象範囲書込み部、２…記憶装置、３…拡張論理ブロック、３Ｂ…終端側隣接ブロック、３Ｆ…先頭側隣接ブロック、３Ｗ…ライトデータブロック、４…物理ブロック、５…保証コード、１０…ストレージシステム、２０…ホスト、１００…コントローラ（ストレージコントローラ）、１１０…キャッシュコントローラ、１１１…保証コード付加／削除回路、１１２…保証コード検査回路、１１３…冗長データ生成回路、１１４…ブロックサイズ変換回路、１２０…ホスト通信部、１３０…ディスク通信部、１４０…キャッシュメモリ、１５０，１５０Ａ…プログラムメモリ、１５１…ディスクアレイ制御プログラム、１５２…保証コード付加／削除プログラム、１５３…保証コード検査プログラム、１５４…冗長データ生成プログラム、１５５…ブロックサイズ変換プログラム、１６０…マイクロプロセッサ、１７０…バスブリッジ、２００…記憶部、２１０…ディスクドライブ、３００…拡張論理ブロック、３０１…ライトデータブロック、３０２…隣接ブロック、３０２Ｂ…終端側隣接ブロック、３０２Ｆ…先頭側隣接ブロック、３１０…論理ブロック、３２０…保証コード、４００…物理ブロック、B1…拡張論理ブロック境界、B2…物理ブロック境界、DA1，DA2…破棄データ
【図１】
2007264917.tif 000003
【図２】
2007264917.tif 000004
【図３】
2007264917.tif 000005
【図４】
2007264917.tif 000006
【図５】
2007264917.tif 000007
【図６】
2007264917.tif 000008
【図７】
2007264917.tif 000009
【図８】
2007264917.tif 000010
【図９】
2007264917.tif 000011
【図１０】
2007264917.tif 000012
【図１１】
2007264917.tif 000013
【図１２】
2007264917.tif 000014
【図１３】
2007264917.tif 000015
【図１４】
2007264917.tif 000016
【図１５】
2007264917.tif 000017
【図１６】
2007264917.tif 000018
【図１７】
2007264917.tif 000019
【図１８】
2007264917.tif 000020