Entonces, ¿cuál es el caso cuando agregar conv=sync,noerrorhace una diferencia al hacer una copia de seguridad de un disco duro completo en un archivo de imagen? ¿Es conv=sync,noerrorun requisito al hacer cosas forenses? Si es así, ¿por qué es el caso con referencia a Linux Fedora?
Editar:
OK, entonces si hago dd sin conv=sync,noerror, y ddencuentro un error de lectura al leer el bloque (dimensionemos 100M), dd simplemente omite el bloque de 100M y lee el siguiente bloque sin escribir algo ( dd conv=sync,noerrorescribe ceros a 100M de salida, así que qué pasa con este caso ?)
¿Y si el hash del disco duro original y el archivo de salida son diferentes si no se realiza conv=sync,noerror? ¿O es solo cuando se produjo un error de lectura?

Respuestas:
conv=syncle indicaddque rellene cada bloque a la izquierda con valores nulos, de modo que si, debido a un error, no se puede leer el bloque completo, se conserva la longitud completa de los datos originales, aunque no todos los datos en sí se puedan incluir en la imagen . de esa manera al menos sabe qué tan dañados están los datos, lo que podría proporcionarle pistas forenses, y si no puede tomar una imagen debido a bloques defectuosos o lo que sea, no puede analizar ninguno de los datos. Algunos es mejor que ninguno.conv=sync,noerrores necesario para evitardddetenerse en caso de error y realizar un volcado.conv=syncno tiene mucho sentido sin noerror.http://linuxcommand.org/man_pages/dd1.html
http://vlinux-freak.blogspot.com/2011/01/how-to-use-dd-command.html
fuente
dd conv=sync,noerror(oconv=noerror,sync) corrompe sus datos.Según el error de E / S encontrado y el tamaño de bloque utilizado (¿más grande que el tamaño del sector físico?), Las direcciones de entrada y salida en realidad no permanecen sincronizadas sino que terminan en los desplazamientos incorrectos, lo que hace que la copia sea inútil para las imágenes del sistema de archivos y otros cosas donde las compensaciones importan.
Muchos lugares recomiendan usar
conv=noerror,synccuando se trata de discos defectuosos. Yo solía hacer la misma recomendación. A mí me funcionó, cuando tuve que recuperar un disco dañado hace algún tiempo.Sin embargo, las pruebas sugieren que esto no es realmente confiable de ninguna manera.
Use
losetupydmsetuppara crear unA error Bdispositivo:Los dispositivos de bucle A, B se ven así:
Entonces, es A, B con números incrementales que nos ayudarán a verificar las compensaciones más adelante.
Ahora para poner un error de lectura entre los dos, cortesía del mapeador de dispositivos Linux:
Este ejemplo crea
AerrorBcomo en2000sectores deA, seguido de2*48sectores de error, seguido de2000sectores deB.Solo para verificar:
Por lo tanto, se lee hasta
A127999\n, ya que cada línea tiene 8 bytes que suman 1024000 bytes, que son nuestros 2000 sectores de 512 bytes. Todo parece estar en orden...¿Va a mezclar?
Resultados:
Solo desde el tamaño de los archivos puede decir que las cosas están mal para algunos tamaños de bloque.
Sumas de control:
ddddrescuesolo está de acuerdo con los tamaños de bloque que están alineados con nuestra zona de error (512,4K).Verifiquemos los datos sin procesar.
Si bien los datos en sí parecen estar presentes, obviamente no están sincronizados; los desplazamientos están completamente fuera de control para bs = 16K, 1M, 42,64K ... solo aquellos con desplazamiento
2088576son correctos, como se puede verificar con el dispositivo original.¿Es este comportamiento esperado de
dd conv=noerror,sync? No lo sé y las dos implementacionesddque tenía disponibles ni siquiera están de acuerdo entre sí. El resultado es muy inútil si se usaddcon una opción de tamaño de bloque performante.Lo anterior fue producida usando
dd (coreutils) 8.25,BusyBox v1.24.2,GNU ddrescue 1.21.fuente
ddrescuelugar deddtrabajar con unidades con sectores defectuosos?syncargumento le dice que mantenga la salida con la longitud correcta. No funciona si usa el tamaño de bloque incorrecto, así que no lo haga.iflag=fullblockparece guardarlo. Aunque lasmd5sums de imágenes hechas coniflag=fullblocktodavía difieren (¡por supuesto! Porque los números de bytes que se omitieron debido al error de lectura difieren, es decir, las cantidades de\0s en las imágenes difieren), pero la alineación se guarda coniflag=fullblock:grep -a -b --only-matching B130000devuelve2088576todas las imágenes.