GNU/Linux >> LINUX-Kenntnisse >  >> Linux

5 praktische Beispiele des dd-Befehls unter Linux

Der dd-Befehl in Linux ist ein Dienstprogramm zum Kopieren und Konvertieren von Dateien und hat viele praktische Anwendungen.

Es wurde vermutet, dass der Name von einer älteren IBM Job Control Language-Funktion abgeleitet ist, bei der dd für „Data Definition“ stand. Unter Linux steht die Abkürzung für „Data Duplicator“ oder „Disk Dump“ oder eine Vielzahl anderer Alliterationen, je nach Quelle.

Vielleicht hat es sich sogar den treffenden Spitznamen „Datenzerstörer“ verdient, was mich zu einem wichtigen Punkt bringt. Bitte seien Sie vorsichtig, wenn Sie den dd-Befehl üben.

Dieser Befehl kann ernsthaften Schaden anrichten. Achten Sie darauf, Ihre Syntax zu überprüfen, um kostspielige Fehler zu vermeiden. Sie wollen nicht die Person sein, die Partitionsnamen verwechselt und qualvoll zusieht, wie ihre Root-Partition zerstört und durch eine leere Datei ersetzt wird.

Den dd-Befehl kennenlernen

Hier ist die Syntax des dd-Befehls:

dd if=<filename> of=<filename> [options]

Es gibt eine Vielzahl von Verwendungsmöglichkeiten für diesen Befehl, ich werde einige gängige Ansätze vorstellen.

Physische Medien/Partitionsklone/Backups

In der obigen Syntax stehen „if“ und „of“ für Eingabedatei bzw. Ausgabedatei. Dies ist die Kernfunktionalität von dd. Es dupliziert Daten von einer Quelle zur anderen. Sie müssen keine physischen Medien mit dd verwenden.

Textmanipulation

Es ist möglich, stdin (Standardeingabe) von Ihrer Tastatur zu verwenden, um Eingaben zu sammeln und auf eine Datei zu verweisen. Es ist auch möglich, Groß- und Kleinschreibung schnell umzuwandeln, und eine Vielzahl anderer nützlicher Textbearbeitungswerkzeuge sind in der Manpage enthalten.

Ich habe IBM bereits erwähnt, um auf die lange Geschichte dieses Programms anzuspielen. Eine der ursprünglichen Funktionalitäten dieses Befehls konzentrierte sich tatsächlich darauf, EBCDIDC, ein von IBM erstelltes Kodierungsschema, in ASCII umzuwandeln.

Dateisystemmanipulation

Sie können damit auch Dateien kopieren, aber für diese einfache Anwendung wird der cp-Befehl über dd empfohlen. Wir haben einen Artikel, in dem Sie etwas über den cp-Befehl lesen können.

Einige Verhaltenshinweise

Beim Kopieren mit dd , sollten Sie sich auch darüber im Klaren sein, dass standardmäßig die vollständige kopiert wird Informationen aus einer bestimmten Quelle.

Das heißt, wenn Sie versuchen, eine Partition oder einen Datenträger zu duplizieren, wird auch der freie Speicherplatz kopiert.

Wenn Sie also beispielsweise eine Festplatte mit 4 TB klonen, benötigen Sie ein Ziellaufwerk mit mindestens 4 TB, um abgeschnittene Dateien und Fehler zu vermeiden. Denken Sie auch daran, dass dd auch die anderen 3 TB Speicherplatz kopiert, wenn die Festplatte nur 1 TB Daten enthält. Das ist ein schlechter Schachzug, der viel Zeit und Ressourcen verschwenden wird.

Es gibt einige Einschränkungen, die wir dd hinzufügen können, und andere Maßnahmen, die wir ergreifen können, um dieses Verhalten zu ändern. Es gibt tatsächlich eine überwältigende Menge an Steuerelementen, die in Verbindung mit dd verwendet werden können. Ich werde versuchen, einige derjenigen anzusprechen, von denen ich denke, dass sie unseren Lesern am meisten nützen könnten, aber das Ziel dieses Artikels ist es, eine Einführung in dd zu geben, nicht jede mögliche Funktion zu dokumentieren.

Achtung! Verwenden Sie zum Üben eine virtuelle Maschine

Ich fordere Sie dringend auf, Ihr Ziel zu konzipieren und es sorgfältig auszuführen, um zu vermeiden, dass wichtige Dateien beschädigt oder zerstört werden. Selbstverständlich haften wir nicht für den Verlust Ihrer Daten. Wenn Sie einen Fehler machen. Sagen Sie nicht, wir hätten Sie nicht gewarnt.

