(57)【要約】【課題】キャッシュを含むディスクアレイシステム全体としてＷＯＲＭを保証する。【解決手段】  ディスクアレイシステムは、計算機から受信したライトデータを格納する記憶装置と、キャッシュメモリと、記憶装置へのデータの入出力を制御する制御部とを有する。制御部は、計算機から受信したライトコマンドで指定されるライト対象の記憶領域について、既にライトデータがディスクアレイシステムに書き込まれているか否かを判断し、ライト対象の記憶領域についてライトデータが未だ書き込まれていない場合に、前記ライトコマンドに従ってライトデータを受信して、ライトデータをキャッシュメモリに格納する。【選択図】        図２
2005284816.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する複数の記憶装置と、
キャッシュメモリを有するアレイコントローラとを有し、
前記複数の記憶装置の少なくとも一部は、一度書き込まれたデータの書き換えが禁止されるＷＯＲＭ記憶装置であり、
前記アレイコントローラは、ライトコマンドで指定されるライト対象の記憶領域について、既にライトデータを受信している場合に、前記ライトコマンドに従うライトデータを受信することなくエラー応答を返信することを特徴とするディスクアレイシステム。
【請求項２】
計算機からデータのライトコマンドを受信するディスクアレイシステムであって、
計算機から受信したライトデータを格納する記憶装置と、
キャッシュメモリと、
前記記憶装置へのデータの入出力を制御する制御部とを有しており、
前記記憶装置は一度書き込まれたデータの書き換えが禁止されるＷＯＲＭ記憶装置であり、
前記制御部は、受信したライトコマンドで指定される前記ＷＯＲＭ記憶装置内のライト対象の記憶領域について、既にライトデータがディスクアレイシステムに書き込まれているか否かを判断し、
ライト対象の記憶領域についてライトデータが未だ書き込まれていない場合に、前記ライトコマンドに従ってライトデータを受信して、ライトデータを前記キャッシュメモリに格納することを特徴とするディスクアレイシステム。
【請求項３】
請求項２記載のディスクアレイシステムであって、
前記制御部は、ライト対象の記憶領域についてライトデータが既に書き込まれている場合に、前記ライトコマンドに従うライトデータを受信することなく、エラー応答を返信することを特徴とするディスクアレイシステム。
【請求項４】
請求項２記載のディスクアレイシステムであって、
前記制御部は、受信したライトコマンドで指定されるライト対象の記憶領域について、既にライトデータが前記キャッシュメモリに格納されている場合に、ライト対象の記憶領域について既にライトデータが書き込まれていると判断することを特徴とするディスクアレイシステム。
【請求項５】
請求項２記載のディスクアレイシステムであって、
前記制御部は、前記記憶装置内の複数の記憶領域各々について、該記憶領域に対するライトデータが既にディスクアレイシステムに書き込まれているか否かを示す書き込み管理情報を保持した、書き込み管理テーブルを有しており、前記書き込み管理テーブルを参照して、ライト対象の記憶領域について既にライトデータが書き込まれているか否かを判断することを特徴とするディスクアレイシステム。
【請求項６】
請求項５記載のディスクアレイシステムであって、
前記書き込み管理テーブルに格納されている書き込み管理情報は、前記記憶装置内の記憶領域に書き込まれるライトデータが、前記キャッシュメモリに格納されている場合に、当該記憶領域についてライトデータが既にディスクアレイシステムに書き込まれている旨を示すことを特徴とするディスクアレイシステム。
【請求項７】
請求項５記載のディスクアレイシステムであって、
前記制御部は、ライト対象の記憶領域についてライトデータが未だ書き込まれていない場合に、受信したライトコマンドに従ってライトデータを受信して前記キャッシュメモリに格納し、ライト対象の記憶領域について、前記書き込み管理テーブルに記録されている書き込み管理情報を更新することを特徴とするディスクアレイシステム。
【請求項８】
請求項７記載のディスクアレイシステムであって、
前記制御部は、記憶装置の予め定められた記憶領域に格納されている書き込み管理情報を読み出して、前記書き込み管理テーブルに登録することを特徴とするディスクアレイシステム。
【請求項９】
請求項２記載のディスクアレイシステムであって、
前記制御部は、前記記憶装置内の記憶領域の内、既にライトデータを受信している記憶領域と未だライトデータを受信していない記憶領域との境界を示すポインタを有しており、前記ポインタを参照して、ライト対象の記憶領域について既にライトデータが書き込まれているか否かを判断することを特徴とするディスクアレイシステム。
【請求項１０】
請求項９記載のディスクアレイシステムであって、
前記制御部は、ライト対象記憶領域についてライトデータが未だ書き込まれていない場合に、受信したライトコマンドに従ってライトデータを受信して前記キャッシュメモリに格納し、前記ポインタの指す位置を前記キャッシュメモリに格納したライトデータ分進めることを特徴とするディスクアレイシステム。
【請求項１１】
請求項２記載のディスクアレイシステムであって、
前記制御部は、前記キャッシュメモリに格納されているデータを記憶装置に格納する際に、同一パリティグループに含まれるデータを全てディスクアレイシステムが受領している場合には該パリティグループのパリティデータを生成してパリティデータを記憶装置に格納し、同一パリティグループに含まれるデータの一部を未だディスクアレイシステムが受領していない場合には、該パリティグループのパリティデータを記憶装置に格納するのを延期することを特徴とするディスクアレイシステム。
【請求項１２】
データが格納される複数の記憶装置と、
前記複数の記憶装置への入出力を制御するアレイコントローラとを有するディスクアレイシステムであって、
前記アレイコントローラは、プロセッサと、キャッシュメモリと、メモリとを有し、
前記メモリには、前記複数の記憶装置内に存在する複数の論理的な記憶領域各々について、該論理的な記憶領域に格納されたデータの上書きが許可されるか否かを示す情報が登録されているＬＵ管理テーブルと、前記複数の記憶装置内に存在する複数のセクタ各々について、該セクタについてのライトデータが既にディスクアレイシステム内に書き込まれているか否かを示す書き込み管理情報が登録されている書き込み管理テーブルとが格納されており、
前記アレイコントローラがライトコマンドを受信した場合に、
前記プロセッサはライト対象の論理的な記憶領域について該論理的な記憶領域に格納されたデータの上書きが許可されているか否かを前記ＬＵ管理テーブルを参照して判断し、
ライト対象の論理的な記憶領域についてデータの上書きが許可されていない場合に、前記プロセッサはライト対象のセクタについてライトデータが既にディスクアレイシステム内に格納されているか否かを、前記書き込み管理テーブルを参照して判断し、
ライト対象のセクタについてライトデータが未だディスクアレイシステム内に格納されていない場合に、前記ライトコマンドに従ってライトデータを受信し、前記キャッシュメモリにライトデータを格納し、前記書き込み管理テーブルに登録されている書き込み管理情報を更新することを特徴とするディスクアレイシステム。
【請求項１３】
請求項１２記載のディスクアレイシステムであって、
ライト対象のセクタについてライトデータが既にディスクアレイシステム内に格納されている場合に、前記プロセッサは、ライトデータを受信することなくエラーを返信することを特徴とするディスクアレイシステム。
【請求項１４】
請求項１３記載のディスクアレイシステムであって、
ライト対象のセクタに書き込まれるライトデータが既に前記キャッシュメモリに格納されている場合に、前記プロセッサはライトデータを受信することなくエラーを返信することを特徴とするディスクアレイシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一旦記録された情報の更新が禁止されるＷＯＲＭディスク等のＷＯＲＭメディアを用いて構成されるアレイ型記憶装置に関するものである。
【背景技術】
【０００２】
ディスクアレイシステムは、ＲＡＩＤ(Redundant Arrays of Inexpensive Disks)システムとも呼ばれ、複数のディスク装置をアレイ状に配置した構成をとり、ホスト装置からのリード要求（データの読み出し要求）およびライト要求（データの書き込み要求）をディスクの並列動作によって高速に処理するとともに、データに冗長データを付加することによってデータの信頼性を向上させた記憶装置システムである。
【０００３】
現在、ディスクアレイシステムのディスク装置としては一般に随時データの更新が可能なハードディスク等のディスク装置が用いられている。しかし随時書き換え可能なディスク装置では、例えばホストを操作するユーザの操作ミスで投入されたフォーマットコマンドなどに起因する不慮のユーザデータ破壊や、最初からユーザデータ破壊を目的に作られたコンピュータウイルスなどに起因する故意のユーザデータ破壊に対応できないという問題があった。
【０００４】
これを解決するために、データを一度しか書き込めない、すなわちデータの更新（若しくは上書き）ができないＷＯＲＭ(Write Once Read Many)機能を持ったハードディスク装置が考えられており、例えばディスク装置内に、セクタ毎にライトを許可するフラグを持つことによりＷＯＲＭディスク装置を実現する。以降ＷＯＲＭ機能を持った記録媒体をＷＯＲＭメディア、ＷＯＲＭ機能を持ったディスク装置をＷＯＲＭドライブ若しくはＷＯＲＭディスクと呼ぶ。
【０００５】
また、ＣＤ−Ｒといった一度しか書き込めないＷＯＲＭメディアを使ったディスクアレイシステムに関する技術が開発されている。
【０００６】
ディスクアレイシステムに関しては、非特許文献１のＰａｔｔｅｒｓｏｎ等の論文にディスクアレイ上のデータ配置に関する技術が開示されている。データの更新ができないＷＯＲＭ(Write Once Read Many)機能を持ったディスク装置については、下記特許文献１に開示されている。ＣＤ−Ｒといった一度しか書き込めないメディアを使ったディスクアレイシステムに関する技術については、下記特許文献２にて開示されており、少なくとも１台の冗長データを格納するディスク装置を含む、複数のディスク装置から構成されるディスクアレイシステムにおいて問題となる冗長データの扱い方に関する技術が開示されている。
【０００７】
【非特許文献１】エー．シー．エム．シグモッド  コンファレンスプロシーディング，1988年6月,109-116頁（D.Patterson,et al:A Case for Redundant Arrays of Inexpensive Disks(RAID),ACM SIGMOD conference proceeding,Chicago,IL,June1-3,1988,pp.109-116）
【０００８】
【特許文献１】特開平７−１３７０５号公報
【特許文献２】特開平９−２６５７１４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
ＷＯＲＭメディアを用いてディスクアレイシステムを構成したとき、ＷＯＲＭメディアに一度書かれたデータは、ＷＯＲＭメディアによってハード的に更新されないことが保証される。しかし、ディスクアレイシステムはキャッシュを有しており、キャッシュを用いてライトアフタ（即ち、ディスクアレイシステムがライト要求を受信した際、ライトデータを一旦キャッシュに格納し、この時点でライト要求に対する完了報告をホスト計算機に送信した後、キャッシュ内のライトデータをディスク装置に実際に書き込む処理）を行なう場合、ホスト計算機からのライトデータはいったんキャッシュに格納される。従って、キャッシュがＷＯＲＭメディアでないと、ホスト計算機からディスクアレイシステムに書き込まれたキャッシュ上のデータに対して更新が行なわれ（即ち、キャッシュ上でデータの上書きが行われ）、その結果として変更されたデータが、キャッシュからＷＯＲＭメディアに書き込まれる可能性が発生してしまう。このようなデータの更新を防止するために、キャッシュを含むディスクアレイシステム全体としてＷＯＲＭを保証する必要がある。
【課題を解決するための手段】
【００１０】
ディスクアレイシステムは、計算機から受信したライトデータを格納する記憶装置と、キャッシュメモリと、記憶装置へのデータの入出力を制御する制御部とを有する。制御部は、計算機から受信したライトコマンドで指定されるライト対象の記憶領域について、既にライトデータがディスクアレイシステムに書き込まれているか否かを判断し、ライト対象の記憶領域についてライトデータが未だ書き込まれていない場合に、前記ライトコマンドに従ってライトデータを受信して、ライトデータをキャッシュメモリに格納する。
【発明の効果】
【００１１】
本発明によれば、ディスクアレイコントローラ内のキャッシュ上のデータに対してもＷＯＲＭの保証が可能となる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明の実施の形態を説明する。
図１は本発明を適用するディスクアレイシステムの一例を示す図である。図１において、１０１はホスト計算機、１０２はディスクアレイシステム、１０３はディスクアレイシステム１０２を制御するアレイコントローラ部、１０５は複数のディスク装置から構成されるディスクアレイ部である。アレイコントローラ部１０３は、ディスクアレイシステムを制御するＣＰＵ１１０、ＣＰＵ１１０上で実行されるマイクロプログラムや制御用のデータが格納されるローカルメモリ１０９、ディスクアレイ部に格納されるデータを一時的に格納するキャッシュ１０４から構成される。尚、ローカルメモリ１０９とキャッシュ１０４は１つのメモリ部１１１に含まれる構成であっても良い。また、ディスクアレイ部１０５は、ＷＯＲＭドライブのみから構成されていても良いし、ＷＯＲＭドライブと通常のディスク装置の双方を有しており、格納されるデータによって使い分けられることとしても良い。
【００１３】
ディスクアレイ部１０５のディスク装置としてＷＯＲＭドライブ等のＷＯＲＭメディアを使用した場合、図１の１０７に示すようにＷＯＲＭメディアのＷＯＲＭ機能によってディスクアレイ部においてデータが改竄されないことが保証されている。一方、本発明は１０８に示すように、アレイコントローラ部のレベルでＷＯＲＭを保証する。すなわちアレイコントローラ１０４内のキャッシュ上のデータに対してもＷＯＲＭを保証する。これにより、１０６に示すようにディスクアレイシステム１０２の全体でデータが書き換えられないことを保証することが可能となる。
【実施例１】
【００１４】
本実施形態では、ディスクアレイ部１０５を構成するディスク装置内の、ＷＯＲＭ属性を持つ全てのセクタに対する書き込みを管理するために、ディスクアレイコントローラ１０３内にＷＯＲＭ属性セクタに対する書き込みを管理するテーブルを設け、ディスクアレイシステム１０２全体としてのＷＯＲＭを保証するものである。
【００１５】
本実施の形態を図２、図３を用いて説明する。
図２に示すように本実施形態においては、ディスクアレイシステム１０２のメモリ部１１１に、データが格納されるＬＵ（Logical Unit）毎の書き込み属性を表すＬＵ管理テーブル２０２と、ディスクアレイ部１０５が有する各ディスク装置内の各セクタに対応した書き込み属性を格納する書き込み管理テーブル２０３を設ける。尚、ＬＵとはディスクアレイ部１０５が有するディスク装置内に存在する論理的な記憶領域のことである。書き込み管理テーブル２０３およびＬＵ管理テーブル２０２は、メモリ部１１１内のローカルメモリ１０９またはキャッシュメモリ１０４内に格納される。
【００１６】
ＬＵ管理テーブル２０２は、ＬＵ毎にライトワンスビット２１０と書き込み禁止ビット２１１を保持し、各ＬＵの書き込み属性を表す。例えばライトワンスビット２１０が１ならば、該当ＬＵはライトワンス、すなわちデータの更新を許さないＷＯＲＭ属性を持つＬＵであることを表す。また書き込み禁止ビット２１１が１ならば、該当ＬＵは書き込み禁止であり、本ビットが立ってから以降は一切書き込みができないＬＵであることを表す。
【００１７】
書き込み管理テーブル２０３は、ディスクアレイ部１０５が有するディスク装置の最小書き込み単位であるセクタ毎に、該セクタに対する書き込みが既に行なわれたかどうかを表すテーブルである。書き込み管理テーブル２０３の各エントリは各セクタに対応しており、各セクタの書き込み管理情報を保持する。エントリの値が１ならば既にデータが書き込まれたセクタを表し、０ならばデータ未書き込みのセクタであることを表す。図２の例では、２０７に示す領域が書き込み済みであり、２０８で示す領域が未書き込みの領域を表している。尚ここで「セクタに対する書き込みが既に行われた状態」というのは、ディスク装置内のセクタに実際にライトデータが格納された状態だけでなく、セクタに対するライトデータをアレイコントローラ部１０３が受信し当該ライトデータがキャッシュ１０４に格納されている状態をも含むものとする。従って書き込み管理情報の値が「１」であれば、この書き込み管理情報に対応するセクタに実際にライトデータが書き込まれているか、もしくはこのセクタに対するライトデータがアレイコントローラ部１０３に受信されてキャッシュ１０４に格納されていることになる。また、以降書き込み管理テーブル２０３はディスクアレイ部１０５を構成するディスク装置内の全てのセクタについての書き込み管理情報を保持するものとして説明するが、ＷＯＲＭ属性を持つＬＵを構成するセクタについてのみ書き込み管理情報を保持する構成であっても良い。
【００１８】
図３は、図２のディスクアレイシステム１０２がホスト計算機１０１からライトコマンドを受領した時の動作を表すフローチャートである。
【００１９】
３０１でアレイコントローラ部１０３がライトコマンドを受領すると、まず３０２において、ＣＰＵ１１０がＬＵ管理テーブル２０２の書き込み禁止ビット２１１を検査する。検査の結果、ライトコマンドで指定されるライト対象のＬＵの書き込み禁止ビットが１ならば、該当ＬＵへの書き込みは許可されていないため、ＣＰＵ１１０はホスト計算機からライトデータを受信することなく、３０６でホストに対してエラーを返す。
【００２０】
３０２において書き込み対象ＬＵへの書き込みが許可されていれば、３０３においてＣＰＵ１１０はＬＵ管理テーブル２０２のライトワンスビット２１０を検査する。
【００２１】
ライト対象ＬＵについてのライトワンスビット２１０が０ならば、該当ＬＵは非ＷＯＲＭディスク等を使ったＷＯＲＭ属性を持たないＬＵである。従ってＣＰＵ１１０は従来どおり３０５においてキャッシュ１０４内に記憶領域を確保し、ホスト計算機１０１からライトデータを受信して、キャッシュ１０４内の確保した記憶領域にライトデータを格納する。またＣＰＵ１１０はキャッシュ１０４内に記憶領域を確保した後、書き込み管理テーブル２０３のライト対象セクタに対するエントリを「１」に更新することにより、ライト対象セクタに対する書き込み管理情報を更新する。そして、ＣＰＵ１１０は、３０７においてホストにコンプリートを返す。
【００２２】
一方３０３においてライト対象ＬＵについてのライトワンスビットが１ならば、該当ＬＵに書き込んだデータの更新は許されないため、ＣＰＵ１１０は３０４において、受領したライトコマンドによって指定されるライト対象のセクタに既にデータが書き込み済みかどうかを、書き込み管理テーブル２０３の該当するエントリを検査することによって調べる。尚、この検査においては、ディスク装置内のライト対象セクタに実際にデータが書き込まれていなくても、ライト対象セクタに対するライトデータが既にキャッシュ１０４内に書き込まれている場合には、データが既に書き込まれているものと判断される。
【００２３】
書き込み管理テーブル２０３の、ライト対象セクタに対応するエントリの値が０ならば、ライト対象のセクタは未書き込みのセクタであると判断され、ＣＰＵ１１０は３０５においてキャッシュ１０４内に記憶領域を確保して、ホスト計算機からライトデータを受信して、ライトデータをキャッシュ１０４内の確保した記憶領域に格納する。更に、ＣＰＵ１１０は書き込み管理テーブルのライト対象セクタに対するエントリの値を「１」に更新する。そして、ＣＰＵ１１０は３０７でホストにライト処理のコンプリートを返す。
【００２４】
３０４においてライト対象セクタに対応する書き込み管理テーブル２０３のエントリの値が１ならば、ライト対象のセクタには既にデータが書き込まれており、当該セクタへの上書きは禁止されているため、ディスクアレイコントローラ部１０３はライトデータを受信することなく、ＣＰＵ１１０は３０６でホストにエラーを返す。
【００２５】
尚、図３の３０５においてキャッシュ１０４に格納されたデータは、アレイコントローラ部１０３によって、任意のタイミングでディスクアレイ部１０５内のディスク装置に格納される。この処理については実施例４において詳細に説明する。
【００２６】
本実施の形態では、書き込み管理テーブル２０３の各エントリがディスク装置の最小アクセス単位であるセクタに対応している場合を示したが、セクタに限定されるものではなく、セクタより大きな記憶領域の単位に対して書き込み管理テーブル２０３のエントリを対応させても良い。
【実施例２】
【００２７】
次に、追記型ファイルシステムを用いて使用されることを前提とした場合の、ＷＯＲＭを保証するディスクアレイシステムについて説明する。追記型ファイルシステムとしては、ＵＤＦ（Universal Disk Format）を用いたファイルシステムが知られている。ＵＤＦにおいては、全てのファイルはＦＩＤ(File Identifire Descriptor)によって表される。ＦＩＤはＶＡＴ(Virtual Allocation Table)の行番号であり、ファイルの実態のアドレスは該当するＶＡＴのエントリに書かれ、ファイルは間接的にアクセスされる。ファイルが変更されると、更新されたファイルアドレスを新たにＶＡＴのエントリに書き込む。そしてＶＡＴのアドレスを指すＶＡＴ  ＩＣＢ(Information Control Block)をＷＯＲＭメディアのデータが書き込まれている最終セクタからリンキングエリア分だけ戻ったところ配置することによって、ファイルを追記でＷＯＲＭメディアに格納することができる。
【００２８】
図４に示す本実施形態におけるディスクアレイシステム１０２は、実施例１のディスクアレイシステム１０２とほぼ同様の構成を有するが、メモリ部１１１に、実施例１で説明したＬＵ管理テーブル２０２の他に、本実の施形態で新たに導入する追記ポインタ４０７が存在する点が実施例１とは異なる。
【００２９】
本実施の形態では、ディスクアレイシステムのＬＵは、ホスト計算機の追記ファイルシステムを通してアクセスされる。この追記ファイルシステムでは、データはシーケンシャルに（即ち連続するアドレス領域に対してアドレス順に）ディスクアレイシステム１０２に書き込まれる。
【００３０】
追記ポインタ４０７は、次にデータが書き込まれるべきアドレスを指しているポインタである。したがって追記ファイルシステムが正常に動作し、かつＬＵが不正にアクセスされない限り追記ポインタ４０７が指すアドレスに次のデータが書き込まれる。図４では４０９が既にデータが書き込まれた領域であり、４１０がデータ未書き込みの領域であり、追記ポインタ４０７は未書き込み領域４１０の先頭アドレスを指している。
【００３１】
図５は、本実施形態のディスクアレイシステムの動作の一例を表すフローチャートである。
【００３２】
５０１においてアレイコントローラ部１０３がライトコマンドを受領すると、ＣＰＵ１１０はまず５０２において、ライトコマンドで指定されるライト対象のＬＵについて、ＬＵ管理テーブル２０２の書き込み禁止ビット２１１を検査する。ライト対象ＬＵの書き込み禁止ビットが１ならば、該当ＬＵへの書き込みは許可されていないため、ＣＰＵ１１０は５０９においてホストに対してエラーを返す。
【００３３】
５０２においてライト対象ＬＵへの書き込みが許可されていれば、５０３においてＣＰＵ１１０はＬＵ管理テーブル２０２のライトワンスビット２１０を検査する。ライト対象ＬＵのライトワンスビット２１０が０ならば、該当ＬＵは非ＷＯＲＭディスク等を使ったＷＯＲＭ属性をもたないＬＵであり、ＣＰＵ１１０は従来どおり５０７においてキャッシュ１０４内に記憶領域を確保して、ホスト計算機からライトデータを受信してキャッシュ１０４に格納する。そして５０８においてＣＰＵ１１０はホストにコンプリートを返す。
【００３４】
一方５０３においてライト対象ＬＵのライトワンスビットが１ならば、該当ＬＵに書き込まれたデータの更新は許されないため、５０４においてＣＰＵ１１０は、ライトコマンドによって指定されるライト対象のセクタに既にデータが書き込まれているかどうかを検査する。この検査においても実施例１と同様、ディスク装置内のライト対象セクタにライトデータが書き込まれていなくても、ライト対象セクタに対するライトデータが既にキャッシュ１０４に書き込まれている場合には、データが既に書き込まれているものと判定される。この検査では、ライトコマンドによって指定されるライト対象領域の先頭セクタのＬＢＡ(Logical Block Address)と、追記ポインタ４０７を比較する。ライトコマンドに含まれるライト対象領域の先頭ＬＢＡが、追記ポインタ４０７が指すＬＢＡ以上であれば、該当ライトコマンドは未書き込みの領域へのライトコマンドであるため、５０５においてＣＰＵ１１０は、キャッシュ１０４内に記憶領域を確保して、ホストコンピュータからライトデータを受信してキャッシュ１０４に格納する。更にＣＰＵ１１０は５０６において追記ポインタ４０７の位置を、キャッシュ１０４に格納したライトデータの分だけ進める。そしてＣＰＵ１１０は５０８においてホストにコンプリートを返す。
【００３５】
一方５０４においてライトコマンドに含まれるライト対象領域の先頭セクタのＬＢＡが、追記ポインタが示すＬＢＡよりも小さければ、ライトコマンドは既にデータが書き込まれた領域への書き込み要求であるとＣＰＵ１１０は判定し、５０９においてＣＰＵはライトデータを受信することなく、データを書き込めないことを表すエラーをホストに返す。
【００３６】
なお、追記ポインタ４０７は書き込み済み領域４０９の末尾アドレスを指す構成とすることも可能であり、この場合には、図５のステップ５０４においてＣＰＵ１１０はライトコマンドに含まれるライト対象領域の先頭セクタのＬＢＡが、追記ポインタと等しい場合にも、既にデータが書き込まれた領域への書き込み要求と判定する。
【００３７】
尚本実施形態においても実施例１と同様、図５のステップ５０５においてキャッシュ１０４に格納されたライトデータは、任意のタイミングにおいてアレイコントローラ部１０３の制御によりディスクアレイ部１０５内のディスク装置に格納される。この処理については実施例４で詳細に説明する。
【実施例３】
【００３８】
本実施形態は、ディスクアレイ部１０５に含まれる各ディスク装置内に格納されている書き込み管理情報を用いて、ディスクアレイシステム全体でのＷＯＲＭを保証するものである。本実施形態においては、ディスクアレイ部１０５を構成するＷＯＲＭドライブにはドライブ内の予め決められた記憶領域に、当該ＷＯＲＭドライブの各セクタに対応する書き込み管理情報が格納されている。この書き込み管理情報は、対応するＷＯＲＭドライブ内のセクタに既にデータが書き込まれていれば「１」の値を、未だデータが書き込まれていなければ「０」の値をとる。ＷＯＲＭドライブにライトデータが格納されると、ＷＯＲＭドライブ自身の制御によって、ライトデータが格納されたセクタに対応する書き込み管理情報の値が「１」に更新される。
【００３９】
図６に本実施形態におけるディスクアレイシステム１０２の構成例を示す。本実施形態におけるディスクアレイシステム１０２は、実施例１におけるディスクアレイシステム１０２とほぼ同様の構成を有するが、メモリ部１１１に存在する書き込み管理テーブル６０６には、アレイコントローラ部１０３がディスクアレイ部１０５内のＷＯＲＭドライブから読み出してきた書き込み管理情報が格納されている点が異なる。アレイコントローラ部１０３は必要に応じて、ＷＯＲＭドライブから必要なセクタに関する書き込み管理情報を読み出してきて、書き込み管理テーブル６０６に保存する。従って、書き込み管理テーブル６０６には、ディスクアレイ部を構成する全ＷＯＲＭドライブの全セクタに関する書き込み管理情報が格納されているとは限らず、処理に必要となるセクタについてのみ書き込み管理情報が書き込み管理テーブル６０６に格納されている。尚、図６の例では、６０２に示す領域が書き込み済みであり、６０３で示す領域が未書き込みの領域を表している。
【００４０】
図７は、図６のディスクアレイシステム１０２がホスト計算機１０１からライトコマンドを受領した時の動作を表すフローチャートである。
【００４１】
７０１においてアレイコントローラ部１０３がライトコマンドを受領すると、まず７０２において、ＣＰＵ１１０はＬＵ管理テーブル２０２の書き込み禁止ビット２１１を検査する。ライトコマンドで指定されるライト対象のＬＵについての書き込み禁止ビットが１ならば、該当ＬＵへの書き込みは禁止されているため、７０８においてＣＰＵ１１０はライトデータを受信することなく、ホストに対してエラーを返す。
【００４２】
７０２においてライト対象ＬＵへの書き込みが許可されていれば、７０３においてＣＰＵ１１０はＬＵ管理テーブル２０２のライトワンスビット２１０を検査する。ライト対象のＬＵについてのライトワンスビット２１０が０ならば、該当ＬＵは非ＷＯＲＭディスク等を使ったＷＯＲＭ属性を持たないＬＵであるから、ＣＰＵ１１０は従来どおり７０９においてキャッシュ１０４内に記憶領域を確保して、ライトデータをホストから受信してキャッシュ１０４に格納し、７１０においてホストにコンプリートを返す。
【００４３】
一方７０３においてライトワンスビットが１ならば、ライト対象ＬＵに書き込んだデータの更新は許されないため、ＣＰＵ１１０はライトコマンドで指定されるライト対象セクタに既にデータが書き込まれているかどうかを７０４以降で検査する。
【００４４】
上述の様に、アレイコントローラ部１０３はディスクアレイ部１０５を構成するＷＯＲＭドライブに格納されている書き込み管理情報を読み出して、メモリ部１１１内の書き込み管理テーブル６０６に格納している。本実施形態においては、アレイコントローラ部１０３は、キャッシュ１０４上に存在するデータに対応する書き込み管理情報は、ＷＯＲＭドライブからメモリ部１１１に読み出して書き込み管理テーブル６０６に格納しているものとする。
【００４５】
そこで、ＣＰＵ１１０はまず７０４においてライトコマンドで指定されるライト対象のセクタに対応するデータがキャッシュ上に存在するかどうかを検査する（即ちライト対象のセクタについてキャッシュがヒットするかどうかを検査する）。尚、ライト対象のセクタに対応するデータがキャッシュ上に存在する場合というのは、ライト対象セクタに書き込まれるライトデータが既にキャッシュ上に存在する場合と、ライト対象セクタにはまだライトデータは書き込まれていないが、ライト対象セクタがディスクから読まれ、キャッシュ１０４上に格納されている場合とが含まれる。
【００４６】
該当データがキャッシュ上に存在する場合には、ライト対象セクタに対応する書き込み管理情報がメモリ部１１１の書き込み管理テーブル６０６に格納されていることとなる。そこで７０７においてＣＰＵ１１０はメモリ部１１１に読み出されているライト対象セクタに対応する書き込み管理情報を検査する。この検査においても実施例１と同様、ディスク装置内のライト対象セクタにライトデータが書き込まれていなくても、ライト対象セクタに対するライトデータが既にキャッシュ１０４に書き込まれている場合には、データが既に書き込まれているものと判定される。該当書き込み管理情報が０ならばライト対象セクタにはデータは書き込まれていないので、ＣＰＵ１１０は７０９においてキャッシュ１０４に記憶領域を確保して、ホストからライトデータを受信し、ライトデータをキャッシュ１０４に格納する。更にＣＰＵ１１０は、メモリ部１１１内の書き込み管理テーブル６０６のライト対象セクタに対応する書き込み管理情報の値を「１」に更新する。そして、７１０においてＣＰＵ１１０はホストにコンプリートを返す。尚、ステップ７０９において更新されるのはメモリ部１１１に格納されている書き込み管理情報であって、ディスクアレイ部１０５を構成する各ＷＯＲＭドライブ内に格納されている書き込み管理情報ではない。各ＷＯＲＭドライブ内に格納されている書き込み管理情報は、上述の様に、実際にライトデータがＷＯＲＭドライブに格納された際にＷＯＲＭドライブ自身の制御によって更新される。
【００４７】
７０７においてライト対象セクタに対応する書き込み管理情報が１ならば、ライト対象セクタには既にデータが書き込み済みなので、ＣＰＵ１１０はライトデータを受信することなく、書き込み禁止として７０８においてホストにエラーを返す。
【００４８】
７０４において、ライト対象のセクタに対応するデータがキャッシュ１０４上に存在しなければ、次に７０５においてＣＰＵ１１０はライト対象のセクタの書き込み管理情報がキャッシュ１０４に存在しないかどうか検査する。ここでライト対象のセクタについて書き込み管理情報がキャッシュに存在すれば、前述と同様に７０７以降の処理を行なう。
【００４９】
７０５においてライト対象のセクタについての書き込み管理情報がキャッシュ１０４に存在しなければ、７０６においてＣＰＵ１１０はライト対象のセクタ対応する書き込み管理情報を、ＷＯＲＭドライブ内に格納されている書き込み管理テーブルから読み出して、メモリ部１１１に格納する。その後この情報を使って７０７以降のステップを実行する。
【００５０】
尚７０６においては、書き込み管理情報だけをドライブから読み出すとしたが、パリティー作成のために必要になる可能性のあるドライブ上のデータも同時に読みだしてメモリ部１１１に格納しておいても良い。
【００５１】
さらに、上述の例ではライトコマンドを受けた後、その都度７０６を実施しているが、ライトコマンドを受信する前にライト対象の記憶領域が予測できるのであれば、ＣＰＵ１１０はライトコマンドを受信する前に予めドライブからライト対象のセクタについての書き込み管理情報を先読みしてメモリ部１１１に格納しておくことも可能である。
【実施例４】
【００５２】
本実施形態は、ライトデータがキャッシュ１０４内の記憶領域に格納された後、実際にディスク装置に格納される際の処理に関する実施形態である。したがって、本実施形態は実施例１、実施例２、または実施例３のいずれにも適用可能である。
【００５３】
図８において、１０２はディスクアレイシステム、１０４はアレイコントローラ１０３上のキャッシュであり、８１５〜８１８はディスクアレイ部１０５を構成する複数のディスク装置を表す。図ではディスク装置８１５〜８１８は、３個のデータに対して１個のパリティーを生成するＲＡＩＤ５を構成している。８０３は１ストライプを表しており、１ストライプ中のデータはアドレス順にデータＫ（８０５）、データＫ＋１（８０６）、データＫ＋２（８０７）に分割されて各々異なるディスク装置に分散配置される。Ｋ〜Ｋ＋２内ではデータはアドレス順に配置される。ディスク装置８１８に格納されているデータＰ０（８１９）は、データＫ、データＫ＋１、データＫ＋２のデータに対するパリティーデータである。パリティーグループ８０２は、１つのパリティーを作るために必要なデータと、このデータから作成されるパリティデータの集合を表している。例えばＫ内のデータ１と、Ｋ＋１内のデータ５と、Ｋ＋２内のデータ９に対してはＰ０内のパリティーＰ０１が対応するため、これらをデータ１、データ５、データ９、パリティＰ０１の集合をパリティーグループと呼ぶ。
【００５４】
ディスクアレイシステム１０２では、ホスト計算機１０１から受信したライトデータを一時的にキャッシュに格納しておき、ある時点でキャッシュに書き込まれたライトデータをディスク装置に書き出す。この契機としては、キャッシュに書き込まれたデータの量がある一定値を超えた場合等が用いられ、このキャッシュからドライブへのデータの書き出しをデステージと呼ぶ。
【００５５】
デステージが起動されると、キャッシュ上に格納されているデータに対して、パリティーが作成され、データとパリティーがディスク装置に書き込まれる。従って、同一パリティグループに属するデータの一部がキャッシュ１０４上に揃っていない状態でデステージが起動されると、この状態で一旦パリティが作成されてデータとパリティが書き込まれる。そして、残りのデータがキャッシュ１０４上に格納された後に再度このパリティグループに対してパリティが作成され、残りのデータとパリティとがドライブに書き込まれることになる。このためホスト１０１からのライトコマンドに従って書き込まれるライトデータについては、既にディスクアレイシステム１０２内に書き込まれたデータを上書きすることがなくても、デステージの発生タイミングによっては、パリティーデータを複数回デステージしてしまう可能性がある。
【００５６】
ディスクアレイシステムが書き換え可能な通常の非ＷＯＲＭドライブをディスク装置として用いている場合は、ディスク装置に対するデータの上書きは可能だが、ＷＯＲＭドライブを使う場合は、データの書き換えが禁止されているため、パリティーが複数回ディスク装置に書かれるとエラーとなる。
【００５７】
そこで本実施の形態では、同一パリティーグループの全てのデータを受けるまでは、パリティーデータ８１０だけを、キャッシュ１０４上に残す。パリティー以外のデータは従来どおり必要があればデステージする。例えば、図８においては、キャッシュ１０４内に、ストライプ８０３に該当する１〜１２のデータが格納されている。この場合パリティグループ８０２に属するデータ１、データ５、データ９は全てキャッシュ１０４に格納されているから、この状態でデステージが起動されれば、アレイコントローラ部１０３はデータ１、データ５、データ９からパリティデータＰ０１を生成して、データ１、データ５、データ９、とパリティデータＰ０１とを一緒にディスク装置に格納する。一方図８においてもしデータ９が未だキャッシュに格納されていない状態でデステージが起動された場合、アレイコントローラ１０３は、データ１、データ５はディスク装置に格納するが、データ１、データ５及びデータ９の旧データ（即ちデータ９がキャッシュ１０４に格納された際に更新される、更新前のデータ）とを用いてアレイコントローラ１０３が生成するパリティデータについてはディスク装置に格納することなくキャッシュ１０４に格納しておく。そして、データ９がキャッシュメモリに格納された時点で、キャッシュ１０４に格納されていたパリティデータと、データ９の旧データと、データ９とで排他的論理和を計算して新しいパリティデータを作成し、この新しいパリティデータをディスク装置に書き込む。
【００５８】
図９は、図８のディスクアレイシステムにおいてデステージ契機が発生した場合の動作の一例を示すフローチャートである。９０１でキャッシュ１０４に格納されているデータＡに対するデステージ契機が発生すると、９０２においてＣＰＵ１１０はデータＡが格納されるディスク装置がＷＯＲＭドライブかどうかを検査する。ディスクアレイシステム１０２はメモリ部１１１に、ディスクアレイ部１０５を構成する各ディスク装置がＷＯＲＭドライブであるか否かを示す情報を有しているので、ＣＰＵはこの情報を参照することにより、データＡが格納されるディスク装置がＷＯＲＭドライブであるかどうかを判断することができる。
【００５９】
データＡが格納されるディスク装置がＷＯＲＭドライブでなければ、従来通りＣＰＵ１１０は９０６においてデータＡが属するパリティーグループのパリティーを生成し、データおよびパリティーを共に、ディスク装置に書き出す。
【００６０】
９０２においてデータＡが書き込まれるディスク装置がＷＯＲＭドライブである場合、９０３においてＣＰＵ１１０はデータＡを含むパリティーグループの全てのデータが、ライト要求に従ってホスト計算機１０１から受信されているか否かを検査する。該当パリティーグループの全てのデータが受領済みであれば、９０６でＣＰＵ１１０は受領されているデータを用いてパリティーを作成し、データおよびパリティーをディスク装置に書き出す。
【００６１】
９０３において該当パリティーグループのデータのうち、ライト要求に従って受信していないものがあれば、９０４においてＣＰＵ１１０は受領済みのデータを用いてパリティーを作成して、データのみをディスク装置に書き込む。作成したパリティーは、９０３においてデータＡを含むパリティーグループの全てのデータを受信するまで、キャッシュに残しておく。該当パリティーグループの全てのデータが受領済みになれば、９０６で受信したデータとキャッシュに格納されているパリティを用いて新しいパリティーを作成し、データおよびパリティーをディスク装置に書き出す。
【図面の簡単な説明】
【００６２】
【図１】本発明の適用されるディスクアレイシステムの一例を示す図である。
【図２】第一実施例におけるディスクアレイシステムの一例を示す図である。
【図３】第一実施例におけるディスクアレイシステムの動作の一例を表すフローチャートである。
【図４】第二実施例におけるディスクアレイシステムの一例を示す図である。
【図５】第二実施例におけるディスクアレイシステムの動作の一例を表すフローチャートである。
【図６】第三実施例におけるディスクアレイシステムの一例を示す図である。
【図７】第三実施例におけるディスクアレイシステムの動作の一例を表すフローチャートである。
【図８】第四実施例におけるディスクアレイシステムの一例を示す図である。
【図９】第四実施例におけるディスクアレイシステムの動作の一例を表すフローチャートである。
【符号の説明】
【００６３】
１０１…ホスト計算機、１０２…ディスクアレイシステム、１０３…アレイコントローラ、１０５…ディスクアレイ部、２０２…ＬＵ管理テーブル、２０３…書き込み管理テーブル、４０７…追記ポインタ。
【図１】
2005284816.tif 000003
【図２】
2005284816.tif 000004
【図３】
2005284816.tif 000005
【図４】
2005284816.tif 000006
【図５】
2005284816.tif 000007
【図６】
2005284816.tif 000008
【図７】
2005284816.tif 000009
【図８】
2005284816.tif 000010
【図９】
2005284816.tif 000011