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:
Uso de
cat
para copiar un medio: http://www.yolinux.com/TUTORIALS/LinuxTutorialCDBurn.htmlcat /dev/sr0 > image.iso
Uso de
dd
hacerlo (aparentemente el más utilizado): http://www.linuxjournal.com/content/archiving-cds-iso-commandlinedd if=/dev/cdrom bs=blocksize count=count of=/path/to/isoimage.iso
Uso de solo
pv
para lograr esto: consulteman pv
para obtener más información, aunque aquí hay un extracto: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 md5sum
herramienta) y, al menos, dd
y 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
dd
para 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
pv
para 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!
cmp file1 file2
? ¿Utilizastedd
con el errorcount=
(o realmente algún conteo que no es necesario si quieres todo)? Leer errores en dmesg?dd
comando 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é utilizacount=
eldd
? Desea copiar toda la imagen del disco, ¿no?count=
dice "copia esto y luego detente".isoinfo -d -i /dev/cdrom
para conocer el número de conteo y usarlo; de hecho, dice que no se debe usar solodd
. "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".Respuestas:
Todos los siguientes comandos son equivalentes. Leen los bytes del CD
/dev/sr0
y los escriben en un archivo llamadoimage.iso
.¿Por qué usarías uno sobre el otro?
Sencillez. Por ejemplo, si ya sabe
cat
ocp
no 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:
set -o noclobber
debe 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 decat /dev/sr0 >image.iso
(difícil de equivocarse de una manera perjudicial) sobre alternativas comotee </dev/sr0 >image.iso
(si invierte las redirecciones u olvida la entrada,tee
escribirá/dev/sr0
).cat
: puede concatenar accidentalmente dos archivos. Eso deja los datos fácilmente recuperables.dd
:i
yo
están cerca del teclado, y son algo inusuales. No hay equivalente denoclobber
,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). Sicp
se invoca con algunas opciones como-R
o-a
que 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,cat
ganó cualquierdd
tamaño de búfer.Hay algunas razones por las que se
dd
menciona tan a menudo. Aparte del rendimiento, no son razones particularmente buenas.cat
(que fue con más herramientas orientados a líneas comohead
,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.dd
es algo "de nivel inferior" que otras herramientas comocat
y que accede directamente a los dispositivos. Esto es completamente falso:dd
ycat
ytee
y los demás leen todos los bytes de su entrada y escriben los bytes en su salida. La verdadera magia está adentro/dev/sr0
.dd
tiene 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 escribecat /dev/sr0
.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
dd
es que puede omitir silenciosamente algunos datos . Creo quedd
es seguro siempre y cuandoskip
ocount
no 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
pv
si desea su elegante informe de progreso, ocat
si no lo desea.fuente
pv < /dev/sr0 > image.iso
lo mismo quepv /dev/sr0 > image.iso
(este último se encuentra en las páginas del manual de pv)?pv /dev/sr0 …
pueden incluir el nombre del archivo en los informes de progreso , peropv </dev/sr0
no pueden.cp
podría tener un aliascp -R
, que (al menos en GNU cp, como root) hacecp
que copie el nodo del dispositivo en lugar de su contenido./dev
son nodos de dispositivo. Por ejemplo,cp -R /dev/sr0 image.iso
crearíaimage.iso
un archivo a través del cual se accede a la unidad de CD, al igual que en/dev/sr0
lugar de un archivo normal que contenga una copia del contenido del CD con el que se obtienecp /dev/sr0 image.iso
.dd
ritmocat
pero sólo por un pequeño margen.Hay hechos interesantes en este caso, especialmente estos:
dd
ypv
) las sumas de comprobación son idénticas .dd
procedimiento, abrir la unidad y cerrarla con el mismo disco, y luego terminar la prueba con elpv
procedimiento. Al hacer eso, obtuve copias idénticas con ambos procedimientos.dd
sin elcount=X
parámetro se detiene correctamente al final del disco y proporciona la misma imagen de disco que conpv
(las sumas de verificación son idénticas), por lo que es mejor para mí usardd
parámetros sin / o simplementepv
.Entonces, por ahora, parece
pv
ydd
puede lograr una copia de CD / DVD con los mismos resultados.fuente