Ich empfehle, auf einer virtuellen Dummy-Maschine zu üben, um sich damit vertraut zu machen, bevor Sie versuchen, Assets der „realen Welt“ zu ändern. Dies liegt daran, dass der Befehl dd die Fähigkeit hat, Ihr Dateisystem zu ändern und somit zu beschädigen, wenn Sie es falsch verwenden.

Für dieses Tutorial habe ich mich entschieden, etwas außerhalb der Debian-Familie auszuprobieren und eine Kopie von Fedora 31 in VirtualBox hochgefahren.

5 Praktische Beispiele des dd-Befehls

Nachdem die Warnungen und einige Kontextinformationen aus dem Weg geräumt sind, sind wir bereit, zu einigen Anwendungen für diesen einfachen, aber leistungsstarken Befehl überzugehen.

Beispiel 1:Festplatten klonen

Das Klonen einer Festplatte auf eine andere kann mit dd sehr einfach sein. In meinem Beispiel habe ich zwei Festplatten mit den Namen „sda“ und „sdb“.

Denken Sie daran, dass „sda“ versucht, sich selbst auf „sdb“ zu kopieren, wobei der gesamte Inhalt des Laufwerks verwendet wird, nicht nur die Daten.

Sie müssen in Ihrer Ausgabedatei genügend Speicherplatz zuweisen, um ungenutzten Speicherplatz im Sektor aufzunehmen. Sie können das Laufwerk auch auf die exakte Größe neu partitionieren, die derzeit mit Daten gefüllt ist. Ich würde diese Methode empfehlen. Dadurch wird die Zeit verringert, die zum Ausführen des Vorgangs benötigt wird, und ein nützlicheres Dokument erstellt.

Wenn Sie bereit sind, eine Festplatte zu klonen, können Sie fdisk ausführen um Ihre Festplatten, ihre Partitionen und ihre Kapazität zu identifizieren.

sudo fdisk -l 

Wenn Sie diesen Befehl ausführen, werden die verfügbaren Laufwerke und Partitionen und ihre jeweiligen Größen aufgelistet. Dies kann hilfreich sein, um Ihr Zielgerät korrekt zu identifizieren.

Auch hier verwenden wir für unsere Anwendung die Namen „sda“ und „sdb“ und gehen davon aus, dass sie die gleiche Größe haben.

[[email protected] ~]$ sudo dd if=/dev/sda of=/dev/sdb
[[enter pw for sudo]]
dd: writing to 'dev/sdb': No space left on device
8108369+0 records in
8108369+0 records out
4151484416 bytes (4.2 GB, 3.9 GiB) copied, 12.3602 s 336 MB/s

Die Ausgabe lässt uns wissen, dass der Schreibvorgang erfolgreich war, wir können die Meldung ignorieren, dass auf „sdb“ kein Platz mehr vorhanden ist.

Die Zusammenfassung listet auch die Menge der kopierten Daten auf, wie lange es gedauert hat und wie schnell es kopiert wurde. Wir werden uns das etwas genauer ansehen, wenn ich über die Blockgröße spreche.

Beispiel 2:Sichern einer Festplattenpartition

Die Schritte zum Klonen eines Geräts und zum Sichern einer Partition sind ähnlich. Anstatt dass unsere Zieldatei ein Gerät ist, können wir eine „.img“-Datei (Raw Disk Image) erstellen.

Nehmen wir an, unser System hat eine separate Partition für unser Home-Verzeichnis unter „sda2“ und wir möchten es in einer Datei namens „home_backup.img“ in unserem aktuellen Verzeichnis sichern.

dd if=/dev/sda2 of=home_backup.img

So einfach ist das! Jetzt haben Sie also keine Entschuldigung dafür, keine gute Backup-Routine zu haben.

Sicher, das war einfach, aber es gibt immer mehr zu lernen.

Umgang mit der Blockgröße im dd-Befehl

Bevor wir zum nächsten Beispiel kommen, lassen Sie uns über BS oder Blockgröße sprechen. Wenn Sie gesehen haben, dass dies verwendet wurde, um einen Wert mit dd-Befehlen anzugeben, fragen Sie sich vielleicht, warum es dort ist.

Wenn Ihre Neugier Sie zu einer Internetsuche führt, bin ich bereit zu wetten, dass Sie wahrscheinlich immer noch sind frage mich, warum es da ist.

Ich werde mein Bestes tun, um eine Erklärung in einfacher Sprache zu geben. Blockgeräte sind normalerweise physische Medien mit begrenztem Speicherplatz.

Sie können Informationen auf einem Medium wie einer Disc nachschlagen, indem Sie nach einem bestimmten Datenblock suchen. So kann das System beispielsweise eine CD-ROM lesen und ab Block 500 (einer beliebigen Zahl) nach Informationen suchen. Es kann auch verwendet werden, um Informationen zu „buchen“ und möglicherweise Informationen von Block 500 bis Block 1500 zu verwenden.

Diese Blöcke können so segmentiert werden, dass sie für das System effizient zu analysieren sind. Dies kann den Speicherplatz des Mediums oder Standardsystemspezifikationen widerspiegeln, denen das Medium wahrscheinlich zugeordnet ist.

Ich fahre mit dem Beispiel einer CD-ROM fort, die eine eigene definierte Blockgröße (2048) hat. Jeder Block darf maximal 2048 Bytes umfassen. Selbst wenn ein Block nur 100 Bytes Daten enthält, nimmt er immer noch die gleichen 2048 Bytes ein.

Es gibt einige Fälle, in denen Sie die Blockgröße definieren möchten, damit dd schneller läuft oder Datenbeschädigungen verhindert werden. Um auf unser CD-ROM-Beispiel zurückzukommen, könnte das Erstellen von Blöcken einer anderen Größe zu Anomalien führen, wenn die Daten gelesen werden sollen.

Wenn es undefiniert gelassen wird, verwendet dd eine Blockgröße von 512. Dies ist die kleinste Blockgröße, die eine typische Festplatte lesen kann.

Wenn Ihr Medium nicht auf eine bestimmte Blockgröße beschränkt ist, können Sie es wahrscheinlich sicher an die Leistung (Schreibzeit) anpassen. Sehen wir uns einige Beispiele an.

Leistung bei nicht angegebener Blockgröße

[[email protected] ~]$ sudo dd if=/dev/sda of=home_backup.img
[sudo] password for linuxhandbook: 
dd: writing to 'home_backup.img': No space left on device
31974953+0 records in
31974952+0 records out
16371175424 bytes (16 GB, 15 GiB) copied, 113.848 s, 144 MB/s

Leistung bei einer Blockgröße von 1024

[[email protected] ~]$ sudo dd if=/dev/sda of=home_backup.img bs=1024
[sudo] password for linuxhandbook: 
dd: error writing 'home_backup.img': No space left on device
15987477+0 records in
15987476+0 records out
16371175424 bytes (16 GB, 15 GiB) copied, 75.4371 s, 217 MB/s

Sie können sehen, dass der Prozess mit einer höheren Geschwindigkeit durchgeführt wurde. Noch schneller war ein weiterer Durchlauf mit einer Blockgröße von 4096 mit einer Rate von 327 MB/s. System-Caching kann auch eine Rolle bei der Geschwindigkeit spielen, aber das ist ein Thema für einen anderen Tag.

Möglicherweise haben Sie die Unterschiede in der Anzahl der eingehenden und ausgehenden Datensätze bemerkt. Dies liegt daran, dass wir die Größe jedes Blocks und damit die Kapazität der einzelnen Blöcke ändern, obwohl die Ausgabedatei gleich groß bleibt. Aus diesem Grund kann das Anpassen des bs-Werts unbeabsichtigte Folgen haben. Beispielsweise könnte es zu Abweichungen bei der Durchführung einer Prüfsumme kommen.

Beispiel 3:Daten löschen und Festplatte auf Null setzen

Erinnerst du dich an all die Warnungen von früher? Dieser Befehl ersetzt jeden Block von „sda“ durch Nullen.

dd if=/dev/zero of=/dev/sda

Wie funktioniert das? Im Wesentlichen das Gleiche wie alle anderen in- und out-dd-Befehle. Was ist „/dev/zero“?

Es ist ein in Unix/Linux-Betriebssystemen enthaltenes Pseudo-Gerät, das Nullen in eine Datei schreibt, bis es das Ende der Datei erreicht.

Sie können auf ähnliche Weise „dev/random“ verwenden, das zufällige Datenbits ausgibt. Dies kann unnötig sein, wenn Sie vorhaben, eine RAW-Bilddatei zum Ersetzen von Inhalten zu verwenden, da die Verwendung von dd bereits ungenutzten Speicherplatz kopiert.

Beachten Sie, dass einige böse Leute ahnungslose Benutzer dazu verleiten, diesen Befehl in verschiedenen Linux-Foren auszuführen. Jetzt, da Sie wissen, was dieser Befehl bewirkt, werden Sie diesem bösen Streich nicht zum Opfer fallen.

Beispiel 4:.ISO von CD/DVD erstellen

Sie können direkt vom CD-ROM-Laufwerk kopieren, falls Ihr Computer noch über eines verfügt. Zuvor habe ich erwähnt, dass die Standard-Bytegröße einer CD-ROM 2048 ist. Wir werden die Bytegröße so einstellen, dass sie mit dieser übereinstimmt, um Konvertierungsprobleme zu vermeiden, und dann ein paar andere Befehle hinzufügen.

dd if=/dev/cdrom of=space_jam_dvd.iso bs=2048 conv=noerror,sync

Lassen Sie mich ein paar Dinge erklären. Mit conv=noerror , werden alle Fehler ignoriert. Das Programm wird ohne Unterbrechung bis zum letzten Satz fortgesetzt. Es wird für sie nicht aufhören.

Bei Verwendung in Verbindung mit „noerror“ stellt „sync“ sicher, dass alle fehlenden Datenblöcke automatisch mit Nullinformationen aufgefüllt werden.

Das bedeutet, dass die vorhandenen Daten denselben Orten zugeordnet werden, wobei vermutlich so viel Inhalt wie möglich erhalten bleibt.

Es ist wichtig sicherzustellen, dass Ihre Quell- und Zieldateien für diese Vorgänge denselben „bs“-Satz haben, da sie sonst nicht die beabsichtigten Ergebnisse erzielen.

Beispiel 5:Erstellen Sie einen bootfähigen USB

Sie können dd verwenden, um einen bootfähigen USB-Stick zu erstellen, und es ist genauso einfach, wie Sie vielleicht erwarten. Tatsächlich ist dies eine der beliebtesten Verwendungen des dd-Befehls.

Hier ist ein zusätzlicher Schritt erforderlich. Wir verwenden den mkfs-Befehl, um das Dateisystem auf unserem USB zu erstellen, bevor wir „dd“ ausführen.

Ohne Optionen wird das standardmäßige ext2-System verwendet. Angenommen, der USB, den wir vorbereiten möchten, heißt „sdb“ und wir möchten das Dateisystem auf ext4 ändern, würden wir den folgenden Befehl ausführen:

sudo mkfs.ext4 /dev/sdb

Wenn Sie es mit einem Windows-System verwenden möchten, können Sie den ersten Teil des Befehls durch mkfs.ntfs ersetzen.

Sie können auch die folgende Syntax verwenden:

mkfs -t [for type] $filesystem.

Sobald das bootfähige Medium vorbereitet ist, können wir mit unserem dd-Befehl fortfahren.

dd if=someFile.iso of=/dev/sdb

Verwenden Sie das .iso-Mountable-Image und kopieren Sie es auf den entsprechenden Laufwerksnamen für Ihr USB-Gerät.

Fazit

Danke fürs Lesen. Ich hoffe, Ihnen hat diese Einführung zu „dd“ gefallen. Es gibt so viele verschiedene Möglichkeiten, wie Sie diesen Befehl verwenden können. Ich habe versucht, viele der nützlicheren Beispiele zu behandeln. Wenn Sie etwas haben, das Sie sehen möchten, oder eine direkte Frage haben, helfe ich Ihnen gerne. Teilen Sie mir Ihre Meinung unten in den Kommentaren mit.


Linux
  1. cp-Befehl unter Linux:7 praktische Beispiele

  2. Linux-Shutdown-Befehl:5 praktische Beispiele

  3. 10 praktische Beispiele für Linux-nm-Befehle

  4. 7 Beispiele für Linux-df-Befehle

  5. 8 Linux TR-Befehlsbeispiele

5 praktische Beispiele für Tail-Befehle unter Linux

Echo-Befehl unter Linux:7 praktische Beispiele

5 praktische Beispiele für den Read-Befehl unter Linux

Wesentliche Beispiele des ps-Befehls in Linux

Praktischer Ping-Befehl in Linux-Beispielen

id-Befehlsbeispiele in Linux