(57)【要約】【課題】  ＲＡＩＤを用いたディスクアレイシステムにおいて、特にＷＯＲＭ機能を利用可能にするディスクアレイシステムを提供する。【解決手段】  計算機１００からのデータの書き込み要求を受領すると、書込禁止情報が示す内容に基づいて計算機から書き込みデータの書き込み可否を判定する。書き込み可能である場合は、送信されたデータの保証コードを生成し、データが格納される領域が書込不可であることを示す書込禁止情報を生成し、生成された書込禁止情報を前記保証コードに格納して、計算機１００から受信したデータが格納される領域に、書込禁止情報を格納した保証コードを付与し、書込禁止情報を格納した保証コードを付与したデータを、キャッシュメモリ２３０、及び／又は、ディスク装置２７０に格納する。計算機１００からの書き込みデータが書き込み不可能である場合には、計算機１００に対してその旨を送信する。【選択図】      図１
2005338945.tif 000002
【特許請求の範囲】
【請求項１】
計算機と接続され、前記計算機がアクセスするデータを格納するディスクアレイシステムであって；
前記計算機と接続するための一又は複数のホスト入出力インタフェースと、
前記データを格納する複数のディスク装置と、
前記複数のディスク装置と接続するための一又は複数のディスク入出力インタフェースと、
前記計算機及び前記複数のディスク装置間で送受信されるデータを、前記ディスク装置のアクセス単位長に分割して一時的に格納するキャッシュメモリと、
前記キャッシュメモリへのデータの入出力を制御する制御部と、
前記制御部において実行されるプログラムを格納するメモリと、を有し；
前記制御部は、
前記計算機からデータ書き込み要求を受領すると、
前記キャッシュメモリから、前記書き込み要求によって特定される前記ディスク装置の領域の書き込み可否を示す書込禁止情報を参照し、
前記書込禁止情報が示す内容に基づいて、前記計算機からの書き込みデータの書き込み可否を判定し；
前記計算機からの書き込みデータが前記領域に書き込み可能である場合は、
前記計算機から送信されるデータを受信し、
前記計算機から送信されたデータの保証コードを生成し、
前記計算機から送信されたデータが格納される前記領域が書き込み不可能であることを示す書込禁止情報を生成し、
前記生成された書込禁止情報を前記保証コードに格納して、前記計算機から送信されたデータが格納される前記領域に、前記書込禁止情報を格納した保証コードを付与し、
前記書込禁止情報を格納した保証コードを付与したデータを、前記キャッシュメモリ、及び／又は、前記ディスク装置に格納し；
前記計算機からの書き込みデータが前記領域に書き込み不可能である場合には、前記計算機に対してその旨を送信することを特徴とするディスクアレイシステム。
【請求項２】
計算機と接続され、前記計算機がアクセスするデータを格納するディスクアレイシステムであって、
前記データを格納するディスク装置と、
前記計算機及び前記複数のディスク装置間で送受信されるデータを一時的に格納するキャッシュメモリと、
前記キャッシュメモリへのデータの入出力を制御する制御部と、を有し、
前記制御部は、
前記計算機からデータ書き込み要求を受領すると、
前記キャッシュメモリから、前記書き込み要求によって特定される前記ディスク装置のアクセス単位長に分割された領域の書き込み可否を示す書込禁止情報を参照し、
前記書込禁止情報が示す内容に基づいて、前記計算機からの書き込みデータの書き込み可否を判定することを特徴とするディスクアレイシステム。
【請求項３】
前記制御部は、
前記書込禁止情報が書き込み可能であることを示す場合は、前記キャッシュメモリに書き込むデータを前記計算機から受信し、
前記書込禁止情報が書き込み不可能であることを示す場合は、前記計算機にその旨を送信することを特徴とする請求項２に記載のディスクアレイシステム。
【請求項４】
前記制御部は、
前記計算機から送信された書き込みデータを、所定のデータ長に分割し、
前記書込禁止情報を、前記所定のデータ長に分割されて前記キャッシュメモリに格納されているデータ各々に付与された保証コードに格納することを特徴とする請求項２に記載のディスクアレイシステム。
【請求項５】
前記制御部は、前記書込禁止情報を、前記キャッシュメモリに格納されている、前記所定のデータ長に分割された領域に対応するビットマップに格納することを特徴とする請求項２に記載のディスクアレイシステム。
【請求項６】
前記制御部は、
前記ビットマップに記録された書込禁止情報が書き込み可能であることを示す場合は、前記キャッシュメモリに書き込むデータを前記計算機から受信し、
前記ビットマップに記録された書込禁止情報が書き込み不可能であることを示す場合は、前記計算機にその旨を送信することを特徴とする請求項５に記載のディスクアレイシステム。
【請求項７】
前記制御部は、
前記計算機から送信された書き込みデータを、所定のデータ長に分割し、
前記書込禁止情報を、前記所定のデータ長に分割されて前記キャッシュメモリに格納されているデータ各々に対応するビットマップに格納することを特徴とする請求項５に記載のディスクアレイシステム。
【請求項８】
前記制御部は、
前記書き込み要求によって特定される前記ディスク装置の領域に対応するビットマップが前記キャッシュメモリに格納されているか否かを判定し、
前記ビットマップが前記キャッシュメモリに格納されていない場合は、前記キャッシュメモリから、当該書き込み要求によって特定される前記ディスク装置の領域の書込禁止情報を参照し、
当該書込禁止情報が書き込み可能を示す場合は、前記計算機から書き込みデータを受信し、
前記書込要求によって特定される前記ディスク装置の領域に対応するビットマップに書込不可能であることを示す書込禁止情報を設定し、
前記計算機からの書き込みデータを、前記キャッシュメモリに格納し；
前記書込禁止情報が書き込み不可能である場合は、前記計算機にその旨を送信することを特徴とする請求項５に記載のディスクアレイシステム。
【請求項９】
前記制御部は、
前記ビットマップの使用済みの書込禁止情報及び未使用の書込禁止情報の割合と所定値とを比較して、
前記使用済みの書込禁止情報の割合が所定値以上である場合には、前記未使用の書込禁止情報の割合が多くなるように、前記使用済みの書込禁止情報が含まれる領域を再構築することを特徴とする請求項５に記載のディスクアレイシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＲＡＩＤを用いたディスクアレイシステムに関し、特に、ＷＯＲＭ機能が利用可能なディスクアレイシステムに関する。
【背景技術】
【０００２】
ストレージシステムに記録するデータ形式のうち、書き込みは１度しかできないが、読み出しは何度も可能であるＷＯＲＭ（Write Once Read Many）方式が知られている。例えば、ＣＤ−Ｒに保存されるデータはＷＯＲＭである。
【０００３】
このＷＯＲＭをハードディスク装置のような書き換え可能メディアに応用したものに、ディスク上の全セクタについて、それぞれ所定のフラグ情報をセクタＩＤ部内に記録するものがある。フラグ情報は、当該セクタに対するデータ書き込み属性の情報を含んでおり、書き込み許可、禁止、１回のみ許可の３種類が設定できる。このため、消失したくないデータを含むセクタにおけるデータ書き込み属性を書き込み禁止とすれば、ホストを操作するユーザの操作ミスに起因する不慮のユーザデータ破壊や、最初からユーザデータ破壊を目的に作られたコンピュータウイルスなどに起因する故意のユーザデータ破壊を未然に防止して、ユーザデータ保護に関するディスク装置の信頼性を向上させることができるディスク装置が知られている（例えば、特許文献１参照。）。
【０００４】
一方、ディスクアレイシステムにおいては、ディスク装置の障害時にもデータを復元できるように冗長データを作成し、ディスク装置に保存しているが、さらに、ディスクアレイ全体の信頼性を高める目的で、各論理データブロックごとに保証コードを付加する方式が知られている。保証コードを付加する方法としては、例えば、特許文献２や特許文献３に記載されているように、データをディスク装置へ書き込む際には、各論理データブロックごとに論理的なアドレス値ＬＡ（Logical Address）と排他的論理和ＬＲＣ（Longitudinal Redundancy Check）とからなる保証コードをデータに付加してディスク装置へ書き込み、データをディスク装置から読み出す際には、各論理データブロックに付加されたＬＡ及びＬＲＣ値をチェックすることによりディスク装置内でのアドレス化け、データ化けを確認する方法が知られている。
【特許文献１】特開平７−１３７０５号公報
【特許文献２】特開２００１−２０２２９５号公報
【特許文献３】特開２０００−３４７８１５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
前述の特許文献１の技術では、ディスク装置単体においてＷＯＲＭを実現することが可能である。しかし、ディスク装置を複数台搭載したＲＡＩＤシステムでは、あるデータが複数のディスク装置の異なる領域に記録される。例えば、ＲＡＩＤ０やＲＡＩＤ５では、ある一つのデータを、異なる形式で同時に複数のディスク装置に書き込む。そのため、このシステムでＷＯＲＭを実現するためには、異なるディスク装置の異なる領域を書き込み禁止にする等の、ハードウェアレベルでの極めて煩雑な処理が必要となり、多くのディスク装置を備えるディスクアレイシステムにはなじまない。
【０００６】
本発明は、ＲＡＩＤを利用したストレージシステムにおいても、ＷＯＲＭ機能が利用可能なストレージシステムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、計算機からデータ書き込み要求を受領すると、キャッシュメモリから、書き込み要求によって特定される前記ディスク装置の領域の書き込み可否を示す書込禁止情報を参照し、書込禁止情報が示す内容に基づいて、計算機から書き込みデータの書き込み可否を判定する。計算機からの書き込みデータが前記領域に書き込み可能である場合は、計算機から送信されるデータを受信し、計算機から送信されたデータの保証コードを生成し、計算機から送信されたデータが格納される前記領域が書き込み不可であること示す書込禁止情報を生成し、生成された書込禁止情報を前記保証コードに格納して、計算機からホスト入出力インタフェースが受信したデータが格納される前記領域に、書込禁止情報を格納した保証コードを付与し、書込禁止情報を格納した保証コードを付与したデータを、キャッシュメモリ、及び／又は、ディスク装置に格納する。計算機からの書き込みデータが前記領域に書き込み不可能である場合には、計算機に対してその旨を送信することを特徴とする。
【発明の効果】
【０００８】
本発明によると、計算機から受信した複数のデータ各々に保証コードを付与すると共に、当該複数のデータ各々に書き込み禁止ビットを付与するので、キャッシュメモリ、及び／又は、複数のディスク装置のいずれか、に格納されるデータの単位毎に書き込み禁止を設定することができる。そのため、複数のディスク装置で構成されるＲＡＩＤ構成のディスクアレイ装置であってもＷＯＲＭ機能を実現することが可能となる。
【発明を実施するための最良の形態】
【０００９】
以下に、本発明の実施の形態を図面に基づいて説明する。
【００１０】
図１は、本発明の第１の実施の形態のシステム構成を示すブロック図である。
【００１１】
ホスト計算機（以下、単に「ホスト」と呼ぶ）Ａ１００、ホストＢ１１０、ホストＣ１２０は、ディスクアレイシステム２００に対してリード／ライト要求を送信することで、データの入出力を行う装置である。本実施形態におけるディスクアレイシステムにおいては、一又は複数のホストとディスクアレイシステム２００とは、バススイッチ１３０を介して接続される。
【００１２】
ディスクアレイシステム２００は、ホスト入出力インタフェース２１０、２１１と、ディスクキャッシュ２３０と、ディスク入出力インタフェース２５０、２５１と、ディスク装置群２７０、２７１と、ディスクアレイ全体の制御を行う制御装置（プロセッサ、ＭＰＵ）２８０と、バスブリッジ２８５と、メモリ２９０と、キャッシュコントローラ３００とを有している。ディスク装置群２７０、２７１は、各々が複数のディスク装置を有している。本実施形態では、一例として、ディスク装置群２７０は３つのディスク装置２７７〜２７９を有し、これらがＲＡＩＤを構成する。なお、ホスト入出力インタフェース２１０、２１１は、少なくとも１つ以上存在すればよい。ディスク入出力インタフェース２５０、２５１は、少なくとも１つ以上存在すればよい。ディスク装置群２７０、２７１は、少なくとも１つ以上存在すればよい。
【００１３】
なお、ホスト入出力インタフェース２１０、キャッシュコントローラ３００、ＭＰＵ２８０、バスブリッジ２８５、メモリ２９０、ディスクキャッシュ２３０、及び、ディスク入出力インタフェース２５０によって、ＲＡＩＤコントローラ（ディスクコントローラ）が構成されている。
【００１４】
ホストＡ１００、ホストＢ１１０、ホストＣ１２０は、バススイッチ１３０及びホストバス（ホスト通信路）Ａ１４０、ホストバス（ホスト通信路）Ｂ１４１を介して、ディスクアレイシステム２００のホスト入出力インタフェース２１０、２１１に接続される。図１には３台のホストがディスクアレイシステム２００に接続されている例を示したが、少なくとも１つ以上のホストがディスクアレイシステム２００に接続されていればよい。
【００１５】
ホスト入出力インタフェース２１０、２１１は、ホストＡ１００、ホストＢ１１０、ホストＣ１２０からの入出力要求を受け付け、これらホストとキャッシュコントローラ３００との間のデータの転送を実行する。このホスト入出力インタフェース２１０、２１１は、ホスト側内部バス（ホスト側内部通信路）２２０を介してキャッシュコントローラ３００と接続される。
【００１６】
ディスク入出力インタフェース２５０、２５１は、ディスク装置群２７０、２７１とキャッシュコントローラ３００との間のデータを転送する。このディスク入出力インタフェース２５０、２５１は、各々ディスクバス（ディスク通信路）Ａ２６０、ディスクバスＢ２６１によってディスク装置群２７０、２７１と接続され、ディスク側内部バス（ディスク側内部通信路）２４０によってキャッシュコントローラ３００と接続される。ディスク入出力インタフェース２５１もディスク入出力インタフェース２５０と同様の構成又は機能を有する。
【００１７】
ディスクキャッシュ２３０は、キャッシュバス（キャッシュ通信路）２３１によってキャッシュコントローラ３００に接続される。
【００１８】
キャッシュコントローラ３００は、ホスト側内部バスバッファ３１０と、キャッシュ制御部３２０と、ディスク側内部バスバッファ３３０とを有する。ホスト側内部バスバッファ３１０は、ホスト入出力インタフェース２１０、２１１とディスクキャッシュ２３０との間で転送されるデータを一時的に記憶する。キャッシュ制御部３２０は、ディスクキャッシュ２３０へのデータの読み出し及び書き込みを制御する。ディスク側内部バスバッファ３３０は、ディスク入出力インタフェース２５０、２５１とディスクキャッシュ２３０との間で転送されるデータを一時的に記憶する。また、キャッシュコントローラ３００は、ＬＡ／ＬＲＣ付加／検査／削除部３４０を有する。このＬＡ／ＬＲＣ付加／検査／削除部３４０は、ホスト入出力インタフェース２１０、２１１からディスクキャッシュ２３０に転送されるデータに後述するＬＡ及びＬＲＣを付加する。また、ディスクキャッシュ２３０からホスト入出力インタフェース２１０、２１１に転送されるデータに付加されているＬＡ及びＬＲＣを検査し、これを削除する。
【００１９】
ＭＰＵ２８０は、バスブリッジ２８５を介してメモリ２９０及びキャッシュコントローラ３００に接続される。
【００２０】
メモリ２９０には、ディスクアレイ制御プログラム２９１と、内部データ転送制御プログラム２９２と、ＷＯＲＭ制御プログラム２９３とが記憶されており、これらはＭＰＵ２８０によって実行される。ＭＰＵ２８０は、ディスクアレイ制御プログラム２９１によってディスクアレイ全体の処理を制御する。また、内部データ転送制御プログラム２９２によってキャッシュコントローラ３００に対してＬＡ／ＬＲＣの設定を指示したり、ホスト入出力インタフェース２１０、２１１、ディスク入出力インタフェース２５０、２５１に対して、データ転送指示を発行する。ＷＯＲＭ制御プログラム２９３によって、後述するように、ディスク装置群２７０、２７１へのデータの書き込み時の書き込み禁止ビットを制御する。
【００２１】
次に、ＬＡ及びＬＲＣについて説明すると共に、ＬＡ／ＬＲＣ付加／検査／削除部３４０によって、転送データに対して行われるＬＡ又はＬＲＣの付加、検査、削除処理について説明する。
【００２２】
本実施形態におけるディスクアレイシステム２００は、ホストコンピュータから受信するデータを論理的なブロックに分割して管理・処理する。この分割最低単位を論理データブロックと呼ぶ。論理データブロックのサイズはディスク装置への最小読み出し／書き込み単位（すなわち、セクタサイズ）とする。
【００２３】
キャッシュコントローラ３００のＬＡ／ＬＲＣ付加／検査／削除部３４０は、各論理データブロックに、転送元アドレスの一部を含む４ｂｙｔｅのＬＡ（Logical Address）と呼ばれる保証コードを付加して、論理ブロックに分割されたデータの異常アドレスに対する読み出し／書き込みを検出できるようにする。このＬＡの値は、連続する論理データブロック間では連続する値をとる。ＭＰＵ２８０は、メモリ２９０内に格納されている内部データ転送制御プログラム２９２を実行することによって、ＬＡ／ＬＲＣ付加／検査／削除部３４０に付加すべき値を指定する。ＬＡ／ＬＲＣ付加／検査／削除部３４０は、キャッシュコントローラ３００のホスト側内部バッファ３１０で分割されたホストからの受信データ（論理データブロック）のうち、最初の論理データブロックにはＭＰＵ２８０によって指定された値をＬＡとして付加し、それに続く論理データブロックには、ＭＰＵ２８０から指定された値に１ずつ加算した値をＬＡとして付加する。
【００２４】
一方、ＬＲＣ（Longitudinal Redundancy Check）は、論理データブロックのサイズである５１２ｂｙｔｅに、ＬＡのサイズ４ｂｙｔｅを加えた５１６ｂｙｔｅ長のデータの１ｂｙｔｅ目から５１６ｂｙｔｅ目までを、４ｂｙｔｅ単位で排他的論理和をとった値である。ＬＡ／ＬＲＣ付加／検査／削除部３４０は、各論理データブロックと付加されているＬＡについてＬＲＣの値を計算し、論理データブロックにＬＡが付加されたものに、更にＬＲＣを付加する。ＬＡ／ＬＲＣ付加／検査／削除部３４０は、ＬＲＣの値を検査することによって、データ転送中およびディスク装置内部で生じたデータビットエラーを検出できる。
【００２５】
なお、ＬＡ／ＬＲＣの付加、検査、削除の具体的な方法については、特許文献２や特許文献３に記載されている。
【００２６】
図２に、ＬＡ／ＬＲＣ付加／検査／削除部３４０が、論理データブロックにＬＡ及びＬＲＣを付加する具体的な例を示す。
【００２７】
論理データブロック４０１、４１１、４２１は、ホストＡ１００からディスクアレイシステム２００に転送されたホストデータが、キャッシュコントローラ３００によって分割されたものである。この３つの論理データブロックは、もともとは、論理データブロック４０１、論理データブロック４１１、論理データブロック４２１の順に連続したホストデータであった。ＬＡ４０２は、論理データブロック４０１に対応するＬＡであり、４ｂｙｔｅの大きさを持つ。ＬＡ４０２は、論理データブロック４０１の最後尾に付加される。また更に、論理データブロック４０１にＬＡ４０２を加えた５１６ｂｙｔｅ長のデータを、４バイト単位で横方向（１ｂｙｔｅ目から５１６ｂｙｔｅ目への方向）に排他的論理和をとった値が、ＬＲＣ４０３としてＬＡ４０２の後ろに付加される。ＬＲＣ４０３の大きさは４ｂｙｔｅである。ＬＡ４１２とＬＲＣ４１３は、論理データブロック４１１に対するＬＡ及びＬＲＣであり、ＬＡ４２２とＬＲＣ４２３は、論理データブロック４２１に対するＬＡ及びＬＲＣである。これらは、ＬＡ４０２、ＬＲＣ４０３と同様に各論理データブロックに付加される。論理データブロック４０１、ＬＡ４０２、ＬＲＣ４０３をあわせた５２０ｂｙｔｅのデータが拡張データ４００である。同様に、データ４１０、４２０も拡張データである。
【００２８】
ＬＡ及びＬＲＣの付加処理は、ホスト入出力インタフェース２１０又は２１１からディスクキャッシュ２３０へのデータ転送時に、ＬＡ／ＬＲＣ付加／検査／削除部３４０によって実行される。また、ディスクキャッシュ２３０からホスト入出力インタフェース２１０又は２１１へのデータ転送時に、ＬＡ／ＬＲＣ付加／検査／削除部３４０が、ディスクキャッシュ２３０から読み出された拡張データ中のＬＡ及びＬＲＣを検査することによって拡張データに誤りがないことを調べる。誤りがなければＬＡ／ＬＲＣ付加／検査／削除部３４０はＬＡ及びＬＲＣの合計８ｂｙｔｅ分を拡張データから削除する。そしてキャッシュコントローラ３００は、論理データブロック５１２ｂｙｔｅのみをホスト入出力インタフェース２１０又は２１１へ転送する。従って、ホスト側内部バス２２０において転送されるデータは論理データブロックであり、キャッシュバス２３１及びディスク側内部バス２４０において転送されるデータは拡張データである。
【００２９】
ディスクキャッシュ２３０とディスク入出力インタフェース２５０又は２５１間で転送されるデータは拡張データである。ディスクキャッシュ２３０とディスク入出力インタフェース２５０、２５１間で拡張データが転送される場合には、ＬＡ／ＬＲＣ付加／検査／削除部３４０は、ＬＡ及びＬＲＣの検査のみを行い、誤りがなければ拡張データの転送が続行される。ＬＡ／ＬＲＣ付加／検査／削除部３４０がＬＡ及びＬＲＣを検査した時にＬＡ又はＬＲＣの誤りが検出された場合は、ＬＡ／ＬＲＣ付加／検査／削除部３４０により誤りの内容がＭＰＵ２８０へ報告され、ＭＰＵ２８０がエラー処理ルーチンにより誤りを適切に処理する。
【００３０】
ここで、本実施の形態では、ＬＡ４０２の４ｂｙｔｅのうち、未使用の１ビットを書き込み禁止ビット（ＷＯＲＭビット）４０４とする。この書き込み禁止ビット４０４は、書き込み禁止ビット４０４を含むＬＡ４０２が付加された論理データブロック４０１の書き込みを禁止するか否かを示す情報である。例えば、書き込み禁止ビット４０４が「１」に設定されている場合は、その論理データブロック４０１の書き込みが禁止される。書き込み禁止ビットが「０」に設定されている場合はその論理データブロックの書き込みは可能となる。
【００３１】
この書き込み禁止ビット４０４は、ＭＰＵ２８０の制御によってＷＯＲＭ制御プログラム２９３で設定される。ＭＰＵ２８０は、ホスト入出力インタフェース２１０又は２１１からディスクキャッシュ２３０へのデータ転送時に、メモリ２９０内に格納されている内部データ転送制御プログラム２９２を実行することによって、ＬＡ／ＬＲＣ付加／検査／削除部３４０におけるＬＡ／ＬＲＣ付加処理を実行する。この時に、ＷＯＲＭ制御プログラム２９３を実行することによって、ＬＡ／ＬＲＣ付加／検査／削除部３４０に対して、付加されたＬＡに書き込み禁止ビット４０４の設定を指示する。また、ＷＯＲＭ制御プログラム２９３は、ホストからセクタに対するライトコマンドを受領すると、そのセクタの論理データブロックの書き込み禁止ビット４０４の設定を参照して、応答を返す。書き込み禁止ビット４０４が「１」、すなわち「書き込み禁止」に設定されている場合は、そのセクタには書き込みをすることができないので、ライトコマンドの応答としてエラーをホストに返送する。書き込み禁止ビット４０４が「０」、すなわち「書き込み可能」に設定されている場合は、そのセクタに対して書き込み可能である旨の応答を返す。
【００３２】
なお、論理データブロック４０１にＬＡ４０２を付加し、当該ＬＡ４０２に書き込み禁止ビット４０４を設定した後に、ＬＲＣ４０３を演算して当該ＬＲＣ４０３をさらに付加する。
【００３３】
次に、書き込み禁止ビット４０４を用いたＷＯＲＭ機能について説明する。
【００３４】
図３は、本発明の第１の実施の形態の、ＭＰＵ２８０が行うＷＯＲＭデータをディスクキャッシュ２３０に格納する処理を示すフローチャートである。
【００３５】
ディスクアレイシステム２００のＭＰＵ２８０は、ホストＡ１００からのライトコマンドを受領すると（ステップ１０００）、そのライトコマンドによって要求されているセクタのデータが全てディスクキャッシュ２３０に格納されているか否かを判定する（ステップ１００１）。
【００３６】
要求に係るセクタのうち少なくとも一つがディスクキャッシュ２３０にないと判定した場合は、当該要求に係るセクタをディスク装置群２７０からディスクキャッシュ２３０に読み出す（ステップ１００２）。このとき、既にディスクキャッシュ２３０に格納されているセクタがある場合は、そのセクタはディスクキャッシュ２３０を用い、ディスクキャッシュ２３０上にないセクタのみを読み出す。
【００３７】
要求された全てのセクタがディスクキャッシュ２３０にあると判定した場合は、当該セクタのデータをディスクから読み出すことなくステップ１００３に移行する。なお、読み出されたセクタは５２０ｂｙｔｅの拡張データとしてディスクキャッシュ上に格納される。
【００３８】
次に、当該セクタのＬＡ４０２に含まれている書き込み禁止ビット４０４を参照する。そして、要求に係る全てのセクタの書き込み禁止ビット４０４が「０」、すなわち全てのセクタが「書き込み可能」であるか否かを判定する（ステップ１００３）。要求に係るセクタの少なくとも一つの書き込み禁止ビット４０４が「１」に設定されている、すなわち、少なくとも一つのセクタが書き込み禁止に設定されていると判定した場合は、ライトコマンドを発行したホストＡ１００に対してエラーを返す（ステップ１００９）。
【００３９】
要求のあったセクタの全ての書き込み禁止ビット４０４が「０」に設定されている、すなわち、要求のあったセクタの全てが書き込み可能であると判定した場合は、ステップ１０００において受領したライトコマンドに対する応答（ライトコマンド許可、データ送信要求等のレスポンス）を、ホストＡ１００に送信する（ステップ１００４）。
【００４０】
ホストＡ１００は、この応答を受信すると、要求セクタへ書き込まれるライトデータをディスクアレイシステム２００に送信する。
【００４１】
ＭＰＵ２８０は、ステップ１０００で受領したライトコマンドに対応するライトデータを受領すると（ステップ１００５）、当該ライトデータの論理データブロックに付加されるＬＡ４０２の書き込み禁止ビット４０４を全て「１」に設定する（ステップ１００６）。
【００４２】
具体的には、ホスト入力インタフェース２１０又は２１１、ホスト内部バス２２０を経由してキャッシュコントローラ３００に送られたライトデータは、ＬＡ／ＬＲＣ付加／検査／削除部３４０によってＬＡ及びＬＲＣが付加される。ＷＯＲＭ制御プログラム２９３は、ＬＡ／ＬＲＣ付加／検査／削除部３４０に対して、ＬＡ４０２を付加した論理データブロック４０１に、書き込み禁止ビット４０４を「１」又は「０」のいずれかに設定する指示を送る。本フローチャートにおいて、ステップ１００３でデータを書き込むセクタの書き込み禁止ビット４０４が全て「０」である場合は、そのセクタの書き込み禁止ビットは初期状態のままであることから、そのセクタに対するデータの１回目の書き込みである。そしてＷＯＲＭ機能を実現するため、すなわち２回目以降の書き込み処理を禁止するために、書き込み処理が行われたセクタの書き込み禁止ビット４０４を「１」に設定する。以降はホストから当該セクタに対するライトコマンドを受領しても、ライトコマンドは受け付けず。エラーを返送する。
【００４３】
ＬＡ４０２の書き込み禁止ビット４０４が「１」に設定され、ＬＡ４０２及びＬＲＣ４０３が付加された論理データブロック（拡張データ４００）は、ディスクキャッシュ２３０に格納される（ステップ１００７）。拡張データ４００がディスクキャッシュ２３０に格納されると、ＭＰＵ２８０はホストＡ１００にデータの書き込みが完了した旨のメッセージ（コンプリート）を返送する（ステップ１００８）。なお、ディスクキャッシュ２３０に格納された拡張データは、任意のタイミング又は所定の操作があったときにデステージされ、ディスク装置群２７０に格納される。
【００４４】
このように、ディスクアレイシステム２００において、論理データブロック４０１に付加するＬＡ４０２に、設定した書き込み禁止ビット４０４によって、論理データブロック単位で書き込みの可否を設定できる。
【００４５】
以上のように、本発明の第１の実施の形態では、ホスト側から送られたデータについて、当該データのセクタ単位で書き込み禁止ビット４０４を設定し、書き込みの可否を設定する。そのセクタに対する１回目の書き込み時に書き込み禁止ビット４０４を「１」に設定することで、ディスク装置群２７０のセクタ単位の書き込みの可否を設定することができる。よって、そのセクタに対する２回目以降の書き込みを受け付けないのでディスク装置群２７０がＲＡＩＤを構成している場合であってもＷＯＲＭ機能を実現することができる。
【００４６】
次に、本発明の第２の実施の形態について説明する。
【００４７】
第２の実施の形態では、書き込み禁止ビットを格納するビットマップを設け、データの入出力を高速化している。なお、第２の実施の形態のシステム構成は、第１の実施の形態の図１と共通であるため説明を省略する。
【００４８】
第２の実施の形態のディスクアレイシステム２００では、ディスクキャッシュ２３０に、セクタ毎の書き込み禁止ビットを格納するための領域（ビットマップ）を設定する。ビットマップのアドレスは、対応するセクタのアドレスと１対１に対応させる。ディスクアレイシステム２００は、ホストＡ１００からライトコマンドを受領した場合は、ディスクキャッシュ２３０又はディスク装置群２７０の全てのセクタについて書き込み禁止ビット４０４を参照するのではなく、ビットマップに格納されている書き込み禁止ビットを参照し、書き込みの可否を確認する。
【００４９】
図４は、ディスクキャッシュ２３０に格納される、ビットマップ５００を示す説明図である。
【００５０】
ビットマップ５００は、ディスクキャッシュ２３０の所定の領域に格納されている。このビットマップ５００は、拡張データ４００に含まれる書き込み禁止ビット４０４を、ビットマップ５００の先頭から順に書き込み禁止ビット５０１として格納したものである。図４では、書き込み禁止ビット５０１が格納されている部分を斜線で示す。拡張データ４００を格納するセクタのアドレスと、ビットマップ５００に格納される書き込み禁止ビット５０１のアドレスを１対１に対応させておくことで、ビットマップ５００を参照するだけで、対応するセクタの拡張データ４００の書き込み禁止ビット４０４を確認することができる。
【００５１】
例えば、ビットマップ５００に用いる領域の容量を１ＭＢとし、書き込み禁止ビット５０１を１ｂｉｔで表すとすると、
1MB=1,024KB=1,048,576Byte=8,388,608bit
であるから、
8,388,608bit×512Byte=4,294,967,296Byte=4GByte
となり、４ＧＢ分のセクタの書き込み禁止ビットを格納することが可能となる。
【００５２】
なお、複数の書き込み禁止ビット４０４をビットマップ５００の１つの書き込み禁止ビット５０１に対応させてもよい。例えば、１０セクタ分の書き込みビットのうち一つでも書き込み禁止に設定されていれば、その１０セクタに対応するビットマップは書き込み禁止に設定する。そして、データ書き込み時には、書き込み対象のセクタが含まれるビットマップのビットを参照して、ビットマップの当該ビットが書き込み禁止に設定されていなければ、そのビットに対応する全セクタが書き込み可能であると判定する。一方、ビットマップの当該ビットが書き込み禁止に設定されていれば、ディスクキャッシュ２３０からデータを読み出して、論理データブロック毎にＬＡ中の書き込み禁止ビットを判定する。このようにすることで、ビットマップのサイズを小さくすることができ、ディスクキャッシュ２３０の容量の圧迫を抑制することができる。
【００５３】
次に、ビットマップ５００を用いたＷＯＲＭ機能について説明する。
【００５４】
図５は、本発明の第２の実施の形態の、ディスクアレイシステム２００においてホストＡ１００からライトコマンドを受領した場合にＭＰＵ２８０が行う処理を示すフローチャートである。
【００５５】
ディスクアレイシステム２００のＭＰＵ２８０は、ホストＡ１００からのライトコマンドを受領すると（ステップ２０００）、そのライトコマンドの要求に係るディスク装置のセクタに対応するディスクキャッシュ２３０のセクタのビットマップ５００が、全てディスクキャッシュ２３０に格納されているか否かを判定する（ステップ２００１）。要求に係るセクタに対応するビットマップ５００のうち一部でも存在しないものがあると判定した場合は、ステップ２０１０に移行する。
【００５６】
全てのセクタに対応するビットマップ５００がディスクキャッシュ２３０に格納されていると判定した場合は、ビットマップ５００を参照して、要求に係る全てのセクタの書き込み禁止ビット５０１が「０」、すなわち「書き込み可能」であるか否かを判定する（ステップ２００２）。要求に係るセクタの少なくとも一つの書き込み禁止ビット５０１が「１」に設定されている、すなわち、少なくとも一つのセクタが書き込み禁止に設定されていると判定した場合は、ライトコマンドを発行したホストＡ１００に対してエラーを返す（ステップ２００９）。
【００５７】
要求に係るセクタの全ての書き込み禁止ビット５０１が「０」に設定されている、すなわち、要求に係るセクタの全てが書き込み可能であると判定した場合は、ステップ２０００において受領したライトコマンドに対する応答（レスポンス）を、ホストＡ１００に送信する（ステップ２００３）。
【００５８】
ホストＡ１００は、この応答を受信すると、要求に係るセクタへのライトデータをディスクアレイシステム２００に送信する。
【００５９】
ＭＰＵ２８０は、ステップ２０００で受領したライトコマンドに対応するライトデータを受領すると（ステップ２００４）、当該ライトデータの論理データブロックに付加されるＬＡ４０２の書き込み禁止ビット４０４を全て「１」に設定する（ステップ２００５）。このＬＡ４０２の書き込み禁止ビット４０４の設定は、前述した図３のステップ１００６と同様である。
【００６０】
ＬＡ４０２の書き込み禁止ビット４０４が「１」に設定され、ＬＡ４０２及びＬＲＣ４０３が付加された論理データブロック（拡張データ４００）は、ディスクキャッシュ２３０に格納される（ステップ２００６）。拡張データ４００がディスクキャッシュ２３０に格納されると、ＭＰＵ２８０は、新たに格納した拡張データ４００の書き込み禁止ビット４０４をビットマップ５００の対応する領域に格納し、ビットマップ５００を更新する（ステップ２００７）。
【００６１】
次に、ＭＰＵ２８０は、ホストＡ１００にデータの書き込みが完了した旨のメッセージ（コンプリート）を返送する（ステップ２００８）。なお、ディスクキャッシュ２３０に格納された拡張データは、任意のタイミングや所定の操作があったときにデステージされ、ディスク装置群２７０に格納される。
【００６２】
一方、ステップ２００１において、要求されたセクタに対応するビットマップ５００のうち一部でも存在しないものがあると判定した場合は、そのライトコマンドによって要求されたセクタが全てディスクキャッシュ２３０に格納されているか否かを判定する（ステップ２０１０）。
【００６３】
要求されたセクタのうち少なくとも一つがディスクキャッシュ２３０に格納されていないと判定した場合は、当該セクタをディスク装置群２７０からディスクキャッシュ２３０に読み出す（ステップ２０１１）。一方、要求されたセクタがディスクキャッシュ２３０にあると判定した場合はステップ２０１１の処理を行うことなくステップ２０１２に移行する。
【００６４】
次に、当該セクタのＬＡ４０２に含まれている書き込み禁止ビット４０４を参照する。そして、要求に係る全てのセクタの書き込み禁止ビット４０４が「０」、すなわち「書き込み可能」であるか否かを判定する（ステップ２０１２）。要求に係るセクタの少なくとも一つの書き込み禁止ビット４０４が「１」に設定されている、すなわち、少なくとも一つのセクタが書き込み禁止に設定されていると判定した場合は、ライトコマンドを発行したホストＡ１００に対してエラーを返す（ステップ２００９）。
【００６５】
なお、ステップ２０１１において、要求されたセクタのうち一部でもディスクキャッシュ２３０に格納されている部分があれば、その部分の書き込み禁止ビットはビットマップ５００を参照する。一方、ディスクキャッシュ２３０に格納されていない部分は、その部分だけをディスク装置群２７０からディスクキャッシュ２３０に読み出し、ディスクキャッシュ２３０に読み出された当該セクタに含まれている書き込み禁止ビット４０４を参照するようにしてもよい。このように、ディスクキャッシュに格納されていないセクタのみを読み出して、当該セクタの書き込み禁止ビット４０４を参照することで、ディスク装置群２７０へのアクセスが少なくなり、処理の効率を高めることができる。
【００６６】
次に、要求のあったセクタの全ての書き込み禁止ビット４０４が「０」に設定されている、すなわち、要求のあったセクタの全てが書き込み可能であると判定した場合は、ステップ２０００において受領したライトコマンドに対する応答（レスポンス）を、ホストＡ１００に送信する（ステップ２０１３）。
【００６７】
ホストＡ１００は、この応答を受信すると、要求セクタへ書き込まれるライトデータをディスクアレイシステム２００に送信する。
【００６８】
ＭＰＵ２８０は、ステップ２０００で受領したライトコマンドに対応するライトデータを受領すると（ステップ２０１４）、当該ライトデータの論理データブロックに付加されるＬＡ４０２の書き込み禁止ビット４０４を全て「１」に設定する（ステップ２０１５）。このＬＡ４０２の書き込み禁止ビット４０４の設定は、前述した図３のステップ１００６と同様である。
【００６９】
ＬＡ４０２の書き込み禁止ビット４０４が「１」に設定され、ＬＡ４０２及びＬＲＣ４０３が付加された論理データブロック（拡張データ４００）は、ディスクキャッシュ２３０に格納される（ステップ２０１６）。拡張データ４００がディスクキャッシュ２３０に格納されると、ＭＰＵ２８０はホストＡ１００にデータの書き込みが完了した旨のメッセージ（コンプリート）を返送する（ステップ２０１７）。
【００７０】
次に、既にディスクキャッシュ２３０に格納されているビットマップ５００を破棄する。そして、新たに書き込まれた拡張データ４００の書き込み禁止ビット４０４を、ビットマップ５００の対応する領域に格納する。このとき、新たに書き込まれた拡張データ４００の書き込み禁止ビット４０４が、ビットマップ５００の領域の先頭から１０％の領域となるように設定したビットマップ５００として作成する（ステップ２０１８）。
【００７１】
なお、ステップ２００６及び２０１６においてディスクキャッシュ２３０に格納された拡張データは、任意のタイミングや所定の操作があったときにデステージされ、ディスク装置群２７０に格納される。
【００７２】
このように、ディスクアレイシステム２００において、ディスクキャッシュ２３０に格納するビットマップ５００に設定した書き込み禁止ビット５０１によって、論理データブロック単位で書き込みの可否を判定できる。
【００７３】
以上説明した第２の実施の形態を追記型のファイルシステムに適用すると、ステップ２００１において、ライト要求セクタに対応するビットマップ５００がディスクキャッシュ２３０上に存在する確率が高くなり好適である。さらに、ビットマップ再構築処理（図６）を用いることによって、ステップ２００１において、対応するビットマップ５００がディスクキャッシュ２３０上に存在する確率を高めることができ、効率が良くなる。
【００７４】
追記型ファイルシステムでは、ライトコマンドを受領した場合に参照するビットマップ５００は、直前に追記されたセクタ付近である。そこで、本実施の形態では、ビットマップの再構築処理を行う。
【００７５】
図６は、ビットマップの再構築処理を示す説明図である。
【００７６】
追記されるファイルが増えると、ビットマップに格納された書き込み禁止ビット５０１（使用済みの書き込み禁止ビット５０１）も増える。そして、ビットマップ５００の全容量のうち、９０％を越えて使用済みの書き込み禁止ビット５０１が格納された場合（図６（ａ）参照）は、ビットマップ５００の最後尾から１０％だけを残し、それ以前の書き込み禁止ビット５０１をビットマップ５００から削除する。残した１０％の部分はビットマップ５００の先頭にシフトする（図６（ｂ）参照）。後半９０％の新規部分は、ディスク装置群２７０から対応する書き込み禁止ビット４０４を読み込んで作成する。
【００７７】
このビットマップの再構築処理は、ディスクアレイシステム２００において、任意のタイミングでバックグラウンド処理として行うとよい。バックグラウンド処理においてビットマップ５００の書き込み禁止ビット５０１が９０％を越えて格納されたことを検知した場合に、ビットマップの再構築が行われる。
【００７８】
このように、本発明の第２の実施の形態のディスクアレイシステムでは、第１の実施の形態の効果に加え、各論理データブロック４０１の書き込み禁止ビット４０４を、ビットマップ形式にしてディスクキャッシュ２３０に格納することによって、セクタ毎にディスク装置群２７０内の書き込み禁止ビットを確認する処理が省け、ＷＯＲＭファイルのアクセスを高速化することができる。特に追記型のファイルシステムでは、ビットマップの再構築処理を行うことで、ＷＯＲＭファイルのアクセスをさらに高速化することができる。
【００７９】
本発明におけるＷＯＲＭ機能の使用／不使用や、各ボリュームに対するＷＯＲＭ設定、ビットマップ５００の容量やビットマップ再構築処理タイミング等のＷＯＲＭ機能に関する設定の変更は、ディスクアレイシステム２００内部で固定の処理としてもよいが、ホスト上又は管理端末上で実行されるディスクアレイ管理プログラムからの指示によって、設定を変更可能としてもよい。
【図面の簡単な説明】
【００８０】
【図１】本発明の第１の実施の形態のシステム構成のブロック図である。
【図２】本発明の第１の実施の形態の論理データブロックに付加されるＬＡ及びＬＲＣの説明図である。
【図３】本発明の第１の実施の形態のＷＯＲＭデータをディスクキャッシュに格納する処理を示すフローチャートである。
【図４】本発明の第２の実施の形態のビットマップの説明図である。
【図５】本発明の第２の実施の形態のＷＯＲＭデータをディスクキャッシュに格納する処理のフローチャートである。
【図６】本発明の第２の実施の形態のビットマップ再構築の説明図である。
【符号の説明】
【００８１】
１００      ホストＡ
１１０      ホストＢ
１２０      ホストＣ
２００      ディスクアレイシステム
２１０、２１１      ホスト入出力インタフェース
２２０      ホスト側内部バス
２３０      ディスクキャッシュ
２３１      キャッシュバス
２５０、２５１      ディスク入出力インタフェース
２７０、２７１      ディスク装置群
２７７〜２７９      ディスク装置
２８０      ＭＰＵ
２８５      バスブリッジ
２９０      メモリ
２９１      ディスクアレイ制御プログラム
２９２      内部データ転送制御プログラム
２９３      ＷＯＲＭ制御プログラム
３００      キャッシュコントローラ
３１０      ホスト側内部バスバッファ
３２０      キャッシュ制御部
３３０      ディスク側内部バスバッファ
３４０      ＬＡ／ＬＲＣ付加／検査／削除部
４００      拡張データ
４０１、４１１、４２１      論理データブロック
４０４      書き込み禁止ビット
５００      ビットマップ
５０１      書き込み禁止ビット
【図１】
2005338945.tif 000003
【図２】
2005338945.tif 000004
【図３】
2005338945.tif 000005
【図４】
2005338945.tif 000006
【図５】
2005338945.tif 000007
【図６】
2005338945.tif 000008