¿Es mejor usar cat, dd, pv u otro procedimiento para copyr un CD / DVD?

Fondo

Estoy copyndo algunos CD / DVD de datos a files ISO para usarlos más tarde sin necesidad de ellos en la unidad.

Estoy buscando en la networking los procedimientos y encontré mucho:

  • Uso de cat para copyr un medio: http://www.yolinux.com/TUTORIALS/LinuxTutorialCDBurn.html

     cat /dev/sr0 > image.iso 
  • Uso de dd para hacerlo (aparentemente el más utilizado): http://www.linuxjournal.com/content/archiving-cds-iso-commandline

     dd if=/dev/cdrom bs=blocksize count=count of=/path/to/isoimage.iso 
  • Uso de solo pv para lograr esto: vea man pv para más información, aunque aquí hay un extracto de esto:

     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 

No sé si todos deberían ser equivalentes, aunque probé algunos de ellos (usando la herramienta md5sum ) y, al less, dd y pv no son equivalentes. Aquí está el md5sum de la unidad y los files generados usando cada procedimiento:

md5 del procedimiento dd: 71b676875b0194495060b38f35237c3c

md5 del procedimiento pv: f3524d81fdeeef962b01e1d86e6acc04

EDITAR: Esa salida fue de otro CD que la salida dada. De hecho, me di count de que hay algunos hechos interesantes que proporciono como respuesta.

De hecho, el tamaño de cada file es diferente en comparación entre sí.

Entonces, ¿hay un mejor procedimiento para copyr un CD / DVD o simplemente estoy usando los commands incorrectamente?


Más información sobre la situación

Aquí hay más información sobre el caso de testing que estoy usando para verificar los procedimientos que he encontrado hasta ahora:

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

dd para copyr los medios, con sums de comprobación de salida e información de file Salida: https://gist.github.com/JBFWP286/75decda0a67605590d32#file-dd-output-with-md5-and-sha256-19-aug-2015

pv para copyr los medios, con sums de comprobación de salida e información de file Salida: https://gist.github.com/JBFWP286/700a13fe0a2f06ce5e7a#file-pv-output-with-md5-and-sha256-19-aug-2015

¡Cualquier ayuda será apreciada!

Todos los siguientes commands son equivalentes. Leen los bytes del CD /dev/sr0 y los escriben en un file llamado 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 

¿Por qué usarías uno sobre el otro?

  • Sencillez. Por ejemplo, si ya conoce cat o cp , no necesita aprender otro command.

  • Robustez. Esta es una pequeña variante de simplicidad. ¿Cuánto riesgo hay de que cambiar el command cambie lo que hace? Veamos algunos ejemplos:

    • Cualquier cosa con networkingirección: puede poner accidentalmente una networkingirección al revés, u olvidarla. Dado que se supone que el destino es un file no existente, set -o noclobber debe garantizar que no sobrescriba nada; Sin embargo, es posible que sobrescriba un dispositivo si accidentalmente escribe >/dev/sda (para un CD, que es de solo lectura, no hay riesgo, por supuesto). Esto habla a favor de cat /dev/sr0 >image.iso (es difícil equivocarse de una manera dañina) sobre alternativas como tee </dev/sr0 >image.iso (si invierte las networkingirecciones u olvida la input, tee escribirá en /dev/sr0 ).
    • cat : podría concatenar accidentalmente dos files. Eso deja los datos fácilmente rescatables.
    • dd : i y o están cerca del keyboard, y algo inusual. No hay equivalente de noclobber , of= felizmente sobrescribirá cualquier cosa. La syntax de networkingirección es less propensa a errores.
    • cp : si cambia accidentalmente la fuente y el objective, el dispositivo se sobrescribirá (nuevamente, suponiendo que es un dispositivo que no es de solo lectura). Si se invoca cp con algunas opciones como -R o -a que algunas personas agregan a través de un alias, copyrá el nodo del dispositivo en lugar del contenido del dispositivo.
  • Funcionalidad adicional. La única herramienta que tiene una funcionalidad adicional útil es pv , con sus poderosas opciones de informes.
    Pero aquí puedes verificar cuánto se ha copydo al mirar el tamaño del file de salida de todos modos.

  • Actuación. Este es un process vinculado a E / S; la principal influencia en el performance es el tamaño del búfer: la herramienta lee un fragment de la fuente, escribe el fragment en el destino y lo repite. Si el fragment es demasiado pequeño, la computadora pasa su time cambiando entre tareas. Si el fragment es demasiado grande, las operaciones de lectura y escritura no se pueden paralelizar. El tamaño de fragment óptimo en una PC suele ser de unos pocos megabytes, pero esto es obviamente muy dependiente del sistema operativo, del hardware y de qué otra cosa está haciendo la computadora. Hice benchmarks para discos duros en copys de disco duro hace un time, en Linux, que demostró que para copys dentro del mismo disco, dd con un gran tamaño de búfer tiene la ventaja, pero para copys en el disco cruzado, cat ganó cualquier búfer dd tamaño.

