Dd (Unix)

dd
Originalautor (en) Ken Thompson
(AT & T Bell Laboratories)
Entwickler (en) Verschiedene Open Source und kommerziell Entwickler
Erstveröffentlichung Juni 1974; Vor 48 Jahren
Repository CoreUtils: Git.Savanne.Gnu.org/cgit/CoreUtils.Git/
Geschrieben in Plan 9: C
Betriebssystem Unix, Unix-artig, Plan 9, Inferno, Fenster
Plattform Plattformübergreifend
Typ Befehl
Lizenz CoreUtils: GPLV3+
Plan 9: MIT -Lizenz

dd ist ein Befehlszeile Nützlichkeit für Unix, Plan 9, Inferno, und Unix-artig Betriebssysteme und darüber hinaus besteht der Hauptzweck darin, Dateien zu konvertieren und zu kopieren.[1] Auf Unix, Geräte -Treiber für Hardware (wie z. Festplattenfahrten) und speziell Gerätedateien (wie zum Beispiel /dev/null und /dev/random) Erscheint im Dateisystem genau wie normale Dateien; dd Kann auch von/oder zu diesen Dateien lesen und/oder schreiben, vorausgesetzt, dass die Funktion in ihrem jeweiligen Treiber implementiert wird. Als Ergebnis, dd kann für Aufgaben wie das Sichern der Verwendung der verwendet werden Bootsektor einer Festplatte und eine feste Menge an Zufallsdaten erhalten. Das dd Das Programm kann auch Conversions für die Daten durchführen, sobald sie kopiert werden, einschließlich Bytebestellung Tausch und Konvertierung gegen und von der ASCII und Ebcdic Textcodierungen.[2]

Geschichte

Der Name dd ist eine Anspielung auf die DD -Aussage gefunden in IBM's Arbeitskontrollsprache (Jcl),[3][4] in dem es eine Abkürzung für "Datendefinition" ist.[5] Die Syntax des Befehls ähnelt mehr einer JCL -Anweisung als andere Unix -Befehle, so sehr, dass Eric S. Raymond sagt "Das Schnittstellendesign war eindeutig ein Streich".[3] Die Schnittstelle wird in neu gestaltet Plan 9Der Befehl dd, um einen Befehlszeilenoptionsstil zu verwenden.[6] dd wird manchmal humorvoll als "Festplattenzerstörer" bezeichnet, da er die Möglichkeiten der Antriebserasierung hat.[7]

Ursprünglich vorgesehen, zwischen ASCII und Ebcdic, dd Erschienen zuerst in Version 5 Unix.[8] Das dd Der Befehl wird angegeben, da der X/offen Ausgabe 2 von 1987 des Portabilitätshandbuchs. Dies wird von geerbt von IEEE STD 1003.1-2008 (Posix), was Teil der ist Einzel -Unix -Spezifikation.[9]

Die Version von dd gebündelt GNU CoreUtils wurde von Paul Rubin, David Mackenzie und Stuart Kemp geschrieben.[10] Der Befehl ist als separates Paket für verfügbar Microsoft Windows Im Rahmen des Unxutils Sammlung von einheimisch Win32 Häfen von gemeinsamen GNU-Unix-ähnlichen Versorgungsunternehmen.[11]

Verwendungszweck

Das Befehlszeile Syntax von dd unterscheidet sich von vielen anderen UNIX -Programmen. Es verwendet die Syntax Möglichkeit=Wert für seine Befehlszeilenoptionen eher als der Standard -Optionswert oder --Möglichkeit=Wert Formate. Standardmäßig, dd liest aus Stdin und schreibt an Stdout, aber diese können durch die Verwendung der verwendet werden wenn (Eingabedatei) und von (Ausgabedatei) Optionen.[9]

Bestimmte Merkmale von dd hängt von den Funktionen des Computersystems ab, wie z. ddDie Fähigkeit, eine Option für den direkten Speicherzugriff zu implementieren. Senden a Siginfo Signal (oder ein USR1 -Signal unter Linux) auf einen Lauf dd Prozess macht es drucken Sie E/A -Statistiken an Standart Fehler einmal und dann weiter kopieren. dd kann lesen Standardeingabe von der Tastatur. Wann Ende der Datei (Eof) ist erreicht, dd wird verlassen. Signale und EOF werden von der Software bestimmt. Zum Beispiel Unix -Tools portiert auf Fenster variieren in der EOF: Cygwin Verwendet Strg+D (die üblichen Unix eof) und MKS Toolkit Verwendet Strg+Z (die üblichen Fenster eof).

Die nicht standardisierten Teile des DD-Aufrufs variieren zwischen den Implementierungen.

Meldungen ausgeben

Bei Fertigstellung, dd Drucke zum Stderr Stream über Statistiken der Datenübertragung. Das Format ist in POSIX standardisiert.[9]: Stderr Die manuelle Seite für GNU DD beschreibt dieses Format nicht, aber die BSD -Handbücher.

Jede der Zeilen "Datensätze in" und "Datensätze" zeigt die Anzahl der vollständigen Blöcke + die Anzahl der Teilblöcke, z. Weil das physische Medium endete, bevor ein vollständiger Block gelesen wurde oder ein physischer Fehler das Lesen des gesamten Blocks verhinderte.

Block Größe

A Block ist eine Einheit, die die Anzahl der Anzahl misst Bytes die gleichzeitig gelesen, geschrieben oder konvertiert werden. Befehlszeilenoptionen können eine andere Blockgröße für Eingabe/Lesen angeben (LesenRDS) im Vergleich zu Ausgang/Schreiben (obs), obwohl die Blockgröße (BS) Option überschreibt beide RDS und obs. Der Standardwert sowohl für Eingangs- als auch für Ausgangsblockgrößen beträgt 512 Bytes (die herkömmliche Blockgröße von Scheiben und die POSIX-Mandatedgröße von "A Block"). Das zählen Die Option zum Kopieren wird in Blöcken gemessen, ebenso wie die beiden überspringen zum Lesen zählen und suchen zum Schreiben zählen. Conversion -Operationen werden auch von der "Conversion -Blockgröße" (Conversion Blockgröße "beeinflusst (CBS).[9]: Operanden

Der Wert für Blockgrößenoptionen wird als Dezimalzahlung (Basis 10) Ganzzahl von Bytes interpretiert. Es kann auch Suffixe enthalten, um anzuzeigen, dass die Blockgröße eine ganzzahlige Anzahl größerer Einheiten als Bytes ist. POSIX gibt nur die Suffixe an b (Blöcke) für 512 und k (Kibibyten) für 1024.[9]: Operanden Die Implementierung unterscheidet sich in den zusätzlichen Suffixen, die sie unterstützen: (frei) BSD verwendet Kleinbuchstaben m (Mebibytes), g (Gibibyten) und so weiter für Tebibyten, Exbibytes, Pebibytes, Zebibyten, und Yobibyten,[12] während GNU verwendet M und G für die gleichen Einheiten mit KB, Mb, und Gb für ihre verwendet SI-Einheit Gegenstücke (Kilobytes).[10] Zum Beispiel für GNU dd, BS = 16 m zeigt eine Blockierung von 16 Mebibyten (16777216 Bytes) an und BS = 3 KB Gibt 3000 Bytes an.

Darüber hinaus verstehen einige Implementierungen die x Zeichen als Multiplikationsoperator für Blockgröße und Zählparameter. Zum Beispiel, BS = 2x80x18b wird als 2 × 80 × 18 × 512 = interpretiert 1474560Bytes, die genaue Größe eines 1440 kib Diskette. Dies ist in POSIX erforderlich, aber GNU scheint es nicht zu unterstützen.[9]: Operanden Infolgedessen ist es tragbarer, die zu verwenden POSIX Shell arithmetische Syntax von bs=$((2*80*18))b.

Die Blockgröße wirkt sich auf die Leistung des Kopierens aus dd Befehle. Viele kleine Lesevorgänge oder Schreibungen zu machen ist oft langsamer als weniger große. Die Verwendung großer Blöcke erfordert mehr RAM und kann die Fehlerwiederherstellung komplizieren. Wann dd wird mit Geräten mit variabler Blockgröße wie Bandlaufwerken oder Netzwerken verwendet. Die Blockgröße kann die Banddatensatzgröße bestimmen oder Paket Größe, abhängig von der Netzwerkprotokoll Gebraucht.

Verwendet

Das dd Der Befehl kann für eine Vielzahl von Zwecken verwendet werden. Für Befehle mit einfachen Kopierungen ist es tendenziell langsamer als die domänenspezifischen Alternativen, zeichnet sich jedoch über seine einzigartige Fähigkeit aus, "eine Datei zu einem beliebigen Punkt zu überschreiben oder zu verkürzen oder in einer Datei zu suchen", eine ziemlich niedrige Schnittstelle zur Unix Datei -API.[13]

In den folgenden Beispielen wird die Verwendung von GNU DD angenommen, hauptsächlich im Argument der Blockgröße. Um sie tragbar zu machen, ersetzen Sie z. bs=64M mit dem Muschel arithmetischen Ausdruck bs=$((64*1024*1024)) oder bs=$((64 << 20)) (entsprechend mit a geschrieben Bitverschiebung).

Datentransfer

dd Kann Daten über Dateien, Geräte, Partitionen und Volumina hinweg duplizieren. Die Daten können eingeben oder ausgewiesen werden. Es gibt jedoch wichtige Unterschiede in Bezug auf die Ausgabe bei einer Partition. Auch während der Übertragung können die Daten mit dem geändert werden conv Optionen für das Medium. (Zu diesem Zweck jedoch, dd ist langsamer als Katze.))[13]

