Modifié: ne l'exécutez pas pour le tester, sauf si vous souhaitez détruire des données.
Quelqu'un pourrait-il m'aider à comprendre ce que j'ai obtenu?
dd if=/dev/zero of=/dev/sda bs=4096 count=4096
Q: Pourquoi spécifiquement 4096 pour
count
?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?
Réponses:
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.
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
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.
la source
expr blockdev --getsz /dev/sda - 4096
serait une erreur de syntaxe deexpr
. Je pense que la commande prévue était...seek="$(expr "$(blockdev --getsz /dev/sda)" - 4096)"
. Ou mieux:...seek="$(($(blockdev --getsz /dev/sda) - 4096))"
Cela effacera le premier
4096*4096=16MB
et le dernier512*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 qu'était1
utile. J'ai effacé le premier bloc si je voulais assurer que je ne partais pas de traces de derrière MBR ...la source
sda
. Plus probablesdb
ousdc
. Mais je peux me tromper bien sûr ...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 Mo derniers (taille de 512 blocs avec 4096 blocs) avec des zéros. (il ne s'agit pas d'effacement technique, 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:
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 à qui vous ne faites pas confiance vous donne. Ça va gâcher ta journée.
la source
Don't execute arbitrary code you find on the net
ligneD'autres ont expliqué ce qu'ils font, alors je vais sauter cela.
Le point d'
dd
avoir séparébs
etcount
argument est quebs
contrôle la quantité écrite à la fois . Spécifier des valeurs très grandes pourbs
nécessitera un très grand tampon dans le programme, et spécifier des valeurs inférieures à la taille de bloc du périphérique sera lent 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 faudra peut-être lire ce qui est déjà sur le disque). Comme les deux commandes utilisent des valeurs différentes pourbs
, 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 à labs=512
de cette dernière commande, mais il y a quelques années (6-8 je pense), ils ont commencé à faire des disques avec une taille de bloc de 4096 octets, faisantbs=4096
un meilleur choix pour les disques modernes.la source
bs
est beaucoup plus élevé que cela . Une seule commande SATA peut lire ou écrire plusieurs secteurs, de sorte que le noyau fusionne les E / S avant de les envoyer. Partout debs=64k
àbs=1024k
est raisonnable (la taille du cache L3 est souvent de 4 à 8 Mo). J'utilise souventbs=128k
, ce qui représente la moitié de la taille du cache L2 sur les processeurs Intel modernes. (dd
comprend deux opérations memcpy: dans laread(2)
source (même si c'est / dev / zero), et lewrite(2)
.IIRC,sdd
avait une option pour écrire des zéros, ce qui économiserait un peu de temps CPU. Vraiment seulement pertinent si la destination est quelque chose autre qu'un disque).iostat -x 4
quelque chose et notez les colonnes rrqm / s (demandes de lecture fusionnées par seconde) et wrqm / s.AVERTISSEMENT:
dd if=/dev/zero of=/dev/
est utilisé pour nettoyer un lecteur ou un périphérique avant de copier des données de manière légale. Le lecteur ou le périphérique doit toujours être nettoyé avant de copier les informations d'un système soumis à une 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, vérifiez l'opération d'écriture zérodd if=/dev/sda | hexdump -C | head
.Source: Un guide pratique des enquêtes en informatique légale par le Dr Darren Hayes
la source
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 de disque accidentel. Vérifiez que X = lettre de lecteur de la cible prévue.
la source