私はSATAドライブを持っていて、プログラムは合計8つの不良ブロックを識別しましたbadblocks
。おそらくドライブファームウェアはそれを再マップし、スペアパーツを交換できるはずです。問題のパーティションを再構築し、e2fsckを複数回実行するためにモードbadblocks
で実行しました。-n
何も変わらず、常に同じ8つの不良ブロックです。
実行するとにsmartctl
表示されます。Reallocated_Sector_Ct
0
8つの不良ブロックを実際に再マッピングするファームウェアを入手するにはどうすればよいですか?
答え1
ドライブは、セクタ全体の書き込み要求に新しいデータが提供された場合にのみ読み取れないセクタを再書き込みまたは再割り当てしようとすることがあります。badblocks
これをしないでください。何も変わりません。
「非破壊」読み書きモードは次のように動作します。
- 生データの読み取り
- テストパターンの作成
- テストパターンを読む
- 生データの書き込み
最初のステップが失敗した場合、つまりデータを読み取れない場合は、後で元のデータを回復できないため、そのセクタで書き込み操作を実行できません。これは破壊的な書き込みになりますが、特に非破壊的な変形を要求したため、まだ完了していません。
「非破壊的」方法は他の理由で元のデータを回復できない可能性があるため、いかなる場合でもデータを保存したいドライブで不良ブロックを実行しないでください。
とにかくこれを行うには、書き込みモードをbadblocks
使用する必要があります。デフォルトではすべてのデータが上書きされるので、オプションの引数を使用して上書きする必要がある特定のセクタ範囲形式-w
に範囲を絞り込みたいと思います。badblocks -w device [last_block [first_block]]
まず、読み取り専用の不良ブロックテストを実行してこれらのセクタを識別できます。
読み取り専用テスト:
# badblocks /dev/foobar
1000
ブロック1000に欠陥があるので、対応するブロックは具体的に扱う。
# badblocks -w /dev/foobar 1000 1000
しかし、これはまだ失敗するでしょう。なぜ?badblocks
デフォルトのブロックサイズである1024バイトが使用されるためです。
これは、セクタサイズが512バイトのデバイスの場合は正しくありません。不良ブロックは 1 つではなく 2 つのセクタを覆い、追加の損傷を引き起こします。また、セクタサイズが4096バイトのデバイスにも当てはまります。無効 - 不良ブロックは書き込みのみです。部分セクタでは完全なデータブロックを作成する必要があるため、再割り当てには機能しません。
したがって、上記の両方のコマンドは、ドライブの正しいブロックサイズ(物理セクタサイズ)(512または4096など)を指定する必要があります。
ブロックサイズが変更されると、報告されたブロック番号もそれに応じて変更されます。
# badblocks -b 512 /dev/foobar
2000
# badblocks -b 4096 /dev/foobar
250
それに応じて書き込みコマンドを調整できます。
# badblocks -b 512 -w /dev/foobar 2000 2000
# badblocks -b 4096 -w /dev/foobar 250 250
これにより、ドライブに問題のあるセクターを再割り当てする機会が提供されます。
それでも失敗した場合、別の可能性があります。指定されたデバイスがパーティションであるか、別の論理ドライブで物理ドライブと整列していない場合、すべての書き込みはソートされないため、最終的に4096ワードセクションが2つに書き込まれます。部分4096バイトセクタ。
ターゲットセクタを再配置しませんが、隣接セクタのデータを部分的に破壊します。
したがって、この方法には追加のデータ損失のリスクがあります。
答え2
最も簡単な方法は、問題を完全に意図的に無視することです。
ファームウェアは次の書き込み時に各セクタを再マップするので、それまで心配する必要はありません。
他のSMART属性に注意してください。バックアップがうまくいっていることを確認してください。交換ディスクに投資することを検討してください。
答え3
8つの不良ブロックを実際に再マッピングするファームウェアを入手するにはどうすればよいですか?
破損したセクタに書き込みます。
sudo hdparm --yes-i-know-what-i-am-doing --repair-sector SECTOR_NUMBER /dev/device
これは破損したセクタを0()に変える破壊的な作業です0x00
。
SMARTは最終的にそれほど「スマート」ではなく、常に失敗するのを見ます。つまり、ほとんどの場合、破損したセクタを再割り当てすることはできず、実行する操作を指示する必要があります。