Der Linux-Befehl dd ist eines der leistungsstärksten Dienstprogramme, das auf vielfältige Weise verwendet werden kann. Dieses Tool wird hauptsächlich zum Kopieren und Konvertieren von Daten verwendet, daher steht es für Data Duplicator. Dieses Tool kann verwendet werden für:
- Sichern und Wiederherstellen einer gesamten Festplatte oder einer Partition.
- Erstellen von virtuellen Dateisystemen und Backup-Images von CDs oder DVDs, ISO-Dateien genannt
- Kopieren Sie Regionen von Raw-Gerätedateien, z. B. zum Sichern des MBR (Master Boot Record).
- Konvertieren von Datenformaten wie ASCII in EBCDIC.
- Konvertieren von Kleinbuchstaben in Großbuchstaben und umgekehrt.
Nur der Superuser kann diesen Befehl ausführen. Sie sollten bei der Verwendung dieses Befehls sehr vorsichtig sein, da eine unsachgemäße Verwendung zu großen Datenverlusten führen kann. Einige Leute betrachten dieses Tool als Datenzerstörer.
Syntax des dd-Befehls
Die grundlegende Verwendung des dd-Befehls ist ziemlich einfach, da er nur zwei Argumente benötigt:if =, um die Eingabedatei und von anzugeben =um die Ausgabedatei anzugeben. Die Argumente für diese Optionen können entweder Dateien oder Blockgeräte sein. Ich würde jedoch nicht empfehlen, dd zum Kopieren von Dateien zu verwenden, da cp dies viel einfacher macht. Sie können damit jedoch eine Festplatte klonen. Die Syntax ist
dd if=<source file name> of=<target file name> [Options]
Wir werden verschiedene Optionen lernen, während wir dd-Befehlsbeispiele durchgehen.
1. Sichern und Wiederherstellen einer gesamten Festplatte oder einer Partition
Es ist möglich, alle Daten einer ganzen Festplatte/Partition auf einer anderen Festplatte/Partition zu speichern. Keine einfache Kopie als cp-Befehl, sondern eine Kopie in Blockgröße.
a. Gesamte Festplatte auf Festplatte sichern
Sie können alle Daten (gesamte Festplatte) von der Festplatte /dev/sda
kopieren nach /dev/sdb
. dd weiß nichts über das Dateisystem oder die Partitionen; es wird einfach alles aus /dev/sda
kopiert nach /dev/sdb
. Die jeweils zu kopierende Blockgröße muss mit bs
angegeben werden Möglichkeit. Dadurch wird also die Festplatte mit den gleichen Daten auf der gleichen Partition geklont.
# dd if=/dev/sda of=/dev/sdb bs=4096 conv=noerror,sync 97281+0 records in 97280+0 records out 99614720 bytes (100 MB) copied, 2.75838 s, 36.1 MB/s
Dies funktioniert nur, wenn das zweite Gerät genauso groß oder größer als das erste ist. Andernfalls erhalten Sie auf der zweiten Partition abgeschnittene und wertlose Partitionen. Dabei steht if für Eingabedatei, of für Ausgabedatei und bs für die Blockgröße (Anzahl der gleichzeitig zu lesenden/schreibenden Bytes). Stellen Sie sicher, dass Sie Blockgrößen in Vielfachen von 1024 Bytes verwenden, was 1 KB entspricht. Wenn Sie keine Blockgröße angeben, verwenden Sie eine Standardblockgröße von 512 Byte. Die conv
Wertparameter noerror ermöglicht dem Tool, die Daten weiter zu kopieren, obwohl es auf Fehler stößt. Die Sync-Option ermöglicht die Verwendung von synchronisiertem I/O.
b. DD-Disk-Image (Datei-Image) erstellen
Sie können ein Image einer Festplatte oder ein Datei-Image erstellen. Das Sichern einer Festplatte auf ein Image ist schneller als das Kopieren der genauen Daten. Außerdem macht das Disk-Image die Wiederherstellung viel einfacher.
# dd if=/dev/sda of=/tmp/sdadisk.img
Sie können die Ausgabedatei an einem beliebigen Ort speichern, müssen jedoch einen Dateinamen mit der Endung .img
angeben Verlängerung wie oben. Statt /tmp/sdadisk.img
, könnten Sie es beispielsweise unter /sdadisk.img
speichern wenn Sie möchten.
c. Komprimiertes Disk-Image erstellen
Da dd den genauen Inhalt einer gesamten Festplatte erstellt, bedeutet dies, dass es zu viel Größe benötigt. Sie können das Disk-Image mit dem folgenden Befehl komprimieren
# dd if=/dev/vda | gzip -c >/tmp/vdadisk.img.gz
Das Rohr | Der Operator macht die Ausgabe des linken Befehls zur Eingabe des rechten Befehls. Das -c
Option schreibt die Ausgabe auf die Standardausgabe und behält die Originaldateien unverändert bei.
d. Sichern Sie eine Partition oder klonen Sie eine Partition auf eine andere
Statt einer ganzen Festplatte können Sie nur eine einfache Partition sichern. Sie müssen nur den Partitionsnamen in der Eingabedatei wie unten angeben
# dd if=/dev/sda1 of=/dev/sdb1 bs=4096 conv=noerror,sync
Dadurch wird die Partition /dev/sda1
synchronisiert nach /dev/sdb1
. Sie müssen überprüfen, ob die Größe von /dev/sdb1
sollte größer als /dev/sda1
sein . Oder Sie können ein Partitions-Image wie folgt erstellen
# dd if=/dev/sda1 of=/tmp/sda1.img
e. Wiederherstellen einer Festplatte oder eines Partitionsabbilds
Das Speichern einer Festplatte oder einer Partition hilft bei der Wiederherstellung aller Daten, wenn es ein Problem mit unserem ursprünglichen Laufwerk gibt. Zur Wiederherstellung müssen Sie die Eingabedatei mit der Ausgabedatei umkehren, die während des Sicherungsvorgangs wie unten angezeigt wird.
# dd if=/tmp/sdadisk.img of=/dev/sda
Sie werden Daten abrufen, die vor der Sicherungsoperation vorhanden waren und nicht nach der Operation
e. Komprimiertes Image wiederherstellen
Sie müssen zuerst die komprimierte Datei und die Ausgabedatei angeben, die die zuvor komprimierte Festplatte ist.
# gzip -dc /tmp/vdadisk.img.gz | dd of=/dev/vda
Die Option -d dient hier zum Dekomprimieren. Beachten Sie die Ausgabedatei. Sie können die wiederhergestellte Festplatte bereitstellen, um den Inhalt anzuzeigen. Beachten Sie, dass die Daten nach dem letzten Komprimierungs-Backup-Vorgang hinzugefügt werden.
2. Virtuelles Dateisystem/Backup-Images von CDs oder DVDs als ISO-Dateien erstellen
Sie müssen möglicherweise aus bestimmten Gründen ein virtuelles Dateisystem unter Linux erstellen, z. B. zum Erstellen einer virtuellen Maschine auf Ihrem Linux-Host. Möglicherweise müssen Sie auch ein Backup-ISO-Image einer CD oder DVD erstellen
a. Erstellen eines virtuellen Dateisystems
Ein virtuelles Dateisystem ist ein Dateisystem, das in einer Datei vorhanden ist, die wiederum auf einer physischen Festplatte vorhanden ist. Sie können es benötigen, um beispielsweise ein zusätzliches Swap- oder Loop-Gerät oder eine virtuelle Maschine zu erstellen. Wir brauchen /dev/zero
Dies ist eine Datei, die verwendet wird, um eine Datei ohne Daten, aber mit der erforderlichen Größe zu erstellen (eine Datei mit allen Nullen). Mit anderen Worten, dies erstellt eine Datendatei mit lauter Nullen in der Datei, die einer Datei die Größe gibt.
# dd if=/dev/zero of=/file bs=1024K count=500 500+0 records in 500+0 records out 524288000 bytes (524 MB) copied, 1.21755 s, 431 MB/s
Die Option count
bezieht sich auf die Anzahl der zu kopierenden Eingangsblöcke. In Kombination mit dem Blockgrößenwert gibt es die zu kopierende Gesamtgröße an. Zum Beispiel bs=1024k
und count=500
geben Sie eine Größe=1024K*500 =524288000 Byte =524MB an
Lassen Sie uns nun die Größe unserer Datei überprüfen
# ls -lh /file -rw-r--r-- 1 root root 500M May 17 18:57 /file
Sie können sehen, dass wir unser virtuelles Dateisystem mit der angegebenen Größe erstellt haben. Sie können es jetzt verwenden, um ein Loop-Gerät oder eine virtuelle Festplatte oder irgendetwas anderes zu erstellen.
b. Ändern Sie die ersten 512 Bytes einer Datei mit Nulldaten
Wenn Sie während des Vorgangs eine vorhandene Ausgabedatei angeben, gehen deren Daten verloren. Aus bestimmten Gründen kann es erforderlich sein, eine Blockgröße der Ausgabedatei zu ersetzen.
dd if=/dev/zero of=file1 bs=512 count=1 conv=notrunc
Die notrunc
Option bezieht sich darauf, die Datei nicht abzuschneiden, sondern nur die ersten 512 Bytes zu ersetzen, falls vorhanden. Andernfalls erhalten Sie eine 512-Byte-Datei
c. Erstellen eines Backup-ISO-Images von CD oder DVD
Sie fragen sich vielleicht, warum Sie den Inhalt Ihrer CD nicht einfach in ein Verzeichnis kopieren. Wie würden Sie mit dem Bootsektor einer CD umgehen? Sie können das nicht als Datei auf dem Gerät finden, da es nur der erste Sektor ist. Da dd andererseits Sektor für Sektor kopiert, kopiert es auch diese Informationen.
# dd if=/dev/cdrom of=/mycd.iso
Sie müssen wissen, dass Sie die -o loop
verwenden müssen Option, mit der Sie eine Datei wie jedes normale Gerät mounten können. Also, um /mycd.iso
zu mounten auf /mnt/cd
gehen Sie wie folgt vor
# mount -o loop /mycd.iso /mnt/cd
d) Erstellen Sie ein bootfähiges USB-Laufwerk
Nehmen wir an, wir haben das Centos-ISO-Image hier in dieses Verzeichnis "~/Downloads/" heruntergeladen.
if=~/Downloads/CentOS-8-x86_64-1905-dvd1.iso - Eingabedatei befindet sich im Pfad '~/Downloads/CentOS-8-x86_64-1905-dvd1.iso'
of=/dev/sdb - Ausgabedatei befindet sich im Pfad '/dev/sdb'
bs=1M - Lesen Sie von „~/Downloads/CentOS-8-x86_64-1905-dvd1.iso“ und schreiben Sie jeweils 1 Megabyte an Daten in „/dev/sdb“.
# dd if=~/Downloads/CentOS-8-x86_64-1905-dvd1.iso of=/dev/sdb bs=1M
3. MBR sichern und wiederherstellen
Der GRUB-Bootloader wird am häufigsten im MBR des bootfähigen Laufwerks gespeichert. Der MBR macht die ersten 512 Byte der Festplatte aus und ermöglicht bis zu 466 Byte Speicherplatz für den Bootloader. Der zusätzliche Speicherplatz wird zum Speichern der Partitionstabelle für dieses Laufwerk verwendet. Wenn der MBR beschädigt wird, können wir Linux nicht booten.
a. MBR sichern
Da der MBR die ersten 512 Byte der Festplatte ausmacht, müssen wir nur diese Blockgröße kopieren
# dd if=/dev/sda of=/tmp/sdambr.img bs=512 count=1
Mit dem count=1
und bs=512
, werden nur 512 Bytes kopiert, was der Größe unseres MBR entspricht.
Sie können den gespeicherten MBR mit dem od-Befehl anzeigen, der Dateien in oktalen und anderen Formaten wie unten ausgibt
# od -xa /tmp/sdambr.img 0000000 bf52 81f4 8b66 832d 087d 0f00 e284 8000 R ? t soh f vt - etx } bs nul si eot b nul nul 0000020 ff7c 7400 6646 1d8b 8b66 044d 3166 b0c0 | del nul t F f vt gs f vt M eot f 1 @ 0
-a
Option wählt benannte Zeichen und -x
aus wählt hexadezimale 2-Byte-Einheiten aus
b. Sichern der Boot-Daten des MBR mit Ausnahme der Partitionstabelle
Die MBR-512-Byte-Daten befinden sich im ersten Sektor der Festplatte. Es besteht aus 446 Bytes Bootstrap, 64 Bytes Partitionstabelle und 2 Bytes Signatur. Das bedeutet, dass wir die Partitionstabelle und die Byte-Signatur ausschließen können, während wir den MBR sichern, wobei nur eine Blockgröße beibehalten wird, die der Bootstrap-Größe entspricht.
# dd if=/dev/sda of=/tmp/sdambr2.img bs=446 count=1
c. MBR aus MBR-Image wiederherstellen
Sie können Ihren MBR wie in den vorherigen Befehlen gezeigt mit
wiederherstellen# dd if=/tmp/sdambr.img of=/dev/sda
3. Datenformate konvertieren
Wenn eine Eingabedatei einen Zeichensatz verwendet, der nicht der native Zeichensatz des Hostcomputers ist, muss der Importoperator eine Konvertierung durchführen. Wenn beispielsweise ASCII das native Format für Zeichenfolgen auf Ihrem Hostcomputer ist, die Eingabedatendatei jedoch Zeichenfolgen mit EBCDIC darstellt, müssen Sie EBCDIC in ASCII konvertieren und umgekehrt.
a. Konvertiert das Datenformat einer Datei von EBCDIC nach ASCII
Wenn Sie eine ebcdic-Datei haben, die meistens von Mainframe-Systemen abgerufen wird, möchten Sie sie in ASCII konvertieren, um Änderungen mit Texteditoren auf UNIX-Servern vorzunehmen
# dd if=textfile.ebcdic of=textfile.ascii conv=ascii
Die conv
value-Parameter ist jetzt ascii weil wir von EBCDIC in ASCII umwandeln
b. Konvertiert das Datenformat einer Datei von ASCII nach EBCDIC
Nachdem Sie die ASCII-Version geändert haben und fertig sind, können Sie sie zurück in EBCDIC konvertieren, damit sie von Ihrer Anwendung verwendet werden kann.
# dd if=textfile.ascii of=textfile.ebcdic conv=ebcdic
Die conv
Wertparameter ist jetzt e bcdic weil wir von ASCII nach EBCDIC konvertieren. Wenn Sie nur eine bestimmte Anzahl von Bytes durch eine entsprechende Anzahl von Bytes mit unterschiedlichen Zeichen ersetzen, wäre die Konvertierung reibungslos und die Anwendung beim Lesen der Datei sollte keine Probleme haben.
4. Groß-/Kleinschreibung einer Datei umwandeln
Der DD-Befehl kann auch für eine erstaunliche Sache verwendet werden. Es kann den gesamten Text (Alphabete) in einer Datei in Groß- oder Kleinbuchstaben umwandeln und umgekehrt. Für das folgende Beispiel haben wir eine Datei für die Tests.
# cat file10 test dd convert
a. Konvertieren einer Datei in Großbuchstaben
Da unsere Textdatei in Kleinbuchstaben geschrieben ist, werden wir sie in Großbuchstaben umwandeln
# dd if=~/file10 of=~/file20 conv=ucase
Der Befehl erstellt die angegebene neue Datei. Siehe das jetzt conv
Option nimmt ucase Wert. Lassen Sie uns das Ergebnis überprüfen
# cat file20 TEST DD CONVERT
b. Konvertieren einer Datei in Kleinbuchstaben
Jetzt führen wir die umgekehrte Operation durch, die in Kleinbuchstaben konvertiert wird
# dd if=~/file20 of=~/file30 conv=lcase
Beachten Sie, dass wir lcase verwenden von conv
Option zum Umwandeln von Großbuchstaben in Kleinbuchstaben.
# cat file30 test dd convert
Der Befehl dd konvertiert nicht die Dateinamen, sondern nur deren Inhalt.
Schlussfolgerung
Der dd-Befehl, obwohl technisch gesehen kein Archivierungsbefehl, ist in gewisser Weise ähnlich, da er eine ganze Partition oder Platte in eine Datei kopieren kann und umgekehrt.