説明

磁気ディスク装置及びデータブロックの書き換え方法

【課題】ディスク上のデータブロックの書き換えの異常を検出可能とする。
【解決手段】実施形態によれば、磁気ディスク装置は、複数のデータセクタを備えたディスクと、制御手段と、インジケータ手段とを具備する。制御手段は、ディスクに格納されている第1のデータブロックを読み出して、当該読み出された第1のデータブロックに対応する第2のデータブロックを、ディスク上の書き込み先に書き込むためのデータ書き換えを制御する。インジケータ手段は、第2のデータブロックの各セクタデータが書き込み先に書き込まれる際に、当該書き込まれるセクタデータにデータ書き換えに関する属性を示すインジケータを埋め込む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、磁気ディスク装置及びデータブロックの書き換え方法に関する。
【背景技術】
【0002】
一般に磁気ディスク装置では、ディスクに格納されているデータのひと塊、いわゆるデータブロックの書き換え(rewriting)、例えば移動によるデータブロック書き換えが発生する。従来、このデータブロックの移動は、次のような手順で実行される。ここでは、ディスクの第1の領域に格納されているデータブロックを当該ディスクの第2の領域に移動するものとする。この場合、まず、ディスクの第1の領域からデータブロックが読み出される。次に読み出されたデータブロックがディスクの第2の領域に書き込まれる。なお、読み出されたデータブロックの一部がホストによつて指定されたライトデータによって置き換えられて、その置き換え後のデータブロックが第2の領域に書き込まれることもある。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2005−293774号公報
【特許文献2】再公表特許2004−023483号公報
【特許文献3】特開平10−177769号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
上述のデータブロックの移動のために、第1の領域からの当該データブロックの読み出しが行われた際に、読み出しエラーが発生することがある。ここでは、第1の領域が、セクタSAを含む複数のセクタ(データセクタ)から構成されており、当該セクタSAのデータ(セクタデータ)の読み出しで、エラー訂正符号(ECC)に基づくエラー訂正が不可能なエラー(Read Uncorrectable Error)が発生したものとする。また、第2の領域が、正常なセクタSA’を含む複数のセクタから構成され、セクタSA’の第2の領域内の相対位置が、セクタSAの第1の領域内の相対位置に一致しているものとする。
【0005】
もし、セクタSAからのデータの読み出しでエラーが発生しても第2の領域へのデータブロックの書き込みが行われるならば、当該データブロックの書き込み後のセクタSA’の内容は、セクタSAの内容とは異なる。その後、例えばホストからの要求に応じてセクタSA’のデータの読み出しが行われる場合、当該セクタSA’は正常セクタであることから、データ読み出しが正常に行われる可能性が極めて高い。このような場合、セクタSAに書き込まれていたデータとは異なるデータ、つまり誤った(不正な)データ(セクタデータ)が、磁気ディスク装置からホストに返されることになる。しかし、ホストは勿論、磁気ディスク装置も、セクタSA’から読み出されたセクタデータが誤っていることを判別することは困難である。
【0006】
また、第2の領域へのデータブロックの書き込みの途中で磁気ディスク装置の電源が遮断する場合がある。そこで、データブロックの書き込みの途中で電源遮断が発生したことが検出できることが要求されている。
【0007】
本発明の目的は、磁気ディスク装置において、ディスク上のデータブロックの書き換えの異常を検出可能とすることにある。
【課題を解決するための手段】
【0008】
実施形態によれば、磁気ディスク装置は、複数のデータセクタを備えたディスクと、制御手段と、インジケータ手段とを具備する。前記制御手段は、前記ディスクに格納されている第1のデータブロックを読み出して、当該読み出された第1のデータブロックに対応する第2のデータブロックを、前記ディスク上の書き込み先に書き込むためのデータ書き換えを制御する。前記インジケータ手段は、前記第2のデータブロックの各セクタデータが前記書き込み先に書き込まれる際に、当該書き込まれるセクタデータにデータ書き換えに関する属性を示すインジケータを埋め込む。
【図面の簡単な説明】
【0009】
【図1】第1の実施形態に係る磁気ディスク装置を備えた電子機器の典型的な構成を示すブロック図。
【図2】同第1の実施形態で適用される、ディスクのトラック配置を含むフォーマットの一例を示す概念図。
【図3】同第1の実施形態で適用されるセクタのデータフォーマットの一例を示す図。
【図4】同第1の実施形態におけるデータ書き換えを説明するための図。
【図5】同第1の実施形態で適用されるデータブロック移動処理の手順を示すフローチャート。
【図6】同第1の実施形態で適用されるデータ読み出し処理の手順を示すフローチャート。
【図7】第2の実施形態で適用されるセクタのデータフォーマットの一例を示す図。
【図8】同第2の実施形態で適用されるデータブロック移動処理の手順を示すフローチャート。
【図9】同第2の実施形態において、データブロック移動処理の途中で電源遮断が発生したために処理が中断されたセクタを特定するための原理を説明するための図。
【図10】同第2の実施形態で適用されるデータ読み出し処理の手順を示すフローチャート。
【図11】第3の実施形態で適用される、ディスク上に確保された不揮発性キャッシュ領域へのライトデータの書き込みを説明するための図。
【図12】同第3の実施形態で適用される、不揮発性キャッシュ領域へのデータ書き込み処理の手順を示すフローチャート。
【図13】同第3の実施形態で適用される、不揮発性キャッシュ領域からのデータ読み出し処理の手順を示すフローチャート。
【図14】セクタのデータフォーマットの変形例を示す図。
【発明を実施するための形態】
【0010】
以下、実施の形態につき図面を参照して説明する。
[第1の実施形態]
図1は第1の実施形態に係る磁気ディスク装置を備えた電子機器の典型的な構成を示すブロック図である。図1において、電子機器は、磁気ディスク装置(HDD)10及びホスト100から構成される。電子機器は、例えば、パーソナルコンピュータ、ビデオカメラ、音楽プレーヤー、携帯端末、或いは携帯電話機である。ホスト100はHDD10を当該ホスト100の記憶装置として利用する。ホスト100はホストインタフェース101によりHDD10(より詳細には、HDD10内の後述するコントローラCNT)と接続されている。
【0011】
第1の実施形態において、HDD10は、周知の瓦書き(shingled write)を適用するものとする。HDD10は、記録媒体としてのディスク(磁気ディスク)11を備えている。このディスク11は上側と下側の2つのディスク面を有している。ディスク11の例えば上側のディスク面は、データが磁気記録される記録面をなしている。このディスク11の記録面に対応して、ヘッド(磁気ヘッド)12が配置されている。ヘッド12はライト素子及びリード素子を含んでおり、ディスク11へのデータ書き込み及び当該ディスク11からのデータ読み出しに用いられる。なお、図1では、作図の都合上、ヘッド12が1つであるHDD10の例が示されている。しかし、ディスク11の2つのディスク面が共に記録面をなしており、各々のディスク面に対応してヘッドが配置されてもよい。また図1の構成では、単一枚のディスク11を備えたHDDを想定している。しかし、複数枚のディスクが積層配置されたHDDであっても構わない。
【0012】
図2は、ディスク11のトラック配置を含むフォーマットの一例を示す概念図である。図2に示されるように、ディスク11の記録面は、当該ディスク11の半径方向に区域A0〜A5に区分される。区域A0〜A5の各々には、一定数のトラックが配置されているものとする。図2では、便宜的に、ディスク11上の内周側の区域A5に配置されているトラックのみが示されており、それ以外の区域A0〜A4に配置されているトラックは省略されている。
【0013】
また第1の実施形態では、区域A0〜A5が、例えば一定数の区域の集合毎にグループ化されている。図2の例では、区域A0〜A2の集合がグループG0を構成し、区域A3〜A5の集合がグループG1を構成する。また、グループGi(i=0,1)毎に、1つの区域が、瓦書きの際に当該グループGi内の他の区域の各トラックのデータの移動先(書き換え先)として用いられるフリー領域に割り当てられる。このデータ移動(書き換え)が完了すると、データ移動元の区域が新たにフリー領域に割り当てられる。
【0014】
なお、図2の例では、ディスク11の記録面が6つの区域に区分されているが、6つ以外の数の区域、例えば6を超える区域に区分されてもよい。また図2の例では、各グループが3つの区域から構成されているが、1つを超える数の区域、例えば3を超える区域から構成されてもよい。
【0015】
ディスク11上の各トラックは、複数のデータセクタ(以下、単にセクタと称する)から構成される。図3は、セクタのデータフォーマットの一例を示す。セクタは、主として、ユーザデータフィールドと、インジケータ(INDI)フィールドと、ECC(エラー訂正符号)フィールドとから構成される。ユーザデータフィールドは、ユーザデータを記録するのに用いられる。インジケータフィールドは、対応するセクタデータの書き換えに関する属性を表すインジケータINDIを記録するのに用いられる。インジケータINDIは、読み出し不可(Read uncorrectable)を示す読み出し不可ビット(UNC)を含む属性データである。なお、セクタデータの書き換えは、必ずしもセクタデータの更新とは限らない。例えば、或るセクタから読み出されたセクタデータを、当該或るセクタまたは当該或るセクタに対応する別のセクタに再度書き込むことも、セクタデータの書き換えである。
【0016】
再び図1を参照すると、ディスク11はスピンドルモータ(SPM)13によって高速に回転させられる。ヘッド12は、アクチュエータ14の先端に取り付けられている。ヘッド12は、ディスク11が高速に回転することにより当該ディスク11上で浮上する。アクチュエータ14は、当該アクチュエータ14の駆動源となるボイスコイルモータ(VCM)15を有している。アクチュエータ14は、このVCM15により駆動されて、ヘッド12をディスク11の半径方向に移動する。このアクチュエータ14の動作により、ヘッド12は、ディスク11の目標トラック上に位置付けられる。
【0017】
HDD10はコントローラCNTを備えている。コントローラCNTは、ホスト100からホストインタフェース101を介して転送されるコマンド(ライトコマンド、リードコマンド等)の受信と、ホスト100と当該コントローラCNTとの間のデータ転送とを制御するホストインタフェース制御機能を有する。コントローラCNTはまた、ディスク11と当該コントローラCNTとの間のデータ転送を制御するディスクインタフェース制御機能を有する。コントローラCNTはまた後述するバッファメモリ19を制御するバッファインタフェース制御機能を有する。
【0018】
第1の実施形態においてコントローラCNTは、リードIC16、ECC回路17、インジケータ回路18、バッファメモリ19及びMPU20等が単一チップに集積されたSOC(System on Chip)と呼ばれるシステムLSIによって実現されている。なお、このようなコントローラCNTの構成は一例であり、例えばバッファメモリ19がコントローラCNTの外部に備えられていても構わない。
【0019】
リードIC16は、図示せぬヘッドアンプを介してヘッド12と接続されている。ヘッドアンプは、ヘッドにより再生された信号(リード信号)を増幅するリードアンプと、リードIC16から転送される符号化されたライトデータをライト電流(ライト信号)に変換してヘッドに出力するライトドライバを含む。
【0020】
リードIC16は、リードチャネルまたはリード/ライトチャネルと呼ばれる、周知の信号処理モジュールである。リードIC16は、リード信号をデジタルデータに変換し、このデジタルデータからリードデータを復号する。リードIC16はまた、上記デジタルデータからサーボデータ(サーボパターン)を抽出する。リードIC16はまた、ライトデータを符号化する。リードIC16はECC回路17と接続されている。
【0021】
ECC回路17は、後述するインジケータ回路18から転送されるユーザデータ(より詳細には、インジケータが付されているユーザデータ)に基づき、ECCを生成するECC生成機能を有する。ECC回路17は、インジケータが付されているユーザデータにECC(生成されたECC)を付加し、このインジケータ及びECCが付加されたユーザデータをリードIC16に転送する。ECC回路17はまた、リードIC16から転送された復号されたリードデータからユーザデータ及びECCを抽出し、当該ECCに基づいてユーザデータの誤り検出・訂正を行う。ECC回路17は、インジケータ回路18と接続されている。
【0022】
インジケータ回路18は、ディスク11上のグループGi内のある区域(第1の区域)に格納されているデータブロック(第1のデータブロック)の書き換えが当該グループGi内の別の区域(フリー領域、第2の区域)を用いて行われる場合に、第2の区域に書き込まれるべきデータブロック(第2のデータブロック)の各セクタデータに含まれるユーザデータにMPU20の指定する属性を示すインジケータINDIを付加する。インジケータ回路18はまた、第1の区域から第1のデータブロックが読み出された場合に、当該第1のデータブロックの各セクタデータから、論理“1”の有効な読み出し不可ビット(UNC)が含まれているインジケータINDIを検出する。
【0023】
バッファメモリ19は、ディスク11に書き込まれるべきユーザデータ及びディスク11からリードIC16、ECC回路17及びインジケータ回路18を介して読み出されたユーザデータを一時格納するのに用いられる。
【0024】
MPU20は、図示せぬROMまたはフラッシュROMに格納されている制御プログラムに従って、リードIC16、ECC回路17及びインジケータ回路18を制御する制御モジュールである。MPU20はまた、SPM13及びVCM15を図示せぬモータドライバICを介して制御する。
【0025】
次に、第1の実施形態の動作について、ホスト100から指定されるライトアクセス範囲が例えばグループG0に属する区域A0内のあるセクタ列に対応する場合のデータ書き換えを例に、図4を参照して説明する。ここでは、説明の簡略化のために、瓦書きの際のヘッドの半径方向のシフト量が、ヘッド12に含まれているライト素子の幅Wの1/2であるものとする。また、区域A2が、グループG0内のフリー領域に割り当てられているものとする。
【0026】
上述のデータ書き換えは、区域A0に格納されているデータブロック(第1のデータブロック)DBの読み出しと区域A2へのデータブロック(第2のデータブロック)DB’の書き込みとにより実行される。データブロックDB’は、読み出されたデータブロックDBのうちの上記ライトアクセス範囲に対応する部分が、ホスト100から指定されたライトデータで置き換えられた(つまりモディファイされた)、いわゆるリードモディファイデータである。但し、以下の説明では、簡略化のために、データブロックDBとデータブロックDB’とが同一であるものとする。つまり、区域(読み出し対象区域)A0に格納されているデータブロックDBを区域(書き込み対象区域)A2に移動するものとする。
【0027】
図4は、区域A0がトラックTR_1〜TR_4を備え、区域(フリー領域)A2内がトラックTR_N+1〜TR_N+4を備えている場合の区域A0から区域A2へのデータブロックの移動の例を示す。
【0028】
コントローラCNTは、区域A0に格納されているデータブロックDBをセクタ単位で読み出す。つまりコントローラCNTは、区域A0のトラックTR_1〜TR_4の全セクタからセクタデータを順次読み出す。コントローラCNT内のECC回路17は、セクタデータが読み出される毎に、当該読み出されたセクタデータからユーザデータ、及びECCを抽出し、当該ECCに基づいて、ユーザデータの誤り検出・訂正を行う。ECC回路17によって誤り検出・訂正がなされたユーザデータは、インジケータ回路18を介してバッファメモリ19に格納される。
【0029】
ここで、区域A0からのセクタ単位のデータの読み出しの過程で、図4に示すように、トラックTR_3上のセクタSAからセクタデータを正常に読み出すことができない読み出しエラーが発生したものとする。この読み出しエラーが、例えば、セクタSAから読み出されたセクタデータに含まれているユーザデータの誤りの訂正が不能なエラー(Read Uncorrectable Error)であったものとする。第1の実施形態において、セクタSAの論理アドレス(論理ブロックアドレス)は、LBA“A”である。
【0030】
次に、区域(移動元区域)A0からのデータブロックDBの読み出しが終了すると、読み出されたデータブロックDBの区域(移動先区域)A2へのセクタ単位の書き込みが行われるものとする。第1の実施形態において区域A2は正常なセクタSA’を含んでおり、当該セクタSA’の区域A2内の相対位置は、読み出しエラーとなったセクタSAの区域A0内の相対位置に一致する。つまり、区域A2内のセクタSA’は、区域A0内のセクタSAに対応する。
【0031】
区域A2へのデータブロックDBの書き込み、つまり区域A0から区域A2へのデータブロックDBの移動が終了すると、グループG0において、フリー領域が区域A2から区域A0に切り替えられる。また、区域A0内のセクタSAに割り当てられていた論理ブロックアドレスLBA“A”の割当先が、当該セクタSAから区域A2内のセクタSA’に切り替えられる。
【0032】
さて、上述のデータブロックDBの移動が終了した後、ホスト100からHDD10内のコントローラCNTに対して、論理ブロックアドレスLBA“A”の位置のデータの読み出しが指定されたものとする。この場合、コントローラCNTは、区域A2内のセクタSA’のデータを、論理ブロックアドレスLBA“A”の位置のデータとして読み出す。セクタSA’は正常セクタであることから、データ読み出しが正常に行われる可能性が極めて高い。このような場合、セクタSA’から読み出されたデータは、セクタSAに格納されていたデータとは異なる。このため、誤ったデータ(セクタデータ)が、指定された論理ブロックアドレスLBA“A”の位置の正常なデータとしてコントローラCNTからからホスト100に返される可能性がある。
【0033】
これを回避するために、例えば既存のディフェクト管理テーブルにセクタSA’を一時的に仮登録するならば、コントローラCNTは、当該セクタSA’を本来読み出し不可(Read Uncorrectable)であったという特別なセクタ(に対応している)と認識して処理することも可能である。しかしこの方法を適用すると、一時的にせよ、ディフェクト管理テーブルに登録されるセクタ数(つまり管理されるべきセクタ数)が多くなってしまう可能性がある。また、多数のセクタが仮登録されたためにディフェクト管理テーブルが満杯となった場合、新たに真のディフェクトセクタが検出されても、当該真のディフェクトセクタをディフェクト管理テーブルに登録することが困難となる。
【0034】
そこで第1の実施形態では、バッファメモリ19に格納されたユーザデータのうちの読み出しエラーとなったユーザデータを含むセクタデータがセクタSA’に書き込まれる場合、コントローラCNT内のインジケータ回路18が当該読み出しエラーとなったユーザデータに、インジケータINDIを付加する。このインジケータINDIは、当該インジケータINDIを含むセクタデータが書き込まれるべきセクタSA’が、本来正常なデータ読み出しのできない(読み出しデータの訂正不能な)特殊なセクタ(に対応するセクタ)であることを示す、例えば論理“1”の指示ビットUNCを含む。以下の説明では、この指示ビットUNCをINDI[UNC]ビットまたはINDI[UNC]のように表記し、論理“1”の指示ビットUNCをINDI[UNC]=1のように表記する。
【0035】
ECC回路17は、インジケータ回路18によってインジケータINDI(より詳細には、INDI[UNC]ビットを含むインジケータINDI)が付加されたユーザデータに基づいてECCを生成する。ECC回路17は、インジケータINDIが付加されたユーザデータに、生成されたECCを付加する。そしてECC回路17は、インジケータINDI及びECCが付加されたユーザデータを含むセクタデータを、ライトデータとしてリードIC16に転送する。リードIC16は、ECC回路17から転送されたライトデータを符号化する。リードIC16によって符号化されたライトデータは、ヘッドアンプによってライト電流に変換され、このライト電流に基づいてヘッド12によって対応するセクタ、つまりセクタSA’に書き込まれる。
【0036】
図4は、ディスク11の区域A2内のセクタSA’に、INDI[UNC]=1を含むライトデータ(セクタデータ)が書き込まれている様子も示している。インジケータ回路18は、このようなINDI[UNC]=1を含む(つまりINDI[UNC]=1が埋め込まれた)ライトデータ(セクタデータ)が読み出された場合、ECC回路17と同等の判断を行う。このようにインジケータ回路18は、読み出されたセクタデータからINDI[UNC]=1を検出することにより、当該セクタデータが格納されているセクタSA’が、本来データの正常な読み出し(読み出しデータの訂正)ができない特殊なセクタであると判断する。このように第1の実施形態では、読み出しエラーとなったセクタSAの属性が、当該セクタSAのデータの移動先のセクタSA’に書き込まれたユーザデータに付加されたインジケータINDI中のINDI[UNC]=1によって示される。
【0037】
読み出されたセクタデータからインジケータ回路18がINDI[UNC]=1を検出すると、コントローラCNT内のMPU20は、ECC回路17で読み出しエラーが検出された場合と同様のエラー処理を行う。つまり、セクタSA’から正常にセクタデータが読み出せた場合でも、MPU20は、読み出しデータの訂正が不能な状態が発生したかの如く、エラー処理を行うことができる。しかも、第1の実施形態においては、このような特殊なセクタSA’を、ディフェクト管理テーブルのような特別のテーブルで管理する必要はない。
【0038】
また、セクタSA’が属する区域A2に書き込まれているデータブロックを、区域A2が属するグループG0内のフリー領域に移動する場合、コントローラCNTは、INDI[UNC]=1を含むセクタSA’のセクタデータをそのままフリー領域内の対応するセクタにコピーしてもよい。これにより、上述したようなINDI[UNC]=1を付加する処理を行わなくても、セクタSAの属性を、セクタSA’からセクタデータの移動先のセクタに継承していくことが可能となる。
【0039】
次に、第1の実施形態で適用されるデータブロック移動処理の手順について、上述のデータブロックDBを区域A0からフリー領域としての区域A2へ移動する場合を例に、図5のフローチャートを参照して説明する。
まずコントローラCNT内のMPU20は、区域(読み出し対象区域)A0内の読み出されるべきセクタ(移動元セクタ)を指定する読み出し論理ブロックアドレスRLBAを、当該区域A0内の先頭セクタに割り当てられている論理ブロックアドレス、つまり区域A0の先頭の論理ブロックアドレス(先頭LBA)に設定する(ステップ501)。またMPU20は、区域(書き込み対象区域)A2内のセクタデータの書き込み先となるセクタ(移動先セクタ)を指定する書き込み論理ブロックアドレスWLBAを、当該区域A2内の先頭セクタに割り当てられるべき論理ブロックアドレスである上記先頭LBAに設定する(ステップ502)。
【0040】
次にMPU20は、インジケータ回路18が論理“0”のINDI[UNC]ビット、つまりINDI[UNC]=0を含むインジケータINDIをユーザデータに付加するための第1のモードに、当該インジケータ回路18を設定する(ステップ503)。
【0041】
次にMPU20は、区域A0内の、現在の読み出し論理ブロックアドレスRLBAの示すセクタからセクタデータを読み出すためのセクタ読み出し処理を実行する(ステップ504)。このセクタ読み出し処理で読み出されたセクタデータは、リードIC16によって復号される。リードIC16によって復号されたセクタデータは、ECC回路17に転送される。
【0042】
ECC回路17は、リードIC16から転送されたセクタデータ(リードデータ)からユーザデータ、インジケータINDI及びECCを抽出する。そしてECC回路17は、ECCに基づいてユーザデータの誤り検出・訂正を行うことにより、読み出しエラーが発生したかを判定する。ここでは、説明の簡略化のために、リードリトライの動作は省略されているが、RLBAの示すセクタから正しくセクタデータを読めない場合、一般には、当該セクタからのセクタデータを読み出すためのリード動作がリトライされる。このリトライが一定回数繰り返されても、正しくセクタデータを読めない(ユーザデータの誤り訂正が不能な)場合に、読み出しエラーが判定される。ECC回路17の判定結果はMPU20に通知される。
【0043】
ECC回路17は、抽出されたユーザデータ及びインジケータINDIをインジケータ回路18に転送する。インジケータ回路18は、インジケータINDI中のINDI[UNC]ビットが“1”(INDI[UNC]=1)であるかを判定し、その判定結果をMPU20に通知する。インジケータ回路18は、インジケータINDIが付加されていたユーザデータを、バッファメモリ19に格納する。ここでは、ステップ504でセクタデータが読み出される順番で、対応するユーザデータがバッファメモリ19に格納される。
【0044】
MPU20は、ECC回路17及びインジケータ回路18の各々の判定結果に基づいて、読み出しエラーが検出されたか、或いはINDI[UNC]=1が検出されたかを判定する(ステップ505)。もし、読み出しエラー及びINDI[UNC]=1のいずれも検出されなかった場合には(ステップ505のNo)、MPU20は次に読み出されるべきセクタを指定するために、現在のRLBAを例えば1インクリメントする(ステップ506)。
【0045】
MPU20は、インクリメント後のRLBAに基づき、セクタ読み出し処理が、移動されるべきデータブロックDBの終端、つまり区域A0内の最終セクタまで行われたかを判定する(ステップ507)。もし、セクタ読み出し処理がデータブロックDBの終端まで行われていないならば(ステップ507のNo)、MPU20は再びセクタ読み出し処理を実行する(ステップ504)。
【0046】
一方、読み出しエラーまたはINDI[UNC]=1が検出された場合には(ステップ505のYes)、MPU20はステップ508に進む。読み出しエラーまたはINDI[UNC]=1が検出された場合における読み出し論理ブロックアドレスRLBAを、エラーRLBAと称する。
【0047】
ステップ508においてMPU20は、バッファメモリ19に格納されている、論理ブロックアドレスWLBA乃至エラーRLBA−1に対応するユーザデータ(つまり正常に読み出されたユーザデータ)を、区域A2内の対応するセクタ群にセクタ単位で書き込む(移動する)ためのデータ書き込み処理を実行する(ステップ508)。
【0048】
このデータ書き込み処理(ステップ508)において、インジケータ回路18は、論理ブロックアドレスWLBA乃至エラーRLBA−1に対応するユーザデータをバッファメモリ19から順次読み出す。このときインジケータ回路18は第1のモードに設定されている。この場合、インジケータ回路18は、読み出されたユーザデータに、INDI[UNC]=0(論理“0”のINDI[UNC])を含むインジケータINDIを付加する。但し、以下の説明では、インジケータINDIと、当該インジケータINDIに含まれているINDI[UNC]ビットとを区別する必要がある場合を除き、簡略化のために、INDI[UNC]ビット(ここでは論理“0”のINDI[UNC]ビット)がユーザデータに付加されるものとする。つまり、セクタデータが、ユーザデータ、INDI[UNC]ビット及びECCから構成されているものとする。
【0049】
インジケータ回路18は、論理“0”のINDI[UNC]ビット、つまりINDI[UNC]=0が付加されたユーザデータをECC回路17に転送する。
【0050】
ECC回路17は、インジケータ回路18から転送された、INDI[UNC]=0が付加されたユーザデータに基づいてECCを生成する。ECC回路17は、生成されたECCを、INDI[UNC]=0が付加されたユーザデータに付加する。ECC回路17は、INDI[UNC]=0及びECCが付加されたユーザデータを含むセクタデータを、ライトデータとしてリードIC16に転送する。このライトデータは、リードIC16及びヘッドアンプを介してヘッド12により区域A2内の対応するセクタに書き込まれる。
【0051】
この書き込みに応じて書き込み論理ブロックアドレスWLABが1インクリメントされる。したがって、データ書き込み処理(ステップ508)が終了した段階では、書き込み論理ブロックアドレスWLABは現在の読み出し論理ブロックアドレスRLAB、つまりエラーRLABに一致する。
【0052】
MPU20は、データ書き込み処理(ステップ508)を終了すると、インジケータ回路18が論理“1”のINDI[UNC]ビット、つまりINDI[UNC]=1をユーザデータに付加するための第2のモードに、当該インジケータ回路18を設定する(ステップ509)。次にMPU20は、バッファメモリ19に格納されている、エラーRLBAに対応するユーザデータ(つまり読み出しエラーまたはINDI[UNC]=1が判定されたユーザデータ)を、区域A2内の対応するセクタ(つまり区域A2内の、エラーRLBAに一致するWLBAの示すセクタ)に書き込むためのデータ書き込み処理を実行する(ステップ510)。
【0053】
このデータ書き込み処理(ステップ510)において、インジケータ回路18は、エラーRLBAに対応するユーザデータをバッファメモリ19から読み出す。このときインジケータ回路18は第2のモードに設定されている。この場合、インジケータ回路18は、読み出されたユーザデータにINDI[UNC]=1を付加する。これにより、データ書き込み処理(ステップ510)では、INDI[UNC]=1及びECCが付加されたユーザデータを含むセクタデータが、区域A2内の、エラーRLBAに一致するWLBAの示すセクタに書き込まれる。
【0054】
MPU20は、データ書き込み処理(ステップ510)を終了すると、書き込み論理ブロックアドレスWLAB及び読み出し論理ブロックアドレスRLABを、それぞれ1インクリメントする(ステップ511及び512)。そしてMPU20は、ステップS503に戻る。
【0055】
一方、セクタ読み出し処理がデータブロックDBの終端まで行われているならば(ステップ507のYes)、MPU20は、区域A2内の、現在の書き込み論理ブロックアドレスWLBAの示すセクタにセクタデータを書き込むためのデータ書き込み処理を実行する(ステップ513)。
【0056】
このデータ書き込み処理(ステップ513)において、インジケータ回路18は、論理ブロックアドレスWLBAに対応するユーザデータをバッファメモリ19から読み出す。このときインジケータ回路18は第1のモードに設定されている。この場合、インジケータ回路18は、読み出されたユーザデータにINDI[UNC]=0を付加する。これにより、データ書き込み処理(ステップ513)では、INDI[UNC]=0及びECCが付加されたユーザデータを含むセクタデータが、区域A2内の、論理ブロックアドレスWLBAの示すセクタに書き込まれる。
【0057】
MPU20は、データ書き込み処理(ステップ513)を終了すると、書き込み論理ブロックアドレスWLABを1インクリメントする(ステップ514)。そしてMPU20は、インクリメント後のWLBAに基づき、データ書き込み処理が、データブロックDBの終端、つまり区域A2内の最終セクタまで行われたかを判定する(ステップ515)。もし、データ書き込み処理がデータブロックDBの終端まで行われていないならば(ステップ515のNo)、MPU20は再びデータ書き込み処理を実行する(ステップ513)。これに対し、データ書き込み処理がデータブロックDBの終端まで行われているならば(ステップ515のYes)、MPU20はデータブロック移動処理を終了する。
【0058】
次に、第1の実施形態で適用されるデータ読み出し処理の手順について、図6のフローチャートを参照して説明する。
まず、ホスト100からHDD10内のコントローラCNTに対して、あるデータブロック(データ)の読み出しを指定するリードコマンドが発行されたものとする。このデータブロックは、当該データブロックの先頭の論理ブロックアドレス(先頭LBA)と当該データブロックのデータ長(例えばセクタ数)との示すリードアクセス範囲によって指定される。
【0059】
コントローラCNT内のMPU20は、読み出されるべきセクタを指定する読み出し論理ブロックアドレスRLBAをリードアクセス範囲の先頭LBAに設定する(ステップ601)。
【0060】
次にMPU20は、現在の読み出し論理ブロックアドレスRLBAの示すセクタからセクタデータを読み出すためのセクタ読み出し処理を実行する(ステップ602)。
【0061】
ECC回路17は、セクタ読み出し処理で読み出されたされたセクタデータに含まれているユーザデータの誤り検出・訂正を当該セクタデータに含まれているECCに基づいて行うことにより、読み出し不可(Read Uncorrectable)のような読み出しエラーが発生したかを判定する。インジケータ回路18は、上記読み出されたセクタデータに含まれているINDI[UNC]ビットが“1”(INDI[UNC]=1)であるかを判定する。
【0062】
MPU20は、インジケータ回路18の判定結果に基づいてINDI[UNC]=1が検出されたかを判定する(ステップ603)。MPU20はまた、ECC回路17の判定結果に基づいて読み出しエラーが検出されたかを判定する(ステップ604)。
【0063】
もし、INDI[UNC]=1が検出されず(ステップ603のNo)、読み出しエラーも検出されなかった場合(ステップ604のN0)、MPU20は例えばRLBAを1インクリメントした後、ステップ605に進む。ステップ605においてMPU20は、読み出されるべきデータが残っているかを判定する。
【0064】
もし、読み出されるべきデータが残っているならば(ステップ605のYes)、MPU20はステップ602に戻って、セクタ読み出し処理を再び実行する。これに対し、読み出されるべきデータが残っていないならば(ステップ605のNo)、つまりセクタ読み出し処理が、指定されたデータブロックの終端まで行われているならば、MPU20はステップ606に進む。このステップ606において、MPU20は、リードコマンドの実行を正常に終了したことをホスト100に報告するための正常終了処理を実行する。
【0065】
一方、INDI[UNC]=1が検出されたか(ステップ603のYes)、或いは、読み出しエラーが検出された場合(ステップ604のYes)、MPU20はステップ607に進む。ステップ607において、MPU20は、ホスト100からのリードコマンドの実行でエラーが発生したことをホスト100に報告するためのエラー処理を実行する。
【0066】
このように第1の実施形態では、RLBAの指定するセクタ(物理セクタ)からのセクタデータの読み出しで読み出しエラーが検出されなくても、つまりセクタデータが正常に読み出せても、当該セクタデータに含まれているINDI[UNC]ビットが“1”(INDI[UNC]=1)の場合には、読み出しエラーが検出された場合と同様に、エラー処理が行われる。例えば、RLBAの指定する物理セクタが図4に示すセクタSA’である場合、当該セクタSA’に格納されているセクタデータ自体は正常に読み出せても、当該セクタデータにINDI[UNC]=1が含まれているため、エラー処理が行われる。その理由は、RLBAの指定するセクタSA’(つまりRLBAが割り当てられているセクタSA’)に格納されているデータ自体は正しく読み出せても、当該RLBAが以前に割り当てられていたセクタSAは読み出し不可であるためである。つまり、セクタSAのデータの直接または間接の移動先(ここでは直接の移動先)となったセクタSA’に書き込まれたデータは、当該セクタSAに格納されているデータとは異なる不正データであるためである。
【0067】
即ち第1の実施形態によれば、瓦書きを適用するHDDに代表されるような、ある長さのデータブロックを書き換える制御を行うHDDにおいて、ディスクに書き込まれる各セクタデータに、読み出し不可を示すINDI[UNC]ビットを含むインジケータINDIが埋め込まれる。つまり、書き換え前のデータブロックに読み出しエラーとなったセクタデータが含まれている場合に、その旨を示す、該当セクタの書き換えに関する属性情報(Pending情報)が、書き込み先のセクタデータに埋め込まれる。これにより、セクタデータが格納される物理的なセクタの位置が変更される場合にもこの情報を引き継ぐことが可能となり、この情報を例えば管理テーブルを用いて管理することが不要となる。
【0068】
[第2の実施形態]
次に、第2の実施形態について図1を援用して説明する。つまり、第2の実施形態に係る磁気ディスク装置(HDD)10の構成(ハードウェア構成)は、前記第1の実施形態のそれと同一であるものとする。また、HDD10は、第1の実施形態と同様に瓦書きを適用するものとする。第2の実施形態が第1の実施形態と相違する点は、インジケータINDIの構成にある。
【0069】
図7は、第2の実施形態で適用されるセクタのデータフォーマットの一例を示す。セクタは、第1の実施形態と同様に、主として、ユーザデータフィールドと、インジケータ(INDI)フィールドと、ECCフィールドとから構成される。第2の実施形態において、ユーザデータに付加されるインジケータINDIは、書き換え回数(N)を含む。この点で第2の実施形態は、インジケータINDIがINDI[UNC]ビット(書き込み不可ビット)を含む第1の実施形態と相違する。この相違により、第2の実施形態では、第1の実施形態と異なる手順のデータブロック移動処理及びデータ読み出し処理が適用される。以下の説明では、インジケータINDIと、当該インジケータINDIに含まれている書き換え回数(N)とを区別する必要がある場合を除き、簡略化のために、書き換え回数(N)がユーザデータに付加されるものとする。つまり、セクタデータが、ユーザデータ、書き換え回数(N)及びECCから構成されているものとする。この書き換え回数をINDI[N]のように表記する。
【0070】
以下、第2の実施形態で適用されるデータブロック移動処理の手順について、第1の実施形態と同様にデータブロックDBを区域A0から区域A2へ移動する場合を例に、図8のフローチャートを参照して説明する。
【0071】
以前に、グループG0内の、ある区域(移動元区域)から別の区域、例えば区域(移動先区域)A2にデータブロックを移動するデータブロック移動処理が電源遮断なしに最終セクタまで行われたものとする。また、データブロック移動処理の途中で電源遮断が発生した場合でも、後述するデータ回復処理で、電源遮断の発生により処理(データ書き込み)が中断されたセクタから区域A2の最終セクタまで、データ移動が完了しているものとする。いずれの場合でも、区域A2の全セクタに格納されているセクタデータに含まれている(埋め込まれている)INDI[N](書き換え回数)は等しい。
【0072】
そこでMPU20は、区域(移動先区域)A2の例えば先頭セクタからセクタデータを読み出すことにより、当該セクタデータからINDI[N]を取得する(ステップ801)。また、INDI[N]の値がnであるものとすると、この値がnのINDI[N]をINDI[N]=nと表記する。
【0073】
次にMPU20は、区域(移動元区域)A0に格納されているデータブロックDBを例えばセクタ単位で読み出すための移動元データ読み出し処理を実行する(ステップ802)。この移動元データ読み出し処理で読み出されたセクタデータ中のユーザデータは順次バッファメモリ19に格納される。
【0074】
次にMPU20は、ステップ801で取得したINDI[N](=n)に1を加算し(INDI[N]=n+1)、この1が加算されたINDI[N]=n+1を含むINDI[N]=n+1をインジケータ回路18に設定する(ステップ803)。これによりMPU20は、設定されたINDI[N]=n+1をユーザデータに付加することを、インジケータ回路18に指示する。
【0075】
次にMPU20は、移動元データ読み出し処理(ステップ802)でバッファメモリ19に順次格納されたユーザデータを含むセクタデータを、区域(移動素器区域)A2に書き込む(移動)ためのデータ書き込み処理を実行する(ステップ804)。
【0076】
このデータ書き込み処理(ステップ804)において、インジケータ回路18は、移動元データ読み出し処理(ステップ802)でバッファメモリ19に格納されたユーザデータを順次読み出す。インジケータ回路18は、読み出されたユーザデータに、ステップ803でMPU20によって設定されたINDI[N]=n+1を付加する。
【0077】
ECC回路17は、INDI[N]=n+1が付加されたユーザデータに基づいてECCを生成し、生成されたECCを、INDI[N]=n+1が付加されたユーザデータに付加する。ECC回路17は、INDI[N]=n+1及びECCが付加されたユーザデータを含むセクタデータを、ライトデータとしてリードIC16に転送する。このライトデータは、リードIC16及びヘッドアンプを介してヘッド12により区域A2内の対応するセクタに書き込まれる。
【0078】
したがって、データブロック移動処理がHDD10の電源の遮断なしに最終セクタまで行われた場合、区域A2の全セクタにそれぞれ書き込まれた(移動された)セクタデータには、同一のINDI[N]=n+1が含まれている。つまり、区域A2の全セクタのINDI[N](書き換え回数)はいずれもn+1である。
【0079】
これに対して、データブロック移動処理の途中でHDD10の電源が遮断した場合、区域A2の先頭セクタから電源遮断発生箇所の直前のセクタまでの各セクタのINDI[N](書き換え回数)はn+1である。しかし、区域A2の電源遮断発生箇所の直後のセクタから最終セクタまでの各セクタのINDI[N](書き換え回数)はnである。このような例を、電源遮断発生箇所のセクタが、区域A2内のトラックTR_N+2上のセクタSBである場合について、図9に示す。図9からも明らかなように、INDI[N](書き換え回数)の違いを利用することにより、データブロック移動処理の途中で電源遮断が発生したか否かを判断し、更に電源遮断の発生により処理が中断されたセクタを特定することが可能である。
【0080】
次に、第2の実施形態で適用されるデータ読み出し処理の手順について、図10のフローチャートを参照して説明する。
まず、ホスト100からHDD10内のコントローラCNTに対して、あるデータブロックの読み出しを指定するリードコマンドが発行されたものとする。このリードコマンドの示すリードアクセス範囲が属する区域は、区域A2であるものとする。
【0081】
コントローラCNT内のMPU20は、リードアクセス範囲が属する区域A2の例えば先頭セクタ及び最終セクタからセクタデータを読み出すことにより、当該先頭セクタ及び最終セクタのセクタデータからINDI[N](書き換え回数)を取得する(ステップ1001)。以下の説明では、このようなINDI[N]を取得するためにセクタデータを読み出すことを、簡略化のために、INDI[N]を読み出すと表現する。ここで、先頭セクタのINDI[N]がn1(INDI[N]=n1)であり、最終セクタのINDI[N]がn2(INDI[N]=n2)であるものとする。
【0082】
MPU20は、INDI[N]=n1がINDI[N]=n2に一致する(n1=n2)かを判定する(ステップ1002)。
【0083】
もし、INDI[N]=n1がINDI[N]=n2に一致するならば(ステップ1002のYes)、ある区域(例えばA0)から区域A2へデータブロックを移動するためのデータ移動処理が正常に完了しているものと判断してステップ1003に進む。この正常完了は、例えば電源遮断で中断されたデータ移動処理が後述するデータ回復処理によって完了している場合も含む。
【0084】
ステップ1003において、MPU20は、読み出されるべきセクタを指定する読み出し論理ブロックアドレスRLBAをリードアクセス範囲の先頭LBAに設定する。次にMPU20は、現在の読み出し論理ブロックアドレスRLBAの示すセクタからセクタデータを読み出すためのセクタ読み出し処理を実行する(ステップ1004)。
【0085】
ECC回路17は、セクタ読み出し処理で読み出されたされたセクタデータに含まれているユーザデータの誤り検出・訂正を当該セクタデータに含まれているECCに基づいて行うことにより、読み出しエラーが発生したかを判定する。ECC回路17の判定結果はMPU20に通知される。
【0086】
MPU20は、ECC回路17の判定結果に基づいて、読み出しエラーが検出されたかを判定する(ステップ1005)。もし、読み出しエラーが検出されなかった場合(ステップ1005のNo)、MPU20は例えばRLBAを1インクリメントした後、ステップ1006に進む。ステップ1006においてMPU20は、読み出されるべきデータが残っているかを判定する。
【0087】
もし、読み出されるべきデータが残っているならば(ステップ1006のYes)、MPU20はステップ1004に戻って、セクタ読み出し処理を再び実行する。これに対し、読み出されるべきデータが残っていないならば(ステップ1006のNo)、MPU20は正常終了処理を実行する(ステップ1007)。
【0088】
また、読み出しエラーが検出されたならば(ステップ1005のYes)、MPU20は、エラー処理を実行する(ステップ1008)。
【0089】
一方、INDI[N]=n1がINDI[N]=n2に一致しないならば(ステップ1002のNo)、MPU20は、区域A0から区域A2へデータブロックを移動するためのデータブロック移動処理の途中で例えば電源遮断が発生して、当該データブロック移動処理が正常に完了していないものと判断する。この場合、MPU20は、以下に述べるデータ回復処理を実行する(ステップ1009)。
【0090】
MPU20は、データ回復処理の始めで、電源遮断の発生により処理が中断されたセクタを特定する。この電源遮断の発生により処理が中断されたセクタを特定する手法について、図9を参照して説明する。
MPU20はまず、区域A2内の先頭のトラックTR_N+1上の先頭セクタ及び最終セクタからINDI[N](書き換え回数)を読み出す。MPU20は、読み出された両INDI[N]を比較することにより、両INDI[N]が一致するかを判定する。図9の例では、両INDI[N]はいずれもn+1であり、一致する。この場合、MPU20は、トラックTR_N+1へのデータ移動は正常に完了していると判断する。
【0091】
次にMPU20は、区域A2内の2番目のトラックTR_N+2上の先頭セクタ及び最終セクタからINDI[N]を読み出す。MPU20は、読み出された両INDI[N]を比較することにより、両INDI[N]が一致するかを判定する。図9の例では、トラックTR_N+2の先頭セクタ及び最終セクタのINDI[N]は、それぞれn+1及びnであり、一致しない。この場合、MPU20は、トラックTR_N+2へのデータ移動の途中で電源遮断が発生したものと判断する。なお、トラックTR_N+2のように、次のトラック(TR_N+3)が存在する場合には、トラックTR_N+2の先頭セクタと当該次のトラックの先頭セクタとからINDI[N]を読み出してもよい。
【0092】
次にMPU20は、トラックTR_N+2上の2番目のセクタからINDI[N]を読み出す。MPU20は、トラックTR_N+2上の先頭セクタのINDI[N](=n+1)とトラックTR_N+2上の2番目のセクタのINDI[N]とが一致するかを判定する。
【0093】
MPU20は、以上の動作を、読み出しの対象となるトラックTR_N+2上のセクタを順次切り替えながら、先頭セクタのINDI[N](=n+1)と一致しないINDI[N]を検出するまで繰り返す。第2の実施形態では、図9に示すセクタSBからINDI[N]が読み出された場合に、先頭セクタのINDI[N](=n+1)と一致しないINDI[N](=n)が検出されるものとする。この場合、MPU20は、セクタSBをデータブロック移動処理の途中で電源遮断が発生したために処理が中断されたセクタであると判断する。
【0094】
なお、トラック上の先頭セクタ及び最終セクタの両INDI[N]の一致を検出することは必ずしも必要ない。そのためには、例えば、区域A2内の2番目のセクタから順に、INDI[N]を、区域A2内の先頭セクタ(つまりトラックTR_N+1上の先頭セクタ)のINDI[N](=n+1)と比較する動作を、当該先頭セクタのINDI[N](=n+1)と一致しないINDI[N]を検出するまで繰り返せばよい。つまり区域A2内の先頭セクタから順にINDI[N]を読み出して、INDI[N]の値が先頭セクタのINDI[N](=n+1)と最初に相違するセクタを検出してもよい。
【0095】
さてMPU20は、データブロック移動処理の途中で電源遮断が発生したために処理が中断された、セクタトラックTR_N+2上のセクタSBを検出すると、当該セクタSBからトラックTR_N+4上の最終セクタ(つまり区域A2内の最終セクタ)までの各セクタのデータを、区域A0内の対応する各セクタのデータを利用して回復するための処理を行う。つまりMPU20は、区域A2内のセクタSBから最終セクタまでの各セクタに、区域A0内の対応するセクタのデータを移動するためのデータ移動処理(電源遮断により中断されていたデータ移動処理)を行う。このデータ移動処理では、区域A2内のセクタSBから最終セクタまでの各セクタに移動されるセクタデータには、nからn+1にインクリメントされたINDI[N]が含められる。
MPU20はデータ回復処理(ステップ1009)を実行し終えると、ステップ1003に進む。
【0096】
上記第2の実施形態では、上記第1の実施形態と同様に、グループに属する複数の区域の1つがフリー領域に割り当てられ、このフリー領域を利用して区域単位でデータ移動が行われる。この場合、データ移動は高速に行えるものの、グループ毎に1つのフリー領域を必要とするため、グループ内の記憶領域の利用効率が低下する。そこで、トラック毎に、そのトラック上で例えばセクタ単位でデータを書き換えるようにしてもよい。
【0097】
瓦書きを適用するHDD10において、例えば第1のトラックのデータの書き換えを行う場合、当該書き換えの影響を受ける少なくとも1つのトラックが存在する。ここでは、第2のトラックが第1のトラックのデータの書き換えの影響を受けるものとする。この場合、第2のトラックの各セクタのデータを、第1のトラックのデータの書き換えが開始される前に、例えば一時退避領域に退避(移動)しておく必要がある。
【0098】
第1のトラックのデータの書き換えが完了すると、一時退避領域に退避されていた第2のトラックのデータを当該第2のトラックに再度書き込むための書き換え処理(再書き込み処理)が可能となる。第2のトラックのデータは、少なくとも当該書き換え処理が完了するまで、上記一時退避領域に保存されるように管理される。第2のトラックのデータの書き換えは、当該第2のトラックのデータの書き換えの影響を受ける、例えば第3のトラックの各セクタのデータを上記一時退避領域に退避した後に開始される。
【0099】
第2のトラックのデータの書き換えの途中で電源遮断が発生した場合、電源遮断の発生により処理が中断されたセクタを、上記第2の実施形態と同様の手法により特定することができる。この場合、一時退避領域に退避されている第2のトラックのデータのうち、特定されたセクタから当該第2のトラックの最終セクタまでの各セクタのデータを用いて、書き換え処理を再開することができる。
【0100】
上記第2の実施形態では、各セクタデータ中のインジケータINDIに書き換え回数(INDI[N])が含まれている。そして、データブロック移動処理では、移動先区域内の各セクタに共通の書き換え回数(データブロックの移動前の書き換え回数)をインクリメントした値が用いられる。しかし、書き換え回数をインクリメントした値を必ずしも用いる必要はなく、データ移動前(データ書き換え前)の書き換え回数とは異なる値であればよい。つまり、書き換え回数に代えて、書き換えの属性を示す属性値を用いてもよく、データブロック移動処理では、データ移動前の属性値とは異なる値の属性値を使用すればよい。
【0101】
このように、第2の実施形態においては、各セクタデータに埋め込まれるインジケータINDIに、書き換え回数(INDI[N])のような、書き換えの属性を示す属性値を含められる。これにより、データブロックの書き換えの途中で電源遮断が発生した場合に、その電源遮断の発生により処理が中断されたセクタを容易に特定することが可能となる。
【0102】
[第3の実施形態]
次に、第3の実施形態について図1を援用して説明する。つまり、第3の実施形態に係る磁気ディスク装置(HDD)10の構成は、前記第1及び第2の実施形態のそれと同一であるものとする。また、HDD10は、第1及び第2の実施形態と同様に瓦書きを適用し、第2の実施形態と同様に書き換え回数(INDI[N])を含むインジケータINDIを適用するものとする。
【0103】
以下、第3の実施形態が第2の実施形態と相違する点について図面を参照して説明する。
第3の実施形態では、ディスク11上の所定の領域が、ライトデータを一時格納するための一時格納領域(キャッシュ領域)として用いられる。この一時格納領域を不揮発性キャッシュ領域と称する。不揮発性キャッシュ領域は、前述のグループG0及びG1のいずれにも属さないものとする。
【0104】
図11は、ディスク11上に確保された不揮発性キャッシュ領域110に、ホスト100からのライトコマンドによって指定されたライトデータ(データブロック)の一部が格納されている状態を示す。
【0105】
MPU20は、ホスト100から転送されたライトデータを、バッファメモリ19を介して不揮発性キャッシュ領域110に順次書き込む(一時格納する)。このときMPU20は、不揮発性キャッシュ領域110を、矢印111及び112で示すように、先頭位置から順に先入れ先出し(FIFO)によりサイクリックに使用する。つまり不揮発性キャッシュ領域110は、FIFOを利用したリングバッファとして用いられる。MPU20は、不揮発性キャッシュ領域110に一時格納されたライトデータを、MPU20によって指定された本来のライトアクセス範囲に書き込む。
【0106】
瓦書きを適用するHDD10では、例えばホスト100からのライトコマンドによって1トラックのデータの書き込みが指定された場合でも、そのトラックが属する区域内の全トラックのデータを書き直す必要がある。つまり、第1及び第2の実施形態で適用されたような、データブロック移動処理が必要となる。この場合、データブロック移動処理が完了することによってライトコマンドの完了がホスト100に報告されるため、コマンドレスポンスが低下する。
【0107】
これに対し、ホスト100からのライトコマンドによって指定されたライトデータを、MPU20が不揮発性キャッシュ領域110にFIFOを利用して書き込むならば、当該ライトデータを高速で不揮発性キャッシュ領域110に一時的に格納できる。この場合、指定されたライトデータの不揮発性キャッシュ領域110への書き込みが完了した時点で、ライトコマンドの完了をHDD10からホスト100に報告することが可能となるため、コマンドレスポンスが向上する。
【0108】
不揮発性キャッシュ領域110に一時格納されたライトデータは、バッファメモリ19から読み出される場合と同様に、FIFOを利用して順次読み出され、対応するライトコマンドによって指定されたディスク11上のライトアクセス範囲に書き込まれる。この書き込みは、第1及び第2の実施形態で適用されたような、当該ライトアクセス範囲が属する区域のデータブロック(より詳細には、ライトアクセス範囲のデータがライトデータで置き換えられたデータブロック)をフリー領域に移動するためのデータブロック移動処理によって実現される。
【0109】
第3の実施形態では、不揮発性キャッシュ領域110にライトデータが書き込まれる際にも、セクタデータ中にインクリメントされたINDI[N]が埋め込まれる。図11において、不揮発性キャッシュ領域110上の位置P1及びP2は、ホスト100からのライトコマンドによって指定された、ライトデータ(データブロック)が一時的に格納されるべき不揮発性キャッシュ領域110内の領域部分113の、それぞれ先頭(始端)及び最後尾(終端)を示す。
【0110】
図11の例では、位置P1のセクタから、位置P1及びP2の間の位置P3の直前のセクタまで、指定されたライトデータの一部が書き込まれている。また、図11において、指定されたライトデータを位置P1のセクタから順に書き込む動作が開始される前の、少なくとも、位置P1のセクタから不揮発性キャッシュ領域110の最後尾のセクタまでの各セクタに埋め込まれている書き換え回数(INDI[N])はn(INDI[N]=n)であるものとする。この場合、位置P1のセクタから位置P3の直前のセクタまで、指定されたライトデータの一部が書き込まれた段階では、位置P1から位置P3の直前までの各セクタに埋め込まれている書き換え回数(INDI[N])はn+1(INDI[N]=n+1)となる。
【0111】
不揮発性キャッシュ領域110内の各セクタは、ディスク11上の通常の領域と異なり、LBAが順に割り当てられていない。したがって、ホスト100からのライトコマンドに応じて不揮発性キャッシュ領域110に格納されるライトデータの位置は、当該ライトコマンドによって指定されるLBAの示す位置と対応していない。そのため、不揮発性キャッシュ領域110におけるライトデータの位置と当該ライトデータの書き込み先を示すLBAとを、例えば管理テーブルで対応付けて管理する必要がある。
【0112】
また、不揮発性キャッシュ領域110を適用するHDD10では、不揮発性キャッシュ領域110にライトデータを書き込んでいる途中で電源遮断が発生した場合を考慮する必要がある。そこで、例えば、ライトデータを全て不揮発性キャッシュ領域110に書き終えた段階で管理テーブルを更新すればよい。また、ライトデータの終端(ライトデータの最終セクタ)の次に書き換え完了を示すセクタデータを書き込んでもよい。しかし、この手法では、ライトデータの先頭から何番目のセクタへのデータ書き込みで電源遮断が発生したかを検出することができない。このため、ライトデータの全てが失われてしまう。
【0113】
一方、不揮発性キャッシュ領域110を使わずに直接ライトコマンドで指定されたLBAの位置にライトデータを書き込むタイプのHDD(以下、現状のHDDと称する)では、ライトデータを書き込んでいる途中で電源遮断が発生した場合、当該電源遮断の発生により処理が中断されたセクタの直前までのデータは更新された状態となる。つまり、処理が中断されたセクタの直前までのデータは失われない。このように、不揮発性キャッシュ領域110を使用する場合と使用しない場合とで、HDDの振る舞いが変わってしまう。
【0114】
しかし、第3の実施形態では、不揮発性キャッシュ領域110に書き込まれるデータに、第2の実施形態と同様に、セクタ単位で書き換え回数(INDI[N])が埋め込まれる。このため、以下に述べるように、上述のようなライトデータの全てが失われることを回避可能である。
【0115】
今、図11に示す位置P3の直後のセクタにライトデータの対応するセクタデータを書き込んでいる状態で電源遮断が発生したものとする。この場合、第2の実施形態と同様に、電源遮断の発生により処理が中断されたセクタの前後で書き換え回数(INDI[N])が相違していることを検出できる。つまり、電源遮断の発生により処理が中断されたセクタを特定できる。したがって、この処理が中断されたセクタの1つ前のセクタのデータまでは保証でき、現状のHDDと同等の振る舞いが可能になる。
【0116】
次に、第3の実施形態で適用される、不揮発性キャッシュ領域110へのデータ書き込み処理の手順について図12のフローチャートを参照して説明する。
今、ホスト100からHDD10内のコントローラCNTに対して、データの書き込みを指定するライトコマンドが発行され、当該ライトコマンドで指定されたライトデータがバッファメモリ19に格納されたものとする。
【0117】
MPU20は、バッファメモリ19に格納されたライトデータをディスク11上の不揮発性キャッシュ領域110に書き込む前に、管理テーブルを更新する(ステップ1201)。この更新により、ライトコマンドで指定されたライトデータが書き込まれるべき不揮発性キャッシュ領域110内の位置と、当該ライトコマンドで指定されたライトデータの本来の書き込み先(ライトアクセス範囲)を示すLBAとが対応付けられる。
【0118】
次にMPU20は、指定されたライトデータを、前回不揮発性キャッシュ領域110に格納されたライトデータの終端の次のセクタから、当該不揮発性キャッシュ領域110にセクタ単位で順次書き込むためのデータライト処理を実行する(ステップ1202)。このデータライト処理では、第2の実施形態と同様に、インクリメントされた書き込み回数(INDI[N])が、ライトデータに対応する各セクタデータに埋め込まれる。
【0119】
さて、不揮発性キャッシュ領域110に書き込まれたデータが、ディスク11上の本来のライトアクセス範囲に書かれる前に、当該データの読み出しがホスト100からのリードコマンドによって指定されることがある。ホスト100から指定されたデータが、不揮発性キャッシュ領域110に存在するかは、管理テーブルを参照することによって判定することができる。もし、ホスト100から指定されたデータが、不揮発性キャッシュ領域110に存在する場合、当該データを不揮発性キャッシュ領域110から読み出すためのデータ読み出し処理が行われる。
【0120】
以下、第3の実施形態で適用される、不揮発性キャッシュ領域110からのデータ読み出し処理の手順について図13のフローチャートを参照して説明する。
まずMPU20は、読み出されるべきセクタを指定する読み出し論理ブロックアドレスRLBAをリードアクセス範囲の先頭LBAに設定する(ステップ1301)。次にMPU20は、現在の読み出し論理ブロックアドレスRLBAに対応する不揮発性キャッシュ領域110内のセクタからセクタデータを読み出すためのセクタ読み出し処理を実行する(ステップ1302)。ここで、RLBAに対応する不揮発性キャッシュ領域110内のセクタは、管理テーブルを参照することにより特定できる。
【0121】
ECC回路17は、セクタ読み出し処理で読み出されたされたセクタデータに含まれているユーザデータの誤り検出・訂正を当該セクタデータに含まれているECCに基づいて行うことにより、読み出しエラーが発生したかを判定する。ECC回路17の判定結果はMPU20に通知される。
【0122】
MPU20は、RLBAに対応するセクタから読み出されたセクタデータに含まれているINDI[N](書き換え回数)が、その1つ前のセクタに含まれているINDI[N]に一致するかを判定する(ステップ1303)。もし、両INDI[N]が一致するならば(ステップ1303のYes)、MPU20は、ECC回路17の判定結果に基づいて、読み出しエラーが検出されたかを判定する(ステップ1304)。
【0123】
もし、読み出しエラーが検出されなかった場合(ステップ1304のNo)、つまり、上記両INDI[N]が一致し、且つ読み出しエラーが検出されなかった場合、MPU20は例えばRLBAを1インクリメントした後、ステップ1305に進む。ステップ1305においてMPU20は、読み出されるべきデータが残っているかを判定する。もし、読み出されるべきデータが残っているならば(ステップ1305のYes)、MPU20はステップ1302に戻って、セクタ読み出し処理を再び実行する。これに対し、読み出されるべきデータが残っていないならば(ステップ1305のNo)、MPU20は正常終了処理を実行する(ステップ1306)。
【0124】
なお、MPU20が、ステップ1302の次にステップ1304を実行し、読み出しエラーが検出されなかった場合に(ステップ1304のNo)、ステップ1303を実行してもよい。
【0125】
一方、上記両INDI[N]が一致しないならば(ステップ1303のNo)、MPU20は、今回読み出しが行われたセクタは、不揮発性キャッシュ領域110へのライトデータの書き込みの途中での電源遮断の発生により処理が中断されたセクタであると判断する。そこでMPU20は、エラー処理を実行する(ステップ1307)。このエラー処理において、MPU20は、ホスト100からのリードコマンドで指定されたリードアクセス範囲のデータのうち、既に正常に読み出されている先頭セクタから今回読み出しが行われた1つ前のセクタまでの各セクタのデータをホスト100に返すことができる。
【0126】
また、上記両INDI[N]が一致しても(ステップ1303のYes)、読み出しエラーが検出されたならば(ステップ1304のYes)、MPU20は、エラー処理を実行する(ステップ1307)。
【0127】
このように第3の実施形態においては、ディスク11上の不揮発性キャッシュ領域(一時格納領域)110に一時的に格納される、ホスト100によって指定されたライトデータ(データブロック)にも、セクタデータ毎に、インジケータINDIが埋め込まれる。また、各セクタデータ中のインジケータINDIには、書き換え回数(INDI[N])のような、書き換えの属性を示す属性値が含められる。このため、不揮発性キャッシュ領域110へのライトデータの書き込みの途中で電源遮断が発生した場合に、その電源遮断の発生により処理が中断されたセクタを容易に特定することが可能となる。これにより、HDD10が不揮発性キャッシュ領域110を使用していながら、不揮発性キャッシュ領域110を使用しない現状のHDDと同様に、処理が中断されたセクタの直前までのデータを保証することが可能になる。
【0128】
[変形例]
第2及び第3の実施形態において、図14に示すように、インジケータINDIに、書き換え回数(INDI[N])に加えて、第1の実施形態で適用されたINDI(UNC)ビットを含めてもよい。
【0129】
これらの実施形態及び変形例によれば、瓦書きを適用するHDDに代表されるような、ある長さのデータブロックを書き換える制御を行うHDDにおいて、ディスクに書き込まれる各セクタデータに、当該セクタデータの書き換えに関する属性を表すインジケータを埋め込むことにより、管理テーブル等を用いることなく、当該インジケータから、各セクタデータの書き換えに関する属性を検出できる。この書き換えに関する属性から、例えば、ディスク上のデータブロックの書き換えで、読み出しエラーのために不正データとなっているセクタ、或いはデータブロックの書き換えの途中でHDDの電源が遮断したために、処理が中断されたセクタのように、異常が発生したセクタを検出することが可能となる。
【0130】
ここで、データブロックの書き換えが、必ずしもデータブロックの更新とは限らない。例えば、ディスク上の第1の領域から読み出されたデータブロックを、当該第1の領域、或いは当該第1の領域とは異なるディスク上の第2の領域に書き込むことも、データブロックの書き換えである。このようなデータブロックの書き換えは、当該データブロックをリフレッシュする場合に行われる。
【0131】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
【符号の説明】
【0132】
10…HDD(磁気ディスク装置)、11…ディスク、12…ヘッド、16…リードIC、17…ECC回路、18…インジケータ回路、19…バッファメモリ、20…MPU、100…ホスト、110…不揮発性キャッシュ領域、CNT…コントローラ。

