Alle folgenden Befehle sind gleichwertig. Sie lesen die Bytes der CD /dev/sr0
und schreiben Sie sie in eine Datei namens image.iso
.
cat /dev/sr0 >image.iso
cat </dev/sr0 >image.iso
tee </dev/sr0 >image.iso
dd </dev/sr0 >image.iso
dd if=/dev/cdrom of=image.iso
pv </dev/sr0 >image.iso
cp /dev/sr0 image.iso
tail -c +1 /dev/sr0 >image.iso
Warum sollten Sie einen über dem anderen verwenden?
-
Einfachheit. Zum Beispiel, wenn Sie
cat
bereits kennen odercp
, müssen Sie keinen weiteren Befehl lernen. -
Robustheit. Dies ist eine Art Variante der Einfachheit. Wie groß ist das Risiko, dass eine Änderung des Befehls seine Wirkung ändert? Sehen wir uns ein paar Beispiele an:
- Alles mit Weiterleitung:Sie könnten versehentlich eine Weiterleitung falsch herum eingeben oder vergessen. Da das Ziel eine nicht existierende Datei sein soll,
set -o noclobber
sollte sicherstellen, dass Sie nichts überschreiben; Sie könnten jedoch ein Gerät überschreiben, wenn Sie versehentlich>/dev/sda
schreiben (Bei einer schreibgeschützten CD besteht natürlich kein Risiko). Das spricht fürcat /dev/sr0 >image.iso
(schwer auf schädliche Weise falsch zu machen) gegenüber Alternativen wietee </dev/sr0 >image.iso
(Wenn Sie die Umleitungen invertieren oder die Eingabe vergessen,tee
schreibt nach/dev/sr0
). cat
:Sie könnten versehentlich zwei Dateien verketten. Damit sind die Daten leicht zu retten.dd
:i
undo
sind nah an der Tastatur und etwas ungewöhnlich. Es gibt kein Äquivalent zunoclobber
,of=
wird gerne alles überschreiben. Die Umleitungssyntax ist weniger fehleranfällig.cp
:Wenn Sie versehentlich die Quelle und das Ziel vertauschen, wird das Gerät überschrieben (wieder unter der Annahme eines nicht schreibgeschützten Geräts). Wenncp
wird mit einigen Optionen wie-R
aufgerufen oder-a
die einige Leute über einen Alias hinzufügen, kopiert es den Geräteknoten und nicht den Geräteinhalt.
- Alles mit Weiterleitung:Sie könnten versehentlich eine Weiterleitung falsch herum eingeben oder vergessen. Da das Ziel eine nicht existierende Datei sein soll,
-
Zusätzliche Funktionalität. Das einzige Werkzeug hier, das nützliche zusätzliche Funktionen hat, ist
pv
, mit seinen leistungsstarken Berichtsoptionen.
Aber hier können Sie trotzdem überprüfen, wie viel kopiert wurde, indem Sie sich die Größe der Ausgabedatei ansehen. -
Leistung. Dies ist ein I/O-gebundener Prozess; Der Haupteinfluss auf die Leistung ist die Puffergröße:Das Tool liest einen Teil von der Quelle, schreibt den Teil an das Ziel und wiederholt es. Wenn der Chunk zu klein ist, verbringt der Computer seine Zeit damit, zwischen Aufgaben zu wechseln. Wenn der Chunk zu groß ist, können die Lese- und Schreibvorgänge nicht parallelisiert werden. Die optimale Chunk-Größe auf einem PC liegt normalerweise bei einigen Megabyte, aber dies hängt offensichtlich stark vom Betriebssystem, von der Hardware und davon ab, was der Computer sonst noch tut. Ich habe vor einiger Zeit unter Linux Benchmarks für Kopien von Festplatte zu Festplatte erstellt, die für Kopien innerhalb derselben Festplatte
dd
zeigten mit einer großen Puffergröße hat den Vorteil, aber für plattenübergreifende Kopiencat
hat jedendd
besiegt Puffergröße.
Es gibt einige Gründe, warum Sie dd
finden so oft erwähnt. Abgesehen von der Leistung sind das keine besonders guten Gründe.
- In sehr alten Unix-Systemen konnten einige Textverarbeitungstools nicht mit Binärdaten umgehen (sie verwendeten intern nullterminierte Strings, daher hatten sie tendenziell Probleme mit Nullbytes; einige Tools gingen auch davon aus, dass Zeichen nur 7 Bits verwenden und verarbeitete 8-Bit-Zeichensätze nicht richtig). Ich bin mir nicht sicher, ob dies jemals ein Problem mit
cat
war (Es war mit eher zeilenorientierten Tools wiehead
,sed
, etc.), aber die Leute neigten dazu, es bei binären Daten zu vermeiden, weil es mit der Textverarbeitung in Verbindung gebracht wird. Auf modernen Systemen wie Linux, OSX, *BSD oder allem, was POSIX-kompatibel ist, ist dies kein Problem. - Es gibt eine Art Mythos, dass
dd
ist etwas „lower level“ als andere Tools wiecat
und greift direkt auf Geräte zu. Das ist völlig falsch:dd
undcat
undtee
und die anderen lesen alle Bytes von ihrem Eingang und schreiben die Bytes an ihren Ausgang. Die wahre Magie steckt in/dev/sr0
. dd
hat eine ungewöhnliche Befehlszeilensyntax, daher bietet das Erklären der Funktionsweise eine größere Gelegenheit, zu glänzen, indem man etwas erklärt, das nurcat /dev/sr0
schreibt .- Mit
dd
mit einer großen Puffergröße kann eine bessere Leistung haben, aber das ist nicht immer der Fall (siehe einige Benchmarks unter Linux).
Ein großes Risiko bei dd
ist, dass es einige Daten stillschweigend überspringen kann . Ich denke dd
ist sicher, solange skip
oder count
werden nicht bestanden, aber ich bin mir nicht sicher, ob dies auf allen Plattformen der Fall ist. Aber es hat keinen Vorteil außer der Leistung.
Verwenden Sie also einfach pv
wenn Sie seinen ausgefallenen Fortschrittsbericht wollen, oder cat
wenn nicht.
Anstatt generische Tools wie cat
zu verwenden oder dd
, sollte man Tools bevorzugen, die zuverlässiger auf Lesefehler reagieren, wie
- drescue
- readcd (das Fehlerkorrekturen/Wiederholungsmechanismen für CD/DVD-Laufwerke eingebaut hat)
Außerdem sind deren Voreinstellungen besser geeignet als z.B. dd
's.
In diesem Fall gibt es interessante Fakten, insbesondere diese:
- Ich habe gerade die Ausgabe überprüft, die ich erhalten und bereitgestellt habe (ich habe diesmal eine andere Disc verwendet, genau die Xubuntu 15.04 x64-Setup-Disc), und mit beiden Verfahren (
dd
undpv
) sind die Prüfsummen identisch . - Ich hatte die Idee dazu, nachdem ich
dd
gemacht hatte Verfahren, öffnen Sie das Laufwerk und schließen Sie es mit der gleichen Disc, und beenden Sie dann den Test mit dempv
Verfahren. Dabei habe ich mit beiden Verfahren identische Kopien erhalten. - Ich denke Ich habe beim ersten Mal unterschiedliche Prüfsummen erhalten, da die vom CD/DVD-Laufwerk gesammelten Daten aus irgendeinem Grund für einige Zeit für andere Zwecke "aufgezeichnet" zu sein scheinen (wie ein Cache) - daher wurden andere Operationen wie Prüfsummen vorgenommen a viel schneller als die Überweisung. Bitte kommentieren Sie, wenn Sie die genaue Ursache dafür kennen.
- Ein weiterer Fakt ist, dass
dd
ohnecount=X
Parameter stoppt korrekt am Ende der Disc und ergibt das gleiche Disc-Image wie beipv
(Prüfsummen sind identisch), also verwende ich besserdd
ohne Parameter oder nurpv
.
Im Moment scheint es also pv
zu sein und dd
kann eine CD/DVD-Kopie mit denselben Ergebnissen durchführen.