¿Haría algún tipo de verificación?

Estoy usando dd para copyr datos de un disco duro viejo a uno nuevo. Quiero estar seguro de que la integridad de los datos es segura.

En esta respuesta , Gilles dice

Si [dd] terminó con éxito, entonces la copy de security es correcta, salvo un error de hardware …

¿Qué significa eso exactamente? ¿Tiene dd algún tipo de verificación integrada?

Si --checksum que usar rsync en su lugar, ejecuto una segunda pasada con --checksum también, para verificar. ¿Está justificado ese tipo de paranoia?

dd o cualquier otra aplicación no tiene "algún tipo de verificación integrada" en el sentido en que probablemente esté pensando: no lee los datos del medio de almacenamiento para compararlos con lo que se escribió. Ese es el trabajo del sistema operativo.

No es posible hacer una verificación de verificación hasta el hardware desde una aplicación. Funcionaría en algunos escenarios, pero en la mayoría de los casos no conseguiría nada. La aplicación podría leer lo que acaba de escribir si está escribiendo directamente en un medio de almacenamiento , pero eso normalmente se leería desde un caching en memory, lo que no daría ninguna security útil. En el ejemplo que cita , dd está escribiendo en una tubería, y en ese caso no tiene control sobre lo que sucede con los datos más adelante en la línea. En su ejemplo de rsync, un segundo pase de rsync --checksum tiene sentido: en teoría podría detectar un error, pero en la práctica, si ocurre un error, entonces el segundo pase probablemente no informará nada incorrecto, por lo que está perdiendo esfuerzo en algo que en realidad no da una garantía útil.

Sin embargo, las aplicaciones verifican qué sucede con los datos, en el sentido de que verifican que el sistema operativo haya aceptado la responsabilidad de los datos. Todas las llamadas al sistema devuelven un estado de error. Si una llamada al sistema devuelve un estado de error, la aplicación debe propagar ese error al usuario, generalmente mostrando un post de error y devolviendo un estado de salida distinto de cero.

Tenga en count que dd es una exception: dependiendo de los parameters de la línea de command, dd podría ignorar algunos errores . Esto es extremadamente inusual: dd es el único command común con esta propiedad. Use cat lugar de dd , de esa forma no se arriesga a la corrupción y puede ser más rápido .

En una cadena de copy de datos, pueden popup dos types de errores.

  • Corrupción: un bit se voltea durante la transferencia. No hay forma de verificar esto en el nivel de la aplicación, porque si eso ocurre, es debido a un error de progtwigción o error de hardware que es muy probable que cause la misma corrupción al leer de nuevo. La única forma útil de verificar que no haya ocurrido tal corrupción es desconectar físicamente los medios e intentar nuevamente, preferiblemente en una computadora diferente en caso de que el problema fuera con la RAM.
  • Truncamiento: todos los datos que se copyron se copyron correctamente, pero algunos de los datos no se copyron en absoluto. Este vale la pena revisarlo a veces, dependiendo de la complejidad del command. No necesita leer los datos para hacer eso: simplemente verifique el tamaño.

No, dd no hace una verificación explícita. Si desea / necesita una copy de su disco o parte de ella, verificada de manera forense, use dcfldd que es una versión mejorada de dd desarrollada por el Laboratorio forense de informática del Departamento de Defensa de EE. UU.

La única forma de estar "seguro" es hacer un pase adicional de lectura y comparación (después de descartar cachings).

Aparte de eso, dd detecta los errores de lectura y escritura de la misma manera que lo hacen los demás progtwigs … funciona si las unidades (y otros componentes involucrados) informan sobre errores; para unidades que aceptan datos silenciosamente sin escribirlos, no tiene suerte.

¿Está justificado ese tipo de paranoia?

Si no puede confiar en que su hardware sea confiable, las cosas se complican …

Sí, el hardware defectuoso puede insert bits de error aleatorios en los datos a cierta velocidad como un bit por número de megabytes, esto es posible y se lleva a cabo en la práctica a veces.

Por lo general, uso md5 o sha1 hash para verificar que los datos estén intactos, volviendo a leer tanto el origen como el destino, por ejemplo:

 dd if=/dev/sdb of=~/hd_backup dd if=/dev/sdb | md5sum dd if=~/hd_backup | md5sum 

Esto supone que los datos son mucho más grandes que la caching del sistema de files; de lo contrario, es posible que deba reiniciar el sistema para verificar los datos reales en el medio y no los contenidos de la caching, o utilizar otro sistema para ello.

Del man dd :

Cuando finaliza, dd muestra la cantidad de bloques de input y salida completos y parciales, los loggings de input truncados y los bloques de intercambio de bytes de longitud impar en la salida de error estándar.

Un bloque de input parcial es uno donde se leyó less que el tamaño del bloque de input. Un bloque de salida parcial es aquel en el que se escribió less que el tamaño del bloque de salida. Los bloques de salida parcial de los dispositivos de cinta se consideran errores fatales. De lo contrario, se escribirá el rest del bloque. Los bloques de salida parcial de los dispositivos de caracteres producirán un post de advertencia.

dd verifica que los tamaños de bloque de input / salida coinciden cada vez que copy un bloque. Si no lo hacen, maneja el error con una advertencia o error fatal (overidden con noerror ). Es por eso que dd funciona prácticamente todo el time.

Aún así, no reemplaza la verificación manual de la integridad de su disco. Si la información es valiosa para usted, entonces sí, su paranoia está justificada . Ejecute una verificación manual una vez que termine dd .