Existe algum argumento contra o uso de dd com bs=10G?

Existe algum argumento contra o uso de dd com bs=10G?

Suponha que eu tenha uma unidade que tenha um superbloco (ou bloco) defeituoso em algum local aleatório. É uma unidade enorme, de 1 a 8 TB. Ele não formata para ext3, então estou escrevendo cheio de zeros para poder formatá-lo corretamente. lsblk -fmostra seu FSTYPE como uma string vazia.

Existe algum motivo para não executar o comando abaixo?

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

Responder1

Suspeito que você não pode interromper o programa enquanto ele grava um bloco e escrever 10 GB leva um tempo significativo. A melhoria de desempenho com platôs de tamanho de bloco é bastante rápida em minha experiência, então eu preferiria tamanhos mais razoáveis ​​(4 MB...).

Responder2

Minha resposta aborda exatamente o título:

Existe algum argumento contra o uso ddwith bs=10G?

Mas no seu caso é meioProblema XY. O problema subjacente (blocos defeituosos) deve ser abordado com smartctle badblocks, não dd.


Uso de memória

Esta outra respostamenciona "melhoria de desempenho com tamanho de bloco":

Melhoria de desempenho com platôs de tamanho de bloco com bastante rapidez

É verdade, mas é apenas uma bsparte “quase zero” da história. No contexto da pergunta deveríamos contar a bsparte “vai para o infinito”.

No mundo real, o platô entra em colapso em grande escala bs. Com bs=10Ga ferramenta tentaremos alocar 10 GiB de memória. Pode ou não ter sucesso (memória esgotada). Mesmo que tenha sucesso, ainda existem problemas:

  • Outros processos podem ter sua memória alocada trocada para o disco.
  • O buffer de ddpode ser trocado para o disco. A ferramenta a utiliza constantemente, portanto, o sistema operacional provavelmente trocaria primeiro outros dados (não acessados ​​recentemente). Ainda assim, se você tiver 8 GiB de RAM e 16 GiB de swap, não há como caber bs=10Gna RAM.
  • Se a memória for necessária mais tarde,O assassino OOM pode entrar em ação. Você ddpode ser o primeiro processo a matar.

É claro que tudo isso depende de quanta RAM você tem e quanto espaço de troca você tem, e do que outros processos fazem.


Dicas

Minha preferência pessoal é usar bsum tamanho que seja transferido em 0,1-1 segundo; ou menor bsse o uso de RAM for um problema. Desta forma posso interromper ddquase instantaneamente (esta é a essência doresposta já mencionada). Se as limitações de hardware permitissem ddexceder 10 GiB/s e eu tivesse mais de 40 GiB de memória RAM livre, eu consideraria bs=10G. Em casa quase nunca vou acima bs=64M.

Um caso de uso que bs=10Gpode ser útil é quando você deseja processarexatamentetantos dados e você usa count=1(ou, por exemplo, 5 vezes mais:) count=5.No entantona prática com grandes bsvocê pode obtermenos, a menos que você use iflag=fullblock(vejaesta resposta). Por causa do uso de memória, eu recomputaria para um valor menor bsde qualquer maneira.

informação relacionada