Option ds command bs à la fin du disque

10

Si je devais utiliser la ddcommande comme suit:

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

Que se passe-t-il à la fin du disque si ce n'est pas un multiple exact de 16M? Cela signifie-t-il que la dernière portion restante du disque n'est pas mise à zéro?

J'ai remarqué dans https://www.marksanborn.net/howto/wiping-a-hard-drive-with-dd/ , il écrit que le gouvernement américain utilise

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

L' conv=notruncoption est-elle le moyen de s'assurer que chaque dernier octet est effacé?


la source

Réponses:

12

L'ensemble du périphérique de sortie est effacé, que sa taille soit un multiple de la taille de bloc à laquelle vous passez ddou non.

L' notruncindicateur n'a aucun effet lorsque la sortie est un fichier de périphérique, car la troncature d'un fichier de périphérique n'a aucun effet. Si la sortie était un fichier normal, cela aurait pour effet que le fichier de sortie n'est pas tronqué avant l'écriture, ce qui sur certains systèmes de fichiers signifie que les anciennes données sont écrasées (par opposition à l'écriture de nouveaux blocs de données et à laisser le reste non attaché), cependant, cela ne serait pas utile car cette propriété n'est pas garantie par tous les systèmes de fichiers et de plus, la commande non seulement écraserait le fichier, mais continuerait d'écrire jusqu'à ce qu'il soit rempli le disque de sortie (ou une autre erreur se produit).

Au lieu d'utiliser ddet de vous soucier de savoir si vous l'utilisez correctement (comme cela arrive, cela fonctionne dans ce cas particulier, mais c'est compliqué et parfois ne fonctionne pas ), utilisez simplementcat .

cat /dev/zero >/dev/sdX

Malgré la croyance populaire sur le Web, il n'y a absolument aucune magie ddqui le rend mieux adapté à l'écriture sur un disque. La magie est dans les /devfichiers. Tout outil capable de gérer des données binaires, tel que tout moderne catou head, peut faire le même travail que ddsi vous passez des drapeaux tels que seekou skip.

Notez qu'un problème partagé par ddet catest qu'en cas de succès, ils afficheront une erreur avec «Aucun espace laissé sur l'appareil» (ENOSPC). Si vous mettez cela dans un script, vous devrez soit vérifier que l'erreur est ENOSPC ou utiliser une méthode différente. Une méthode plus fiable consiste à déterminer d'abord la taille de l'appareil (par exemple, /proc/partitionssous Linux), puis à écrire exactement le bon nombre d'octets avec un outil tel que head.

size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX
Gilles 'SO- arrête d'être méchant'
la source
8

Il n'y a aucun problème - ddécrit jusqu'à la fin ( No space left on device), à moins qu'il ne manque d'entrée, qu'il soit limité par count=xou qu'une autre erreur se produise (par exemple, secteurs défectueux, câble moche, etc.).

Si l'écrasement d'un périphérique bloc entier est votre objectif, il shredest plus facile à utiliser.

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

Ou cryptsetuppour les données aléatoires avec une étape de vérification (les zéros sont chiffrés en données aléatoires; les données aléatoires sont déchiffrées en zéros).

Ou blkdiscardpour les SSD.

Ou wipefss'il s'agit simplement de recommencer à zéro, sans se débarrasser de force de tout ce que vous avez déjà stocké sur un lecteur.

frostschutz
la source