Tuve un bloqueo de disco duro de 500 GB hace unos 5 días. Utilicé ddrescue
la partición importante hace unos días, y ha estado en "Recorte de bloques fallidos" durante casi 2 días.
Comando original:
ddrescue -n /dev/rdisk1s2 /Volumes/OSXBackup/rdisk1s2.img /Volumes/OSXBackup/rdisk1s2.log
Salida de corriente:
Initial status (read from logfile)
rescued: 248992 MB, errsize: 1007 MB, errors: 15867
Current status
rescued: 249021 MB, errsize: 978 MB, current rate: 17408 B/s
ipos: 44405 MB, errors: 15866, average rate: 2784 B/s
opos: 44405 MB, time from last successful read: 0 s
Trimming failed blocks...
El comando original usó el ddrescue -n
parámetro, y he reiniciado el proceso varias veces según sea necesario (y parecía que retomaba exactamente donde lo dejó cada vez).
¿Hay alguna forma de acelerar este proceso?
Editar: Seis horas después, este es el estado actual:
rescued: 249079 MB, errsize: 920 MB, current rate: 409 B/s
ipos: 39908 MB, errors: 15851, average rate: 2698 B/s
opos: 39908 MB, time from last successful read: 0 s
Trimming failed blocks...
Parece que mientras los "errores" están haciendo una cuenta atrás insoportablemente lenta, ipos / opos está haciendo una cuenta regresiva de la cantidad de datos que tiene que pasar, y parece estar funcionando a una velocidad de 750MB / hora. A este ritmo, se completará en ~ 53 horas. Yikes
Edición n. ° 2: dos días después, aún ejecutándose. Sin embargo, hay esperanza. Se ha pasado la porción "Recorte de bloques fallidos" y pasa a la siguiente fase "División de bloques fallidos". En todo caso, lo que debería evitarse al ver esta pregunta es que esto definitivamente lleva mucho tiempo cuando se trata de una buena cantidad de datos / errores. Mi única esperanza es que pueda recuperar con éxito algunos datos importantes cuando todo esté dicho y hecho.
rescued: 249311 MB, errsize: 688 MB, current rate: 0 B/s
ipos: 26727 MB, errors: 15905, average rate: 1331 B/s
opos: 26727 MB, time from last successful read: 20 s
Splitting failed blocks...
fuente
-M
si los reinicios de esta mañana y la actualización de dist hicieron algún tipo de desastre)Respuestas:
Observé que usar la
-n
opción (sin división) junto con-r 1
(reintentar una vez) y establecer-c
(tamaño del clúster) en un valor menor puede ayudar.Mi impresión es que el paso de división es muy lento ya que
ddrescue
divide y divide nuevamente las áreas dañadas. Esto lleva mucho tiempo porqueddrescue
intenta restaurar porciones muy pequeñas de datos. Por lo tanto, yo prefiero usar-n
(sin-split) junto con-c 64
,-c 32
,-c 16
, asoProbablemente el
-n
(sin división) siempre se debe usar para un primer pase en direcciones hacia adelante y hacia atrás. Parece que cuanto más se dividieron los datos, más lenta será la clonación, aunque no estoy seguro de esto. Supongo que cuanto más grandes son las áreas no tratadas, mejor cuando se ejecutaddrescue
nuevamente, porque los sectores más contiguos son para clonar.Como estoy usando un archivo de registro, no dudo en cancelar el comando con Ctrl+ Ccuando la velocidad de lectura de datos se reduce a dos.
También uso el modo
-R
(Reversa) y después de una primera pasada, a menudo me da velocidades más altas al leer hacia atrás que hacia adelante.No me queda claro cómo
-r N
se manejan los sectores ya reintentados ( ) cuando se ejecuta elddrescue
comando nuevamente, especialmente cuando se alternan los-R
comandos de clonación hacia adelante (predeterminado) e inverso ( ). No estoy seguro de si la cantidad de veces que se probaron se almacena en el archivo de registro y probablemente el trabajo se vuelva a hacer inútil.Probablemente la
-i
bandera (posición de entrada) también puede ayudar a acelerar las cosas.fuente
Puede ser muy difícil ver el progreso de
ddrescue
, pero hay otro comando incluido llamadoddrescuelog
.Un comando simple
ddrescuelog -t YourLog.txt
generará estas buenas informaciones:Incluso puedes usarlo mientras se
ddrescue
está ejecutando ...fuente
errsize: 289420 MB, errors: 34926 ( 7.23%) non-trimmed: 288130 MB, in 105407 area(s) ( 7.20%) non-split: 1243 MB, in 185 area(s) ( 0.03%) bad-sector: 47490 kB, in 92728 area(s) ( 0.00%)
(... ¡pero muchas gracias por el comando!Una forma más de monitorear el progreso de ddrescue (al menos en Linux) es mediante el uso de strace.
Primero, encuentre el PID para el proceso ddrescue usando "ps aux | grep ddrescue"
Luego ejecuta "strace" contra ese proceso. Verás algo como:
...y así. El resultado es rápido y feo, así que luego lo canalizo a través de "grep" para filtrar las cosas que me interesan:
En ese ejemplo, el "1702212676608" equivale a "la cantidad de datos que aún deben procesarse en ese disco de 2 Tb que está tratando de recuperar". (Sí. Ay.) Ddrescue está escupiendo un número similar, aunque como "1720 GB", en su salida de pantalla.
strace le brinda un flujo de datos de granularidad MUCHO más alto para que lo examine; Es una forma más de evaluar la velocidad de ddrescue y estimar una fecha de finalización.
Ejecutarlo constantemente es probablemente un mal plan ya que competiría con ddrescue por el tiempo de CPU. He decidido ponerlo en "cabeza" para poder tomar los primeros 10 valores:
Espero que esto ayude a alguien.
fuente
strace -e lseek …
para eso, aunquepv -d <pid>
podría ser más bonito.Si su objetivo es obtener la mayor parte de los datos intactos, entonces podría acelerar su extracción. Pero si realmente desea rescatar la mayor cantidad de datos posible, entonces dejar que ddrecue mordisquee en todos y cada uno es el camino a seguir.
fuente
He descubierto que jugar con el parámetro -K puede acelerar las cosas. Por lo que he visto si ddrescue encuentra un error cuando se ejecuta con la opción -n intenta saltar una cantidad fija de sectores. Si aún no puede leerlo, salta el doble del tamaño. Si tiene grandes áreas dañadas, puede indicar un gran valor de K (por ejemplo, 100M) y, por lo tanto, saltar sobre un error será mayor la primera vez y será más fácil evitar áreas problemáticas rápidamente en el primer pasado.
Por cierto, hay una maravillosa aplicación gráfica para analizar el registro.
http://sourceforge.net/projects/ddrescueview/
fuente
¿Cuál es el sistema de archivos del disco duro donde guarda la imagen de rescate y el archivo de registro? Acabo de experimentar que rescatar un disco duro interno de 500 GB (conectado a través de SATA) en una computadora portátil con Linux Mint desde un dispositivo USB, guardar la imagen de rescate y el archivo de registro en un
exFat
disco duro USB formateado, estaba comenzando bastante lento (1-2 MB / seg), pero después de alrededor de 250 GB solo se arrastraba a <100 KB / seg. Parecía ser más lento a medida que crecía el archivo de imagen de rescate.Luego moví la imagen de rescate y el archivo de registro a otro lugar temporal, volví a formatear el disco duro USB con el
ext4
sistema de archivos, moví los archivos nuevamente y reanudé el proceso de ddrescue, y ahora se ejecuta con 1-20MB / seg nuevamente (fluctuante pero alrededor de 7 MB / seg en promedio)Parece
exFat
que no juega muy bien con archivos muy grandes (varios cientos de gigabytes).fuente
Para una opción más rápida y rápida para rescatar el disco, puede usar un archivo de secuencia de comandos sh y ejecutar el archivo con "sh filename.sh". Contiene esta línea que se muestra, solo repita "sudo ddrescue" y "sleep 3" unas pocas veces más, la suspensión se usa para que la unidad descanse unos segundos, puede ser buena por algunas razones:
El -r0 no tiene respuestas. -E +0 es para salir en 1 error. El -T 1s sale con 1 segundo de lectura fallida. Hay opciones que se pueden usar como -d para directo y -n sin raspado que puede acelerar.
Puede usar -R después de finalizar con la opción -A una vez, que revertirá y eliminará todos los errores y comenzará de nuevo hacia atrás. Significa que leerá los errores de manera diferente.
fuente
dd_rhelp es un script de shell que usa dd_rescue "[...] en todo el disco, PERO intentará reunir los datos máximos válidos antes de intentar durante siglos en grupos de sectores defectuosos".
es bastante antiguo (2012) pero aún funciona. No he probado ddrescue todavía.
fuente