説明

磁気ディスクの書き込み障害の検出と回復を行うディスクアレイシステム、方法およびプログラム

【課題】
ディスクアレイ装置において、書き損じが発生したことにより、RAID等の冗長化処理が行われていたにもかかわらずデータの修復を行えないという問題を解決する。
【解決手段】
本発明のディスクアレイシステムは、上位装置からの書き込みデータに対して一意性を保証する符号を生成し、該データと該符号とを磁気ディスクに連続して書き込む書き込み手段と、該符号と上位装置から指定されたアドレスとを対応づけて格納する記憶手段と、上位装置からのリード時に上位装置の指定するアドレスから決まる磁気ディスクのアドレスで記憶手段上の磁気ディスク毎のテーブルを参照し、該アドレスに一致する符号があれば、磁気ディスクから読み出したデータから書き込みと同じ方法で符号の生成を行い、記憶手段上の符号と比較を行うことで障害を検出する検出手段と、を備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ディスクアレイシステムに関し、特に複数の磁気ディスク(HDD)にRAID(Redundant Arrays of Inexpensive Disks)技術を用いた障害回復技術を持つディスクアレイシステムにおいて、特に磁気ディスクへの書き込み時に発生する、セクタ単位の書き損じによる、リード時のデータ化けの検出及びデータの修復を行うディスクアレイシステム、およびその制御方法に関する。
【背景技術】
【0002】
通常、ディスクアレイシステムは、RAID(Redundant Arrays of Inexpensive Disks )と呼ばれる構成をとっている。RAIDの構成には幾つかあるが、その中でRAID1〜RAID5のディスクアレイ装置は、データの冗長性を持たせることで磁気ディスクに障害が発生したときのデータの信頼性を向上させるための手段が講じられている。
【0003】
その中で特にRAID1は2台、或いは複数台数の磁気ディスクにデータのコピーをとる方式である。RAID4は、ディスクアレイ装置がN台の磁気ディスクで構成されているとき、N−1台の磁気ディスク装置を、ユーザーデータを格納する磁気ディスクに割り当て、残りの1台を個々の磁気ディスクのアドレスが同じ物の排他的論理和(Exclusive OR)をとった結果をデータとして書き込む。これにより、1台の磁気ディスクに障害が発生した場合でも、残りの個々の磁気ディスクのデータの排他的論理和をとることで、障害の発生した磁気ディスクのデータ復元が可能である。RAID4は、パリティデータを書き込む磁気ディスクが前述のように固定であるが、一方、RAID5は、パリティデータを一定量毎に異なる磁気ディスクに格納する為、パリティデータに対するアクセスの負荷を分散する構造となっている。このような構成のディスクアレイ装置は特許文献1や特許文献2に開示されている。
【0004】
ディスクアレイシステムにおいて、磁気ディスクに発生する異常、即ちデータの破損や故障などによるRead若しくはWrite出来ない状態は、通常であれば磁気ディスクへのリードやライトコマンドの結果に戻されるエラー情報により判定できる。例えば、磁気ディスク上の媒体の欠陥により、媒体上のデータが正常に読み込み出来ない時は、磁気ディスク自身の持つECC(エラー訂正機能)により、訂正可能であれば訂正を行いエラー情報無しでコマンドを終了するが、ECCにより訂正しきれない場合はECCエラーとしてエラー情報を返すことで、該セクタのデータが読み込むことが出来ないことを報告する。
【0005】
ディスクアレイシステムのコントローラーはRAIDの機能を用いて障害の発生したデータの修復を行う。
【0006】
例えば、RAID5であれば、該エラーの発生したセクタを持つ磁気ディスク以外の磁気ディスクのデータとパリティから、該エラーを発生したセクタのデータの修復を行いホストにデータを返す。
【0007】
しかし、稀ではあるが磁気ディスクへの書き込みがセクタ単位で行われず、該セクタのリードは正常終了するがデータは書き込む前の古いデータがリードできてしまう現象(以下、書き損じ)が発生することがある。
【0008】
これは、磁気ディスク装置の制御異常(バグ)や磁気ディスクの磁気ヘッドの信号処理LSI、磁気ヘッドそのものの異常によりもたらされる。
【0009】
特許文献3ではこの書き損じに対する解決手段を提供している。しかし、特許文献3では磁気ディスクのヘッドの異常等による恒久的な書き損じに対しては有効であるが、一時的に発生するような書き損じに関しては検出が出来ないという課題を持つ。つまり、特許文献3で示される書き損じの検出はライトが一定回数発生した後、あるいは一定時間毎に診断領域に対してライトを行い、その後に該診断領域にリードを行いライト時のデータとリード時のデータの照合(ベリファイ)を行い一致しなければ、前回の診断からの全てのライトは書き損じを発生したとみなす。この時、一連のライトの履歴を保持し、書き損じ検出時にはライトの履歴からRAID5のディスクアレイ装置の持つRAID機能を用いてデータを回復するか、あるいはホストにエラーの発生を通知することで、バックアップデータ或いはジャーナルデータからホスト側でデータの回復を行う。
【0010】
この方式は、診断の行われる間に間欠的に発生する書き損じについては、次の診断で書き損じが検出されない場合において見過ごされるという問題を有する。
【0011】
また、特許文献4では、一度書き込んだデータに対しては、メモリ(キャッシュ)上にデータの保持を行い、後ほど、媒体からライトを行った箇所のデータのリードを行い、メモリ上のデータとベリファイを行うことで、書き損じが発生していないかチェックをおこなう。
【0012】
この方式は書き込んだデータ全てに対してベリファイを行うことで、間欠的に発生する書き損じに関して検出可能であるが、書き込んだデータをそのままメモリ上に保持する為、メモリ容量を圧迫するという課題を持つ。
【0013】
【特許文献1】特開平11−288387号
【特許文献2】特開平6−236322号
【特許文献3】特開2003―263703号
【特許文献4】特願平11−327642号
【発明の開示】
【発明が解決しようとする課題】
【0014】
本発明の課題は、磁気ディスクのバグ等により間欠的に発生する書き損じ、即ちライト時に書き込んだデータとは異なる古いデータが磁気ディスクからエラー情報無しに読み出される現象が発生した時に、該エラーの発生したセクタのデータをディスクアレイシステムの持つRAID機能により再構成を行いホストにデータを返し、再構成を行ったセクタのデータを用いて、書き損じのセクタに再書き込みを行う、或いは書き損じの発生したデータのエラー報告を上位装置に対して行い、不正なデータによる障害を防止するディスクアレイシステムを提供することにある。
【課題を解決するための手段】
【0015】
本発明のディスクアレイシステムは、磁気ディスクと、上位装置からの書き込みデータに対して一意性を保証する符号を生成し、該データと該符号とを磁気ディスクに連続して書き込む書き込み手段と、該符号と、上位装置から指定されたアドレスとを対応づけて格納する記憶手段と、上位装置からのリード時に上位装置の指定するアドレスから決まる磁気ディスクのアドレスで記憶手段上の磁気ディスク毎のテーブルを参照し、該アドレスに一致する符号があれば、磁気ディスクから読み出したデータから書き込みと同じ方法で符号の生成を行い、記憶手段上の符号と比較を行うことで障害を検出する検出手段と、を備えたことを特徴とする。
【0016】
本発明の書き込み障害の検出方法は、上位装置からの書き込みデータに対して一意性を保証する符号を生成し、該データと該符号とを磁気ディスクに連続して書き込むステップと、該符号と上位装置から指定されたアドレスとを対応づけて記憶手段に格納するステップと、上位装置からのリード時に上位装置の指定するアドレスから決まる磁気ディスクのアドレスで記憶手段上の磁気ディスク毎のテーブルを参照し、該アドレスに一致する符号があれば、磁気ディスクから読み出したデータから書き込みと同じ方法で符号の生成を行い、記憶手段上の符号と比較を行うことで障害を検出するステップと、を有することを特徴とする。
【0017】
本発明の書き込み障害検出プログラムは、コンピュータに、データと該符号とを磁気ディスクに連続して書き込むステップと、該符号と上位装置から指定されたアドレスとを対応づけて記憶手段に格納するステップと、上位装置からのリード時に上位装置の指定するアドレスから決まる磁気ディスクのアドレスで記憶手段上の磁気ディスク毎のテーブルを参照し、該アドレスに一致する符号があれば、磁気ディスクから読み出したデータから書き込みと同じ方法で符号の生成を行い、記憶手段上の符号と比較を行うことで障害を検出するステップと、を実行させることを特徴とする。
【発明の効果】
【0018】
本発明の効果は、磁気ディスクで間欠的に発生する書き損じ、即ちライト時に書き込んだデータと異なる古いデータが磁気ディスクからエラー情報無しに読み出される現象を検出する為に、データから生成された一意性を持つ符号(ECCやCRC、ハッシュ等)を、書き込み時のデータで該符号の生成を行い、メモリに上位装置あるいは磁気ディスクのアドレスと関連づけて格納する。
【0019】
後の読み出し時には上位装置が指定する若しくは磁気ディスクに指定するアドレスとメモリ上に格納されている符号の中に該当するアドレスの符号が無いか探し、その時に該当するアドレスが存在すれば、読み出し時に、書き込んだ時と同じ方法で符号の生成を行い、メモリ上の符号と比較することで、書き損じの検出を行う。
【0020】
これにより、上位装置に不正なデータを送ることを未然に防ぎ、かつRAID等のデータに冗長性を持たせたデータの格納方式を用いていた場合に、データの再構成を行い上位装置にデータを送るか、あるいは書き損じを検出したセクタのデータに関して、読み出し時に不正なデータが検出されたことを上位装置に報告を行うことで、上位装置の予期せぬ処理や動作を未然に防ぐという効果をもつ。
【0021】
また、メモリには一意性をもつ符号と当該符号のアドレスを示す情報を格納することで、セクタのデータ全てを格納し後にベリファイを行う方式と較べて、メモリの使用量を節約できるという効果も併せ持つ。
【発明を実施するための最良の形態】
【0022】
次に、本発明の第1の実施形態について説明する。
【0023】
図1、図2、図5に示されるように、本発明のディスクアレイシステムの第1の実施の形態は、は、ホストインターフェイス制御部(ホストI/F制御部)101と、書き損じ保証制御部103と、N(Nは2以上の整数)台の磁気ディスク104−1、104−2…、104−Nと、メモリ106とから構成される。
【0024】
ホストI/F制御部101は、上位装置から受け取ったデータを書き損じ保証部103に転送したり、上位装置から発行される読み出し、書き込み指示の結果を上位装置に報告を行う機能を持つ。
【0025】
磁気ディスク104−1、104−2…、104−Nには、上位装置から受け取ったデータが書き込まれたり、上位装置に送るデータが格納される。
【0026】
メモリ106には、上位装置から受け取ったデータから生成するデータとの一意性を示す符号が、そのデータのアドレスと共に関連づけて格納される。
【0027】
メモリ106は、図5に示されるように、上位装置から指定されるアドレスと関連付けて書き損じのチェックを行っているかどうかの管理を行うテーブルを持つ。上位装置のアドレスと符号(後述)の組み合わせで、上位装置のアドレスと同じアドレスを持つエントリが存在すれば、該アドレスのデータは過去に書き込みが行われ、その後書き損じのチェックがまだ行われていないことを示す。書き損じのチェックが行われ、正常なデータが書き込まれていると判断されれば、該アドレスを持つエントリはテーブル上から削除される。
【0028】
また、磁気ディスク104−1〜磁気ディスク104−Nは上位装置からのデータをそれぞれに冗長化して記録しており、そのデータはそれぞれ図2に示すようになっている。図1の磁気ディスク104−1は図2の磁気ディスク1に相当し、図1の磁気ディスク104−2は図2の磁気ディスク2に相当し、図1の磁気ディスク104−Nは磁気ディスクNに相当する。個別の磁気ディスクは、それぞれにアドレスを指定することにより個別にリード/ライトを行う。
【0029】
上位装置も同様にブロックを単位にリード/ライトを行うが、そのデータは磁気ディスク1〜磁気ディスクNのそれぞれに冗長化して書き込まれる。
【0030】
冗長化は例えば磁気ディスク1のブロックアドレス1のデータ領域は磁気ディスク2のブロックアドレス1のデータ領域のそれぞれに同一のデータが書き込まれ、磁気ディスク1のブロックアドレス2は磁気ディスク2のブロックアドレス2のデータ領域といった具合に、それぞれの磁気ディスクに同一のデータが書き込まれる。例えば、それぞれの磁気ディスク上のアドレスが同一のデータ領域に冗長化されるが、冗長化されるデータを格納するアドレスはそれぞれの磁気ディスクで上位装置の指定するアドレスと1対1に対応づけられた磁気ディスク上の異なるアドレスに記録されても良い。
【0031】
図1の書き損じ補償制御部103は、上位装置からの書き込みの際に、上位装置から受け取ったデータから一意性を示す符号の生成を行い、上位装置が指定するアドレスと共にメモリ106に格納する機能を持つ。
【0032】
さらに、上位装置からの読み出しの際には、当該読み出しによって指定されるアドレスの符号が無いかを探し、該当するアドレスの符号が存在すれば、磁気ディスクからのデータ読み出し時に、書き込んだ時と同じ方法で、符号の計算を行う機能と、前述の磁気ディスクのデータから生成した符号とメモリ上のアドレスを同一にする符号を比較する機能と、比較の結果、符号が異なり書き損じが発生したと判断すれば、アドレスを同一にする他の磁気ディスクからデータを読み込み、同様に符号の生成を行い、メモリ上の符号との比較を行う機能とを有する。その結果、符号が一致すれば、書き損じは無いと判断して、該データを書き損じの発生した磁気ディスクへ書き込みを行い、データの再構成を行う。また、上位装置へのデータ転送も併せて行う。
【0033】
次に、図1及び図2、図5、図3のフローチャートを用いて、上位装置からライト動作を行った時の全体動作について詳細に説明する。
【0034】
ホストI/F制御部101は、上位装置からのライトコマンドを受け取ると、上位装置にデータ転送の要求を行い、上位装置からのデータを受け取る(図3のステップS301)。ホストI/F制御部101は書き損じ補償制御部103に対して、該ライトコマンドのライト処理を指示し、該書き損じ保証制御部103は上位装置から受け取ったデータを元に、データとの一意性の検証を行う符号(CRCやECC、ハッシュ等)の計算を行う(ステップS302)。
【0035】
次に、書き損じ補償制御部103は、メモリ106上のテーブル(図5)に、上位装置で指定されたアドレスに相当するエントリが存在しないか、検索を行う(ステップS303)。
【0036】
その結果、エントリが存在しなければ、新たにテーブル上にエントリの作成を行い、上位装置のアドレスとステップ302で作成された符号とをテーブル上の同じフィールドに書き込む(ステップS305、ステップS306)。
【0037】
ステップS304でエントリが存在する場合には、計算した符号のみを、該当する上位装置のアドレスの存在するフィールドに上書きする(ステップS306)。
【0038】
その後、上位装置から受信したデータを磁気ディスク1〜磁気ディスクNのそれぞれアドレスに書き込みを行うことで処理を終了する。
【0039】
図2に基づいて、さらに詳細に説明する。図2の磁気ディスク1が図1の磁気ディスク104−1に相当し、図2の磁気ディスク2が図1の磁気ディスク104−2に相当し、図2の磁気ディスクNが図1の磁気ディスクNに相当するとする。本実施例では、仮に上位装置からのライトコマンドのアドレスが10で発行されたとした時に、磁気ディスク1のアドレス10のデータ領域に上位装置からのデータがライトされると共に、同じく磁気ディスク2〜磁気ディスクNのアドレス10のデータ領域に対して同じデータをライトすることで、磁気ディスクの障害発生時でもデータの復旧を可能とすることができる。
【0040】
以後、上位装置のアドレス11のライトコマンドは、磁気ディスク1のアドレス11と磁気ディスク2〜磁気ディスクNのアドレス11、という具合にデータの書き込みが行われる。これは一例であり、磁気ディスク1〜磁気ディスクNと上位装置から指定するアドレス間で一意に決定されればどの様な方式を用いても構わない。
【0041】
上位装置からのライトコマンドのアドレスが10の時の例を用いて更に詳細な説明を行う。
【0042】
書き損じ補償制御部103は、上位装置から受け取ったデータを元に、CRC等のデータの一意性の検証を行う符号の計算を行う(ステップS302)。この時、例えばデータから生成したCRCが8F32だとする。
【0043】
次に、書き損じ補償制御部103は、メモリ106上のテーブル(図5)に、上位装置で指定されたアドレスに相当するエントリが存在するか否かの検索を行う(ステップS303)。
【0044】
この場合、上位装置からのアドレスが10であるので、図5のテーブル上にエントリは存在し、ステップS302に計算されたCRCをテーブル上のアドレスが10の位置(既に34FAのCRCが書き込まれている)に8F32の値で上書きを行い、内容の変更を行う(ステップS306)。
【0045】
その後、上位装置から受信したデータを磁気ディスク1のアドレス10の場所と磁気ディスク2のアドレス10の場所に受信したデータの書き込みを行うことで処理を終了する。
【0046】
さらに、図1及び図2と図5と図4のフローチャートを用いて上位装置からのリード動作を行った時の全体動作について詳細に説明する。
【0047】
図1のホストI/F制御部は101が上位装置からのリードコマンドを受け取ると、書き損じ補償制御部103は、上位装置の発行したコマンドのアドレスに相当する磁気ディスク1〜磁気ディスクNのデータの読み込みを行う(ステップS401)。
【0048】
その後、該リードコマンドで指定されるアドレスのエントリがメモリ106上のテーブル(図5)に無いか検索を行う(ステップS402)。
【0049】
その結果、エントリが存在すれば、磁気ディスク1〜磁気ディスクNから読み込んだデータを元に、ライトで行った時と同様の符号の計算をそれぞれに対して行う(ステップS404)。
【0050】
次に、ステップS402でメモリ106のテーブルで検索を行ったアドレスのエントリの符号の取得を行い、磁気ディスク1〜磁気ディスクNのそれぞれの符号との比較を行う(ステップS405)。
【0051】
比較の結果、全てが一致すれば、データを書き込んだ時のデータと符号が全て一致することになるので、書き損じが発生していないことになり、媒体上のデータは正しく書き込まれていることになる。そこでメモリ106上のテーブル(図5)から、該アドレスのエントリの削除を行い、以後のリードコマンドでの書き損じのチェックを行わないようにする(ステップS406、ステップS410)。
【0052】
その後、磁気ディスクから読み込んだデータ(磁気ディスク1〜磁気ディスクNの何れでも良い)を上位装置に転送し、リードコマンドの処理を終了する(ステップS409)。
【0053】
ステップS406で磁気ディスク1〜磁気ディスクNのデータがメモリ106上の符号と一致しない場合、全てが一致しなければ、全てのディスクに書き損じが生じたことになり、上位装置に読み出したデータが異常であることを上位装置に報告し、リードコマンドを終了する(ステップS407、ステップS411)。
【0054】
ステップS407でいずれかの磁気ディスクの符号がメモリ106上の符号と一致しない場合(ここでは、磁気ディスク1の符号がメモリ106上の符号と一致しないとする)について説明する。この場合、磁気ディスク2〜磁気ディスクNの符号とメモリ106上は一致するので、書き込んだ時にデータから生成した符号とリードで読み込んだ時のデータから生成した符号が一致し、磁気ディスク2〜磁気ディスクNのデータは書き損じが発生していないことになる。
【0055】
そこで、磁気ディスク2〜磁気ディスクNの何れかから読み込んだデータを磁気ディスク1に書き込み、磁気ディスク1のデータの再構成を行う(ステップS408)。
【0056】
この時、磁気ディスク1に対する新たな書き込みが発生したので、該リードコマンドで指定されるアドレスのメモリ106上のテーブルのエントリは削除/書き換えは行わず、次のリードが行われる機会で書き損じのチェックを行う様にする。
【0057】
その後、正常に読み込まれた磁気ディスク2〜磁気ディスクNの何れかのデータを上位装置に転送し、リードコマンドの処理を終了する(ステップS409)。
【0058】
次に、本実施の形態の効果について説明する。本実施の形態では、上位装置がコマンドで指定する、あるアドレスのデータについて、ライト時にはデータを磁気ディスクに書き込むと同時に、データから生成したデータとの一意性を保証する符号(CRC、ECC、ハッシュなど)をメモリ上に保持し、リード時には前述の符号を、磁気ディスクから読み込んだデータから生成し、磁気ディスクのデータから生成した符号とメモリ上の符号を比較することで、書き込んだデータに書き損じ現象の検出を行うことができる。
【0059】
冗長性を持ったアレイ装置の場合、書き損じが発生していない磁気ディスクのデータを、書き損じの発生した磁気ディスクへ書き込むことでデータの再構成を可能としている。
【0060】
次に、本発明の第2の実施の形態について説明する。
【0061】
本実施の形態のディスクアレイシステムは、第1の実施の形態と同様に、ホストI/F制御部101と、書き損じ保証制御部103と、N(Nは2以上の整数)台の磁気ディスク104−1、104−2…、104−Nと、メモリ106とから構成される(図1、図2、図7を参照)。
【0062】
ホストI/F制御部101は、上位装置から受け取ったデータを書き損じ保証部103に転送したり、上位装置から発行される読み出し、書き込み指示の結果を上位装置に報告を行う機能を持つ。
【0063】
磁気ディスク104−1、104−2…、104−Nには、上位装置からのデータが書き込まれたり、上位装置に送るデータが格納される。
【0064】
メモリ106には、上位装置から受け取ったデータから生成するデータとの一意性を示す符号が、そのデータのアドレスと共に関連づけて格納される。
【0065】
図7に示されるように、メモリ106は、磁気ディスクへのリード/ライトを行うアドレスと関連付けて、書き損じのチェックを行っているかどうかの管理を行うテーブルを磁気ディスク毎に持つ。磁気ディスクのアドレスと符号(後述)との組み合わせで、磁気ディスクのアドレスと同じアドレスを持つエントリが存在すれば、該アドレスのデータは過去に書き込みが行われ、その後書き損じのチェックがまだ行われていないことを示す。書き損じのチェックが行われ、正常なデータが書き込まれていると判断されれば、該アドレスを持つエントリはテーブル上から削除される。
【0066】
また、磁気ディスク104−1〜磁気ディスク104−Nは上位装置からのデータをそれぞれ冗長化して記録しており、データの格納は図2のようになっている。図1の磁気ディスク104は図2の磁気ディスク1に相当し、図1の磁気ディスク105は図2の磁気ディスク2に相当し、図1の磁気ディスク104−Nは図2の磁気ディスクNに相当する。個別の磁気ディスクは、データと一意に割り付けたアドレスを指定することにより個別にリード/ライトを行う。
【0067】
上位装置も同様にアドレスを指定してリード/ライトを行うが、そのデータは磁気ディスク1〜磁気ディスクNのそれぞれに冗長化して書き込まれる。
【0068】
冗長化は例えば磁気ディスク1のアドレス1のデータ領域は磁気ディスク2のアドレス1のデータ領域のそれぞれに同一のデータが書き込まれ、磁気ディスク1のアドレス2は磁気ディスク2のアドレス2のデータ領域といった具合に、それぞれの磁気ディスクに同一のデータが書き込まれる。例えば、それぞれのアドレスが同一のデータ領域に冗長化されているが、冗長化されるデータを格納するアドレスは上位装置が指定するアドレスとそれぞれの磁気ディスクのアドレス間で一意に決定すれば良く、磁気ディスク毎に異なるアドレスに記録されても良い。
【0069】
図1の書き損じ補償制御部103は、磁気ディスクへの書き込みの際に、磁気ディスクへ書き込むデータから一意に決まる符号(CRCやECC、ハッシュなど)の生成を行い、磁気ディスクに指定するアドレスと共にメモリ106に格納する機能を持つ。
【0070】
さらに、上位装置への読み出しの際には、該読み出しによって磁気ディスクに指定するアドレスの符号が無いか探し、該当するアドレスの符号が存在すれば、磁気ディスクからのデータ読み出し時に、書き込んだ時と同じ方法で、符号の計算を行う機能と、前述の磁気ディスクのデータから生成した符号とメモリ上のアドレスを同一にする符号とを比較する機能と、比較の結果、符号が異なり書き損じが発生したと判断すれば、他の磁気ディスクからデータを読み込み、同様に符号の生成を行い、メモリ上の符号と比較を行うことを繰り返し、符号の一致するデータがあれば、該磁気ディスクのデータに書き損じは無いと判断して、該データを書き損じの発生した磁気ディスクへ書き込みを行い、データの再構成を行う機能とを有する。また、上位装置へのデータ転送も併せて行う。ここで、全ての磁気ディスクに対して書き損じが発生した場合は、上位装置に読み出したデータが異常であることを上位装置に報告し、リードコマンドを終了する。
【0071】
次に、図1及び図2、図7と図3のフローチャートを用いて上位装置からライト動作を行った時の本実施の形態の全体動作について詳細に説明する。
【0072】
ホストI/F制御部101、上位装置からのライトコマンドを受け取ると、上位装置にデータ転送の要求を行い、上位装置からのデータを受け取る(図3のステップS301)。ホストI/F制御部101は書き損じ補償制御部103に対して、該ライトコマンドのライト処理を指示し、該書き損じ保証制御部103は上位装置から受け取ったデータをそれぞれの磁気ディスクへ書き込む際のデータを元に、CRC等のデータの一意性の検証を行う符号の計算を行う(ステップS302)。
【0073】
次に、書き損じ補償制御部103は、メモリ106上のテーブル(図5)に、それぞれの磁気ディスクに指定するアドレスに相当するエントリが存在しないか、磁気ディスク毎に検索を行う。(ステップS303)
その結果、エントリが存在しなければ、新たにテーブル上にエントリの作成を行い、磁気ディスクのアドレスとステップ302に作成された符号をテーブル上の同じフィールドに書き込む(ステップS305、ステップS306)。
【0074】
ステップS304でエントリが存在する場合には、計算した符号のみを、該当する磁気ディスクのアドレスの存在するフィールドに上書する(ステップS306)。
【0075】
その後、上位装置から受信したデータを磁気ディスク1〜磁気ディスクNのそれぞれのアドレスに書き込みを行うことで処理を終了する。
【0076】
上位装置からのライトコマンドが10の時の例を用いて詳細な説明を行う。
【0077】
書き損じ補償制御部103は、上位装置から受け取ったデータを元に、CRC等のデータの一意性の検証を行う符号の計算を行う(ステップS302)。例えば、データから生成したCRCが8F32とする。
【0078】
次に、書き損じ補償制御部103は、メモリ106上のテーブル(図5)に対し、記憶装置に指定するアドレスに相当するエントリが存在するか否かの検索を行う(ステップS303)。
【0079】
この場合、上位装置からのアドレスが10であるので、磁気ディスク1から磁気ディスクNのそれぞれについてアドレス10のエントリが無いか、図5のテーブルの磁気ディスク1〜磁気ディスクNのそれぞれのテーブルに対して検索を行う。その結果、図5のテーブル上の磁気ディスク1〜磁気ディスクNの何れにもエントリは存在し、ステップS302に計算された符号をテーブル上のアドレスが10の位置(既に34FAのCRCが書き込まれている)に8F32の値でそれぞれに上書きを行い、内容の変更を行う(ステップS306)。
【0080】
その後、上位装置から受信したデータを磁気ディスク1〜磁気ディスクNのアドレス10の場所に受信したデータの書き込みを行うことで処理を終了する。
【0081】
さらに、図1、図2、図7および図6のフローチャートを用いて、上位装置からのリード動作を行った時の本実施の形態の全体の動作について詳細に説明する。
【0082】
ホストI/F制御部101は、上位装置からのリードコマンドを受け取ると、書き損じ補償制御部103は、上位装置の発行したコマンドから一意に決定する何れかの磁気ディスクのアドレスに対しデータの読み込みを行う(ステップS601)。この場合、磁気ディスク1に決定し、データを読み込むとする。
【0083】
まずは、メモリ106上の磁気ディスク1のテーブル(図5)上に実際に読み込みを行った磁気ディスク1のアドレスのエントリが無いか検索を行う(ステップS602)。
【0084】
その結果、エントリが存在すれば、磁気ディスク1から読み込んだデータを元に、ライトで行った時と同様の符号の計算を行う(ステップS603、ステップ604)。
【0085】
次に、ステップS602でメモリ106の磁気ディスク1のテーブルで検索を行ったアドレスのエントリの符号の取得を行い、磁気ディスク1からデータを読み込み生成した符号との比較を行う(ステップS605)。
【0086】
比較の結果、一致すれば、データを書き込んだ時のデータと符号が一致することになるので、書き損じが発生していないことになり、媒体上のデータは正しく書き込まれていることになる。そこでメモリ106上のテーブル(図5)から、磁気ディスク1の該当アドレスのエントリの削除を行い、以後のリードコマンドでの書き損じのチェックを行わないようにする(ステップS606、ステップS617)。
【0087】
その後、磁気ディスク1から読み込んだデータを上位装置に転送し、リードコマンドの処理を終了する(ステップS615)。
【0088】
ステップS603でエントリが存在しない場合、該当するアドレス磁気ディスクのデータは、すでに書き損じのチェックを行ったことを示しているので、該データを上位装置に転送し、リードコマンドの処理を終了する(ステップS615)。
【0089】
また、ステップS606で磁気ディスク1から読み込んだデータから生成した符号とメモリ106上の磁気ディスク1のテーブル上の符号と一致しない場合、冗長系を構成している磁気ディスクのアドレスのデータの読み込みを行う(ステップ607)。ここでは仮に磁気ディスク2の読み込みを行うとする。
【0090】
磁気ディスク1のリードを行った時と同様に、メモリ106上の磁気ディスク2のテーブル(図5)上に実際に読み込みを行った磁気ディスク2のアドレスのエントリが無いか検索を行う(ステップS608)。
【0091】
その結果、エントリが存在すれば、磁気ディスク2から読み込んだデータを元に、ライトで行った時と同様の符号の計算を行う(ステップS609、ステップ610)。
【0092】
次に、ステップS608においてメモリ106の磁気ディスク2のテーブルで検索を行ったアドレスのエントリの符号の取得を行い、磁気ディスク2からデータを読み込み、生成した符号との比較を行う(ステップS611)。
【0093】
比較の結果、一致すれば、データを書き込んだ時のデータと符号が一致することになるので、書き損じが発生していないことになり、媒体上のデータは正しく書き込まれていることになる。そこで、メモリ106上のテーブル(図5)から、磁気ディスク2の該当アドレスのエントリの削除を行い、以後のリードコマンドでの書き損じのチェックを行わないようにする(ステップS612、ステップS613)。
【0094】
そこで、磁気ディスク2から読み込んだデータの冗長系を構成する磁気ディスク1のアドレスに書き込み、磁気ディスク1のデータの再構成を行う(ステップS614)。
【0095】
この時、磁気ディスク2のアドレスのエントリの削除/書き換えは行わず、次のリードが行われる機会で書き損じのチェックを行うようにする。
【0096】
その後、正常に読み込まれた磁気ディスク2のデータを上位装置に転送し、リードコマンドの処理を終了する(ステップS615)。
【0097】
ステップS609でエントリが存在しない場合、該当するアドレスの磁気ディスクのデータは、すでに書き損じのチェックを行ったことを示しているので、該データを用いてステップ614のデータ再構成処理に移行する(ステップS609)。
【0098】
以降、同様に、磁気ディスク2から読み込んだデータの冗長系を構成する磁気ディスク1のアドレスに書き込み、磁気ディスク1のデータの再構成を行う(ステップS614)。
【0099】
この時、磁気ディスク2のアドレスのエントリの削除/書き換えは行わず、次のリードが行われる機会で書き損じのチェックを行うようにする。
【0100】
その後、正常に読み込まれた磁気ディスク2のデータを上位装置に転送し、リードコマンドの処理を終了する(ステップS615)。
【0101】
ステップS612で符号が一致しない時には、冗長系を構成する磁気ディスクが更に存在するかチェックを行う(ステップS616)。
【0102】
今回の場合、磁気ディスク2以外に磁気ディスク3〜磁気ディスクNが存在する為、冗長系の磁気ディスクは存在することになる。その場合、磁気ディスク3に対するデータの読み込みを行い、ステップS607以降の処理を再び繰り返す。
【0103】
ステップS607で冗長系を構成する磁気ディスクNに対する処理が行われて、ステップS616に到った場合、即ち磁気ディスク1〜磁気ディスクNの全てに書き損じが発生した場合には、上位装置に対して、上位装置の指定するアドレスのデータにエラーが発生したことを上位装置に報告し、リードコマンドを終了する(ステップS617)。
【0104】
次に、本実施の形態の効果について説明する。本実施の形態では、第一の実施の形態の効果である、書き込んだデータの書き損じ現象の検出と、冗長性を持ったアレイ装置の場合、書き損じが発生していない磁気ディスクのデータを、書き損じの発生した磁気ディスクへ書き込むことでデータの再構成を可能としていることに加えて、磁気ディスク毎に書き損じのチェックを行うテーブルを保持することにより、書き損じのチェックのリードの際に、冗長化が行われている片方の磁気ディスクのみのリードで済ませることができ、磁気ディスクに対するアクセスを低減することができるというさらなるメリットを持つ。
【産業上の利用可能性】
【0105】
本発明によれば、磁気ディスクである磁気ディスク装置や光ディスク装置を冗長化して持つディスクアレイ装置やフラッシュメモリ等の不揮発メモリを複数持ち、その間で障害に備えてコピーを持つコンピューターシステムなどに適用できる。また、コンピューター(サーバやパーソナルコンピューター等)内蔵の冗長化の取られた磁気ディスクといった用途にも適用できる。
【図面の簡単な説明】
【0106】
【図1】本発明の第1および第2の実施形態におけるディスクアレイシステムを示すブロック図である。
【図2】磁気ディスクの構成を示す図である。
【図3】ライト時の動作を示すフローチャートである。
【図4】本発明の第1の実施形態におけるリード時の動作を示すフローチャートである。
【図5】本発明の第1の実施形態におけるメモリ上のテーブルを示す図である
【図6】本発明の第2の実施形態におけるリード時の動作を示すフローチャートである。
【図7】本発明の第2の実施形態におけるメモリ上のテーブルを示す図である
【符号の説明】
【0107】
101 ホストインターフェイス制御部
103 書き損じ補償制御部
104−1 磁気ディスク1
104−2 磁気ディスク2
104−N 磁気ディスクN
106 メモリ

