dd comando opção bs no final do disco

10

Se eu fosse usar o comando dd da seguinte forma:

dd if=/dev/zero of=/dev/sdX bs=16M

O que acontece no final do disco se não for um múltiplo exato de 16M? Isso significa que a última parte restante do disco não está zerada?

Eu notei no link , ele escreve que o governo dos EUA usa

dd if=/dev/urandom of=/dev/sda bs=8b conv=notrunc

A opção conv=notrunc é a maneira de garantir que o último byte seja apagado?

    
por yeti 17.03.2018 / 13:02

2 respostas

12

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
    
por 17.03.2018 / 13:32
8

Não há problema - dd escreve até o final ( No space left on device ), a menos que fique sem entrada, seja limitado por count=x ou ocorra outro erro (por exemplo, setores defeituosos, cabos ruins, etc.) .

Se sobrescrever um dispositivo inteiro de bloco for seu objetivo, shred será mais fácil de usar.

shred -v -n 1 /dev/deleteme     # pseudorandom data
shred -v -n 0 -z /dev/deleteme  # zeroes

Ou cryptsetup para dados aleatórios com uma etapa de verificação (zeros são criptografados para dados aleatórios; dados aleatórios é descriptografado de volta para zeros).

Ou blkdiscard para SSDs.

Ou wipefs se é apenas começar do zero, não se livrar de tudo o que você armazenado em uma unidade.

    
por 17.03.2018 / 13:43

Tags