
ランダムな場所に不良スーパーブロック (またはブロック) があるドライブがあるとします。これは 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
私の答えはまさにタイトル通りです:
dd
with を使用することに反対する意見はありますかbs=10G
?
でもあなたの場合はちょっとXY問題根本的な問題 (不良ブロック) には、 ではなく、smartctl
とを使用して対処する必要があります。badblocks
dd
メモリ使用量
これは別の答えです「ブロック サイズによるパフォーマンスの向上」について言及しています:
ブロックサイズによるパフォーマンスの向上は、すぐに停滞する
確かにそうですが、それは「bs
ゼロに近い」部分の話にすぎません。質問の文脈では、「bs
無限大になる」部分について説明する必要があります。
現実の世界では、プラトーは実際には大きなサイズで崩壊しますbs
。bs=10G
このツールを使用すると、10 GiB のメモリを割り当てようとします。成功するか失敗するかはわかりません (メモリが不足しています)。成功した場合でも、問題が残ります。
- 他のプロセスでは、割り当てられたメモリがディスクにスワップアウトされる可能性があります。
- バッファは
dd
ディスクにスワップ アウトされる可能性があります。ツールはこれを常に使用するため、OS はおそらく他の (最近アクセスされていない) データを最初にスワップ アウトします。それでも、8 GiB の RAM と 16 GiB のスワップがある場合、bs=10G
RAM に収める方法はありません。 - 後でメモリが必要になった場合は、OOMキラーが作動する可能性がある。
dd
最初に強制終了するプロセスになるかもしれません。
もちろん、これはすべて、搭載されている RAM の量、スワップ領域の量、および他のプロセスが何を実行するかによって決まります。
ヒント
bs
私の個人的な好みは、0.1~1秒で転送されるサイズを使用することです。RAMbs
の使用量が問題になる場合は、より小さいサイズを使用します。この方法により、dd
ほぼ瞬時に中断できます(これがすでに述べた答え)。ハードウェアの制限によりdd
10 GiB/s を超える速度が許可され、空き RAM が 40 GiB 以上ある場合は、 を検討しますbs=10G
。自宅では を超えることはほとんどありませんbs=64M
。
bs=10G
役に立つ使用例の1つは、処理したい場合です。その通り使用するデータ量と同じ量count=1
(または、たとえば 5 倍count=5
)になります。しかし実際に大きいbs
場合は、少ないただし、iflag=fullblock
(この答え)。メモリ使用量のため、bs
いずれにしても小さいサイズに再計算することになります。