コマンドラインでLinuxのディスクサーフェスチェックを実行し、不良セクタを修復/再割り当てする方法は?

コマンドラインでLinuxのディスクサーフェスチェックを実行し、不良セクタを修復/再割り当てする方法は?

不良セクタのあるディスクを購入して修理し、RAID 6クラスタの一部として使用する予定でした。 Windowsでは不良セクタリカバリを実行でき、良い不良ブロックリカバリツールがありますが、Windowsではプロセスが非常に遅く、1セクタをリカバリするのに15分かかります。

私の経験によれば、Linuxは応答しないデバイスをよりよく処理するので、Linuxでの作業速度が速くなります。しかし、fsckマニュアルを確認しましたが、表面と不良ブロックの検索や不良ブロックの再割り当てのための便利なオプションが見つかりませんでした。

ハードディスクの表面をスキャンし、コマンドラインからLinuxの不良セクタを修復/再割り当てする方法は?

ベストアンサー1

この答えはディスクに関するものです。 SSDは異なります。また、そのディスクにデータがありません(または保持するデータがありません)。「コマンド1つでハードドライブの不良ブロックを回復できますか?」への私の答えディスクに機密データがある場合は、何をすべきかを調べてください。

少なくとも1990年代後半以降に製造されたディスクは、独自に不良ブロックを管理できます。すなわち、ディスクは、不良ブロックを予備セクタに透明に交換して不良ブロックを処理する。 (a) 読み出し時にブロックが「弱い」を発見したが、ECCはデータを回復するのに十分である。 (b) 書き込み時にセクタヘッダが不良であることがわかった。読んだときに以前に検出されました。セクタが破損していますが、データを回復できません。

ディスクファームウェアを使用すると、通常、SMARTプロパティを介してこのプロセス(少なくとも数)を監視できます。通常、再割り当てされたセクタの数が1つ以上あり、保留中のセクタの数が2つあります(読み取り時にエラーが検出され、ECCが失敗し、まだ記録されていません)。

ディスクの不良セクタを検索する方法は2つあります。

  1. smartctl -t offline /dev/sdXディスクファームウェアにオフラインサーフェススキャンを実行するように指示します。次に、完了するまでディスクをそのままにします(完全にアイドル状態が最も高速です)(「オフラインデータ収集状態」を確認smartctl -c /dev/sdX)。これは通常、SMARTの「変更できないオフライン」数を更新します。 (注:定期的にオフラインスキャンを自動的に実行するようにドライブを設定できます。)

  2. たとえば、Linuxにディスク全体を読み込むようにしますbadblocks -b 4096 -c 1024 -s /dev/sdX。これにより、通常、SMARTは「現在保留中のセクタ」の数を更新します。

上記のいずれのシナリオでも、再割り当てされたセクタの数を増やすことができます。これが ECC がデータを回復するシナリオ (b) です。

これでこれらのセクタを回復するには、そのセクタに書き込むだけです。通常、これは単純pv -pterba /dev/zero > /dev/sdX(または一般cat、またはdd)です。しかし、RAIDアレイの一部として使用する予定です。RAID initはとにかくディスク全体に書き込むので意味がありません。唯一の例外はディスクの始まりと終わりで、数十メガバイトが失われる可能性があります(ソート、ヘッダーなどによる)。だから:

disk=/dev/sdX
end=$(echo "$(/sbin/blockdev --getsize64 "$disk")/4096-32768" | bc)
dd if=/dev/zero bs=4096             count=32768 of="$disk"   # first 128 MiB
dd if=/dev/zero bs=4096 seek="$end" count=32768 of="$disk"   # last 128 MiB

上記の最も簡単なフェンスエラー1を避けることができたので、ディスクの最初と最後の128MiBをクリアする必要があります。次に、mdadm raid initに残りの部分を作成させます。それでも、必要に応じてディスク全体をゼロに設定しても害はありません(マイナーな摩耗や数時間の無駄を除く)。

ディスクがサポートしている場合に実行する必要があるもう1つの作業:(smartctl -l scterc,40,100または任意の数)ディスク考える読み取りエラーの修正をより早く放棄します。 40は4秒です。これら 2 つの数値はそれぞれ読み取りエラーと書き込みエラーです。 mdraidはパリティを介して読み取りエラーを簡単に修正します(そして失敗したセクタをディスクに書き戻すことで再割り当てできます)。ただし、書き込みエラーが原因でディスクがアレイから排出される可能性があります。

PS:再割り当てされたセクタの数に注意してください。この属性の失敗は悪いニュースです。増え続けると、それも悪いニュースです。

PPS:RAIDアレイを定期的に清掃してください(すべてのセクタを読み、すべてのパリティを確認してください)。多くのディストリビューションでは、すでに毎月このタスクを実行するスクリプトを公開しています。これは新しい不良ブロックを検出して回復します。そうしないと、ほとんど読まれていない不良ブロックが残り、最終的に再構築が失敗する可能性があります。


1-フェンスエラー - 終了の1つの計算に失敗したオフソースエラーです。名前は次のとおりです。3フィートごとにフェンス柱が1つずつある場合、9フィートの独立型フェンスにはフェンス柱がいくつありますか?正解は4です。フェンスピラーエラーは、スタートピラーまたはエンドピラーが計算されないため、3です。

おすすめ記事