【特許請求の範囲】
【請求項1】
複数のデータセクタを備えたディスクと、
前記ディスクに格納されている第1のデータブロックを読み出して、当該読み出された第1のデータブロックに対応する第2のデータブロックを、前記ディスク上の書き込み先に書き込むためのデータ書き換えを制御する制御手段と、
前記第2のデータブロックの各セクタデータが前記書き込み先に書き込まれる際に、当該書き込まれるセクタデータにデータ書き換えに関する属性を示すインジケータを埋め込むインジケータ手段と
を具備する磁気ディスク装置。
【請求項2】
前記インジケータ手段は、前記第1のデータブロックに含まれているセクタデータの読み出しで読み出しエラーが発生した場合、当該読み出しエラーが発生したセクタデータに対応する前記第2のデータブロックのセクタデータに、読み出しエラーを示す読み出し不可ビットが含まれたインジケータを埋め込む請求項1記載の磁気ディスク装置。
【請求項3】
前記制御手段は、読み出されたセクタデータに前記有効な読み出し不可ビットを含むインジケータが埋め込まれている場合、当該読み出されたセクタデータに対応する前記第2のデータブロックのセクタデータに前記インジケータ手段によって埋め込まれる前記インジケータが前記有効な読み出し不可ビットを引き継ぐように、前記インジケータ手段を制御する請求項2記載の磁気ディスク装置。
【請求項4】
前記インジケータ手段は、読み出されたセクタデータに前記有効な読み出し不可ビットを含むインジケータが埋め込まれている場合、前記制御手段に読み出しエラーを通知する請求項3記載の磁気ディスク装置。
【請求項5】
前記制御手段は瓦書きを適用して前記データの書き換えを制御する請求項3記載の磁気ディスク装置。
【請求項6】
前記第2のデータブロックの書き込み先には、第3のデータブロックが格納されており、
前記第3のデータブロックの各セクタデータには、前記第3のデータブロックが書き込まれた際に前記インジケータが埋め込まれており、
前記第3のデータブロックの前記各セクタデータに埋め込まれている前記インジケータは、第1の書き換え状態を示す書き換え状態データを含んでおり、
前記インジケータ手段は、前記第2のデータブロックの各セクタデータに、前記第1の書き換え状態とは異なる第2の書き換え状態を示す書き換え状態データが含まれたインジケータを埋め込む請求項1記載の磁気ディスク装置。
【請求項7】
前記制御手段は、前記書き込み先の先頭データセクタ及び最終データセクタに埋め込まれている前記書き換え状態データが相違していることを検出することによって、前記第2のデータブロックの前記書き込み先への書き込みの途中で前記磁気ディスク装置の電源が遮断したことを検出する請求項6記載の磁気ディスク装置。
【請求項8】
前記制御手段は、前記書き込み先の各データセクタに埋め込まれている前記書き換え状態データが変化したデータセクタを、前記電源が遮断したために前記書き込みが中断されたデータセクタとして特定する請求項6記載の磁気ディスク装置。
【請求項9】
前記ディスクはホストによって指定されたライトデータを一時的に格納するための一時格納領域を備えており、
前記制御手段は、前記ライトデータの前記一時格納領域への書き込みを制御し、
前記ライトデータが書き込まれるべき前記一時格納領域内の書き込み先の各セクタデータには、第3の書き換え状態を示す書き換え状態データを含むインジケータが埋め込まれており、
前記インジケータ手段は、前記ライトデータに対応する各セクタデータに、前記第3の書き換え状態とは異なる第4の書き換え状態を示す書き換え状態データが含まれたインジケータを埋め込む請求項8記載の磁気ディスク装置。
【請求項10】
前記第1の書き換え状態を示す書き換え状態データは第1の書き換え回数であり、前記第2の書き換え状態を示す書き換え状態データは、前記第1の書き換え回数に1が加算された第2の書き換え回数である請求項6記載の磁気ディスク装置。
【請求項11】
複数のデータセクタを備えたディスクを具備する磁気ディスク装置におけるデータブロック書き換え方法であって、
前記ディスクに格納されている第1のデータブロックをデータセクタ単位で読み出し、
前記読み出された第1のデータブロックに対応する第2のデータブロックを、前記ディスク上の書き込み先に書き込み、
前記第2のデータブロックの各セクタデータが前記書き込み先に書き込まれる際に、当該書き込まれるセクタデータにデータ書き換えに関する属性を示すインジケータを埋め込むデータブロック書き換え方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate


【公開番号】特開2011−253578(P2011−253578A)
【公開日】平成23年12月15日(2011.12.15)
【国際特許分類】
【出願番号】特願2010−125137(P2010−125137)
【出願日】平成22年5月31日(2010.5.31)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】