Cuando un disco duro falla es posible que pasen dos cosas: se ha roto para siempre y no volverá a funcionar nunca más, o se han vuelto ilegibles algunos sectores y el firmware del disco puede asignarlos a una lista negra y seguir funcionando con normalidad.
Si ocurre lo primero, el disco duro acabará en el reciclado. Con lo segundo tenemos suerte y es posible forzar al disco a que intente escribir en esos sectores y así el microcontrolador del mismo se dará cuenta de lo que ocurre y los reasignará a algún lugar “sano”.
Lo primero es saber la cantidad de sectores afectados. Para ello lo mejor es arrancar con un live-cd y ejecutar este comando sobre el disco sospechoso/defectuoso:
sudo badblocks -b 1024 /dev/sdb
57373756
57373757
57373758
Si el resultado es una lista más o menos corta de números estamos de suerte y podemos realizar lo dicho anteriormente. Sino… mejor vamos comprando otro disco duro y sacando las copias de seguridad.
Ahora que sabemos los sectores afectados escribimos sobre ellos cualquier tipo de datos (en este ejemplo ceros). Evidentemente al hacer esto estamos perdiendo algunos datos, y sin saber cuales en concreto, pero por lo menos podremos acceder luego al resto de información contenida en el disco.
sudo dd if=/dev/zero of=/dev/sdb bs=1024 count=3 seek=57373756 oflag=direct
3+0 registros de entrada
3+0 registros de salida
3072 bytes (3,0 kB) copiados, 0,000918141 s, 3,3 MB/s
Y por último comprobamos que el disco ha solucionado el problema intentando volver a leer los sectores afectados:
sudo dd if=/dev/sdb of=/dev/null bs=1024 count=3 skip=57373756
3+0 registros de entrada
3+0 registros de salida
3072 bytes (3,0 kB) copiados, 0,000918141 s, 3,3 MB/s
Y si todo ha ido bien, ¡ya podemos seguir utilizando nuestro disco duro y leer nuestros datos!
Imagen: Alpha six