Todo o dispositivo de saída é apagado se o seu tamanho é um múltiplo do tamanho do bloco que você passa para dd
ou não.
O sinalizador notrunc
não tem efeito quando a saída é um arquivo de dispositivo, porque o truncamento de um arquivo de dispositivo não tem efeito. Se a saída fosse um arquivo regular, teria o efeito de que o arquivo de saída não fosse truncado antes de gravar, o que em alguns sistemas de arquivos significa que os dados antigos são sobrescritos (em vez de escrever novos blocos de dados e deixar o restante desanexado) no entanto, isso não seria útil, já que essa propriedade não é garantida por todos os sistemas de arquivos e, além disso, o comando não apenas sobrescreveria o arquivo, mas também gravaria até preencher o disco de saída (ou algum outro erro).
Em vez de usar dd
e se preocupar se você está usando corretamente (como acontece, ele funciona neste caso específico, mas é complicado e às vezes não funciona ), use apenas cat
.
cat /dev/zero >/dev/sdX
Apesar da crença popular na web, não há absolutamente nenhuma mágica em dd
que a torne de alguma forma mais adequada para gravar em um disco. A mágica está nos arquivos /dev
. Qualquer ferramenta que possa lidar com dados binários, como qualquer cat
ou head
, pode fazer o mesmo trabalho que dd
, a menos que você esteja passando sinalizadores como seek
ou skip
.
Observe que um problema compartilhado por dd
e cat
é que, na operação bem-sucedida, eles irão gerar um erro com "Nenhum espaço restante no dispositivo" (ENOSPC). Se você colocar isso em um script, você precisará verificar se o erro é ENOSPC ou usar um método diferente. Um método mais confiável é determinar primeiro o tamanho do dispositivo (por exemplo, usando /proc/partitions
no Linux) e, em seguida, escrever exatamente o número correto de bytes com uma ferramenta como head
.
size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX