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

Ist es besser, cat, dd, pv oder ein anderes Verfahren zum Kopieren einer CD/DVD zu verwenden?

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 oder cp , 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ür cat /dev/sr0 >image.iso (schwer auf schädliche Weise falsch zu machen) gegenüber Alternativen wie tee </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 und o sind nah an der Tastatur und etwas ungewöhnlich. Es gibt kein Äquivalent zu noclobber , 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). Wenn cp 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.
  • 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 Kopien cat hat jeden dd 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 wie head , 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 wie cat und greift direkt auf Geräte zu. Das ist völlig falsch:dd und cat und tee 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 nur cat /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 und pv ) 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 dem pv 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 ohne count=X Parameter stoppt korrekt am Ende der Disc und ergibt das gleiche Disc-Image wie bei pv (Prüfsummen sind identisch), also verwende ich besser dd ohne Parameter oder nur pv .

Im Moment scheint es also pv zu sein und dd kann eine CD/DVD-Kopie mit denselben Ergebnissen durchführen.


Linux
  1. Wie portabel sind /dev/stdin, /dev/stdout und /dev/stderr?

  2. Wann sollte /dev/random vs. /dev/urandom verwendet werden?

  3. Was sind /dev/zero- und /dev/null-Dateien in Linux

  4. Wie tauscht man /dev/sda mit /dev/sdb aus?

  5. Wann sollte ich /dev/shm/ verwenden und wann sollte ich /tmp/?

DD von /dev/zero nach /dev/null ... was eigentlich passiert

Wie Linux /dev/tty und /dev/tty0 verwendet

Ist es falsch, /dev/random unter Linux mit /dev/urandom zu verknüpfen?

echo oder print /dev/stdin /dev/stdout /dev/stderr

Erstellen Sie ein virtuelles Blockgerät, das in /dev/null schreibt

Unterschiede zwischen /dev/sda und /dev/sda1