web-dev-qa-db-fra.com

Que fait `dd if = / dev / zero of = / dev / sda` do

Modifié: ne l'exécutez pas pour le tester à moins que vous ne vouliez détruire des données.

Quelqu'un pourrait-il m'aider à comprendre ce que j'ai obtenu?

  1. dd if=/dev/zero of=/dev/sda bs=4096 count=4096

    Q: Pourquoi spécifiquement 4096 pour count?

  2. dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr blockdev --getsz /dev/sda - 4096)

    Q: Qu'est-ce que cela fait exactement?

19
J H

dd if =/dev/zero of =/dev/sda bs = 4096 count = 4096 Q: pourquoi 4096 est particulièrement utilisé pour le compteur?

Cela mettra à zéro les 16 premiers Mo du lecteur. 16 Mio est probablement plus que suffisant pour neutraliser toute structure de "début de disque" tout en étant suffisamment petit pour ne pas prendre très longtemps.

dd if =/dev/zero of =/dev/sda bs = 512 count = 4096 cherche = $ (expr blockdev --getsz/dev/sda - 4096)

Q: qu'est-ce que c'est exactement?

blockdev --getsz obtient la taille du périphérique de bloc dans "secteurs de 512 octets". Cette commande semble donc destinée à mettre à zéro les 2 derniers Mo du lecteur.

Malheureusement, cette commande est rompue en termes de syntaxe. Je suppose que la commande était initialement destinée à être

dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr `blockdev --getsz /dev/sda` - 4096)

et les retours en arrière se sont perdus quelque part le long de la ligne des gens qui le copient/collent entre différents environnements.

Les anciennes tables de partition, les métadonnées LVM, les métadonnées de raid, etc. peuvent causer des problèmes lors de la réutilisation d'un lecteur. La remise à zéro des sections au début et à la fin du lecteur évite généralement ces problèmes tout en étant beaucoup plus rapide que la remise à zéro complète du lecteur.

45
plugwash

Cela effacera le premier 4096*4096=16MB enfin 512*4096=2MB de votre disque dur, qui contiennent des structures importantes utiles pour la récupération. Je suppose que ce code a été affiché avec malveillance.

Je n'ai jamais rencontré de situation où spécifier explicitement un count autre que 1 était utile. J'ai ai effacé le premier bloc si je voulais m'assurer de ne laisser aucune trace du MBR ...

17
o11c

Ces commandes écraseront votre appareil sda avec des zéros - la première fera les 16 premiers Mo (taille de bloc de 4096 et compte de 4096 blocs) et la seconde remplacera les 2 derniers Mo (512 taille de bloc avec 4096 blocs) avec des zéros. (il n'efface pas techniquement, et cela se rapporte à mon premier point ci-dessous.)

(c'était la partie déjà mentionnée dans d'autres réponses, y compris ici pour être complet)

Une autre chose qui mérite d'être mentionnée est que la taille du bloc a des effets, mais ceux-ci ne sont généralement visibles que sur les opérations à volume élevé. La façon la plus efficace (la plus rapide) d'exécuter la commande est si la taille de bloc de la commande correspond à la taille d'accès du périphérique, sinon le temps est perdu.

Si vous êtes intéressé, vous pouvez essayer de créer un fichier avec un million de blocs de 1 bloc et un fichier avec 1 million de blocs et voir la différence:

[user@Host tmp]$ time dd if=/dev/zero of=/tmp/test1 bs=1 count=1000000
1000000+0 records in
1000000+0 records out
1000000 bytes (1.0 MB) copied, 2.44439 s, 409 kB/s

real    0m2.447s
user    0m0.177s
sys     0m2.269s
[user@Host tmp]$ time dd if=/dev/zero of=/tmp/test2 bs=1000000 count=1
1+0 records in
1+0 records out
1000000 bytes (1.0 MB) copied, 0.00155357 s, 644 MB/s

real    0m0.003s
user    0m0.001s
sys     0m0.002s
[user@Host tmp]$ ls -al test*
-rw-rw---- 1 user grp 1000000 Apr  8 15:51 test1
-rw-rw---- 1 user grp 1000000 Apr  8 15:51 test2

Comme vous pouvez le voir, la taille de bloc a un impact énorme sur l'efficacité. C'est peut-être une barre latérale pour le PO, mais je pense que c'est toujours pertinent.

TL; DR: N'exécutez pas de code arbitraire que vous trouvez sur le net, ou que quelqu'un en qui vous n'avez pas confiance vous donne. Cela gâchera votre journée.

4
Tim S.

AVERTISSEMENT:dd if=/dev/zero of=/dev/ est utilisé pour nettoyer un lecteur ou un périphérique avant de copier les données de manière légale. Le lecteur ou le périphérique doit toujours être désinfecté avant de copier les informations d'un système sous enquête médico-légale afin d'atténuer la contamination croisée. Par conséquent, ce n'est pas une mauvaise commande, l'utilisateur final doit comprendre à quoi il sert ou il détruira ses données. Si c'est ce que vous désirez, pour vérifier l'opération d'écriture zéro, faites dd if=/dev/sda | hexdump -C | head.

Source: Un guide pratique des enquêtes en informatique légale par le Dr Darren Hayes

2
SierraJuliet

D'autres ont expliqué ce qu'ils font, alors je vais sauter cela.

Le point dans dd ayant des arguments séparés bs et count est que bs contrôle la quantité écrite à la fois. La spécification de valeurs vraiment grandes pour bs nécessitera un tampon vraiment grand dans le programme, et la spécification de valeurs inférieures à la taille de bloc du périphérique sera lente car le noyau doit construire un bloc entier pour écrire sur le périphérique ( dans des cas comme celui-ci, il peut probablement tamponner les écritures jusqu'à ce qu'il y ait un bloc complet, dans d'autres cas, il pourrait avoir à lire ce qui est déjà sur le disque). Comme les deux commandes utilisent des valeurs différentes pour bs, cela m'amène à penser que vous les avez peut-être trouvées sur deux sites différents. Les disques durs avaient auparavant une taille de bloc de 512 octets, correspondant à bs=512 de cette dernière commande, mais il y a quelques années (6-8 je pense), ils ont commencé à créer des disques avec une taille de bloc de 4096 octets, faisant bs=4096 un meilleur choix pour les disques modernes.

J'utilise dd if=/dev/zero of=/dev/sdX oflag=sync pour tester la qualité d'une clé USB ou d'une carte MicroSD insérée AVANT de l'utiliser réellement avec gparted, fdisk ou dd avec une image disque. Je pense que c'est une idée prudente, en particulier avec les supports MicroSD qui ont une mauvaise histoire de qualité.

Bien sûr, soyez prudent avec of = sdX car il n'y a pas de pardon avec un effacement accidentel du disque. Vérifiez que X = lettre de lecteur de la cible prévue.

1
Richard