opção ds do comando ds no final do disco

10

Se eu fosse usar o ddcomando da seguinte maneira:

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 16 milhões? Isso significa que a última parte restante do disco não está zerada?

Notei em https://www.marksanborn.net/howto/wiping-a-hard-drive-with-dd/ , ele escreve que o governo dos EUA usa

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

A conv=notruncopção é a maneira de garantir que todos os últimos bytes sejam apagados?


fonte

Respostas:

12

Todo o dispositivo de saída é limpo, independentemente de seu tamanho ser múltiplo do tamanho do bloco que você passa ddou não.

O notruncsinalizador 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 dde 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 ddque a torne de alguma forma mais adequada para gravar em um disco. A mágica está nos /devarquivos. Qualquer ferramenta que possa lidar com dados binários, como qualquer moderno catou head, pode fazer o mesmo trabalho, a ddmenos que você esteja passando sinalizadores como seekou skip.

Note-se que um problema compartilhado por dde 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/partitionsLinux) 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
8

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

Se a substituição de um dispositivo de bloco inteiro é o seu objetivo, shredé mais fácil de usar.

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

Ou cryptsetuppara dados aleatórios com uma etapa de verificação (zeros são criptografados em dados aleatórios; dados aleatórios são descriptografados de volta para zeros).

Ou blkdiscardpara SSDs.

Ou, wipefsse for apenas começar do zero, não forçar a remoção de tudo o que você já armazenou em uma unidade.

frostschutz
fonte