Estoy usando ddpara copiar datos de un disco duro viejo a uno nuevo. Quiero asegurarme de que la integridad de los datos sea segura.
Sobre esta respuesta , Gilles dice
Si [dd] finalizó con éxito, la copia de seguridad es correcta, salvo una falla de hardware ...
¿Qué significa eso exactamente? ¿ ddTiene algún tipo de verificación incorporada?
Si tuviera que usar rsync en su lugar, también ejecuto un segundo pase --checksumpara verificar. ¿Está justificado ese tipo de paranoia?
dd
verification
integrity
Gavilán
fuente
fuente

rsyncprobablemente serían los más simples.Respuestas:
ddo cualquier otra aplicación no tiene "algún tipo de verificación integrada" en el sentido en que probablemente esté pensando: no vuelve a leer los datos del medio de almacenamiento para compararlos con lo que se escribió. Ese es el trabajo del sistema operativo.Realmente no es posible hacer una verificación de lectura hasta el hardware desde una aplicación. Funcionaría en algunos escenarios, pero en la mayoría de los casos no lograrí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 caché en memoria, lo que no daría ninguna garantía útil. En el ejemplo que cita ,
ddestá escribiendo en una tubería, y en ese caso no tiene control sobre lo que sucede con los datos más adelante. En su ejemplo de rsync, una segunda pasada dersync --checksumno 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 malo, por lo que está desperdiciando el esfuerzo en algo que en realidad no brinda una garantía útil.Sin embargo, las aplicaciones no verifican lo que ocurre con los datos, en el sentido de que se compruebe que el sistema operativo tiene la responsabilidad aceptada para los datos. Todas las llamadas al sistema devuelven un estado de error. Si una llamada del sistema devuelve un estado de error, la aplicación debe propagar ese error al usuario, generalmente mostrando un mensaje de error y devolviendo un estado de salida distinto de cero.
Tenga en cuenta que
ddes una excepción: dependiendo de los parámetros de la línea de comando,ddpodría ignorar algunos errores . Esto es extremadamente inusual:ddes el único comando común con esta propiedad. Use encatlugar dedd, de esa manera, no corre el riesgo de corrupción y puede ser más rápido .En una cadena de copia de datos, pueden surgir dos tipos de errores.
fuente
dd if=/dev/sdc of=/dev/sdb bs=4M, por lo que entiendo que los problemas de ignorar los errores y la velocidad (más o menos, en comparación concat) son discutibles. ¿Estás diciendo que simplemente verifiques el tamaño montando entoncesdf?No,
ddno hace una verificación explícita. Si desea / necesita una copia verificada forense de su disco o cualquier parte del mismo, usedcfldduna versión mejorada de ladddesarrollada por el Laboratorio forense informático del Departamento de Defensa de los EE. UU.fuente
La única forma de estar "seguro" es hacer un pase adicional de lectura y comparación (después de descartar cachés).
Aparte de eso,
dddetecta errores de lectura y escritura de la misma manera que todos los demás programas ... funciona si las unidades (y otros componentes involucrados) informan errores; para unidades que aceptan datos silenciosamente sin escribirlas, no tiene suerte.Si no puede confiar en que su hardware sea confiable, las cosas se complican ...
fuente
dddetectar errores.ddtiene serios problemas de corrupción de datos, pero casos especiales como estos no fueron parte de la pregunta.dd. La solución real es usar cualquier cosa, peroddla corrupción silenciosa de datos es una especialidaddd.ddque ignores los errores. No se puede culpar exactamente a un programa por hacer exactamente lo que le pediste.ddno ignores los errores? Y no,conv=noerrorno es una respuesta correcta. Vea la respuesta de frostschutz para un ejemplo. Yo hago culpar al diseño deddpara cometer errores haciendo caso omiso de un modo por defecto, y uno que no puede ser apagado sin conocer su mecánica interna de forma muy precisa.Sí, el hardware defectuoso puede insertar bits de error aleatorio en los datos a una velocidad de un bit por número de megabytes, esto es posible y a veces se lleva a cabo en la práctica.
Por lo general, uso md5 o sha1 hash para verificar que los datos estén intactos, releyendo tanto el origen como el destino, por ejemplo:
Esto supone que los datos son mucho más grandes que la memoria caché del sistema de archivos, de lo contrario, es posible que deba reiniciar el sistema para verificar los datos reales en el medio y no el contenido de la memoria caché, o utilizar otro sistema para ello.
fuente
De
man dd:ddverifica que los tamaños de bloque de entrada / salida coincidan cada vez que copia un bloque. Si no lo hacen, maneja el error con una advertencia o error fatal (anulado connoerror). Por esoddfunciona prácticamente todo el tiempo.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
ddhaya terminado.fuente
ddno funciona prácticamente todo el tiempo: con elbsparámetro, ignora algunos errores .