(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023092684
(43)【公開日】2023-07-04
(54)【発明の名称】磁気ディスク装置及びDOLの設定方法
(51)【国際特許分類】
G11B 20/18 20060101AFI20230627BHJP
G11B 5/09 20060101ALI20230627BHJP
G11B 21/10 20060101ALI20230627BHJP
G11B 20/10 20060101ALI20230627BHJP
G11B 5/58 20060101ALI20230627BHJP
G11B 5/55 20060101ALI20230627BHJP
【FI】
G11B20/18 512C
G11B20/18 572B
G11B20/18 572F
G11B20/18 574J
G11B5/09 361B
G11B21/10 Z
G11B20/10 311
G11B5/58 A
G11B5/55 Z
【審査請求】未請求
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2021207845
(22)【出願日】2021-12-22
(71)【出願人】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(71)【出願人】
【識別番号】317011920
【氏名又は名称】東芝デバイス&ストレージ株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】前東 信宏
【テーマコード(参考)】
5D044
【Fターム(参考)】
5D044BC01
5D044CC04
5D044DE68
5D044GK11
(57)【要約】
【課題】 信頼性を向上可能な磁気ディスク装置及びDOLの設定方法を提供することである。
【解決手段】 本実施形態に係る磁気ディスク装置は、ディスクと、前記ディスクに対してデータをライトし、前記ディスクからデータをリードするヘッドと、第1パリティセクタに基づいてトラック単位のエラー訂正処理を実行できる前記第1パリティセクタから前記ディスクの円周方向に連続する少なくとも1つの第1セクタ及び前記第1パリティセクタを含む第1セクタ群に対する第1DOLとトラック単位のエラー訂正処理を実行できない前記円周方向に連続する少なくとも1つの第2セクタを含む第2セクタ群に対する第2DOLとを異なる値に設定する、コントローラと、を備える。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ディスクと、
前記ディスクに対してデータをライトし、前記ディスクからデータをリードするヘッドと、
第1パリティセクタに基づいてトラック単位のエラー訂正処理を実行できる前記第1パリティセクタから前記ディスクの円周方向に連続する少なくとも1つの第1セクタ及び前記第1パリティセクタを含む第1セクタ群に対する第1DOLとトラック単位のエラー訂正処理を実行できない前記円周方向に連続する少なくとも1つの第2セクタを含む第2セクタ群に対する第2DOLとを異なる値に設定する、コントローラと、を備える磁気ディスク装置。
【請求項2】
前記コントローラは、前記第1セクタ群に相当する第1トラックにランダムライトした場合、前記第1トラックに対するDOLを前記第1DOLから前記第2DOLに変更する、請求項1に記載の磁気ディスク装置。
【請求項3】
前記コントローラは、前記第1セクタ群と前記第2セクタ群とを有する第1トラックの前記第1セクタ群に対して前記第1DOLを設定し、前記第1トラックの前記第2セクタ群に対して前記第2DOLを設定する、請求項1に記載の磁気ディスク装置。
【請求項4】
前記コントローラは、前記第1セクタ群に対する第1オフトラック量がアンリカバブル閾値よりも大きい場合、前記第1セクタ群にトラック単位のエラー訂正が訂正不可能となるライトを許可しない、請求項2又は3に記載の磁気ディスク装置。
【請求項5】
前記コントローラは、前記第1セクタ群に対する第1オフトラック量がアンリカバブル閾値よりも大きい場合、前記第1セクタ群にリードモディファイライトを実行する、請求項4に記載の磁気ディスク装置。
【請求項6】
ディスクと、
前記ディスクに対してデータをライトし、前記ディスクからデータをリードするヘッドと、
第1パリティセクタに基づいてトラック単位のエラー訂正処理を実行できる前記第1パリティセクタから前記ディスクの円周方向に連続する少なくとも1つの第1セクタ及び前記第1パリティセクタを含む第1セクタ群とトラック単位のエラー訂正処理を実行できない前記円周方向に連続する少なくとも1つの第2セクタを含む第2セクタ群とを管理するテーブルを有する、コントローラと、を備える磁気ディスク装置。
【請求項7】
ディスクと、
前記ディスクに対してデータをライトし、前記ディスクからデータをリードするヘッドと、
第1パリティセクタに基づいてトラック単位のエラー訂正処理を実行できる前記第1パリティセクタから前記ディスクの円周方向に連続する少なくとも1つの第1セクタ及び前記第1パリティセクタを含む第1セクタ群からトラック単位のエラー訂正処理を実行できない前記円周方向に連続する少なくとも1つの第2セクタを含む第2セクタ群に変更した場合にリードエラーを生じる第3セクタ群を管理するテーブルを有する、コントローラと、を備える磁気ディスク装置。
【請求項8】
第1領域を有するディスクと、
前記ディスクに対してデータをライトし、前記ディスクからデータをリードするヘッドと、
トラック単位のエラー訂正が訂正不可能となるライトが許可されていない前記ディスクの円周方向に連続する少なくとも1つの第1セクタを含む第1セクタ群に変更するライトコマンドを受けた場合、前記第1領域と異なる第1記録領域に一時的に退避し、前記第1領域にライト処理を実行しない、コントローラと、を備える磁気ディスク装置。
【請求項9】
第1領域を有するディスクと、
前記ディスクに対してデータをライトし、前記ディスクからデータをリードするヘッドと、
第1パリティセクタに基づいてトラック単位のエラー訂正処理を実行できる前記第1パリティセクタから前記ディスクの円周方向に連続する少なくとも1つの第1セクタ及び前記第1パリティセクタを含む第1セクタ群からトラック単位のエラー訂正処理を実行できない前記円周方向に連続する少なくとも1つの第2セクタを含む第2セクタ群に変更する第1ライトコマンドを受けた場合、前記第1ライトコマンドに対応する第3セクタ群を前記第1領域と異なる第1記録領域に一時的に退避し、前記第3セクタ群の前記第1領域へのライト処理を実行しない、コントローラと、を備える磁気ディスク装置。
【請求項10】
前記コントローラは、前記第1セクタ群と前記第3セクタ群とに基づいて、リードモディファイライトを実行する、請求項9に記載の磁気ディスク装置。
【請求項11】
前記コントローラは、1トラックの全てのデータから前記第3セクタ群を除いた容量に相当する第4セクタ群を前記第3セクタ群に連続してライトする第2ライトコマンドを受けた場合、前記第3セクタ群及び前記第4セクタ群をライトする、請求項9に記載の磁気ディスク装置。
【請求項12】
前記コントローラは、前記第1記録領域に空き領域がない場合、前記第1ライトコマンドに従って前記第3セクタ群をライトする、請求項9に記載の磁気ディスク装置。
【請求項13】
前記第1記録領域は、データを一時的にライトするキャッシュである、請求項9乃至12のいずれか1項に記載の磁気ディスク装置。
【請求項14】
ディスクと、前記ディスクに対してデータをライトし、前記ディスクからデータをリードするヘッドと、を備える磁気ディスク装置に適用されるDOLの設定方法であって、
第1パリティセクタに基づいてトラック単位のエラー訂正処理を実行できる前記第1パリティセクタから前記ディスクの円周方向に連続する少なくとも1つの第1セクタ及び前記第1パリティセクタを含む第1セクタ群に対する第1DOLとトラック単位のエラー訂正処理を実行できない前記円周方向に連続する少なくとも1つの第2セクタを含む第2セクタ群に対する第2DOLとを異なる値に設定する、DOLの設定方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、磁気ディスク装置及びDOLの設定方法に関する。
【背景技術】
【0002】
磁気ディスク装置は、このセクタに対応する訂正コードによりこのセクタを訂正(救済又は復旧)できない場合にこのセクタを含むトラックに対応するパリティセクタに基づいて、このセクタを訂正するエラー訂正機能を有し得る。磁気ディスク装置は、所定のトラックの各セクタを排他的論理和(Exclusive OR:XOR)演算した結果をパリティセクタとしてこのトラックにライトする。磁気ディスク装置は、このトラックの所定のセクタでエラーを検出した場合、このトラックに対応するパリティセクタに基づいて誤り訂正符号(Error Correction Code)によりエラーを訂正するエラー訂正処理(以下、トラックECC処理と称する場合もある)を実行する。磁気ディスク装置が、パリティセクタを含むトラックの一部に通常記録(Conventional Magnetic Recording:CMR)型式でランダムにデータを上書きした場合、磁気ディスク装置は、このトラックにトラックECC処理を実行できない可能性がある。
【0003】
磁気ディスク装置は、対象とするトラック(以下、対象トラックと称する場合もある)の目標とする位置(以下、目標位置と称する場合もある)、例えば、トラックセンタからディスクの半径方向へのずれ量の上限値であるDOL(Drift of level)又はWOS(Write off track Slice)を対象トラックに設定する。
【0004】
また、磁気ディスク装置では、データをライトした場合にヘッドからの漏れ磁束等の影響(Adjacent Track Interference:ATI)により、データが消去されるサイドイレーズが発生し得る。ATIは、例えば、ヘッドの特性、TPI(Track Per Inch)設定値、及びライト電流設定値等によって異なる。サイドイレーズを防止するために、磁気ディスク装置は、所定のトラックの周辺トラックにデータをライトした回数が規定回数に達した場合に、所定のトラックのデータを書き直す機能(リフレッシュ機能)を有している。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】米国特許第10748567号明細書
【特許文献2】米国特許第10910013号明細書
【特許文献3】米国特許第7245447号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明の実施形態は、信頼性を向上可能な磁気ディスク装置及びDOLの設定方法を提供することである。
【課題を解決するための手段】
【0007】
本実施形態に係る磁気ディスク装置は、ディスクと、前記ディスクに対してデータをライトし、前記ディスクからデータをリードするヘッドと、第1パリティセクタに基づいてトラック単位のエラー訂正処理を実行できる前記第1パリティセクタから前記ディスクの円周方向に連続する少なくとも1つの第1セクタ及び前記第1パリティセクタを含む第1セクタ群に対する第1DOLとトラック単位のエラー訂正処理を実行できない前記円周方向に連続する少なくとも1つの第2セクタを含む第2セクタ群に対する第2DOLとを異なる値に設定する、コントローラと、を備える。
【図面の簡単な説明】
【0008】
【
図1】
図1は、実施形態に係る磁気ディスク装置の構成を示すブロック図である。
【
図2】
図2は、実施形態に係るディスクに対するヘッドの配置の一例を示す模式図である。
【
図3】
図3は、トラックECC処理の一例を示す模式図である。
【
図4】
図4は、トラックECC処理の一例を示す模式図である。
【
図5】
図5は、トラックECC処理の一例を示す模式図である。
【
図6】
図6は、実施形態に係る低DOL及び高DOLと低アンリカバブル閾値UTH1との一例を示す模式図である。
【
図7】
図7は、本実施形態に係るDOLの一例を示す模式図である。
【
図8】
図8は、本実施形態に係るDOLの一例を示す模式図である。
【
図9】
図9は、本実施形態に係るDOLの一例を示す模式図である。
【
図10】
図10は、本実施形態に係るDOLの設定方法の一例を示すフローチャートである。
【
図11】
図11は、本実施形態に係るライト処理の一例を示すフローチャートである。
【
図12】
図12は、変形例1に係る磁気ディスク装置の構成を示すブロック図である。
【
図13】
図13は、変形例1に係るリフレッシュ閾値の一例を示す模式図である。
【
図14】
図14は、本実施形態に係るリフレッシュ閾値の設定方法の一例を示すフローチャートである。
【
図15】
図15は、本実施形態に係る訂正可能領域のライト処理の一例を示すフローチャートである。
【
図16】
図16は、変形例2に係る磁気ディスク装置の構成を示すブロック図である。
【
図17】
図17は、変形例2に係る退避処理の一例を示す模式図である。
【
図18】
図18は、変形例2に係る退避処理の一例を示すフローチャートである。
【
図19】
図19は、変形例2に係る退避処理の一例を示すフローチャートである。
【発明を実施するための形態】
【0009】
以下、実施の形態について図面を参照して説明する。なお、図面は、一例であって、発明の範囲を限定するものではない。
(実施形態)
図1は、実施形態に係る磁気ディスク装置1の構成を示すブロック図である。
磁気ディスク装置1は、後述するヘッドディスクアセンブリ(HDA)と、ドライバIC20と、ヘッドアンプ集積回路(以下、ヘッドアンプIC、又はプリアンプと称する場合もある)30と、揮発性メモリ70と、不揮発性メモリ80と、バッファメモリ(バッファ)90と、1チップの集積回路であるシステムコントローラ130とを備える。また、磁気ディスク装置1は、ホストシステム(以下、単に、ホストと称する)100と接続される。
【0010】
HDAは、磁気ディスク(以下、ディスクと称する場合もある)10と、スピンドルモータ(以下、SPMと称する場合もある)12と、ヘッド15を搭載しているアーム13と、ボイスコイルモータ(以下、VCMと称する場合もある)14とを有する。ディスク10は、SPM12に取り付けられ、SPM12の駆動により回転する。アーム13及びVCM14は、アクチュエータを構成している。アクチュエータは、VCM14の駆動により、アーム13に搭載されているヘッド15をディスク10の所定の位置まで移動制御する。ディスク10およびヘッド15は、2つ以上の数が設けられてもよい。また、アクチュエータも、2つ以上設けられていてもよい。
【0011】
ディスク10は、データをライト可能な領域に、ユーザから利用可能なユーザデータ領域10aと、システム管理に必要な情報を記録するシステムエリア10bとが割り当てられている。なお、ディスク10には、ユーザデータ領域10a及びシステムエリア10bとは別の領域として、ホスト100等から転送されたデータ(又はコマンド)をユーザデータ領域10aの所定の領域にライトする前に一時的に保持するメディアキャッシュ(メディアキャッシュ領域と称する場合もある)が割り当てられていてもよい。以下、ディスク10の内周から外周へ向かう方向、又はディスク10の外周から内周に向かう方向を半径方向と称する。半径方向において、内周から外周へ向かう方向を外方向(又は、外側)と称し、外周から内周へ向かう方向、つまり、外方向と反対方向を内方向(又は、内側)と称する。ディスク10の半径方向に直交する方向を円周方向と称する。すなわち、円周方向は、ディスク10の円周に沿った方向に相当する。また、ディスク10の半径方向の所定の位置を半径位置と称し、ディスク10の円周方向の所定の位置を円周位置と称する場合もある。半径位置及び円周位置をまとめて単に位置と称する場合もある。ディスク10は、半径方向の所定の範囲毎に複数の領域(以下、ゾーン、又はゾーン領域と称する場合もある)に区分される。ゾーンには、複数のトラックを含む。トラックは、複数のセクタを含む。なお、“トラック”は、ディスク10を半径方向に所定の範囲毎に区分した複数の領域の内の1つの領域、ディスク10を半径方向に所定の範囲毎に区分した複数の領域の内の1つの領域にライトされたデータ、ディスク10の所定の半径位置で円周方向に延出する領域、ディスク10の所定の半径位置で円周方向に延出する領域にライトされたデータ、ディスク10の所定の半径位置の1周分の領域、ディスク10の所定の半径位置の1周分の領域にライトされた1周分のデータ、ディスク10の所定の半径位置に位置決めしてライトするヘッド15の経路、ディスク10の所定の半径位置に位置決めしたヘッド15でライトしたデータ、ディスク10の所定のトラックにライトされたデータや、その他の種々の意味で用いる。“セクタ”は、ディスク10の所定のトラックを円周方向で区分した複数の領域の内の1つの領域、ディスク10の所定のトラックを円周方向で区分した複数の領域の内の1つの領域にライトしたデータ、ディスク10の所定の半径位置における所定の円周位置の領域、ディスク10の所定の半径位置における所定の円周位置の領域にライトされたデータ、ディスク10の所定のセクタにライトされたデータや、その他の種々の意味で用いる。“トラックの半径方向の幅”を“トラック幅”と称する場合もある。トラック幅の中心位置をトラックセンタと称する場合もある。トラックセンタを単にトラックと称する場合もある。また、“セクタの半径方向の幅”を“セクタ幅”と称する場合もある。セクタ幅の中心位置をセクタセンタと称する場合もある。セクタセンタを単にセクタと称する場合もある。トラックセンタは、複数のセクタセンタを有する。
【0012】
ヘッド15は、スライダを本体として、当該スライダに実装されているライトヘッド15Wとリードヘッド15Rとを備える。ライトヘッド15Wは、ディスク10にデータをライトする。例えば、ライトヘッド15Wは、ディスク10に所定のトラックをライトする。リードヘッド15Rは、ディスク10に記録されているデータをリードする。例えば、リードヘッド15Rは、ディスク10の所定のトラックをリードする。なお、“ライトヘッド15W”を単に“ヘッド15”と称する場合もあるし、“リードヘッド15R”を単に“ヘッド15”と称する場合もある。また、“ライトヘッド15W及びリードヘッド15R”をまとめて“ヘッド15”と称する場合もある。“ヘッド15の中心部”を“ヘッド15”と称し、“ライトヘッド15Wの中心部”を“ライトヘッド15W”と称し、“リードヘッド15Rの中心部”を“リードヘッド15R”と称する場合もある。“ライトヘッド15Wの中心部”を単に“ヘッド15”と称する場合もあるし、“リードヘッド15Rの中心部”を単に“ヘッド15”と称する場合もある。“ヘッド15の中心部を所定の位置に位置決めする”ことを“ヘッド15を所定の位置に位置決めする”、“ヘッド15を所定の位置に配置する”、又は“ヘッド15を所定の位置に位置する”等で表現する場合もある。“ヘッド15の中心部を所定の領域の目標とする位置(以下、領域目標位置と称する場合もある)、例えば、所定の領域の半径方向の中心に位置決めする”ことを“ヘッド15を所定の領域に位置決めする”、“ヘッド15を所定の領域に配置する”、“ヘッド15を所定の領域に位置する”、“所定の領域に位置決めする”、“所定の領域に配置する”、又は“所定の領域に位置する”等で表現する場合もある。“ヘッド15の中心部を所定のトラックの目標とする位置(以下、トラック目標位置と称する場合もある)、例えば、トラックセンタに位置決めする”ことを“ヘッド15を所定のトラックに位置決めする”、“ヘッド15を所定のトラックに配置する”、“ヘッド15を所定のトラックに位置する”、“トラックに位置決めする”、“トラックに配置する”、又は“トラックに位置する”等で表現する場合もある。
【0013】
図2は、本実施形態に係るディスク10に対するヘッド15の配置の一例を示す模式図である。
図2に示すように、円周方向において、ディスク10の回転する方向を回転方向と称する。なお、
図2に示した例では、回転方向は、反時計回りの方向で示しているが、逆向き(時計回り)の方向であってもよい。
【0014】
ヘッド15は、ディスク10に対してVCM14の駆動により回転軸周りで回転して内方向から外方向に向かって所定の位置に移動する、又は外方向から内方向に向かって移動する。
【0015】
図2に示した例では、ディスク10において、システムエリア10bは、ユーザデータ領域10aの外方向に配置されている。言い換えると、ディスク10において、ユーザデータ領域10aは、システムエリア10bの内方向に配置されている。
図2に示した例では、システムエリア10bは、ディスク10の最外周に配置されている。なお、ユーザデータ領域10aは、ディスク10の半径方向において、分割して配置されていてもよい。また、システムエリア10bは、
図2に示した位置と異なる位置に配置されていてもよい。例えば、システムエリア10bは、ディスク10において、複数のユーザデータ領域10aの間に配置されていてもよいし、ディスク10の最内周に配置されていてもよい。
【0016】
ドライバIC20は、システムコントローラ130(詳細には、後述するMPU60)の制御に従って、SPM12およびVCM14の駆動を制御する。
ヘッドアンプIC(プリアンプ)30は、リードアンプ及びライトドライバ等を備えている。リードアンプは、ディスク10からリードしたリード信号を増幅して、システムコントローラ130(詳細には、後述するリード/ライト(R/W)チャネル40)に出力する。ライトドライバは、R/Wチャネル40から出力される信号に応じたライト電流をヘッド15に出力する。
【0017】
揮発性メモリ70は、電力供給が断たれると保存しているデータが失われる半導体メモリである。揮発性メモリ70は、磁気ディスク装置1の各部での処理に必要なデータ等を格納する。揮発性メモリ70は、例えば、DRAM(Dynamic Random Access Memory)、又はSDRAM(Synchronous Dynamic Random Access Memory)である。
【0018】
不揮発性メモリ80は、電力供給が断たれても保存しているデータを記録する半導体メモリである。不揮発性メモリ80は、例えば、NOR型またはNAND型のフラッシュROM(Flash Read Only Memory :FROM)である。
【0019】
バッファメモリ90は、磁気ディスク装置1とホスト100との間で送受信されるデータ等を一時的に記録する半導体メモリである。なお、バッファメモリ90は、揮発性メモリ70と一体に構成されていてもよい。バッファメモリ90は、例えば、DRAM、SRAM(Static Random Access Memory)、SDRAM、FeRAM(Ferroelectric Random Access memory)、又はMRAM(Magnetoresistive Random Access Memory)等である。
【0020】
システムコントローラ(コントローラ)130は、例えば、複数の素子が単一チップに集積されたSystem-on-a-Chip(SoC)と称される大規模集積回路(LSI)を用いて実現される。システムコントローラ130は、リード/ライト(R/W)チャネル40と、ハードディスクコントローラ(HDC)50と、マイクロプロセッサ又はマイクロプロセッシングユニット(MPU)60と、を含む。システムコントローラ130は、例えば、ドライバIC20、ヘッドアンプIC30、揮発性メモリ70、不揮発性メモリ80、バッファメモリ90、及びホストシステム100等に電気的に接続されている。
【0021】
R/Wチャネル40は、後述するMPU60からの指示に応じて、ディスク10からホスト100に転送されるデータ(以下、リードデータと称する場合もある)とホスト100から転送されるデータ(以下、ライトデータと称する場合もある)との信号処理を実行する。R/Wチャネル40は、ライトデータを変調する回路、又は機能を有している。R/Wチャネル40は、リードデータの信号品質を測定及び復調する回路、又は機能を有している。R/Wチャネル40は、例えば、ヘッドアンプIC30、HDC50、及びMPU60等に電気的に接続されている。
【0022】
HDC50は、データの転送を制御する。例えば、HDC50は、後述するMPU60からの指示に応じて、ホスト100とディスク10との間のデータの転送を制御する。HDC50は、例えば、R/Wチャネル40、MPU60、揮発性メモリ70、不揮発性メモリ80、及びバッファメモリ90等に電気的に接続されている。
【0023】
MPU60は、磁気ディスク装置1の各部を制御するメインコントローラである。MPU60は、ドライバIC20を介してVCM14を制御し、ヘッド15の位置決めを行なうサーボ制御を実行する。MPU60は、ドライバIC20を介してSPM12を制御し、ディスク10を回転させる。MPU60は、ディスク10へのデータのライト動作を制御すると共に、ホスト100から転送されるデータ、例えば、ライトデータの保存先を選択する。MPU60は、ディスク10からのデータのリード動作を制御すると共に、ディスク10からホスト100に転送されるデータ、例えば、リードデータの処理を制御する。また、MPU60は、データを記録する領域を管理する。MPU60は、磁気ディスク装置1の各部に接続されている。MPU60は、例えば、ドライバIC20、R/Wチャネル40、及びHDC50等に電気的に接続されている。
【0024】
MPU60は、リード/ライト制御部610、エラー検出部620、エラー訂正部630、パリティセクタ管理部640、及びオフトラック管理部650等を有している。MPU60は、各部、例えば、リード/ライト制御部610、エラー検出部620、エラー訂正部630、パリティセクタ管理部640、及びオフトラック管理部650等の処理をファームウェア上で実行する。なお、MPU60は、各部、例えば、リード/ライト制御部610、エラー検出部620、エラー訂正部630、パリティセクタ管理部640、及びオフトラック管理部650等を回路として有していてもよい。リード/ライト制御部610、エラー検出部620、エラー訂正部630、パリティセクタ管理部640、及びオフトラック管理部650等は、R/Wチャネル40又はHDC50に含まれていてもよい。
【0025】
リード/ライト制御部610は、ホスト100からのコマンド等に従って、ディスク10からデータをリードするリード処理とディスク10にデータをライトするライト処理とを制御する。リード/ライト制御部610は、ドライバIC20を介してVCM14を制御し、ヘッド15をディスク10の所定の位置に位置決めし、リード処理又はライト処理を実行する。以下、所定の領域にデータを記録若しくはライトすること(ライト処理)、所定の領域からデータを読み出す若しくはリードすること(リード処理)や、所定の領域にヘッド15等を移動させることを含む意味で“アクセス”という用語を用いる場合もある。
【0026】
リード/ライト制御部610は、例えば、所定のトラック(又はシリンダ)又は所定のセクタから半径方向に所定の間隔(ギャップ)を置いてこのトラック(若しくはシリンダ)又はこのセクタに隣接する他のトラック(以下、隣接トラック(若しくは隣接シリンダ)と称する場合もある)又は他のセクタ(以下、隣接セクタと称する場合もある)にデータをライトする通常記録(Conventional Magnetic Recording:CMR)型式でライト処理を実行する。”隣接トラック(又は隣接シリンダ)”は、“所定のトラック(又はシリンダ)の外方向に隣接するトラック(又はシリンダ)”、“所定のトラック(又はシリンダ)の内方向に隣接トラック(又は隣接シリンダ)”、及び“所定のトラック(又はシリンダ)の外方向及び内方向に隣接する複数のトラック(又は複数のシリンダ)”を含む。”隣接セクタ”は、“所定のセクタの外方向に隣接するセクタ”、“所定のセクタの内方向に隣接セクタ”、及び“所定のセクタの外方向及び内方向に隣接する複数のセクタ”を含む。以下、“通常記録型式でデータをライトする“ことを”通常記録する“、”通常記録処理を実行する“、又は単に”ライトする“と称する場合もある。リード/ライト制御部610は、データをランダムにライトするランダムライトし、データをシーケンシャルにライトするシーケンシャルライトする。
【0027】
なお、リード/ライト制御部610は、複数のトラック(若しくは複数のシリンダ)をシーケンシャルにライトする際に1つ前にライトしたトラック(若しくは複数のシリンダ)の半径方向の一部に次にライトするトラック(若しくはシリンダ)を重ね書きする瓦記録(Shingled write Magnetic Recording:SMR、又はShingled Write Recording:SWR)型式でライト処理を実行してもよい。以下、”瓦記録型式でデータをライトする“ことを”瓦記録する“、又は”瓦記録処理を実行する“、又は単に”ライトする“と称する場合もある。
【0028】
エラー検出部620は、エラーが生じているデータ、セクタ、及び領域等を検出する。例えば、エラー検出部620は、リードできないデータ(以下、リードエラーデータ又はエラーデータと称する場合もある)又はリードできないセクタ(以下、リードエラーセクタ又はエラーセクタと称する場合もある)を検出する。エラーデータ及びエラーセクタは、例えば、ディフェクト、ヘッド15のずれ、及び隣接トラック(又は隣接シリンダ)のずれ等に起因して生じ得る。
【0029】
エラー訂正部630は、エラーデータ又はエラーセクタを復旧(訂正、救済、又はエラー訂正)する。エラー訂正部630は、エラーデータ又はエラーセクタを複数回リードするリードリトライを実行する。また、エラー訂正部630は、誤り訂正符号(Error Correction Code)に基づいてエラーデータ又はエラーセクタのエラー(誤り)を訂正する処理(以下、ECC処理又はエラー訂正処理と称する場合もある)を実行する。エラー訂正部630は、所定のトラック(又は所定のシリンダ)のエラーデータ又はエラーセクタに対応するECC(以下、セクタECCと称する場合もある)に基づいて、ECC処理(以下、セクタECC処理と称する場合もある)をこのエラーデータ又はこのエラーセクタに実行する。セクタECC処理は、セクタ単位のエラー訂正又はエラー訂正処理に相当する。
【0030】
エラー訂正部630は、所定のトラック(若しくは所定のシリンダ)又は所定のトラック(若しくは所定のシリンダ)の一部、例えば、所定のトラック(若しくは所定のシリンダ)において円周方向に連続して並ぶ複数のデータ又は複数のセクタに対応するECC(以下、トラックECCと称する場合もある)に基づいて、ECC処理(以下、トラックECC処理と称する場合もある)をこのトラック(若しくは所定のシリンダ)又はこのトラック(若しくは所定のシリンダ)の一部、例えば、このトラックにおいて円周方向に連続して並ぶ複数のデータ又は複数のセクタのエラーデータ又はエラーセクタに実行する。トラックECC処理は、トラック単位のエラー訂正処理又はエラー訂正処理に相当する。ここで、トラック単位とは、物理トラック単位であることに加えて、物理トラック以下の構成される領域単位であることも含んでもよい。例えば、エラー訂正部630は、所定のトラック(若しくは所定のシリンダ)又は所定のトラック(若しくは所定のシリンダ)の一部に対応するパリティデータ、又はパリティセクタに基づいて、このトラック(若しくは所定のシリンダ)又はこのトラック(若しくは所定のシリンダ)の一部のエラーセクタをトラックECC処理する。エラー訂正部630は、例えば、エラーデータ又はエラーセクタに関連する情報(以下、エラーデータ情報又はエラーセクタ情報と称する場合もある)を所定の記録領域、例えば、ディスク10、揮発性メモリ70、又は不揮発性メモリ80に記録する。
【0031】
パリティセクタ管理部640は、排他的論理和(Exclusive OR:XOR)演算してパリティセクタ(又はパリティデータ)を算出し、パリティセクタ(又はパリティデータ)をライトし、このパリティセクタ(又はパリティデータ)を管理する。
【0032】
パリティセクタ管理部640は、所定のトラック(若しくは所定のシリンダ)をライトする場合、このトラック(若しくはこのシリンダ)のパリティセクタ以外の全てのセクタ(又はデータ)にXOR演算してパリティセクタ(又はパリティデータ)を算出し、算出したパリティセクタ(又はパリティデータ)をライト(又は変更)し、このパリティセクタ(又はパリティデータ)を管理する。また、パリティセクタ管理部640は、所定のトラック(若しくは所定のシリンダ)に一部のセクタ(若しくはデータ)をライトする場合、一部のセクタ(若しくはデータ)をライトするトラック(若しくは所定のシリンダ)をリードし、所定の記録領域、例えば、揮発性メモリ70等で一部のセクタ(若しくはデータ)に対応するセクタ(又はデータ)を一部のセクタ(若しくはデータ)に置き換えたトラック(若しくはシリンダ)のパリティセクタ以外の全てのセクタ(又はデータ)にXOR演算してパリティセクタを算出し、一部のセクタ(若しくはデータ)に置き換えたトラック(若しくはシリンダ)のパリティセクタ以外の全てのセクタと算出したパリティセクタ(又はパリティデータ)とを同じトラック(若しくはシリンダ)にライト(又は変更)し、このパリティセクタ(又はパリティデータ)を管理する。以下、“所定のデータ(以下、更新データと称する場合もある)をライトする場合、更新データをライトする少なくとも1つのセクタ若しくはトラック(シリンダ)をリードし、この少なくとも1つのセクタ若しくはこのトラック(シリンダ)における更新データに対応するデータをこの更新データに置き換えたこの少なくとも1つのセクタ若しくはこのトラック(シリンダ)(以下、更新セクタ若しくは更新トラック(更新シリンダ)と称する場合もある)のパリティセクタ以外の全てのセクタ(以下、更新セクタ群と称する場合もある)にXOR演算してパリティセクタ(以下、更新パリティセクタと称する場合もある)を算出し、更新セクタ群と更新パリティセクタとを同じセクタ又はトラックにライトする”ことを“リードモディファイライト”と称する場合もある。以下、説明の便宜上、“パリティセクタ以外のセクタにXOR演算する“ことを”セクタにXOR演算する“と称する場合もある。
【0033】
パリティセクタ管理部640は、所定の領域のデータにXOR演算してパリティセクタを算出し、算出したパリティセクタをディスク10の所定の領域にライトする。パリティセクタ管理部640は、所定のトラック(若しくは所定のシリンダ)の全てのセクタにXOR演算してパリティセクタを算出し、算出したパリティセクタをこのトラック(若しくはこのシリンダ)にライトする。なお、パリティセクタ管理部640は、所定のトラック(若しくは所定のシリンダ)の一部のセクタにXOR演算してパリティセクタを算出し、算出したパリティセクタをこのトラック(若しくはこのシリンダ)にライトしてもよい。例えば、パリティセクタ管理部640は、所定のトラック(若しくは所定のシリンダ)においてディフェクト等が生じたために無効なセクタとして設定又は登録するセクタ(以下、ディフェクト登録セクタと称する場合もある)以外の全てのセクタ(以下、有効セクタと称する場合もある)にXOR演算してパリティセクタを算出し、算出したパリティセクタをこのトラック(若しくはこのシリンダ)にライトしてもよい。ディフェクト登録セクタは、データの記録等で使用しないセクタ、例えば、エラーセクタに相当する。有効セクタは、データの記録等で使用するセクタに相当する。以下、説明の便宜上、“ディフェクト登録セクタ以外の有効セクタにXOR演算する”ことを“セクタにXOR演算する”と称する場合もある。
【0034】
パリティセクタ管理部640は、各トラック又は各トラックの一部に対応する各パリティセクタがエラー訂正、例えば、トラックECC処理で使用できる有効なパリティセクタ(以下、有効パリティセクタと称する場合もある)であるか、エラー訂正、例えば、トラックECC処理で使用できない無効なパリティセクタ(以下、無効パリティセクタと称する場合もある)であるかを管理する。
【0035】
パリティセクタ管理部640は、所定のトラックの全ての有効セクタにXOR演算したパリティセクタを有効パリティセクタとして管理する。パリティセクタ管理部640は、このトラックのパリティセクタを有効パリティセクタとして所定の記録領域、例えば、ディスク10(のシステムエリア10b)、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90にテーブル(以下、管理テーブルと称する場合もある)TB1として記録する。パリティセクタ管理部640は、有効パリティセクタに基づいてトラックECC処理を実行できる(又は訂正できる)トラック又はシリンダ(以下、訂正可能トラック又は訂正可能シリンダと称する場合もある)を所定の記録領域、例えば、ディスク10(のシステムエリア10b)、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に管理テーブルTB1として記録する。
【0036】
パリティセクタ管理部640は、所定のトラックにおいてパリティセクタから円周方向に連続して並ぶ少なくとも1つのセクタ、例えば、有効セクタ(以下、後部セクタと称する場合もある)をライトして(又は、上書きして)全ての後部セクタ、例えば、有効セクタにXOR演算したパリティセクタを有効パリティセクタとして管理する。パリティセクタ管理部640は、このトラックのパリティセクタを有効パリティセクタとして所定の記録領域、例えば、ディスク10(のシステムエリア10b)、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に管理テーブルTB1として記録する。パリティセクタ管理部640は、所定のトラックにおける有効パリティセクタに基づいてトラックECC処理を実行できる(又は訂正できる)後部セクタを所定の記録領域、例えば、ディスク10(のシステムエリア10b)、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に管理テーブルTB1として記録する。また、パリティセクタ管理部640は、所定のトラックに有効パリティセクタに基づいてトラックECC処理を実行できる(又は訂正できる)後部セクタを含む場合、トラックECC処理を実行できない(又は訂正できない)後部セクタ以外のセクタ(以下、前部セクタと称する場合もある)を所定の記録領域、例えば、ディスク10(のシステムエリア10b)、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に管理テーブルTB1として記録する。
【0037】
パリティセクタ管理部640は、前部セクタ、例えば、有効セクタ(以下、前部セクタと称する場合もある)をライトした(上書きした)トラックのパリティセクタが前部セクタをライトする前のトラックの全てのセクタにXOR演算した結果に相当するパリティセクタ(以下、前のパリティセクタと称する場合もある)である場合、このパリティセクタを無効パリティセクタとして管理する。パリティセクタ管理部640は、このトラックのパリティセクタを無効パリティセクタとして所定の記録領域、例えば、ディスク10(のシステムエリア10b)、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に管理テーブルTB1として記録する。パリティセクタ管理部640は、トラックECC処理を実行できない(又は訂正できない)トラック又はシリンダ(以下、訂正不可能トラック又は訂正不可能シリンダと称する場合もある)を所定の記録領域、例えば、ディスク10(のシステムエリア10b)、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に管理テーブルTB1として記録する。
【0038】
以下、“トラックECC処理を実行できる少なくとも1つのセクタ”を“訂正可能セクタ又はロジカルトラック(Logical Track)”と称する場合もある。また、”トラックECCを実行できない(又は訂正できない)少なくとも1つのセクタ“を”訂正不可能セクタ“と称する場合もある。“訂正可能トラック、訂正可能シリンダ、及び訂正可能セクタ等のトラックECCを実行できる(又は訂正できる)領域“をまとめて”訂正可能領域“と称し、”訂正不可能トラック、訂正不可能シリンダ、及び訂正不可能セクタ等のトラックECC処理を実行できない領域“をまとめて”訂正不可能領域“と称する場合もある。
【0039】
パリティセクタ管理部640は、ディスク10の訂正可能領域及び訂正不可能領域を管理テーブルTB1で管理する。例えば、パリティセクタ管理部640は、管理テーブルTB1においてトラック0、トラック1、トラック2、トラック3、トラック4、トラック5、トラック6、及びトラック7までの訂正可能領域及び訂正不可能領域を16進数で3Eh(2進数:00111110)と示されている場合、トラック2乃至6を訂正可能領域であると判定する。この場合、管理テーブルTB1において、1トラック毎に1ビットの情報で示され、“1”は、訂正可能領域であることを示し、“0”は、訂正不可能領域であることを示している。パリティセクタ管理部640は、リード/ライト制御部610を介してライト処理を実行するライト時、及びリード/ライト制御部610を介してリード処理を実行するリード時に管理テーブルTB1を参照する。
【0040】
パリティセクタ管理部640は、例えば、ホスト100等からトラック単位のエラー訂正が訂正不可能となるライト、例えば、1トラックの途中までのシーケンシャルライト、又はランダムライトを実行するコマンドを受ける度に、訂正可能領域、及び訂正不可能領域を管理する。パリティセクタ管理部640は、ランダムライトを実行する度に、訂正可能領域と訂正不可能領域とを更新又は変更する。パリティセクタ管理部640は、訂正可能領域の一部にランダムライトした場合、この訂正可能領域を訂正不可能領域に変更する。例えば、パリティセクタ管理部640は、訂正可能トラックの一部にランダムライトした場合、この訂正可能トラックを訂正不可能トラックに変更する。言い換えると、パリティセクタ管理部640は、訂正可能トラックに1トラック分未満のデータをランダムライトした場合、この訂正可能トラックを訂正不可能トラックに変更する。
【0041】
パリティセクタ管理部640は、訂正可能領域から訂正不可能領域に変更した場合にリードエラーを生じる領域(以下、ランダムライト禁止領域と称する場合もある)をテーブル(以下、ランダムライト禁止テーブルと称する場合もある)TB2で管理する。言い換えると、パリティセクタ管理部640は、ランダムライト禁止領域を管理するためのランダムライト禁止テーブルTB2を有する。
【0042】
例えば、パリティセクタ管理部640は、訂正可能トラックから訂正不可能トラックに変更した場合にリードエラーを生じるトラック(以下、ランダムライト禁止トラックと称する場合もある)をランダムライト禁止テーブルTB2で管理する。言い換えると、パリティセクタ管理部640は、ランダムライト禁止トラックを管理するためのランダムライト禁止テーブルTB2を有する。
【0043】
例えば、パリティセクタ管理部640は、訂正可能セクタから訂正不可能セクタに変更した場合にリードエラーを生じる少なくとも1つのセクタ(以下、ランダムライト禁止セクタと称する場合もある)をランダムライト禁止テーブルTB2で管理する。言い換えると、パリティセクタ管理部640は、ランダムライト禁止セクタを管理するためのランダムライト禁止テーブルTB2を有する。
【0044】
オフトラック管理部650は、ディスク10の対象とする領域(以下、対象領域と称する場合もある)の領域目標位置、例えば、所定の領域の中心から半径方向へのずれ量の上限値であるDOL(Drift of level) (又はWOS(Write off track Slice))を管理する。オフトラック管理部650は、ディスク10の対象とするトラック(以下、対象トラックと称する場合もある)のトラック目標位置、例えば、トラックセンタからの半径方向へのずれ量(以下、オフトラック量と称する場合もある)の上限値であるDOL(又はWOS)を管理する。オフトラック管理部650は、複数のDOLを有している。
【0045】
オフトラック管理部650は、複数の領域に対する複数のDOLをそれぞれ設定する。言い換えると、オフトラック管理部650は、複数の領域に向かう方向に対する複数のDOLをそれぞれ設定する。オフトラック管理部650は、複数のトラックに対する複数のDOLをそれぞれ設定する。言い換えると、オフトラック管理部650は、複数のトラックに向かう方向に対する複数のDOLをそれぞれ設定する。オフトラック管理部650は、複数のセクタに対する複数のDOLをそれぞれ設定する。言い換えると、オフトラック管理部650は、複数のセクタに向かう方向に対する複数のDOLをそれぞれ設定する。
【0046】
オフトラック管理部650は、所定の領域(所定の領域に向かう方向)に対する複数のDOLを設定する。オフトラック管理部650は、所定の領域を区分した複数の領域(所定の領域を区分した複数の領域に向かう方向)に対する複数のDOLをそれぞれ設定する。例えば、オフトラック管理部650は、所定のトラック(所定のトラックに向かう方向)に対する複数のDOLを設定する。オフトラック管理部650は、所定のトラックを区分した複数の領域(所定のトラックを区分した複数の領域に向かう方向)に対する複数のDOLをそれぞれ設定する。
【0047】
オフトラック管理部650は、対象とする領域(以下、対象領域と称する場合もある)の半径方向に位置する領域(以下、半径領域と称する場合もある)が訂正可能領域(以下、訂正可能半径領域と称する場合もある)であるか訂正不可能領域(以下、訂正不可能半径領域と称する場合もある)であるかに応じて、対象領域のこの半径領域(この半径領域に向かう方向)に対するDOLを異なるDOLに設定する。言い換えると、オフトラック管理部650は、対象領域において、訂正可能半径領域に対するDOLと訂正不可能半径領域に対するDOLとで異なる値を設定する。
【0048】
訂正可能半径領域は、対象領域にデータをライトした場合に訂正不可能半径領域よりもリードできないエラーであるアンリカバブルエラーの発生率を低くすることができる。そのため、訂正可能半径領域に対する対象領域の半径方向の領域目標位置、例えば、対象領域の半径方向の中心からの距離又は接近量(以下、スクイーズ(squeeze))は、訂正不可能半径領域に対するスクイーズよりも大きくできる。言い換えると、訂正可能半径領域に対するスクイーズマージン(squeeze margin)は、訂正不可能半径領域に対するスクイーズマージンよりも大きくできる。
【0049】
オフトラック管理部650は、対象領域の半径領域が訂正可能半径領域であると判定した場合、対象領域のこの半径領域(この半径領域に向かう方向)に対するDOLを所定のDOL(以下、高DOLと称する場合もある)に設定する。オフトラック管理部650は、対象領域の半径領域が訂正不可能半径領域であると判定した場合、対象領域のこの半径領域(この半径領域に向かう方向)に対するDOLを高DOL(の絶対値)よりも小さい(絶対値の)DOL(以下、低DOLと称する場合もある)に設定する。高DOLは、低DOLよりも大きい。
【0050】
オフトラック管理部650は、対象領域の半径方向に隣接する領域(以下、隣接領域と称する場合もある)が訂正可能領域(以下、訂正可能隣接領域と称する場合もある)であるか訂正不可能領域(以下、訂正不可能隣接領域と称する場合もある)であるかに応じて、対象領域のこの隣接領域(この隣接領域に向かう方向)に対するDOLを異なるDOLに設定する。言い換えると、オフトラック管理部650は、対象領域において、訂正可能隣接領域に対するDOLと訂正不可能隣接領域に対するDOLとで異なる値を設定する。
【0051】
訂正可能隣接領域は、対象領域にデータをライトした場合に訂正不可能隣接領域よりもアンリカバブルエラーの発生率を低くすることができる。そのため、訂正可能隣接領域に対するスクイーズは、訂正不可能隣接領域に対するスクイーズよりも大きくできる。言い換えると、訂正可能隣接領域に対するスクイーズマージンは、訂正不可能隣接領域に対するスクイーズマージンよりも大きくできる。
【0052】
オフトラック管理部650は、対象領域の隣接領域が訂正可能隣接領域であると判定した場合、対象領域のこの隣接領域(この隣接領域に向かう方向)に対するDOLを高DOLに設定する。オフトラック管理部650は、対象領域の隣接領域が訂正不可能隣接領域であると判定した場合、対象領域のこの隣接領域(この隣接領域に向かう方向)に対するDOLを低DOLに設定する。
【0053】
オフトラック管理部650は、対象とするトラック(以下、対象トラックと称する場合もある)の半径方向に位置するトラック(以下、半径トラックと称する場合もある)が訂正可能トラック(以下、訂正可能半径トラックと称する場合もある)であるか訂正不可能トラック(以下、訂正不可能半径トラックと称する場合もある)であるかに応じて、対象トラックのこの半径トラックに対するDOLを異なるDOLに設定する。言い換えると、オフトラック管理部650は、対象領域において、訂正可能半径トラックに対するDOLと訂正不可能半径トラックに対するDOLとで異なる値を設定する。
【0054】
訂正可能半径トラックは、対象領域にデータをライトした場合に訂正不可能半径トラックよりもアンリカバブルエラーの発生率を低くすることができる。そのため、訂正可能半径トラックに対するスクイーズは、訂正不可能半径トラックに対するスクイーズよりも大きくできる。言い換えると、訂正可能半径トラックに対するスクイーズマージンは、訂正不可能半径トラックに対するスクイーズマージンよりも大きくできる。
【0055】
オフトラック管理部650は、対象トラックの半径トラックが訂正可能半径トラックであると判定した場合、対象トラックのこの半径トラック(この半径トラックに向かう方向)に対するDOLを高DOLに設定する。オフトラック管理部650は、対象トラックの半径トラックが訂正不可能半径トラックであると判定した場合、対象トラックのこの半径トラック(この半径トラックに向かう方向)に対するDOLを低DOLに設定する。
【0056】
オフトラック管理部650は、対象トラックの半径方向に隣接するトラック(以下、隣接トラックと称する場合もある)が訂正可能トラック(以下、訂正可能隣接トラックと称する場合もある)であるか訂正不可能トラック(以下、訂正不可能隣接トラックと称する場合もある)であるかに応じて、対象トラックのこの隣接トラック(この隣接トラックに向かう方向)に対するDOLを設定する。言い換えると、オフトラック管理部650は、対象領域において、訂正可能隣接トラックに対するDOLと訂正不可能隣接トラックに対するDOLとで異なる値を設定する。
【0057】
訂正可能隣接トラックは、対象領域にデータをライトした場合に訂正不可能隣接トラックよりもアンリカバブルエラーの発生率を低くすることができる。そのため、訂正可能隣接トラックに対するスクイーズは、訂正不可能隣接トラックに対するスクイーズよりも大きくできる。言い換えると、訂正可能隣接トラックに対するスクイーズマージンは、訂正不可能隣接トラックに対するスクイーズマージンよりも大きくできる。
【0058】
オフトラック管理部650は、対象トラックの隣接トラックが訂正可能隣接トラックであると判定した場合、対象トラックのこの隣接トラック(この隣接トラックに向かう方向)に対するDOLを高DOLに設定する。オフトラック管理部650は、対象トラックの隣接トラックが訂正不可能隣接トラックであると判定した場合、対象トラックのこの隣接トラック(この隣接トラックに向かう方向)に対するDOLを低DOLに設定する。
【0059】
オフトラック管理部650は、対象トラックの対象とする少なくとも1つのセクタ(以下、対象セクタと称する場合もある)の半径方向に位置し、且つ円周方向に並ぶ少なくとも1つのセクタ(以下、半径セクタと称する場合もある)が訂正可能セクタ(以下、訂正可能半径セクタと称する場合もある)であるか訂正不可能セクタ(以下、訂正可能半径セクタと称する場合もある)であるかに応じて、対象セクタのこの半径セクタ(この半径セクタに向かう方向)に対するDOLを異なるDOLに設定する。言い換えると、オフトラック管理部650は、対象領域において、訂正可能半径セクタに対するDOLと訂正不可能半径セクタに対するDOLとで異なる値を設定する。
【0060】
訂正可能半径セクタは、対象領域にデータをライトした場合に訂正不可能半径セクタよりもアンリカバブルエラーの発生率を低くすることができる。そのため、訂正可能半径セクタに対するスクイーズは、訂正不可能半径セクタに対するスクイーズよりも大きくできる。言い換えると、訂正可能半径セクタに対するスクイーズマージンは、訂正不可能半径セクタに対するスクイーズマージンよりも大きくできる。
【0061】
オフトラック管理部650は、対象セクタの半径セクタが訂正可能半径セクタであると判定した場合、対象セクタのこの半径セクタ(この半径セクタに向かう方向)に対するDOLを高DOLに設定する。オフトラック管理部650は、対象トラックの半径セクタが訂正不可能半径セクタであると判定した場合、対象セクタのこの半径セクタ(この半径セクタに向かう方向)に対するDOLを低DOLに設定する。
【0062】
オフトラック管理部650は、対象セクタの半径方向に隣接し、且つ円周方向に並ぶ少なくとも1つのセクタ(以下、隣接セクタと称する場合もある)が訂正可能セクタ(以下、訂正可能隣接セクタと称する場合もある)であるか訂正不可能セクタ(以下、訂正不可能隣接セクタと称する場合もある)であるかに応じて、対象セクタのこの隣接セクタ(この隣接セクタに向かう方向)に対するDOLを設定する。言い換えると、オフトラック管理部650は、対象領域において、訂正可能隣接セクタに対するDOLと訂正不可能隣接セクタに対するDOLとで異なる値を設定する。
【0063】
訂正可能隣接セクタは、対象領域にデータをライトした場合に訂正不可能隣接セクタよりもアンリカバブルエラーの発生率を低くすることができる。そのため、訂正可能隣接セクタに対するスクイーズは、訂正不可能隣接セクタに対するスクイーズよりも大きくできる。言い換えると、訂正可能隣接セクタに対するスクイーズマージンは、訂正不可能隣接セクタに対するスクイーズマージンよりも大きくできる。
【0064】
オフトラック管理部650は、対象セクタの隣接セクタが訂正可能隣接セクタであると判定した場合、対象セクタのこの隣接セクタ(この隣接セクタに向かう方向)に対するDOLを高DOLに設定する。オフトラック管理部650は、対象トラックの隣接セクタが訂正不可能隣接セクタであると判定した場合、対象セクタのこの隣接セクタ(この隣接セクタに向かう方向)に対するDOLを低DOLに設定する。
【0065】
オフトラック管理部650は、半径トラック、例えば、隣接トラックにトラックECCを実行しなければリードできないエラーが生じるこの半径トラック(半径トラックに向かう方向)、例えば、この隣接トラック(隣接トラックに向かう方向)に対するオフトラック量の閾値(以下、アンリカバブル閾値と称する場合もある)を管理する。アンリカバブル閾値は、DOLよりも大きい。オフトラック管理部650は、複数のアンリカバブル閾値を有している。
【0066】
オフトラック管理部650は、複数のDOL(複数のDOLに向かう方向)に対応する複数のアンリカバブル閾値をそれぞれ設定する。オフトラック管理部650は、異なるDOLに対して異なるアンリカバブル閾値を設定する。
【0067】
オフトラック管理部650は、対象トラックにおいて高DOLを設定した半径トラック(半径トラックに向かう方向)、例えば、隣接トラック(隣接トラックに向かう方向)に対する高DOLよりも小さく、且つ低DOLよりも大きいアンリカバブル閾値(以下、低アンリカバブル閾値と称する場合もある)を設定する。低アンリカバブル閾値は、低DOLを設定した半径トラック又は半径セクタ、例えば、低DOLを設定した隣接トラック又は隣接セクタのアンリカバブル閾値に対応している。なお、高DOLを設定した半径トラック又は半径セクタ、例えば、高DOLを設定した隣接トラック又は隣接セクタのアンリカバブル閾値を高アンリカバブル閾値と称する場合もある。高アンリカバブル閾値は、高DOLよりも大きい。
【0068】
オフトラック管理部650は、対象セクタにおいて高DOLを設定した半径セクタ(半径セクタに向かう方向)、例えば、隣接セクタ(隣接セクタに向かう方向)に対する低アンリカバブル閾値を設定する。
【0069】
オフトラック管理部650は、対象トラックにおいて所定の半径トラック(所定の半径トラックに向かう方向)、例えば、所定の隣接トラック(所定の隣接トラックに向かう方向)に対するオフトラック量(又はスクイーズ)がこの半径トラック(この半径トラックに向かう方向)、例えば、この隣接トラック(この隣接トラックに向かう方向)に対応する低アンリカバブル閾値よりも大きいと判定した場合、この半径トラックにライト処理を許可しない。例えば、オフトラック管理部650は、対象トラックにおいて訂正可能隣接トラック(訂正可能隣接トラックに向かう方向)に対するオフトラック量(又はスクイーズ)がこの訂正可能隣接トラック(この訂正可能隣接トラックに向かう方向)に対応する低アンリカバブル閾値よりも大きいと判定した場合、この訂正可能隣接トラックの一部へのトラック単位のエラー訂正が訂正不可能となるライト、例えば、1トラックの途中までのシーケンシャルライト、又はランダムライトを許可しない。言い換えると、オフトラック管理部650は、対象トラックにおいて訂正可能隣接トラック(訂正可能隣接トラックに向かう方向)に対するオフトラック量(又はスクイーズ)がこの訂正可能隣接トラック(この訂正可能隣接トラックに向かう方向)に対応する低アンリカバブル閾値よりも大きいと判定した場合、この訂正可能隣接トラックに1トラック分未満のデータのランダムライトを許可しない。
【0070】
オフトラック管理部650は、対象トラックにおいて所定の半径トラック(所定の半径トラックに向かう方向)、例えば、所定の隣接トラック(所定の隣接トラックに向かう方向)に対するオフトラック量(又はスクイーズ)がこの半径トラック(この半径トラックに向かう方向)、例えば、この隣接トラック(この隣接トラックに向かう方向)に対応する低アンリカバブル閾値よりも大きいと判定した場合、この半径トラックをランダムライト禁止テーブルTB2で管理してもよい。例えば、オフトラック管理部650は、対象トラックにおいて訂正可能隣接トラック(訂正可能隣接トラックに向かう方向)に対するオフトラック量(又はスクイーズ)がこの訂正可能隣接トラック(この訂正可能隣接トラックに向かう方向)に対応する低アンリカバブル閾値よりも大きいと判定した場合、この訂正可能隣接トラックをランダムライト禁止テーブルTB2で管理してもよい。
【0071】
オフトラック管理部650は、対象トラックにおいて所定の半径トラック(所定の半径トラックに向かう方向)、例えば、所定の隣接トラック(所定の隣接トラックに向かう方向)に対するオフトラック量(又はスクイーズ)がこの隣接トラック(この隣接トラックに向かう方向)に対応する低アンリカバブル閾値よりも大きいと判定した場合、この半径トラック、例えば、この隣接トラックにリードモディファイライトを実行してもよい。例えば、オフトラック管理部650は、対象トラックにおいて訂正可能隣接トラック(訂正可能隣接トラックに向かう方向)に対するオフトラック量(又はスクイーズ)がこの訂正可能隣接トラック(この訂正可能隣接トラックに向かう方向)に対応する低アンリカバブル閾値よりも大きいと判定した場合、この訂正可能半径トラック、例えば、この訂正可能隣接トラックにリードモディファイライトを実行してもよい。
【0072】
オフトラック管理部650は、対象セクタにおいて所定の半径セクタ(所定の半径セクタに向かう方向)、例えば、所定の隣接セクタ(所定の隣接セクタに向かう方向)に対するオフトラック量(又はスクイーズ)がこの半径セクタ(この半径セクタに向かう方向)、例えば、この隣接セクタ(この隣接セクタに向かう方向)に対応する低アンリカバブル閾値よりも大きいと判定した場合、この半径セクタにライト処理を許可しない。例えば、オフトラック管理部650は、対象セクタにおいて訂正可能隣接セクタ(訂正可能隣接セクタに向かう方向)に対するオフトラック量(又はスクイーズ)がこの訂正可能隣接セクタ(この訂正可能隣接セクタに向かう方向)に対応する低アンリカバブル閾値よりも大きいと判定した場合、この訂正可能隣接セクタの一部へのトラック単位のエラー訂正が訂正不可能となるライト、例えば、1トラックの途中までのシーケンシャルライト、又はランダムライトを許可しない。言い換えると、オフトラック管理部650は、対象セクタにおいて訂正可能隣接セクタ(訂正可能隣接セクタに向かう方向)に対するオフトラック量(又はスクイーズ)がこの訂正可能隣接セクタ(この訂正可能隣接セクタに向かう方向)に対応する低アンリカバブル閾値よりも大きいと判定した場合、この訂正可能隣接セクタにこの訂正可能隣接セクタの全領域にライト可能なデータ量未満のデータのランダムライトを許可しない。
【0073】
オフトラック管理部650は、対象セクタにおいて所定の半径セクタ(所定の半径セクタに向かう方向)、例えば、所定の隣接セクタ(所定の隣接セクタに向かう方向)に対するオフトラック量(又はスクイーズ)がこの半径セクタ(この半径セクタに向かう方向)、例えば、この隣接セクタ(この隣接セクタに向かう方向)に対応する低アンリカバブル閾値よりも大きいと判定した場合、この半径セクタをランダムライト禁止テーブルTB2で管理してもよい。例えば、オフトラック管理部650は、対象セクタにおいて訂正可能隣接セクタ(訂正可能隣接セクタに向かう方向)に対するオフトラック量(又はスクイーズ)がこの訂正可能隣接セクタ(この訂正可能隣接セクタに向かう方向)に対応する低アンリカバブル閾値よりも大きいと判定した場合、この訂正可能隣接セクタをランダムライト禁止テーブルTB2で管理してもよい。
【0074】
オフトラック管理部650は、対象セクタにおいて所定の半径セクタ(所定の半径セクタに向かう方向)、例えば、所定の隣接セクタ(所定の隣接セクタに向かう方向)に対するオフトラック量(又はスクイーズ)がこの半径セクタ(この半径セクタに向かう方向)、例えば、この隣接セクタ(この隣接セクタに向かう方向)に対応する低アンリカバブル閾値よりも大きいと判定した場合、この半径セクタ、例えば、この隣接セクタにリードモディファイライトを実行してもよい。例えば、オフトラック管理部650は、対象セクタにおいて訂正可能隣接セクタ(訂正可能隣接セクタに向かう方向)に対するオフトラック量(又はスクイーズ)がこの訂正可能隣接セクタ(この訂正可能隣接セクタに向かう方向)に対応する低アンリカバブル閾値よりも大きいと判定した場合、この訂正可能半径セクタ、例えば、この訂正可能隣接セクタにリードモディファイライトを実行してもよい。
【0075】
図3は、トラックECC処理の一例を示す模式図である。
図3には、円周方向(円周位置)において、ディスク10に対してヘッド15が進む方向、つまり、リード/ライトする方向(以下、進行方向と称する場合もある)を示している。
図3では、進行方向は、後方向(又は、単に、後と称する場合もある)である。なお、進行方向は、前方向(又は、単に、前と称する場合もある)であってもよい。
図3には、トラックTRn-1、トラックTRn、及びトラックTRn+1を示している。
図3において、トラックTRn-1乃至TRn+1は、外方向から内方向に記載の順に並んでいる。トラックTRnは、トラックTRn―1の外方向に隣接し、トラックTRn+1は、トラックTRnの外方向に隣接している。トラックTRn―1は、セクタSc(n―1)0、Sc(n―1)1、Sc(n―1)2、Sc(n―1)3、Sc(n―1)4、Sc(n―1)5、Sc(n―1)6、Sc(n―1)7、Sc(n―1)8、Sc(nー1)9、Sc(n―1)10、Sc(n―1)11、及びパリティセクタPn―1を有している。セクタSc(n―1)0、Sc(n―1)1、Sc(n―1)2、Sc(n―1)3、Sc(n―1)4、Sc(n―1)5、Sc(n―1)6、Sc(n―1)7、Sc(n―1)8、Sc(nー1)9、Sc(n―1)10、Sc(n―1)11、及びパリティセクタPn―1は、進行方向に記載の順に連続してライトされている。パリティセクタPn―1は、セクタSc(n―1)0乃至Sc(n―1)11にXOR演算した結果に相当する。つまり、パリティセクタPn―1は、有効パリティセクタである。トラックTRn―1は、訂正可能トラックに相当する。トラックTRnは、セクタScn0、Scn1、Scn2、Scn3、Scn4、Scn5、Scn6、Scn7、Scn8、Scn9、Scn10、Scn11、及びパリティセクタPnを有している。セクタScn0、Scn1、Scn2、Scn3、Scn4、Scn5、Scn6、Scn7、Scn8、Scn9、Scn10、Scn11、及びパリティセクタPnは、進行方向に記載の順に連続してライトされている。パリティセクタPnは、セクタScn0乃至Scn11にXOR演算した結果に相当する。つまり、パリティセクタPnは、有効パリティセクタである。トラックTRnは、訂正可能トラックに相当する。トラックTRn+1は、セクタSc(n+1)0、Sc(n+1)1、Sc(n+1)2、Sc(n+1)3、Sc(n+1)4、Sc(n+1)5、Sc(n+1)6、Sc(n+1)7、Sc(n+1)8、Sc(n+1)9、Sc(n+1)10、Sc(n+1)11、及びパリティセクタPn+1を有している。セクタSc(n+1)0、Sc(n+1)1、Sc(n+1)2、Sc(n+1)3、Sc(n+1)4、Sc(n+1)5、Sc(n+1)6、Sc(n+1)7、Sc(n+1)8、Sc(n+1)9、Sc(n+1)10、Sc(n+1)11、及びパリティセクタPn+1は、進行方向に記載の順に連続してライトされている。パリティセクタPn+1は、セクタSc(n+1)0乃至Sc(n+1)11にXOR演算した結果に相当する。つまり、パリティセクタPn+1は、有効パリティセクタである。トラックTRn+1は、訂正可能トラックに相当する。
【0076】
図3に示した例では、MPU60は、トラックTRnのセクタScn0乃至Scn11内にエラーセクタを検出した場合、このエラーセクタをリードリトライ及びセクタECC処理で訂正できない際に、パリティセクタPnに基づいてトラックECC処理をこのエラーセクタに実行し、このエラーセクタを訂正する。
【0077】
図4は、トラックECC処理の一例を示す模式図である。
図4は、
図3に対応している。
図4に示した例では、MPU60は、トラックTRnのセクタScn5、Scn6、及びScn7をランダムに上書きする。MPU60は、トラックTRnを訂正不可能トラックとして所定の記録領域、例えば、ディスク10(のシステムエリア10b)、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に管理テーブルTB1として記録する。MPU60は、トラックTRnのセクタScn0乃至Scn11内にエラーセクタを検出した場合、このエラーセクタをリードリトライ及びセクタECC処理で訂正できない際に、このトラックTRnのエラーセクタにトラックECC処理を実行できない。
【0078】
図4に示した例では、MPU60は、トラックTRn―1においてトラックTRn(トラックTRnに向かう方向)に対するDOL(内方向のDOL)を低DOLに設定する。言い換えると、MPU60は、トラックTRn―1においてトラックTRn(トラックTRnに向かう方向)に対するDOL(内方向のDOL)を高DOLから低DOLに変更する。
【0079】
図4に示した例では、MPU60は、トラックTRn+1においてトラックTRn(トラックTRnに向かう方向)に対するDOL(外方向のDOL)を低DOLに設定する。言い換えると、MPU60は、トラックTRn+1においてトラックTRn(トラックTRnに向かう方向)に対するDOL(外方向のDOL)を高DOLから低DOLに変更する。
【0080】
図5は、トラックECC処理の一例を示す模式図である。
図5は、
図3に対応している。
図5に示した例では、MPU60は、トラックTRnの後部セクタScn8、Scn9、Scn10、及びScn11を上書きする。MPU60は、後部セクタScn8乃至Scn11にXOR演算してパリティセクタPnを上書きする。MPU60は、後部セクタScn8乃至Scn11を訂正可能セクタとして所定の記録領域、例えば、ディスク10(のシステムエリア10b)、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に管理テーブルTB1として記録する。MPU60は、前部セクタScn0乃至Scn7を訂正不可能セクタとして所定の記録領域、例えば、ディスク10(のシステムエリア10b)、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に管理テーブルTB1として記録する。MPU60は、トラックTRnの後部セクタScn8乃至Scn11内にエラーセクタを検出した場合、このエラーセクタをリードリトライ及びセクタECC処理で訂正できない際に、パリティセクタPnに基づいてトラックECC処理をこのエラーセクタに実行し、このエラーセクタを訂正する。MPU60は、トラックTRnの前部セクタScn0乃至Scn7内にエラーセクタを検出した場合、このエラーセクタをリードリトライ及びセクタECC処理で訂正できない際に、トラックECC処理をこのトラックTRnのエラーセクタに実行できない。
【0081】
図5に示した例では、MPU60は、トラックTRn―1の前部セクタSc(n―1)0乃至Sc(n―1)7においてトラックTRnの前部セクタScn0乃至Scn7(前部セクタScn0乃至Scn7に向かう方向)に対するDOL(内方向のDOL)を低DOLに設定する。言い換えると、MPU60は、トラックTRn―1の前部セクタSc(n―1)0乃至Sc(n―1)7においてトラックTRnの前部セクタScn0乃至Scn7(前部セクタScn0乃至Scn7に向かう方向)に対するDOL(内方向のDOL)を高DOLから低DOLに変更する。
【0082】
図5に示した例では、MPU60は、トラックTRn+1の前部セクタSc(n+1)0乃至Sc(n+1)7においてトラックTRnの前部セクタScn0乃至Scn7(前部セクタScn0乃至Scn7に向かう方向)に対するDOL(外方向のDOL)を低DOLに設定する。言い換えると、MPU60は、トラックTRn―1の前部セクタSc(n+1)0乃至Sc(n+1)7においてトラックTRnの前部セクタScn0乃至Scn7(前部セクタScn0乃至Scn7に向かう方向)に対するDOL(外方向のDOL)を高DOLから低DOLに変更する。
【0083】
図6は、本実施形態に係る低DOL D1及び高DOL D2と低アンリカバブル閾値UTH1との一例を示す模式図である。
図6において、横軸は、スクイーズ(又はオフトラック量)を示し、縦軸は、アンリカバブルエラーレート(Unrecoverable Error Rate)を示している。
図6の縦軸において、アンリカバブルエラーレートは、矢印の先端の方向に向かうに従って大きくなり、矢印の先端と反対側に向かうに従って小さくなる。
図6の横軸において、スクイーズは、矢印の先端の方向に向かうに従って大きくなり、矢印の先端と反対側に向かうに従って小さくなる。
図6の横軸には、低DOL D1と、高DOL D2と、アンリカバブル閾値UTH1と、を示している。
図6の横軸において、高DOL D2は、低DOL D1よりも大きい。低アンリカバブル閾値UTH1は、低DOL D1に対応している。低アンリカバブル閾値UTH1は、低DOL D1よいも大きく、且つ高DOL D2よりも小さい。
図6には、訂正不可能隣接領域(訂正不可能隣接トラック、及び訂正不可能隣接セクタ等)に対応するスクイーズに対するアンリカバブルエラーレートの変化(以下、訂正不可能隣接領域に対応するアンリカバブルエラーレートの変化と称する場合もある)ERL1と、訂正可能隣接領域(訂正可能隣接トラック、及び訂正可能隣接セクタ等)に対応するスクイーズに対するアンリカバブルエラーレートの変化(以下、訂正可能隣接領域に対応するアンリカバブルエラーレートの変化と称する場合もある)ERL2と、を示している。
図6において、訂正不可能隣接領域に対応するアンリカバブルエラーレートの変化ERL1と訂正可能隣接領域に対応するアンリカバブルエラーレートの変化ERL2とに示すように、訂正可能領域では、訂正不可能領域よりも小さいスクイーズでアンリカバブルエラーレートが大きくなる。
【0084】
図6に示した例では、MPU60は、対象トラック若しくは対象セクタにおいて、訂正不可能隣接トラック若しくは訂正不可能隣接セクタ(訂正不可能隣接トラック若しくは訂正不可能隣接セクタに向かう方向)に対するDOLを低DOL D1に設定し、訂正可能隣接トラック若しくは訂正可能隣接セクタ(訂正可能隣接トラック若しくは訂正可能隣接セクタに向かう方向)に対するDOLを高DOL D2に設定する。MPU60は、対象トラックにおいて、訂正可能隣接トラック若しくは訂正可能隣接セクタ(訂正可能隣接トラック若しくは訂正可能隣接セクタに向かう方向)に対する低アンリカバブル閾値UTH1を設定する。MPU60は、対象トラックにおいて、訂正可能隣接トラック若しくは訂正可能隣接セクタ(訂正可能隣接トラック若しくは訂正可能隣接セクタに向かう方向)に対するオフトラック量(又はスクイーズ)が低アンリカバブル閾値よりも大きいと判定した場合、この訂正可能隣接トラック若しくはこの訂正可能隣接セクタにリードモディファイライトを実行してもよい。
【0085】
図7は、本実施形態に係るDOLの一例を示す模式図である。
図7には、トラックTRk―1、トラックTRk、及びトラックTRk+1を示している。
図7において、トラックTRk―1乃至TRk+1は、外方向から内方向に記載の順に並んでいる。トラックTRkは、トラックTRk―1の内方向に隣接し、トラックTRk+1は、トラックTRkの外方向に隣接している。
図7において、トラックTRk―1は、訂正不可能隣接トラックに相当し、トラックTRk+1は、訂正可能隣接トラックに相当する。
図7には、トラックTRkのトラックセンタTRCkを示している。
図7には、円周位置CPSと、円周位置CP0と、円周位置CPRとを示している。円周位置CP0は、円周位置CPSよりも後方向に位置し、円周位置CPRは、円周位置CP0よりも後方向に位置している。
図7には、トラックTRkにおける円周位置CPSから円周位置CP0までのヘッド15の経路HR71と、トラックTRkにおける円周位置CP0から円周位置CPRまでのヘッド15の経路HR72とを示している。
【0086】
図7に示した例では、MPU60は、トラックTRkにおいて、トラックTRk―1(トラックTRk―1に向かう方向)に対するDOL(外方向のDOL)を低DOL D1を設定し、トラックTRk+1(トラックTRk+1に向かう方向)に対するDOL(内方向のDOL)を高DOL D2に設定する。
【0087】
図7に示した例では、MPU60は、トラックTRkにおいて、経路HR71に従ってヘッド15を円周位置CPSから円周位置CP0に移動させる。MPU60は、円周位置CP0において、トラックTRk―1側に向かう方向(外方向)へのオフトラック量(スクイーズ)がDOL D1より大きいと判定した場合、ライト処理(又はライト動作)を停止し、トラックセンタTRCkにヘッド15を位置決めし直す。MPU60は、トラックTRkにおいて、ライト処理(又はライト動作)を停止し、且つトラックセンタTRCkにヘッド15を位置決めした場合、経路HR72に従ってヘッド15を円周位置CP0から円周位置CPRに移動させる。
【0088】
図8は、本実施形態に係るDOLの一例を示す模式図である。
図8には、トラックTRk―1、及びトラックTRkを示している。
図8において、トラックTRk―1は、前部セクタFSck―1と、前部セクタFSck―1の後方向に隣接する後部セクタRSck―1とを有している。前部セクタFSck-1は、訂正不可能隣接セクタに相当し、後部セクタRSck―1は、訂正可能隣接セクタに相当する。
図8において、トラックTRkは、前部セクタFSckと、前部セクタFSckの後方向に隣接する後部セクタRSckとを有している。
図8には、円周位置CPSと、円周位置CP1と、円周位置CPRとを示している。円周位置CP1は、円周位置CPSよりも後方向に位置し、円周位置CPRは、円周位置CP1よりも後方向に位置している。前部セクタFSck―1は、トラックTRk―1において円周位置CPSから円周位置CP1までの領域に相当する。後部セクタRSck―1は、トラックTRk―1において円周位置CP1から円周位置CPRまでの領域に相当する。前部セクタFSckは、トラックTRkにおいて円周位置CPSから円周位置CP1までの領域に相当する。後部セクタRSckは、トラックTRkにおいて円周位置CP1から円周位置CPRまでの領域に相当する。
図8には、トラックTRkにおける円周位置CPSから円周位置CPRまでのヘッド15の経路HR81を示している。
【0089】
図8に示した例では、MPU60は、トラックTRkにおいて、前部セクタFSck―1に対するDOL(前部セクタFSckにおける外方向のDOL)を低DOL D1を設定し、後部セクタRSck―1に対するDOL(後部セクタRSckにおける外方向のDOL)を高DOL D2に設定する。
【0090】
図8に示した例では、MPU60は、トラックTRkにおいて、経路HR81に従ってヘッド15を円周位置CPSから円周位置CPRに移動させる。MPU60は、トラックTRkの円周位置CPSから円周位置CP1までの領域では、前部セクタFSck―1に向かう方向(外方向)へのオフトラック量(スクイーズ)がDOL D1以下であると判定した場合、ライト処理(又はライト動作)を停止せずに継続する。MPU60は、トラックTRkの円周位置CP1から円周位置CPRまでの領域では、後部セクタFSck-1に向かう方向(外方向)へのオフトラック量(スクイーズ)がDOL D2以下であると判定した場合、ライト処理(又はライト動作)を停止せずに継続する。また、MPU60は、トラックTRkの円周位置CP1から円周位置CPRまでの領域では、後部セクタFSck-1に向かう方向(外方向)へのオフトラック量(スクイーズ)がDOL D1よりも大きく、且つDOL D2以下であると判定した場合、ライト処理(又はライト動作)を停止せずに継続する。
【0091】
図9は、本実施形態に係るDOLの一例を示す模式図である。
図9には、トラックTRk-1、トラックTRk、及びトラックTRk+1を示している。
図9には、円周位置CPSと、円周位置CP2と、円周位置CPRとを示している。円周位置CP2は、円周位置CPSよりも後方向に位置し、円周位置CPRは、円周位置CP2よりも後方向に位置している。
図9には、トラックTRkにおける円周位置CPSから円周位置CP2までのヘッド15の経路HR91と、トラックTRkにおける円周位置CP2から円周位置CPRまでのヘッド15の経路HR92とを示している。
【0092】
図9に示した例では、MPU60は、トラックTRkにおいて、トラックTRk―1(トラックTRk―1に向かう方向)に対するDOL(外方向のDOL)を低DOL D1を設定し、トラックTRk+1(トラックTRk+1に向かう方向)に対するDOL(内方向のDOL)を高DOL D2に設定する。また、
図9に示した例では、MPU60は、トラックTRkにおいて、トラックTRk+1(内方向)に対して低アンリカバブル閾値UTH1を設定する。
【0093】
図9に示した例では、MPU60は、トラックTRkにおいて、経路HR91に従ってヘッド15を円周位置CPSから円周位置CP2に移動させる。MPU60は、トラックTRk+1に向かう方向(内方向)へのオフトラック量(スクイーズ)が低アンリカバブル閾値UTH1より大きいと判定した場合、トラックTRk+1にリードモディファイライトを実行する。MPU60は、円周位置CP2において、トラックTRk+1に向かう方向(内方向)へのオフトラック量(スクイーズ)がDOL D2以上になったと判定した場合、ライト処理(又はライト動作)を停止し、トラックセンタTRCkにヘッド15を位置決めし直す。MPU60は、トラックTRkにおいて、ライト処理(又はライト動作)を停止し、且つトラックセンタTRCkにヘッド15を位置決めした場合、経路HR92に従ってヘッド15を円周位置CP2から円周位置CPRに移動させる。
【0094】
図10は、本実施形態に係るDOLの設定方法の一例を示すフローチャートである。
MPU60は、対象領域の隣接領域が訂正可能領域であるか訂正可能領域でないかを判定する(B1001)。例えば、MPU60は、対象トラック若しくは対象セクタの隣接トラック若しくは隣接セクタが訂正可能隣接トラック若しくは訂正可能隣接セクタであるか訂正不可能隣接トラック若しくは訂正不可能隣接セクタであるかを判定する。対象領域の隣接領域が訂正可能領域であると判定した場合(B1001のYES)、MPU60は、対象領域の隣接領域に対するDOLを高DOLに設定する(B1002)。MPU60は、対象領域の隣接領域に対して低アンリカバブル閾値を設定し(B1003)、処理を終了する。対象領域の隣接領域が訂正不可能領域であると判定した場合(B1001のNO)、MPU60は、対象領域の隣接領域に対するDOLを低DOLに設定し(B1004)、処理を終了する。
【0095】
図11は、本実施形態に係るライト処理の一例を示すフローチャートである。
MPU60は、対象領域にデータをライトするライトコマンドを受ける(B1101)。例えば、MPU60は、対象トラック又は対象セクタにデータをライトするライトコマンドを受ける。MPU60は、対象領域が訂正可能領域であるか訂正可能領域でないかを判定する(B1102)。例えば、MPU60は、対象トラック若しくは対象セクタが訂正可能トラック若しくは訂正可能セクタであるか訂正不可能トラック若しくは訂正不可能セクタであるかを判定する。
【0096】
対象領域が訂正可能領域でないと判定した場合(B1102のNO)、MPU60は、対象領域にデータをライトし(B1103)、処理を終了する。例えば、対象トラック若しくは対象セクタが訂正可能トラック若しくは訂正可能セクタでないと判定した場合、MPU60は、対象トラック若しくは対象セクタにデータをライトし、処理を終了する。
【0097】
対象領域が訂正可能領域であると判定した場合(B1102のYES)、MPU60は、この対象領域の隣接領域においてこの対象領域に向かう方向へのスクイーズが低アンリカバブル閾値よりも大きいか低アンリカバブル閾値以下であるかを判定する(B1104)。例えば、対象セクタ若しくは対象トラックが訂正可能セクタ若しくは訂正可能トラックであると判定した場合、MPU60は、この対象セクタ若しくはこの対象トラックの隣接セクタ若しくは隣接トラックにおいてこの対象セクタ若しくはこの対象トラックに向かう方向へのスクイーズが低アンリカバブル閾値よりも大きいか低アンリカバブル閾値以下である判定する。
【0098】
この隣接セクタ若しくはこの隣接トラックにおいてこの対象セクタ若しくはこの対象トラックに向かう方向へのスクイーズが低アンリカバブル閾値以下であると判定した場合(B1104のNO)、MPU60は、B1103の処理に進む。この隣接セクタ若しくはこの隣接トラックにおいてこの対象セクタ若しくはこの対象トラックに向かう方向へのスクイーズが低アンリカバブル閾値よりも大きいと判定した場合(B1104のYES)、MPU60は、この対象セクタ若しくはこの対象トラックにトラック単位のエラー訂正が訂正不可能となるライト、例えば、1トラックの途中までのシーケンシャルライト、又はランダムライトを許可せずに、リードモディファイライトを実行し(B1105)、処理を終了する。例えば、この隣接セクタ若しくはこの隣接トラックにおいてこの対象セクタ若しくはこの対象トラックに向かう方向へのスクイーズが低アンリカバブル閾値よりも大きいと判定した場合、MPU60は、対象セクタ若しくは対象トラックにランダムライトを許可せずに、リードモディファイライトを実行し、処理を終了する。例えば、この隣接セクタ若しくはこの隣接トラックにおいてこの対象セクタ若しくはこの対象トラックに向かう方向へのスクイーズが低アンリカバブル閾値よりも大きいと判定した場合、MPU60は、対象セクタ若しくは対象トラックをリードし、対象セクタ若しくは対象トラックの対応するデータを更新データに置き換えた更新セクタ若しくは更新トラックをライトし、更新セクタ若しくは更新トラックの全ての更新セクタ群にXOR演算して更新パリティセクタを算出し、更新セクタ群と更新パリティセクタとを同じ対象セクタ若しくは対象トラックにライトし、処理を終了する。
【0099】
本実施形態によれば、磁気ディスク装置1は、訂正可能領域(訂正可能トラック若しくは訂正可能セクタ)及び訂正可能領域(訂正不可能トラック若しくは訂正不可能セクタ)を管理テーブルTB1で管理する。磁気ディスク装置1は、ランダムライト禁止トラック又はランダムライト禁止セクタをランダムライト禁止テーブルTB2で管理する。磁気ディスク装置1は、対象領域の隣接領域が訂正可能隣接領域であると判定した場合、対象領域のこの隣接領域に向かう方向に対するDOLを高DOLに設定する。磁気ディスク装置1は、対象領域の隣接領域が訂正不可能隣接領域であると判定した場合、対象領域のこの隣接領域に向かう方向に対するDOLを低DOLに設定する。磁気ディスク装置1は、対象領域において高DOLを設定した隣接領域に対して低アンリカバブル閾値を設定する。磁気ディスク装置1は、対象領域の隣接領域が訂正可能領域であると判定し、且つこの対象領域におけるこの隣接領域に向かう方向へのスクイーズが低アンリカバブル閾値よりも大きいと判定した場合、この隣接領域にトラック単位のエラー訂正が訂正不可能となるライト、例えば、1トラックの途中までのシーケンシャルライト、又はランダムライトを許可せずに、この隣接領域にリードモディファイライトを実行する。そのため、磁気ディスク装置1は、記録密度を向上することができる。また、磁気ディスク装置1は、効率的にライト処理を実行できる。したがって、磁気ディスク装置1は、信頼性を向上することができる。
【0100】
次に、前述した実施形態に係る変形例に係る磁気ディスク装置について説明する。変形例において、前述の実施形態と同一の部分には同一の参照符号を付してその詳細な説明を省略する。
(変形例1)
変形例1に係る磁気ディスク装置1は、リフレッシュ処理を実行する点が前述した実施形態に係る磁気ディスク装置1と相違する。
【0101】
図12は、変形例1に係る磁気ディスク装置1の構成を示すブロック図である。
MPU60は、ライトカウント部660、及びリフレッシュ制御部670をさらに有している。MPU60は、各部、例えば、リード/ライト制御部610、エラー検出部620、エラー訂正部630、パリティセクタ管理部640、オフトラック管理部650、ライトカウント部660、及びリフレッシュ制御部670等の処理をファームウェア上で実行する。なお、MPU60は、各部、例えば、リード/ライト制御部610、エラー検出部620、エラー訂正部630、パリティセクタ管理部640、オフトラック管理部650、ライトカウント部660、及びリフレッシュ制御部670等を回路として有していてもよい。リード/ライト制御部610、エラー検出部620、エラー訂正部630、パリティセクタ管理部640、オフトラック管理部650、ライトカウント部660、及びリフレッシュ制御部670等は、R/Wチャネル40又はHDC50に含まれていてもよい。なお、MPU60は、オフトラック管理部650を含んでいなくてもよい。
【0102】
ライトカウント部660は、データをライトした回数(以下、ライト回数又はライトカウントと称する場合もある)をカウントする。ライト回数(又はライトカウント)は、例えば、データをライトすることによりヘッド15からの漏れ磁束等の影響(Adjacent Track Interference:ATI)を受けた回数に相当する。ライトカウント部660は、ライト回数をテーブルとして所定の記録領域、例えば、ディスク10(のシステムエリア10b)、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90等に管理テーブルTB1として保持していてもよい。
【0103】
ライトカウント部660は、対象領域から半径方向に所定の範囲内に配置された領域(以下、近接領域と称する場合もある)にデータをライトしたライト回数をカウントする。例えば、ライトカウント部660は、対象領域からATIを受ける範囲内に配置された近接領域にデータをライトしたライト回数をカウントする。
【0104】
ライトカウント部660は、対象領域の近接領域にデータをライトした場合、この対象領域に対応するライト回数を所定の値を増加(インクリメント)させる。例えば、ライトカウント部660は、対象領域の外方向及び内方向の近接領域にデータをライトした場合、この対象領域に対応するライト回数を所定の値を増加(インクリメント)させる。例えば、ライトカウント部660は、対象領域の外方向及び内方向の近接領域にデータをライトした場合、この対象領域に対応するライト回数を1増加(インクリメント)させる。
【0105】
ライトカウント部660は、対象領域の半径方向に隣接する領域(以下、隣接領域と称する場合もある)にデータをライトしたライト回数をカウントする。例えば、ライトカウント部660は、対象領域からATIを受ける範囲内に配置された隣接領域にデータをライトしたライト回数をカウントする。
【0106】
ライトカウント部660は、対象領域の隣接領域にデータをライトした場合、対象領域に対応するライト回数を所定の値を増加(インクリメント)させる。例えば、ライトカウント部660は、対象領域の外方向及び内方向の隣接領域にデータをライトした場合、対象領域に対応するライト回数を所定の値を増加(インクリメント)させる。例えば、ライトカウント部660は、対象領域の外方向及び内方向の隣接領域にデータをライトした場合、対象領域に対応するライト回数を1増加(インクリメント)させる。なお、ライトカウント部660は、対象領域の外方向及び内方向の隣接領域にデータをライトした場合、対象領域に対応するライト回数をスクイーズ量に応じた値を増加させてもよい。例えば、ライトカウント部660は、対象領域の外方向及び内方向の隣接領域にデータをライトした場合、対象領域に対応するライト回数をスクイーズ量に応じた1より大きい値を増加させてもよい。
【0107】
ライトカウント部660は、対象トラック又は対象セクタの半径方向に隣接トラック又は隣接セクタにデータをライトしたライト回数をカウントする。
【0108】
ライトカウント部660は、対象トラック又は対象セクタの隣接トラック又は隣接セクタにデータをライトした場合、対象トラック又は対象セクタに対応するライト回数を所定の値を増加(インクリメント)させる。例えば、ライトカウント部660は、対象トラック又は対象セクタの外方向及び内方向の隣接トラックにデータをライトした場合、対象トラック又は対象セクタに対応するライト回数を所定の値を増加(インクリメント)させる。例えば、ライトカウント部660は、対象トラック又は対象セクタの外方向及び内方向の隣接トラック又は隣接セクタにデータをライトした場合、対象トラック又は対象セクタに対応するライト回数を1増加(インクリメント)させる。
【0109】
リフレッシュ制御部670は、所定の領域、例えば、所定のトラックにライトされたデータと同じデータをこの領域、例えば、所定のトラックを書き直す処理(以下、リフレッシュ処理と称する場合もある)を実行する。リフレッシュ制御部670は、所定の領域に対応するライト回数がリフレッシュ処理を実行するライト回数に相当する閾値(以下、リフレッシュ閾値と称する場合もある)を超えていると判定した場合、この領域にリフレッシュ処理を実行する。リフレッシュ制御部670は、所定の領域に対応するライト回数がリフレッシュ閾値を超えていると判定した場合、この領域の一部にリフレッシュ処理を実行する。言い換えると、リフレッシュ制御部670は、所定の領域に対応するライト回数がリフレッシュ閾値を超えていると判定した場合、この領域に予めフォーマットとして設定された容量以下のデータにリフレッシュ処理を実行する。リフレッシュ制御部670は、所定の領域にリフレッシュ処理を実行した場合、この領域に対応するライト回数をリセットする、例えば、0にする。
【0110】
リフレッシュ制御部670は、対象トラック又は対象セクタに対応するライト回数がこの対象トラック又はこの対象セクタに対応するリフレッシュ閾値を超えたと判定した場合、この対象トラック又はこの対象セクタにリフレッシュ処理を実行する。リフレッシュ制御部670は、対象トラック又は対象セクタに対応するライト回数がこの対象トラック又はこの対象セクタに対応するリフレッシュ閾値を超えたと判定した場合、この対象トラック又はこの対象セクタの一部にリフレッシュ処理を実行する。言い換えると、リフレッシュ制御部670は、対象トラック又は対象セクタに対応するライト回数がこの対象トラック又はこの対象セクタに対応する閾値を超えたと判定した場合、この対象トラック又はこの対象セクタに予めフォーマットとして設定された容量以下のデータにリフレッシュ処理を実行する。
【0111】
リフレッシュ制御部670は、リフレッシュ閾値を変更(又は設定)する。リフレッシュ制御部670は、複数のリフレッシュ閾値を有する。
リフレッシュ制御部670は、訂正可能領域のリフレッシュ閾値を複数のリフレッシュ閾値において現在設定しているリフレッシュ閾値(以下、現在のリフレッシュ閾値と称する場合もある)よりも高いリフレッシュ閾値に変更(又は設定)する。リフレッシュ制御部670は、訂正不可領域のリフレッシュ閾値を複数のリフレッシュ閾値において現在のリフレッシュ閾値よりも低いリフレッシュ閾値に変更(又は設定)する。
【0112】
また、リフレッシュ制御部670は、訂正可能領域のリフレッシュ閾値を複数のリフレッシュ閾値の内の訂正不可領域のリフレッシュ閾値よりも高いリフレッシュ閾値に設定し、訂正不可領域のリフレッシュ閾値を複数のリフレッシュ閾値の内の訂正可能領域のリフレッシュ閾値よりも低いリフレッシュ閾値に設定する。
【0113】
リフレッシュ制御部670は、2つのリフレッシュ閾値、例えば、高リフレッシュ閾値及び低リフレッシュ閾値を有する。なお、リフレッシュ制御部670は、3つ以上のリフレッシュ閾値を有していてもよい。高リフレッシュ閾値は、低リフレッシュ閾値よりも大きく、低リフレッシュ閾値は、高リフレッシュ閾値よりも小さい。リフレッシュ制御部670は、訂正可能領域のリフレッシュ閾値を高リフレッシュ閾値に設定し、訂正不可能領域のリフレッシュ閾値を低リフレッシュ閾値に設定する。リフレッシュ制御部670は、高リフレッシュ閾値を設定した訂正可能領域にリフレッシュ処理を実行する頻度よりも低リフレッシュ閾値を設定した訂正不可能領域にリフレッシュ処理を実行する頻度の方が小さい。言い換えると、リフレッシュ制御部670は、低リフレッシュ閾値を設定した訂正不可能領域にリフレッシュ処理を実行する頻度よりも高リフレッシュ閾値を設定した訂正可能領域にリフレッシュ処理を実行する頻度の方が大きい。ここで、頻度は、例えば、特定の時間に処理を実行する回数に相当する。
【0114】
例えば、リフレッシュ制御部670は、訂正可能トラック又は訂正可能シリンダのリフレッシュ閾値を高リフレッシュ閾値に設定し、訂正不可能トラック又は訂正可能シリンダのリフレッシュ閾値を低リフレッシュ閾値に設定する。
【0115】
例えば、リフレッシュ制御部670は、訂正可能セクタ(又はロジカルトラック)のリフレッシュ閾値を高リフレッシュ閾値に設定し、訂正不可能セクタのリフレッシュ閾値を低リフレッシュ閾値に設定する。
【0116】
リフレッシュ制御部670は、所定のシリンダ(トラック)に対応する複数のヘッド15において、各ヘッド15に対応するトラックのリフレッシュ閾値をそれぞれ異なるリフレッシュ閾値に設定してもよい。なお、リフレッシュ制御部670は、所定のシリンダ(トラック)に対応する複数のヘッド15において、各ヘッド15に対応するトラックのリフレッシュ閾値を同じリフレッシュ閾値に設定してもよい。
【0117】
例えば、リフレッシュ制御部670は、所定のシリンダ(トラック)に対する複数のヘッド15によるパフォーマンスを一定に維持する場合、これら複数のヘッド15の内の少なくとも1つのヘッド15に対応するシリンダ(トラック)のリフレッシュ閾値を高リフレッシュ閾値に設定し、複数のヘッド15の内の高リフレッシュ閾値に設定した少なくとも1つのヘッド15の以外の他のヘッド15に対応するシリンダ(トラック)のリフレッシュ閾値を低リフレッシュ閾値に設定する。
【0118】
例えば、リフレッシュ制御部670は、所定のシリンダ(トラック)に対する4つのヘッド15によるパフォーマンスを一定に維持し、且つ4つのヘッド15にそれぞれ対応する4つのシリンダ(トラック)のリフレッシュ閾値がそれぞれ300回、300回、300回、及び300回である場合、4つのヘッド15の内の2つのヘッド15がそれぞれ対応する2つの訂正可能シリンダ(訂正可能トラック)にそれぞれ対応する2つのリフレッシュ閾値をそれぞれ100回増加する。この場合、リフレッシュ制御部670は、4つのヘッド15の内の訂正可能シリンダ(訂正可能トラック)に対応している2つのヘッド15以外の残りの2つのヘッド15がそれぞれ対応する2つのシリンダ(トラック)にそれぞれ対応する2つのリフレッシュ閾値をそれぞれ100回低減する。この場合、4つのヘッド15によるパフォーマンスを維持したまま、訂正可能シリンダ(訂正可能トラック)に対応していない2つのヘッド15のTPIを改善することができる。なお、4つのヘッド15の内の訂正可能シリンダ(訂正可能トラック)に対応している2つのヘッド15以外の残りの2つのヘッド15がそれぞれトラック単位のエラー訂正が訂正不可能となるライト、例えば、1トラックの途中までのシーケンシャルライト、又はランダムライトされた2つの訂正不可能シリンダ(訂正不可能トラック)に対応している場合、リフレッシュ制御部670は、これら2つのヘッド15がそれぞれ対応する2つのシリンダ(トラック)にそれぞれ対応する2つのリフレッシュ閾値をそれぞれ300回、300回で維持する。ここで、“所定のトラック、例えば、訂正可能トラック(訂正可能シリンダ)にランダムライトする”ことは、“トラック単位のエラー訂正を実行する単位以下でライトする”ことに相当する。そのため、所定のトラック、例えば、訂正可能トラック(訂正可能シリンダ)にランダムライトすることでこのトラックにおいてトラック単位のエラー訂正が実行不可能になり得る。リフレッシュ制御部670は、訂正可能シリンダ(訂正可能トラック)のライト回数が訂正不可能シリンダ(訂正不可能トラック)のリフレッシュ閾値以上である場合、訂正可能シリンダ(訂正可能トラック)にランダムライトされた際にこの訂正可能シリンダ(この訂正可能トラック)が訂正不可能トラックになるため、訂正可能シリンダ(訂正可能トラック)にランダムライトを許可せずに、訂正可能シリンダ(訂正可能トラック)にリードモディファイライトを実行して、訂正可能トラックを維持する。
【0119】
図13は、変形例1に係るリフレッシュ閾値LTH及びHTHの一例を示す模式図である。
図13において、横軸は、ライト回数(回)を示し、縦軸は、アンリカバブルエラーレート(Unrecoverable Error Rate)を示している。
図13の縦軸において、アンリカバブルエラーレートは、矢印の先端の方向に向かうに従って大きくなり、矢印の先端と反対側に向かうに従って小さくなる。
図13の横軸において、ライト回数は、矢印の先端の方向に向かうに従って大きくなり、矢印の先端と反対側に向かうに従って小さくなる。
図13の横軸には、低リフレッシュ閾値LTHと、高リフレッシュ閾値HTHとを示している。
図13には、訂正不可能領域に対応するアンリカバブルエラーレートの変化(以下、アンリカバブルエラーレートの変化と称する場合もある)ERL3と、訂正可能領域に対応するアンリカバブルエラーレートの変化(以下、アンリカバブルエラーレートの変化と称する場合もある)ERL4と、を示している。
図13のアンリカバブルエラーレートの変化ERL3とアンリカバブルエラーレートの変化ERL4とに示すように、訂正可能領域は、訂正不可能領域よりもライト回数に対するアンリカバブルエラーレートが低下している。
【0120】
図13に示した例では、MPU60は、訂正可能領域のリフレッシュ閾値を高リフレッシュ閾値に設定し、訂正不可能領域のリフレッシュ閾値を低リフレッシュ閾値に設定する。MPU60は、訂正不可能領域に対応するヘッド15のTPIを高いTPIに設定する。MPU60は、訂正可能領域に対応するライト回数が高リフレッシュ閾値HTHを超えていると判定した場合、訂正可能領域にリフレッシュ処理を実行する。MPU60は、訂正不可能領域に対応するライト回数が低リフレッシュ閾値LTHを超えていると判定した場合、訂正不可能領域にリフレッシュ処理を実行する。MPU60は、訂正可能領域にリフレッシュ処理を実行する頻度よりも、訂正不可能領域にリフレッシュ処理を実行する頻度が大きい。
【0121】
図14は、本実施形態に係るリフレッシュ閾値の設定方法の一例を示すフローチャートである。
MPU60は、所定の領域が訂正可能領域であるか訂正可能領域でないかを判定する(B1401)。言い換えると、MPU60は、所定の領域が訂正可能領域であるか訂正不可能領域であるかを判定する。例えば、MPU60は、所定のトラックが訂正可能トラックであるか訂正不可能トラックであるかを判定する。例えば、MPU60は、所定のセクタが訂正可能セクタであるか訂正不可能セクタであるかを判定する。所定の領域が訂正可能領域であると判定した場合(B1401のYES)、MPU60は、この訂正可能領域のリフレッシュ閾値を高リフレッシュ閾値に設定し(B1402)、処理を終了する。言い換えると、MPU60は、この訂正可能トラック(又はこの訂正可能シリンダ)のリフレッシュ閾値を高リフレッシュ閾値に設定する。MPU60は、この訂正可能セクタのリフレッシュ閾値を高リフレッシュ閾値に設定する。
【0122】
所定の領域が訂正不可能領域であると判定した場合(B1401のNO)、MPU60は、この訂正不可能領域のリフレッシュ閾値を低リフレッシュ閾値に設定し(B1403)、処理を終了する。言い換えると、MPU60は、この訂正不可能トラック(又はこの訂正不可能シリンダ)のリフレッシュ閾値を低リフレッシュ閾値に設定する。MPU60は、この訂正不可能セクタのリフレッシュ閾値を低リフレッシュ閾値に設定する。
【0123】
図15は、本実施形態に係る訂正可能領域のライト処理の一例を示すフローチャートである。
MPU60は、訂正可能領域にデータをライトするライトコマンドを受ける(B1501)。例えば、MPU60は、訂正可能トラック(又は訂正可能シリンダ)にデータをライトするライトコマンドを受ける。MPU60は、訂正可能領域のライト回数が低リフレッシュ閾値よりも大きいか低リフレッシュ閾値以下であるかを判定する(B1502)。例えば、MPU60は、訂正可能トラック(又は訂正可能シリンダ)のライト回数が低リフレッシュ閾値よりも大きいか低リフレッシュ閾値以下であるかを判定する。訂正可能領域のライト回数が低リフレッシュ閾値以下であると判定した場合(B1502のNO)、MPU60は、訂正可能領域にデータをライトし(B1503)、処理を終了する。例えば、訂正可能トラックの低リフレッシュ閾値以下であると判定した場合、MPU60は、訂正可能トラックにデータをライトし、処理を終了する。
【0124】
訂正可能領域のライト回数が低リフレッシュ閾値よりも大きいと判定した場合(B1502のYES)、MPU60は、訂正可能領域にトラック単位のエラー訂正が訂正不可能となるライト、例えば、1トラックの途中までのシーケンシャルライト、又はランダムライトを許可せずに、リードモディファイライトを実行し(B1504)、処理を終了する。例えば、訂正可能トラック(又は訂正可能シリンダ)のライト回数が低リフレッシュ閾値よりも大きいと判定した場合、MPU60は、訂正可能トラック(又は訂正可能シリンダ)にランダムライトを許可せずに、リードモディファイライトを実行する。例えば、訂正可能トラック(又は訂正可能シリンダ)のライト回数が低リフレッシュ閾値よりも大きいと判定した場合、MPU60は、訂正可能トラックをリードし、ライトコマンドでライトを指示されたデータを訂正可能トラック(又は訂正可能シリンダ)の対応するデータと入れ替えた更新トラック(又は更新シリンダ)をライトし、更新トラック(又は更新シリンダ)の全ての更新セクタ群にXOR演算して更新パリティセクタを算出し、更新セクタ群と更新パリティセクタとを同じトラック又はシリンダにライトし、処理を終了する。
【0125】
変形例1によれば、磁気ディスク装置1は、複数のヘッド15のそれぞれに対応する複数のディスク10の面の各シリンダに対応するリフレッシュ閾値を変更する。磁気ディスク装置1は、高リフレッシュ閾値及び低リフレッシュ閾値を有している。磁気ディスク装置1は、訂正可能領域のリフレッシュ閾値を高リフレッシュ閾値に設定し、訂正不可能領域のリフレッシュ閾値を低リフレッシュ閾値に設定する。磁気ディスク装置1は、高リフレッシュ閾値に設定した訂正可能領域にリフレッシュ処理を実行する頻度よりも低リフレッシュ閾値に設定した訂正不可能領域にリフレッシュ処理を実行する頻度が小さい。磁気ディスク装置1は、訂正可能領域にデータをライトする際にこの訂正可能領域のライト回数が低リフレッシュ閾値よりも大きい場合、この訂正可能領域にリードモディファイライトを実行する。そのため、磁気ディスク装置1は、TPIを向上することができる。したがって、磁気ディスク装置1は、記録密度を向上することができる。
【0126】
(変形例2)
変形例2に係る磁気ディスク装置1は、トラックECCを実行できなくなるトラックのデータの退避する点が前述した実施形態及び変形例1に係る磁気ディスク装置1と相違する。
【0127】
図16は、変形例2に係る磁気ディスク装置1の構成を示すブロック図である。
MPU60は、データ退避部680をさらに有している。MPU60は、各部、例えば、リード/ライト制御部610、エラー検出部620、エラー訂正部630、パリティセクタ管理部640、オフトラック管理部650、ライトカウント部660、リフレッシュ制御部670、及びデータ退避部680等の処理をファームウェア上で実行する。なお、MPU60は、各部、例えば、リード/ライト制御部610、エラー検出部620、エラー訂正部630、パリティセクタ管理部640、オフトラック管理部650、ライトカウント部660、リフレッシュ制御部670、及びデータ退避部680等を回路として有していてもよい。リード/ライト制御部610、エラー検出部620、エラー訂正部630、パリティセクタ管理部640、オフトラック管理部650、ライトカウント部660、リフレッシュ制御部670、及びデータ退避部680等は、R/Wチャネル40又はHDC50に含まれていてもよい。なお、MPU60は、オフトラック管理部650、ライトカウント部660、及びリフレッシュ制御部670の内の少なくとも1つを含んでいなくてもよい。
【0128】
データ退避部680は、ホスト100等から受けたコマンドで指示されたデータをこのコマンドで指示された記録領域と異なる記録領域(以下、他の記録領域と称する場合もある)、例えば、ディスク10、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に記録する。データ退避部680は、ホスト100等から受けたコマンドで指示されたデータを他の記録領域、例えば、ディスク10、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に一時的に記録する。以下、“データを他の記録領域に一時的に記録する”ことを“退避する”又は“退避処理を実行する”と称する場合もある。
【0129】
データ退避部680は、ランダムライト禁止領域、例えば、ランダムライト禁止トラック若しくはランダムライト禁止セクタへのライトコマンド(以下、禁止領域ライトコマンドと称する場合もある)をホスト100等から受けた場合、他の記録領域に空き領域があるか空き領域がないかを判定する。
【0130】
データ退避部680は、他の記録領域に空き領域があると判定した場合、この禁止領域ライトコマンド、この禁止領域ライトコマンドに対応するデータ(以下、禁止領域コマンドデータと称する場合もある)を他の記録領域に退避し、この禁止領域ライトコマンドを実行しない、停止する、又は一旦保留する。言い換えると、データ退避部680は、他の記録領域に空き領域があると判定した場合、この禁止領域ライトコマンドをホスト100等から受けた場合、この禁止領域ライトコマンド、及びこの禁止領域ライトコマンドに対応する禁止領域コマンドデータを退避し、このランダムライト禁止トラックのライト処理を実行しない、停止する、又は一旦保留する。
【0131】
データ退避部680は、他の記録領域に空き領域があると判定した場合、この禁止領域ライトコマンド、この禁止領域ライトコマンドに対応する禁止領域コマンドデータ、及びこのランダムライト禁止トラックのデータ(以下、ランダムライト禁止データと称する場合もある)を他の記録領域に退避し、この禁止領域ライトコマンドを実行しない、停止する、又は一旦保留する。言い換えると、データ退避部680は、他の記録領域に空き領域があると判定した場合、この禁止領域ライトコマンドをホスト100等から受けた場合、この禁止領域ライトコマンド、この禁止領域ライトコマンドに対応する禁止領域コマンドデータ、及びこのランダムライト禁止トラックに対応するランダムライト禁止データを退避し、このランダムライト禁止トラックのライト処理を実行しない、停止する、又は一旦保留する。
【0132】
データ退避部680は、他の記録領域に空き領域があると判定した場合、この禁止領域ライトコマンドに対応する禁止領域コマンドデータに基づいて、このランダムライト禁止トラックでトラックECCを実行できるように、この禁止領域ライトコマンドに対応するランダムライト禁止トラックをライトする。言い換えると、データ退避部680は、他の記録領域に空き領域があると判定した場合、禁止領域ライトコマンドに対応する禁止領域コマンドデータに基づいて、このランダムライト禁止トラックが訂正可能トラックとなるように、この禁止領域ライトコマンドに対応するランダムライト禁止トラックをライトする。
【0133】
データ退避部680は、禁止領域ライトコマンドをホスト100等から受け、且つ他の記録領域に空き領域がないと判定した場合、この禁止領域ライトコマンドに対応する禁止領域コマンドデータをこの禁止領域ライトコマンドで指定された領域、例えば、ランダムライト禁止トラックに通常通りにライトし、この禁止領域ライトコマンドで指定された領域、例えば、ランダムライト禁止トラックをディスク10のユーザデータ領域10aの訂正不可能トラックに設定する。言い換えると、データ退避部680は、禁止領域ライトコマンドをホスト100等から受け、且つ他の記録領域に空き領域がないと判定した場合、この禁止領域ライトコマンドに対応する領域、例えば、禁止領域コマンドデータをランダムライト禁止トラックにライトし、この禁止領域ライトコマンドに対応する領域、例えば、ランダムライト禁止トラックをディスク10のユーザデータ領域10aの訂正不可能トラックとして管理テーブルTB1で管理する。
【0134】
例えば、データ退避部680は、禁止領域ライトコマンドをホスト100等から受けた場合、一時的にデータを記録するキャッシュ、例えば、ディスク10のシステムエリア10b、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に空き領域があるか空き領域がないかを判定する。
【0135】
データ退避部680は、キャッシュに空き領域があると判定した場合、この禁止領域ライトコマンドに対応する禁止領域コマンドデータをキャッシュに退避し、このランダムライト禁止トラックのライト処理を実行しない、停止する、又は一旦保留する。
【0136】
データ退避部680は、キャッシュに空き領域があると判定した場合、この禁止領域ライトコマンドに対応する禁止領域コマンドデータとこの禁止領域ライトコマンドに対応するランダムライト禁止トラックのランダムライト禁止データとをキャッシュに退避し、このランダムライト禁止トラックのライト処理を実行しない、停止する、又は一旦保留する。
【0137】
データ退避部680は、アイドル時等に、この禁止領域ライトコマンドに対応する禁止領域コマンドデータ(更新データ)をキャッシュに退避した場合、この禁止領域コマンドデータ(更新データ)とこのランダムライト禁止データとに基づいて、このランダムライト禁止トラックにリードモディファイライトを実行する。
【0138】
データ退避部680は、アイドル時等に、この禁止領域ライトコマンドに対応する禁止領域コマンドデータ(更新データ)とこの禁止領域ライトコマンドに対応するランダムライト禁止トラックのランダムライト禁止データとをキャッシュに退避した場合、この禁止領域コマンドデータ(更新データ)とこのランダムライト禁止データとに基づいて、このランダムライト禁止トラックにリードモディファイライトを実行する。
【0139】
データ退避部680は、このランダムライト禁止トラックから禁止領域コマンドデータをライトする領域を除いた残りの領域(以下、ライト禁止残余領域と称する場合もある)にデータ(以下、ライト禁止残余データと称する場合もある)をライトするコマンド(以下、ライト禁止残余コマンドと称する場合もある)をホスト100等からさらに受けた場合、ライト禁止残余データと禁止領域コマンドデータとをディスク10のユーザデータ領域10aのこのランダムライト禁止トラックにライトする。言い換えると、データ退避部680は、ランダムライト禁止トラックの1トラック分のデータをライトする少なくとも1つのコマンド(以下、1トラック分コマンドと称する場合もある)をホスト100等から受けたと判定した場合、この1トラック分コマンドに対応するデータをディスク10のユーザデータ領域10aのこのランダムライト禁止トラックにライトする。
【0140】
データ退避部680は、禁止領域ライトコマンドをホスト100等から受け、且つキャッシュに空き領域がないと判定した場合、この禁止領域ライトコマンドに対応する禁止領域コマンドデータをこの禁止領域ライトコマンドで指示された領域、例えば、ランダムライト禁止トラックにライトし、この禁止領域ライトコマンドで指示された領域、例えば、ランダムライト禁止トラックを訂正不可能トラックに設定する。
【0141】
データ退避部680は、所定の訂正可能トラック(以下、訂正不可予定トラックと称する場合もある)においてトラックECCを実行できなくなるライトコマンド(以下、訂正不可能化コマンドと称する場合もある)をホスト100等から受けた場合、他の記録領域に空き領域があるか空き領域がないかを判定する。
【0142】
データ退避部680は、他の記録領域に空き領域があると判定した場合、この訂正不可能化コマンド、及びこの訂正不可能化コマンドに対応するデータ(以下、訂正不可能化コマンドデータと称する場合もある)を他の記録領域に退避し、この訂正不可能化コマンドを実行しない、停止する、又は一旦保留する。言い換えると、データ退避部680は、他の記録領域に空き領域があると判定した場合、この訂正不可能化コマンド、この訂正不可能化コマンドに対応する訂正不可能化コマンドデータ、及びこの訂正不可予定トラックの訂正不可予定データを退避し、この訂正不可予定トラックのライト処理を実行しない、停止する、又は一旦保留する。
【0143】
データ退避部680は、他の記録領域に空き領域があると判定した場合、この訂正不可能化コマンド、この訂正不可能化コマンドに対応する訂正不可能化コマンドデータ、及びこの訂正不可予定トラックのデータ(以下、訂正不可予定データと称する場合もある)を他の記録領域に退避し、この訂正不可能化コマンドを実行しない、停止する、又は一旦保留する。言い換えると、データ退避部680は、他の記録領域に空き領域があると判定した場合、この訂正不可能化コマンド、この訂正不可能化コマンドに対応する訂正不可能化コマンドデータ、及びこの訂正不可予定トラックの訂正不可予定データを退避し、この訂正不可予定トラックのライト処理を実行しない、停止する、又は一旦保留する。
【0144】
データ退避部680は、他の記録領域に空き領域があると判定した場合、この訂正不可能化コマンドに対応する訂正不可能化コマンドデータに基づいて、訂正不可予定トラックでトラックECCを実行できるように、この訂正不可能化コマンドに対応する訂正不可予定トラックをライトする。言い換えると、データ退避部680は、他の記録領域に空き領域があると判定した場合、この訂正不可能化コマンドに対応する訂正不可能化コマンドデータに基づいて、この訂正不可予定トラックが訂正可能トラックとなるように、この訂正不可能化コマンドに対応する訂正不可予定トラックをライトする。
【0145】
データ退避部680は、訂正不可能化コマンドをホスト100等から受け、且つ他の記録領域に空き領域がないと判定した場合、この訂正不可能化コマンドに対応する訂正不可能化コマンドデータを訂正不可予定トラックにライトし、訂正不可予定トラックをディスク10のユーザデータ領域10aの訂正不可能トラックに設定する。言い換えると、データ退避部680は、訂正不可能化コマンドをホスト100等から受け、且つ他の記録領域に空き領域がないと判定した場合、この訂正不可能化コマンドに対応する訂正不可能化コマンドデータを訂正不可予定トラックにライトし、訂正不可予定トラックをディスク10のユーザデータ領域10aの訂正不可能トラックとして管理テーブルTB1で管理する。
【0146】
例えば、データ退避部680は、訂正不可能化コマンドをホスト100等から受けた場合、キャッシュ、例えば、ディスク10のシステムエリア10b、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に空き領域があるか空き領域がないかを判定する。
【0147】
データ退避部680は、キャッシュに空き領域があると判定した場合、この訂正不可能化コマンドに対応する訂正不可能化コマンドデータを一時的にデータを記録するキャッシュに退避し、この訂正不可予定トラックのライト処理を実行しない、停止する、又は一旦保留する。
【0148】
データ退避部680は、キャッシュに空き領域があると判定した場合、この訂正不可能化コマンドに対応する訂正不可能化コマンドデータとこの訂正不可能化コマンドに対応する訂正不可予定トラックの訂正不可予定データとを一時的にデータを記録するキャッシュに退避し、この訂正不可予定トラックのライト処理を実行しない、停止する、又は一旦保留する。
【0149】
データ退避部680は、アイドル時等に、この訂正不可能化コマンドに対応する訂正不可能化コマンドデータ(更新データ)をキャッシュに退避した場合、この訂正不可能化コマンドデータ(更新データ)に基づいて、この訂正不可予定トラックにリードモディファイライトを実行する。
【0150】
データ退避部680は、アイドル時等に、この訂正不可能化コマンドに対応する訂正不可能化コマンドデータ(更新データ)とこの訂正不可能化コマンドに対応する訂正不可予定トラックの訂正不可予定データとをキャッシュに退避した場合、この訂正不可能化コマンドデータ(更新データ)とこの訂正不可予定データとに基づいて、この訂正不可予定トラックにリードモディファイライトを実行する。
【0151】
データ退避部680は、この訂正不可能予定トラックから訂正不可能化コマンドデータをライトする領域を除いた残りの領域(以下、訂正不可残余領域と称する場合もある)にデータ(以下、訂正不可残余データと称する場合もある)をライトするコマンド(以下、訂正不可残余コマンドと称する場合もある)をホスト100等からさらに受けた場合、訂正不可残余データと訂正不可能化コマンドデータとをディスク10のユーザデータ領域10aのこの訂正不可予定トラックにライトする。言い換えると、データ退避部680は、訂正不可能予定トラックの1トラック分コマンドをホスト100等から受けたと判定した場合、この1トラック分コマンドに対応するデータをディスク10のユーザデータ領域10aのこの訂正不可予定トラックにライトする。
【0152】
データ退避部680は、訂正不可能化コマンドをホスト100等から受け、且つキャッシュに空き領域がないと判定した場合、この訂正不可能化コマンドに対応する訂正不可能化コマンドデータを訂正不可予定トラックにライトし、訂正不可予定トラックを訂正不可能トラックに設定する。
【0153】
図17は、変形例2に係る退避処理の一例を示す模式図である。
図17には、トラックTRm―2、トラックTRm+1、トラックTRm、トラックTRm+1、及びトラックTRm+2を示している。
図17において、トラックTRm―2乃至TRk+2は、外方向から内方向に記載の順に並んでいる。トラックTRm-1は、トラックTRmの外方向に隣接している。トラックTRm-2は、トラックTRm-1の外方向に隣接している。トラックTRm+1は、トラックTRmの内方向に隣接している。トラックTRm+2は、トラックTRm+1の内方向に隣接している。
図17では、トラックTRm―2乃至TRm+2は、訂正可能トラックに相当する。
図17には、円周位置CPSと、円周位置CP3と、円周位置CP4と、円周位置CPRとを示している。円周位置CP3は、円周位置CPSよりも後方向に位置し、円周位置CP4は、円周位置CP3よりも後方向に位置し、円周位置CPRは、円周位置CP4よりも後方向に位置している。
図17には、所定のライトコマンドでライトする領域WCd1と、所定のライトコマンドでライトする領域WCd2と、所定のライトコマンドでライトする領域WCd3とを示している。以下、“所定の領域又はデータのライトを指示するコマンド“及び“所定のライトコマンドでライトする領域又はデータ”を“ライトコマンド”と称する場合もある。つまり、“領域若しくはデータWCd1のライトを指示するコマンド”及び“所定のライトコマンドでライトする領域若しくはデータWCd1”を“ライトコマンドWCd1”と称し、“領域若しくはデータWCd2のライトを指示するコマンド”及び“所定のライトコマンドでライトする領域WCd2”を“ライトコマンドWCd2”と称し、“領域若しくはデータWCd3のライトを指示するコマンド”及び“所定のライトコマンドでライトする領域WCd3”を“ライトコマンドWCd3”と称する。ライトコマンドWCd1は、トラックTRm―2の円周位置CP4から円周位置CPRまでの領域若しくはデータと、トラックTRm―1の円周位置CPSから円周位置CPRまでの領域若しくはデータと、トラックTRmの円周位置CPSから円周位置CPRまでの領域若しくはデータと、トラックTRm+1の円周位置CPSから円周位置CPRまでの領域若しくはデータと、トラックTRm+2の円周位置CPSから円周位置CP3までの領域若しくはデータとに相当する。また、ライトコマンドWCd1は、トラックTRm―2の円周位置CP4から円周位置CPRまでの領域にデータをライトするコマンドと、トラックTRm―1の円周位置CPSから円周位置CPRまでの領域にデータをライトするコマンドと、トラックTRmの円周位置CPSから円周位置CPRまでの領域にデータをライトするコマンドと、トラックTRm+1の円周位置CPSから円周位置CPRまでの領域にデータにライトするコマンドと、トラックTRm+2の円周位置CPSから円周位置CP3までの領域にデータをライトするコマンドとに相当する。ライトコマンドWCd2は、トラックTRm―2の円周位置CPSから円周位置CP4までの領域若しくはデータに相当する。また、ライトコマンドWCd2は、トラックTRm―2の円周位置CPSから円周位置CP4までの領域にデータをライトするコマンドに相当する。ライトコマンドWCd3は、トラックTRm+2の円周位置CP3から円周位置CPRまでの領域若しくはデータに相当する。また、ライトコマンドWCd3は、トラックTRm+2の円周位置CP3から円周位置CPRまでの領域にデータをライトするコマンドに相当する。
【0154】
図17に示した例では、MPU60は、ホスト100等からライトコマンドWCd1を受けた場合、トラックTRm―2では1トラック分以下のライト処理となるために、トラックTRm―2が訂正可能トラックから訂正不可能トラックになり得る。そのため、MPU60は、ライトコマンドWCd1のトラックTRm―2に対応する訂正不可能化コマンドデータとトラックTRm―2とをキャッシュ、例えば、ディスク10のシステムエリア10b、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に退避し、トラックTRm―2のライト処理を実行しない。言い換えると、MPU60は、トラックTRm―2の円周位置CP4から円周位置CPRまでの訂正不可能化コマンドデータ(更新データ)とトラックTRm―2とをキャッシュ、例えば、ディスク10のシステムエリア10b、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に退避し、トラックTRm―2のライト処理を実行しない。
【0155】
MPU60は、ライトコマンドWCd1のトラックTRm―2に対応する訂正不可能化コマンドデータ(更新データ)とトラックTRm―2とをキャッシュに退避した場合、アイドル時に、ライトコマンドWCd1のトラックTRm―2に対応する訂正不可能化コマンドデータ(更新データ)とトラックTRm―2とに基づいて、トラックTRm―2にリードモディファイライトを実行する。言い換えると、MPU60は、トラックTRm―2の円周位置CP4から円周位置CPRまでの訂正不可能化コマンドデータ(更新データ)とトラックTRm―2とをキャッシュに退避した場合、アイドル時に、トラックTRm―2の円周位置CP4から円周位置CPRまでの訂正不可能化コマンドデータ(更新データ)とトラックTRm―2とに基づいて、トラックTRm―2にリードモディファイライトを実行する。
【0156】
また、MPU60は、ライトコマンドWCd1のトラックTRm―2に対応する訂正不可能化コマンドデータとトラックTRm―2とをキャッシュに退避し、且つホスト100等からライトコマンドWCd2を受けた場合、ライトコマンドWCd1のトラックTRm―2に対応する訂正不可能化コマンドデータとライトコマンドWCd2とをトラックTRm―1にライトする。言い換えると、MPU60は、トラックTRm―2の円周位置CP4から円周位置CPRまでの訂正不可能化コマンドデータ(更新データ)とトラックTRm―2とをキャッシュに退避し、且つホスト100等からライトコマンドWCd2を受けた場合、トラックTRm―2の円周位置CP4から円周位置CPRまでの訂正不可能化コマンドデータ(更新データ)とライトコマンドWCd2とをトラックTRm―1にライトする。
【0157】
図17に示した例では、MPU60は、ホスト100等からライトコマンドWCd1を受けた場合、トラックTRm+2では1トラック分以下のライト処理となるために、トラックTRm+2が訂正可能トラックから訂正不可能トラックになり得る。そのため、MPU60は、ライトコマンドWCd1のトラックTRm+2に対応する訂正不可能化コマンドデータとトラックTRm+2とをキャッシュ、例えば、ディスク10、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に退避し、トラックTRm+2のライト処理を実行しない。言い換えると、MPU60は、トラックTRm+2の円周位置CPSから円周位置CP3までの訂正不可能化コマンドデータとトラックTRm+2とをキャッシュ、例えば、ディスク10、揮発性メモリ70、不揮発性メモリ80、又はバッファメモリ90に退避し、トラックTRm+2のライト処理を実行しない。
【0158】
MPU60は、ライトコマンドWCd1のトラックTRm+2に対応する訂正不可能化コマンドデータ(更新データ)とトラックTRm+2とをキャッシュに退避した場合、ライトコマンドWCd1のトラックTRm+2に対応する訂正不可能化コマンドデータ(更新データ)とトラックTRm+2とに基づいて、アイドル時に、トラックTRm―2にリードモディファイライトを実行する。言い換えると、MPU60は、トラックTRm+2の円周位置CPSから円周位置CP3までの訂正不可能化コマンドデータ(更新データ)とトラックTRm+2とをキャッシュに退避した場合、アイドル時に、トラックTRm+2の円周位置CPSから円周位置CP3までの訂正不可能化コマンドデータ(更新データ)とトラックTRm+2とに基づいて、トラックTRm―2にリードモディファイライトを実行する。
【0159】
また、MPU60は、ライトコマンドWCd1のトラックTRm+2に対応する訂正不可能化コマンドデータとトラックTRm+2とをキャッシュに退避し、且つホスト100等からライトコマンドWCd3を受けた場合、ライトコマンドWCd1のトラックTRm+2に対応する訂正不可能化コマンドデータとライトコマンドWCd3とをトラックTRm+2にライトする。言い換えると、MPU60は、トラックTRm+2の円周位置CPSから円周位置CP3までの訂正不可能化コマンドデータとトラックTRm+2とをキャッシュに退避し、且つホスト100等からライトコマンドWCd3を受けた場合、トラックTRm+2の円周位置CPSから円周位置CP3までの訂正不可能化コマンドデータとライトコマンドWCd3とをトラックTRm+2にライトする。
【0160】
図18は、変形例2に係る退避処理の一例を示すフローチャートである。
MPU60は、ユーザデータ領域10aの所定の訂正可能領域、例えば、訂正可能トラックにデータをライトするライトコマンドを受ける(B1801)。MPU60は、ライトコマンドに従ってライトした際にこのライトコマンドに対応する訂正可能領域、例えば、訂正可能トラックが訂正不可能領域、例えば、訂正不可能トラックになるか訂正不可能領域、例えば、訂正不可能トラックにならないかを判定する(B1802)。言い換えると、MPU60は、ホスト100から受けたコマンドが訂正不可能化コマンドか訂正不可能化コマンドでないかを判定する。訂正不可能領域、例えば、訂正不可能トラックにならないと判定した場合(B1802のNO)、MPU60は、このライトコマンドに対応するデータをユーザデータ領域10aの所定の訂正可能領域、例えば、訂正可能トラックにライトし(B1803)、処理を終了する。
【0161】
訂正不可能領域、例えば、訂正不可能トラックになると判定した場合(B1802のYES)、MPU60は、キャッシュに空きがあるか空きがないかを判定する(B1804)。キャッシュに空きがないと判定した場合(B1804のNO)、MPU60は、B1803の処理に進む。
【0162】
キャッシュに空きがあると判定した場合(B1804のYES)、MPU60は、キャッシュにこのライトコマンド(訂正不可能化コマンド)に対応するデータ(訂正不可能化コマンドデータ)(とこの訂正不可能化コマンドに対応するユーザデータ領域10aの訂正可能トラック(訂正不可予定トラック)のデータ(訂正不可予定データ))をキャッシュに退避し(B1805)、処理を終了する。
【0163】
図19は、変形例2に係る退避処理の一例を示すフローチャートである。
MPU60は、ユーザデータ領域10aの所定のトラックにデータをライトするライトコマンドを受ける(B1801)。MPU60は、ライトコマンドに従ってライトした際にこのライトコマンドに対応するトラックがトラック単位のエラー訂正が訂正不可能となるライト、例えば、1トラックの途中までのシーケンシャルライト、又はランダムライトを許可されていないかランダムライトを許可されているかを判定する(B1901)。このトラックがランダムライトを許可されていると判定した場合(B1901のNO)、MPU60は、このライトコマンドに対応するデータをユーザデータ領域10aのこのトラックにライトし(B1803)、処理を終了する。
【0164】
このトラックがランダムライトを許可されていないと判定した場合(B1901のYES)、MPU60は、キャッシュに空きがあるか空きがないかを判定する(B1804)。キャッシュに空きがないと判定した場合(B1804のNO)、MPU60は、B1803の処理に進む。
【0165】
キャッシュに空きがあると判定した場合(B1804のYES)、MPU60は、キャッシュにこのライトコマンドに対応するデータとこのコマンドに対応するユーザデータ領域10aのトラックのデータとをキャッシュに退避し(B1805)、処理を終了する。
【0166】
変形例2によれば、磁気ディスク装置1は、禁止領域ライトコマンドをホスト100等から受けた場合、他の記録領域に空き領域があるか空き領域がないかを判定する。磁気ディスク装置1は、他の記録領域に空き領域があると判定した場合、この禁止領域ライトコマンドに対応する禁止領域コマンドデータ、及びランダムライト禁止データを他の記録領域に退避し、この禁止領域ライトコマンドを実行しない。磁気ディスク装置1は、他の記録領域に空き領域がないと判定した場合、禁止領域ライトコマンドに対応する禁止領域コマンドデータをランダムライト禁止トラックにライトする。
【0167】
また、磁気ディスク装置1は、訂正不可能化コマンドをホスト100等から受けた場合、他の記録領域に空き領域があるか空き領域がないかを判定する。磁気ディスク装置1は、他の記録領域に空き領域があると判定した場合、この訂正不可能化コマンドに対応する訂正不可能化コマンドデータ、及び訂正不可予定データを他の記録領域に退避し、この訂正不可能化コマンドを実行しない。磁気ディスク装置1は、他の記録領域に空き領域がないと判定した場合、訂正不可能化コマンドに対応する訂正不可能化コマンドデータを訂正不可予定トラックにライトする。
【0168】
トラックECCを実行できないトラックに対するDOLは、厳しい値に設定されるため、ライトフォルト(Write Fault)が発生しやすいため、ライトパフォーマンス(Write Performance)が低下し得る。また、トラックECCを実行できないトラックに対するライト回数が低く設定され得るため、頻繁にリフレッシュ処理を実行する必要があり、ライトパフォーマンスが低下し得る。変形例2では、ライトコマンドを受けた場合にライトコマンドに対応するデータを一時的にキャッシュに退避し、トラックECCが実行できないトラックをトラックECCが実行できるトラックに変更する処理を実行する。そのため、磁気ディスク装置1は、効率的にライト処理を実行できる。つまり、磁気ディスク装置1は、ライトパフォーマンスを向上できる。したがって、磁気ディスク装置1は、信頼性を向上することができる。
【0169】
いくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0170】
1…磁気ディスク装置、10…磁気ディスク、10a…ユーザデータ領域、10b…システムエリア、12…スピンドルモータ(SPM)、13…アーム、14…ボイスコイルモータ(VCM)、16…アクチュエータ、15…ヘッド、15W…ライトヘッド、15R…リードヘッド、20…ドライバIC、30…ヘッドアンプIC、40…リード/ライト(R/W)チャネル、50…ハードディスクコントローラ(HDC)、60…マイクロプロセッサ(MPU)、70…揮発性メモリ、80…不揮発性メモリ、90…バッファメモリ、100…ホストシステム(ホスト)、130…システムコントローラ。