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

22

Fondo

Estoy copiando algunos CD / DVD de datos a archivos ISO para usarlos más tarde sin la necesidad de que estén en la unidad.

Estoy buscando procedimientos en la red y encontré mucho:

No sé si todos deberían ser equivalentes, aunque probé algunos de ellos (usando la md5sumherramienta) y, al menos, ddy nopv son equivalentes. Aquí está el disco y los archivos generados usando cada procedimiento:md5sum

md5 del procedimiento dd: 71b676875b0194495060b38f35237c3c

md5 del procedimiento pv: f3524d81fdeeef962b01e1d86e6acc04

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

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

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


Más información sobre la situación.

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

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

ddpara copiar los medios, con sumas de verificación de salida e información de archivo Salida: https://gist.github.com/JBFWP286/75decda0a67605590d32#file-dd-output-with-md5-and-sha256-19-aug-2015

pvpara copiar los medios, con sumas de verificación de salida e información de archivo Salida: https://gist.github.com/JBFWP286/700a13fe0a2f06ce5e7a#file-pv-output-with-md5-and-sha256-19-aug-2015

Cualquier ayuda será apreciada!


fuente
¿Son idénticos los tamaños de archivo? resultado de cmp file1 file2? ¿Utilizaste ddcon el error count=(o realmente algún conteo que no es necesario si quieres todo)? Leer errores en dmesg?
frostschutz
2
No hace falta decir que los archivos de diferentes tamaños (con 99.9999999999 +% de probabilidad) van a tener diferentes sumas de verificación. Mientras haya realizado las pruebas, sería bueno que publicara todos los resultados, para incluir (1) el ddcomando exacto que utilizó (¿qué tamaño de bloque? ¿Qué cuenta?), (2) los tamaños y sumas de comprobación de todas las salidas y (3) cualquier información independiente que tenga sobre la cantidad de datos en el disco óptico de origen. ... ... ... ... ... ... PS ¿Por qué utiliza count=el dd? Desea copiar toda la imagen del disco, ¿no?  count=dice "copia esto y luego detente".
Scott
@Scott En esta página linuxjournal.com/content/archiving-cds-iso-commandline, el autor dice que uno debe usar isoinfo -d -i /dev/cdrompara conocer el número de conteo y usarlo; de hecho, dice que no se debe usar solo dd. "En cualquier caso, si desea una imagen ISO adecuada de ese CD, necesita obtener el tamaño de bloque y el conteo de bloques correctos antes de crear su imagen".
@frostschutz En el primer caso, los tamaños no eran idénticos, pero sorprendentemente, intenté nuevamente y obtuve resultados diferentes. Vea la respuesta que proporcioné para más detalles.

Respuestas:

27

Todos los siguientes comandos son equivalentes. Leen los bytes del CD /dev/sr0y los escriben en un archivo 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 sabe cato cpno necesita aprender otro comando.

  • Robustez Esta es una variante de la simplicidad. ¿Cuánto riesgo existe de que cambiar el comando va a cambiar lo que hace? Veamos algunos ejemplos:

    • Cualquier cosa con redireccionamiento: puede colocar accidentalmente un redireccionamiento al revés u olvidarlo. Dado que se supone que el destino es un archivo no existente, set -o noclobberdebe asegurarse de no sobrescribir nada; sin embargo, podría sobrescribir un dispositivo si escribe accidentalmente >/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(difícil de equivocarse de una manera perjudicial) sobre alternativas como tee </dev/sr0 >image.iso(si invierte las redirecciones u olvida la entrada, teeescribirá /dev/sr0).
    • cat: puede concatenar accidentalmente dos archivos. Eso deja los datos fácilmente recuperables.
    • dd: iy oestán cerca del teclado, y son algo inusuales. No hay equivalente de noclobber, of=felizmente sobrescribirá cualquier cosa. La sintaxis de redirección es menos propensa a errores.
    • cp: si cambia accidentalmente el origen y el destino, el dispositivo se sobrescribirá (nuevamente, suponiendo que no sea un dispositivo de solo lectura). Si cpse invoca con algunas opciones como -Ro -aque algunas personas agregan a través de un alias, copiará el nodo del dispositivo en lugar del contenido del dispositivo.
  • Funcionalidad adicional. La única herramienta aquí que tiene funcionalidades adicionales útiles es pv, con sus poderosas opciones de informes.
    Pero aquí puede verificar cuánto se ha copiado mirando el tamaño del archivo de salida de todos modos.

  • Actuación. Este es un proceso vinculado a E / S; La principal influencia en el rendimiento es el tamaño del búfer: la herramienta lee un fragmento del origen, escribe el fragmento en el destino y lo repite. Si la porción es demasiado pequeña, la computadora pasa su tiempo cambiando entre tareas. Si el fragmento es demasiado grande, las operaciones de lectura y escritura no se pueden paralelizar. El tamaño óptimo del fragmento en una PC generalmente es de unos pocos megabytes, pero esto obviamente depende mucho del sistema operativo, del hardware y de qué más está haciendo la computadora. Hice pruebas de rendimiento para copias de disco duro a disco duro hace un tiempo, en Linux, lo que demostró que para copias dentro del mismo disco, dd con un gran tamaño de búfer tiene la ventaja, pero para las copias entre discos, catganó cualquier ddtamaño de búfer.