Hay algunas razones por las cuales encuentras a dd tan a menudo mencionado. Además del performance, no son particularmente buenos motivos.

  • En sistemas Unix muy antiguos, algunas herramientas de procesamiento de text no podían manejar datos binarys (usaban cadenas terminadas en nulos internamente, por lo que solían tener problemas con bytes nulos; algunas herramientas también suponían que los caracteres solo usaban 7 bits y no procesar juegos de caracteres de 8 bits correctamente). No estoy seguro si esto alguna vez fue un problema con cat (fue con más herramientas orientadas a líneas como head , sed , etc.), pero las personas tendían a evitarlo en datos binarys debido a su asociación con el procesamiento de text. Esto no es un problema en sistemas modernos como Linux, OSX, * BSD, o cualquier cosa que sea compatible con POSIX.
  • Existe una especie de mito que dd es de alguna manera de "menor nivel" que otras herramientas como cat y accede a los dispositivos directamente. Esto es completamente falso: dd cat y tee y los demás leen bytes desde su input y escriben los bytes en su salida. La verdadera magia está en /dev/sr0 .
  • dd tiene una syntax de línea de command inusual, por lo que explicar cómo funciona brinda más oportunidad de brillar al explicar algo que simplemente escribe cat /dev/sr0 .
  • Usar dd con un tamaño de búfer grande puede tener un mejor performance, pero no siempre es el caso (ver algunos puntos de reference en Linux ).

Un riesgo importante con dd es que puede omitir algunos datos en silencio . Creo que dd es seguro siempre que no se pasen los skip o el count pero no estoy seguro de si este es el caso en todas las plataforms. Pero no tiene ninguna ventaja excepto por el performance.

Así que solo use pv si desea un informe de progreso elaborado o cat si no lo hace.

Hay hechos interesantes en este caso, especialmente estos:

  • Acabo de comprobar la salida que obtuve y proporcioné (utilicé otro disco esta vez, exactamente, el disco de installation Xubuntu 15.04 x64), y con ambos procedimientos ( dd y pv ) las sums de comprobación son idénticas .
  • Tuve la idea de, después de hacer el procedimiento dd , abrir el disco y cerrarlo con el mismo disco, y luego terminar la testing con el procedimiento pv . Al hacer eso, obtuve copys idénticas con ambos procedimientos.
  • Creo que obtuve diferentes sums de verificación la primera vez, porque por alguna razón, los datos recostackdos de la unidad de CD / DVD parecen estar "grabados" para otros propósitos durante algún time (como un caching), por lo tanto, otras operaciones como las sums de comprobación fueron hecho mucho más rápido que la transferencia. Comente si conoce la causa exacta de esto.
  • Otro hecho es que dd sin el parámetro count=X se detiene correctamente al final del disco y da la misma image de disco que con pv (las sums de comprobación son idénticas), así que es mejor para mí usar los parameters dd w / o solo pv .

Entonces, por ahora, parece que pv y dd pueden lograr una copy de CD / DVD con los mismos resultados.

Espero que esto ayude a cualquiera! Siéntete libre y comenta otros detalles que sabes sobre esto.