Datenübertragungsformen von dd
Blocks = $ (iosize -d 2048 /dev /sr0)
dd if =/dev/sr0 von = isoimage.iso bs = 2048 count = $ blocks Status = Fortschritt
Schafft eine ISO Festplattenbild von einem CD-ROM, DVD oder Blu-Ray Rabatt.[14]
dd if = system.img von =/dev/sdc BS = 64 m conv = noError
Stellt ein Festplattenlaufwerk (oder eine SD -Karte) aus einem zuvor erstellten Bild wieder her.
dd if =/dev/sdb2 von = partition.image bs = 64m conv = noError
Erstellen Sie ein Bild des Partition SDB2 unter Verwendung einer 64 MIB -Blockgröße.
dd if =/dev/sda2 von =/dev/sdb2 bs = 64m conv = noError
Klone eines Trennwand zum anderen.
dd if =/dev/ad0 von =/dev/ad1 bs = 64m conv = noError
Klone einen Festplattenlaufwerk "ad0" zu "ad1".

Das kein Fehler Option bedeutet weiterzugehen, wenn ein Fehler vorliegt, während die Synchronisation Die Option bewirkt, dass die Ausgangsblöcke gepolstert werden.

Einstellungsänderung

dd kann Daten vorhanden ändern. Dies überschreibt beispielsweise die ersten 512 Bytes einer Datei mit Null -Bytes:

dd if =/dev/null von = path/to/file bs = 512 count = 1 conv = Notrunc

Das Notrunc Die Konvertierungsoption bedeutet, dass die Ausgabedatei nicht abgeschnitten wird. Wenn die Ausgabedatei bereits vorhanden ist, ersetzen Sie einfach die angegebenen Bytes und lassen Sie den Rest der Ausgabedatei in Ruhe. Ohne diese Option, dd Würde eine Ausgabedatei 512 Bytes lang erstellen.

Master Boot Record Backup und Wiederherstellung

Das obige Beispiel kann auch verwendet werden, um jede Region eines Geräts in einer Datei zu sichern und wiederherzustellen, wie z. Master Boot Record.

Um die ersten beiden Sektoren einer Diskette zu duplizieren:

dd if =/dev/fd0 von = mbrboot.img BS = 512 count = 2

Scheibenwischen

Aus Sicherheitsgründen ist es manchmal notwendig, eine zu haben Scheibenwischen eines weggeworfenen Geräts. Dies kann durch eine "Datenübertragung" der UNIX -Spezialdateien erreicht werden.

  • Um Nullen auf eine Festplatte zu schreiben, verwenden Sie dd if =/dev/null von =/dev/sda bs = 16m.
  • Verwenden Sie, um zufällige Daten auf eine Festplatte zu schreiben dd if =/dev/urandom von =/dev/sda bs = 16m.

Im Vergleich zum Beispiel zur Datenänderung Oben, Notrunc Die Konvertierungsoption ist nicht erforderlich, da sie keine Wirkung hat, wenn die ddDie Ausgabedatei ist ein Blockgerät.[15]

Das BS = 16 m Option lässt DD lesen und schreiben 16Mebibytes zu einer Zeit. Für moderne Systeme kann eine noch größere Blockgröße schneller sein. Beachten Sie, dass das Ausfüllen des Laufwerks mit zufälligen Daten länger dauern kann als das Nullpunkt des Laufwerks, da die Zufallsdaten von der CPU erstellt werden müssen, während Nulos erstellt werden. Bei modernen Festplattenantrieben wird das Laufwerk auf dem Laufenden die meisten Daten dauerhaft nicht einschichtbar gemacht.[16] Bei anderen Arten von Laufwerken wie Flash -Erinnerungen können jedoch viele Daten nach noch wiederhergestellt werden Datenremanenz.

Modern Festplattenfahrten enthalten a Sicher löschen Befehl zum dauerhaften und sicheren Löschen von jedem zugänglichen und unzugänglichen Teil eines Laufwerks. Es kann auch für einige funktionieren Solid State Drives (Flash -Laufwerke). Ab 2017 funktioniert es nicht an USB -Flash -Laufwerke Noch weiter Sichern digital Flash -Erinnerungen. Wenn verfügbar, ist dies sowohl schneller als auch die Verwendung von DD als auch sicherer. An Linux Maschinen sind über die zugänglich HDParm Befehl -Security-Erase verstärkt Möglichkeit.

Das Fetzen Das Programm bietet mehrere Überschreibungen sowie eine sicherere Löschung einzelner Dateien.

Datenwiederherstellung

Datenwiederherstellung Beinhaltet das Lesen von einem Laufwerk mit einigen Teilen, die möglicherweise nicht zugänglich sind. dd passt gut zu diesem Job zu seinem flexiblen Überspringen (seek) und andere Einstellungen auf niedriger Ebene. Die Vanille ddEs ist jedoch ungeschickt zu verwenden, da der Benutzer die Fehlermeldungen lesen und die Regionen, die gelesen werden können, manuell berechnen muss. Die einzelnen Blockgröße begrenzt auch die Granuarität der Erholung, da ein Kompromiss eingesetzt werden muss: Verwenden Sie entweder eine kleine für weitere wiederhergestellte Daten oder verwenden Sie eine große für die Geschwindigkeit.

Ein C -Programm namens dd_rescue[17] wurde im Oktober 1999 geschrieben. Es hat die Konversionsfunktion von abgeschrieben ddund unterstützt zwei Blockgrößen, um mit dem Dilemma umzugehen. Wenn eine Lektüre mit einer großen Größe fehlschlägt, fällt sie auf die kleinere Größe zurück, um so viel wie möglich zu sammeln. Es kann auch rückwärts laufen. Im Jahr 2003 a dd_rhelp Das Skript wurde geschrieben, um den Verwendungsvorgang zu automatisieren dd_rescue, um zu verfolgen, welche Bereiche selbst gelesen wurden.[18]

Im Jahr 2004 schrieb GNU ein separates Dienstprogramm, das nicht zu tun hat dd, genannt DDRescue. Es hat einen ausgefeilteren dynamischen Blockgröße-Algorithmus und verfolgt das, was intern gelesen wurde. Die Autoren von beiden dd_rescue und dd_rhelp Betrachten Sie es ihrer Umsetzung überlegen.[19] Um das neuere GNU -Programm vom älteren Skript zu unterscheiden, werden manchmal alternative Namen für GNUs verwendet ddrescue, einschließlich addrescue (Der Name auf freecode.com und Freshmeat.net), gddrescue (Debian Paketname) und gnu_ddrescue (OpenSuse Paketnamen).

Ein weiteres Open-Source-Programm genannt savehd7 verwendet einen ausgefeilten Algorithmus, erfordert aber auch die Installation von sein eigener Programming-Sprache-Dolmetscher.

Benchmarking Drive Performance

Um den Antriebs-Benchmark-Test durchzuführen und das sequentielle (und normalerweise einsthread) -System-Lesen und Schreibleistung für 1024-Byte-Blöcke zu analysieren:

  • Aufführung schreiben: dd if =/dev/null bs = 1024 count = 1000000 von = 1gb_file_to_write
  • Performance lesen: dd if = 1gb_file_to_read von =/dev/null bs = 1024

Generieren einer Datei mit zufälligen Daten

So erstellen Sie eine Datei mit 100 zufälligen Bytes mit dem Kernel -zufälligen Treiber:

dd if =/dev/urandom von = Myrandom BS = 100 count = 1

Konvertieren einer Datei in Upper Case

Um eine Datei in Großbuchstaben umzuwandeln:

dd if = Dateiname von = Dateiname1 conv = uCase, Notrunc

Fortschrittsanzeige

Ein Programm zu sein, der hauptsächlich als Filter entworfen wurde, dd Normalerweise gibt es keine Fortschrittsanzeige. Dies kann durch Senden eines überwunden werden USR1 Signal an den Lauf GNU dd Prozess, der zu dd Drucken der aktuellen Anzahl der übertragenen Blöcke.

Der folgende Ein-Liner führt alle 10 Sekunden zu einer kontinuierlichen Fortschrittsausgabe, bis die Übertragung abgeschlossen ist, wann DD-PID wird durch den Prozess ersetzt dd:

während Kill -USR1 DD-PID; schlafen 10; erledigt

Neuere Versionen von GNU dd unterstütz die Status = Fortschritt Option, die einen regelmäßigen Druck von Übertragungsstatistiken nach Stderr ermöglicht.[20]

Gabeln

dcfldd

dcfldd ist ein Gabel von gnu dd Dies ist eine verbesserte Version von Nick Harbor, die zu dieser Zeit für die Vereinigten Staaten arbeitete. Verteidigungsministerium Forensik Labor.[21][22][23] Verglichen mit dd, dcfldd Ermöglicht mehr als eine Ausgabedatei, unterstützt gleichzeitige Berechnungen mit mehreren Kontrollummen, bietet einen Überprüfungsmodus für die Dateianpassung und kann den prozentualen Fortschritt eines Betriebs anzeigen. Die letzte Veröffentlichung war 2021.[24]

DC3DD

DC3DD ist ein weiterer verbesserter GNU dd von den Vereinigten Staaten Verteidigungsministerium Cyber ​​Crime Center (DC3). Es kann als Fortsetzung der DCFLDD angesehen werden, mit einem angegebenen Ziel, zu aktualisieren, wenn der GNU -Upstream aktualisiert wird. Die letzte Veröffentlichung war 2018.[25]

Siehe auch

