Bearbeitet: Führen Sie dies nicht aus, um es zu testen, es sei denn, Sie möchten Daten zerstören.
Könnte mir jemand helfen zu verstehen, was ich habe?
dd if=/dev/zero of=/dev/sda bs=4096 count=4096
F: Warum speziell 4096 für
count
?dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr blockdev --getsz /dev/sda - 4096)
F: Was genau macht das?
Antworten:
Dadurch werden die ersten 16 MiB des Laufwerks auf Null gesetzt. 16 MiB sind wahrscheinlich mehr als genug, um "Start-of-Disk" -Strukturen zu zerstören, obwohl sie so klein sind, dass sie nicht sehr lange dauern.
blockdev --getsz
Ruft die Größe des Blockgeräts in "512-Byte-Sektoren" ab. Dieser Befehl scheint also die letzten 2 MB des Laufwerks auf Null zu setzen.Leider ist dieser Befehl syntaktisch fehlerhaft. Ich gehe davon aus, dass der Befehl ursprünglich vorgesehen war
und die Backticks gingen irgendwo entlang der Linie der Leute verloren, die sie zwischen verschiedenen Umgebungen kopieren / einfügen.
Alte Partitionstabellen, LVM-Metadaten, RAID-Metadaten usw. können bei der Wiederverwendung eines Laufwerks Probleme verursachen. Durch das Nullsetzen von Abschnitten am Anfang und Ende des Laufwerks werden diese Probleme im Allgemeinen vermieden, während das Nullsetzen des gesamten Laufwerks deutlich beschleunigt wird.
quelle
expr blockdev --getsz /dev/sda - 4096
wäre ein syntaxfehler vonexpr
. Ich denke, der beabsichtigte Befehl war...seek="$(expr "$(blockdev --getsz /dev/sda)" - 4096)"
. Oder besser:...seek="$(($(blockdev --getsz /dev/sda) - 4096))"
Dies löscht die erste
4096*4096=16MB
und letzte512*4096=2MB
Festplatte, die wichtige Strukturen für die Wiederherstellung enthält. Ich gehe davon aus, dass dieser Code in böswilliger Absicht veröffentlicht wurde.Ich habe noch nie eine Situation erlebt, in der explizit eine
count
andere als1
die nützliche angegeben wurde. Ich habe den ersten Block gelöscht, um sicherzustellen, dass ich keine Spuren des MBR hinterlasse ...quelle
sda
. Wahrscheinlichersdb
odersdc
. Aber ich kann mich natürlich irren ...Diese Befehle überschreiben Ihr SDA-Gerät mit Nullen - der erste überschreibt die ersten 16 MB (Blockgröße von 4096 und Anzahl von 4096 Blöcken) und der zweite überschreibt die letzten 2 MB (512 Blockgröße mit 4096 Blöcken) mit Nullen. (Es ist technisch nicht zu löschen, und das bezieht sich auf meinen ersten Punkt unten.)
(das war der Teil, der bereits in anderen Antworten erwähnt wurde, einschließlich hier der Vollständigkeit halber)
Erwähnenswert ist auch, dass die Blockgröße zwar Auswirkungen hat, diese jedoch im Allgemeinen nur bei Vorgängen mit hohem Volumen auftreten. Die effizienteste (schnellste) Möglichkeit, den Befehl auszuführen, besteht darin, dass die Blockgröße des Befehls mit der Zugriffsgröße des Geräts übereinstimmt, andernfalls wird Zeit verschwendet.
Wenn Sie interessiert sind, können Sie versuchen, eine Datei mit einer Million 1-Block-Chunks und einer Datei mit 1 Million Block-Chunks zu erstellen, und den Unterschied feststellen:
Wie Sie sehen, wirkt sich die Blockgröße massiv auf die Effizienz aus. Das ist vielleicht eine Seitenleiste des OP, aber ich denke, dass es immer noch relevant ist.
TL; DR: Führen Sie keinen willkürlichen Code aus, den Sie im Internet finden oder den Ihnen jemand gibt, dem Sie nicht vertrauen. Es wird deinen Tag ruinieren.
quelle
Don't execute arbitrary code you find on the net
LinieAndere haben erklärt, was sie tun, also werde ich das überspringen.
Der Punkt bei
dd
der Verwendung von Separatbs
undcount
Argument ist, dass gesteuert wird,bs
wie viel auf einmal geschrieben wird . Das Angeben sehr großer Werte fürbs
erfordert einen sehr großen Puffer im Programm, und das Angeben von Werten, die kleiner als die Blockgröße des Geräts sind, ist langsam, da der Kernel einen gesamten Block erstellen muss, um auf das Gerät zu schreiben (in solchen Fällen ist dies möglich) Wahrscheinlich puffern Sie die Schreibvorgänge, bis ein vollständiger Block vorhanden ist. In anderen Fällen muss möglicherweise gelesen werden, was sich bereits auf der CD befindet. Da die beiden Befehle unterschiedliche Werte für verwendenbs
, kann ich annehmen, dass Sie sie an zwei verschiedenen Standorten gefunden haben. Festplatten hatten früher eine Blockgröße von 512 Bytes, entsprechend derbs=512
des letzteren Befehls, aber vor einigen (6-8, glaube ich) Jahren begannen sie damit, Disks mit einer Blockgröße von 4096 Bytes herzustellen, wasbs=4096
eine bessere Wahl für moderne Disks war.quelle
bs
ist viel höher . Ein einzelner SATA-Befehl kann mehrere Sektoren lesen oder schreiben, sodass der Kernel E / A-Vorgänge zusammenführt, bevor er sie sendet. Ein Bereich vonbs=64k
bisbs=1024k
ist sinnvoll (die L3-Cache-Größe beträgt häufig 4 bis 8 MB). Ich benutze oftbs=128k
, die Hälfte der L2-Cache-Größe auf modernen Intel-CPUs. (dd
Enthält zwei memcpy-Operationen: in derread(2)
von der Quelle (auch wenn es / dev / zero ist) und in derwrite(2)
.IIRC,sdd
hatte die Option, Nullen zu schreiben, was ein bisschen CPU-Zeit spart. Wirklich nur relevant, wenn das Ziel etwas ist andere als eine Festplatte).iostat -x 4
oder etwas an, und notieren Sie sich die Spalten rrqm / s (Leseanforderungen werden pro Sekunde zusammengeführt) und wrqm / s , um zu sehen , ob die E / A-Anforderung zusammengeführt wird.WARNUNG: Dient
dd if=/dev/zero of=/dev/
zum Reinigen eines Laufwerks oder Geräts vor dem forensischen Kopieren von Daten. Das Laufwerk oder Gerät muss immer bereinigt werden, bevor Informationen aus einem System kopiert werden, das einer forensischen Untersuchung unterzogen wird, um eine Kreuzkontamination zu vermeiden. Daher ist es kein schlechter Befehl, der Endbenutzer muss verstehen, wofür er verwendet wird, sonst werden seine Daten zerstört. Wenn Sie dies wünschen, überprüfen Sie die Null-Schreiboperationdd if=/dev/sda | hexdump -C | head
.Quelle: Ein praktischer Leitfaden für Computerforensik-Untersuchungen von Dr. Darren Hayes
quelle
Ich
dd if=/dev/zero of=/dev/sdX oflag=sync
teste die Qualität eines eingelegten USB-Laufwerks oder einer MicroSD-Karte, BEVOR ich sie tatsächlich mit gparted, fdisk oder dd mit einem Disk-Image verwende. Ich halte dies für eine umsichtige Idee, insbesondere bei MicroSD-Medien mit einer schlechten Qualität.Seien Sie natürlich vorsichtig mit of = sdX, da es bei einem versehentlichen Löschen der Festplatte keine Vergebung gibt. Stellen Sie sicher, dass X = Laufwerksbuchstabe des beabsichtigten Ziels ist.
quelle