Antecedentes / contexto:
Actualmente estoy ejecutando GNU ddrescue 1.18.1 para recuperar datos de un USB que experimentó una desconexión del cable mientras escribía una imagen de disco virtual en la partición disk2s1. Inicialmente estoy recuperando mi segunda partición (disk2s2) y noto que he alcanzado la tercera fase (división). Estoy colocando la imagen en un almacenamiento de red.
Pregunta:
He notado que esta fase se repite. ¿Hay alguna manera de calcular la cantidad de bucles que probablemente experimentaré, dada mi información de estado actual (solo estoy mostrando dos errores)?
Estado:
Actualizar / Editar:
Así que todavía estoy muy interesado en cómo uno podría estimar los ciclos / tiempo para completar usando la herramienta ddrescue. Según los comentarios, estoy agregando una evaluación de un archivo de registro para mi partición disk2s1 que se está ejecutando actualmente (el disk2s2 se ha completado después de 14.5 horas, con una interrupción del usuario durante aproximadamente 6 horas).
Registro de partición completado
Para la partición que acaba de completar, aquí está el resultado de la inspección del registro.
Referencia (notas del algoritmo ddrescue):
4 algoritmo
GNU ddrescue no es un derivado de dd, ni está relacionado con dd de ninguna manera, excepto en que ambos pueden usarse para copiar datos de un dispositivo a otro. La diferencia clave es que ddrescue utiliza un algoritmo sofisticado para copiar datos de unidades defectuosas, causándoles el menor daño adicional posible.
Ddrescue gestiona eficientemente el estado del rescate en progreso e intenta rescatar las partes buenas primero, programando las lecturas dentro de las áreas malas (o lentas) para más adelante. Esto maximiza la cantidad de datos que finalmente se pueden recuperar de una unidad que falla.
La utilidad dd estándar se puede usar para guardar datos de una unidad que falla, pero lee los datos secuencialmente, lo que puede desgastar la unidad sin rescatar nada si los errores están al comienzo de la unidad.
Otros programas leen los datos secuencialmente pero cambian a lecturas de tamaño pequeño cuando encuentran errores. Esta es una mala idea porque significa pasar más tiempo en áreas de error, dañando la superficie, los cabezales y la mecánica de la transmisión, en lugar de salir de ellos lo más rápido posible. Este comportamiento reduce las posibilidades de rescatar los datos buenos restantes.
El algoritmo de ddrescue es el siguiente (el usuario puede interrumpir el proceso en cualquier momento, pero tenga en cuenta que una unidad defectuosa puede bloquear ddrescue durante mucho tiempo hasta que el núcleo se dé por vencido):
1) Opcionalmente, lea un archivo de registro que describa el estado de un rescate de varias partes o previamente interrumpido. Si no se especifica ningún archivo de registro o está vacío o no existe, marque todo el dominio de rescate como no probado.
2) (Primera fase; Copia) Lea las partes no probadas del archivo de entrada, marque los bloques fallidos como no recortados y salte más allá de ellos. Salta también más allá de las áreas lentas. Las áreas omitidas se prueban más tarde en dos pasadas adicionales (antes de recortar), invirtiendo la dirección después de cada pasada hasta que se pruebe todo el dominio de rescate. El tercer pase es un pase de barrido, con saltos desactivados. (El propósito es delimitar rápidamente los errores grandes, mantener el archivo de registro pequeño y producir buenos puntos de partida para el recorte). Solo las áreas no probadas se leen en bloques grandes. El recorte, la división y el reintento se realizan sector por sector. Cada sector se prueba como máximo dos veces; el primero en este paso (generalmente como parte de una lectura de bloque grande, pero a veces como lectura de un solo sector), el segundo en uno de los pasos a continuación como lectura de un solo sector.
3) (Segunda fase; Recorte) Lea hacia adelante un sector a la vez desde el borde de ataque del bloque no recortado más pequeño, hasta encontrar un sector defectuoso. Luego, lea hacia atrás un sector a la vez desde el borde posterior del mismo bloque, hasta encontrar un sector defectuoso. Para cada bloque no recortado, marque los sectores defectuosos encontrados como sectores defectuosos y marque el resto de ese bloque como no dividido sin intentar leerlo. Repita hasta que no haya más bloques no recortados. (Los bloques grandes no recortados se producen por concatenación de los más pequeños y, por lo tanto, su fracción de datos buenos en los bordes es más pequeña).
4) (Tercera fase; División) Lea hacia adelante un sector a la vez desde el centro del bloque no dividido más grande, hasta que se encuentre un sector defectuoso. Luego, si el sector defectuoso encontrado no es el primero que se intentó, lea hacia atrás un sector a la vez desde el centro del mismo bloque, hasta que se encuentre un sector defectuoso. Si el archivo de registro es mayor que '--logfile-size', lea secuencialmente los bloques no divididos más grandes hasta que el número de entradas en el archivo de registro caiga por debajo de '--logfile-size'. Repita hasta que todos los bloques no divididos restantes tengan menos de 7 sectores. Luego lea los bloques no divididos restantes secuencialmente.
5) (Cuarta fase; Reintento) Opcionalmente, intente volver a leer los sectores defectuosos hasta alcanzar el número especificado de reintentos. Cada sector defectuoso se prueba solo una vez en cada pasada. Ddrescue no puede saber si un sector defectuoso es irrecuperable o si finalmente se leerá después de algunos reintentos.
6) Opcionalmente, escriba un archivo de registro para su uso posterior.
El tamaño total del error ('errsize') es la suma de los tamaños de todos los bloques no recortados, no divididos y de sectores defectuosos. Aumenta durante la fase de copia y puede disminuir durante el recorte, la división y el reintento. Tenga en cuenta que a medida que ddrescue divide los bloques fallidos, haciéndolos más pequeños, el tamaño total del error puede disminuir mientras aumenta el número de errores.
El archivo de registro se guarda periódicamente en el disco, así como cuando ddrescue finaliza o se interrumpe. Entonces, en caso de un accidente, puede reanudar el rescate con poca copia. El intervalo entre guardar varía de 30 segundos a 5 minutos dependiendo del tamaño del archivo de registro (los archivos de registro más grandes se guardan a intervalos más largos).
Además, el mismo archivo de registro se puede usar para múltiples comandos que copian diferentes áreas del archivo de entrada y para múltiples intentos de recuperación en diferentes subconjuntos. Ver este ejemplo:
Rescata primero la parte más importante del disco. ddrescue -i0 -s50MiB / dev / hdc hdimage logfile ddrescue -i0 -s1MiB -d -r3 / dev / hdc hdimage logfile
Luego rescata algunas áreas clave del disco. ddrescue -i30GiB -s10GiB / dev / hdc hdimage logfile ddrescue -i230GiB -s5GiB / dev / hdc hdimage logfile
Ahora rescata al resto (no vuelve a copiar lo que ya está hecho). ddrescue / dev / hdc archivo de registro de hdimage ddrescue -d -r3 / dev / hdc archivo de registro de hdimage
ddrescuelog -t YourLog.txt
en otra terminal?
ddrescue
solo puede intentar recuperar problemas físicos y no ayudará en absoluto con los errores lógicos. Para este último, intente fsck
o similar ..
ddrescue
solo si el disco tiene bloques defectuosos, que no serían causados por una "desconexión de cable". Si tiene problemas con el cable, pruebe con un cable diferente ...