GNU/Linux >> Tutoriales Linux >  >> Linux

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

Todos los siguientes comandos son equivalentes. Leen los bytes del CD /dev/sr0 y escríbalos 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 sabes cat o cp , no necesita aprender otro comando más.

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

    • Cualquier cosa con redirección:podrías accidentalmente colocar una redirección al revés u olvidarla. Dado que se supone que el destino es un archivo inexistente, set -o noclobber debe asegurarse de no sobrescribir nada; sin embargo, puede sobrescribir un dispositivo si accidentalmente escribe >/dev/sda (para un CD, que es de sólo lectura, no hay riesgo, por supuesto). Esto habla a favor de cat /dev/sr0 >image.iso (difícil de equivocarse de una manera dañina) sobre alternativas como tee </dev/sr0 >image.iso (si invierte las redirecciones u olvida la de entrada, tee escribirá a /dev/sr0 ).
    • cat :puede concatenar accidentalmente dos archivos. Eso deja los datos fácilmente recuperables.
    • dd :i y o está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 accidentalmente intercambia la fuente y el destino, el dispositivo se sobrescribirá (nuevamente, suponiendo que no sea un dispositivo de solo lectura). Si cp 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 una funcionalidad adicional útil 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 el fragmento es demasiado pequeño, 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 de fragmento óptimo en una PC suele ser de unos pocos megabytes, pero esto obviamente depende mucho del sistema operativo, del hardware y de qué más esté haciendo la computadora. Hice puntos de referencia para copias de disco duro a disco hace un tiempo, en Linux, que mostró que para copias dentro del mismo disco, dd con un gran tamaño de búfer tiene la ventaja, pero para copias entre discos, cat se ganó a cualquier dd tamaño del búfer.

Hay algunas razones por las que encuentra dd mencionado tan a menudo. Además del rendimiento, no son razones particularmente buenas.

  • En sistemas Unix muy antiguos, algunas herramientas de procesamiento de texto no podían manejar datos binarios (utilizaban 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 procesó juegos de caracteres de 8 bits correctamente). No estoy seguro de si esto alguna vez fue un problema con cat (fue con herramientas más orientadas a la línea como head , sed , etc.), pero la gente tendía a evitarlo en 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 cualquiera que sea compatible con POSIX.
  • Existe una especie de mito que dd es algo de "nivel más bajo" que otras herramientas como cat y accede a los dispositivos directamente. Esto es completamente falso:dd y cat y tee y los demás leen bytes de su entrada y escriben los bytes en su salida. La verdadera magia está en /dev/sr0 .
  • dd tiene una sintaxis de línea de comando inusual, por lo que explicar cómo funciona brinda una mayor oportunidad de brillar al explicar algo que simplemente escribe cat /dev/sr0 .
  • Uso de dd con un tamaño de búfer grande puede tener un mejor rendimiento, pero no siempre es el caso (vea algunos puntos de referencia en Linux).

Un gran riesgo con dd es que puede omitir silenciosamente algunos datos . Creo que dd es seguro siempre que skip o count 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.

Así que solo usa pv si desea su elegante informe de progreso, o cat si no lo haces.


En lugar de usar herramientas genéricas como cat o dd , uno debería preferir herramientas que sean más confiables en errores de lectura como

  • drescue
  • readcd (que tiene correcciones de errores/mecanismos de reintento para unidades de CD/DVD integrados)

Además, su configuración predeterminada es más adecuada que, p. dd 's.


Hay datos interesantes en este caso, especialmente estos:

  • Acabo de verificar la salida que obtuve y proporcioné (usé otro disco esta vez, exactamente, el disco de instalación de Xubuntu 15.04 x64), y con ambos procedimientos (dd y pv ) las sumas de comprobación son idénticas .
  • Tuve la idea, después de hacer el dd procedimiento, abra la unidad y ciérrela con el mismo disco, y luego finalice la prueba con el pv procedimiento. Haciendo precisamente eso, obtuve copias idénticas con ambos procedimientos.
  • Yo creo Obtuve diferentes sumas de verificación la primera vez, porque por alguna razón, los datos recopilados de la unidad de CD/DVD parecen estar "grabados" para otros fines durante algún tiempo (como un caché); por lo tanto, otras operaciones como las sumas de verificación se hicieron un mucho más rápido que la transferencia. Comente si conoce la causa exacta de esto.
  • Otro hecho es que dd sin el count=X el parámetro se detiene correctamente al final del disco y da la misma imagen de disco que con pv (las sumas de verificación son idénticas), por lo que es mejor para mí usar dd sin parámetros o simplemente pv .

Entonces, por ahora, parece pv y dd puede realizar una copia de CD/DVD con los mismos resultados.


Linux
  1. Cómo generar una contraseña aleatoria en Linux usando /dev/random

  2. ¿Cómo maneja Linux múltiples separadores de rutas consecutivas (/home////username///file)?

  3. Linux:¿Diferencia entre /dev/console, /dev/tty y /dev/tty0?

  4. ¿Cuándo usar /dev/random Vs /dev/urandom?

  5. Cómo mapear dispositivos /dev/sdX y /dev/mapper/mpathY desde el dispositivo /dev/dm-Z

¿Cómo se intercambia /dev/sda con /dev/sdb?

DD de /dev/zero a /dev/null... lo que realmente sucede

Linux:diferencia entre /dev/console, /dev/tty y /dev/tty0

¿Está mal vincular /dev/random a /dev/urandom en Linux?

hacer eco o imprimir /dev/stdin /dev/stdout /dev/stderr

Crear un dispositivo de bloque virtual que escriba en /dev/null