Todo o dispositivo de saída é limpo, independentemente de seu tamanho ser múltiplo do tamanho do bloco que você passa dd
ou não.
O notrunc
sinalizador não tem efeito quando a saída é um arquivo de dispositivo, porque truncar um arquivo de dispositivo não tem efeito. Se a saída fosse um arquivo regular, isso faria com que o arquivo de saída não fosse truncado antes da gravação, o que em alguns sistemas de arquivos significa que os dados antigos são substituídos (em vez de gravar novos blocos de dados e deixar o restante desanexado), no entanto, isso não seria útil, pois essa propriedade não é garantida por todos os sistemas de arquivos e, além disso, o comando não apenas substituiu o arquivo, mas também continuou gravando até que o disco de saída estivesse cheio (ou ocorreu outro erro).
Em vez de usar dd
e se preocupar se você está usando corretamente (por acaso, funciona nesse caso específico, mas é complicado e às vezes não funciona ), basta usarcat
.
cat /dev/zero >/dev/sdX
Apesar da crença popular na web, não há absolutamente nenhuma mágica dd
que a torne de alguma forma mais adequada para gravar em um disco. A mágica está nos /dev
arquivos. Qualquer ferramenta que possa lidar com dados binários, como qualquer moderno cat
ou head
, pode fazer o mesmo trabalho, a dd
menos que você esteja passando sinalizadores como seek
ou skip
.
Note-se que um problema compartilhado por dd
e cat
é que, em operação bem sucedida, eles vão erro com “Sem espaço no dispositivo” (ENOSPC). Se você colocar isso em um script, será necessário 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 o /proc/partitions
Linux) e depois escrever exatamente o número certo de bytes com uma ferramenta como head
.
size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX
Gilles 'SO- parar de ser mau'
fonte