保留中の読み取り不可能なセクターとは、読み取りエラーを返し、最初の可能な機会にドライブが再マッピング用にマークしたセクターです。ただし、次の2つのいずれかが発生するまで、再マッピングを実行できません。
- セクターは正常に再読み取りされました
- セクターは書き直されます
それまでは、セクターは保留中のままです。したがって、これに対応する2つの対応する方法があります。
- 成功するまでセクターを再読しようとする
- そのセクターを新しいデータで上書きする
明らかに、(1)は非破壊的であるため、おそらく最初に試してみてください。ただし、ドライブが深刻な方法で故障し始めている場合は、不良領域から継続的に読み取りを行うと、故障が早くなる可能性があることに注意してください。 。保留中のセクターやその他のエラーが多く、ドライブ上のデータを気にする場合は、サービスを停止し、優れたツールddrescueを使用して、可能な限り多くのデータを回復することをお勧めします。次に、ドライブを廃棄します。
問題のセクターに不要なデータが含まれている場合、またはバックアップから復元できる場合は、そのセクターを上書きするのがおそらく最も早くて簡単なソリューションです。次に、ドライブの再割り当て済みおよび保留中のカウントを表示して、セクターが処理されたことを確認できます。
ファイルシステムでセクターが何に対応するかをどのようにして見つけますか?smartmontools Webサイト(こちら)で優れた記事を見つけましたが、それはかなり技術的であり、ext2 / 3/4およびreiserファイルシステムに固有のものです。
自分の(Mac)ドライブの1つで使用したより簡単な方法はfind / -xdev -type f -print0 | xargs -0 ...
、システム上のすべてのファイルを読み取るために使用することです。これを実行する前に、保留中のカウントを書き留めてください。セクターがファイル内にある場合、ファイルの読み取りに使用したツール(md5sumなど)から、そのパスを示すエラーメッセージが表示されます。次に、このファイルが正常に読み取られるまで、このファイルだけを再度読み取ることに注意を向けることができます。頻繁に使用されるファイルで、数回再読み取りする必要がある場合、これで問題が解決することがよくあります。エラーが解消した場合、またはすべてのファイルの読み取りでエラーが発生しなかった場合は、保留中のカウントを確認して、減少しているかどうかを確認してください。ある場合は、問題を読んで解決しました。
複数回試行してもファイルを正常に読み取れない場合(例:20)、ファイルまたはファイル内のブロックを上書きして、ドライブがセクターを再割り当てできるようにする必要があります。(パーティションではなく)ファイルにddrescueを使用して、一時ファイルにコピーしてから再度コピーすることにより、1つのセクターだけを上書きできます。この時点でファイルを単に削除するのは悪い考えであることに注意してください。これは、不良セクターが空きリストに入れられ、見つけるのが困難になるためです。セクタがフリーリストに追加されるため、完全に上書きするのも悪いことです。既存のブロックを書き換える必要があります。のnotrunc
オプションは、dd
これを行う1つの方法です。
エラーが発生せず、保留中のカウントが減少しなかった場合、セクターはフリーリストにあるか、ファイルシステムインフラストラクチャ(inodeテーブルなど)の一部である必要があります。すべての空き領域をcat /dev/zero >tempfile
で埋めてから、保留中の数を確認してください。それがダウンした場合、問題はフリーリストにあり、現在は解消されています。
セクターがインフラストラクチャ内にある場合、より深刻な問題が発生し、ディレクトリツリーを歩くだけでエラーが発生する可能性があります。この状況では、ドライブを再フォーマットし、必要に応じてオプションでddrescueを使用してデータを回復することが、唯一の賢明な解決策だと思います。
ドライブに非常に注意してください。セクターの再割り当ては炭鉱で非常に優れたカナリアであり、ドライブの故障を早期に警告する可能性があります。早期に行動を起こすことで、その後の壊滅的で非常に苦痛な地滑りを防ぐことができます。いくつかのセクターの再割り当ては、ドライブを破棄する必要があることを示すものではありません。最近のドライブはすべて、再割り当てを行う必要があります。ただし、ドライブがあまり古くない(1年未満)場合、または頻繁に新しい再割り当て(> 1 /月)が発生する場合は、できるだけ早く交換することをお勧めします。
それを証明するための経験的な証拠はありませんが、私の経験では、時々ディスク全体を読み取るかdd
、RAWディスクを使用するか、を使用してすべてのファイルを読み取ることにより、ディスクの問題を軽減できると示唆していますfind
。過去数年間に経験したほとんどすべてのディスクの問題は、めったに使用されないファイル、またはあまり使用されていないマシンで最初に発生しました。これは、セクターが頻繁に再読み取りされている場合、セクターが完全に読み取り不能になるまで待機するのではなく、そのセクターで軽微な問題を最初に検出したときにドライブに再割り当てする機会があるという点で、ヒューリスティックにも意味があります。ホストが何らかの方法で、読み取りまたは書き込みによって、またはSMARTテストの1つを実行することによってアクセスしない限り、ドライブはセクターに対して何も実行できません。
ディスク全体を読み取る、毎晩または毎週のcronジョブのアイデアを試してみたいと思います。現在、私は「貧乏人のRAID」を使用しています。この場合、マシンに2台目のハードドライブがあり、毎晩メインディスクをバックアップします。ある意味では、これは実際にはRAIDミラーリングよりも優れています。誤ってファイルを削除して削除した場合、バックアップディスクから昨日のバージョンをすぐに取得できるからです。一方、ハードウェアRAIDコントローラーは、ディスクの問題が発生したときに監視、報告、修正するために、バックグラウンドで多くの優れた作業を行っていると思います。私の現在のバックアップスクリプトはrsync
、変更されていないデータのコピーを回避するために使用していますが、すべてのセクターを再読み取りする必要があることを考慮すると、すべてをコピーするか、毎週rawディスク全体を読み取る別のスクリプトを作成する方が良いでしょう。