Recuperación más rápida de un disco con sectores defectuosos.

13

Recientemente intenté ddpasar de un HDD no saludable a un archivo. He utilizado dd if=/dev/sdb of=somefile bs=4096 conv=noerror,sync. Mi problema fue que ddperdió mucho tiempo cuando se encontró con un bloqueo defectuoso. En mi caso de uso, con mucho gusto pagaría con alguna pérdida de datos para un resultado más rápido.

¿Hay alguna forma de acelerar el manejo de errores? ¿Quizás un ajuste del kernel (que le dice al HDD que haga menos esfuerzo para leer un bloque)? U otro programa?

No en lista
fuente

Respuestas:

29

Primero, para que el software lo use: puede intentar usarlo en ddrescuelugar de dd.

ddrescuetiene un interruptor para hacer solo un número limitado de reintentos. También puede usar un archivo de registro, por lo que registra qué bloques eran malos. Si luego desea realizar más reintentos, puede usar el mismo archivo de registro para ddrescue volver a ejecutarlo con diferentes opciones (como más reintentos) y solo volverá a intentar los bloques necesarios.

Ejemplo de uso:

# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log

Desde la ddrescuepágina de información:

   -n, --no-scrape     
          Skip the scraping phase. Avoids spending a lot of time
          trying to rescue the most difficult parts of the file.

   -r, --retry-passes=<n>
          Exit after given number of retry passes. Defaults to 0.
          -1 means infinity. Every bad sector is tried only once 
          in each pass. To retry bad sectors detected on a previous
          run, you must specify a non-zero number of retry passes.

Aquí hay algunas fuentes adicionales para usar ddrescue:


Editar

En caso de que el disco duro en sí está tomando demasiado tiempo, se puede tratar de activar una función llamada TLER ( T iempo L imited E rror R ECUPERACIÓN) o CCLT ( C ommand C ompletion T iempo L imitación de C). No todos los discos duros lo tienen, pero puede usarlo para limitar el tiempo en el controlador del disco duro. Este enfoque se puede combinar con el uso ddrecue, por supuesto.

Linux tiene una herramienta llamada smartctl(en el smartmontoolspaquete).

Para verificar la configuración actual ("deshabilitado" significa un tiempo ilimitado, que no desea):

# smartctl -l scterc /dev/sda

Para establecerlo en un valor fijo (5.0 segundos en este ejemplo. Establecerlo en 0 deshabilita TLER):

# smartctl -l scterc,50,50 /dev/sda

Fuente para TLER: http://en.wikipedia.org/wiki/TLER

Slizzered
fuente
2
Otra herramienta a tener en cuenta es dc3dd, que es una versión forense de dd
fpmurphy el
oh bien, no conocía esa herramienta!
Slizzered
2
No tenía idea sobre ese TLER, pero realmente me salvó el día. En mi disco, estos estaban deshabilitados y cada vez que ejecutaba ddrescue mi disco se bloqueaba después de unos segundos. Apagado, encendido y siguiente intento. Ahora lo configuro en 2 segundos con el comando que mencionas y nunca se bloquea de nuevo, omite algunos sectores, pero al menos continúa sin interrupciones.
Sven Rieke
2

Tuve buenos resultados de discos que de otro modo serían ilegibles con este software.

http://www.cgsecurity.org/wiki/TestDisk

La siguiente también es una herramienta de recuperación sólida. Puede obtener archivos incluso si su tabla de archivos está rota o si se eliminaron. Es una muy buena herramienta forense. Volca las cosas de una manera realmente desorganizada, pero puede mover todos los datos.

http://www.cgsecurity.org/wiki/PhotoRec

fu9ar
fuente
2

Para obtener una opción rápida y rápida para rescatar el disco, puede usar un archivo de secuencia de comandos sh y ejecutar el archivo con sh. Contiene esta línea, solo repite sudo ddrescuey sleep 3pocas veces más. La suspensión se usa para hacer que la unidad descanse unos segundos:

#! /bin/sh -e 
sudo ddrescue -d -r0 -e +0 -T 1s -n /dev/drivepartition file.img log.logfile 
sleep 3

Las opciones utilizadas anteriormente:

  • -r0 : sin reintentos
  • -e +0: salir en primer error
  • -T 1s: salir con 1 segundo de lectura fallida
  • -d : E / S directa
  • -n : sin raspar

Puede usar -Rdespués de terminar con la opción -Auna vez, que revertirá y eliminará todos los errores de tamaño y comenzará de nuevo hacia atrás. Significa que leerá los errores de manera diferente.

Dealazer
fuente
0

Depende del tamaño de su disco duro y de cuántos bloques defectuosos tenga. Por lo general, me lleva 20 minutos hacer una copia de seguridad con DD a 1 tera HD saludable. Con bloqueos malos, me acabo de recuperar esta mañana, me llevó el doble de tiempo. Estaba teniendo problemas para duplicar (hacer una copia de seguridad de un disco) con unos 30 bloques defectuosos. Lo primero que he hecho es hacer una copia de seguridad de los archivos usando Filezilla normal para hacer una copia de seguridad de todos los datos buenos. Noté que un archivo grande no se copiaba correctamente (deteniéndose en el medio y reiniciando la transferencia). Afortunadamente tengo una copia de seguridad anterior del mismo archivo. Para duplicar el disco, tuve que encontrar los bloques defectuosos en el disco usando este procedimiento:

Primero descubra el disco con problemas que identifica la información de HD usando fdisk -l

Segundo, si digamos que su disco es / dev / sdb, entonces necesita ejecutar el comando badblocks -v / dev / sdb , enumerará todos los bloques defectuosos en la unidad. Por suerte habrá unos pocos. Si no se encuentran bloques defectuosos, entonces los bloques de su unidad están bien y necesitan descubrir algo más. Mi tamaño de bloque es 512, así que uso ese número predeterminado para ejecutar DD

Tercero, cada bloque tiene un tamaño de 512, así que lo que hice es establecer bs = 512

Cada vez que ejecuto DD regularmente como siempre, mis datos, después de los errores, saldrán dañados. Entonces, uso los parámetros como se explica en la página https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html buscar en la parte "Para discos defectuosos".

dd if=/dev/sdb of=/dev/sda bs=512 conv=noerror,sync iflag=fullblock 

Se tomó un tiempo. Cada bloque malo encontrado suena como un golpe en la unidad defectuosa. Se copia bloque por bloque, y a través de todos mis bloques malos hicieron el mismo ruido. La cantidad de veces que hizo un ruido fue porque encontró otro bloque defectuoso y le informa sobre el mensaje de error en la pantalla. Lo que hace 'conv = noerror, sync' es eliminar las lecturas incorrectas con NUL, mientras que 'iflag = fullblock' atiende lecturas cortas, pero mantiene sincronizados sus datos hasta el final. Sin corrupción en absoluto, simplemente no copia los bloques defectuosos y lo llena con NUL vacíos.

Después de que se realizó la copia con DD, simplemente reemplacé ese archivo defectuoso revertiendo Filezilla de una copia de seguridad anterior y todo funcionó bien. Espero que esto sea útil para otros que intentan hacer copias de seguridad de unidades defectuosas.

NOTA: Mis bloques malos estaban bastante cerca uno del otro. Alrededor de 4 bloques a la vez juntos en grupos donde se detectó mal. Si sus bloques están en todo el disco, varios archivos podrían verse afectados. Afortunadamente, en mi caso, un gran archivo de base de datos de 4 gb solo se vio afectado.

Luis H Cabrejo
fuente
1
Si la misma respuesta responde a varias preguntas, existe una buena posibilidad de que las preguntas sean duplicadas. Si es así, es mejor responder una y marcar la otra como un posible duplicado. Eso evita la acumulación de respuestas repetitivas, y vincular las preguntas hace que sea más fácil para los lectores encontrar todas las respuestas.
fixer1234
En realidad no, pero si lo crees, avísame para que borre mi respuesta. He buscado en todas partes la solución correcta, pero encontré una manera de solucionar un problema con mi servidor. Hay varias otras preguntas similares que no respondieron a mi problema. Hasta ahora encontré alrededor de una docena de preguntas similares o relacionadas por todas partes. Acabo de responder un par para escribir mi experiencia y cómo pude resolverla. Avíseme si desea que borre mi respuesta y estaré encantado de hacerlo. Saludos.
Luis H Cabrejo