Entonces, ¿cuál es el caso cuando agregar conv=sync,noerror
hace una diferencia al hacer una copia de seguridad de un disco duro completo en un archivo de imagen? ¿Es conv=sync,noerror
un 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 dd
encuentro 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,noerror
escribe 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=sync
le indicadd
que 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,noerror
es necesario para evitardd
detenerse en caso de error y realizar un volcado.conv=sync
no 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,sync
cuando 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
losetup
ydmsetup
para crear unA error B
dispositivo: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
AerrorB
como en2000
sectores deA
, seguido de2*48
sectores de error, seguido de2000
sectores 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:
dd
ddrescue
solo 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
2088576
son correctos, como se puede verificar con el dispositivo original.¿Es este comportamiento esperado de
dd conv=noerror,sync
? No lo sé y las dos implementacionesdd
que tenía disponibles ni siquiera están de acuerdo entre sí. El resultado es muy inútil si se usadd
con 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
ddrescue
lugar dedd
trabajar con unidades con sectores defectuosos?sync
argumento 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=fullblock
parece guardarlo. Aunque lasmd5sum
s de imágenes hechas coniflag=fullblock
todavía difieren (¡por supuesto! Porque los números de bytes que se omitieron debido al error de lectura difieren, es decir, las cantidades de\0
s en las imágenes difieren), pero la alineación se guarda coniflag=fullblock
:grep -a -b --only-matching B130000
devuelve2088576
todas las imágenes.