Ist es besser, eine CD / DVD mit cat, dd, pv oder einem anderen Verfahren zu kopieren?

22

Hintergrund

Ich kopiere einige Daten-CDs / DVDs in ISO-Dateien, um sie später zu verwenden, ohne dass sie in das Laufwerk eingelegt werden müssen.

Ich suche im Internet nach Prozeduren und habe eine Menge gefunden:

  • Verwendung von catzum Kopieren eines Mediums: http://www.yolinux.com/TUTORIALS/LinuxTutorialCDBurn.html

    cat /dev/sr0 > image.iso
    
  • Verwendung von, ddum dies zu tun (anscheinend die am häufigsten verwendete): http://www.linuxjournal.com/content/archiving-cds-iso-commandline

    dd if=/dev/cdrom bs=blocksize count=count of=/path/to/isoimage.iso
    
  • Verwendung von nur pvum dies zu erreichen: Siehe man pvfür weitere Informationen, obwohl hier ein Auszug davon ist:

    Taking an image of a disk, skipping errors:
          pv -EE /dev/sda > disk-image.img
    
    Writing an image back to a disk:
          pv disk-image.img > /dev/sda
    
    Zeroing a disk:
          pv < /dev/zero > /dev/sda
    

Ich weiß nicht , ob alle von ihnen gleichwertig sein sollte, obwohl ich einige von ihnen getestet (mit dem md5sumWerkzeug) und zumindest ddund pvsind nicht gleichwertig. Nachfolgend finden Sie md5sumdie Laufwerks- und generierten Dateien für jede Prozedur:

md5 von dd procedure: 71b676875b0194495060b38f35237c3c

md5 des pv verfahrens: f3524d81fdeeef962b01e1d86e6acc04

EDIT: Diese Ausgabe stammte von einer anderen CD als die angegebene Ausgabe. Tatsächlich habe ich festgestellt, dass ich einige interessante Fakten als Antwort gebe.

Tatsächlich unterscheidet sich die Größe jeder Datei im Vergleich zueinander.

Gibt es eine optimale Vorgehensweise zum Kopieren einer CD / DVD oder verwende ich die Befehle nur falsch?


Weitere Informationen zur Situation

Hier finden Sie weitere Informationen zu dem Testfall, mit dem ich die bisher gefundenen Verfahren überprüfe:

isoinfo -d i /dev/sr0 Ausgabe: https://gist.github.com/JBFWP286/7f50f069dc5d1593ba62#file-isoinfo-output-19-aug-2015

ddKopieren des Mediums mit Ausgabeprüfsummen und Dateiinformationen Ausgabe: https://gist.github.com/JBFWP286/75decda0a67605590d32#file-dd-output-with-md5-and-sha256-19-aug-2015

pvKopieren der Medien mit Ausgabeprüfsummen und Dateiinformationen Ausgabe: https://gist.github.com/JBFWP286/700a13fe0a2f06ce5e7a#file-pv-output-with-md5-and-sha256-19-aug-2015

Jede Hilfe wird geschätzt!


quelle
Sind die Dateigrößen identisch? Ergebnis von cmp file1 file2? hast du dddas falsch benutzt count=(oder überhaupt keine Zählung, die nicht nötig ist, wenn du das Ganze willst?). Fehler in dmesg lesen?
Frostschutz
2
Es versteht sich von selbst, dass Dateien unterschiedlicher Größe (mit 99,9999999999 +% Wahrscheinlichkeit) unterschiedliche Prüfsummen haben werden. Solange Sie die Tests durchgeführt haben, wäre es schön, wenn Sie alle Ergebnisse veröffentlichen würden, um (1) den genauen ddBefehl, den Sie verwendet haben (welche Blockgröße? Was zählt?), (2) die Größen und Prüfsummen von alle Ausgaben und (3) alle unabhängigen Informationen, die Sie über die Datenmenge auf der optischen Quell-Disc haben. ……………… PS Warum verwenden Sie count=auf dd? Sie möchten das gesamte Disk-Image kopieren, nicht wahr?  count=sagt "so viele kopieren und dann aufhören".
Scott
@Scott Auf dieser Seite unter linuxjournal.com/content/archiving-cds-iso-commandline sagt der Autor, dass man isoinfo -d -i /dev/cdromdie Zählnummer verwenden sollte, um sie zu kennen und zu verwenden - in der Tat, er sagt, man sollte nicht nur verwenden dd. "Wenn Sie auf jeden Fall ein korrektes ISO-Image dieser CD benötigen, müssen Sie die richtige Blockgröße und Blockanzahl ermitteln, bevor Sie das Image erstellen."
@frostschutz Im ersten Fall waren die Größen nicht identisch, aber überraschenderweise habe ich es erneut versucht und unterschiedliche Ergebnisse erzielt. Weitere Informationen finden Sie in der Antwort, die ich bereitgestellt habe.