Verweise

  1. ^ Austin -Gruppe. "POSIX Standard: DD -Aufruf". Abgerufen 2016-09-29.
  2. ^ Chessman, Sam. "Wie und wann kann man den DD -Befehl verwenden?". Codecoffee. Abgerufen 2008-02-19.
  3. ^ a b Raymond, Eric S. "DD". Abgerufen 2008-02-19.
  4. ^ Ritchie, Dennis (17. Februar 2004). "Re: Ursprung des Unix DD -Befehls". Newsgroup:Alt.folklore.computer. Usenet: [email protected]. Abgerufen 10. Januar, 2016. DD wurde immer nach JCL DD -Karten benannt.
  5. ^ Shein, Barry (22. April 1990). "Re: Etymologie des UNIX" DD "Befehl" ". Newsgroup:Alt.folklore.computer. Usenet: [email protected]. Abgerufen 2016-07-14.
  6. ^ DD (1)- -Plan 9 Programmierhandbuch, Volume 1
  7. ^ "Wie man DD unter Linux benutzt, ohne deine Festplatte zu zerstören". OpenSource.com. 2018-07-05. Abgerufen 2020-10-11.
  8. ^ McIlroy, M. D. (1987). A Research Unix Reader: Annotierte Auszüge aus dem Programmierhandbuch, 1971–1986 (PDF) (Technischer Bericht). Cstr. Bell Labs. 139.
  9. ^ a b c d e f dd- Shell and Utilities Referenz, Die einzelne Unix -Spezifikation, Version 4 von Die offene Gruppe
  10. ^ a b DD (1)- -Linux Benutzer Handbuch - Benutzerbefehle
  11. ^ "Native Win32 -Ports einiger GNU -Dienstprogramme". Unxutils.SourceForge.net.
  12. ^ DD (1)- -Freebsd Allgemeine Befehle Handbuch
  13. ^ a b Gilles (2011). "Klonen - DD vs Cat - Ist DD heutzutage noch relevant?". Unix & Linux Stack Exchange.
  14. ^ "Erstellen eines ISO -Bildes von einer CD, einer DVD oder einer BD". Archwiki. Abgerufen 18. April, 2022.
  15. ^ "Linux - Warum verwenden Sie Konv = NOTRunc beim Klonen einer Festplatte mit DD?". Paketüberfluss. 2013-12-11. Abgerufen 2014-03-24.
  16. ^ Wright, Craig S.; Kleiman, Dave; S., Shyaam Sundhar R. (2008). "Überschreiben von Festplattendaten: Die große Wischtroverse". In Sekar, R.; Pujari, Arun K. (Hrsg.). Sicherheit von Informationssystemen, 4. Internationale Konferenz, ICISS 2008, Hyderabad, Indien, 16. bis 20. Dezember 2008. Proceedings. Vorlesungsnotizen in Informatik. Vol. 5352. Springer. S. 243–257. doi:10.1007/978-3-540-89862-7_21.
  17. ^ "dd_rescue". garloff.de.
  18. ^ Labor Valentin (19. September 2011). "DD_RHELP -Autor -Repository". Wichtiger Hinweis: Für einige Male war DD_RHELP das einzige Tool (AFAIK), das diese Art von Arbeit erledigte, aber seit einigen Jahren ist es nicht mehr wahr: Antonio Diaz hat einen idealen Ersatz für mein Werkzeug geschrieben: gnu 'ddrescue'.
  19. ^ "Ddrescue - GNU -Projekt - Free Software Foundation (FSF)". gnu.org.
  20. ^ "GNU CoreUtils: DD -Aufruf". Das GNU -Betriebssystem und die kostenlose Softwarebewegung. Abgerufen 2019-08-26.
  21. ^ "DCFLDD bei Source Forge". Quelle Forge. Abgerufen 2013-08-17.
  22. ^ Jeremy Faircloth, Chris Hurley (2007). Open -Source -Toolkit des Penetrationstesters. Syngress. S. 470–472. ISBN 9780080556079.
  23. ^ Jack Wiles, Anthony Reyes (2011). Die beste verdammte Cyberkriminalitäts- und digitale Forensik -Buchperiode. Syngress. S. 408–411. ISBN 9780080556086.
  24. ^ "DCFLDD: Verbesserte Version von DD für Forensik und Sicherheit". Github. Abgerufen 2020-11-19.
  25. ^ "DC3DD". SourceForge.

Externe Links