Quincena de las pifias (parte 2): ddrescue al rescate
Publicado: 22 Jul 2022, 17:56
Y, como las desgracias no vienen solas, uno de mis discos duros está agonizando. La víctima es un WD Blue de 1Tb, y el historial reciente es el siguiente:
- Hace unos días, el equipo se quedo "colgado" mientras lo apagaba. En principio lo atribuí a que tenía enchufado un pendrive no muy de fiar, y acabé apagándolo de botonazo.
- Habitualmente hago copias de seguridad de algunos datos usando Syncback Pro y ROBOCOPY, cuando estaba haciendo una de esas copias ví que ROBOCOPY estaba diciendo que había errores de lectura.
- Ahí ya me saltaron las alertas y utilicé Crystal Disk Info para ver los atributos SMART... el disco tenía 3 sectores pendientes de relocalizar.
- Al día siguiente, Windows iba de pena. El (según ví en Linux) no solo eran sectores "averiados", sino que el disco de vez en cuando se "desconecta" del bus (¿hace un reset?) lo que podría indicar problemas en la electrónica.
Así que ahora esto se ha convertido en una carrera para recuperar los datos con el mínimo daño posible. Las buenas noticias es que tengo un disco duro WD de 1Tb con exactamente el mismo número de bloques; las malas es que es un WD Green (=leeeeeento) algo viejo. Así que voy a seguir este plan:
Paso 1:
Es una variación de lo expuesto en este hilo. Utilizando mi Debian 11 (que no está en ese disco), utilizaré este comando:
Básicamente voy a copiar de disco a disco directamente. Como voy a copiar a un dispositivo (en vez de generar a una imagen), necesito utilizar el switch -f. Además, voy a hacer que reintente la lectura 25 veces (switch -r25) ya que asumo que se va a generar algún error debido a las "desconexiones" aleatorias del disco y de esta manera quizás pueda recuperar esos errores. Por último, el tercer parámetro me va a generar un "mapa" de los trozos erróneos del disco, para el paso 2. Como nota, no voy a utilizar el parámetro -b (aunque debería definir un bloque de 4K) ya que el programa del paso 2 no está bien probado con sectores de 4K.
No hay que olvidar que -r25 no significa que haga 25 pasadas completas, cada pasada se hace solo para intentar reconstruir los datos no leídos de pasadas previas. Por ello, aunque la primera pasada parece que me va a durar unas 5 horas, espero que las otras 24 no lleven más de media hora entre todas.
Además, otra de las cosas buenas de ddrescue es que puedes interrumpirlo en cualquier momento usando Ctrl+C... si luego repites exactamente la misma orden seguirá dónde lo dejó (por eso tengo metida la orden que estoy utilizando en un fichero .sh).
Paso 2:
Una vez copiado el disco y generado el mapa, voy a utilizar ddrutility para saber qué tengo entre manos. Afortunadamente este paquete está disponible en los repositorios de Debian, lo cual es un gran alivio. Es un alivio porque no compila bien en las últimas versiones de GCC y no está en desarrollo... además, al ser de Debian está parcheado para funcionar correctamente (cierto script no me ha funcionado bien cuando he compilado el paquete a manija). En fin, el plan es utilizar este comando:
Este comando me genera una salida que lista los sectores ilegibles relacionados con los ficheros que los contienen. De esta manera tengo una idea precisa de qué es lo que tengo corrompido.
Paso 3:
Poner el disco "rescatado" en el sistema para que al menos Windows sea operativo. Luego, borraré los ficheros corrompidos para poder sustituirlos por copias correctas. Además, recortaré el tamaño de partición unos 100 megas para que cuando me llegue el disco nuevo que he pedido no haya problemas al clonarlo. He mirado el modelo en la ficha de la tienda, y me he asegurado que sea un modelo que no usa SMR... habrá que ver si me sirven ese mismo modelo o tengo que devolverlo.
Paso 4:
Machacar el contenido del disco duro averiado antes de decidir su futuro. No sé si tirarlo directamente al punto limpio, donarlo a alguien que quiera usarlo conociendo sus defectos o desmantelarlo (y quedarme los imanes y hacer un reloj con los platos).
- Hace unos días, el equipo se quedo "colgado" mientras lo apagaba. En principio lo atribuí a que tenía enchufado un pendrive no muy de fiar, y acabé apagándolo de botonazo.
- Habitualmente hago copias de seguridad de algunos datos usando Syncback Pro y ROBOCOPY, cuando estaba haciendo una de esas copias ví que ROBOCOPY estaba diciendo que había errores de lectura.
- Ahí ya me saltaron las alertas y utilicé Crystal Disk Info para ver los atributos SMART... el disco tenía 3 sectores pendientes de relocalizar.
- Al día siguiente, Windows iba de pena. El (según ví en Linux) no solo eran sectores "averiados", sino que el disco de vez en cuando se "desconecta" del bus (¿hace un reset?) lo que podría indicar problemas en la electrónica.
Así que ahora esto se ha convertido en una carrera para recuperar los datos con el mínimo daño posible. Las buenas noticias es que tengo un disco duro WD de 1Tb con exactamente el mismo número de bloques; las malas es que es un WD Green (=leeeeeento) algo viejo. Así que voy a seguir este plan:
Paso 1:
Es una variación de lo expuesto en este hilo. Utilizando mi Debian 11 (que no está en ese disco), utilizaré este comando:
Código: Seleccionar todo
ddrescue -f -r25 /dev/sdb /dev/sdc map_sdb.log
Básicamente voy a copiar de disco a disco directamente. Como voy a copiar a un dispositivo (en vez de generar a una imagen), necesito utilizar el switch -f. Además, voy a hacer que reintente la lectura 25 veces (switch -r25) ya que asumo que se va a generar algún error debido a las "desconexiones" aleatorias del disco y de esta manera quizás pueda recuperar esos errores. Por último, el tercer parámetro me va a generar un "mapa" de los trozos erróneos del disco, para el paso 2. Como nota, no voy a utilizar el parámetro -b (aunque debería definir un bloque de 4K) ya que el programa del paso 2 no está bien probado con sectores de 4K.
No hay que olvidar que -r25 no significa que haga 25 pasadas completas, cada pasada se hace solo para intentar reconstruir los datos no leídos de pasadas previas. Por ello, aunque la primera pasada parece que me va a durar unas 5 horas, espero que las otras 24 no lleven más de media hora entre todas.
Además, otra de las cosas buenas de ddrescue es que puedes interrumpirlo en cualquier momento usando Ctrl+C... si luego repites exactamente la misma orden seguirá dónde lo dejó (por eso tengo metida la orden que estoy utilizando en un fichero .sh).
Paso 2:
Una vez copiado el disco y generado el mapa, voy a utilizar ddrutility para saber qué tengo entre manos. Afortunadamente este paquete está disponible en los repositorios de Debian, lo cual es un gran alivio. Es un alivio porque no compila bien en las últimas versiones de GCC y no está en desarrollo... además, al ser de Debian está parcheado para funcionar correctamente (cierto script no me ha funcionado bien cuando he compilado el paquete a manija). En fin, el plan es utilizar este comando:
Código: Seleccionar todo
ddru_findbad /dev/sdb map_sdb.log
Este comando me genera una salida que lista los sectores ilegibles relacionados con los ficheros que los contienen. De esta manera tengo una idea precisa de qué es lo que tengo corrompido.
Paso 3:
Poner el disco "rescatado" en el sistema para que al menos Windows sea operativo. Luego, borraré los ficheros corrompidos para poder sustituirlos por copias correctas. Además, recortaré el tamaño de partición unos 100 megas para que cuando me llegue el disco nuevo que he pedido no haya problemas al clonarlo. He mirado el modelo en la ficha de la tienda, y me he asegurado que sea un modelo que no usa SMR... habrá que ver si me sirven ese mismo modelo o tengo que devolverlo.
Paso 4:
Machacar el contenido del disco duro averiado antes de decidir su futuro. No sé si tirarlo directamente al punto limpio, donarlo a alguien que quiera usarlo conociendo sus defectos o desmantelarlo (y quedarme los imanes y hacer un reloj con los platos).