Antworten:

27

Alle folgenden Befehle sind gleichwertig. Sie lesen die Bytes der CD /dev/sr0und schreiben 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 würden Sie eine übereinander verwenden?

  • Einfachheit. Wenn Sie beispielsweise bereits einen Befehl kennen catoder kennen cp, müssen Sie keinen weiteren Befehl lernen.

  • Robustheit. Dieser ist ein bisschen eine Variante der Einfachheit. Wie groß ist das Risiko, dass das Ändern des Befehls seine Funktion ändert? Sehen wir uns einige Beispiele an:

    • Alles mit Umleitung: Sie könnten versehentlich eine Umleitung falsch herum platzieren oder vergessen. Da das Ziel eine nicht vorhandene Datei sein soll, set -o noclobbersollten Sie sicherstellen, dass Sie nichts überschreiben. Sie können jedoch ein Gerät überschreiben, wenn Sie versehentlich schreiben >/dev/sda(bei einer schreibgeschützten CD besteht natürlich kein Risiko). Dies spricht für cat /dev/sr0 >image.isoAlternativen (die sich nur schwer auf schädliche Weise verfälschen lassen) wie tee </dev/sr0 >image.iso(wenn Sie die Umleitungen umkehren oder die Eingabe vergessen, teewird darauf geschrieben /dev/sr0).
    • cat: Sie könnten versehentlich zwei Dateien verketten. Dadurch sind die Daten leicht zu retten.
    • dd: iund osind nah an der Tastatur und etwas ungewöhnlich. Es gibt kein Äquivalent zu noclobber, of=wird gerne etwas überschreiben. Die Umleitungssyntax ist weniger fehleranfällig.
    • cp: Wenn Sie die Quelle und das Ziel versehentlich vertauschen, wird das Gerät überschrieben (auch hier wird von einem nicht schreibgeschützten Gerät ausgegangen). Wenn cpmit einigen Optionen aufgerufen wird, wie z. B. -Roder -adie einige Personen über einen Alias ​​hinzufügen, wird der Geräteknoten und nicht der Geräteinhalt kopiert.
  • Zusätzliche Funktionalität. Das einzige Tool mit nützlichen zusätzlichen Funktionen sind pvdie leistungsstarken Berichtsoptionen.
    Hier können Sie jedoch überprüfen, wie viel kopiert wurde, indem Sie sich die Größe der Ausgabedatei ansehen.

  • Performance. Dies ist ein E / A-gebundener Prozess. Der wichtigste Einfluss auf die Leistung ist die Puffergröße: Das Tool liest einen Block aus der Quelle, schreibt den Block in das Ziel und wiederholt ihn. Wenn der Block zu klein ist, verbringt der Computer seine Zeit mit dem Umschalten zwischen Aufgaben. Wenn der Block zu groß ist, können die Lese- und Schreibvorgänge nicht parallelisiert werden. Die optimale Blockgröße auf einem PC liegt in der Regel bei einigen Megabyte, dies hängt jedoch offensichtlich stark vom Betriebssystem, der Hardware und den anderen Funktionen des Computers ab. Ich habe vor einiger Zeit Benchmarks für Kopien von Festplatte zu Festplatte unter Linux erstellt, die zeigten, dass Kopien auf derselben Festplatte dd mit einer großen Puffergröße den Vorteil haben, aber für festplattenübergreifende Kopien catgegenüber jeder ddPuffergröße gewonnen haben.

Es gibt einige Gründe, warum Sie ddso oft erwähnt werden. Abgesehen von der Leistung sind sie keine besonders guten Gründe.

  • In sehr alten Unix-Systemen konnten einige Textverarbeitungswerkzeuge keine Binärdaten verarbeiten (sie verwendeten intern nullterminierte Zeichenfolgen , sodass sie tendenziell Probleme mit null Bytes hatten; einige Werkzeuge gingen auch davon aus, dass Zeichen nur 7 Bits verwendeten und dies nicht taten 8-Bit-Zeichensätze richtig verarbeiten). Ich bin mir nicht sicher , ob dies jemals gab ein Problem mit cat(es mit mehr zeilenorientierten Tool war wie head, sedetc.), aber die Leute neigten sie auf binäre Daten zu vermeiden , wegen seiner Verbindung mit Textverarbeitung. Dies ist kein Problem auf modernen Systemen wie Linux, OSX, * BSD oder anderen POSIX-kompatiblen Systemen.
  • Es gibt eine Art Mythos, dddie etwas "untergeordneter" ist als andere Tools, wie zum Beispiel catGeräte, die direkt darauf zugreifen. Dies ist völlig falsch: ddund catund teeund die anderen lesen alle Bytes von ihrer Eingabe und schreiben die Bytes in ihre Ausgabe. Die wahre Magie ist in /dev/sr0.
  • ddEs hat eine ungewöhnliche Befehlszeilensyntax. Wenn Sie also erklären, wie es funktioniert, erhalten Sie eher die Möglichkeit, zu glänzen, indem Sie etwas erklären, das nur geschrieben wird cat /dev/sr0.
  • Die Verwendung dd eines großen Puffers kann zu einer besseren Leistung führen, dies ist jedoch nicht immer der Fall (siehe einige Benchmarks unter Linux ).

