web-dev-qa-db-ja.com

ドライブの指定された部分でbadblockを開始する方法

200GB Maxtor IDEハードドライブの最後の数ブロックをddしようとすると、次のエラーが発生します。

$ dd if=/dev/zero of=/dev/sdc bs=4M status=progress
203901894656 bytes (204 GB, 190 GiB) copied, 7283.07 s, 28.0 MB/s
dd: error writing '/dev/sdc': Permission denied
48621+0 records in
48620+0 records out
208223076351 bytes (208 GB, 194 GiB) copied, 8379.27 s, 24.8 MB/s 

このエラーは、ddseek=48620で再開しようとした後も持続します。ここで、48620はスキップするブロックの量です。このエラーが不良セクタの結果であるかどうかを判断するために、badblocksが失敗した場所から同じ方法でddを実行したいと思います。

これは、次のようなbadblocksコマンドに変換されます。

badblocks -svw -b 4000000 -c 500000 -p 1 -o /cygdrive/b/badblocks.txt /dev/sdc 199148543 48620

...ここで、-b 4000000は、ドライブを最初にddするときに使用した4Mブロックサイズに相当し、48620はbadblocksの最初のブロックを指定するfirst_blockオプションです。から始めます。

ただし、これにより2つのエラーのいずれかが発生します。致命的でないエラーのいずれか...

badblocks: Invalid argument during seekrs)

...コマンドの実行中に表示されるか、1つの致命的なエラーで終了します。

Segmentation fault (core dumped)

上記のエラー は、-c2000のようなより適切な値に設定されている場合でも持続します。


さらに、badblocksが失敗した正確なブロックでddを実行しようとするのをあきらめ、代わりにfirst_blockオプションを十分な数に増やしてみてください。

badblocks -svw -b 4000000 -c 1000000 -p 1 -o /cygdrive/b/users/hashim/desktop/maxtorbadblocks.txt /dev/sdc 199148543 12345678 

...コマンドを中断せずに、次のエラーのインスタンスが多数表示されます。

badblocks: Invalid argument during seekrs)  again get several get the same error.

ドライブの指定された場所でbadblocksを開始して、実行にかかる時間を大幅に節約するにはどうすればよいですか?

3
Hashim

whyが失敗するという答えの半分(今のところ)。

この行のスイッチは正しくありません。

badblocks -svw -b 4000000 -c 500000 -p 1 \
          -o /cygdrive/b/badblocks.txt /dev/sdc 199148543 48620

-bは、ブロックサイズ(ブロック内のバイト数)用であり、通常は512の倍数であり、通常は次のようになります。 10242048、または 40964,000,000の値は512の倍数ではなく、より大きい現在のどのHDDが使用するよりも。

-cは、一度にテストするブロックの数であり、-bに渡された値を掛けると、一度に読み取られるバイト数がわかります。したがって、-b 4000000 -c 500000はコンピューターに次のように指示します。一度に2,000,000,000,000(2兆)バイトを読み取ります。

さらに悪いことに、引数199148543はファイルシステムに少なくともその数のブロックが含まれていることをbadblocksに伝え、ブロックは-bスイッチによって定義されるため、badblocksは計算しますファイルシステムには、少なくとも796,594,172,000,000バイト、(または796TB、ほぼペタバイト)。

ディスク全体が200GBであるため、badblocksは停止し、エラーメッセージを出力します。

3
agc