ここで、ドライブ側の立場から、不良セクタの修復について見ていきます。
不良セクタを修復する。
代替セクタを割り当てる。
問題のあるセクタを予備領域へ切り替える。
言葉だけを見ると、単純な処理のように思えます。
しかし、実際にはそれほど簡単ではありません。
なぜなら、不良セクタをいきなり代替セクタへ切り替えてしまうと、そのセクタに記録されていた情報を失ってしまう可能性があるためです。
つまり、不良化したセクタを安全に代替するには、本来、そのセクタに記録されているデータを読み出せる必要があります。
読み出せたデータを代替セクタへ移し、以後は新しい場所を使う。
この流れであれば、データを維持したままセクタを置き換えることができます。
そのため、ドライブは読み取り困難なセクタに対して、何度も再試行を行い、できる限りデータを読み出そうとします。
しかし、この再試行処理には時間がかかります。
不良セクタが少数であればまだ対応できますが、不良セクタが塊で発生している場合、その一つ一つで再試行が発生し、動作が大きく遅延します。
これが、コピーが極端に遅くなったり、復旧作業が進まなくなったりする原因になります。
ここで、少し見方を変えてみます。
もし、その不良セクタに対して行われる処理が、読み込みではなく書き込みだった場合はどうでしょうか。
たとえば、以前はデータが保存されていたものの、すでに削除され、現在は使用されていない領域だったとします。
そこへ新しいデータを書き込む場合、古いデータを読み出して保持する必要はありません。
この場合、ドライブは問題のあるセクタを避け、代替セクタへ新しいデータを書き込むことができます。
つまり、読み込みでは代替できなかったセクタでも、書き込み時には代替処理が進むことがあります。
このため、不良セクタの代替処理は、多くの場合、書き込みをきっかけに実行されます。
それなら、普段の動作中に自動で不良セクタをどんどん代替していけばよいのではないか。
そう考えたくなります。
しかし、ここにも大きな問題があります。
常に安全性を最優先するのであれば、書き込み前や書き込み後に、その領域が正しく読めるかを細かく確認する必要があります。
さらに、古いデータの状態や、新しく書き込んだデータの整合性まで確認し続ける必要があります。
ところが、そのような確認を常時行うと、ドライブの性能は大きく低下します。
読み書きのたびに追加確認が発生すれば、速度が落ち、応答性も悪くなります。
特に現在のドライブでは、速度、容量、寿命、コスト、消費電力など、さまざまな要素とのバランスが求められています。
そのため、データの安全性だけを最優先にした設計にはなっていない場合があります。
SSDであっても同じです。
SSDは内部で高度なエラー訂正やウェアレベリング、予備領域管理を行っています。
しかし、それでもすべての書き込みや読み込みに対して、常に完全な安全確認を行っているわけではありません。
速度ベンチマークや体感性能が重視される以上、常時すべてを厳密に検査するような仕組みは、性能面で不利になります。
つまり、ドライブはデータを保存するための装置でありながら、実際の設計では、データの安全性だけでなく、速度やコスト、寿命とのトレードオフの中で動作しています。
ここが重要な点です。
ドライブは、必ずしも「データを絶対に守る装置」ではありません。
あくまで、限られた条件の中で、できるだけ高速に、できるだけ安定して、データを読み書きする装置です。
そのため、不良セクタが発生した場合でも、すぐに完全な保護処理が行われるとは限りません。
読み込み時には再試行で粘り、書き込み時に代替処理が進む。
そのような仕組みになっていることがあります。
この構造を理解すると、不良セクタの検出と修復が、なぜ単純ではないのかが見えてきます。
データを守るためには、ドライブ側の自動処理だけに頼るのではなく、定期的な検査と、別媒体へのバックアップが必要です。
ドライブは便利で高性能な装置です。
しかし、データの安全性は、案外、性能や運用上の都合と引き換えになっている部分があります。
このため、ドライブ検査とバックアップによって、先回りして守る必要があるのです。
