
私の Linux システムが syslog に SMART エラーを吐き出すようになりました。原因を突き止めたところ、ディスク上の 1 つのブロックに問題があるようです。ディスクにその 1 つのブロックを簡単に再割り当てさせるにはどうしたらよいでしょうか。そのプロセスでどのファイルが破壊されたのか知りたいです。(ディスク上の 1 つのブロックに障害が発生すると、他のブロックにも障害が発生する可能性が高いことは承知しています。私は継続的にバックアップを取っており、このディスクが機能し続けるように努めたいだけです。)
ウェブで検索すると不良ブロックの HOWTOは、マウントされていないディスクでの手動プロセスについて説明しています。複雑でエラーが発生しやすいようです。Linuxでこのプロセスを自動化するツールはありますか?他の唯一の選択肢はメーカーの診断ツールしかし、それは何が破壊されたかについての報告なしに不良ブロックを上書きすることになると思います。最悪の場合、ファイルシステムのメタデータになる可能性があります。
問題のディスクはプライマリ システム パーティションです。ext3fs と LVM を使用しています。以下は syslog からのエラー ログと smartctl からの関連ビットです。
smartd[5226]: Device: /dev/hda, 1 Currently unreadable (pending) sectors
Error 1 occurred at disk power-on lifetime: 17449 hours (727 days + 1 hours)
... Error: UNC at LBA = 0x00d39eee = 13868782
完全なsmartctlダンプがありますペーストビンで。
答え1
試してみるといいでしょうhdparm --write-sector <LBA> /dev/ice
。
他にこれを行う方法は知りません。LBA をファイルシステム ブロックに手動で変換する必要があります (既にお分かりのとおり)
答え2
私は以前、WD 用のディスク ファームウェアを作成しており、不良ブロックを再割り当てするファームウェアを作成したことがあります。
まず、不良ブロックのほとんどは書き込みではなく読み取り時に検出されます。書き込みは盲目的に行われ、つまりデータはチェックされずに書き込まれます。したがって、書き込み時にメディアが不良である場合、ホストがそのセクターを読み取るまで、そのことに気付くことはありません。正しいセクターを見つけるために書き込み時に読み取られるセクターの小さな部分 (セクター ヘッダー) があるため、セクター ヘッダーの読み取りでエラーが発生した場合、ドライブはセクターを再割り当てし、書き込みコマンドから受信したデータを使用して書き込みます。ただし、不良ブロックの大部分は読み取り時に検出され、セクターへの書き込みが成功したからといって、メディアが正常である、またはセクターが再割り当てされたことを意味するわけではありません。
次に、不良ブロックの再割り当て (再割り当てとも呼ばれます) について説明します。はい、通常、ドライブは、エラーがかなりひどい場合 (つまり、ECC 障害がかなりひどい場合) にセクターの再割り当てを試行しますが、ドライブは ECC 修正後にデータを回復できます。通常、これは自動的に行われます。唯一の例外は、ホストが事前にドライブに自動再割り当てを行わないように指示できる場合ですが、これはめったに行われません。
では、ドライブが読み取りを行ってもデータを回復できない場合はどうなるでしょうか。何も起こりません。エラーはホストに報告されますが、再割り当ては行われません。問題は、ドライブがセクターを再割り当てすることはできるものの、新しく再割り当てされたセクターにどのようなデータを書き込むべきかがまったくわからないことです。たとえば、大量のゼロを書き込んだ後にセクターを再度読み取ると、データが有効でないことを示すことなくすべてゼロが返されます。これは、本質的にはデータ破損と同じです。ドライブは、さまざまな理由 (たとえば、ドライブが新しいホストに移動された場合) でホストがエラーを追跡しているとは期待できないため、データを回復できない場合は何もしないことが最善の策です。
ただし、最近のドライブは、不良セクターを再割り当てできない場合、その場所を保存します。再割り当てを待機している不良セクターの数は、SMART データで確認できます。再割り当てを待機している不良セクターの 1 つに書き込みが行われると、再割り当て後にドライブに書き込む有効なデータがあるため、再割り当てが行われます。したがって、不良セクターに書き込むと再割り当てされるという話は、実際には半分しか真実ではありません。ドライブが自動的に再割り当てできない不良セクターをすべて検出できるように、最初にドライブを読み取る必要があります。したがって、ドライブ全体に書き込みを行うと、SMART データには再割り当てを待機している不良セクターがないと表示されますが、必ずしもドライブのすべての不良セクターがクリアされているわけではありません。したがって、ドライブのすべての不良セクターを本当にクリアしたい場合は、最初にドライブ全体を読み取り、次にドライブ全体に書き込むのが最善です (もちろん、これによりドライブ上の以前のデータはすべて破壊されます)。
再割り当てできない不良ブロックを処理する方法は他にもあります。ドライブが冗長 RAID 構成の一部である場合 (つまり、RAID 0 以外)、RAID ソフトウェアは不良セクターのデータを他のドライブから自動的に回復し、再割り当てされたセクターに書き込みます。SCSI ディスクには、ブロックに書き込む有効なデータがない場合でもホストが再割り当てを強制するために使用できる明示的なブロック再割り当てコマンドがありますが、その使用は非常に低レベルです。
答え3
あなたがしなければならないことは、次のことだけだと思います:
e2fsck -c /dev/hda1
/dev/hda1 が (マウントされていない) パーティションであると仮定します。または:
e2fsck -c -c /dev/hda1
(より遅い) 非破壊的な読み取り/書き込みテストを実行します。それでもマウント解除する必要があります。ただし、これによって失われたデータの詳細がわかるとは思いません。
答え4
バックアップがあり、これが物理的なエラーではなく論理的なエラーであることがわかっている場合は、ディスクをゼロにするのが最善の方法です。
私なら MHDD を使用しますが、これはかなり使いやすく、BIOS で HDD を IDE エミュレーションに設定し、作業が終わったら AHCI に戻すことを忘れなければ、何も心配する必要はありません。
MHDD を起動したら、ERASE コマンドでドライブ タイプを選択し、選択を確認します。
コーヒーを飲んでください。しばらく時間がかかるかもしれません。
ドライブがゼロにされた後、Remap を ON (デフォルトはオフ) に設定してスキャン (f4) を実行します。ドライブにまだ問題がある場合 (プラッターに物理的な損傷があり、ドライブが着実に下降傾向にあることを意味します)、このオプションは損傷した領域をドライブの正常な部分にマッピングすることで問題を「修正」します。
UNC エラーがない場合は、おめでとうございます。あなたとドライブは、今後何年も友人として付き合うことができます。