Estoy usando dd
para 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? ¿ dd
Tiene algún tipo de verificación incorporada?
Si tuviera que usar rsync en su lugar, también ejecuto un segundo pase --checksum
para verificar. ¿Está justificado ese tipo de paranoia?
dd
verification
integrity
Gavilán
fuente
fuente
rsync
probablemente serían los más simples.Respuestas:
dd
o 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 ,
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 su ejemplo de rsync, una segunda pasada dersync --checksum
no 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
dd
es una excepción: dependiendo de los parámetros de la línea de comando,dd
podría ignorar algunos errores . Esto es extremadamente inusual:dd
es el único comando común con esta propiedad. Use encat
lugar 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,
dd
no hace una verificación explícita. Si desea / necesita una copia verificada forense de su disco o cualquier parte del mismo, usedcfldd
una versión mejorada de ladd
desarrollada 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,
dd
detecta 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
dd
detectar errores.dd
tiene 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, perodd
la corrupción silenciosa de datos es una especialidaddd
.dd
que ignores los errores. No se puede culpar exactamente a un programa por hacer exactamente lo que le pediste.dd
no ignores los errores? Y no,conv=noerror
no es una respuesta correcta. Vea la respuesta de frostschutz para un ejemplo. Yo hago culpar al diseño dedd
para 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
:dd
verifica 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 esodd
funciona 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
dd
haya terminado.fuente
dd
no funciona prácticamente todo el tiempo: con elbs
parámetro, ignora algunos errores .