(57)【要約】【課題】ディスク上のデータブロックの書き換えの異常を検出可能とする。【解決手段】実施形態によれば、磁気ディスク装置は、複数のデータセクタを備えたディスクと、制御手段と、インジケータ手段とを具備する。制御手段は、ディスクに格納されている第１のデータブロックを読み出して、当該読み出された第１のデータブロックに対応する第２のデータブロックを、ディスク上の書き込み先に書き込むためのデータ書き換えを制御する。インジケータ手段は、第２のデータブロックの各セクタデータが書き込み先に書き込まれる際に、当該書き込まれるセクタデータにデータ書き換えに関する属性を示すインジケータを埋め込む。【選択図】      図１
2011253578.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータセクタを備えたディスクと、
前記ディスクに格納されている第１のデータブロックを読み出して、当該読み出された第１のデータブロックに対応する第２のデータブロックを、前記ディスク上の書き込み先に書き込むためのデータ書き換えを制御する制御手段と、
前記第２のデータブロックの各セクタデータが前記書き込み先に書き込まれる際に、当該書き込まれるセクタデータにデータ書き換えに関する属性を示すインジケータを埋め込むインジケータ手段と
を具備する磁気ディスク装置。
【請求項２】
前記インジケータ手段は、前記第１のデータブロックに含まれているセクタデータの読み出しで読み出しエラーが発生した場合、当該読み出しエラーが発生したセクタデータに対応する前記第２のデータブロックのセクタデータに、読み出しエラーを示す読み出し不可ビットが含まれたインジケータを埋め込む請求項１記載の磁気ディスク装置。
【請求項３】
前記制御手段は、読み出されたセクタデータに前記有効な読み出し不可ビットを含むインジケータが埋め込まれている場合、当該読み出されたセクタデータに対応する前記第２のデータブロックのセクタデータに前記インジケータ手段によって埋め込まれる前記インジケータが前記有効な読み出し不可ビットを引き継ぐように、前記インジケータ手段を制御する請求項２記載の磁気ディスク装置。
【請求項４】
前記インジケータ手段は、読み出されたセクタデータに前記有効な読み出し不可ビットを含むインジケータが埋め込まれている場合、前記制御手段に読み出しエラーを通知する請求項３記載の磁気ディスク装置。
【請求項５】
前記制御手段は瓦書きを適用して前記データの書き換えを制御する請求項３記載の磁気ディスク装置。
【請求項６】
前記第２のデータブロックの書き込み先には、第３のデータブロックが格納されており、
前記第３のデータブロックの各セクタデータには、前記第３のデータブロックが書き込まれた際に前記インジケータが埋め込まれており、
前記第３のデータブロックの前記各セクタデータに埋め込まれている前記インジケータは、第１の書き換え状態を示す書き換え状態データを含んでおり、
前記インジケータ手段は、前記第２のデータブロックの各セクタデータに、前記第１の書き換え状態とは異なる第２の書き換え状態を示す書き換え状態データが含まれたインジケータを埋め込む請求項１記載の磁気ディスク装置。
【請求項７】
前記制御手段は、前記書き込み先の先頭データセクタ及び最終データセクタに埋め込まれている前記書き換え状態データが相違していることを検出することによって、前記第２のデータブロックの前記書き込み先への書き込みの途中で前記磁気ディスク装置の電源が遮断したことを検出する請求項６記載の磁気ディスク装置。
【請求項８】
前記制御手段は、前記書き込み先の各データセクタに埋め込まれている前記書き換え状態データが変化したデータセクタを、前記電源が遮断したために前記書き込みが中断されたデータセクタとして特定する請求項６記載の磁気ディスク装置。
【請求項９】
前記ディスクはホストによって指定されたライトデータを一時的に格納するための一時格納領域を備えており、
前記制御手段は、前記ライトデータの前記一時格納領域への書き込みを制御し、
前記ライトデータが書き込まれるべき前記一時格納領域内の書き込み先の各セクタデータには、第３の書き換え状態を示す書き換え状態データを含むインジケータが埋め込まれており、
前記インジケータ手段は、前記ライトデータに対応する各セクタデータに、前記第３の書き換え状態とは異なる第４の書き換え状態を示す書き換え状態データが含まれたインジケータを埋め込む請求項８記載の磁気ディスク装置。
【請求項１０】
前記第１の書き換え状態を示す書き換え状態データは第１の書き換え回数であり、前記第２の書き換え状態を示す書き換え状態データは、前記第１の書き換え回数に１が加算された第２の書き換え回数である請求項６記載の磁気ディスク装置。
【請求項１１】
複数のデータセクタを備えたディスクを具備する磁気ディスク装置におけるデータブロック書き換え方法であって、
前記ディスクに格納されている第１のデータブロックをデータセクタ単位で読み出し、
前記読み出された第１のデータブロックに対応する第２のデータブロックを、前記ディスク上の書き込み先に書き込み、
前記第２のデータブロックの各セクタデータが前記書き込み先に書き込まれる際に、当該書き込まれるセクタデータにデータ書き換えに関する属性を示すインジケータを埋め込むデータブロック書き換え方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、磁気ディスク装置及びデータブロックの書き換え方法に関する。
【背景技術】
【０００２】
一般に磁気ディスク装置では、ディスクに格納されているデータのひと塊、いわゆるデータブロックの書き換え（rewriting）、例えば移動によるデータブロック書き換えが発生する。従来、このデータブロックの移動は、次のような手順で実行される。ここでは、ディスクの第１の領域に格納されているデータブロックを当該ディスクの第２の領域に移動するものとする。この場合、まず、ディスクの第１の領域からデータブロックが読み出される。次に読み出されたデータブロックがディスクの第２の領域に書き込まれる。なお、読み出されたデータブロックの一部がホストによつて指定されたライトデータによって置き換えられて、その置き換え後のデータブロックが第２の領域に書き込まれることもある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−２９３７７４号公報
【特許文献２】再公表特許２００４−０２３４８３号公報
【特許文献３】特開平１０−１７７７６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上述のデータブロックの移動のために、第１の領域からの当該データブロックの読み出しが行われた際に、読み出しエラーが発生することがある。ここでは、第１の領域が、セクタＳＡを含む複数のセクタ（データセクタ）から構成されており、当該セクタＳＡのデータ（セクタデータ）の読み出しで、エラー訂正符号（ＥＣＣ）に基づくエラー訂正が不可能なエラー（Read Uncorrectable Error）が発生したものとする。また、第２の領域が、正常なセクタＳＡ’を含む複数のセクタから構成され、セクタＳＡ’の第２の領域内の相対位置が、セクタＳＡの第１の領域内の相対位置に一致しているものとする。
【０００５】
もし、セクタＳＡからのデータの読み出しでエラーが発生しても第２の領域へのデータブロックの書き込みが行われるならば、当該データブロックの書き込み後のセクタＳＡ’の内容は、セクタＳＡの内容とは異なる。その後、例えばホストからの要求に応じてセクタＳＡ’のデータの読み出しが行われる場合、当該セクタＳＡ’は正常セクタであることから、データ読み出しが正常に行われる可能性が極めて高い。このような場合、セクタＳＡに書き込まれていたデータとは異なるデータ、つまり誤った（不正な）データ（セクタデータ）が、磁気ディスク装置からホストに返されることになる。しかし、ホストは勿論、磁気ディスク装置も、セクタＳＡ’から読み出されたセクタデータが誤っていることを判別することは困難である。
【０００６】
また、第２の領域へのデータブロックの書き込みの途中で磁気ディスク装置の電源が遮断する場合がある。そこで、データブロックの書き込みの途中で電源遮断が発生したことが検出できることが要求されている。
【０００７】
本発明の目的は、磁気ディスク装置において、ディスク上のデータブロックの書き換えの異常を検出可能とすることにある。
【課題を解決するための手段】
【０００８】
実施形態によれば、磁気ディスク装置は、複数のデータセクタを備えたディスクと、制御手段と、インジケータ手段とを具備する。前記制御手段は、前記ディスクに格納されている第１のデータブロックを読み出して、当該読み出された第１のデータブロックに対応する第２のデータブロックを、前記ディスク上の書き込み先に書き込むためのデータ書き換えを制御する。前記インジケータ手段は、前記第２のデータブロックの各セクタデータが前記書き込み先に書き込まれる際に、当該書き込まれるセクタデータにデータ書き換えに関する属性を示すインジケータを埋め込む。
【図面の簡単な説明】
【０００９】
【図１】第１の実施形態に係る磁気ディスク装置を備えた電子機器の典型的な構成を示すブロック図。
【図２】同第１の実施形態で適用される、ディスクのトラック配置を含むフォーマットの一例を示す概念図。
【図３】同第１の実施形態で適用されるセクタのデータフォーマットの一例を示す図。
【図４】同第１の実施形態におけるデータ書き換えを説明するための図。
【図５】同第１の実施形態で適用されるデータブロック移動処理の手順を示すフローチャート。
【図６】同第１の実施形態で適用されるデータ読み出し処理の手順を示すフローチャート。
【図７】第２の実施形態で適用されるセクタのデータフォーマットの一例を示す図。
【図８】同第２の実施形態で適用されるデータブロック移動処理の手順を示すフローチャート。
【図９】同第２の実施形態において、データブロック移動処理の途中で電源遮断が発生したために処理が中断されたセクタを特定するための原理を説明するための図。
【図１０】同第２の実施形態で適用されるデータ読み出し処理の手順を示すフローチャート。
【図１１】第３の実施形態で適用される、ディスク上に確保された不揮発性キャッシュ領域へのライトデータの書き込みを説明するための図。
【図１２】同第３の実施形態で適用される、不揮発性キャッシュ領域へのデータ書き込み処理の手順を示すフローチャート。
【図１３】同第３の実施形態で適用される、不揮発性キャッシュ領域からのデータ読み出し処理の手順を示すフローチャート。
【図１４】セクタのデータフォーマットの変形例を示す図。
【発明を実施するための形態】
【００１０】
以下、実施の形態につき図面を参照して説明する。  
［第１の実施形態］
図１は第１の実施形態に係る磁気ディスク装置を備えた電子機器の典型的な構成を示すブロック図である。図１において、電子機器は、磁気ディスク装置（ＨＤＤ）１０及びホスト１００から構成される。電子機器は、例えば、パーソナルコンピュータ、ビデオカメラ、音楽プレーヤー、携帯端末、或いは携帯電話機である。ホスト１００はＨＤＤ１０を当該ホスト１００の記憶装置として利用する。ホスト１００はホストインタフェース１０１によりＨＤＤ１０（より詳細には、ＨＤＤ１０内の後述するコントローラＣＮＴ）と接続されている。
【００１１】
第１の実施形態において、ＨＤＤ１０は、周知の瓦書き（shingled write）を適用するものとする。ＨＤＤ１０は、記録媒体としてのディスク（磁気ディスク）１１を備えている。このディスク１１は上側と下側の２つのディスク面を有している。ディスク１１の例えば上側のディスク面は、データが磁気記録される記録面をなしている。このディスク１１の記録面に対応して、ヘッド（磁気ヘッド）１２が配置されている。ヘッド１２はライト素子及びリード素子を含んでおり、ディスク１１へのデータ書き込み及び当該ディスク１１からのデータ読み出しに用いられる。なお、図１では、作図の都合上、ヘッド１２が１つであるＨＤＤ１０の例が示されている。しかし、ディスク１１の２つのディスク面が共に記録面をなしており、各々のディスク面に対応してヘッドが配置されてもよい。また図１の構成では、単一枚のディスク１１を備えたＨＤＤを想定している。しかし、複数枚のディスクが積層配置されたＨＤＤであっても構わない。
【００１２】
図２は、ディスク１１のトラック配置を含むフォーマットの一例を示す概念図である。図２に示されるように、ディスク１１の記録面は、当該ディスク１１の半径方向に区域Ａ0〜Ａ5に区分される。区域Ａ0〜Ａ5の各々には、一定数のトラックが配置されているものとする。図２では、便宜的に、ディスク１１上の内周側の区域Ａ5に配置されているトラックのみが示されており、それ以外の区域Ａ0〜Ａ4に配置されているトラックは省略されている。
【００１３】
また第１の実施形態では、区域Ａ0〜Ａ5が、例えば一定数の区域の集合毎にグループ化されている。図２の例では、区域Ａ0〜Ａ2の集合がグループＧ０を構成し、区域Ａ3〜Ａ5の集合がグループＧ１を構成する。また、グループＧｉ（ｉ＝０，１）毎に、１つの区域が、瓦書きの際に当該グループＧｉ内の他の区域の各トラックのデータの移動先（書き換え先）として用いられるフリー領域に割り当てられる。このデータ移動（書き換え）が完了すると、データ移動元の区域が新たにフリー領域に割り当てられる。
【００１４】
なお、図２の例では、ディスク１１の記録面が６つの区域に区分されているが、６つ以外の数の区域、例えば６を超える区域に区分されてもよい。また図２の例では、各グループが３つの区域から構成されているが、１つを超える数の区域、例えば３を超える区域から構成されてもよい。
【００１５】
ディスク１１上の各トラックは、複数のデータセクタ（以下、単にセクタと称する）から構成される。図３は、セクタのデータフォーマットの一例を示す。セクタは、主として、ユーザデータフィールドと、インジケータ（ＩＮＤＩ）フィールドと、ＥＣＣ（エラー訂正符号）フィールドとから構成される。ユーザデータフィールドは、ユーザデータを記録するのに用いられる。インジケータフィールドは、対応するセクタデータの書き換えに関する属性を表すインジケータＩＮＤＩを記録するのに用いられる。インジケータＩＮＤＩは、読み出し不可（Read uncorrectable）を示す読み出し不可ビット（ＵＮＣ）を含む属性データである。なお、セクタデータの書き換えは、必ずしもセクタデータの更新とは限らない。例えば、或るセクタから読み出されたセクタデータを、当該或るセクタまたは当該或るセクタに対応する別のセクタに再度書き込むことも、セクタデータの書き換えである。
【００１６】
再び図１を参照すると、ディスク１１はスピンドルモータ（ＳＰＭ）１３によって高速に回転させられる。ヘッド１２は、アクチュエータ１４の先端に取り付けられている。ヘッド１２は、ディスク１１が高速に回転することにより当該ディスク１１上で浮上する。アクチュエータ１４は、当該アクチュエータ１４の駆動源となるボイスコイルモータ（ＶＣＭ）１５を有している。アクチュエータ１４は、このＶＣＭ１５により駆動されて、ヘッド１２をディスク１１の半径方向に移動する。このアクチュエータ１４の動作により、ヘッド１２は、ディスク１１の目標トラック上に位置付けられる。
【００１７】
ＨＤＤ１０はコントローラＣＮＴを備えている。コントローラＣＮＴは、ホスト１００からホストインタフェース１０１を介して転送されるコマンド（ライトコマンド、リードコマンド等）の受信と、ホスト１００と当該コントローラＣＮＴとの間のデータ転送とを制御するホストインタフェース制御機能を有する。コントローラＣＮＴはまた、ディスク１１と当該コントローラＣＮＴとの間のデータ転送を制御するディスクインタフェース制御機能を有する。コントローラＣＮＴはまた後述するバッファメモリ１９を制御するバッファインタフェース制御機能を有する。
【００１８】
第１の実施形態においてコントローラＣＮＴは、リードＩＣ１６、ＥＣＣ回路１７、インジケータ回路１８、バッファメモリ１９及びＭＰＵ２０等が単一チップに集積されたＳＯＣ（System on Chip）と呼ばれるシステムＬＳＩによって実現されている。なお、このようなコントローラＣＮＴの構成は一例であり、例えばバッファメモリ１９がコントローラＣＮＴの外部に備えられていても構わない。
【００１９】
リードＩＣ１６は、図示せぬヘッドアンプを介してヘッド１２と接続されている。ヘッドアンプは、ヘッドにより再生された信号（リード信号）を増幅するリードアンプと、リードＩＣ１６から転送される符号化されたライトデータをライト電流（ライト信号）に変換してヘッドに出力するライトドライバを含む。
【００２０】
リードＩＣ１６は、リードチャネルまたはリード／ライトチャネルと呼ばれる、周知の信号処理モジュールである。リードＩＣ１６は、リード信号をデジタルデータに変換し、このデジタルデータからリードデータを復号する。リードＩＣ１６はまた、上記デジタルデータからサーボデータ（サーボパターン）を抽出する。リードＩＣ１６はまた、ライトデータを符号化する。リードＩＣ１６はＥＣＣ回路１７と接続されている。
【００２１】
ＥＣＣ回路１７は、後述するインジケータ回路１８から転送されるユーザデータ（より詳細には、インジケータが付されているユーザデータ）に基づき、ＥＣＣを生成するＥＣＣ生成機能を有する。ＥＣＣ回路１７は、インジケータが付されているユーザデータにＥＣＣ（生成されたＥＣＣ）を付加し、このインジケータ及びＥＣＣが付加されたユーザデータをリードＩＣ１６に転送する。ＥＣＣ回路１７はまた、リードＩＣ１６から転送された復号されたリードデータからユーザデータ及びＥＣＣを抽出し、当該ＥＣＣに基づいてユーザデータの誤り検出・訂正を行う。ＥＣＣ回路１７は、インジケータ回路１８と接続されている。
【００２２】
インジケータ回路１８は、ディスク１１上のグループＧｉ内のある区域（第１の区域）に格納されているデータブロック（第１のデータブロック）の書き換えが当該グループＧｉ内の別の区域（フリー領域、第２の区域）を用いて行われる場合に、第２の区域に書き込まれるべきデータブロック（第２のデータブロック）の各セクタデータに含まれるユーザデータにＭＰＵ２０の指定する属性を示すインジケータＩＮＤＩを付加する。インジケータ回路１８はまた、第１の区域から第１のデータブロックが読み出された場合に、当該第１のデータブロックの各セクタデータから、論理“１”の有効な読み出し不可ビット（ＵＮＣ）が含まれているインジケータＩＮＤＩを検出する。
【００２３】
バッファメモリ１９は、ディスク１１に書き込まれるべきユーザデータ及びディスク１１からリードＩＣ１６、ＥＣＣ回路１７及びインジケータ回路１８を介して読み出されたユーザデータを一時格納するのに用いられる。
【００２４】
ＭＰＵ２０は、図示せぬＲＯＭまたはフラッシュＲＯＭに格納されている制御プログラムに従って、リードＩＣ１６、ＥＣＣ回路１７及びインジケータ回路１８を制御する制御モジュールである。ＭＰＵ２０はまた、ＳＰＭ１３及びＶＣＭ１５を図示せぬモータドライバＩＣを介して制御する。
【００２５】
次に、第１の実施形態の動作について、ホスト１００から指定されるライトアクセス範囲が例えばグループＧ０に属する区域Ａ０内のあるセクタ列に対応する場合のデータ書き換えを例に、図４を参照して説明する。ここでは、説明の簡略化のために、瓦書きの際のヘッドの半径方向のシフト量が、ヘッド１２に含まれているライト素子の幅Ｗの１／２であるものとする。また、区域Ａ２が、グループＧ０内のフリー領域に割り当てられているものとする。
【００２６】
上述のデータ書き換えは、区域Ａ０に格納されているデータブロック（第１のデータブロック）ＤＢの読み出しと区域Ａ２へのデータブロック（第２のデータブロック）ＤＢ’の書き込みとにより実行される。データブロックＤＢ’は、読み出されたデータブロックＤＢのうちの上記ライトアクセス範囲に対応する部分が、ホスト１００から指定されたライトデータで置き換えられた（つまりモディファイされた）、いわゆるリードモディファイデータである。但し、以下の説明では、簡略化のために、データブロックＤＢとデータブロックＤＢ’とが同一であるものとする。つまり、区域（読み出し対象区域）Ａ０に格納されているデータブロックＤＢを区域（書き込み対象区域）Ａ２に移動するものとする。
【００２７】
図４は、区域Ａ０がトラックＴＲ_1〜ＴＲ_4を備え、区域（フリー領域）Ａ２内がトラックＴＲ_N+1〜ＴＲ_N+4を備えている場合の区域Ａ０から区域Ａ２へのデータブロックの移動の例を示す。
【００２８】
コントローラＣＮＴは、区域Ａ０に格納されているデータブロックＤＢをセクタ単位で読み出す。つまりコントローラＣＮＴは、区域Ａ０のトラックＴＲ_1〜ＴＲ_4の全セクタからセクタデータを順次読み出す。コントローラＣＮＴ内のＥＣＣ回路１７は、セクタデータが読み出される毎に、当該読み出されたセクタデータからユーザデータ、及びＥＣＣを抽出し、当該ＥＣＣに基づいて、ユーザデータの誤り検出・訂正を行う。ＥＣＣ回路１７によって誤り検出・訂正がなされたユーザデータは、インジケータ回路１８を介してバッファメモリ１９に格納される。
【００２９】
ここで、区域Ａ０からのセクタ単位のデータの読み出しの過程で、図４に示すように、トラックＴＲ_3上のセクタＳＡからセクタデータを正常に読み出すことができない読み出しエラーが発生したものとする。この読み出しエラーが、例えば、セクタＳＡから読み出されたセクタデータに含まれているユーザデータの誤りの訂正が不能なエラー（Read Uncorrectable Error）であったものとする。第１の実施形態において、セクタＳＡの論理アドレス（論理ブロックアドレス）は、ＬＢＡ“Ａ”である。
【００３０】
次に、区域（移動元区域）Ａ０からのデータブロックＤＢの読み出しが終了すると、読み出されたデータブロックＤＢの区域（移動先区域）Ａ２へのセクタ単位の書き込みが行われるものとする。第１の実施形態において区域Ａ２は正常なセクタＳＡ’を含んでおり、当該セクタＳＡ’の区域Ａ２内の相対位置は、読み出しエラーとなったセクタＳＡの区域Ａ０内の相対位置に一致する。つまり、区域Ａ２内のセクタＳＡ’は、区域Ａ０内のセクタＳＡに対応する。
【００３１】
区域Ａ２へのデータブロックＤＢの書き込み、つまり区域Ａ０から区域Ａ２へのデータブロックＤＢの移動が終了すると、グループＧ０において、フリー領域が区域Ａ２から区域Ａ０に切り替えられる。また、区域Ａ０内のセクタＳＡに割り当てられていた論理ブロックアドレスＬＢＡ“Ａ”の割当先が、当該セクタＳＡから区域Ａ２内のセクタＳＡ’に切り替えられる。
【００３２】
さて、上述のデータブロックＤＢの移動が終了した後、ホスト１００からＨＤＤ１０内のコントローラＣＮＴに対して、論理ブロックアドレスＬＢＡ“Ａ”の位置のデータの読み出しが指定されたものとする。この場合、コントローラＣＮＴは、区域Ａ２内のセクタＳＡ’のデータを、論理ブロックアドレスＬＢＡ“Ａ”の位置のデータとして読み出す。セクタＳＡ’は正常セクタであることから、データ読み出しが正常に行われる可能性が極めて高い。このような場合、セクタＳＡ’から読み出されたデータは、セクタＳＡに格納されていたデータとは異なる。このため、誤ったデータ（セクタデータ）が、指定された論理ブロックアドレスＬＢＡ“Ａ”の位置の正常なデータとしてコントローラＣＮＴからからホスト１００に返される可能性がある。
【００３３】
これを回避するために、例えば既存のディフェクト管理テーブルにセクタＳＡ’を一時的に仮登録するならば、コントローラＣＮＴは、当該セクタＳＡ’を本来読み出し不可（Read Uncorrectable）であったという特別なセクタ（に対応している）と認識して処理することも可能である。しかしこの方法を適用すると、一時的にせよ、ディフェクト管理テーブルに登録されるセクタ数（つまり管理されるべきセクタ数）が多くなってしまう可能性がある。また、多数のセクタが仮登録されたためにディフェクト管理テーブルが満杯となった場合、新たに真のディフェクトセクタが検出されても、当該真のディフェクトセクタをディフェクト管理テーブルに登録することが困難となる。
【００３４】
そこで第１の実施形態では、バッファメモリ１９に格納されたユーザデータのうちの読み出しエラーとなったユーザデータを含むセクタデータがセクタＳＡ’に書き込まれる場合、コントローラＣＮＴ内のインジケータ回路１８が当該読み出しエラーとなったユーザデータに、インジケータＩＮＤＩを付加する。このインジケータＩＮＤＩは、当該インジケータＩＮＤＩを含むセクタデータが書き込まれるべきセクタＳＡ’が、本来正常なデータ読み出しのできない（読み出しデータの訂正不能な）特殊なセクタ（に対応するセクタ）であることを示す、例えば論理“１”の指示ビットＵＮＣを含む。以下の説明では、この指示ビットＵＮＣをＩＮＤＩ［ＵＮＣ］ビットまたはＩＮＤＩ［ＵＮＣ］のように表記し、論理“１”の指示ビットＵＮＣをＩＮＤＩ［ＵＮＣ］＝１のように表記する。
【００３５】
ＥＣＣ回路１７は、インジケータ回路１８によってインジケータＩＮＤＩ（より詳細には、ＩＮＤＩ［ＵＮＣ］ビットを含むインジケータＩＮＤＩ）が付加されたユーザデータに基づいてＥＣＣを生成する。ＥＣＣ回路１７は、インジケータＩＮＤＩが付加されたユーザデータに、生成されたＥＣＣを付加する。そしてＥＣＣ回路１７は、インジケータＩＮＤＩ及びＥＣＣが付加されたユーザデータを含むセクタデータを、ライトデータとしてリードＩＣ１６に転送する。リードＩＣ１６は、ＥＣＣ回路１７から転送されたライトデータを符号化する。リードＩＣ１６によって符号化されたライトデータは、ヘッドアンプによってライト電流に変換され、このライト電流に基づいてヘッド１２によって対応するセクタ、つまりセクタＳＡ’に書き込まれる。
【００３６】
図４は、ディスク１１の区域Ａ２内のセクタＳＡ’に、ＩＮＤＩ［ＵＮＣ］＝１を含むライトデータ（セクタデータ）が書き込まれている様子も示している。インジケータ回路１８は、このようなＩＮＤＩ［ＵＮＣ］＝１を含む（つまりＩＮＤＩ［ＵＮＣ］＝１が埋め込まれた）ライトデータ（セクタデータ）が読み出された場合、ＥＣＣ回路１７と同等の判断を行う。このようにインジケータ回路１８は、読み出されたセクタデータからＩＮＤＩ［ＵＮＣ］＝１を検出することにより、当該セクタデータが格納されているセクタＳＡ’が、本来データの正常な読み出し（読み出しデータの訂正）ができない特殊なセクタであると判断する。このように第１の実施形態では、読み出しエラーとなったセクタＳＡの属性が、当該セクタＳＡのデータの移動先のセクタＳＡ’に書き込まれたユーザデータに付加されたインジケータＩＮＤＩ中のＩＮＤＩ［ＵＮＣ］＝１によって示される。
【００３７】
読み出されたセクタデータからインジケータ回路１８がＩＮＤＩ［ＵＮＣ］＝１を検出すると、コントローラＣＮＴ内のＭＰＵ２０は、ＥＣＣ回路１７で読み出しエラーが検出された場合と同様のエラー処理を行う。つまり、セクタＳＡ’から正常にセクタデータが読み出せた場合でも、ＭＰＵ２０は、読み出しデータの訂正が不能な状態が発生したかの如く、エラー処理を行うことができる。しかも、第１の実施形態においては、このような特殊なセクタＳＡ’を、ディフェクト管理テーブルのような特別のテーブルで管理する必要はない。
【００３８】
また、セクタＳＡ’が属する区域Ａ２に書き込まれているデータブロックを、区域Ａ２が属するグループＧ０内のフリー領域に移動する場合、コントローラＣＮＴは、ＩＮＤＩ［ＵＮＣ］＝１を含むセクタＳＡ’のセクタデータをそのままフリー領域内の対応するセクタにコピーしてもよい。これにより、上述したようなＩＮＤＩ［ＵＮＣ］＝１を付加する処理を行わなくても、セクタＳＡの属性を、セクタＳＡ’からセクタデータの移動先のセクタに継承していくことが可能となる。
【００３９】
次に、第１の実施形態で適用されるデータブロック移動処理の手順について、上述のデータブロックＤＢを区域Ａ０からフリー領域としての区域Ａ２へ移動する場合を例に、図５のフローチャートを参照して説明する。  
まずコントローラＣＮＴ内のＭＰＵ２０は、区域（読み出し対象区域）Ａ０内の読み出されるべきセクタ（移動元セクタ）を指定する読み出し論理ブロックアドレスＲＬＢＡを、当該区域Ａ０内の先頭セクタに割り当てられている論理ブロックアドレス、つまり区域Ａ０の先頭の論理ブロックアドレス（先頭ＬＢＡ）に設定する（ステップ５０１）。またＭＰＵ２０は、区域（書き込み対象区域）Ａ２内のセクタデータの書き込み先となるセクタ（移動先セクタ）を指定する書き込み論理ブロックアドレスＷＬＢＡを、当該区域Ａ２内の先頭セクタに割り当てられるべき論理ブロックアドレスである上記先頭ＬＢＡに設定する（ステップ５０２）。
【００４０】
次にＭＰＵ２０は、インジケータ回路１８が論理“０”のＩＮＤＩ［ＵＮＣ］ビット、つまりＩＮＤＩ［ＵＮＣ］＝０を含むインジケータＩＮＤＩをユーザデータに付加するための第１のモードに、当該インジケータ回路１８を設定する（ステップ５０３）。
【００４１】
次にＭＰＵ２０は、区域Ａ０内の、現在の読み出し論理ブロックアドレスＲＬＢＡの示すセクタからセクタデータを読み出すためのセクタ読み出し処理を実行する（ステップ５０４）。このセクタ読み出し処理で読み出されたセクタデータは、リードＩＣ１６によって復号される。リードＩＣ１６によって復号されたセクタデータは、ＥＣＣ回路１７に転送される。
【００４２】
ＥＣＣ回路１７は、リードＩＣ１６から転送されたセクタデータ（リードデータ）からユーザデータ、インジケータＩＮＤＩ及びＥＣＣを抽出する。そしてＥＣＣ回路１７は、ＥＣＣに基づいてユーザデータの誤り検出・訂正を行うことにより、読み出しエラーが発生したかを判定する。ここでは、説明の簡略化のために、リードリトライの動作は省略されているが、ＲＬＢＡの示すセクタから正しくセクタデータを読めない場合、一般には、当該セクタからのセクタデータを読み出すためのリード動作がリトライされる。このリトライが一定回数繰り返されても、正しくセクタデータを読めない（ユーザデータの誤り訂正が不能な）場合に、読み出しエラーが判定される。ＥＣＣ回路１７の判定結果はＭＰＵ２０に通知される。
【００４３】
ＥＣＣ回路１７は、抽出されたユーザデータ及びインジケータＩＮＤＩをインジケータ回路１８に転送する。インジケータ回路１８は、インジケータＩＮＤＩ中のＩＮＤＩ［ＵＮＣ］ビットが“１”（ＩＮＤＩ［ＵＮＣ］＝１）であるかを判定し、その判定結果をＭＰＵ２０に通知する。インジケータ回路１８は、インジケータＩＮＤＩが付加されていたユーザデータを、バッファメモリ１９に格納する。ここでは、ステップ５０４でセクタデータが読み出される順番で、対応するユーザデータがバッファメモリ１９に格納される。
【００４４】
ＭＰＵ２０は、ＥＣＣ回路１７及びインジケータ回路１８の各々の判定結果に基づいて、読み出しエラーが検出されたか、或いはＩＮＤＩ［ＵＮＣ］＝１が検出されたかを判定する（ステップ５０５）。もし、読み出しエラー及びＩＮＤＩ［ＵＮＣ］＝１のいずれも検出されなかった場合には（ステップ５０５のＮｏ）、ＭＰＵ２０は次に読み出されるべきセクタを指定するために、現在のＲＬＢＡを例えば１インクリメントする（ステップ５０６）。
【００４５】
ＭＰＵ２０は、インクリメント後のＲＬＢＡに基づき、セクタ読み出し処理が、移動されるべきデータブロックＤＢの終端、つまり区域Ａ０内の最終セクタまで行われたかを判定する（ステップ５０７）。もし、セクタ読み出し処理がデータブロックＤＢの終端まで行われていないならば（ステップ５０７のＮｏ）、ＭＰＵ２０は再びセクタ読み出し処理を実行する（ステップ５０４）。
【００４６】
一方、読み出しエラーまたはＩＮＤＩ［ＵＮＣ］＝１が検出された場合には（ステップ５０５のＹｅｓ）、ＭＰＵ２０はステップ５０８に進む。読み出しエラーまたはＩＮＤＩ［ＵＮＣ］＝１が検出された場合における読み出し論理ブロックアドレスＲＬＢＡを、エラーＲＬＢＡと称する。
【００４７】
ステップ５０８においてＭＰＵ２０は、バッファメモリ１９に格納されている、論理ブロックアドレスＷＬＢＡ乃至エラーＲＬＢＡ−１に対応するユーザデータ（つまり正常に読み出されたユーザデータ）を、区域Ａ２内の対応するセクタ群にセクタ単位で書き込む（移動する）ためのデータ書き込み処理を実行する（ステップ５０８）。
【００４８】
このデータ書き込み処理（ステップ５０８）において、インジケータ回路１８は、論理ブロックアドレスＷＬＢＡ乃至エラーＲＬＢＡ−１に対応するユーザデータをバッファメモリ１９から順次読み出す。このときインジケータ回路１８は第１のモードに設定されている。この場合、インジケータ回路１８は、読み出されたユーザデータに、ＩＮＤＩ［ＵＮＣ］＝０（論理“０”のＩＮＤＩ［ＵＮＣ］）を含むインジケータＩＮＤＩを付加する。但し、以下の説明では、インジケータＩＮＤＩと、当該インジケータＩＮＤＩに含まれているＩＮＤＩ［ＵＮＣ］ビットとを区別する必要がある場合を除き、簡略化のために、ＩＮＤＩ［ＵＮＣ］ビット（ここでは論理“０”のＩＮＤＩ［ＵＮＣ］ビット）がユーザデータに付加されるものとする。つまり、セクタデータが、ユーザデータ、ＩＮＤＩ［ＵＮＣ］ビット及びＥＣＣから構成されているものとする。
【００４９】
インジケータ回路１８は、論理“０”のＩＮＤＩ［ＵＮＣ］ビット、つまりＩＮＤＩ［ＵＮＣ］＝０が付加されたユーザデータをＥＣＣ回路１７に転送する。
【００５０】
ＥＣＣ回路１７は、インジケータ回路１８から転送された、ＩＮＤＩ［ＵＮＣ］＝０が付加されたユーザデータに基づいてＥＣＣを生成する。ＥＣＣ回路１７は、生成されたＥＣＣを、ＩＮＤＩ［ＵＮＣ］＝０が付加されたユーザデータに付加する。ＥＣＣ回路１７は、ＩＮＤＩ［ＵＮＣ］＝０及びＥＣＣが付加されたユーザデータを含むセクタデータを、ライトデータとしてリードＩＣ１６に転送する。このライトデータは、リードＩＣ１６及びヘッドアンプを介してヘッド１２により区域Ａ２内の対応するセクタに書き込まれる。
【００５１】
この書き込みに応じて書き込み論理ブロックアドレスＷＬＡＢが１インクリメントされる。したがって、データ書き込み処理（ステップ５０８）が終了した段階では、書き込み論理ブロックアドレスＷＬＡＢは現在の読み出し論理ブロックアドレスＲＬＡＢ、つまりエラーＲＬＡＢに一致する。
【００５２】
ＭＰＵ２０は、データ書き込み処理（ステップ５０８）を終了すると、インジケータ回路１８が論理“１”のＩＮＤＩ［ＵＮＣ］ビット、つまりＩＮＤＩ［ＵＮＣ］＝１をユーザデータに付加するための第２のモードに、当該インジケータ回路１８を設定する（ステップ５０９）。次にＭＰＵ２０は、バッファメモリ１９に格納されている、エラーＲＬＢＡに対応するユーザデータ（つまり読み出しエラーまたはＩＮＤＩ［ＵＮＣ］＝１が判定されたユーザデータ）を、区域Ａ２内の対応するセクタ（つまり区域Ａ２内の、エラーＲＬＢＡに一致するＷＬＢＡの示すセクタ）に書き込むためのデータ書き込み処理を実行する（ステップ５１０）。
【００５３】
このデータ書き込み処理（ステップ５１０）において、インジケータ回路１８は、エラーＲＬＢＡに対応するユーザデータをバッファメモリ１９から読み出す。このときインジケータ回路１８は第２のモードに設定されている。この場合、インジケータ回路１８は、読み出されたユーザデータにＩＮＤＩ［ＵＮＣ］＝１を付加する。これにより、データ書き込み処理（ステップ５１０）では、ＩＮＤＩ［ＵＮＣ］＝１及びＥＣＣが付加されたユーザデータを含むセクタデータが、区域Ａ２内の、エラーＲＬＢＡに一致するＷＬＢＡの示すセクタに書き込まれる。
【００５４】
ＭＰＵ２０は、データ書き込み処理（ステップ５１０）を終了すると、書き込み論理ブロックアドレスＷＬＡＢ及び読み出し論理ブロックアドレスＲＬＡＢを、それぞれ１インクリメントする（ステップ５１１及び５１２）。そしてＭＰＵ２０は、ステップＳ５０３に戻る。
【００５５】
一方、セクタ読み出し処理がデータブロックＤＢの終端まで行われているならば（ステップ５０７のＹｅｓ）、ＭＰＵ２０は、区域Ａ２内の、現在の書き込み論理ブロックアドレスＷＬＢＡの示すセクタにセクタデータを書き込むためのデータ書き込み処理を実行する（ステップ５１３）。
【００５６】
このデータ書き込み処理（ステップ５１３）において、インジケータ回路１８は、論理ブロックアドレスＷＬＢＡに対応するユーザデータをバッファメモリ１９から読み出す。このときインジケータ回路１８は第１のモードに設定されている。この場合、インジケータ回路１８は、読み出されたユーザデータにＩＮＤＩ［ＵＮＣ］＝０を付加する。これにより、データ書き込み処理（ステップ５１３）では、ＩＮＤＩ［ＵＮＣ］＝０及びＥＣＣが付加されたユーザデータを含むセクタデータが、区域Ａ２内の、論理ブロックアドレスＷＬＢＡの示すセクタに書き込まれる。
【００５７】
ＭＰＵ２０は、データ書き込み処理（ステップ５１３）を終了すると、書き込み論理ブロックアドレスＷＬＡＢを１インクリメントする（ステップ５１４）。そしてＭＰＵ２０は、インクリメント後のＷＬＢＡに基づき、データ書き込み処理が、データブロックＤＢの終端、つまり区域Ａ２内の最終セクタまで行われたかを判定する（ステップ５１５）。もし、データ書き込み処理がデータブロックＤＢの終端まで行われていないならば（ステップ５１５のＮｏ）、ＭＰＵ２０は再びデータ書き込み処理を実行する（ステップ５１３）。これに対し、データ書き込み処理がデータブロックＤＢの終端まで行われているならば（ステップ５１５のＹｅｓ）、ＭＰＵ２０はデータブロック移動処理を終了する。
【００５８】
次に、第１の実施形態で適用されるデータ読み出し処理の手順について、図６のフローチャートを参照して説明する。  
まず、ホスト１００からＨＤＤ１０内のコントローラＣＮＴに対して、あるデータブロック（データ）の読み出しを指定するリードコマンドが発行されたものとする。このデータブロックは、当該データブロックの先頭の論理ブロックアドレス（先頭ＬＢＡ）と当該データブロックのデータ長（例えばセクタ数）との示すリードアクセス範囲によって指定される。
【００５９】
コントローラＣＮＴ内のＭＰＵ２０は、読み出されるべきセクタを指定する読み出し論理ブロックアドレスＲＬＢＡをリードアクセス範囲の先頭ＬＢＡに設定する（ステップ６０１）。
【００６０】
次にＭＰＵ２０は、現在の読み出し論理ブロックアドレスＲＬＢＡの示すセクタからセクタデータを読み出すためのセクタ読み出し処理を実行する（ステップ６０２）。
【００６１】
ＥＣＣ回路１７は、セクタ読み出し処理で読み出されたされたセクタデータに含まれているユーザデータの誤り検出・訂正を当該セクタデータに含まれているＥＣＣに基づいて行うことにより、読み出し不可（Read Uncorrectable）のような読み出しエラーが発生したかを判定する。インジケータ回路１８は、上記読み出されたセクタデータに含まれているＩＮＤＩ［ＵＮＣ］ビットが“１”（ＩＮＤＩ［ＵＮＣ］＝１）であるかを判定する。
【００６２】
ＭＰＵ２０は、インジケータ回路１８の判定結果に基づいてＩＮＤＩ［ＵＮＣ］＝１が検出されたかを判定する（ステップ６０３）。ＭＰＵ２０はまた、ＥＣＣ回路１７の判定結果に基づいて読み出しエラーが検出されたかを判定する（ステップ６０４）。
【００６３】
もし、ＩＮＤＩ［ＵＮＣ］＝１が検出されず（ステップ６０３のＮｏ）、読み出しエラーも検出されなかった場合（ステップ６０４のＮ０）、ＭＰＵ２０は例えばＲＬＢＡを１インクリメントした後、ステップ６０５に進む。ステップ６０５においてＭＰＵ２０は、読み出されるべきデータが残っているかを判定する。
【００６４】
もし、読み出されるべきデータが残っているならば（ステップ６０５のＹｅｓ）、ＭＰＵ２０はステップ６０２に戻って、セクタ読み出し処理を再び実行する。これに対し、読み出されるべきデータが残っていないならば（ステップ６０５のＮｏ）、つまりセクタ読み出し処理が、指定されたデータブロックの終端まで行われているならば、ＭＰＵ２０はステップ６０６に進む。このステップ６０６において、ＭＰＵ２０は、リードコマンドの実行を正常に終了したことをホスト１００に報告するための正常終了処理を実行する。
【００６５】
一方、ＩＮＤＩ［ＵＮＣ］＝１が検出されたか（ステップ６０３のＹｅｓ）、或いは、読み出しエラーが検出された場合（ステップ６０４のＹｅｓ）、ＭＰＵ２０はステップ６０７に進む。ステップ６０７において、ＭＰＵ２０は、ホスト１００からのリードコマンドの実行でエラーが発生したことをホスト１００に報告するためのエラー処理を実行する。
【００６６】
このように第１の実施形態では、ＲＬＢＡの指定するセクタ（物理セクタ）からのセクタデータの読み出しで読み出しエラーが検出されなくても、つまりセクタデータが正常に読み出せても、当該セクタデータに含まれているＩＮＤＩ［ＵＮＣ］ビットが“１”（ＩＮＤＩ［ＵＮＣ］＝１）の場合には、読み出しエラーが検出された場合と同様に、エラー処理が行われる。例えば、ＲＬＢＡの指定する物理セクタが図４に示すセクタＳＡ’である場合、当該セクタＳＡ’に格納されているセクタデータ自体は正常に読み出せても、当該セクタデータにＩＮＤＩ［ＵＮＣ］＝１が含まれているため、エラー処理が行われる。その理由は、ＲＬＢＡの指定するセクタＳＡ’（つまりＲＬＢＡが割り当てられているセクタＳＡ’）に格納されているデータ自体は正しく読み出せても、当該ＲＬＢＡが以前に割り当てられていたセクタＳＡは読み出し不可であるためである。つまり、セクタＳＡのデータの直接または間接の移動先（ここでは直接の移動先）となったセクタＳＡ’に書き込まれたデータは、当該セクタＳＡに格納されているデータとは異なる不正データであるためである。
【００６７】
即ち第１の実施形態によれば、瓦書きを適用するＨＤＤに代表されるような、ある長さのデータブロックを書き換える制御を行うＨＤＤにおいて、ディスクに書き込まれる各セクタデータに、読み出し不可を示すＩＮＤＩ［ＵＮＣ］ビットを含むインジケータＩＮＤＩが埋め込まれる。つまり、書き換え前のデータブロックに読み出しエラーとなったセクタデータが含まれている場合に、その旨を示す、該当セクタの書き換えに関する属性情報(Pending情報)が、書き込み先のセクタデータに埋め込まれる。これにより、セクタデータが格納される物理的なセクタの位置が変更される場合にもこの情報を引き継ぐことが可能となり、この情報を例えば管理テーブルを用いて管理することが不要となる。
【００６８】
［第２の実施形態］
次に、第２の実施形態について図１を援用して説明する。つまり、第２の実施形態に係る磁気ディスク装置（ＨＤＤ）１０の構成（ハードウェア構成）は、前記第１の実施形態のそれと同一であるものとする。また、ＨＤＤ１０は、第１の実施形態と同様に瓦書きを適用するものとする。第２の実施形態が第１の実施形態と相違する点は、インジケータＩＮＤＩの構成にある。
【００６９】
図７は、第２の実施形態で適用されるセクタのデータフォーマットの一例を示す。セクタは、第１の実施形態と同様に、主として、ユーザデータフィールドと、インジケータ（ＩＮＤＩ）フィールドと、ＥＣＣフィールドとから構成される。第２の実施形態において、ユーザデータに付加されるインジケータＩＮＤＩは、書き換え回数（Ｎ）を含む。この点で第２の実施形態は、インジケータＩＮＤＩがＩＮＤＩ［ＵＮＣ］ビット（書き込み不可ビット）を含む第１の実施形態と相違する。この相違により、第２の実施形態では、第１の実施形態と異なる手順のデータブロック移動処理及びデータ読み出し処理が適用される。以下の説明では、インジケータＩＮＤＩと、当該インジケータＩＮＤＩに含まれている書き換え回数（Ｎ）とを区別する必要がある場合を除き、簡略化のために、書き換え回数（Ｎ）がユーザデータに付加されるものとする。つまり、セクタデータが、ユーザデータ、書き換え回数（Ｎ）及びＥＣＣから構成されているものとする。この書き換え回数をＩＮＤＩ［Ｎ］のように表記する。
【００７０】
以下、第２の実施形態で適用されるデータブロック移動処理の手順について、第１の実施形態と同様にデータブロックＤＢを区域Ａ０から区域Ａ２へ移動する場合を例に、図８のフローチャートを参照して説明する。
【００７１】
以前に、グループＧ０内の、ある区域（移動元区域）から別の区域、例えば区域（移動先区域）Ａ２にデータブロックを移動するデータブロック移動処理が電源遮断なしに最終セクタまで行われたものとする。また、データブロック移動処理の途中で電源遮断が発生した場合でも、後述するデータ回復処理で、電源遮断の発生により処理（データ書き込み）が中断されたセクタから区域Ａ２の最終セクタまで、データ移動が完了しているものとする。いずれの場合でも、区域Ａ２の全セクタに格納されているセクタデータに含まれている（埋め込まれている）ＩＮＤＩ［Ｎ］（書き換え回数）は等しい。
【００７２】
そこでＭＰＵ２０は、区域（移動先区域）Ａ２の例えば先頭セクタからセクタデータを読み出すことにより、当該セクタデータからＩＮＤＩ［Ｎ］を取得する（ステップ８０１）。また、ＩＮＤＩ［Ｎ］の値がｎであるものとすると、この値がｎのＩＮＤＩ［Ｎ］をＩＮＤＩ［Ｎ］＝ｎと表記する。
【００７３】
次にＭＰＵ２０は、区域（移動元区域）Ａ０に格納されているデータブロックＤＢを例えばセクタ単位で読み出すための移動元データ読み出し処理を実行する（ステップ８０２）。この移動元データ読み出し処理で読み出されたセクタデータ中のユーザデータは順次バッファメモリ１９に格納される。
【００７４】
次にＭＰＵ２０は、ステップ８０１で取得したＩＮＤＩ［Ｎ］（＝ｎ）に１を加算し（ＩＮＤＩ［Ｎ］＝ｎ＋１）、この１が加算されたＩＮＤＩ［Ｎ］＝ｎ＋１を含むＩＮＤＩ［Ｎ］＝ｎ＋１をインジケータ回路１８に設定する（ステップ８０３）。これによりＭＰＵ２０は、設定されたＩＮＤＩ［Ｎ］＝ｎ＋１をユーザデータに付加することを、インジケータ回路１８に指示する。
【００７５】
次にＭＰＵ２０は、移動元データ読み出し処理（ステップ８０２）でバッファメモリ１９に順次格納されたユーザデータを含むセクタデータを、区域（移動素器区域）Ａ２に書き込む（移動）ためのデータ書き込み処理を実行する（ステップ８０４）。
【００７６】
このデータ書き込み処理（ステップ８０４）において、インジケータ回路１８は、移動元データ読み出し処理（ステップ８０２）でバッファメモリ１９に格納されたユーザデータを順次読み出す。インジケータ回路１８は、読み出されたユーザデータに、ステップ８０３でＭＰＵ２０によって設定されたＩＮＤＩ［Ｎ］＝ｎ＋１を付加する。
【００７７】
ＥＣＣ回路１７は、ＩＮＤＩ［Ｎ］＝ｎ＋１が付加されたユーザデータに基づいてＥＣＣを生成し、生成されたＥＣＣを、ＩＮＤＩ［Ｎ］＝ｎ＋１が付加されたユーザデータに付加する。ＥＣＣ回路１７は、ＩＮＤＩ［Ｎ］＝ｎ＋１及びＥＣＣが付加されたユーザデータを含むセクタデータを、ライトデータとしてリードＩＣ１６に転送する。このライトデータは、リードＩＣ１６及びヘッドアンプを介してヘッド１２により区域Ａ２内の対応するセクタに書き込まれる。
【００７８】
したがって、データブロック移動処理がＨＤＤ１０の電源の遮断なしに最終セクタまで行われた場合、区域Ａ２の全セクタにそれぞれ書き込まれた（移動された）セクタデータには、同一のＩＮＤＩ［Ｎ］＝ｎ＋１が含まれている。つまり、区域Ａ２の全セクタのＩＮＤＩ［Ｎ］（書き換え回数）はいずれもｎ＋１である。
【００７９】
これに対して、データブロック移動処理の途中でＨＤＤ１０の電源が遮断した場合、区域Ａ２の先頭セクタから電源遮断発生箇所の直前のセクタまでの各セクタのＩＮＤＩ［Ｎ］（書き換え回数）はｎ＋１である。しかし、区域Ａ２の電源遮断発生箇所の直後のセクタから最終セクタまでの各セクタのＩＮＤＩ［Ｎ］（書き換え回数）はｎである。このような例を、電源遮断発生箇所のセクタが、区域Ａ２内のトラックＴＲ_N+2上のセクタＳＢである場合について、図９に示す。図９からも明らかなように、ＩＮＤＩ［Ｎ］（書き換え回数）の違いを利用することにより、データブロック移動処理の途中で電源遮断が発生したか否かを判断し、更に電源遮断の発生により処理が中断されたセクタを特定することが可能である。
【００８０】
次に、第２の実施形態で適用されるデータ読み出し処理の手順について、図１０のフローチャートを参照して説明する。  
まず、ホスト１００からＨＤＤ１０内のコントローラＣＮＴに対して、あるデータブロックの読み出しを指定するリードコマンドが発行されたものとする。このリードコマンドの示すリードアクセス範囲が属する区域は、区域Ａ２であるものとする。
【００８１】
コントローラＣＮＴ内のＭＰＵ２０は、リードアクセス範囲が属する区域Ａ２の例えば先頭セクタ及び最終セクタからセクタデータを読み出すことにより、当該先頭セクタ及び最終セクタのセクタデータからＩＮＤＩ［Ｎ］（書き換え回数）を取得する（ステップ１００１）。以下の説明では、このようなＩＮＤＩ［Ｎ］を取得するためにセクタデータを読み出すことを、簡略化のために、ＩＮＤＩ［Ｎ］を読み出すと表現する。ここで、先頭セクタのＩＮＤＩ［Ｎ］がｎ１（ＩＮＤＩ［Ｎ］＝ｎ１）であり、最終セクタのＩＮＤＩ［Ｎ］がｎ２（ＩＮＤＩ［Ｎ］＝ｎ２）であるものとする。
【００８２】
ＭＰＵ２０は、ＩＮＤＩ［Ｎ］＝ｎ１がＩＮＤＩ［Ｎ］＝ｎ２に一致する（ｎ１＝ｎ２）かを判定する（ステップ１００２）。
【００８３】
もし、ＩＮＤＩ［Ｎ］＝ｎ１がＩＮＤＩ［Ｎ］＝ｎ２に一致するならば（ステップ１００２のＹｅｓ）、ある区域（例えばＡ０）から区域Ａ２へデータブロックを移動するためのデータ移動処理が正常に完了しているものと判断してステップ１００３に進む。この正常完了は、例えば電源遮断で中断されたデータ移動処理が後述するデータ回復処理によって完了している場合も含む。
【００８４】
ステップ１００３において、ＭＰＵ２０は、読み出されるべきセクタを指定する読み出し論理ブロックアドレスＲＬＢＡをリードアクセス範囲の先頭ＬＢＡに設定する。次にＭＰＵ２０は、現在の読み出し論理ブロックアドレスＲＬＢＡの示すセクタからセクタデータを読み出すためのセクタ読み出し処理を実行する（ステップ１００４）。
【００８５】
ＥＣＣ回路１７は、セクタ読み出し処理で読み出されたされたセクタデータに含まれているユーザデータの誤り検出・訂正を当該セクタデータに含まれているＥＣＣに基づいて行うことにより、読み出しエラーが発生したかを判定する。ＥＣＣ回路１７の判定結果はＭＰＵ２０に通知される。
【００８６】
ＭＰＵ２０は、ＥＣＣ回路１７の判定結果に基づいて、読み出しエラーが検出されたかを判定する（ステップ１００５）。もし、読み出しエラーが検出されなかった場合（ステップ１００５のＮｏ）、ＭＰＵ２０は例えばＲＬＢＡを１インクリメントした後、ステップ１００６に進む。ステップ１００６においてＭＰＵ２０は、読み出されるべきデータが残っているかを判定する。
【００８７】
もし、読み出されるべきデータが残っているならば（ステップ１００６のＹｅｓ）、ＭＰＵ２０はステップ１００４に戻って、セクタ読み出し処理を再び実行する。これに対し、読み出されるべきデータが残っていないならば（ステップ１００６のＮｏ）、ＭＰＵ２０は正常終了処理を実行する（ステップ１００７）。
【００８８】
また、読み出しエラーが検出されたならば（ステップ１００５のＹｅｓ）、ＭＰＵ２０は、エラー処理を実行する（ステップ１００８）。
【００８９】
一方、ＩＮＤＩ［Ｎ］＝ｎ１がＩＮＤＩ［Ｎ］＝ｎ２に一致しないならば（ステップ１００２のＮｏ）、ＭＰＵ２０は、区域Ａ０から区域Ａ２へデータブロックを移動するためのデータブロック移動処理の途中で例えば電源遮断が発生して、当該データブロック移動処理が正常に完了していないものと判断する。この場合、ＭＰＵ２０は、以下に述べるデータ回復処理を実行する（ステップ１００９）。
【００９０】
ＭＰＵ２０は、データ回復処理の始めで、電源遮断の発生により処理が中断されたセクタを特定する。この電源遮断の発生により処理が中断されたセクタを特定する手法について、図９を参照して説明する。  
ＭＰＵ２０はまず、区域Ａ２内の先頭のトラックＴＲ_N+1上の先頭セクタ及び最終セクタからＩＮＤＩ［Ｎ］（書き換え回数）を読み出す。ＭＰＵ２０は、読み出された両ＩＮＤＩ［Ｎ］を比較することにより、両ＩＮＤＩ［Ｎ］が一致するかを判定する。図９の例では、両ＩＮＤＩ［Ｎ］はいずれもｎ＋１であり、一致する。この場合、ＭＰＵ２０は、トラックＴＲ_N+1へのデータ移動は正常に完了していると判断する。
【００９１】
次にＭＰＵ２０は、区域Ａ２内の２番目のトラックＴＲ_N+2上の先頭セクタ及び最終セクタからＩＮＤＩ［Ｎ］を読み出す。ＭＰＵ２０は、読み出された両ＩＮＤＩ［Ｎ］を比較することにより、両ＩＮＤＩ［Ｎ］が一致するかを判定する。図９の例では、トラックＴＲ_N+2の先頭セクタ及び最終セクタのＩＮＤＩ［Ｎ］は、それぞれｎ＋１及びｎであり、一致しない。この場合、ＭＰＵ２０は、トラックＴＲ_N+2へのデータ移動の途中で電源遮断が発生したものと判断する。なお、トラックＴＲ_N+2のように、次のトラック（ＴＲ_N+3）が存在する場合には、トラックＴＲ_N+2の先頭セクタと当該次のトラックの先頭セクタとからＩＮＤＩ［Ｎ］を読み出してもよい。
【００９２】
次にＭＰＵ２０は、トラックＴＲ_N+2上の２番目のセクタからＩＮＤＩ［Ｎ］を読み出す。ＭＰＵ２０は、トラックＴＲ_N+2上の先頭セクタのＩＮＤＩ［Ｎ］（＝ｎ＋１）とトラックＴＲ_N+2上の２番目のセクタのＩＮＤＩ［Ｎ］とが一致するかを判定する。
【００９３】
ＭＰＵ２０は、以上の動作を、読み出しの対象となるトラックＴＲ_N+2上のセクタを順次切り替えながら、先頭セクタのＩＮＤＩ［Ｎ］（＝ｎ＋１）と一致しないＩＮＤＩ［Ｎ］を検出するまで繰り返す。第２の実施形態では、図９に示すセクタＳＢからＩＮＤＩ［Ｎ］が読み出された場合に、先頭セクタのＩＮＤＩ［Ｎ］（＝ｎ＋１）と一致しないＩＮＤＩ［Ｎ］（＝ｎ）が検出されるものとする。この場合、ＭＰＵ２０は、セクタＳＢをデータブロック移動処理の途中で電源遮断が発生したために処理が中断されたセクタであると判断する。
【００９４】
なお、トラック上の先頭セクタ及び最終セクタの両ＩＮＤＩ［Ｎ］の一致を検出することは必ずしも必要ない。そのためには、例えば、区域Ａ２内の２番目のセクタから順に、ＩＮＤＩ［Ｎ］を、区域Ａ２内の先頭セクタ（つまりトラックＴＲ_N+1上の先頭セクタ）のＩＮＤＩ［Ｎ］（＝ｎ＋１）と比較する動作を、当該先頭セクタのＩＮＤＩ［Ｎ］（＝ｎ＋１）と一致しないＩＮＤＩ［Ｎ］を検出するまで繰り返せばよい。つまり区域Ａ２内の先頭セクタから順にＩＮＤＩ［Ｎ］を読み出して、ＩＮＤＩ［Ｎ］の値が先頭セクタのＩＮＤＩ［Ｎ］（＝ｎ＋１）と最初に相違するセクタを検出してもよい。
【００９５】
さてＭＰＵ２０は、データブロック移動処理の途中で電源遮断が発生したために処理が中断された、セクタトラックＴＲ_N+2上のセクタＳＢを検出すると、当該セクタＳＢからトラックＴＲ_N+4上の最終セクタ（つまり区域Ａ２内の最終セクタ）までの各セクタのデータを、区域Ａ０内の対応する各セクタのデータを利用して回復するための処理を行う。つまりＭＰＵ２０は、区域Ａ２内のセクタＳＢから最終セクタまでの各セクタに、区域Ａ０内の対応するセクタのデータを移動するためのデータ移動処理（電源遮断により中断されていたデータ移動処理）を行う。このデータ移動処理では、区域Ａ２内のセクタＳＢから最終セクタまでの各セクタに移動されるセクタデータには、ｎからｎ＋１にインクリメントされたＩＮＤＩ［Ｎ］が含められる。  
ＭＰＵ２０はデータ回復処理（ステップ１００９）を実行し終えると、ステップ１００３に進む。
【００９６】
上記第２の実施形態では、上記第１の実施形態と同様に、グループに属する複数の区域の１つがフリー領域に割り当てられ、このフリー領域を利用して区域単位でデータ移動が行われる。この場合、データ移動は高速に行えるものの、グループ毎に１つのフリー領域を必要とするため、グループ内の記憶領域の利用効率が低下する。そこで、トラック毎に、そのトラック上で例えばセクタ単位でデータを書き換えるようにしてもよい。
【００９７】
瓦書きを適用するＨＤＤ１０において、例えば第１のトラックのデータの書き換えを行う場合、当該書き換えの影響を受ける少なくとも１つのトラックが存在する。ここでは、第２のトラックが第１のトラックのデータの書き換えの影響を受けるものとする。この場合、第２のトラックの各セクタのデータを、第１のトラックのデータの書き換えが開始される前に、例えば一時退避領域に退避（移動）しておく必要がある。
【００９８】
第１のトラックのデータの書き換えが完了すると、一時退避領域に退避されていた第２のトラックのデータを当該第２のトラックに再度書き込むための書き換え処理（再書き込み処理）が可能となる。第２のトラックのデータは、少なくとも当該書き換え処理が完了するまで、上記一時退避領域に保存されるように管理される。第２のトラックのデータの書き換えは、当該第２のトラックのデータの書き換えの影響を受ける、例えば第３のトラックの各セクタのデータを上記一時退避領域に退避した後に開始される。
【００９９】
第２のトラックのデータの書き換えの途中で電源遮断が発生した場合、電源遮断の発生により処理が中断されたセクタを、上記第２の実施形態と同様の手法により特定することができる。この場合、一時退避領域に退避されている第２のトラックのデータのうち、特定されたセクタから当該第２のトラックの最終セクタまでの各セクタのデータを用いて、書き換え処理を再開することができる。
【０１００】
上記第２の実施形態では、各セクタデータ中のインジケータＩＮＤＩに書き換え回数（ＩＮＤＩ［Ｎ］）が含まれている。そして、データブロック移動処理では、移動先区域内の各セクタに共通の書き換え回数（データブロックの移動前の書き換え回数）をインクリメントした値が用いられる。しかし、書き換え回数をインクリメントした値を必ずしも用いる必要はなく、データ移動前（データ書き換え前）の書き換え回数とは異なる値であればよい。つまり、書き換え回数に代えて、書き換えの属性を示す属性値を用いてもよく、データブロック移動処理では、データ移動前の属性値とは異なる値の属性値を使用すればよい。
【０１０１】
このように、第２の実施形態においては、各セクタデータに埋め込まれるインジケータＩＮＤＩに、書き換え回数（ＩＮＤＩ［Ｎ］）のような、書き換えの属性を示す属性値を含められる。これにより、データブロックの書き換えの途中で電源遮断が発生した場合に、その電源遮断の発生により処理が中断されたセクタを容易に特定することが可能となる。
【０１０２】
［第３の実施形態］
次に、第３の実施形態について図１を援用して説明する。つまり、第３の実施形態に係る磁気ディスク装置（ＨＤＤ）１０の構成は、前記第１及び第２の実施形態のそれと同一であるものとする。また、ＨＤＤ１０は、第１及び第２の実施形態と同様に瓦書きを適用し、第２の実施形態と同様に書き換え回数（ＩＮＤＩ［Ｎ］）を含むインジケータＩＮＤＩを適用するものとする。
【０１０３】
以下、第３の実施形態が第２の実施形態と相違する点について図面を参照して説明する。  
第３の実施形態では、ディスク１１上の所定の領域が、ライトデータを一時格納するための一時格納領域（キャッシュ領域）として用いられる。この一時格納領域を不揮発性キャッシュ領域と称する。不揮発性キャッシュ領域は、前述のグループＧ０及びＧ１のいずれにも属さないものとする。
【０１０４】
図１１は、ディスク１１上に確保された不揮発性キャッシュ領域１１０に、ホスト１００からのライトコマンドによって指定されたライトデータ（データブロック）の一部が格納されている状態を示す。
【０１０５】
ＭＰＵ２０は、ホスト１００から転送されたライトデータを、バッファメモリ１９を介して不揮発性キャッシュ領域１１０に順次書き込む（一時格納する）。このときＭＰＵ２０は、不揮発性キャッシュ領域１１０を、矢印１１１及び１１２で示すように、先頭位置から順に先入れ先出し（ＦＩＦＯ）によりサイクリックに使用する。つまり不揮発性キャッシュ領域１１０は、ＦＩＦＯを利用したリングバッファとして用いられる。ＭＰＵ２０は、不揮発性キャッシュ領域１１０に一時格納されたライトデータを、ＭＰＵ２０によって指定された本来のライトアクセス範囲に書き込む。
【０１０６】
瓦書きを適用するＨＤＤ１０では、例えばホスト１００からのライトコマンドによって１トラックのデータの書き込みが指定された場合でも、そのトラックが属する区域内の全トラックのデータを書き直す必要がある。つまり、第１及び第２の実施形態で適用されたような、データブロック移動処理が必要となる。この場合、データブロック移動処理が完了することによってライトコマンドの完了がホスト１００に報告されるため、コマンドレスポンスが低下する。
【０１０７】
これに対し、ホスト１００からのライトコマンドによって指定されたライトデータを、ＭＰＵ２０が不揮発性キャッシュ領域１１０にＦＩＦＯを利用して書き込むならば、当該ライトデータを高速で不揮発性キャッシュ領域１１０に一時的に格納できる。この場合、指定されたライトデータの不揮発性キャッシュ領域１１０への書き込みが完了した時点で、ライトコマンドの完了をＨＤＤ１０からホスト１００に報告することが可能となるため、コマンドレスポンスが向上する。
【０１０８】
不揮発性キャッシュ領域１１０に一時格納されたライトデータは、バッファメモリ１９から読み出される場合と同様に、ＦＩＦＯを利用して順次読み出され、対応するライトコマンドによって指定されたディスク１１上のライトアクセス範囲に書き込まれる。この書き込みは、第１及び第２の実施形態で適用されたような、当該ライトアクセス範囲が属する区域のデータブロック（より詳細には、ライトアクセス範囲のデータがライトデータで置き換えられたデータブロック）をフリー領域に移動するためのデータブロック移動処理によって実現される。
【０１０９】
第３の実施形態では、不揮発性キャッシュ領域１１０にライトデータが書き込まれる際にも、セクタデータ中にインクリメントされたＩＮＤＩ［Ｎ］が埋め込まれる。図１１において、不揮発性キャッシュ領域１１０上の位置Ｐ１及びＰ２は、ホスト１００からのライトコマンドによって指定された、ライトデータ（データブロック）が一時的に格納されるべき不揮発性キャッシュ領域１１０内の領域部分１１３の、それぞれ先頭（始端）及び最後尾（終端）を示す。
【０１１０】
図１１の例では、位置Ｐ１のセクタから、位置Ｐ１及びＰ２の間の位置Ｐ３の直前のセクタまで、指定されたライトデータの一部が書き込まれている。また、図１１において、指定されたライトデータを位置Ｐ１のセクタから順に書き込む動作が開始される前の、少なくとも、位置Ｐ１のセクタから不揮発性キャッシュ領域１１０の最後尾のセクタまでの各セクタに埋め込まれている書き換え回数（ＩＮＤＩ［Ｎ］）はｎ（ＩＮＤＩ［Ｎ］＝ｎ）であるものとする。この場合、位置Ｐ１のセクタから位置Ｐ３の直前のセクタまで、指定されたライトデータの一部が書き込まれた段階では、位置Ｐ１から位置Ｐ３の直前までの各セクタに埋め込まれている書き換え回数（ＩＮＤＩ［Ｎ］）はｎ＋１（ＩＮＤＩ［Ｎ］＝ｎ＋１）となる。
【０１１１】
不揮発性キャッシュ領域１１０内の各セクタは、ディスク１１上の通常の領域と異なり、ＬＢＡが順に割り当てられていない。したがって、ホスト１００からのライトコマンドに応じて不揮発性キャッシュ領域１１０に格納されるライトデータの位置は、当該ライトコマンドによって指定されるＬＢＡの示す位置と対応していない。そのため、不揮発性キャッシュ領域１１０におけるライトデータの位置と当該ライトデータの書き込み先を示すＬＢＡとを、例えば管理テーブルで対応付けて管理する必要がある。
【０１１２】
また、不揮発性キャッシュ領域１１０を適用するＨＤＤ１０では、不揮発性キャッシュ領域１１０にライトデータを書き込んでいる途中で電源遮断が発生した場合を考慮する必要がある。そこで、例えば、ライトデータを全て不揮発性キャッシュ領域１１０に書き終えた段階で管理テーブルを更新すればよい。また、ライトデータの終端（ライトデータの最終セクタ）の次に書き換え完了を示すセクタデータを書き込んでもよい。しかし、この手法では、ライトデータの先頭から何番目のセクタへのデータ書き込みで電源遮断が発生したかを検出することができない。このため、ライトデータの全てが失われてしまう。
【０１１３】
一方、不揮発性キャッシュ領域１１０を使わずに直接ライトコマンドで指定されたＬＢＡの位置にライトデータを書き込むタイプのＨＤＤ（以下、現状のＨＤＤと称する）では、ライトデータを書き込んでいる途中で電源遮断が発生した場合、当該電源遮断の発生により処理が中断されたセクタの直前までのデータは更新された状態となる。つまり、処理が中断されたセクタの直前までのデータは失われない。このように、不揮発性キャッシュ領域１１０を使用する場合と使用しない場合とで、ＨＤＤの振る舞いが変わってしまう。
【０１１４】
しかし、第３の実施形態では、不揮発性キャッシュ領域１１０に書き込まれるデータに、第２の実施形態と同様に、セクタ単位で書き換え回数（ＩＮＤＩ［Ｎ］）が埋め込まれる。このため、以下に述べるように、上述のようなライトデータの全てが失われることを回避可能である。
【０１１５】
今、図１１に示す位置Ｐ３の直後のセクタにライトデータの対応するセクタデータを書き込んでいる状態で電源遮断が発生したものとする。この場合、第２の実施形態と同様に、電源遮断の発生により処理が中断されたセクタの前後で書き換え回数（ＩＮＤＩ［Ｎ］）が相違していることを検出できる。つまり、電源遮断の発生により処理が中断されたセクタを特定できる。したがって、この処理が中断されたセクタの１つ前のセクタのデータまでは保証でき、現状のＨＤＤと同等の振る舞いが可能になる。
【０１１６】
次に、第３の実施形態で適用される、不揮発性キャッシュ領域１１０へのデータ書き込み処理の手順について図１２のフローチャートを参照して説明する。  
今、ホスト１００からＨＤＤ１０内のコントローラＣＮＴに対して、データの書き込みを指定するライトコマンドが発行され、当該ライトコマンドで指定されたライトデータがバッファメモリ１９に格納されたものとする。
【０１１７】
ＭＰＵ２０は、バッファメモリ１９に格納されたライトデータをディスク１１上の不揮発性キャッシュ領域１１０に書き込む前に、管理テーブルを更新する（ステップ１２０１）。この更新により、ライトコマンドで指定されたライトデータが書き込まれるべき不揮発性キャッシュ領域１１０内の位置と、当該ライトコマンドで指定されたライトデータの本来の書き込み先（ライトアクセス範囲）を示すＬＢＡとが対応付けられる。
【０１１８】
次にＭＰＵ２０は、指定されたライトデータを、前回不揮発性キャッシュ領域１１０に格納されたライトデータの終端の次のセクタから、当該不揮発性キャッシュ領域１１０にセクタ単位で順次書き込むためのデータライト処理を実行する（ステップ１２０２）。このデータライト処理では、第２の実施形態と同様に、インクリメントされた書き込み回数（ＩＮＤＩ［Ｎ］）が、ライトデータに対応する各セクタデータに埋め込まれる。
【０１１９】
さて、不揮発性キャッシュ領域１１０に書き込まれたデータが、ディスク１１上の本来のライトアクセス範囲に書かれる前に、当該データの読み出しがホスト１００からのリードコマンドによって指定されることがある。ホスト１００から指定されたデータが、不揮発性キャッシュ領域１１０に存在するかは、管理テーブルを参照することによって判定することができる。もし、ホスト１００から指定されたデータが、不揮発性キャッシュ領域１１０に存在する場合、当該データを不揮発性キャッシュ領域１１０から読み出すためのデータ読み出し処理が行われる。
【０１２０】
以下、第３の実施形態で適用される、不揮発性キャッシュ領域１１０からのデータ読み出し処理の手順について図１３のフローチャートを参照して説明する。  
まずＭＰＵ２０は、読み出されるべきセクタを指定する読み出し論理ブロックアドレスＲＬＢＡをリードアクセス範囲の先頭ＬＢＡに設定する（ステップ１３０１）。次にＭＰＵ２０は、現在の読み出し論理ブロックアドレスＲＬＢＡに対応する不揮発性キャッシュ領域１１０内のセクタからセクタデータを読み出すためのセクタ読み出し処理を実行する（ステップ１３０２）。ここで、ＲＬＢＡに対応する不揮発性キャッシュ領域１１０内のセクタは、管理テーブルを参照することにより特定できる。
【０１２１】
ＥＣＣ回路１７は、セクタ読み出し処理で読み出されたされたセクタデータに含まれているユーザデータの誤り検出・訂正を当該セクタデータに含まれているＥＣＣに基づいて行うことにより、読み出しエラーが発生したかを判定する。ＥＣＣ回路１７の判定結果はＭＰＵ２０に通知される。
【０１２２】
ＭＰＵ２０は、ＲＬＢＡに対応するセクタから読み出されたセクタデータに含まれているＩＮＤＩ［Ｎ］（書き換え回数）が、その１つ前のセクタに含まれているＩＮＤＩ［Ｎ］に一致するかを判定する（ステップ１３０３）。もし、両ＩＮＤＩ［Ｎ］が一致するならば（ステップ１３０３のＹｅｓ）、ＭＰＵ２０は、ＥＣＣ回路１７の判定結果に基づいて、読み出しエラーが検出されたかを判定する（ステップ１３０４）。
【０１２３】
もし、読み出しエラーが検出されなかった場合（ステップ１３０４のＮｏ）、つまり、上記両ＩＮＤＩ［Ｎ］が一致し、且つ読み出しエラーが検出されなかった場合、ＭＰＵ２０は例えばＲＬＢＡを１インクリメントした後、ステップ１３０５に進む。ステップ１３０５においてＭＰＵ２０は、読み出されるべきデータが残っているかを判定する。もし、読み出されるべきデータが残っているならば（ステップ１３０５のＹｅｓ）、ＭＰＵ２０はステップ１３０２に戻って、セクタ読み出し処理を再び実行する。これに対し、読み出されるべきデータが残っていないならば（ステップ１３０５のＮｏ）、ＭＰＵ２０は正常終了処理を実行する（ステップ１３０６）。
【０１２４】
なお、ＭＰＵ２０が、ステップ１３０２の次にステップ１３０４を実行し、読み出しエラーが検出されなかった場合に（ステップ１３０４のＮｏ）、ステップ１３０３を実行してもよい。
【０１２５】
一方、上記両ＩＮＤＩ［Ｎ］が一致しないならば（ステップ１３０３のＮｏ）、ＭＰＵ２０は、今回読み出しが行われたセクタは、不揮発性キャッシュ領域１１０へのライトデータの書き込みの途中での電源遮断の発生により処理が中断されたセクタであると判断する。そこでＭＰＵ２０は、エラー処理を実行する（ステップ１３０７）。このエラー処理において、ＭＰＵ２０は、ホスト１００からのリードコマンドで指定されたリードアクセス範囲のデータのうち、既に正常に読み出されている先頭セクタから今回読み出しが行われた１つ前のセクタまでの各セクタのデータをホスト１００に返すことができる。
【０１２６】
また、上記両ＩＮＤＩ［Ｎ］が一致しても（ステップ１３０３のＹｅｓ）、読み出しエラーが検出されたならば（ステップ１３０４のＹｅｓ）、ＭＰＵ２０は、エラー処理を実行する（ステップ１３０７）。
【０１２７】
このように第３の実施形態においては、ディスク１１上の不揮発性キャッシュ領域（一時格納領域）１１０に一時的に格納される、ホスト１００によって指定されたライトデータ（データブロック）にも、セクタデータ毎に、インジケータＩＮＤＩが埋め込まれる。また、各セクタデータ中のインジケータＩＮＤＩには、書き換え回数（ＩＮＤＩ［Ｎ］）のような、書き換えの属性を示す属性値が含められる。このため、不揮発性キャッシュ領域１１０へのライトデータの書き込みの途中で電源遮断が発生した場合に、その電源遮断の発生により処理が中断されたセクタを容易に特定することが可能となる。これにより、ＨＤＤ１０が不揮発性キャッシュ領域１１０を使用していながら、不揮発性キャッシュ領域１１０を使用しない現状のＨＤＤと同様に、処理が中断されたセクタの直前までのデータを保証することが可能になる。
【０１２８】
［変形例］
第２及び第３の実施形態において、図１４に示すように、インジケータＩＮＤＩに、書き換え回数（ＩＮＤＩ［Ｎ］）に加えて、第１の実施形態で適用されたＩＮＤＩ（ＵＮＣ）ビットを含めてもよい。
【０１２９】
これらの実施形態及び変形例によれば、瓦書きを適用するＨＤＤに代表されるような、ある長さのデータブロックを書き換える制御を行うＨＤＤにおいて、ディスクに書き込まれる各セクタデータに、当該セクタデータの書き換えに関する属性を表すインジケータを埋め込むことにより、管理テーブル等を用いることなく、当該インジケータから、各セクタデータの書き換えに関する属性を検出できる。この書き換えに関する属性から、例えば、ディスク上のデータブロックの書き換えで、読み出しエラーのために不正データとなっているセクタ、或いはデータブロックの書き換えの途中でＨＤＤの電源が遮断したために、処理が中断されたセクタのように、異常が発生したセクタを検出することが可能となる。
【０１３０】
ここで、データブロックの書き換えが、必ずしもデータブロックの更新とは限らない。例えば、ディスク上の第１の領域から読み出されたデータブロックを、当該第１の領域、或いは当該第１の領域とは異なるディスク上の第２の領域に書き込むことも、データブロックの書き換えである。このようなデータブロックの書き換えは、当該データブロックをリフレッシュする場合に行われる。
【０１３１】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
【符号の説明】
【０１３２】
１０…ＨＤＤ（磁気ディスク装置）、１１…ディスク、１２…ヘッド、１６…リードＩＣ、１７…ＥＣＣ回路、１８…インジケータ回路、１９…バッファメモリ、２０…ＭＰＵ、１００…ホスト、１１０…不揮発性キャッシュ領域、ＣＮＴ…コントローラ。
【図１】
2011253578.tif 000003
【図２】
2011253578.tif 000004
【図３】
2011253578.tif 000005
【図４】
2011253578.tif 000006
【図５】
2011253578.tif 000007
【図６】
2011253578.tif 000008
【図７】
2011253578.tif 000009
【図８】
2011253578.tif 000010
【図９】
2011253578.tif 000011
【図１０】
2011253578.tif 000012
【図１１】
2011253578.tif 000013
【図１２】
2011253578.tif 000014
【図１３】
2011253578.tif 000015
【図１４】
2011253578.tif 000016
【手続補正書】
【提出日】平成23年5月13日(2011.5.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のデータセクタを備えたディスクと、
前記ディスクに格納されている第１のデータブロックを読み出して、当該第１のデータブロックに対応する第２のデータブロックを、前記ディスク上の書き込み先に書き込むためのデータ書き換えを実行する制御手段と、
前記第２のデータブロックの各セクタデータが前記書き込み先に書き込まれる際に、当該セクタデータにデータ書き換えに関する属性を示すインジケータを埋め込むインジケータ手段と
を具備する磁気ディスク装置。
【請求項２】
前記インジケータ手段は、前記第１のデータブロックに含まれている第１のセクタデータの読み出しで読み出しエラーが発生した場合、当該第１のセクタデータに対応する前記第２のデータブロックの第２のセクタデータに、読み出しエラーを示す読み出し不可ビットが含まれた第１のインジケータを埋め込む請求項１記載の磁気ディスク装置。
【請求項３】
前記制御手段は、第３のセクタデータが読み出されて、当該読み出された第３のセクタデータに前記読み出し不可ビットを含む前記第１のインジケータが埋め込まれている場合、前記第３のセクタデータに対応する前記第２のデータブロックの第４のセクタデータに、前記第１のインジケータの前記読み出し不可ビットを引き継ぐ第２のインジケータを前記インジケータ手段により埋め込ませる請求項２記載の磁気ディスク装置。
【請求項４】
前記インジケータ手段は、前記読み出された第３のセクタデータに前記読み出し不可ビットを含む前記第１のインジケータが埋め込まれている場合、前記制御手段に読み出しエラーを通知する請求項３記載の磁気ディスク装置。
【請求項５】
前記制御手段は瓦書きを適用して前記データの書き換えを実行する請求項３記載の磁気ディスク装置。
【請求項６】
前記第２のデータブロックの書き込み先には、第３のデータブロックが格納されており、
前記第３のデータブロックの各セクタデータには、前記第３のデータブロックが書き込まれた際にインジケータが埋め込まれており、
前記第３のデータブロックの前記各セクタデータに埋め込まれている前記インジケータは、第１の書き換え状態を示す書き換え状態データを含んでおり、
前記インジケータ手段は、前記第２のデータブロックの各セクタデータに、前記第１の書き換え状態とは異なる第２の書き換え状態を示す書き換え状態データが含まれたインジケータを埋め込む請求項１記載の磁気ディスク装置。
【請求項７】
前記制御手段は、前記書き込み先の先頭データセクタに埋め込まれている書き換え状態データ及び最終データセクタに埋め込まれている書き換え状態データが相違していることを検出することによって、前記第２のデータブロックの前記書き込み先への書き込みの途中で前記磁気ディスク装置の電源が遮断したことを検出する請求項６記載の磁気ディスク装置。
【請求項８】
前記制御手段は、前記書き込み先の前記埋め込まれている書き換え状態データが変化したデータセクタを、前記電源が遮断したために前記書き込みが中断されたデータセクタとして特定する請求項６記載の磁気ディスク装置。
【請求項９】
前記ディスクはホストによって指定されたライトデータを一時的に格納するための一時格納領域を備えており、
前記制御手段は、前記ライトデータの前記一時格納領域への書き込みを制御し、
前記ライトデータが書き込まれるべき前記一時格納領域内の書き込み先の各セクタデータには、第３の書き換え状態を示す書き換え状態データを含むインジケータが埋め込まれており、
前記インジケータ手段は、前記ライトデータに対応する各セクタデータに、前記第３の書き換え状態とは異なる第４の書き換え状態を示す書き換え状態データが含まれたインジケータを埋め込む請求項８記載の磁気ディスク装置。
【請求項１０】
前記第１の書き換え状態を示す書き換え状態データは第１の書き換え回数であり、前記第２の書き換え状態を示す書き換え状態データは、前記第１の書き換え回数に１が加算された第２の書き換え回数である請求項６記載の磁気ディスク装置。
【請求項１１】
複数のデータセクタを備えたディスクを具備する磁気ディスク装置におけるデータブロック書き換え方法であって、
前記ディスクに格納されている第１のデータブロックをデータセクタ単位で読み出し、
前記読み出された第１のデータブロックに対応する第２のデータブロックを、前記ディスク上の書き込み先に書き込み、
前記第２のデータブロックの各セクタデータが前記書き込み先に書き込まれる際に、当該セクタデータにデータ書き換えに関する属性を示すインジケータを埋め込むデータブロック書き換え方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】変更
【補正の内容】
【０００８】
実施形態によれば、磁気ディスク装置は、複数のデータセクタを備えたディスクと、制御手段と、インジケータ手段とを具備する。前記制御手段は、前記ディスクに格納されている第１のデータブロックを読み出して、当該第１のデータブロックに対応する第２のデータブロックを、前記ディスク上の書き込み先に書き込むためのデータ書き換えを実行する。前記インジケータ手段は、前記第２のデータブロックの各セクタデータが前記書き込み先に書き込まれる際に、当該セクタデータにデータ書き換えに関する属性を示すインジケータを埋め込む。
【手続補正書】
【提出日】平成23年9月12日(2011.9.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
インジケータ領域を含むデータセクタを複数備えたディスクと、
前記ディスクに格納されている第１のデータブロックの書き換えが要求された場合、前記第１のデータブロックをデータセクタ単位で読み出し、当該読み出した第１のデータブロックの書き換えデータとなる第２のデータブロックを前記ディスク上の書き込み先に書き込むデータ書き換えを実行する制御手段と、
前記第２のデータブロックの各セクタデータが前記書き込み先に書き込まれる際に、当該セクタデータの前記インジケータ領域にデータ書き換えに関する属性を示すインジケータを設定するインジケータ手段と
を具備する磁気ディスク装置。
【請求項２】
前記インジケータ手段は、前記第１のデータブロックに含まれている第１のセクタデータの読み出しで読み出しエラーが発生した場合、当該第１のセクタデータに対応する前記第２のデータブロックの第２のセクタデータの前記インジケータ領域に、読み出しエラーを示す読み出し不可ビットが含まれた第１のインジケータを設定する請求項１記載の磁気ディスク装置。
【請求項３】
前記制御手段は、前記第１のデータブロックに含まれている第３のセクタデータが読み出され、且つ当該読み出された第３のセクタデータの前記インジケータ領域に前記第１のインジケータが設定されている場合、前記第３のセクタデータに対応する前記第２のデータブロックの第４のセクタデータの前記インジケータ領域に、前記第１のインジケータの前記読み出し不可ビットを引き継ぐ第２のインジケータを前記インジケータ手段により設定させる請求項２記載の磁気ディスク装置。
【請求項４】
前記インジケータ手段は、前記読み出された第３のセクタデータの前記インジケータ領域に前記第１のインジケータが設定されている場合、前記制御手段に読み出しエラーを通知する請求項３記載の磁気ディスク装置。
【請求項５】
前記制御手段は瓦書きを適用して前記データの書き換えを実行する請求項３記載の磁気ディスク装置。
【請求項６】
前記インジケータ手段は、前記書き込み先に格納されている第３のデータブロックのセクタデータの前記インジケータ領域に設定されている第１の属性値を含むインジケータに基づき、前記第２のデータブロックの前記各セクタデータの前記インジケータ領域に、前記第１の属性値とは異なる第２の属性値を含むインジケータを設定する請求項１記載の磁気ディスク装置。
【請求項７】
前記制御手段は、前記第２のデータブロック書き込みが中断した後において、前記書き込み先の先頭データセクタ及び最終データセクタの前記インジケータ領域にそれぞれ設定されているインジケータに含まれている属性値が相違していることを検出することによって、前記第２のデータブロックの前記書き込み先への書き込みの途中で前記磁気ディスク装置の電源が遮断したことを検出する請求項６記載の磁気ディスク装置。
【請求項８】
前記制御手段は、前記インジケータ領域に設定されているインジケータに含まれている属性値が変化した、前記書き込み先のデータセクタを、前記電源が遮断したために前記書き込みが中断されたデータセクタとして特定する請求項６記載の磁気ディスク装置。
【請求項９】
前記ディスクはホストによって指定されたライトデータを一時的に格納するための一時格納領域を備えており、
前記制御手段は、前記ライトデータの前記一時格納領域への書き込みを制御し、
前記インジケータ手段は、前記ライトデータが書き込まれるべき前記一時格納領域内の書き込み先に格納されているセクタデータの前記インジケータ領域に設定されている第３の属性値を含むインジケータに基づき、前記ライトデータに対応する各セクタデータの前記インジケータ領域に、前記第３の属性値とは異なる第４の属性値を含むインジケータを設定する請求項８記載の磁気ディスク装置。
【請求項１０】
前記第１の属性値は第１の書き換え回数であり、前記第２の属性値は、前記第１の書き換え回数に１が加算された第２の書き換え回数である請求項６記載の磁気ディスク装置。
【請求項１１】
インジケータ領域を含むデータセクタを複数備えたディスクを具備する磁気ディスク装置におけるデータブロック書き換え方法であって、
前記ディスクに格納されている第１のデータブロックの書き換えが要求された場合、前記第１のデータブロックをデータセクタ単位で読み出し、
前記読み出された第１のデータブロックの書き換えデータとなる第２のデータブロックを前記ディスク上の書き込み先に書き込み、
前記第２のデータブロックの各セクタデータが前記書き込み先に書き込まれる際に、当該セクタデータの前記インジケータ領域にデータ書き換えに関する属性を示すインジケータを設定するデータブロック書き換え方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】変更
【補正の内容】
【０００８】
実施形態によれば、磁気ディスク装置は、インジケータ領域を含むデータセクタを複数備えたディスクと、制御手段と、インジケータ手段とを具備する。前記制御手段は、前記ディスクに格納されている第１のデータブロックの書き換えが要求された場合、前記第１のデータブロックをデータセクタ単位で読み出し、当該読み出した第１のデータブロックの書き換えデータとなる第２のデータブロックを前記ディスク上の書き込み先に書き込むデータ書き換えを実行する。前記インジケータ手段は、前記第２のデータブロックの各セクタデータが前記書き込み先に書き込まれる際に、当該セクタデータの前記インジケータ領域にデータ書き換えに関する属性を示すインジケータを設定する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００３２
【補正方法】変更
【補正の内容】
【００３２】
さて、上述のデータブロックＤＢの移動が終了した後、ホスト１００からＨＤＤ１０内のコントローラＣＮＴに対して、論理ブロックアドレスＬＢＡ“Ａ”の位置のデータの読み出しが指定されたものとする。この場合、コントローラＣＮＴは、区域Ａ２内のセクタＳＡ’のデータを、論理ブロックアドレスＬＢＡ“Ａ”の位置のデータとして読み出す。セクタＳＡ’は正常セクタであることから、データ読み出しが正常に行われる可能性が極めて高い。このような場合、セクタＳＡ’から読み出されたデータは、セクタＳＡに格納されていたデータとは異なる。このため、誤ったデータ（セクタデータ）が、指定された論理ブロックアドレスＬＢＡ“Ａ”の位置の正常なデータとしてコントローラＣＮＴからホスト１００に返される可能性がある。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００５１
【補正方法】変更
【補正の内容】
【００５１】
この書き込みに応じて書き込み論理ブロックアドレスＷＬＢＡが１インクリメントされる。したがって、データ書き込み処理（ステップ５０８）が終了した段階では、書き込み論理ブロックアドレスＷＬＢＡは現在の読み出し論理ブロックアドレスＲＬＢＡ、つまりエラーＲＬＢＡに一致する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００５４
【補正方法】変更
【補正の内容】
【００５４】
ＭＰＵ２０は、データ書き込み処理（ステップ５１０）を終了すると、書き込み論理ブロックアドレスＷＬＢＡ及び読み出し論理ブロックアドレスＲＬＢＡを、それぞれ１インクリメントする（ステップ５１１及び５１２）。そしてＭＰＵ２０は、ステップＳ５０３に戻る。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００５７
【補正方法】変更
【補正の内容】
【００５７】
ＭＰＵ２０は、データ書き込み処理（ステップ５１３）を終了すると、書き込み論理ブロックアドレスＷＬＢＡを１インクリメントする（ステップ５１４）。そしてＭＰＵ２０は、インクリメント後のＷＬＢＡに基づき、データ書き込み処理が、データブロックＤＢの終端、つまり区域Ａ２内の最終セクタまで行われたかを判定する（ステップ５１５）。もし、データ書き込み処理がデータブロックＤＢの終端まで行われていないならば（ステップ５１５のＮｏ）、ＭＰＵ２０は再びデータ書き込み処理を実行する（ステップ５１３）。これに対し、データ書き込み処理がデータブロックＤＢの終端まで行われているならば（ステップ５１５のＹｅｓ）、ＭＰＵ２０はデータブロック移動処理を終了する。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００６１
【補正方法】変更
【補正の内容】
【００６１】
ＥＣＣ回路１７は、セクタ読み出し処理で読み出されたセクタデータに含まれているユーザデータの誤り検出・訂正を当該セクタデータに含まれているＥＣＣに基づいて行うことにより、読み出し不可（Read Uncorrectable）のような読み出しエラーが発生したかを判定する。インジケータ回路１８は、上記読み出されたセクタデータに含まれているＩＮＤＩ［ＵＮＣ］ビットが“１”（ＩＮＤＩ［ＵＮＣ］＝１）であるかを判定する。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００８５
【補正方法】変更
【補正の内容】
【００８５】
ＥＣＣ回路１７は、セクタ読み出し処理で読み出されたセクタデータに含まれているユーザデータの誤り検出・訂正を当該セクタデータに含まれているＥＣＣに基づいて行うことにより、読み出しエラーが発生したかを判定する。ＥＣＣ回路１７の判定結果はＭＰＵ２０に通知される。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００９９
【補正方法】変更
【補正の内容】
【００９９】
第２のトラックのデータの書き換えの途中で電源遮断が発生した場合、電源遮断の発生により処理が中断されたセクタを、上記第１の実施形態と同様の手法により特定することができる。この場合、一時退避領域に退避されている第２のトラックのデータのうち、特定されたセクタから当該第２のトラックの最終セクタまでの各セクタのデータを用いて、書き換え処理を再開することができる。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】０１２１
【補正方法】変更
【補正の内容】
【０１２１】
ＥＣＣ回路１７は、セクタ読み出し処理で読み出されたセクタデータに含まれているユーザデータの誤り検出・訂正を当該セクタデータに含まれているＥＣＣに基づいて行うことにより、読み出しエラーが発生したかを判定する。ＥＣＣ回路１７の判定結果はＭＰＵ２０に通知される。