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