web-dev-qa-db-ja.com

不良セクタ/ハードディスクにゼロを書き込めず、再割り当てされたセクタをカウントしない

現在保留中のセクターが「45」であると報告しているドライブがあります。私はbadblocksを使用してセクターを識別し、ddを使用してそれらにゼロを書き込もうとしています。

私が理解していることから、不良セクタに直接データを書き込もうとすると、再割り当てがトリガーされ、現在保留中のセクタが1つ減り、再割り当てされたセクタ数が増えるはずです。

ただし、このディスクでは、Reallocated_Sector_CtとReallocated_Event_Countの両方のraw値が0であり、不良セクタにゼロを書き込もうとすると、ddがI/Oエラーで失敗します。 ddは正常に機能しますが、適切なセクターに書き込む場合は問題ありません。

# dd if=/dev/zero of=/dev/sdb bs=512 count=1 seek=217152
dd: error writing ‘/dev/sdb’: Input/output error

これは、私のドライブに、何らかの方法で、再割り当てに使用する予備のセクターがないことを意味しますか?私のドライブは一般的にひどい人ですか? (ドライブは実際には私のものではありません。私は友人を助けています。彼らは安いドライブか何かを手に入れたかもしれません。)

関連する場合は、smartctl -iの出力を次に示します。

Model Family:     Western Digital Caviar Green (AF)
Device Model:     WDC WD15EARS-00Z5B1
Serial Number:    WD-WMAVU3027748
LU WWN Device Id: 5 0014ee 25998d213
Firmware Version: 80.00A80
User Capacity:    1,500,301,910,016 bytes [1.50 TB]
Sector Size:      512 bytes logical/physical
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS (minor revision not indicated)
SATA Version is:  SATA 2.6, 3.0 Gb/s
Local Time is:    Fri Oct 18 17:47:29 2013 CDT
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

更新:
ディスクでshredを実行したため、Current_Pending_Sectorがゼロになりました。ただし、Reallocated_Sector_CtとReallocated_Event_Countはまだゼロであり、ddは以前はできなかったセクターにデータを書き込むことができるようになりました。これは私に他のいくつかの質問を導きます:

  • 再割り当てがディスクによって記録されないのはなぜですか?セクターに直接データを書き込むことができるようになり、以前はできなかったため、再割り当てが行われたと想定しています。

  • シュレッドがddではなく再割り当てを引き起こしたのはなぜですか?シュレッドがゼロだけでなくランダムなデータを書き込むという事実は違いを生みますか?

10
MetaNova

WD15EARSドライブ(および最近製造された他のほとんどのドライブ)は Advanced Format を使用します。これは、このドライブの実際の物理セクターサイズが4 KiBであり、従来の512バイトセクターサイズがエミュレートされていることを意味します。このため、単一の4 KiB物理セクターが故障すると、対応する8つのエミュレートされた512バイトセクターすべてが一度に読み取り不能になります。

smartctlからのSector Size: 512 bytes logical/physical出力は正しくありません。 一部のWD15EARSドライブは間違った物理セクターサイズを報告します —ドライブのファームウェアバージョンがその点で壊れているようです。 )

さらに、単一のエミュレートされた512バイトセクターが書き込まれる場合、Advanced Formatドライブは、実際には4 KiB物理セクター全体を読み取り、対応する512バイト部分を変更してから、物理セクター全体をメディアに書き込む必要があります。メディアに問題がない場合、この読み取り-変更-書き込み操作は、実際の512バイトの物理セクターを備えたドライブと比較して大幅な速度低下を引き起こします。ただし、4 KiBの物理セクターが不良で読み取りができない場合、セクターを完全に書き換えない書き込み操作は失敗します。このため、ddbs=512 count=1を使用してこのようなドライブにセクターの再割り当てを強制することはできません。少なくともbs=512 count=8を使用し、seek=のセクター番号を確認する必要があります。オプションは8の倍数です(これは、「Windows XP互換」ジャンパーがインストールされていないことを前提としています。そうでない場合は、このジャンパーによって追加されるアライメントオフセットも考慮する必要があります。)

ddを使用して再割り当てを強制すると失敗する可能性がある別の理由は、デフォルトでLinuxがブロックレイヤーのキャッシュを使用してブロックデバイスにアクセスするためです。これにより、ソフトウェアで読み取り-変更-書き込み操作が発生する可能性があります。読み取り不可能なセクターが検出されました。 oflag=directオプションを追加して、of=...で指定されたデバイスのこのキャッシュをバイパスできます(入力デバイスに適用されるiflag=directオプションもあります)。

9
Sergey Vlasov

最近これを行う必要があり、ディスク全体でシュレッドを実行すると非常にうまく機能することがわかりました。シュレッドはディスケットを除いて本来の目的には役に立ちませんが、不良ブロックで自己修復を実行するために必要なことを実行します。

0
emil