vol.11 リードエラーの解消法

2013/06/21

HDDのリードエラーは、原因が種々存在し、その解消は永遠の課題であることを説明してきました。しかし、実際にユーザの認識するリードエラーは、HDDの内部に用意されたECC(error check and correction:誤り検出訂正)機能や、リードリトライ機能によって回復されてしまうので表に表れず、少なくともその時点でのリードリトライ動作によって回復できなかったものだけが、実際のエラーとしてユーザに認識されることは、既にご理解いただけているものと思います。それでも、そのリードエラーがデータ復旧業者に持ち込まれるHDDの不良原因の半数以上を占めていることも既に説明しました。

では、データ復旧業者はそのリードエラーが原因で持ち込まれたHDDからどうやってデータを回収するのでしょうか。これまでの復習も兼ねて説明します。

1.静的なリードエラー

静的なリードエラーとは、HDDの持つ基本的な特性(ヘッドのトラッキング性能)においても、自然発生的に発生し、東芝の資料から推測すると、1TBのHDDに存在する全てのセクタにアクセスしたと仮定すると、総セクタ数19.5億の0.3%に相当する585万セクタでリードエラーが検出され、リードリトライ機能が動作してそれを解消していることになります。単純に確率計算をすると、1回のリトライ(ヘッドを再度シークさせるだけ)で99.7%ずつ解消することになるので、19.5億→585万→17,550→53→0.16セクタと、ヘッドシークを含む再読み出し動作を4回繰り返すことによって、1セクタ以下の発生確率にまで改善することができるので、それが立派なリードエラーを回復させるリトライ手段に成り得るのです。そして、実際にはそれだけでなく、トラック位置に対する強制的なオフセットやA-D変換フィルター定数の変更まで含めたリードリトライ機能が用意されているので、リードエラーの顕在化が予防できているのです。ですから、全く偶発的に発生するリードエラーであればそれで十分なのです。

2.データ復旧で取り扱われるリードエラー

データ復旧業者に持ち込まれるリードエラーの場合は、普通のリードリトライ動作では回復できない(短時間内でのリトライでは原因がリセットできないので再現性が高く、単純な確率計算が正しいことにならない)、例えて言うのであれば、偶発的なリードエラーが「普通のサイコロ」であるとすれば、「原因(仕掛け)が有る、いかさま賭博で使われるような、再現性の高い(決まった目の出やすい)サイコロ」的なリードエラーであり、その要因は以下のようなものがあることを説明してきました。

(1).HDDを使用している環境に起因

  1. HDDの姿勢
  2. 使用状態での周囲温度
  3. 設置場所の振動、衝撃

(2).HDDの部品・材料に起因

  1. 金属の熱膨張
  2. ボールベアリングなどの部品の製造工作精度
  3. 静止最大摩擦と動摩擦の関係

(3).HDDの設計上の問題点

  1. 動作タイミング設計と実際物理的動作の差異
  2. 性能向上を目的とする、設計マージンの取り合い

3.リードエラーの解消方法

データ復旧業者が原因として判定する(した)リードエラーは、基本的には部品交換を必要せずにデータの回収が可能な状態ですから、データ復旧作業の第一段階のクローンドライブの作成が完了した時点で、100%のセクタからデータを読み出すことができていれば、それでデータ復旧作業が完了と言って良いことになります。

では、具体的にはどのような手段・方法が有効なのでしょうか。

(1).使用環境に起因する場合

可能な場合は、その環境を再現することで、HDDの姿勢を変えてみる、ドライヤーで暖める、冷蔵庫で冷やす、冷却用ファンで風を当てる等が有効に働きます。

(2).部品・材料・設計に起因する場合

熱膨張やオイルの粘度変化は、当然上記の環境に対する手法が有効ですので、それ以外の手段は、当然データ復旧専用のクローン作成用のソフトや装置などを用いて行うことが必要であり、そのソフトや装置に以下のような機能が存在することが必要です。

①リードリトライで解消しないリードエラーを検出した場合には、読み飛ばす(スキップ)して後回しにする。
(これによって、最初のエラー発生から時間が経過するので、ボールベアリング内部のボールの位置が変わり、繰り返し再現性がリセットされることが期待できる。)

②最後のセクタまで一通り読み出した後に、セクタ番号の大きい方(リードエラーの検出された順番で後ろ)から、後ろから順番に、1セクタずつ遡って読み出す。(逆読みする)。

この、「1セクタずつ遡って読み出す」が、なぜ有効なのでしょうか。そのような動作が可能な、データ復旧専用の装置を取り扱っている業者でさえ、理由を正しく理解し説明していることが少ないようなので、ここで解説しておきます。

HDDでは、逆読みすると言っても、プラッタが逆回転する訳ではないので、物理的に後ろにあるセクタから前方に遡るためには、1セクタ読み出す毎に、プラッタが1回転して戻ってくるのを待つ必要があります。(このために読み出し速度は、極端に遅くなります)そうすると、通常の場合のヘッドのトラッキングサーボ機能は、プラッタに書かれた位置情報を読み出して行うFeedback制御と、既に得られた位置情報を元に、新しいトラックに移動した場合でも有効に制御するためのFeedforward制御(予測制御)の双方を用いているのですが、Feedback制御ではそのループが有効に働くまでのタイムラグを持っているので、初めの1回転と次の1回転では、待ち時間を持つことでトラッキング性能が改善される可能性を持っているのです。また、ヘッドの移動(シーク)を伴って読み書きが行われた時に発生する、ダイナミック(動的)なリードエラーであれば、遡ってセクタにアクセスすることで条件が変わり、シークを伴わずに読み出すことになるので、ダイナミックなエラーを解消する可能性さえ持つことになるのです。いままでその理由を知らずに使っていた方には「目からウロコ」ではないですか? 何故ダイナミック(動的)なリードエラーの存在を説明した理由もここにあるのです。

リードエラーは、それを解消してデータを読み出すことが可能であるとは言え、状態の悪いものでは1台のクローンドライブを完成させるのに、1ヶ月を超える作業時間を必要とする場合も存在することと、「リードエラーは論理障害ではなく、物理障害であること」をここで繰り返して記しておきます。