bs=10G で dd を使用することに反対する意見はありますか?

bs=10G で dd を使用することに反対する意見はありますか?

ランダムな場所に不良スーパーブロック (またはブロック) があるドライブがあるとします。これは 1 ~ 8 TB の巨大なドライブです。ext3 にフォーマットできないため、適切にフォーマットできるようにゼロでいっぱいに書き込みます。FSTYPElsblk -fが空の文字列として表示されます。

以下のコマンドを実行しない理由はありますか?

sudo dd if=/dev/zero bs=10G status=progress of=/dev/bad_disk

答え1

ブロックを書き込んでいる間はプログラムを中断できないため、10 GB の書き込みにはかなり時間がかかると思われます。私の経験では、ブロック サイズによるパフォーマンスの向上はすぐに頭打ちになるため、より適切なサイズ (4 MB など) を使用することをお勧めします。

答え2

私の答えはまさにタイトル通りです:

ddwith を使用することに反対する意見はありますかbs=10G?

でもあなたの場合はちょっとXY問題根本的な問題 (不良ブロック) には、 ではなく、smartctlとを使用して対処する必要があります。badblocksdd


メモリ使用量

これは別の答えです「ブロック サイズによるパフォーマンスの向上」について言及しています:

ブロックサイズによるパフォーマンスの向上は、すぐに停滞する

確かにそうですが、それは「bsゼロに近い」部分の話にすぎません。質問の文脈では、「bs無限大になる」部分について説明する必要があります。

現実の世界では、プラトーは実際には大きなサイズで崩壊しますbsbs=10Gこのツールを使用すると、10 GiB のメモリを割り当てようとします。成功するか失敗するかはわかりません (メモリが不足しています)。成功した場合でも、問題が残ります。

  • 他のプロセスでは、割り当てられたメモリがディスクにスワップアウトされる可能性があります。
  • バッファはddディスクにスワップ アウトされる可能性があります。ツールはこれを常に使用するため、OS はおそらく他の (最近アクセスされていない) データを最初にスワップ アウトします。それでも、8 GiB の RAM と 16 GiB のスワップがある場合、bs=10GRAM に収める方法はありません。
  • 後でメモリが必要になった場合は、OOMキラーが作動する可能性があるdd最初に強制終了するプロセスになるかもしれません。

もちろん、これはすべて、搭載されている RAM の量、スワップ領域の量、および他のプロセスが何を実行するかによって決まります。


ヒント

bs私の個人的な好みは、0.1~1秒で転送されるサイズを使用することです。RAMbsの使用量が問題になる場合は、より小さいサイズを使用します。この方法により、ddほぼ瞬時に中断できます(これがすでに述べた答え)。ハードウェアの制限によりdd10 GiB/s を超える速度が許可され、空き RAM が 40 GiB 以上ある場合は、 を検討しますbs=10G。自宅では を超えることはほとんどありませんbs=64M

bs=10G役に立つ使用例の1つは、処理したい場合です。その通り使用するデータ量と同じ量count=1(または、たとえば 5 倍count=5)になります。しかし実際に大きいbs場合は、少ないただし、iflag=fullblockこの答え)。メモリ使用量のため、bsいずれにしても小さいサイズに再計算することになります。

関連情報