(57)【要約】【課題】  ディスクアレイ装置において、書き損じが発生したことにより、RAID等の冗長化処理が行われていたにもかかわらずデータの修復を行えないという問題を解決する。【解決手段】  本発明のディスクアレイシステムは、上位装置からの書き込みデータに対して一意性を保証する符号を生成し、該データと該符号とを磁気ディスクに連続して書き込む書き込み手段と、該符号と上位装置から指定されたアドレスとを対応づけて格納する記憶手段と、上位装置からのリード時に上位装置の指定するアドレスから決まる磁気ディスクのアドレスで記憶手段上の磁気ディスク毎のテーブルを参照し、該アドレスに一致する符号があれば、磁気ディスクから読み出したデータから書き込みと同じ方法で符号の生成を行い、記憶手段上の符号と比較を行うことで障害を検出する検出手段と、を備える。【選択図】      図１
2010049394.tif 000002
【特許請求の範囲】
【請求項１】
上位装置からの書き込みデータに対して一意性を保証する符号を生成し、該データと該符号とを磁気ディスクに連続して書き込む書き込み手段と、
該符号と上位装置から指定されたアドレスとを対応づけて格納する記憶手段と、
上位装置からのリード時に上位装置の指定するアドレスから決まる磁気ディスクのアドレスで前記記憶手段上の磁気ディスク毎のテーブルを参照し、該アドレスに一致する符号があれば、磁気ディスクから読み出したデータから書き込みと同じ方法で符号の生成を行い、前記記憶手段上の符号と比較を行うことで障害を検出する検出手段と、
を備えたことを特徴とするディスクアレイシステム。
【請求項２】
前記磁気ディスクが冗長化されていることを特徴とする請求項１記載のディスクアレイシステム。
【請求項３】
前記検出手段が、前記記憶手段上の符号と前記ディスクから生成した符号とが一致ない場合、書き込み時にエラーが発生した旨を前記上位装置に報告することを特徴とする請求項１または２に記載のディスクアレイシステム。 
【請求項４】
前記検出手段が、前記記憶手段上の符号と前記ディスクから生成した符号とが一致ない場合、前記書き込み手段は、書き込み障害の検出されたデータを、他の磁気ディスクに存在する書き込み障害の検出されていない正常な冗長化データで上書きすることを特徴とする請求項２記載のディスクアレイシステム。
【請求項５】
上位装置からの書き込みデータに対して一意性を保証する符号を生成し、該データと該符号とを磁気ディスクに連続して書き込むステップと、
該符号と上位装置から指定されたアドレスとを対応づけて記憶手段に格納するステップと、
上位装置からのリード時に上位装置の指定するアドレスから決まる磁気ディスクのアドレスで前記記憶手段上の磁気ディスク毎のテーブルを参照し、該アドレスに一致する符号があれば、磁気ディスクから読み出したデータから書き込みと同じ方法で符号の生成を行い、前記記憶手段上の符号と比較を行うことで障害を検出するステップと、
を有することを特徴とする書き込み障害の検出方法。
【請求項６】
前記記憶手段上の符号と前記ディスクから生成した符号が一致しない場合、書き込み時にエラーが発生した旨を前記上位装置に報告するステップを有することを特徴とする請求項５記載の書き込み障害の検出方法。 
【請求項７】
前記記憶手段上の符号と前記ディスクから生成した符号が一致しない場合、書き込み障害の検出されたデータを、他の磁気ディスクに存在する書き込み障害の検出されていない正常な冗長化データで上書きするステップを有することを特徴とする請求項５記載の書き込み障害の検出方法。
【請求項８】
コンピュータに、
データと該符号とを磁気ディスクに連続して書き込むステップと、
該符号と上位装置から指定されたアドレスとを対応づけて記憶手段に格納するステップと、
上位装置からのリード時に上位装置の指定するアドレスから決まる磁気ディスクのアドレスで前記記憶手段上の磁気ディスク毎のテーブルを参照し、該アドレスに一致する符号があれば、磁気ディスクから読み出したデータから書き込みと同じ方法で符号の生成を行い、前記記憶手段上の符号と比較を行うことで障害を検出するステップと、を実行させることを特徴とする書き込み障害検出プログラム。
【請求項９】
前記コンピュータに、前記記憶手段上の符号と前記ディスクから生成した符号が一致しない場合、書き込み時にエラーが発生した旨を前記上位装置に報告するステップを実行させることを特徴とする請求項８記載の書き込み障害検出プログラム。 
【請求項１０】
前記コンピュータに、前記記憶手段上の符号と前記ディスクから生成した符号が一致しない場合、書き込み障害の検出されたデータを、他の磁気ディスクに存在する書き込み障害の検出されていない正常な冗長化データで上書きするステップを実行させることを特徴とする請求項８記載の書き込み障害検出プログラム。 
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディスクアレイシステムに関し、特に複数の磁気ディスク（ＨＤＤ）にＲＡＩＤ（Redundant Arrays of Inexpensive Disks）技術を用いた障害回復技術を持つディスクアレイシステムにおいて、特に磁気ディスクへの書き込み時に発生する、セクタ単位の書き損じによる、リード時のデータ化けの検出及びデータの修復を行うディスクアレイシステム、およびその制御方法に関する。
【背景技術】
【０００２】
通常、ディスクアレイシステムは、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks ）と呼ばれる構成をとっている。ＲＡＩＤの構成には幾つかあるが、その中でＲＡＩＤ１〜ＲＡＩＤ５のディスクアレイ装置は、データの冗長性を持たせることで磁気ディスクに障害が発生したときのデータの信頼性を向上させるための手段が講じられている。
【０００３】
その中で特にＲＡＩＤ１は２台、或いは複数台数の磁気ディスクにデータのコピーをとる方式である。ＲＡＩＤ４は、ディスクアレイ装置がＮ台の磁気ディスクで構成されているとき、Ｎ−１台の磁気ディスク装置を、ユーザーデータを格納する磁気ディスクに割り当て、残りの１台を個々の磁気ディスクのアドレスが同じ物の排他的論理和（Exclusive OR）をとった結果をデータとして書き込む。これにより、１台の磁気ディスクに障害が発生した場合でも、残りの個々の磁気ディスクのデータの排他的論理和をとることで、障害の発生した磁気ディスクのデータ復元が可能である。ＲＡＩＤ４は、パリティデータを書き込む磁気ディスクが前述のように固定であるが、一方、ＲＡＩＤ５は、パリティデータを一定量毎に異なる磁気ディスクに格納する為、パリティデータに対するアクセスの負荷を分散する構造となっている。このような構成のディスクアレイ装置は特許文献１や特許文献２に開示されている。
【０００４】
ディスクアレイシステムにおいて、磁気ディスクに発生する異常、即ちデータの破損や故障などによるRead若しくはWrite出来ない状態は、通常であれば磁気ディスクへのリードやライトコマンドの結果に戻されるエラー情報により判定できる。例えば、磁気ディスク上の媒体の欠陥により、媒体上のデータが正常に読み込み出来ない時は、磁気ディスク自身の持つＥＣＣ（エラー訂正機能）により、訂正可能であれば訂正を行いエラー情報無しでコマンドを終了するが、ＥＣＣにより訂正しきれない場合はＥＣＣエラーとしてエラー情報を返すことで、該セクタのデータが読み込むことが出来ないことを報告する。
【０００５】
ディスクアレイシステムのコントローラーはＲＡＩＤの機能を用いて障害の発生したデータの修復を行う。
【０００６】
例えば、ＲＡＩＤ５であれば、該エラーの発生したセクタを持つ磁気ディスク以外の磁気ディスクのデータとパリティから、該エラーを発生したセクタのデータの修復を行いホストにデータを返す。
【０００７】
しかし、稀ではあるが磁気ディスクへの書き込みがセクタ単位で行われず、該セクタのリードは正常終了するがデータは書き込む前の古いデータがリードできてしまう現象（以下、書き損じ）が発生することがある。
【０００８】
これは、磁気ディスク装置の制御異常（バグ）や磁気ディスクの磁気ヘッドの信号処理ＬＳＩ、磁気ヘッドそのものの異常によりもたらされる。
【０００９】
特許文献３ではこの書き損じに対する解決手段を提供している。しかし、特許文献３では磁気ディスクのヘッドの異常等による恒久的な書き損じに対しては有効であるが、一時的に発生するような書き損じに関しては検出が出来ないという課題を持つ。つまり、特許文献３で示される書き損じの検出はライトが一定回数発生した後、あるいは一定時間毎に診断領域に対してライトを行い、その後に該診断領域にリードを行いライト時のデータとリード時のデータの照合（ベリファイ）を行い一致しなければ、前回の診断からの全てのライトは書き損じを発生したとみなす。この時、一連のライトの履歴を保持し、書き損じ検出時にはライトの履歴からＲＡＩＤ５のディスクアレイ装置の持つＲＡＩＤ機能を用いてデータを回復するか、あるいはホストにエラーの発生を通知することで、バックアップデータ或いはジャーナルデータからホスト側でデータの回復を行う。
【００１０】
この方式は、診断の行われる間に間欠的に発生する書き損じについては、次の診断で書き損じが検出されない場合において見過ごされるという問題を有する。
【００１１】
また、特許文献４では、一度書き込んだデータに対しては、メモリ（キャッシュ）上にデータの保持を行い、後ほど、媒体からライトを行った箇所のデータのリードを行い、メモリ上のデータとベリファイを行うことで、書き損じが発生していないかチェックをおこなう。
【００１２】
この方式は書き込んだデータ全てに対してベリファイを行うことで、間欠的に発生する書き損じに関して検出可能であるが、書き込んだデータをそのままメモリ上に保持する為、メモリ容量を圧迫するという課題を持つ。
【００１３】
【特許文献１】特開平１１−２８８３８７号
【特許文献２】特開平６−２３６３２２号
【特許文献３】特開２００３―２６３７０３号
【特許文献４】特願平１１−３２７６４２号
【発明の開示】
【発明が解決しようとする課題】
【００１４】
本発明の課題は、磁気ディスクのバグ等により間欠的に発生する書き損じ、即ちライト時に書き込んだデータとは異なる古いデータが磁気ディスクからエラー情報無しに読み出される現象が発生した時に、該エラーの発生したセクタのデータをディスクアレイシステムの持つＲＡＩＤ機能により再構成を行いホストにデータを返し、再構成を行ったセクタのデータを用いて、書き損じのセクタに再書き込みを行う、或いは書き損じの発生したデータのエラー報告を上位装置に対して行い、不正なデータによる障害を防止するディスクアレイシステムを提供することにある。
【課題を解決するための手段】
【００１５】
本発明のディスクアレイシステムは、磁気ディスクと、上位装置からの書き込みデータに対して一意性を保証する符号を生成し、該データと該符号とを磁気ディスクに連続して書き込む書き込み手段と、該符号と、上位装置から指定されたアドレスとを対応づけて格納する記憶手段と、上位装置からのリード時に上位装置の指定するアドレスから決まる磁気ディスクのアドレスで記憶手段上の磁気ディスク毎のテーブルを参照し、該アドレスに一致する符号があれば、磁気ディスクから読み出したデータから書き込みと同じ方法で符号の生成を行い、記憶手段上の符号と比較を行うことで障害を検出する検出手段と、を備えたことを特徴とする。
【００１６】
本発明の書き込み障害の検出方法は、上位装置からの書き込みデータに対して一意性を保証する符号を生成し、該データと該符号とを磁気ディスクに連続して書き込むステップと、該符号と上位装置から指定されたアドレスとを対応づけて記憶手段に格納するステップと、上位装置からのリード時に上位装置の指定するアドレスから決まる磁気ディスクのアドレスで記憶手段上の磁気ディスク毎のテーブルを参照し、該アドレスに一致する符号があれば、磁気ディスクから読み出したデータから書き込みと同じ方法で符号の生成を行い、記憶手段上の符号と比較を行うことで障害を検出するステップと、を有することを特徴とする。
【００１７】
本発明の書き込み障害検出プログラムは、コンピュータに、データと該符号とを磁気ディスクに連続して書き込むステップと、該符号と上位装置から指定されたアドレスとを対応づけて記憶手段に格納するステップと、上位装置からのリード時に上位装置の指定するアドレスから決まる磁気ディスクのアドレスで記憶手段上の磁気ディスク毎のテーブルを参照し、該アドレスに一致する符号があれば、磁気ディスクから読み出したデータから書き込みと同じ方法で符号の生成を行い、記憶手段上の符号と比較を行うことで障害を検出するステップと、を実行させることを特徴とする。
【発明の効果】
【００１８】
本発明の効果は、磁気ディスクで間欠的に発生する書き損じ、即ちライト時に書き込んだデータと異なる古いデータが磁気ディスクからエラー情報無しに読み出される現象を検出する為に、データから生成された一意性を持つ符号（ＥＣＣやＣＲＣ、ハッシュ等）を、書き込み時のデータで該符号の生成を行い、メモリに上位装置あるいは磁気ディスクのアドレスと関連づけて格納する。
【００１９】
後の読み出し時には上位装置が指定する若しくは磁気ディスクに指定するアドレスとメモリ上に格納されている符号の中に該当するアドレスの符号が無いか探し、その時に該当するアドレスが存在すれば、読み出し時に、書き込んだ時と同じ方法で符号の生成を行い、メモリ上の符号と比較することで、書き損じの検出を行う。
【００２０】
これにより、上位装置に不正なデータを送ることを未然に防ぎ、かつＲＡＩＤ等のデータに冗長性を持たせたデータの格納方式を用いていた場合に、データの再構成を行い上位装置にデータを送るか、あるいは書き損じを検出したセクタのデータに関して、読み出し時に不正なデータが検出されたことを上位装置に報告を行うことで、上位装置の予期せぬ処理や動作を未然に防ぐという効果をもつ。
【００２１】
また、メモリには一意性をもつ符号と当該符号のアドレスを示す情報を格納することで、セクタのデータ全てを格納し後にベリファイを行う方式と較べて、メモリの使用量を節約できるという効果も併せ持つ。
【発明を実施するための最良の形態】
【００２２】
次に、本発明の第１の実施形態について説明する。
【００２３】
図１、図２、図５に示されるように、本発明のディスクアレイシステムの第１の実施の形態は、は、ホストインターフェイス制御部（ホストＩ／Ｆ制御部）１０１と、書き損じ保証制御部１０３と、Ｎ（Ｎは２以上の整数）台の磁気ディスク１０４−１、１０４−２…、１０４−Ｎと、メモリ１０６とから構成される。
【００２４】
ホストＩ／Ｆ制御部１０１は、上位装置から受け取ったデータを書き損じ保証部１０３に転送したり、上位装置から発行される読み出し、書き込み指示の結果を上位装置に報告を行う機能を持つ。
【００２５】
磁気ディスク１０４−１、１０４−２…、１０４−Ｎには、上位装置から受け取ったデータが書き込まれたり、上位装置に送るデータが格納される。
【００２６】
メモリ１０６には、上位装置から受け取ったデータから生成するデータとの一意性を示す符号が、そのデータのアドレスと共に関連づけて格納される。
【００２７】
メモリ１０６は、図５に示されるように、上位装置から指定されるアドレスと関連付けて書き損じのチェックを行っているかどうかの管理を行うテーブルを持つ。上位装置のアドレスと符号（後述）の組み合わせで、上位装置のアドレスと同じアドレスを持つエントリが存在すれば、該アドレスのデータは過去に書き込みが行われ、その後書き損じのチェックがまだ行われていないことを示す。書き損じのチェックが行われ、正常なデータが書き込まれていると判断されれば、該アドレスを持つエントリはテーブル上から削除される。
【００２８】
また、磁気ディスク１０４−１〜磁気ディスク１０４−Ｎは上位装置からのデータをそれぞれに冗長化して記録しており、そのデータはそれぞれ図２に示すようになっている。図１の磁気ディスク１０４−１は図２の磁気ディスク１に相当し、図１の磁気ディスク１０４−２は図２の磁気ディスク２に相当し、図１の磁気ディスク１０４−Ｎは磁気ディスクＮに相当する。個別の磁気ディスクは、それぞれにアドレスを指定することにより個別にリード／ライトを行う。
【００２９】
上位装置も同様にブロックを単位にリード／ライトを行うが、そのデータは磁気ディスク１〜磁気ディスクＮのそれぞれに冗長化して書き込まれる。
【００３０】
冗長化は例えば磁気ディスク１のブロックアドレス１のデータ領域は磁気ディスク２のブロックアドレス１のデータ領域のそれぞれに同一のデータが書き込まれ、磁気ディスク１のブロックアドレス２は磁気ディスク２のブロックアドレス２のデータ領域といった具合に、それぞれの磁気ディスクに同一のデータが書き込まれる。例えば、それぞれの磁気ディスク上のアドレスが同一のデータ領域に冗長化されるが、冗長化されるデータを格納するアドレスはそれぞれの磁気ディスクで上位装置の指定するアドレスと１対１に対応づけられた磁気ディスク上の異なるアドレスに記録されても良い。
【００３１】
図１の書き損じ補償制御部１０３は、上位装置からの書き込みの際に、上位装置から受け取ったデータから一意性を示す符号の生成を行い、上位装置が指定するアドレスと共にメモリ１０６に格納する機能を持つ。
【００３２】
さらに、上位装置からの読み出しの際には、当該読み出しによって指定されるアドレスの符号が無いかを探し、該当するアドレスの符号が存在すれば、磁気ディスクからのデータ読み出し時に、書き込んだ時と同じ方法で、符号の計算を行う機能と、前述の磁気ディスクのデータから生成した符号とメモリ上のアドレスを同一にする符号を比較する機能と、比較の結果、符号が異なり書き損じが発生したと判断すれば、アドレスを同一にする他の磁気ディスクからデータを読み込み、同様に符号の生成を行い、メモリ上の符号との比較を行う機能とを有する。その結果、符号が一致すれば、書き損じは無いと判断して、該データを書き損じの発生した磁気ディスクへ書き込みを行い、データの再構成を行う。また、上位装置へのデータ転送も併せて行う。
【００３３】
次に、図１及び図２、図５、図３のフローチャートを用いて、上位装置からライト動作を行った時の全体動作について詳細に説明する。
【００３４】
ホストＩ／Ｆ制御部１０１は、上位装置からのライトコマンドを受け取ると、上位装置にデータ転送の要求を行い、上位装置からのデータを受け取る（図３のステップＳ３０１）。ホストＩ／Ｆ制御部１０１は書き損じ補償制御部１０３に対して、該ライトコマンドのライト処理を指示し、該書き損じ保証制御部１０３は上位装置から受け取ったデータを元に、データとの一意性の検証を行う符号（ＣＲＣやＥＣＣ、ハッシュ等）の計算を行う（ステップＳ３０２）。
【００３５】
次に、書き損じ補償制御部１０３は、メモリ１０６上のテーブル（図５）に、上位装置で指定されたアドレスに相当するエントリが存在しないか、検索を行う（ステップＳ３０３）。
【００３６】
その結果、エントリが存在しなければ、新たにテーブル上にエントリの作成を行い、上位装置のアドレスとステップ３０２で作成された符号とをテーブル上の同じフィールドに書き込む（ステップＳ３０５、ステップＳ３０６）。
【００３７】
ステップＳ３０４でエントリが存在する場合には、計算した符号のみを、該当する上位装置のアドレスの存在するフィールドに上書きする（ステップＳ３０６）。
【００３８】
その後、上位装置から受信したデータを磁気ディスク１〜磁気ディスクＮのそれぞれアドレスに書き込みを行うことで処理を終了する。
【００３９】
図２に基づいて、さらに詳細に説明する。図２の磁気ディスク１が図１の磁気ディスク１０４−１に相当し、図２の磁気ディスク２が図１の磁気ディスク１０４−２に相当し、図２の磁気ディスクＮが図１の磁気ディスクＮに相当するとする。本実施例では、仮に上位装置からのライトコマンドのアドレスが１０で発行されたとした時に、磁気ディスク１のアドレス１０のデータ領域に上位装置からのデータがライトされると共に、同じく磁気ディスク２〜磁気ディスクＮのアドレス１０のデータ領域に対して同じデータをライトすることで、磁気ディスクの障害発生時でもデータの復旧を可能とすることができる。
【００４０】
以後、上位装置のアドレス１１のライトコマンドは、磁気ディスク１のアドレス１１と磁気ディスク２〜磁気ディスクＮのアドレス１１、という具合にデータの書き込みが行われる。これは一例であり、磁気ディスク１〜磁気ディスクＮと上位装置から指定するアドレス間で一意に決定されればどの様な方式を用いても構わない。
【００４１】
上位装置からのライトコマンドのアドレスが１０の時の例を用いて更に詳細な説明を行う。
【００４２】
書き損じ補償制御部１０３は、上位装置から受け取ったデータを元に、ＣＲＣ等のデータの一意性の検証を行う符号の計算を行う（ステップＳ３０２）。この時、例えばデータから生成したＣＲＣが８Ｆ３２だとする。
【００４３】
次に、書き損じ補償制御部１０３は、メモリ１０６上のテーブル（図５）に、上位装置で指定されたアドレスに相当するエントリが存在するか否かの検索を行う（ステップＳ３０３）。
【００４４】
この場合、上位装置からのアドレスが１０であるので、図５のテーブル上にエントリは存在し、ステップＳ３０２に計算されたＣＲＣをテーブル上のアドレスが１０の位置（既に３４ＦＡのＣＲＣが書き込まれている）に８Ｆ３２の値で上書きを行い、内容の変更を行う（ステップＳ３０６）。
【００４５】
その後、上位装置から受信したデータを磁気ディスク１のアドレス１０の場所と磁気ディスク２のアドレス１０の場所に受信したデータの書き込みを行うことで処理を終了する。
【００４６】
さらに、図１及び図２と図５と図４のフローチャートを用いて上位装置からのリード動作を行った時の全体動作について詳細に説明する。
【００４７】
図１のホストＩ／Ｆ制御部は１０１が上位装置からのリードコマンドを受け取ると、書き損じ補償制御部１０３は、上位装置の発行したコマンドのアドレスに相当する磁気ディスク１〜磁気ディスクＮのデータの読み込みを行う（ステップＳ４０１）。
【００４８】
その後、該リードコマンドで指定されるアドレスのエントリがメモリ１０６上のテーブル（図５）に無いか検索を行う（ステップＳ４０２）。
【００４９】
その結果、エントリが存在すれば、磁気ディスク１〜磁気ディスクＮから読み込んだデータを元に、ライトで行った時と同様の符号の計算をそれぞれに対して行う（ステップＳ４０４）。
【００５０】
次に、ステップＳ４０２でメモリ１０６のテーブルで検索を行ったアドレスのエントリの符号の取得を行い、磁気ディスク１〜磁気ディスクＮのそれぞれの符号との比較を行う（ステップＳ４０５）。
【００５１】
比較の結果、全てが一致すれば、データを書き込んだ時のデータと符号が全て一致することになるので、書き損じが発生していないことになり、媒体上のデータは正しく書き込まれていることになる。そこでメモリ１０６上のテーブル(図５)から、該アドレスのエントリの削除を行い、以後のリードコマンドでの書き損じのチェックを行わないようにする（ステップＳ４０６、ステップＳ４１０）。
【００５２】
その後、磁気ディスクから読み込んだデータ（磁気ディスク１〜磁気ディスクＮの何れでも良い）を上位装置に転送し、リードコマンドの処理を終了する（ステップＳ４０９）。
【００５３】
ステップＳ４０６で磁気ディスク１〜磁気ディスクＮのデータがメモリ１０６上の符号と一致しない場合、全てが一致しなければ、全てのディスクに書き損じが生じたことになり、上位装置に読み出したデータが異常であることを上位装置に報告し、リードコマンドを終了する（ステップＳ４０７、ステップＳ４１１）。
【００５４】
ステップＳ４０７でいずれかの磁気ディスクの符号がメモリ１０６上の符号と一致しない場合（ここでは、磁気ディスク１の符号がメモリ１０６上の符号と一致しないとする）について説明する。この場合、磁気ディスク２〜磁気ディスクＮの符号とメモリ１０６上は一致するので、書き込んだ時にデータから生成した符号とリードで読み込んだ時のデータから生成した符号が一致し、磁気ディスク２〜磁気ディスクＮのデータは書き損じが発生していないことになる。
【００５５】
そこで、磁気ディスク２〜磁気ディスクＮの何れかから読み込んだデータを磁気ディスク１に書き込み、磁気ディスク１のデータの再構成を行う（ステップＳ４０８）。
【００５６】
この時、磁気ディスク１に対する新たな書き込みが発生したので、該リードコマンドで指定されるアドレスのメモリ１０６上のテーブルのエントリは削除／書き換えは行わず、次のリードが行われる機会で書き損じのチェックを行う様にする。
【００５７】
その後、正常に読み込まれた磁気ディスク２〜磁気ディスクＮの何れかのデータを上位装置に転送し、リードコマンドの処理を終了する（ステップＳ４０９）。
【００５８】
次に、本実施の形態の効果について説明する。本実施の形態では、上位装置がコマンドで指定する、あるアドレスのデータについて、ライト時にはデータを磁気ディスクに書き込むと同時に、データから生成したデータとの一意性を保証する符号（ＣＲＣ、ＥＣＣ、ハッシュなど）をメモリ上に保持し、リード時には前述の符号を、磁気ディスクから読み込んだデータから生成し、磁気ディスクのデータから生成した符号とメモリ上の符号を比較することで、書き込んだデータに書き損じ現象の検出を行うことができる。
【００５９】
冗長性を持ったアレイ装置の場合、書き損じが発生していない磁気ディスクのデータを、書き損じの発生した磁気ディスクへ書き込むことでデータの再構成を可能としている。
【００６０】
次に、本発明の第２の実施の形態について説明する。
【００６１】
本実施の形態のディスクアレイシステムは、第１の実施の形態と同様に、ホストＩ／Ｆ制御部１０１と、書き損じ保証制御部１０３と、Ｎ（Ｎは２以上の整数）台の磁気ディスク１０４−１、１０４−２…、１０４−Ｎと、メモリ１０６とから構成される（図１、図２、図７を参照）。
【００６２】
ホストＩ／Ｆ制御部１０１は、上位装置から受け取ったデータを書き損じ保証部１０３に転送したり、上位装置から発行される読み出し、書き込み指示の結果を上位装置に報告を行う機能を持つ。
【００６３】
磁気ディスク１０４−１、１０４−２…、１０４−Ｎには、上位装置からのデータが書き込まれたり、上位装置に送るデータが格納される。
【００６４】
メモリ１０６には、上位装置から受け取ったデータから生成するデータとの一意性を示す符号が、そのデータのアドレスと共に関連づけて格納される。
【００６５】
図７に示されるように、メモリ１０６は、磁気ディスクへのリード／ライトを行うアドレスと関連付けて、書き損じのチェックを行っているかどうかの管理を行うテーブルを磁気ディスク毎に持つ。磁気ディスクのアドレスと符号（後述）との組み合わせで、磁気ディスクのアドレスと同じアドレスを持つエントリが存在すれば、該アドレスのデータは過去に書き込みが行われ、その後書き損じのチェックがまだ行われていないことを示す。書き損じのチェックが行われ、正常なデータが書き込まれていると判断されれば、該アドレスを持つエントリはテーブル上から削除される。
【００６６】
また、磁気ディスク１０４−１〜磁気ディスク１０４−Ｎは上位装置からのデータをそれぞれ冗長化して記録しており、データの格納は図２のようになっている。図１の磁気ディスク１０４は図２の磁気ディスク１に相当し、図１の磁気ディスク１０５は図２の磁気ディスク２に相当し、図１の磁気ディスク１０４−Ｎは図２の磁気ディスクＮに相当する。個別の磁気ディスクは、データと一意に割り付けたアドレスを指定することにより個別にリード／ライトを行う。
【００６７】
上位装置も同様にアドレスを指定してリード／ライトを行うが、そのデータは磁気ディスク１〜磁気ディスクＮのそれぞれに冗長化して書き込まれる。
【００６８】
冗長化は例えば磁気ディスク１のアドレス１のデータ領域は磁気ディスク２のアドレス１のデータ領域のそれぞれに同一のデータが書き込まれ、磁気ディスク１のアドレス２は磁気ディスク２のアドレス２のデータ領域といった具合に、それぞれの磁気ディスクに同一のデータが書き込まれる。例えば、それぞれのアドレスが同一のデータ領域に冗長化されているが、冗長化されるデータを格納するアドレスは上位装置が指定するアドレスとそれぞれの磁気ディスクのアドレス間で一意に決定すれば良く、磁気ディスク毎に異なるアドレスに記録されても良い。
【００６９】
図１の書き損じ補償制御部１０３は、磁気ディスクへの書き込みの際に、磁気ディスクへ書き込むデータから一意に決まる符号（ＣＲＣやＥＣＣ、ハッシュなど）の生成を行い、磁気ディスクに指定するアドレスと共にメモリ１０６に格納する機能を持つ。
【００７０】
さらに、上位装置への読み出しの際には、該読み出しによって磁気ディスクに指定するアドレスの符号が無いか探し、該当するアドレスの符号が存在すれば、磁気ディスクからのデータ読み出し時に、書き込んだ時と同じ方法で、符号の計算を行う機能と、前述の磁気ディスクのデータから生成した符号とメモリ上のアドレスを同一にする符号とを比較する機能と、比較の結果、符号が異なり書き損じが発生したと判断すれば、他の磁気ディスクからデータを読み込み、同様に符号の生成を行い、メモリ上の符号と比較を行うことを繰り返し、符号の一致するデータがあれば、該磁気ディスクのデータに書き損じは無いと判断して、該データを書き損じの発生した磁気ディスクへ書き込みを行い、データの再構成を行う機能とを有する。また、上位装置へのデータ転送も併せて行う。ここで、全ての磁気ディスクに対して書き損じが発生した場合は、上位装置に読み出したデータが異常であることを上位装置に報告し、リードコマンドを終了する。
【００７１】
次に、図１及び図２、図７と図３のフローチャートを用いて上位装置からライト動作を行った時の本実施の形態の全体動作について詳細に説明する。
【００７２】
ホストＩ／Ｆ制御部１０１、上位装置からのライトコマンドを受け取ると、上位装置にデータ転送の要求を行い、上位装置からのデータを受け取る（図３のステップＳ３０１）。ホストＩ／Ｆ制御部１０１は書き損じ補償制御部１０３に対して、該ライトコマンドのライト処理を指示し、該書き損じ保証制御部１０３は上位装置から受け取ったデータをそれぞれの磁気ディスクへ書き込む際のデータを元に、ＣＲＣ等のデータの一意性の検証を行う符号の計算を行う（ステップＳ３０２）。
【００７３】
次に、書き損じ補償制御部１０３は、メモリ１０６上のテーブル（図５）に、それぞれの磁気ディスクに指定するアドレスに相当するエントリが存在しないか、磁気ディスク毎に検索を行う。（ステップＳ３０３）
その結果、エントリが存在しなければ、新たにテーブル上にエントリの作成を行い、磁気ディスクのアドレスとステップ３０２に作成された符号をテーブル上の同じフィールドに書き込む（ステップＳ３０５、ステップＳ３０６）。
【００７４】
ステップＳ３０４でエントリが存在する場合には、計算した符号のみを、該当する磁気ディスクのアドレスの存在するフィールドに上書する（ステップＳ３０６）。
【００７５】
その後、上位装置から受信したデータを磁気ディスク１〜磁気ディスクＮのそれぞれのアドレスに書き込みを行うことで処理を終了する。
【００７６】
上位装置からのライトコマンドが１０の時の例を用いて詳細な説明を行う。
【００７７】
書き損じ補償制御部１０３は、上位装置から受け取ったデータを元に、ＣＲＣ等のデータの一意性の検証を行う符号の計算を行う（ステップＳ３０２）。例えば、データから生成したＣＲＣが８Ｆ３２とする。
【００７８】
次に、書き損じ補償制御部１０３は、メモリ１０６上のテーブル（図５）に対し、記憶装置に指定するアドレスに相当するエントリが存在するか否かの検索を行う（ステップＳ３０３）。
【００７９】
この場合、上位装置からのアドレスが１０であるので、磁気ディスク１から磁気ディスクＮのそれぞれについてアドレス１０のエントリが無いか、図５のテーブルの磁気ディスク１〜磁気ディスクＮのそれぞれのテーブルに対して検索を行う。その結果、図５のテーブル上の磁気ディスク１〜磁気ディスクＮの何れにもエントリは存在し、ステップＳ３０２に計算された符号をテーブル上のアドレスが１０の位置（既に３４ＦＡのＣＲＣが書き込まれている）に８Ｆ３２の値でそれぞれに上書きを行い、内容の変更を行う（ステップＳ３０６）。
【００８０】
その後、上位装置から受信したデータを磁気ディスク１〜磁気ディスクＮのアドレス１０の場所に受信したデータの書き込みを行うことで処理を終了する。
【００８１】
さらに、図１、図２、図７および図６のフローチャートを用いて、上位装置からのリード動作を行った時の本実施の形態の全体の動作について詳細に説明する。
【００８２】
ホストＩ／Ｆ制御部１０１は、上位装置からのリードコマンドを受け取ると、書き損じ補償制御部１０３は、上位装置の発行したコマンドから一意に決定する何れかの磁気ディスクのアドレスに対しデータの読み込みを行う（ステップＳ６０１）。この場合、磁気ディスク１に決定し、データを読み込むとする。
【００８３】
まずは、メモリ１０６上の磁気ディスク１のテーブル（図５）上に実際に読み込みを行った磁気ディスク１のアドレスのエントリが無いか検索を行う（ステップＳ６０２）。
【００８４】
その結果、エントリが存在すれば、磁気ディスク１から読み込んだデータを元に、ライトで行った時と同様の符号の計算を行う（ステップＳ６０３、ステップ６０４）。
【００８５】
次に、ステップＳ６０２でメモリ１０６の磁気ディスク１のテーブルで検索を行ったアドレスのエントリの符号の取得を行い、磁気ディスク１からデータを読み込み生成した符号との比較を行う（ステップＳ６０５）。
【００８６】
比較の結果、一致すれば、データを書き込んだ時のデータと符号が一致することになるので、書き損じが発生していないことになり、媒体上のデータは正しく書き込まれていることになる。そこでメモリ１０６上のテーブル(図５)から、磁気ディスク１の該当アドレスのエントリの削除を行い、以後のリードコマンドでの書き損じのチェックを行わないようにする（ステップＳ６０６、ステップＳ６１７）。
【００８７】
その後、磁気ディスク１から読み込んだデータを上位装置に転送し、リードコマンドの処理を終了する（ステップＳ６１５）。
【００８８】
ステップＳ６０３でエントリが存在しない場合、該当するアドレス磁気ディスクのデータは、すでに書き損じのチェックを行ったことを示しているので、該データを上位装置に転送し、リードコマンドの処理を終了する（ステップＳ６１５）。
【００８９】
また、ステップＳ６０６で磁気ディスク１から読み込んだデータから生成した符号とメモリ１０６上の磁気ディスク１のテーブル上の符号と一致しない場合、冗長系を構成している磁気ディスクのアドレスのデータの読み込みを行う（ステップ６０７）。ここでは仮に磁気ディスク２の読み込みを行うとする。
【００９０】
磁気ディスク１のリードを行った時と同様に、メモリ１０６上の磁気ディスク２のテーブル（図５）上に実際に読み込みを行った磁気ディスク２のアドレスのエントリが無いか検索を行う（ステップＳ６０８）。
【００９１】
その結果、エントリが存在すれば、磁気ディスク２から読み込んだデータを元に、ライトで行った時と同様の符号の計算を行う（ステップＳ６０９、ステップ６１０）。
【００９２】
次に、ステップＳ６０８においてメモリ１０６の磁気ディスク２のテーブルで検索を行ったアドレスのエントリの符号の取得を行い、磁気ディスク２からデータを読み込み、生成した符号との比較を行う（ステップＳ６１１）。
【００９３】
比較の結果、一致すれば、データを書き込んだ時のデータと符号が一致することになるので、書き損じが発生していないことになり、媒体上のデータは正しく書き込まれていることになる。そこで、メモリ１０６上のテーブル(図５)から、磁気ディスク２の該当アドレスのエントリの削除を行い、以後のリードコマンドでの書き損じのチェックを行わないようにする（ステップＳ６１２、ステップＳ６１３）。
【００９４】
そこで、磁気ディスク２から読み込んだデータの冗長系を構成する磁気ディスク１のアドレスに書き込み、磁気ディスク１のデータの再構成を行う（ステップＳ６１４）。
【００９５】
この時、磁気ディスク２のアドレスのエントリの削除／書き換えは行わず、次のリードが行われる機会で書き損じのチェックを行うようにする。
【００９６】
その後、正常に読み込まれた磁気ディスク２のデータを上位装置に転送し、リードコマンドの処理を終了する（ステップＳ６１５）。
【００９７】
ステップＳ６０９でエントリが存在しない場合、該当するアドレスの磁気ディスクのデータは、すでに書き損じのチェックを行ったことを示しているので、該データを用いてステップ６１４のデータ再構成処理に移行する（ステップＳ６０９）。
【００９８】
以降、同様に、磁気ディスク２から読み込んだデータの冗長系を構成する磁気ディスク１のアドレスに書き込み、磁気ディスク１のデータの再構成を行う（ステップＳ６１４）。
【００９９】
この時、磁気ディスク２のアドレスのエントリの削除／書き換えは行わず、次のリードが行われる機会で書き損じのチェックを行うようにする。
【０１００】
その後、正常に読み込まれた磁気ディスク２のデータを上位装置に転送し、リードコマンドの処理を終了する（ステップＳ６１５）。
【０１０１】
ステップＳ６１２で符号が一致しない時には、冗長系を構成する磁気ディスクが更に存在するかチェックを行う(ステップＳ６１６)。
【０１０２】
今回の場合、磁気ディスク２以外に磁気ディスク３〜磁気ディスクＮが存在する為、冗長系の磁気ディスクは存在することになる。その場合、磁気ディスク３に対するデータの読み込みを行い、ステップＳ６０７以降の処理を再び繰り返す。
【０１０３】
ステップＳ６０７で冗長系を構成する磁気ディスクＮに対する処理が行われて、ステップＳ６１６に到った場合、即ち磁気ディスク１〜磁気ディスクＮの全てに書き損じが発生した場合には、上位装置に対して、上位装置の指定するアドレスのデータにエラーが発生したことを上位装置に報告し、リードコマンドを終了する（ステップＳ６１７）。
【０１０４】
次に、本実施の形態の効果について説明する。本実施の形態では、第一の実施の形態の効果である、書き込んだデータの書き損じ現象の検出と、冗長性を持ったアレイ装置の場合、書き損じが発生していない磁気ディスクのデータを、書き損じの発生した磁気ディスクへ書き込むことでデータの再構成を可能としていることに加えて、磁気ディスク毎に書き損じのチェックを行うテーブルを保持することにより、書き損じのチェックのリードの際に、冗長化が行われている片方の磁気ディスクのみのリードで済ませることができ、磁気ディスクに対するアクセスを低減することができるというさらなるメリットを持つ。
【産業上の利用可能性】
【０１０５】
本発明によれば、磁気ディスクである磁気ディスク装置や光ディスク装置を冗長化して持つディスクアレイ装置やフラッシュメモリ等の不揮発メモリを複数持ち、その間で障害に備えてコピーを持つコンピューターシステムなどに適用できる。また、コンピューター（サーバやパーソナルコンピューター等）内蔵の冗長化の取られた磁気ディスクといった用途にも適用できる。
【図面の簡単な説明】
【０１０６】
【図１】本発明の第１および第２の実施形態におけるディスクアレイシステムを示すブロック図である。
【図２】磁気ディスクの構成を示す図である。
【図３】ライト時の動作を示すフローチャートである。
【図４】本発明の第１の実施形態におけるリード時の動作を示すフローチャートである。
【図５】本発明の第１の実施形態におけるメモリ上のテーブルを示す図である
【図６】本発明の第２の実施形態におけるリード時の動作を示すフローチャートである。
【図７】本発明の第２の実施形態におけるメモリ上のテーブルを示す図である
【符号の説明】
【０１０７】
１０１        ホストインターフェイス制御部
１０３        書き損じ補償制御部
１０４−１    磁気ディスク１
１０４−２    磁気ディスク２
１０４−Ｎ    磁気ディスクＮ
１０６        メモリ
【図１】
2010049394.tif 000003
【図２】
2010049394.tif 000004
【図３】
2010049394.tif 000005
【図４】
2010049394.tif 000006
【図５】
2010049394.tif 000007
【図６】
2010049394.tif 000008
【図７】
2010049394.tif 000009