【特許請求の範囲】
【請求項1】
上位装置からの書き込みデータに対して一意性を保証する符号を生成し、該データと該符号とを磁気ディスクに連続して書き込む書き込み手段と、
該符号と上位装置から指定されたアドレスとを対応づけて格納する記憶手段と、
上位装置からのリード時に上位装置の指定するアドレスから決まる磁気ディスクのアドレスで前記記憶手段上の磁気ディスク毎のテーブルを参照し、該アドレスに一致する符号があれば、磁気ディスクから読み出したデータから書き込みと同じ方法で符号の生成を行い、前記記憶手段上の符号と比較を行うことで障害を検出する検出手段と、
を備えたことを特徴とするディスクアレイシステム。
【請求項2】
前記磁気ディスクが冗長化されていることを特徴とする請求項1記載のディスクアレイシステム。
【請求項3】
前記検出手段が、前記記憶手段上の符号と前記ディスクから生成した符号とが一致ない場合、書き込み時にエラーが発生した旨を前記上位装置に報告することを特徴とする請求項1または2に記載のディスクアレイシステム。
【請求項4】
前記検出手段が、前記記憶手段上の符号と前記ディスクから生成した符号とが一致ない場合、前記書き込み手段は、書き込み障害の検出されたデータを、他の磁気ディスクに存在する書き込み障害の検出されていない正常な冗長化データで上書きすることを特徴とする請求項2記載のディスクアレイシステム。
【請求項5】
上位装置からの書き込みデータに対して一意性を保証する符号を生成し、該データと該符号とを磁気ディスクに連続して書き込むステップと、
該符号と上位装置から指定されたアドレスとを対応づけて記憶手段に格納するステップと、
上位装置からのリード時に上位装置の指定するアドレスから決まる磁気ディスクのアドレスで前記記憶手段上の磁気ディスク毎のテーブルを参照し、該アドレスに一致する符号があれば、磁気ディスクから読み出したデータから書き込みと同じ方法で符号の生成を行い、前記記憶手段上の符号と比較を行うことで障害を検出するステップと、
を有することを特徴とする書き込み障害の検出方法。
【請求項6】
前記記憶手段上の符号と前記ディスクから生成した符号が一致しない場合、書き込み時にエラーが発生した旨を前記上位装置に報告するステップを有することを特徴とする請求項5記載の書き込み障害の検出方法。
【請求項7】
前記記憶手段上の符号と前記ディスクから生成した符号が一致しない場合、書き込み障害の検出されたデータを、他の磁気ディスクに存在する書き込み障害の検出されていない正常な冗長化データで上書きするステップを有することを特徴とする請求項5記載の書き込み障害の検出方法。
【請求項8】
コンピュータに、
データと該符号とを磁気ディスクに連続して書き込むステップと、
該符号と上位装置から指定されたアドレスとを対応づけて記憶手段に格納するステップと、
上位装置からのリード時に上位装置の指定するアドレスから決まる磁気ディスクのアドレスで前記記憶手段上の磁気ディスク毎のテーブルを参照し、該アドレスに一致する符号があれば、磁気ディスクから読み出したデータから書き込みと同じ方法で符号の生成を行い、前記記憶手段上の符号と比較を行うことで障害を検出するステップと、を実行させることを特徴とする書き込み障害検出プログラム。
【請求項9】
前記コンピュータに、前記記憶手段上の符号と前記ディスクから生成した符号が一致しない場合、書き込み時にエラーが発生した旨を前記上位装置に報告するステップを実行させることを特徴とする請求項8記載の書き込み障害検出プログラム。
【請求項10】
前記コンピュータに、前記記憶手段上の符号と前記ディスクから生成した符号が一致しない場合、書き込み障害の検出されたデータを、他の磁気ディスクに存在する書き込み障害の検出されていない正常な冗長化データで上書きするステップを実行させることを特徴とする請求項8記載の書き込み障害検出プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2010−49394(P2010−49394A)
【公開日】平成22年3月4日(2010.3.4)
【国際特許分類】
【出願番号】特願2008−211668(P2008−211668)
【出願日】平成20年8月20日(2008.8.20)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】