web-dev-qa-db-ja.com

Linuxディスク上の1つの読み取り不可能なブロックを簡単に修復するにはどうすればよいですか?

LinuxシステムがsyslogでSMART=エラーをスローし始めました。私はそれを追跡しましたが、問題はディスク上の単一のブロックであると考えています。どうすれば簡単にディスクにそのブロックを再割り当てさせることができますか?ブロック?プロセスで破壊されたファイルを知りたい(1つのブロックがディスクで失敗した場合、他のブロックが続く可能性が高いことは承知しています。適切な継続的なバックアップがあり、このディスクを保持したいだけです。ワーキング。)

ウェブを検索すると、アンマウントされたディスクでの手動プロセスを説明する Bad block 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ダンプ Pastebinに があります。

22
Nelson

あなたは試すことができますhdparm --write-sector <LBA> /dev/ice

私はこれを行う他の方法を知りません-あなたはLBAを手動でファイルシステムブロックに変換する必要があります(すでに見つけたように)

12
James

以前はWDのディスクファームウェアを作成していましたが、以前は不良ブロックを再割り当てするファームウェアを作成していました。

まず、ほとんどの不良ブロックは書き込みではなく読み取りで検出されます。書き込みはブラインドで行われます。つまり、データはチェックされずに書き込まれます。したがって、書き込み時にメディアが不良である場合、ホストがそのセクターに対して読み取りを行うまで、そのことはわかりません。正しいセクターを見つけるために書き込み時に読み取られるセクターの一部(セクターヘッダー)があるため、セクターヘッダーの読み取りにエラーがある場合、ドライブはセクターを再割り当てし、受信したデータでセクターを書き込みます。書き込みコマンドから。ただし、不良ブロックの大部分は読み取りで検出されます。書き込みがセクターに成功したからといって、メディアが良好である、またはセクターが再割り当てされたことを意味するわけではありません。

次に、不良ブロックの再割り当て(再割り当てとも呼ばれる)について説明します。はい、通常、ドライブはエラーが十分に悪い場合(つまり、ECC障害が十分に悪い場合)にセクターの再割り当てを試みますが、ドライブはECC訂正後もデータを回復できます。通常、これは自動的に行われます。唯一の例外は、ホストが以前にドライブに自動再割り当てを行わないように指示した可能性があることですが、これはめったに行われません。

ドライブが読み取りを行い、データを回復できない場合はどうなりますか?何もない。エラーはホストに報告されますが、再割り当ては行われません。問題は、ドライブがセクターを再割り当てできる可能性があることですが、新しく再割り当てされたセクターにどのデータを書き込むかについては、ほとんどわかりません。たとえば、ゼロの束を書き込んだだけで、そのセクターが再度読み取られた場合、データが無効であることを示すことなくすべてのゼロが返されます。これは基本的にデータの破損と同じです。ドライブは、さまざまな理由(たとえば、ドライブが新しい​​ホストに移動された場合はどうなるかなど)でエラーを追跡するホストに頼ることができないため、データの処理が可能なときに何もしないことが最善策です回復する。

ただし、最近のドライブは、再割り当てできない場合に不良セクターの場所を保存します。再割り当てを待機している不良セクターの数は、SMARTデータにあります。再割り当てを待機している不良セクターの1つに書き込みが行われると、ドライブが再割り当て後に書き込む有効なデータです。したがって、不良セクターへの書き込みによってデータが再割り当てされると人々が言っ​​た場合、それは実際には半分の話にすぎません。ドライブが読み取れないすべての不良セクターをドライブが検出できるように、ドライブを最初に読み取る必要があります自動的に再割り当てされます。したがって、ドライブ全体を書き込むことができ、SMARTデータは、再割り当てを待機している不良セクターがないことを示しますが、必ずしもすべての不良セクターのドライブをクリアしているわけではありません。本当にすべての不良セクターのドライブをクリアしたい場合は、まずドライブ全体を読み取ってから、ドライブ全体を書き込んでください(もちろん、ドライブ上の以前のデータはすべて破壊されます)。

再割り当てできない不良ブロックを処理する方法は他にもあります。ドライブが冗長RAID構成(つまり、RAID 0以外)の一部である場合、RAIDソフトウェアは、他のドライブから不良セクターのデータを自動的に回復し、再割り当てされたセクターに書き込みます。 SCSIディスクには、ブロックに書き込む有効なデータがない場合でもホストが再割り当てを強制するために使用できる明示的なブロックの再割り当てコマンドがありますが、その使用はかなり低レベルです。

32
tenner

私はあなたがしなければならないすべては:

e2fsck -c /dev/hda1

/ dev/hda1が(マウントされていない)パーティションであると仮定します。または:

e2fsck -c -c /dev/hda1

(遅い)非破壊的な読み書きテストを実行します。マウントを解除する必要があります。ただし、これによって失われたデータの詳細がわかるとは思いません。

2

マイケルはそれを正しく理解しており、ほとんどの場合、安価なドライブを交換するだけです。ただし、バックアップがなく、ドライブから重要なデータを取得できない場合、またはドライブを修復したい場合は、最高レベルで spinrite を使用してみてください。

数年前にノイズを出し始めたラップトップドライブを持っていました。 Badblocksは、ドライブに118個程度の不良ブロックがエンドユーザーに表示されていることを示しました。私はすでにSpinRiteのコピーを持っているので、新しいドライブを購入する前に試してみることにしました。ドライブでスピンライトを実行した後、badblocksは0の不良ブロックを示し、ノイズは停止しました。それ以来、ドライブは2年以上稼働しています。

2
3dinfluence

バックアップがあり、これが論理的なエラーであり、物理的なエラーではないことがわかっている場合、これに対処する最善の方法は、ディスクをゼロにすることです。

私はMHDDを使用しますが、それはかなり簡単に使用できます。また、BIOSでHDDをIDE=エミュレーションに設定し、作業が完了したらAHCIに戻すことを覚えている限り、心配する必要はありません。 。

MHDDで起動したら、ERASEコマンドでドライブタイプを選択し、選択を確認します。

これにはしばらく時間がかかるかもしれません。

ドライブがゼロになった後、remapをONに設定してscan(f4)を実行します(デフォルトはオフです)。それでもドライブに問題がある場合(プラッターに物理的な損傷があり、ドライブが下り坂にある場合)、このオプションは、損傷した領域をドライブの正常な部分にマッピングすることで問題を「修正」します。

UNCエラーがない場合は、おめでとうございます。ドライブとドライブは、何年もの間友達であり続けることができます。

1
Jahith