(57)【要約】【課題】  データ記憶装置内のデータの書き込み／読み出しのエラー発生時において、短時間で処理することが可能なエラーリカバリ方式と、このエラーリカバリ方式を用いてエラーリカバリを試みるデータ記憶装置を提案することを目的とする。【課題を解決するための手段】  データアクセスエラーに対して、複数のエラーリカバリステップを備えるエラーリカバリプロシジャに従ってエラーリカバリ処理するデータ記憶装置であって、ユーザデータを記憶するメディアのデータ領域にアクセスするヘッド１１１と、データ領域へのアクセスエラーに対して、そのアクセスエラーが発生したセクタのアドレス情報と、データ領域のアドレス情報及びそれに関連付けられた過去のエラーリカバリ情報を有するエラーリカバリログ１５１と、を使用してエラーリカバリ処理を制御するコントローラと、を備えるデータ記憶装置。【選択図】  図１
2006338734.tif 000002
【特許請求の範囲】
【請求項１】
データアクセスエラーに対して、複数のエラーリカバリステップを備えるエラーリカバリプロシジャに従ってエラーリカバリ処理するデータ記憶装置であって、
ユーザデータを記憶するメディアのデータ領域にアクセスするヘッドと、
前記データ領域へのアクセスエラーに対して、そのアクセスエラーが発生したセクタのアドレス情報と、前記データ領域のアドレス情報及びそれに関連付けられた過去のエラーリカバリ情報を有するエラーリカバリログと、を使用してエラーリカバリ処理を制御するコントローラと、
を備えるデータ記憶装置。
【請求項２】
前記データ記憶装置は複数のヘッドを備え、
前記コントローラは、ヘッド番号が同一であるセクタに対して同一のエラーリカバリログを使用する、
請求項１に記載のデータ記憶装置。
【請求項３】
前記データ記憶装置は複数のヘッドを備え、
前記コントローラは、ヘッド番号及びシリンダ番号領域が同一であるセクタに対して同一のエラーリカバリログを使用する、
請求項１に記載のデータ記憶装置。
【請求項４】
前記コントローラは、ゾーンが同一であるセクタに対して同一のエラーリカバリログを使用する、
請求項１に記載のデータ記憶装置。
【請求項５】
前記エラーリカバリログは、最近にエラー回復したエラーリカバリステップ特定情報を含み、
前記コントローラは、前記エラーリカバリログに対応するセクタのアクセスエラーに対して、当該エラーリカバリログに含まれる最近エラーリカバリステップを最初に実行するように制御する、
請求項１に記載のデータ記憶装置。
【請求項６】
前記エラーリカバリログは、エラーリカバリステップ特定情報とそのエラーリカバリステップの過去のエラー回復回数とを含み、
前記コントローラは、前記エラーリカバリログに対応するセクタのアクセスエラーに対して、当該エラーリカバリログに含まれるエラー回復回数を使用して、エラーリカバリステップの実行順序を決定する、
請求項１に記載のデータ記憶装置。
【請求項７】
前記コントローラは、最もエラー回復回数の大きいエラーリカバリステップを実行順序の最初に設定する、請求項６に記載のデータ記憶装置。
【請求項８】
前記コントローラは、エラー回復回数の大きい順に各エラーリカバリステップの実行順序を決定する、請求項６に記載のデータ記憶装置。
【請求項９】
前記コントローラは、前記データ領域へのアクセスが連続する複数セクタへのアクセスであるかを判定し、前記データ領域へのアクセスが連続する複数セクタへのアクセスである場合、複数セクタへのアクセスに対応して登録されているエラーリカバリステップ実行順序に従い、
連続する複数セクタへのアクセスでない場合、アクセスセクタのアドレス情報と前記エラーリカバリログとを使用してエラーリカバリ処理を制御する、
請求項１に記載のデータ記憶装置。
【請求項１０】
データアクセスエラーに対して、複数のエラーリカバリステップを備えるエラーリカバリプロシジャに従ってエラーリカバリ処理する方法であって、
ユーザデータを記憶するデータ領域のアドレス情報と、そのアドレス情報に関連付けられた過去のエラーリカバリ情報と、を有するエラーリカバリログを記憶し、
前記データ領域へのアクセスエラーに対して、そのアクセスエラーが発生したセクタのアドレス情報と、前記エラーリカバリログとを使用して、エラーリカバリステップの実行順序を決定する、エラーリカバリ方法。
【請求項１１】
前記エラーリカバリ方法は、ヘッド番号が同一であるセクタに対して同一のエラーリカバリログを使用する、
請求項１０に記載のエラーリカバリ方法。
【請求項１２】
前記エラーリカバリ方法は、ヘッド番号及びシリンダ番号領域が同一であるセクタに対して同一のエラーリカバリログを使用する、
請求項１０に記載のエラーリカバリ方法。
【請求項１３】
前記エラーリカバリ方法は、ゾーンが同一であるセクタに対して同一のエラーリカバリログを使用する、
請求項１０に記載のエラーリカバリ方法。
【請求項１４】
前記エラーリカバリログは、最近にエラー回復したエラーリカバリステップ特定情報を含み、
前記エラーリカバリログに対応するセクタのアクセスエラーに対して、当該エラーリカバリログに含まれる最近エラーリカバリステップを最初に実行する、
請求項１０に記載のエラーリカバリ方法。
【請求項１５】
前記エラーリカバリログは、エラーリカバリステップ特定情報とそのエラーリカバリステップの過去のエラー回復回数とを含み、
前記エラーリカバリログに対応するセクタのアクセスエラーに対して、当該エラーリカバリログに含まれるエラー回復回数を使用して、エラーリカバリステップの実行順序を決定する、
請求項１０に記載のエラーリカバリ方法。
【請求項１６】
最もエラー回復回数の大きいエラーリカバリステップを実行順序の最初に設定する、
請求項１５に記載のエラーリカバリ方法。
【請求項１７】
エラー回復回数の大きい順に各エラーリカバリステップの実行順序を決定する、
請求項１５に記載のエラーリカバリ方法。
【請求項１８】
前記データ領域へのアクセスが連続する複数セクタへのアクセスであるかを判定し、
前記データ領域へのアクセスが連続する複数セクタへのアクセスである場合、複数セクタへのアクセスに対応して登録されているエラーリカバリステップ実行順序に従い、
連続する複数セクタへのアクセスでない場合、アクセスセクタのアドレス情報と前記エラーリカバリログとを使用してエラーリカバリ処理を行う、
請求項１０に記載のエラーリカバリ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ記憶装置及びエラーリカバリ方法に関し、特に、エラーリカバリプロシジャにおける各エラーリカバリステップの実行順序制御に関する。
【背景技術】
【０００２】
記録密度の向上につれ、データ記憶装置でのデータ書き込みエラー及びデータ読み出しエラーが発生し、データ記憶装置内でのエラーリカバリ処理の発生頻度が高くなっている。
【０００３】
データ記憶装置は、従来、内部に複数ステップからなる所定のエラーリカバリプロシジャを記憶保持しており、データ書き込み、データ読み出しでエラーが発生すると、上記エラーリカバリプロシジャの複数ステップを所定の順番に実行し、エラーリカバリを試みていた。
【０００４】
近年、コンピュータシステムの高速化および信頼性の向上から、データ記憶装置も、上位に接続されているホストコンピュータやストレージ制御装置からの時間的制約を受けている。データ記憶装置内のエラーリカバリもリカバリタイムリミットにより規定されている。データ記憶装置はこのリカバリタイムリミットの制限内で、効率よくエラーリカバリを実行し、エラーを回復する必要がある。
【０００５】
エラーリカバリの効率化およびエラーリカバリ時間の短縮に関しては、リカバリタイムリミット内で効率よく処理できるように、前記エラーリカバリプロシジャの各ステップの実行時間を考慮して、各ステップの実行順、リトライ回数を変更するという解決方法がある（例えば、特許文献１）。
【特許文献１】特開平１１−０６５７７８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１においては、リカバリタイムリミットすべての時間を用いることを考えているため、エラーリカバリにかかる時間の短縮にはなっていない。また、エラーリカバリの順序を決定するのに、それぞれのステップにかかるエラーリカバリの実行時間から求めている。そのため、処理効率の点から順序を並べているわけではない。
【０００７】
そこで、データ記憶装置内のデータの書き込み／読み出しのエラー発生時において、短時間で処理することが可能なエラーリカバリ方式を提案することを目的とする。また、ホストコンピュータやストレージ制御装置からの書き込み要求または読み出し要求のあったデータで書き込みエラーまたは読み出しエラー発生した時に、上記のエラーリカバリ方式を用いてエラーリカバリを試みるデータ記憶装置を提供することである。
【課題を解決するための手段】
【０００８】
本発明の一つの態様に係るデータ記憶装置において、データアクセスエラーに対して、複数のエラーリカバリステップを備えるエラーリカバリプロシジャに従ってエラーリカバリ処理するデータ記憶装置であって、ユーザデータを記憶するメディアのデータ領域にアクセスするヘッドと、前記データ領域へのアクセスエラーに対して、そのアクセスエラーが発生したセクタのアドレス情報と、前記データ領域のアドレス情報及びそれに関連付けられた過去のエラーリカバリ情報を有するエラーリカバリログと、を使用してエラーリカバリ処理を制御するコントローラと、を備えるものである。
【０００９】
本発明の他の態様に係るデータリカバリ方式において、データアクセスエラーに対して、複数のエラーリカバリステップを備えるエラーリカバリプロシジャに従ってエラーリカバリ処理する方法であって、ユーザデータを記憶するデータ領域のアドレス情報と、そのアドレス情報に関連付けられた過去のエラーリカバリ情報と、を有するエラーリカバリログを記憶し、前記データ領域へのアクセスエラーに対して、そのアクセスエラーが発生したセクタのアドレス情報と、前記エラーリカバリログとを使用して、エラーリカバリステップの実行順序を決定する、エラーリカバリ方法である。
【発明の効果】
【００１０】
読み出しエラー／書き込みエラーが発生したときに最初に行うエラーリカバリ動作を、アドレスごとのログ情報から決定することによって、エラーリカバリする可能性の高いものからエラーリカバリ処理を行うことが可能となり、短時間で効率良くエラーリカバリ処理を実行することができる。
【発明を実施するための最良の形態】
【００１１】
実施の形態１．
エラーリカバリに効果のあるエラーリカバリプロシジャのステップは、データ記憶装置個体で異なり、また、同一データ記憶装置内でもエラーの発生したアドレスによって異なり、さらには、時間、温度などの動作環境によっても異なると考えられる。
【００１２】
そのため、本実施の形態においては、エラーの発生したアドレス、上位に接続されているホストコンピュータやストレージ制御装置からの書き込み要求又は読み出し要求、エラーが回復した時のエラーリカバリプロシジャのステップ番号、エラーリカバリした頻度をひとつの組み合わせとしたログ情報を記憶している。
【００１３】
データ書き込み要求またはデータ読み出し要求のあったデータでエラーが発生した時には、上記のログ情報を参照し、エラーの発生したアドレス、書き込み要求または読み出し要求から、エラーリカバリした頻度の高いエラーリカバリプロシジャのステップを最初に実行することで、効率よくエラーリカバリ処理を実行し、エラーリカバリを試みる。
【００１４】
また、本実施の形態においては、エラーの発生したアドレスとしてヘッド番号を用いている。つまり、同一のヘッド番号に対応するセクタに対して同一のログ情報を使用してステップの実行順序を決定する。なお、アドレスに関連付けられたログ情報の使用によるエラーリカバリプロシジャ制御は、読み出しもしくは書き込みの一方のみを行うデータ記憶装置に適用することも可能である。
【００１５】
図１は、本実施の形態に係るデータ記憶システム１の構成図を示す。データ記憶システム１は、データ記憶装置１０とホストコンピュータ１３を有し、ホストＩ／Ｆ２１によってデータ記憶装置１０とホストコンピュータ１３が接続されている。なお、以下の実施形態において、データ記憶装置として、ユーザデータを記憶するメディアとして磁気ディスクを備えるハードディスクドライブを使用する例を説明する。
【００１６】
ホストＩ／Ｆ２１として、コンピュータと記憶装置間のＩ／Ｆとして標準であり広く普及しているＦｉｂｅｒ  Ｃｈａｎｎｅｌを用いる。そのＵＬＰ（Upper Layer Protocol）はＳＣＳＩである。
【００１７】
データ記憶装置１０は、ドライブ１１とデータ記憶装置制御部１２を有している。ドライブ１１は、データを記録再生するヘッド１１１、ディスク１１２、ディスク１１２を回転させるスピンドルモータ１１３、ヘッド１１１をディスク１１２の所望の位置に移動するアクチュエータ１１４、スピンドルモータ１１３の回転制御及びアクチュエータ１１４の移動制御をすることによってヘッド１１１の位置決め制御を行うドライブ制御回路１１５、データ読み出し回路１１６、及びデータ書き込み回路１１７を有している。
【００１８】
ドライブ制御回路１１５はアクチュエータ制御信号３３によってアクチュエータ１１４の移動制御を、スピンドルモータ制御信号３４によってスピンドルモータ１１３の回転制御を行っている。ドライブ１１のデータの読み出し／書き込みを行うアドレスは、シリンダ番号、ヘッドの番号、セクタ番号が一組となって指定されている。
【００１９】
さらに、ドライブ１１のデータを記憶する領域は、システム管理エリアとデータエリアに大別される。システム管理エリアは、データ記憶装置１０が動作する上で必要な情報および管理情報が記憶されている。例えば、ヘッド１１１の本数やディスク円板１１２の枚数などのドライブ１１の構成情報、データ記憶装置制御部１２内のマイクロプロセッサ１２４が実行するプログラムおよびそのプログラムを実行するために必要な情報、ＳＣＳＩのＭｏｄｅ  Ｐａｇｅ  Ｐａｒａｍｅｔｅｒｓ、及びディフェクトリストなどである。
【００２０】
また、システム管理エリアの情報は、例えば、Ｐｏｗｅｒ  Ｏｎ  Ｒｅｓｅｔ処理のときなど、必要に応じてデータ記憶装置制御部１２に読み出される。データエリアは、ホストコンピュータ１３とデータ記憶装置１０との間で送受信されるユーザデータを記憶保持する領域である。これは、例えば、複数シリンダからなる１５のゾーンに分かれており、それぞれのゾーンごとにデータの記録密度が異なり、各シリンダのセクタ数が異なっているものがある。
【００２１】
データ記憶装置制御部１２は、ホストＩ／Ｆ制御部１２１、ＨＤＣ１２２、データバッファ１２３、マイクロプロセッサ１２４、ＲＯＭ１２５、及びＲＡＭ１２６を有している。また、データ記憶装置制御部１２は、ホストコンピュータ１３とドライブ１１間でデータを転送するために用いられる３２ビットのデータバス２２ａ、２２ｂ、マイクロプロセッサ１２４が各部位を制御するための１６ビットの制御バス２３を有している。さらに、データ読み出し回路１１６からＨＤＣ１２２に送信される読み出し信号３１とＨＤＣ１２２からデータ書き込み回路１１７に送信される書き込み信号３２が存在する。
【００２２】
ホストＩ／Ｆ制御部１２１は、ホストＩ／Ｆ２１を制御する回路であり、ホストコンピュータ１３とデータ記憶装置１０との間でデータの送受信を制御する回路である。ＨＤＣ１２２は、ホストＩ／Ｆ制御部１２１とデータバッファ１２３との間のデータの送受信の制御、ドライブ１１へのデータ書き込み制御、及びドライブ１１からのデータ読み出し制御を行っている。
【００２３】
データバッファ１２３は、ホストＩ／Ｆ２１とドライブ１１のデータ転送速度の差を吸収するためのバッファである。マイクロプロセッサ１２４は、１６ビットの制御バス２３を用いて、データ記憶装置制御部１２の統括制御を行っている。また、マイクロプロセッサ１２４は、ホストコンピュータ１３からホストＩ／Ｆ２１を介して受信したＳＣＳＩコマンドの解釈及び実行と、ホストコンピュータ１３とデータ記憶装置１０との間におけるデータのフロー制御を行っている。
【００２４】
このデータのフロー制御は、マイクロプロセッサ１２４が制御バス２３を用いて、ホストＩ／Ｆ制御部１２１、ＨＤＣ１２２に転送を指示し、データの転送をホストＩ／Ｆ制御部１２１及びＨＤＣ１２２が制御することによって行われている。
【００２５】
ＲＯＭ１２５は、例えば５１２ＫＢのフラッシュメモリを用い、マイクロプロセッサ１２４が実行するプログラムを格納する。ＲＡＭ１２６は、例えば５１２ＫＢのＳＲＡＭを用い、マイクロプロセッサ１２４がプログラムを実行するためのワークメモリとして用いられている。
【００２６】
ホストコンピュータ１３は、ＳＣＳＩコマンドのＷＲＩＴＥコマンドでデータ記憶装置１０にデータ書き込みを要求し、ＳＣＳＩコマンドのＲＥＡＤコマンドでデータ記憶装置１０にデータ読み出しを要求する。また、エラーリカバリの許容時間は、ＳＣＳＩのＭｏｄｅ  Ｐａｒａｍｅｔｅｒ  Ｐａｇｅ１ｈのＲｅｃｏｖｅｒｙ  Ｔｉｍｅ  Ｌｉｍｉｔで規定される。
【００２７】
ホストコンピュータ１３がデータ記憶装置１０にＷＲＩＴＥコマンドを出力することによってデータ書き込みを要求した場合、ホストコンピュータ１３からホストＩ／Ｆ２１を介して転送されたデータは、ホストＩ／Ｆ制御部１２１及びＨＤＣ１２２を介して、データバッファ１２３に格納される。
【００２８】
さらに、このデータは、ＨＤＣ１２２によってＥＣＣなどの冗長データを付加され、パラレルデータからシリアルデータに変換される。変換されたデータは、書き込み信号３２として、ＨＤＣ１２２からドライブ１１内のデータ書き込み回路１１６に出力される。
【００２９】
ドライブ制御回路１１５がアクチュエータ１１４を制御し、ヘッド１１１を所望のアドレスに移動させた後、データ書き込み回路１１６は、上記のデータを所望のアドレスに記憶する。このアドレスは、ディスク円板１１２上のシリンダ番号、ヘッド番号、セクタ番号で示されている。
【００３０】
ホストコンピュータ１３がデータ記憶装置１０にＲＥＡＤコマンドを出力することによってデータ読み出しを要求した場合、ドライブ制御回路１１５がアクチュエータ１１４を制御し、ヘッド１１１を所望のアドレスに移動させた後、データ読み出し回路１１６は、読み出し信号３１を読み出す。この読み出し信号３１はＨＤＣ１２２に出力され、ＨＤＣ１２２がＥＣＣなどの冗長データを用いて、読み出し信号３１が正しく読み出されたことを確認する。
【００３１】
その後、読み出し信号３１は、冗長データが取り除かれ、シリアルデータからパラレルデータに変換される。このパラレルデータが、データバッファ１２３に格納される。データバッファ１２３に格納されたデータは、ＨＤＣ１２２、ホストＩ／Ｆ制御部１２１、及びホストＩ／Ｆ２１を介してホストコンピュータ１３に転送される。
【００３２】
上述のＲＥＡＤ／ＷＲＩＴＥコマンドを実行する際、データ読み出しエラー／データ書き込みエラーが発生する場合がある。このとき、ＨＤＣ１２２は、エラー発生時にデータ読み出し／データ書き込みが正常に行われるまで、エラーリカバリ処理を行う。
【００３３】
図２はエラーリカバリプロシジャの各ステップのリカバリ内容を示すテーブルの例である。データ記憶装置１０は、データ読み出しエラー発生時に使用するリードリカバリプロシジャ（図２（ａ）参照）と書き込みエラー発生時に使用するライトリカバリプロシジャ（図２（ｂ）参照）を個別に持っている。
【００３４】
リカバリ処理には様々な種類があり、ＨＤＣ１２２は、複数のリカバリ処理がステップごとに並んでいるエラーリカバリプロシジャに従ってエラーリカバリ動作を行っている。通常の場合、ステップ番号が１のステップのエラーリカバリ処理を行い、ステップ番号が１のステップのエラーリカバリ処理によって、データ読み出し／書き込みが正常に行われるかを検知する。
【００３５】
ここで、データ読み出し／書き込みが正常に行われなければ、ステップ番号が２のステップのエラーリカバリ処理を行われることになる。このように、ＨＤＣ１２２はエラーリカバリプロシジャにおいて規定されているエラーリカバリステップの順番に従って、データ読み出し／書き込みが正常に行われるまでエラーリカバリ処理を行っていく。
【００３６】
データ記憶装置１０は、上記エラーリカバリプロシジャの各ステップで、データ読み出し回路１１６、データ書き込み回路１１７の設定変更、ヘッド１１１と読み出し／書き込みを行うトラックとのオフトラック量変更を行って、エラーリカバリの許容時間までデータ書き込みまたはデータ読み出しをリトライすることによって、データ読み出し／書き込みが正常に行われるように、エラーリカバリを試みている。
【００３７】
ここで、本実施の形態に係るデータ記憶装置１０は、データ書き込み／データ読み出し時にエラーが発生した場合に、そのヘッド番号とＳＣＳＩコマンドとにおいて最近に発生したエラーをエラーリカバリした、エラーリカバリプロシジャのステップ番号のエラーリカバリステップを最初に実行する。
【００３８】
データ記憶装置１０において、データ記憶装置制御部１２内のＲＯＭ１２５内にエラーリカバリテーブル１４を、ＲＡＭ１２６内にエラーリカバリログテーブル１５を有している。エラーリカバリテーブル１４は、ステップ番号とそのステップ番号においてマイクロプロセッサ１２４が実行する関数のアドレスを記憶保持している。さらに、データ記憶装置１０は、データ読み出し時のエラーリカバリ用とデータ書き込み時のエラーリカバリ用のエラーリカバリテーブル１４を個別に記憶保持している。
【００３９】
図３は、エラーリカバリテーブル１４のテーブル構成例を示す。エラーリカバリテーブル１４は、エラープロシジャのステップ番号の数以上のエラーリカバリステップ１４１から構成されており、例えばエラーリカバリステップ１４１を４８個登録可能とする。各エラーリカバリステップ１４１は、ステップ番号１４２とファンクションポインタ１４４を有している。この一例として、図３に示すように、エラーリカバリステップ１４１を８バイトとし、２バイトのステップ番号１４２、２バイトのＲｅｓｅｒｖｅｄ領域１４３、４バイトのファンクションポインタ１４４を有している。
【００４０】
ステップ番号１４２は、エラーリカバリプロシジャの各ステップの番号を記憶保持する領域である。ファンクションポインタ１４４は、エラーリカバリプロシジャの各ステップでマイクロプロセッサ１２４が実行する関数のアドレスを記憶保持する領域である。Ｒｅｓｅｖｅｄ領域１４３は、４バイトで切れるように調整するための領域である。ステップ番号１４２の最小値は１であり、エラーリカバリステップ１４１は、ステップ番号１４２の順番に配置されている。
【００４１】
マイクロプロセッサ１２４は、データ書き込み／読み出しエラーが発生した時に、その書き込み／読み出しのコマンドに応じたエラーリカバリテーブル１４を選択する。その後、エラーリカバリプロシジャのステップ番号１４２に従って、ステップ番号１４２に応じたファンクションポインタ１４４が示すアドレスの関数を実行し、エラーリカバリプロシジャの各ステップを個別に実行する。
【００４２】
本実施の形態におけるデータ記憶装置１０では、データ書き込み／読み出しエラーが発生したときに、最初に行うステップ番号のエラーリカバリ動作を、マイクロプロセッサ１２４がログ情報に基づいて、最初に実行するエラーリカバリステップを決定し、その後、エラーリカバリプロシジャにおいてそのエラーリカバリステップのあとのエラーリカバリステップを実行してエラーリカバリを行う。また、エラーが発生したアドレスに対応するログ情報が存在しない場合には、エラーリカバリプロシジャのステップ番号１のエラーリカバリ動作からステップ番号の順番に、許容時間の間に、エラーリカバリ動作を行う。
【００４３】
本実施の形態に係るデータ記憶装置１０においては、データ記憶装置制御部１２内のＲＡＭ１２６にエラーリカバリログテーブル１５を配置する。エラーリカバリログテーブル１５は、エラーの発生したアドレス、ＳＣＳＩコマンド（ＲＥＡＤコマンド又はＷＲＩＴＥコマンド）、エラーリカバリした時のエラーリカバリプロシジャのステップ番号、及びエラーリカバリした頻度を一組としたログ情報を記憶している。データ読み出し時のエラーリカバリ用とデータ書き込み時のエラーリカバリ用のエラーリカバリログテーブル１５を個別に有している。
【００４４】
本実施の形態に係るデータ記憶装置１０においては、このエラーの発生したアドレスとしてヘッド番号のみを用いている。これは、エラーリカバリの方法が磁気ディスクの面ごとに相違することが多く、ヘッド番号ごとに、エラーリカバリの方法を分けることによって、それぞれの磁気ディスクの面ごとにエラーリカバリ処理を最適化することが可能となるからである。
【００４５】
図４にエラーリカバリログテーブル１５のテーブル構成例を示す。エラーリカバリログテーブル１５は、複数のエラーリカバリログ１５１が登録可能となっている。例えば、４８個のエラーリカバリログ１５１が登録可能としている。
【００４６】
また、エラーリカバリログ１５１は、エラーが発生したＬＢＡ（Logical Block Address）を示すＬＢＡ１５２、エラーが発生したアドレスを示す物理アドレス１５３、この物理アドレス１５３において発生したエラーが回復された、エラーリカバリプロシジャの中のステップ番号１５４、この物理アドレス１５３に発生したエラーが、エラーリカバリプロシジャの中のステップ番号１５４においてエラーリカバリされた回数であるエラー回復回数１５５を有している。
【００４７】
マイクロプロセッサ１２４は、エラーリカバリログテーブル１５を参照や更新をするために、登録ポインタ１５６、登録数１５７、及び参照ポインタ１５８を用いる。登録ポインタ１５６、登録数１５７、及び参照ポインタ１５８は、エラーリカバリログテーブル１５のデータ読み出し時に用いるものとデータ書き込み時に用いるものそれぞれに配置される。
【００４８】
登録ポインタ１５６は、ログ情報を新規登録するときに、書き込みを行うアドレスを格納している。登録数１５７は、エラーリカバリログテーブル１５に登録されているエラーリカバリログ１５１の個数である。参照ポインタ１５８は、エラーリカバリログテーブル１５内の参照するエラーリカバリログ１５１のアドレスを格納している。これらは、例えば、登録ポインタ１５６は４バイトのポインタ、登録数１５７は２バイトの変数、参照ポインタ１５８は４バイトのポインタである。
【００４９】
エラーリカバリログテーブル１５は、データ書き込みエラーまたはデータ読み出しエラーがエラーリカバリしたときに、登録または更新される。また、エラーリカバリログテーブル１５の内容は、登録または更新される度に、ドライブ１１のシステム管理エリアに書き込まれる。また、エラーリカバリログテーブル１５の内容は、Ｐｏｗｅｒ  Ｏｎ  Ｒｅｓｅｔ時に、ドライブ１１のシステム管理エリアから読み出され、ＲＡＭ１２６に配置される。
【００５０】
本実施の形態においては、エラーリカバリログテーブル１５に、同一の物理アドレス１５３のエラーリカバリログ１５１は一つしか記憶しないようにする。このようにすることによって、エラーリカバリの順序を変更するために用いるメモリを多く必要とはせずに、エラーリカバリ処理の効率を上げることができる。図５にエラーリカバリログテーブルの登録更新処理のフローチャートを示す。
【００５１】
まず、データ書き込み／読み出しエラーがエラーリカバリをしたときに、そのデータ書き込み／読み出しエラーのＳＣＳＩコマンドによって、新規登録又は更新するエラーリカバリログテーブル１５を選択する。ＳＣＳＩコマンドがＲＥＡＤコマンドであれば、データ読み出しエラー発生時に用いるエラーリカバリログテーブル１５を選択し、ＳＣＳＩコマンドがＷＲＩＴＥコマンドであれば、データ書き込みエラー発生時に使用するエラーリカバリログテーブル１５を選択する（Ｓ１１）。
【００５２】
次に、エラーが発生したアドレスに対応するエラーリカバリログ１５１が、エラーリカバリログテーブル１５に登録されているか判定する（Ｓ１２）。エラーが発生したアドレスに対応するエラーリカバリログ１５１が登録されていれば、このエラーリカバリログ１５１を更新する（Ｓ１３）。エラーが発生したアドレスに対応するエラーリカバリログ１５１が登録されていなければ、エラーリカバリログ１５１を新規登録する（Ｓ１４）。
【００５３】
また、Ｓ１２における書き込み／読み出しエラーが発生したアドレスに対応するエラーリカバリログ１５１がエラーリカバリログテーブル１５に登録されているか判定する処理を説明する。図６が、書き込み／読み出しエラーが発生したアドレスに対応するエラーリカバリログ１５１がエラーリカバリログテーブル１５に登録されているか判定するときのフローチャートである。
【００５４】
書き込み／読み出しエラーが発生したアドレスに対応するエラーリカバリログ１５１がエラーリカバリログテーブル１５に登録されているかの判定では、参照したエラーリカバリログ１５１の個数を格納するための参照数を用いる。参照数は、ＲＡＭ１２６に一時的に配置される。
【００５５】
まず、登録数１５７を参照して、エラーリカバリログテーブル１５にエラーリカバリログ１５１が一つ以上登録されているかを判定する。エラーリカバリログ１５１がエラーリカバリログテーブル１５に登録されていない場合は、エラーが発生したアドレスに対応するエラーリカバリログ１５１も存在しないと判断され、Ｓ１４のステップに進む（Ｓ１２１）。
【００５６】
エラーリカバリログ１５１が一つ以上登録されている場合、参照ポインタ１５８を初期化する（Ｓ１２２）。ここでいう初期化とは、参照ポインタ１５８をエラーリカバリログテーブル１５の先頭アドレスにすることである。また、参照数を０にする（Ｓ１２３）。
【００５７】
次に、エラーが発生したアドレスと、参照ポインタ１５８が指し示すエラーリカバリログ１５１の物理アドレス１５３とを比較する（Ｓ１２４）。本実施の形態においては、物理アドレス１５３に記憶されているものがヘッド番号であるので、エラーが発生したヘッド番号と、参照ポインタ１５８が指し示すエラーリカバリログ１５１内の物理アドレス１５３に格納されているヘッド番号を比較する。
【００５８】
エラーが発生したアドレスと物理アドレス１５３が一致した場合、エラーが発生したアドレスに対応するエラーリカバリログ１５１がエラーリカバリログテーブル１５に登録されていると判断され、Ｓ１３のステップに進む。
【００５９】
エラーが発生したアドレスと参照ポインタ１５８が指し示すエラーリカバリログ１５１内の物理アドレス１５３が一致しなかった場合、参照ポインタ１５８を更新する（Ｓ１２５）。次に参照数に１を加算し、記憶する（Ｓ１２６）。加算後の参照数と登録数１５７を比較する(Ｓ１２７)。この処理は、エラーリカバリログテーブル１５に登録されているエラーリカバリログをすべて参照したかを判定している。
【００６０】
参照数が登録数１５７より少ない場合は、Ｓ１２４のステップの前に戻して同じ処理を実行する。参照数が登録数１５７より多い場合は、エラーが発生したアドレスに対応するエラーリカバリログ１５１がエラーリカバリログテーブル１５に登録されていないと判断し、Ｓ１４のステップに進む。
【００６１】
次に、Ｓ１３のステップで行っている、エラーリカバリを行ったアドレスのエラーリカバリログ１５１の更新処理について説明する。図７に、エラーリカバリログ１５１の更新処理のフローチャートを示す。本実施の形態に係るデータ記憶装置１０においては、エラーリカバリログテーブル１５上に同一の物理アドレス１５３に対応するエラーリカバリログ１５１を一つしか登録しないようにしている。
【００６２】
まず、エラーリカバリしたステップ番号と、登録されているステップ番号１５４を比較する（Ｓ１３１）。一致していれば、エラーリカバリ回数１５５に記憶されていた数に１を加算した数を、エラー回復回数１５５に記憶する（Ｓ１３２）。不一致であれば、ステップ番号１５４に、エラーリカバリしたステップ番号に入れ替えて記憶する（Ｓ１３３）。そして、エラー回復回数１５５に１を記憶する（Ｓ１３４）。
【００６３】
次に、Ｓ１４のステップで行っている、エラーリカバリログ１５１の新規登録について説明する。図８に、エラーリカバリログ１５１の新規登録のフローチャートを示す。
【００６４】
登録ポインタ１５６が指し示すエラーリカバリログ１５１において、ＬＢＡ１５２にエラーが発生したＬＢＡを（Ｓ１４１）、物理アドレス１５３にエラーが発生した物理アドレスを（Ｓ１４２)、ステップ番号１５４にこのエラーをエラーリカバリしたステップ番号を（Ｓ１４３）、そして、エラー回復回数１５５に１を（Ｓ１４４）、それぞれ記憶する。次に、登録ポインタ１５６を更新し（Ｓ１４５)、登録数１５７にそこに記憶されていた数に１を加算した数を記憶する（Ｓ１４６)。
【００６５】
データ書き込み／データ読み出しエラーが発生した時に、最初に行うエラーリカバリ動作を示すエラーリカバリプロシジャのステップ番号を選択する処理について説明する。図９は、データ書き込み／データ読み出しエラーが発生した時に、最初に行うエラーリカバリ動作を示すエラーリカバリプロシジャのステップ番号を選択する処理のフローチャートである。
【００６６】
ＳＣＳＩコマンドによって、エラーリカバリログテーブル１５を選択する（Ｓ１１）。エラーの発生したアドレスに対応するエラーリカバリログ１５１が、エラーリカバリログテーブル１５に登録されているか判定する処理を行う（Ｓ１２）。
【００６７】
エラーが発生したアドレスに対応するエラーリカバリログ１５１が、エラーリカバリログテーブル１５に登録されていれば、該当するエラーリカバリログ１５１のステップ番号１５４からエラーリカバリプロシジャのステップ番号を選択する（Ｓ１５）。エラーが発生したアドレスに対応するエラーリカバリログ１５１が、エラーリカバリログテーブル１５に登録されていなければ、ステップ番号として１を選択する（Ｓ１６）。
【００６８】
本実施の形態に係るデータ記憶装置１０においては、エラーが発生したアドレスとしてヘッド番号を用いており、ヘッドそれぞれの個別な特性により、データ書き込みエラー／読み出しエラーが発生した場合に、エラーリカバリ動作を効率的に実行できる。
【００６９】
また、時間や温度などの動作環境により、ヘッド１１１とディスク１１２とのデータ記録再生特性が変化して、データ書き込みエラーまたはデータ読み出しエラーに対し有効なエラーリカバリステップが変わってしまった場合でも、最近に起きたエラーに対するエラーリカバリ処理の、エラープロシジャのステップ番号１５４を記憶しているため、エラーリカバリ処理が効率良く実行できる。
【００７０】
さらには、エラーリカバリログテーブル１５に、同一のアドレスに対するエラーリカバリログ１５１が一つしか登録されないため、エラーリカバリログテーブル１５を簡易にすることが可能となるため、高速に検索することができ、エラーリカバリログテーブル１５を記憶するメモリも小さくすることが可能となる。
【００７１】
実施の形態２．
本実施の形態に係るデータ記憶装置においては、エラーリカバリログテーブルに記憶するエラーリカバリログとして、最新におきたエラーをエラーリカバリできたステップ番号のみを記憶し、データ書き込み／データ読み出しエラーが発生したときに、エラーリカバリプロシジャの上記のステップ番号に対応するステップのエラーリカバリ動作を最初に実行している。構成要素や動作原理で実施の形態１と同様のものは省略する。
【００７２】
本実施の形態においては、エラーリカバリログテーブル１５に記憶されるエラーリカバリログ１５１として、ステップ番号のみを記憶している。図１０に本実施の形態に係るデータ記憶装置におけるエラーリカバリログテーブル１５を示す。エラーリカバリログテーブル１５に格納されたエラーリカバリログ１５１には、ステップ番号１５４のみが記憶されている。従って、エラーリカバリログテーブル１５には、一つのエラーリカバリログ１５１が記憶されている。
【００７３】
また、データ書き込みエラーが発生したときに用いるＷＲＩＴＥエラーリカバリログテーブルと、データ読み出しエラーが発生したときに用いるＲＥＡＤエラーリカバリログテーブルを個別に有している。さらに、エラーリカバリログ１５１内のステップ番号１５４の初期値は１とする。
【００７４】
データ書き込みエラー／データ読み出しエラーがエラーリカバリしたときに、そのときのエラーリカバリプロシジャのステップ番号をステップ番号１５４に代入する。そして、データ書き込みエラー／データ読み出しエラーが発生したときに、エラーリカバリプロシジャの、ステップ番号１５４に記憶されたステップ番号に対応するエラーリカバリ動作からエラーリカバリを開始する。
【００７５】
エラーリカバリログテーブル１５の内容は、登録更新される度に、ドライブ１１のシステム管理エリアに書き込まれる。また、エラーリカバリログテーブル１５の内容は、Ｐｏｗｅｒ  Ｏｎ  Ｒｅｓｅｔ時に、ドライブ１１のシステム管理エリアから読み出され、ＲＡＭ１２６に配置される。
【００７６】
シーケンシャルにデータを書き込む又はデータを読み出す要求を実行するときには、データ書き込みエラー／データ読み出しエラーが発生すると、エラーが発生したアドレスの近傍でもデータ書き込みエラー／データ読み出しエラーが発生する可能性が高い。そこで、最新のデータ書き込みエラー／データ読み込みエラーのエラーリカバリ動作のステップ番号を記憶させておくことによって、発生したデータ書き込みエラーまたはデータ読み出しエラーに対して簡便に効率良くエラーリカバリを実行することができる。
【００７７】
実施の形態３．
本実施の形態に係るデータ記憶装置においては、データ読み出しエラー／データ書き込みエラーが発生したアドレスのヘッド番号とシリンダ番号を、エラーリカバリログテーブルに記憶するエラーリカバリログ内の物理アドレスとして記憶している。つまり、同一のヘッド番号とシリンダ番号で特定されるセクタのアクセスエラーに対して、同一のエラーリカバリログを使用してエラーリカバリステップ実行順序を決定する。構成要素や動作原理で実施の形態１と同様のものは省略する。
【００７８】
本実施の形態に係るデータ記憶装置においては、エラーリカバリログ１５１内の物理アドレスの構成が実施の形態１との相違点である。これは、本実施の形態に係るデータ記憶装置が、ヘッド番号及びシリンダ番号領域が同一であるセクタに対して同一のエラーリカバリログ１５１を使用するためである。ここでいう、シリンダ番号領域とは、あるシリンダ番号にシリンダオフセットを加えたシリンダ番号からそのシリンダ番号にシリンダオフセットを引いたシリンダ番号までの領域をいう。
【００７９】
図１１に本実施の形態に係るエラーリカバリログテーブル１５の構成を示す。本実施の形態に係るエラーリカバリログテーブル１５内のエラーリカバリログ１５１においては、物理アドレス１５３が、ヘッド番号１５３ａ、シリンダ番号１５３ｂ、シリンダオフセット１５３ｃ、及びＲＥＳＥＲＶＥＤ領域１５３ｄから構成されている。シリンダオフセット１５３ｃの初期値は、例えば５を用いる。
【００８０】
本実施の形態に係るデータ記憶装置においては、データ書き込みエラー／データ読み出しエラーがエラーリカバリしたときに、エラーが発生したアドレスのヘッド番号１５３ａ、シリンダ番号１５３ｂ及びシリンダオフセット１５３ｃを物理アドレス１５３に格納し、ＬＢＡ１５２、エラーリカバリしたステップ番号１５４、及びエラー回復回数１５５とともに、エラーリカバリログ１５１としてエラーリカバリログテーブル１５に登録される。
【００８１】
データ書き込みエラー／データ読み出しエラーが発生したときには、エラーが発生したアドレスのヘッド番号と一致し、エラーが発生したアドレスのシリンダ番号がシリンダオフセット１５３ｃを加減した値であるエラーリカバリログ１５１を参照し、このエラーリカバリログ１５１のステップ番号１５４に記憶された、エラープロシジャのステップ番号のエラーリカバリ動作を最初に行う。
【００８２】
また、実施の形態１に係るデータ記憶装置において図６のＳ１２４に示した、データ読み出しエラー／データ書き込みエラーが発生したアドレスと、エラーリカバリログテーブル１５に記憶されているエラーリカバリログ１５１の物理アドレス１５３との比較処理が、実施の形態１と本実施の形態に係るデータ記憶装置とで異なる。データ読み出しエラー／データ書き込みエラーが発生したアドレスと、エラーリカバリログテーブル１５に記憶されているエラーリカバリログ１５１の物理アドレス１５３との比較処理のフローチャートを図１２に示す。
【００８３】
本実施の形態に係るデータ記憶装置では、ヘッド番号１５３ａとシリンダ番号１５３ｂのログ情報を基に、最初に行うデータリカバリ動作を決定している。そこで、データ書き込みエラー／データ読み出しエラーが発生したヘッド番号と、参照ポインタ１５８が指し示すエラーリカバリログ１５１内の物理アドレス１５３に記憶されたヘッド番号１５３ａとが一致するかを判定する（Ｓ１５１）。
【００８４】
エラーが発生したヘッド番号と、参照ポインタ１５８が指し示すエラーリカバリログ１５１内の物理アドレス１５３に記憶されたヘッド番号１５３ａとが一致しない場合は、参照ポインタ１５８が指し示すエラーリカバリログ１５１が、上記のエラーに対応するエラーリカバリログ１５１ではないと判定し、図６におけるＳ１２５のステップに進む。
【００８５】
エラーが発生したヘッド番号と、参照ポインタ１５８が指し示すエラーリカバリログ１５１内の物理アドレス１５３に記憶されたヘッド番号１５３ａとが一致する場合は、次にシリンダ番号の比較動作を行う（Ｓ１５２）。
【００８６】
エラーが発生したシリンダ番号が、上記のヘッド番号が一致したエラーリカバリログ１５１内の物理アドレス１５３に記憶されているシリンダ番号１５３ｂに、シリンダオフセット１５３ｃを加減した値の範囲内であるのであれば、このエラーリカバリログ１５１が、上記のエラーが発生したアドレスに対応するエラーリカバリログ１５１であると判定する。
【００８７】
また、エラーが発生したシリンダ番号が、上記のヘッド番号が一致したエラーリカバリログ１５１内の物理アドレス１５３に記憶されているシリンダ番号１５３ｂに、シリンダオフセット１５３ｃを加減した値の範囲内でないのであれば、参照ポインタ１５８が指し示すエラーリカバリログ１５１が、上記のエラーに対応するエラーリカバリログ１５１ではないと判定し、図６におけるＳ１２５のステップに進む。
【００８８】
本実施の形態に係るデータ記憶装置において、エラーが発生した物理アドレス１５３を新規登録する処理を表すフローチャートを図１３に示す。これは、図８におけるＳ１４２の処理である。
【００８９】
まず、登録ポインタ１５６が指し示すエラーリカバリログ１５１において、物理アドレス１５３内のヘッド番号１５３ａに、エラーが発生したアドレスのヘッド番号を記憶し（Ｓ１６１）、シリンダ番号１５３ｂに、エラーが発生したアドレスのシリンダ番号を記憶し（Ｓ１６２）、シリンダオフセット１５３ｃに、５を格納する（Ｓ１６３）。
【００９０】
本実施の形態に係るデータ記憶装置では、データ書き込みエラー／データ読み出しエラーが発生したときに、ヘッド番号とシリンダ番号領域のログ情報を基に、最初に行うデータリカバリ動作を決定している。これは、同一のヘッドで近傍のシリンダで発生したデータ書き込みエラー／データ読み出しエラーに対しても、同じエラーリカバリプロシジャのステップが有効である可能性が高く、エラーリカバリのステップを最初に試みることでエラーリカバリを効率的に実行できる。また、データ書き込みエラー／データ読み出しエラーにはヘッドのずれによって生じることがあるが、これは、シリンダごとにおこることが多く、シリンダ番号ごとにエラーリカバリログを用いることによって効率的にエラーリカバリすることができる。
【００９１】
なお、上記のデータ記憶装置においては、シリンダオフセットに固定値５を記憶し使用したが、シリンダオフセットを最適な値に更新、記憶してもよい。また、上記のデータ記憶装置においては、物理アドレス１５３としてヘッド番号、シリンダ番号、及びシリンダオフセットを用いたが、物理アドレスとしてヘッド番号、シリンダ番号、セクタ番号、及びセクタオフセットを用いてもよい。
【００９２】
実施の形態４．
本実施の形態に係るデータ記憶装置においては、データ読み出しエラー／データ書き込みエラーが発生したアドレスのゾーン番号を、エラーリカバリログテーブルに記憶するエラーリカバリログ内の物理アドレスとして記憶している。つまり、同一のゾーン番号で特定されるセクタのアクセスエラーに対して、同一のエラーリカバリログを使用してエラーリカバリステップ実行順序を決定する。構成要素や動作原理で実施の形態１と同様のものは省略する。
【００９３】
本実施の形態に係るデータ記憶装置においては、エラーリカバリログ１５１内の物理アドレスの構成が実施の形態１との相違点である。図１４に本実施の形態に係るエラーリカバリログテーブル１５の構成を示す。本実施の形態に係るエラーリカバリログテーブル１５内のエラーリカバリログ１５１においては、物理アドレス１５３が、ゾーン番号１５３ｅ、及びＲＥＳＥＲＶＥＤ領域１５３ｄから構成されている。ゾーン番号１５３ｅは、データ書き込みエラー／データ読み出しエラーが発生したアドレスのゾーン番号を記憶する領域である。
【００９４】
データ書き込みエラー／データ読み出しエラーが発生したアドレスと、参照ポインタ１５８が指し示すエラーリカバリログ１５１の物理アドレス１５３を比較するステップＳ１２４において、実施の形態１に係るデータ記憶装置では、アドレスとしてヘッド番号を用いていたが、本実施の形態においては、アドレスとしてゾーン番号を用いている。
【００９５】
磁気ディスクの内周と外周において、記憶するための周波数が変化するため、データの読み出し／書き込みのときに生じるエラーの種類が変化する可能性がある。そのために、本実施の形態においてゾーンごとにエラーリカバリログを用いることによって、上記の原因のエラーに対応することが可能となる
実施の形態５．
本実施の形態に係るデータ記憶装置においては、エラーリカバリログテーブル１５に同一の物理アドレス１５３を持つエラーリカバリログ１５１を複数登録することを可能とする。
【００９６】
データ書き込みエラー／データ読み出しエラーが発生したときに、エラーが発生したアドレスと一致する物理アドレス１５３を持つ、エラーリカバリログ１５１がエラーリカバリログテーブル１５に複数登録されていた場合、その中で最も多いエラー回復回数１５５を持つエラーリカバリログ１５１のステップ番号１５４を参照する。構成要素や動作原理で実施の形態１と同様のものは省略する。
【００９７】
本実施の形態に係るデータ記憶装置において、図５のＳ１２におけるエラーリカバリを行ったアドレスが登録されているか否かの判定が、実施の形態１に係るデータ記憶装置と相違している。本実施の形態に係るデータ記憶装置においては、一つのアドレスに対応するエラーリカバリログ１５１が複数登録されている可能性があるため、このＳ１２での判定は、エラーリカバリしたアドレスとエラーリカバリしたエラーリカバリプロシジャのステップ番号との両方が一致しているかを判定することになる。
【００９８】
図１５に、本実施の形態に係るデータ記憶装置における、図５のＳ１２におけるエラーリカバリを行ったアドレスが登録されているか否かの判定処理を示す。まず、Ｓ１２１〜Ｓ１２３の処理は、実施の形態１に係るデータ記憶装置と同様なので、説明は省略する。
【００９９】
その後、まず、データ書き込みエラー／データ読み出しエラーが発生したアドレスと物理アドレス１５３に格納されたアドレスとを比較する。データ書き込みエラー／データ読み出しエラーが発生したアドレスと物理アドレス１５３内に格納されたアドレスとが一致しない場合は、Ｓ１２５とＳ１２６の処理を行い、Ｓ１２７において、参照数が登録数１５７に登録されている数以上であれば、図５のＳ１４に進む。参照数が登録数１５７に登録されている数より少ない数であれば、Ｓ１２４の前に進む。
【０１００】
データ書き込みエラー／データ読み出しエラーが発生したアドレスと物理アドレス１５３内に格納されたアドレスとが一致する場合は、次にエラーが発生したアドレスにおいて、エラーリカバリが行われたエラープロシジャのステップ番号と、参照しているエラーリカバリログ１５１内のステップ番号１５４に記憶されているステップ番号とを比較する。
【０１０１】
エラーリカバリが行われたエラープロシジャのステップ番号と、参照しているエラーリカバリログ１５１内のステップ番号１５４に記憶されているステップ番号が一致する場合には、図５のＳ１３の処理に進む。一致しない場合には、上記の物理アドレスに格納されたアドレスと、エラーが発生したアドレスが一致しない場合と同様に、Ｓ１２５〜Ｓ１２７の処理を行う。
【０１０２】
また、本実施の形態に係るデータ記憶装置における、図５のＳ１３のフローチャートは、図７のＳ１３２の処理のみを行うことになる（図１６参照）。
【０１０３】
また、本実施の形態に係るデータ記憶装置と実施の形態１に係るデータ記憶装置との相違点として、最初に実行する、エラーリカバリプロシジャのステップ番号を選択する処理の方法がある。
【０１０４】
本実施の形態に係るデータ記憶装置においては、同一のアドレスにおいて登録されている、ステップ番号の異なるエラーリカバリログ１５１において、エラー回復回数１５５に登録されている数の多いエラーリカバリログ１５１内のステップ番号１５４に登録されているステップ番号のエラーリカバリ動作を最初に実行する。
【０１０５】
そのため、エラー回復回数１５５を比較するための変数、参照回数１５９と参照ステップ番号１６０をＲＡＭ１２６に配置している（図１７参照）。参照回数１５９は、エラーが発生したアドレスと一致する数が記憶されている物理アドレス１５３を持つエラーリカバリログ１５１に記憶されているエラー回復回数１５５の中で、最大の数を記憶している。また、参照ステップ番号１６０は、参照回数１５９に記憶されている数がエラー回復回数１５５に記憶されているエラーリカバリログ１５１の、ステップ番号１５４に記憶されている数を記憶している。
【０１０６】
上記の参照回数１５９と参照ステップ番号１６０を用いて、最初に実行するエラーリカバリ動作の、エラープロシジャのステップ番号を選択するフローチャートを図１８に示す。
【０１０７】
まず、ＳＣＳＩコマンドによって、読み出し用エラーリカバリログテーブル１５または書き込み用エラーリカバリログテーブル１５のいずれかを選択する（Ｓ１１）。登録数に登録された数が０よりも大きいかを判定する（Ｓ１２１）。登録数が０以下であれば、図９のＳ１６に進む。
【０１０８】
登録数に登録された数が０より大きい場合、エラーリカバリログテーブル１５にエラーリカバリログ１５１が登録されていると判定する。その後、参照ポインタ１５８を初期化し（Ｓ１２２）、参照数に０を代入する（Ｓ１２３）。参照回数に０を代入し（Ｓ１７１）、参照ステップ番号に０を代入する（Ｓ１７２）。
【０１０９】
エラーリカバリログテーブル１５に、エラーが発生したアドレスのエラーリカバリログ１５１が登録されているかを判定する（Ｓ１２４）。エラーリカバリログテーブル１５に、エラーが発生したアドレスのエラーリカバリログ１５１が登録されていない場合、参照ポインタを更新し（Ｓ１２５）、参照数をインクリメントする（Ｓ１２６）。
【０１１０】
その後、参照数に登録された数と登録数１５７に登録された数を比較する（Ｓ１２７）。参照数に登録された数が登録数１５７に登録された数より少ない場合、エラーリカバリログテーブル１５すべてを参照していないと判定し、Ｓ１２４の前に進む。
【０１１１】
参照数に登録された数が登録数１５７に登録された数以上の場合、エラーリカバリログテーブル１５すべてを参照したと判定する。その後、参照回数１５９が０より大きいかを判定する（Ｓ１７６）。参照回数１５９が０以下であれば、図９のＳ１６に進む。参照回数１５９が０より大きければ、参照ステップ番号をステップ番号として選択する（Ｓ１７７）。
【０１１２】
エラーリカバリログテーブル１５に、エラーが発生したアドレスのエラーリカバリログ１５１が登録されている場合、参照回数１５９に登録された数がエラー回復回数１５５に登録された数より小さいかの判定を行う（Ｓ１７３）。
【０１１３】
参照回数１５９に登録された数がエラー回復回数１５５に登録された数より大きい場合、上記のエラーリカバリログテーブル１５に、エラーが発生したアドレスのエラーリカバリログ１５１が登録されていない場合と同様の動作を行う。
【０１１４】
参照回数１５９に登録された数がエラー回復回数１５５に登録された数より大きい場合は、参照回数１５９に、参照しているエラーリカバリログ１５１のエラー回復回数１５５に登録された数を代入し（Ｓ１７４）、参照ステップ番号１６０に、参照しているエラーリカバリログ１５１のステップ番号１５４を代入する（Ｓ１７５）。
【０１１５】
その後、上記のエラーリカバリログテーブル１５に、エラーが発生したアドレスのエラーリカバリログ１５１が登録されていない場合と同様の動作を行う。
【０１１６】
本実施の形態に係るデータ記憶装置においては、時間や温度などの動作環境により、ヘッド１１１とディスク１１２とのデータ記録再生特性が変化して、データ書き込みエラー／データ読み出しエラーに対し有効なリカバリステップが変わってしまった場合、エラー回復回数の大きいステップを最初に実行することで、エラーリカバリを効率的に実行できる。
【０１１７】
本実施の形態に係るデータ記憶装置においては、物理アドレス１５３として、実施の形態１のように、ヘッド番号を用いてもよいし、実施の形態３．のように、ヘッド番号、シリンダ番号、及びシリンダオフセットを用いてもよい。また、実施の形態４．のようにゾーン番号を用いてもよい。
【０１１８】
実施の形態６．
本実施の形態に係るデータ記憶装置においては、連続する複数セクタへのアクセスである場合と、連続しない複数セクタへのアクセスまたは単独セクタへのアクセスとで制御方法を変化させる。具体的一例として、アクセスするアドレスがシーケンシャル（連続複数セクタへのアクセス）であるか否かを判定して、シーケンシャルであれば実施の形態２に係る方式で、最初に実施するエラーリカバリのステップ番号を決め、シーケンシャルでなければ、実施の形態１に係る方式で、最初に実施するエラーリカバリのステップ番号を決めている。なお、構成要素や動作原理で実施の形態１、２、３、４、５と同様のものは省略する。
【０１１９】
本実施の形態に係るデータ記憶装置においては、エラーリカバリログテーブル１５として、実施の形態１に係るエラーリカバリログテーブル１５ａと実施の形態２に係るエラーリカバリログテーブル１５ｂの両方を、ＲＡＭ１２６に有している。本実施の形態に係るデータ記憶装置において、ＲＡＭ１２６に記憶したエラーリカバリログテーブル１５を図１９に示す。
【０１２０】
アクセスするアドレスがシーケンシャルであるか否かは、前回実行したＲＥＡＤまたはＷＲＩＴＥコマンドで最後にアクセスしたＬＢＡと、実行開始するＲＥＡＤまたはＷＲＩＴＥコマンドのＣＤＢ（Command Descriptor Block）で指示されたＬＢＡとを比較して判定する。アクセスするアドレスがシーケンシャルであるか否かは、ＲＥＡＤまたはＷＲＩＴＥコマンド実行開始時に判定し、結果をＲＡＭ１２６に記憶しておく。
【０１２１】
データ読み出しエラーまたはデータ書き込みエラー発生時に、上記のシーケンシャル判定結果を参照して、アクセスするアドレスがシーケンシャルであれば、エラーリカバリログテーブル１５ｂから、最初に実施するエラーリカバリのステップ番号を決定する。アクセスするアドレスがシーケンシャルでなければ、エラーリカバリログテーブル１５ａから、最初に実施するエラーリカバリのステップ番号を決定する。
【０１２２】
本実施の形態に係るデータ記憶装置においては、エラーリカバリを行ったときに、アクセスするアドレスがシーケンシャルであるか否かによらず、エラーリカバリログテーブル１５ａとエラーリカバリログテーブル１５ｂの両方を登録更新する。
【０１２３】
さらに、ＲＥＡＤ又はＷＲＩＴＥコマンドのシーケンシャル性を判定するために、最終ＬＢＡ１７１をＲＡＭ１２６に配置する。最終ＬＢＡ１７１は、ＲＥＡＤコマンド用とＷＲＩＴＥコマンド用の２つをＲＡＭ１２６に配置する。マイクロプロセッサ１２４は、ＲＥＡＤ又はＷＲＩＴＥコマンドを実行するときに、最後にアクセスしたＬＢＡを、ＲＡＭ１２６内の最終ＬＢＡ１７１に記憶保持する。
【０１２４】
また、ＲＥＡＤ及びＷＲＩＴＥコマンドのシーケンシャル性を示す、シーケンシャルフラグ１７２もＲＡＭ１２６に配置する。シーケンシャルフラグ１７２は、値が０ｘＦＦのときにアクセスするアドレスがシーケンシャルであることを示し、０のときにアクセスするアドレスがシーケンシャルではないことを示す。マイクロプロセッサ１２４は、ＲＥＡＤ及びＷＲＩＴＥコマンドを実行するときに、コマンドのシーケンシャル性を判定し、結果をシーケンシャルフラグ１７２に記録保持する。
【０１２５】
図２０は、ＲＥＡＤ又はＷＲＩＴＥコマンドのシーケンシャル性を判定するフローチャートである。ＲＥＡＤ又はＷＲＩＴＥコマンドのシーケンシャル性は、実行するコマンドのＬＢＡと、最終ＬＢＡ１７１に記憶されているＬＢＡを比較して判定される。
【０１２６】
まず、ＲＥＡＤ又はＷＲＩＴＥコマンドによって、最終ＬＢＡ１７１を選択する（Ｓ１８１）。コマンドのＬＢＡと最終ＬＢＡ１７１に記憶されたＬＢＡとを比較する（Ｓ１８２）。コマンドのＬＢＡが最終ＬＢＡ１７１に記憶されたＬＢＡより小さければ、アクセスするアドレスがシーケンシャルでないと判定し、マイクロプロセッサ１２４は、シーケンシャルフラグ１７２を０にクリアする（Ｓ１８３）。
【０１２７】
コマンドのＬＢＡが最終ＬＢＡ１７１に記憶されたＬＢＡ以上であれば、コマンドのＬＢＡが、最終ＬＢＡ１７１に記憶されたＬＢＡに３２を加えた数より大きければ、アクセスするアドレスがシーケンシャルでないと判定し、マイクロプロセッサ１２４は、シーケンシャルフラグ１７２を０にクリアする。
【０１２８】
コマンドのＬＢＡが、最終ＬＢＡ１７１に記憶されたＬＢＡに３２を加えた数以下であれば、アクセスするアドレスがシーケンシャルであると判定されるために、マイクロプロセッサ１２４は、シーケンシャルフラグを０ｘＦＦとする（Ｓ１８４）。
【０１２９】
図２１は、エラーリカバリログ１５１ａ、１５１ｂの登録更新処理を示すフローチャートである。まず、エラーリカバリログ１５１ａ、１５１ｂの登録更新処理においては、エラーリカバリを行ったときに、エラーをリカバリするために行ったエラーリカバリ動作のステップ番号をエラーリカバリログ１５１ｂに登録する（Ｓ１７）。その後、図５における実施の形態１のエラーリカバリログの登録更新処理（Ｓ１１〜Ｓ１４）を行い、エラーリカバリログ１５１ａの登録更新処理を行う。
【０１３０】
図２２は、本実施の形態に係るデータ処理装置における、最初に実行する、エラーリカバリプロシジャのステップ番号を選択する処理のフローチャートである。データ書き込みエラー又はデータ読み出しエラーが発生したときに、シーケンシャルフラグ１７２を参照してアクセスするアドレスがシーケンシャルであるかを判定する（Ｓ１７）。アクセスするアドレスがシーケンシャルであれば、エラーリカバリログ１５１ｂ内のステップ番号１５４ｂに登録されているステップ番号を選択する。
【０１３１】
アクセスするアドレスがシーケンシャルでなければ、図９における実施の形態１の最初に実行する、エラーリカバリプロシジャのステップ番号を選択する処理を行い（Ｓ１１、Ｓ１２、Ｓ１５、Ｓ１６）、ステップ番号を選択する。
【０１３２】
本実施の形態にかかるデータ記憶装置においては、アクセスするアドレスのシーケンシャル性から、行うエラーリカバリ方式を決定している。アクセスするアドレスがシーケンシャルであれば、直前に行ったエラーリカバリ動作が有効である可能性が高く、直前に行ったエラーリカバリ動作のステップ番号を記憶することで、効率的にエラーリカバリすることが可能である。
【０１３３】
それと同時に、アクセスするアドレスがシーケンシャルでない場合においても、それぞれのアドレスに応じたエラーリカバリ動作が決定されるために、効率的にエラーリカバリすることが可能な方式である。
【０１３４】
なお、上記の実施の形態においては、実施の形態１の方式と実施の形態２の方式を組み合わせているが、実施の形態２と実施の形態３又は実施の形態４又は実施の形態５を組み合わせてもよい。また、アドレスは、ヘッド番号、又はヘッド番号とシリンダ番号とシリンダオフセット、又はゾーン番号どれでも選択可能である。
【０１３５】
実施の形態７．
本実施の形態に係るデータ記憶装置においては、エラー回復した頻度により、エラーリカバリのステップ番号をソーティングして実行する方式である。なお、構成要素や動作原理で実施の形態１、２、３、４、５、６と同様のものは省略する。
【０１３６】
本実施の形態に係るデータ記憶装置においては、エラーリカバリログテーブル１５に同一の物理アドレス１５３を持つエラーリカバリログ１５１を複数登録することを可能とする。また、物理アドレス１５３としては、ヘッド番号を用いている。
【０１３７】
まず、本実施の形態に係るデータ記憶装置においては、ヘッド番号ごとにエラーリカバリログのチェーンを構築する。同一ヘッド番号でエラー回復回数１５５に登録されている数が高い順にエラーリカバリログ１５１が並べられた、ログチェーンテーブル１６が、ＲＡＭ１２６に記憶されている。
【０１３８】
データ書き込みエラー又はデータ読み出しエラーが発生したときに、エラーが発生したアドレスのヘッド番号に対応するログチェーンテーブル１６の先頭に登録されているエラーリカバリ動作から、ログチェーンテーブル１６の末尾のエラーリカバリ動作に向かってエラーリカバリ動作を行う。ログチェーンテーブル１６の末尾のステップのエラーリカバリ動作を実行してもエラーが回復しなかった場合、それまでに実行しなかったエラーリカバリのステップを番号の小さい順に実行する。
【０１３９】
エラーリカバリしたとき、エラーリカバリログ１５１の登録更新を行い、それと同時にエラー回復回数１５５に登録された数の比較により、ログチェーンテーブル１６の更新を行う。エラーリカバリログ１５１を登録更新したときに、エラーリカバリログテーブル１５とあわせて、ログチェーンテーブル１６もディスクドライブの管理エリアに書きこむ。
【０１４０】
また、本実施の形態に係るデータ記憶装置においては、ヘッド番号ごとにログチェーンテーブル１６を構築する。ヘッド番号ごとにチェーンの先頭とチェーンの末尾のエラーリカバリログの番号をポイントするポインタをＲＡＭ１２６に記憶保持する。チェーンの先頭、チェーンの末尾を示すポインタの初期値はどちらも０ｘＦＦとする。
【０１４１】
エラーリカバリログテーブル１５の構成を図２３に示す。実施の形態１に係るエラーリカバリログテーブル１５との相違点は、チェーンポインタ１７３を追加している点である。また、それぞれのエラーリカバリログ１５１には、オフセット番号が対応している。さらに、それぞれのエラーリカバリログ１５１には、フォワードチェーン２０１とバックワードチェーン２０２が追加されている。
【０１４２】
フォワードチェーン２０１は、このフォワードチェーン２０１を有するエラーリカバリログ１５１が対応するヘッド番号と同じで、このエラーリカバリログ１５１のエラー回復回数１５５に登録されている数の次に大きい数が登録されているエラー回復回数１５５を有する、エラーリカバリログ１５１のオフセット番号が登録されている。フォワードチェーン２０１は、同一ヘッド番号でエラー回復回数１５５に登録されている数の大きい順番にエラーリカバリログ１５１を参照するために用いられる。
【０１４３】
バックワードチェーン２０２は、このバックワードチェーン２０２を有するエラーリカバリログ１５１が対応するヘッド番号と同じで、このエラーリカバリログ１５１のエラー回復回数１５５に登録されている数の次に小さい数が登録されているエラー回復回数１５５を有する、エラーリカバリログ１５１のオフセット番号が登録されている。バックワードチェーン２０２は、エラーリカバリログ１５１を登録更新するときに、フォワードチェーン２０１及びバックワードチェーン２０２を更新するために用いられる。
【０１４４】
図２４に、ログチェーンテーブル１６の構成を示す。同一ヘッド番号でのエラーリカバリのチェーンを構成管理するために、ログチェーンテーブル１６をＲＡＭ１２６に配置する。ログチェーンテーブル１６は、ヘッドの個数分のログチェーン１６１を有する。ログチェーン１６１はチェーントップ１６２とチェーンテイル１６３を有する。
【０１４５】
チェーントップ１６２は、エラー回復回数１５５に登録されている数が、同一ヘッド番号で最大のエラーリカバリログ１５１のオフセット番号を記憶保持する領域である。チェーンテイル１６３は、エラー回復回数１５５に登録されている数が、同一ヘッド番号で最小のエラーリカバリログ１５１のオフセット番号を記憶保持する領域である。
【０１４６】
ログチェーンテーブル１６の内容は、エラーリカバリログテーブル１５同様、登録更新される度に、ドライブ１１のシステム管理エリアに書き込まれる。また、Ｐｏｗｅｒ  Ｏｎ  Ｒｅｓｅｔ時に、ドライブ１１のシステム管理エリアから読み出され、ＲＡＭ１２６に配置される。
【０１４７】
エラーリカバリログ１５１の登録更新とエラーリカバリログのチェーン構築処理を図２５、２６に示す。まず、ＳＣＳＩコマンドによって、エラーリカバリログテーブル１５とログチェーンテーブル１６を選択する（Ｓ２０１）。
【０１４８】
エラーリカバリしたアドレスにおけるヘッド番号に対応する、ログチェーン１６１を取り出し、このログチェーン１６１に記憶されたチェーントップ１６２に記憶されたオフセット番号が０ｘＦＦ以外かを判定する（Ｓ２０２）。
【０１４９】
オフセット番号が０ｘＦＦである場合、エラーリカバリログ１５１の新規登録を行う。新規エラーリカバリログ１５１のＬＢＡ１５２に、エラー発生ＬＢＡを代入し（Ｓ２０７）、エラー発生物理アドレスを物理アドレス１５３に代入し（Ｓ２０８)、エラーリカバリしたエラーリカバリプロシジャのステップ番号をステップ番号１５４に代入し（Ｓ２０９）、エラー回復回数１５５に１を代入する（Ｓ２１０）。
【０１５０】
その後、フォワードチェーン２０１とバックワードチェーン２０２に０ｘＦＦを代入し、初期化する（Ｓ２１１、Ｓ２１２)。チェーントップ１６２に、新規登録したエラーリカバリログのオフセットを代入する（Ｓ２１３）。そして、登録ポインタ１５６を更新し（Ｓ２１４）、登録数１５７をインクリメントする（Ｓ２１５）。
【０１５１】
チェーントップ１６２に記憶されたオフセット番号が０ｘＦＦでない場合は、参照ポインタ１５８をチェーントップ１６２に記憶されたオフセット番号のエラーリカバリログ１５１に参照ポインタを更新する（Ｓ２０３）。
【０１５２】
チェーントップ１６２に記憶されたオフセット番号の、エラーリカバリログ１５１内のステップ番号１５４に登録されたステップ番号が、エラーリカバリしたステップ番号と一致するかを判定する（Ｓ２０４）。ステップ番号が一致する場合は、チェーントップ１６２に記憶されたオフセット番号のエラーリカバリログ１５１内のエラー回復回数１５５をインクリメントする（Ｓ２０５）。その後、ログチェーンテーブル１６の更新修正を行う。このログチェーンテーブル１６の更新修正の詳細は後述する。
【０１５３】
チェーントップ１６２に記憶されたオフセット番号の、エラーリカバリログ１５１内のステップ番号１５４に登録されたステップ番号が、エラーリカバリしたステップ番号と一致しない場合、参照しているエラーリカバリログ１５１が、チェーンの末尾であるかを判定する（Ｓ２１６)。このとき、チェーンテイル１６３を用いる。
【０１５４】
チェーンの末尾でない場合は、Ｓ２０３のステップの前に戻る。そして、チェーントップ１６２に記憶されたオフセット番号の、エラーリカバリログ１５１内のフォワードチェーン２０１に登録されたオフセット番号のエラーリカバリログ１５１に、参照ポインタ１５８を更新する（Ｓ２０３）。
【０１５５】
参照しているエラーリカバリログ１５１がチェーンの末尾である場合は、エラーリカバリログテーブル１５内に、物理アドレス１５３とステップ番号１５４が一致するエラーリカバリログ１５１が存在しないということである。
【０１５６】
そして、新規エラーリカバリログ１５１内のＬＢＡ１５２に、エラー発生ＬＢＡを登録し（Ｓ２１７）、物理アドレス１５３に、エラー発生物理アドレスを登録し（Ｓ２１８）、ステップ番号１５４に、エラーリカバリしたステップ番号を登録し（Ｓ２１９）、エラー回復回数１５５に１を代入する（Ｓ２２０）。
【０１５７】
エラー回復回数が１で最小であるので、フォワードチェーン２０１に０ｘＦＦを代入する（Ｓ２２１）。バックワードチェーン２０２には、最後に参照したエラーリカバリログ１５１のオフセット番号を登録する（Ｓ２２２）。チェーンテイル１６３に登録されたエラーリカバリログ１５１のオフセット番号を代入する（Ｓ２２３）。
【０１５８】
エラーリカバリログ１５１のエラー回復回数１５５を更新した時には、エラー回復回数１５５を参照して、フォワードチェーン２０１、バックワードチェーン２０２、チェーントップ１６２、及びチェーンテイル１６３を更新する。
【０１５９】
エラー回復回数１５５を更新した時のログチェーン更新修正処理Ｓ２０６を、図２７、２８に示す。エラーリカバリログ１５１を参照したときに、フォワードチェーン２０１の示すエラーリカバリログ１５１およびバックワードチェーン２０２の示すエラーリカバリログ１５１を参照可能とするため、一時的な変数であるフォワードポインタ１７４及びバックワードポインタ１７５を使用する。フォワードポインタ１７４及びバックワードポインタ１７５はＲＡＭ１２６に一時的に配置される。
【０１６０】
まず、エラーリカバリしたエラーの位置するアドレスのヘッド番号とエラーをリカバリしたエラーリカバリプロシジャのステップ番号が一致しているエラーリカバリログ１５１が、チェーンのトップであるかを判定する（Ｓ３０１）。これは、チェーントップ１６２に登録されたオフセット番号と該当するエラーリカバリログ１５１が一致するかで判定する。
【０１６１】
該当するエラーリカバリログ１５１が、チェーントップ１６２に登録されたオフセット番号と一致する場合は、該当するエラーリカバリログ１５１内のエラー回復回数１５５に登録された数が最大であるので、更新修正処理は終わる。
【０１６２】
該当するエラーリカバリログ１５１が、チェーントップ１６２に登録されたオフセット番号と一致しない場合は、バックワードチェーン２０２の示すエラーリカバリログ１５１をポイントするようにバックワードポインタ１７５を設定する（Ｓ３０２）。該当エラーリカバリログ１５１のフォワードチェーン２０１が示すエラーリカバリログ１５１をポイントするようにフォワードチェーン２０１を設定する（Ｓ３０３）。
【０１６３】
該当エラーリカバリログ１５１内のエラー回復回数１５５に登録された数が、バックワードポインタ１７５が示すエラーリカバリログ１５１内のエラー回復回数１５５に登録された数との比較を行う（Ｓ３０４）。
【０１６４】
該当エラーリカバリログ１５１内のエラー回復回数１５５に登録された数が、バックワードポインタ１７５が示すエラーリカバリログ１５１内のエラー回復回数１５５に登録された数より小さい場合は、チェーン内の順番に変更はないと考えられ、更新修正処理を終了する。
【０１６５】
該当エラーリカバリログ１５１内のエラー回復回数１５５に登録された数が、バックワードポインタ１７５が示すエラーリカバリログ１５１内のエラー回復回数１５５に登録された数が大きい場合は、チェーン内の順番に変更があるということなので、次の処理を行う。
【０１６６】
該当エラーリカバリログ１５１内のバックワードポインタ１７５が示すエラーリカバリログ１５１が、チェーンの先頭であるかの判定を行う（Ｓ３０５）。該当エラーリカバリログ１５１内のバックワードポインタ１７５が示すエラーリカバリログ１５１が、チェーンの先頭である場合で、該当エラーリカバリログ１５１内のエラー回復回数１５５に登録された数が、バックワードポインタ１７５が示すエラーリカバリログ１５１内のエラー回復回数１５５に登録された数が大きいので、該当エラーリカバリログ１５１がチェーンのトップになることになる。そのため、チェーントップ１６２に、該当エラーリカバリログ１５１のオフセット番号を代入する（Ｓ３０６）。
【０１６７】
その後、バックワードポインタ１７５の示すエラーリカバリログ１５１のフォワードチェーン２０１に該当エラーリカバリログ１５１のフォワードチェーン２０１に登録された値を代入する（Ｓ３０７）。
【０１６８】
該当エラーリカバリログ１５１のフォワードチェーン２０１にバックワードチェーン２０２の値を代入する（Ｓ３０８）。該当エラーリカバリログ１５１のバックワードチェーン２０２にバックワードポインタ１７５の示すエラーリカバリログ１５１のバックワードチェーン２０２の値を代入する（Ｓ３０９）。
【０１６９】
バックワードポインタ１７５が示すエラーリカバリログ１５１のバックワードチェーン２０２に該当エラーリカバリログ１５１のオフセット番号を代入する（Ｓ３１０）。以上のことから、該当エラーリカバリログ１５１のチェーン内の順番を変更する。
【０１７０】
次に、該当エラーリカバリログ１５１がチェーンの末尾であるかの判定を行う（Ｓ３１１）。該当エラーリカバリログ１５１がチェーンの末尾であれば、チェーンテイル１６３に、バックワードポインタ１７５の示すエラーリカバリオフセット番号を代入する（Ｓ３１２）。その後Ｓ３０１のステップの前に進む。
【０１７１】
該当エラーリカバリログ１５１がチェーンの末尾でないならば、フォワードポインタ１７４の示すエラーリカバリログ１５１内のバックワードチェーン２０２にバックワードポインタ１７５の示すエラーリカバリログ１５１のオフセット番号を代入する。（Ｓ３１３）。その後Ｓ３０１のステップの前に進む。
【０１７２】
以上のようにして、同一ヘッドで、エラー回復回数１５５に登録された数が大きい順にエラーリカバリログ１５１が参照できるようにフォワードチェーン２０１、バックワードチェーン２０２、チェーントップ１６２、及びチェーンテイル１６３を更新する。
【０１７３】
データ書き込みエラー又は、データ読み出しエラー発生時には、該当ヘッド番号のチェーントップ１６２、エラーリカバリログ１５１のフォワードポインタ１７４を参照することで、エラー回復回数１５５に登録されている数の大きい順にステップ番号を選択し、エラーリカバリのステップを実行する。チェーンテイル１６３の示すエラーリカバリログ１５１のステップ番号を実行してもエラーが回復しなかった場合、それまでに実行しなかったエラーリカバリのステップを番号の小さい順に実行する。
【０１７４】
また、本実施の形態においては、物理アドレス１５３に登録されているアドレスは、ヘッド番号、又はヘッド番号とシリンダ番号とシリンダオフセット、又はゾーン番号どれでも選択可能である。
【０１７５】
以上のようにすることによって、エラー回復回数１５５に登録されている数の多い順にエラーリカバリをすることができるようになる。また、エラー回復回数１５５に登録されている数の多い順にエラーリカバリすることによって、エラーが発生したときにエラーリカバリする可能性の高いエラーリカバリプロシジャのステップから実行することが可能となり、効率よくエラーリカバリすることが可能となる。
【０１７６】
さらに、ヘッド番号ごとにエラーリカバリのステップ毎のエラー回復回数を記憶するマトリックスを、ＲＡＭ１２６に保持し、エラーリカバリした時に、エラーリカバリしたステップ番号に対応する、このマトリックスのエラー回復回数を更新する方法でもよい。
【０１７７】
さらにまた、データ書き込みエラー／データ読み出しエラーが発生したときに、エラーが発生したヘッドでの、エラー回復回数の多いステップから順番にエラーリカバリを実行する方式も考えられる。
【０１７８】
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【図面の簡単な説明】
【０１７９】
【図１】実施の形態１に係るデータ記憶システムの構成図
【図２】実施の形態１に係るデータ記憶装置の、エラーリカバリプロシジャの各ステップのリカバリ内容を示す表の例
【図３】実施の形態１に係るデータ記憶装置の、エラーリカバリテーブルの構成図
【図４】実施の形態１に係るエラーリカバリログテーブルのテーブルの構成図
【図５】実施の形態１に係るデータ記憶装置の、エラーリカバリログテーブルの登録更新処理のフローチャート
【図６】実施の形態１に係るデータ記憶装置の、書き込み／読み出しエラーが発生したアドレスに対応するエラーリカバリログがエラーリカバリログテーブルに登録されているか判定するときのフローチャート
【図７】実施の形態１に係るデータ記憶装置の、エラーリカバリログの更新処理のフローチャート
【図８】実施の形態１に係るデータ記憶装置の、エラーリカバリログの新規登録のフローチャート
【図９】実施の形態１に係るデータ記憶装置の、最初に行うエラーリカバリ動作を示すエラーリカバリプロシジャのステップ番号を選択する処理のフローチャート
【図１０】実施の形態２に係るデータ記憶装置におけるエラーリカバリログテーブル
【図１１】実施の形態３に係るエラーリカバリログテーブルの構成図
【図１２】実施の形態３に係るデータ記憶装置の、データ読み出しエラー／データ書き込みエラーが発生したアドレスと、エラーリカバリログテーブルに記憶されているエラーリカバリログの物理アドレスとの比較処理のフローチャート
【図１３】実施の形態３に係るデータ記憶装置の、エラーが発生した物理アドレスを新規登録する処理を表すフローチャート
【図１４】実施の形態４に係るエラーリカバリログテーブルの構成図
【図１５】実施の形態５に係るデータ記憶装置の、エラーリカバリを行ったアドレスが登録されているか否かの判定処理のフローチャート
【図１６】実施の形態５に係るデータ記憶装置の、エラーリカバリを行ったアドレスのエラーリカバリログの更新のフローチャート
【図１７】実施の形態５に係るエラーリカバリログテーブルの構成図
【図１８】実施の形態５に係るデータ記憶装置の、最初に実行するエラーリカバリ動作の、エラープロシジャのステップ番号を選択するフローチャート
【図１９】実施の形態６に係るデータ記憶装置の、エラーリカバリログテーブルの構成図
【図２０】ＲＥＡＤ又はＷＲＩＴＥコマンドのシーケンシャル性を判定するフローチャート
【図２１】実施の形態６に係るデータ記憶装置の、エラーリカバリログの登録更新処理を示すフローチャート
【図２２】実施の形態６に係るデータ処理装置における、最初に実行する、エラーリカバリプロシジャのステップ番号を選択する処理のフローチャート
【図２３】実施の形態７に係るデータ記憶装置の、エラーリカバリログテーブルの構成図
【図２４】エラーリカバリチェーンの構成図
【図２５】実施の形態７に係るデータ記憶装置の、エラーリカバリログの登録更新とエラーリカバリログのチェーン構築処理
【図２６】実施の形態７に係るデータ記憶装置の、エラーリカバリログの登録更新とエラーリカバリログのチェーン構築処理
【図２７】エラー回復回数を更新した時のログチェーン更新修正処理
【図２８】エラー回復回数を更新した時のログチェーン更新修正処理
【符号の説明】
【０１８０】
１０  データ記憶装置  １１  ドライブ  １２  データ記憶装置制御部
１３  ホストコンピュータ  １４  エラーリカバリテーブル
１５  エラーリカバリログテーブル  １６  ログチェーンテーブル
２２ａ、２２ｂ  データバス  ２３  制御バス
３１  読み出し信号  ３２  書き込み信号  ３３  アクチュエータ制御信号
３４  スピンドルモータ制御信号
１１１  ヘッド  １１２  ディスク円板  １１３  スピンドルモータ
１１４  アクチュエータ  １１５  ドライブ制御回路  １１６  データ読み出し回路
１１７  データ書き込み回路  １２１  ホストＩ／Ｆ制御部  １２２  ＨＤＣ
１２３  データバッファ  １２４  マイクロプロセッサ
１４１  エラーリカバリステップ  １４２  ステップ番号
１４３  ＲＥＳＥＲＶＥＤ領域  １４４  ファンクションポインタ
１５１  エラーリカバリログ  １５２  ＬＢＡ  １５３  物理アドレス
１５３ａ  ヘッド番号  １５３ｂ  シリンダ番号  １５３ｃ  シリンダオフセット
１５３ｄ  ＲＥＳＥＲＶＥＤ領域  １５３ｅ  ゾーン番号
１５４  ステップ番号  １５５  エラー回復回数  １５６  登録ポインタ
１５７  登録数  １５８  参照ポインタ  １５９  参照回数  １６０  参照ステップ番号
１６１  ログチェーン  １６２  チェーントップ  １６３  チェーンテイル
１７１  最終ＬＢＡ  １７２  シーケンシャルフラグ  １７３  チェーンポインタ
１７４  フォワードポインタ１７５  バックワードポインタ
２０１  フォワードチェーン  ２０２  バックワードチェーン
【図１】
2006338734.tif 000003
【図２】
2006338734.tif 000004
【図３】
2006338734.tif 000005
【図４】
2006338734.tif 000006
【図５】
2006338734.tif 000007
【図６】
2006338734.tif 000008
【図７】
2006338734.tif 000009
【図８】
2006338734.tif 000010
【図９】
2006338734.tif 000011
【図１０】
2006338734.tif 000012
【図１１】
2006338734.tif 000013
【図１２】
2006338734.tif 000014
【図１３】
2006338734.tif 000015
【図１４】
2006338734.tif 000016
【図１５】
2006338734.tif 000017
【図１６】
2006338734.tif 000018
【図１７】
2006338734.tif 000019
【図１８】
2006338734.tif 000020
【図１９】
2006338734.tif 000021
【図２０】
2006338734.tif 000022
【図２１】
2006338734.tif 000023
【図２２】
2006338734.tif 000024
【図２３】
2006338734.tif 000025
【図２４】
2006338734.tif 000026
【図２５】
2006338734.tif 000027
【図２６】
2006338734.tif 000028
【図２７】
2006338734.tif 000029
【図２８】
2006338734.tif 000030