Comencé ddrescue para recuperar una unidad WD de 2 TB defectuosa de mi NAS. Aunque especifiqué un archivo de registro, desafortunadamente estaba ejecutando ubuntu en modo de prueba desde una unidad flash de arranque y no escribí el archivo de registro en una unidad montada por separado, por lo que cuando se cortó la energía alrededor del 11%, descubrí que había perdido mi archivo de registro.
En el capítulo 14 del manual, parecía que el modo de generación podría funcionar, así que ejecuté:
ddrescue --generate-mode infile outfile mapfile
La unidad que estoy recuperando es una unidad nueva, por lo que tenía la esperanza de que funcionara ya que no había datos antiguos en la unidad.
Ahora estoy ejecutando Ubuntu instalado en un ssd, así que usé el archivo de mapa generado para ejecutar ddrescue nuevamente con:
ddrescue -f -n -r1 /dev/sda /dev/sdb /tmp/ddrescue.log
Esto parece haber funcionado en su mayor parte, ya que el proceso de recuperación se reinició alrededor del 11,5%, justo donde lo dejó. Sin embargo, mi preocupación es que antes del bloqueo, ddrescue había identificado un error de lectura y había mostrado alrededor de 20 MB de bloques no recortados, pero al iniciar el proceso con el nuevo archivo de mapa, había 0 errores de lectura marcados y 0 bloques no recortados. Ahora, después de ejecutarse durante 8 horas, muestra 2 errores y 29696B de bloques no recortados, pero supongo que se trata de nuevos errores de lectura porque ddrescue no analiza las partes de datos antiguas que ya estaban marcadas como rescatadas.
¿Descubrirá ddrescue el error de lectura original en una pasada posterior, o ese error desapareció para siempre y la única manera de encontrar y volver a intentar esos bloques sería comenzar todo desde cero con un nuevo archivo de mapa?
Quiero recuperar tanto como sea posible del disco anterior, si no todo, así que estoy dispuesto a empezar de nuevo si es necesario.
gracias por cualquier ayuda en esto.
Respuesta1
Acerca de --generate-mode
:
En algunos casos, Ddrescue puede generar una copia aproximada
mapfile
desdeinfile
y (parcial) enoutfile
, que es casi tan buena como una exactamapfile
. Lo hace simplemente asumiendo que los sectores que contienen todos ceros no fueron rescatados.
(fuente)
En el primer intento, no se escribió en el sector del disco de destino correspondiente al sector erróneo del disco de origen. De manera similar, no se escribieron los sectores correspondientes a lo que se omitió. Suponiendo que el disco de destino devuelve todos los ceros de los sectores aún no escritos, este último ddrescue --generate-mode
clasificó todos estos fragmentos como "no rescatados".
--generate-mode
no puedo saber si un sector está lleno de ceros porque corresponde a un sector no probado de un disco de origen, no recortado, no raspado o un sector defectuoso; o un sector saludable que ha sido copiado pero que contenía todos ceros. Lo único que sabe es que si hay un sector lleno de ceros, es outfile
posible que no haya sido leído, mientras quetal vezse puede leer. --generate-mode
simplemente clasifica dicho sector como no probado al crear un aproximado mapfile
, por lo que un futuro ddrescue
que realmente use mapfile
intentará (o volverá a intentar) leer el sector.
Lo último ddrescue
puede releer algunos sectores innecesariamente; sectores que se han leído pero que contenían todos ceros y, por lo tanto, parecían --generate-mode
sectores no probados. Esto suele ser un inconveniente menor, si lo hay.
No es necesario reiniciar desde cero, a menos que hubiera sectores distintos de cero en el disco de destino cuando comenzó. Tales sectores harían --generate-mode
creer que son datos rescatados, aunque no lo sean. Cree que su disco de destino (como un disco nuevo) solo contenía ceros. Si tu creencia es correcta entonces no necesitas empezar desde cero.
Si su creencia es correcta, el sector erróneo del primer intento fue clasificado como --generate-mode
"no rescatado" y su versión definitiva (aún en ejecución) ddrescue
intentó o está a punto de intentar leerlo nuevamente.