Hay algunas razones por las que se ddmenciona tan a menudo. Aparte del rendimiento, no son razones particularmente buenas.

  • En sistemas Unix muy antiguos, algunas herramientas de procesamiento de texto no podían manejar datos binarios (usaban cadenas terminadas en nulo internamente, por lo que tendían a tener problemas con bytes nulos; algunas herramientas también asumían que los caracteres usaban solo 7 bits y no procesar correctamente los juegos de caracteres de 8 bits). No estoy seguro si esto nunca fue un problema cat(que fue con más herramientas orientados a líneas como head, sed, etc.), pero la gente tiende a evitar que en los datos binarios debido a su asociación con el procesamiento de texto. Esto no es un problema en sistemas modernos como Linux, OSX, * BSD, o cualquier cosa que sea compatible con POSIX.
  • Hay una especie de mito que ddes algo "de nivel inferior" que otras herramientas como caty que accede directamente a los dispositivos. Esto es completamente falso: ddy caty teey los demás leen todos los bytes de su entrada y escriben los bytes en su salida. La verdadera magia está adentro /dev/sr0.
  • ddtiene una sintaxis inusual en la línea de comandos, por lo que explicar cómo funciona brinda más oportunidades 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 rendimiento, pero no siempre es así (ver algunos puntos de referencia en Linux ).

Un riesgo importante ddes que puede omitir silenciosamente algunos datos . Creo que ddes seguro siempre y cuando skipo countno se pasan, pero no estoy seguro de si este es el caso en todas las plataformas. Pero no tiene ninguna ventaja, excepto por el rendimiento.

Tan solo úselo pvsi desea su elegante informe de progreso, o catsi no lo desea.

Gilles 'SO- deja de ser malvado'
fuente
¡Muchas gracias por su tiempo escribiendo esta respuesta! =) Ahora entiendo las diferencias entre ellos. Solo una pregunta: ¿es pv < /dev/sr0 > image.isolo mismo que pv /dev/sr0 > image.iso(este último se encuentra en las páginas del manual de pv)?
1
@ JBFWP286 Copian lo mismo, pero pv /dev/sr0 …pueden incluir el nombre del archivo en los informes de progreso , pero pv </dev/sr0no pueden.
Gilles 'SO- deja de ser malvado'
Otra nota: cppodría tener un alias cp -R, que (al menos en GNU cp, como root) hace cpque copie el nodo del dispositivo en lugar de su contenido.
marcelm
2
@ JBFWP286 Un nodo de dispositivo es un archivo a través del cual accede al hardware u otras características especiales proporcionadas por los controladores del kernel. Casi todos los archivos /devson nodos de dispositivo. Por ejemplo, cp -R /dev/sr0 image.isocrearía image.isoun archivo a través del cual se accede a la unidad de CD, al igual que en /dev/sr0lugar de un archivo normal que contenga una copia del contenido del CD con el que se obtiene cp /dev/sr0 image.iso.
Gilles 'SO- deja de ser malvado'
1
@Hashim No concluyo que tenga un mejor rendimiento. Menciono que a veces tiene un mejor rendimiento . Me he vinculado a un punto de referencia que hice - en el mejor de los casos ddritmo catpero sólo por un pequeño margen.
Gilles 'SO- deja de ser malvado'
4

Hay hechos interesantes en este caso, especialmente estos:

  • Acabo de comprobar la salida que obtuve y proporcioné (esta vez utilicé otro disco, exactamente, el disco de configuración Xubuntu 15.04 x64), y con ambos procedimientos ( ddy pv) las sumas de comprobación son idénticas .
  • Tuve la idea de, después de realizar el ddprocedimiento, abrir la unidad y cerrarla con el mismo disco, y luego terminar la prueba con el pvprocedimiento. Al hacer eso, obtuve copias idénticas con ambos procedimientos.
  • Yo creo que tengo diferentes sumas de comprobación de la primera vez, porque por alguna razón, los datos recogidos de la unidad de CD / DVD parece ser "registrado" para otros fines durante algún tiempo (como una memoria caché) - por lo tanto, otras operaciones como sumas de comprobación eran hecho mucho más rápido que la transferencia. Comente si conoce la causa exacta de esto.
  • Otro hecho es que ddsin el count=Xparámetro se detiene correctamente al final del disco y proporciona la misma imagen de disco que con pv(las sumas de verificación son idénticas), por lo que es mejor para mí usar ddparámetros sin / o simplemente pv.

Entonces, por ahora, parece pvy ddpuede lograr una copia de CD / DVD con los mismos resultados.

Rui F Ribeiro
fuente