Ein großes Risiko ddbesteht darin, dass einige Daten unbemerkt übersprungen werden . Ich denke ddist sicher, solange skipoder countwerden nicht bestanden, aber ich bin nicht sicher, ob dies auf allen Plattformen der Fall ist. Aber es hat keinen Vorteil außer der Leistung.

Verwenden pvSie diese Option, catwenn Sie den ausgefallenen Fortschrittsbericht anzeigen möchten oder nicht.

Gilles 'SO - hör auf böse zu sein'
quelle
Vielen Dank, dass Sie sich die Zeit genommen haben, diese Antwort zu schreiben! =) Jetzt verstehe ich die Unterschiede zwischen ihnen. Nur eine Frage: Ist pv < /dev/sr0 > image.isodasselbe wie pv /dev/sr0 > image.iso(letzteres ist in den Manualseiten von pv zu finden)?
1
@ JBFWP286 Sie kopieren das Gleiche, pv /dev/sr0 …können jedoch den Dateinamen in Fortschrittsberichte aufnehmen, pv </dev/sr0können dies jedoch nicht.
Gilles 'SO- hör auf böse zu sein'
Ein weiterer Hinweis: cpKann als Alias ​​verwendet werden cp -R, wodurch (zumindest unter GNU cp als Root) cpder Geräteknoten und nicht dessen Inhalt kopiert wird .
März
2
@ JBFWP286 Ein Geräteknoten ist eine Datei, über die Sie auf Hardware oder andere spezielle Funktionen zugreifen können, die von Kerneltreibern bereitgestellt werden. Fast alle Dateien in /devsind Geräteknoten. Zum Beispiel cp -R /dev/sr0 image.isowürde image.isoeine Datei erstellt, über die auf das CD-Laufwerk zugegriffen wird, genau wie /dev/sr0eine reguläre Datei, die eine Kopie des Inhalts der CD enthält, die Sie erhalten cp /dev/sr0 image.iso.
Gilles 'SO - hör auf böse zu sein'
1
@ Hashim Ich schließe nicht, dass es eine bessere Leistung hat. Ich erwähne, dass es manchmal eine bessere Leistung hat . Ich habe auf eine Benchmark gebunden ich gemacht - im besten Fall ddhöher schlagen , catsondern nur durch einen geringen Spielraum.
Gilles 'SO- hör auf böse zu sein'
4

In diesem Fall gibt es interessante Fakten, insbesondere diese:

  • Ich habe gerade die Ausgabe überprüft, die ich erhalten und bereitgestellt habe (ich habe dieses Mal genau eine andere CD verwendet, die Xubuntu 15.04 x64-Installations-CD), und bei beiden Verfahren ( ddund pv) sind die Prüfsummen identisch .
  • Ich hatte die Idee, nach dem Ausführen des ddVorgangs das Laufwerk zu öffnen und mit derselben CD zu schließen und dann den Test mit dem pvVorgang zu beenden . Dabei habe ich mit beiden Verfahren identische Kopien erhalten.
  • Ich glaube, ich habe beim ersten Mal unterschiedliche Prüfsummen erhalten, weil aus irgendeinem Grund die vom CD / DVD-Laufwerk gesammelten Daten für eine gewisse Zeit zu anderen Zwecken "aufgezeichnet" zu sein scheinen (wie ein Cache) - daher waren es andere Vorgänge wie Prüfsummen viel schneller gemacht als die Übertragung. Bitte kommentieren Sie, wenn Sie die genaue Ursache dafür kennen.
  • Eine andere Tatsache ist, dass ohne ddden count=XParameter am Ende der Disc korrekt angehalten wird und dasselbe Disc-Image wie mit pv(Prüfsummen sind identisch) angezeigt wird. Daher ist es für mich besser, ohne ddoder nur Parameter zu verwenden pv.

Im Moment scheint pvund ddkann eine CD / DVD-Kopie mit den gleichen Ergebnissen erstellt werden.

Rui F Ribeiro
quelle