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


22

LinuxシステムでsyslogにSMARTエラーがスローされ始めました。私はそれを追跡し、問題はディスク上の単一ブロックであると信じています。その1つのブロックを再割り当てするディスクを簡単に取得するにはどうすればよいですか?その過程でどのファイルが破壊されたか知りたいのですが。(ディスクで1つのブロックに障害が発生した場合、他のブロックがそれに続く可能性が高いことを認識しています。適切な継続バックアップがあり、このディスクを機能させたいと考えています。)

Webを検索すると、マウントされていないディスクでの手動プロセスを説明する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ダンプありますペーストビンには


ディスクファームウェアは読み取り時に不良ブロックを自動的に再マッピングすると考えたので、理論的には既に完了しています。以下に示すように、fsck(またはFSの正しいequiv)を実行して、オーバーレイするFSがまだ安定していることを確認します。
BuildTheRobots

2
私の理解では、ディスクファームウェアは読み取りではなく、書き込み時にのみブロックを再マッピングします。だから本当に問題のブロックに書き込みを強制する必要があります。
ネルソン

1
私はついにこのディスクを廃止しました。数か月は問題なく動作しましたが、5回目の読み取りエラーの後、私はそれをあきらめました。
ネルソン

回答:


12

試すことができhdparm --write-sector <LBA> /dev/iceます。

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


ああ、それは新しい旗です!これにより、不良ブロックの再割り当てが確実に処理されます。今、私が必要とするのは、それが何を壊すかを見つける簡単な方法です。
ネルソン

3
この方法を使用してディスクを修正したので、これが正しい方法であると言えます。問題のセクターへの書き込みを強制すると、ドライブがセクターに向かい、(a)正常な書き込みを取得するか、(b)再マップとともに永続的な不良秒が発生します。
エイブリーペイン

すばらしいです!そして、よりそんなに簡単smartmontools.sourceforge.net/badblockhowto.html
Janning

この反復プロセス(SMARTを介して次の不良セクタを探して、再割り当てを強制する)が単純なユーティリティで自動化されていないことは
奇妙

32

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

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

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

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

ただし、最新のドライブでは、不良セクタを再割り当てできない場合、不良セクタの場所を保存します。再割り当てを待機している不良セクタの数は、SMARTデータで確認できます。起こるのは、再割り当てを待っている不良セクタの1つに書き込みが行われた場合、再割り当て後にドライブに書き込む有効なデータがドライブにあるため、再割り当てが行われることです。したがって、不良セクタへの書き込みがそれを再割り当てすると人々が言うとき、それは実際には物語の半分にすぎません。ドライブは、自動的に再割り当てできない不良セクタをすべて検出できるように、最初に読み取る必要があります。したがって、ドライブ全体を書き込むことができ、SMARTデータは再割り当てを待機している不良セクタはないと言いますが、必ずしもすべての不良セクタのドライブをクリアしたわけではありません。したがって、すべての不良セクターのドライブを本当に消去したい場合は、

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


1
少なくともいくつかのSeagate HDDがWrite-Read-Verifyをサポートしていることにも言及する価値があるかもしれませんhdparm -R。(すべての書き込みは今、その後の読み取りをincurrsので、IOPS、スループットと書き込みの約半分の書き込み)これは重大な書き込み性能ペナルティが伴いますが、あなたのハードウェアサポートしている場合は、それとワークロードは読み取り重いが、これは非常に実用的かもしれ予防措置。
CVn

2

あなたがしなければならないことは次のとおりです。

e2fsck -c /dev/hda1

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

e2fsck -c -c /dev/hda1

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


しかし、それは悪いブロックに関するSMARTからの情報を使用していないように見えるのは残念です。SMARTから不良ブロック情報を使用し、それらを避けるかで説明したように、影響を受けるファイルを修復しようとする一切のfsckツールはありませんなぜ私が疑問に思うsmartmontools.sourceforge.net/badblockhowto.htmlまたはserverfault.com/a/106130/68972が。 ..
imz-イワンザカリヤシェフ14年

2

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

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


ネルソンは、あなたが聞きたいものではないすべての答えをただ投票するつもりですか?正常なドライブは、不良ブロックを自動的に再マッピングします。これを強制するために何かをするためにあなたの道から出なければならない場合、ドライブはもはや健康ではなく、交換する必要があります。
3dinfluence

いいえ、質問に回答しなかったため、1つの回答のみをダウンボットしました。あなたはスピライトを提案しました、ありがとう!私の理解では、健全なドライブは、書き込まれるまで不良セクタを再マッピングしません。書き込みを強制する最も簡単な方法を見つけようとしています。マシューの提案に行き、fsckがそれを行うのに十分スマートかどうかを確認します。
ネルソン

申し訳ありませんが、2つの回答がすぐに投票され、あなたは私があなただと思った他の回答に回答しました。
3dinfluence

2
ブロックへの書き込みが失敗すると、不良セクタの再マップが発生することは正しいです。ファイルシステムに関する限り、破損したブロックがある場合、問題のブロックがメタデータブロックである場合、fsckは問題を解決することがあります。fsckは、メタデータ内のエラーを実際にスキャンして修正するだけです。そのため、データ自体については保証しません。BTRFSやZFSなどの次世代のファイルシステムは、冗長性がある場合、データエラーを検出できます。また、Spinriteは、スキャンの一環として、すべてのブロックで読み取り、反転データの書き込み、再読み取り、および反転を行う際にこれを強制します。
3dinfluence

1

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

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

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

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

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

UNCエラーがない場合、おめでとうございます。あなたのドライブは今後何年も友だちになれます。


-1

ディスクが故障している場合は、交換します。ばらばらになるリスクはありません。


ディスクが不良であることを知り、リスクを回避するためにバックアップを作成することを明示しました。
ネルソン

2
それは単にギャンブルをする気があるということです。私はそれが交換されるべきではないことを意味するとは思わない、ただあなたがそのアドバイスを無視しても構わないと思っているだけだ。ディスクがバラバラになると、バックアップによってシステムをシステム自体から救うことはできず、物事が悪化すると物事は非常に不安定になります。
マイケルグラフ

3
この回答はコメントである必要があります...質問は具体的で大げさです。したがって、これは答えではありません。
ピッツ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.