
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 -f
mostra 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
dd
withbs=10G
?
Mas no seu caso é meioProblema XY. O problema subjacente (blocos defeituosos) deve ser abordado com smartctl
e 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 bs
parte “quase zero” da história. No contexto da pergunta deveríamos contar a bs
parte “vai para o infinito”.
No mundo real, o platô entra em colapso em grande escala bs
. Com bs=10G
a 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
dd
pode 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 caberbs=10G
na RAM. - Se a memória for necessária mais tarde,O assassino OOM pode entrar em ação. Você
dd
pode 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 bs
um tamanho que seja transferido em 0,1-1 segundo; ou menor bs
se o uso de RAM for um problema. Desta forma posso interromper dd
quase instantaneamente (esta é a essência doresposta já mencionada). Se as limitações de hardware permitissem dd
exceder 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=10G
pode 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 bs
você pode obtermenos, a menos que você use iflag=fullblock
(vejaesta resposta). Por causa do uso de memória, eu recomputaria para um valor menor bs
de qualquer maneira.