Recuperando la información de un disco con fallo hardware


Pues que me ha llegado un marrón consistente en recuperar la información de un disco que se había suicidado.
La BIOS parece que llevaba un mes diciendo que el disco se iba a suicidar, pero ¿para que hacer copia de todo si total ya está el informático para solucionar todo?

Tipos de fallos de disco
Cuando se estropea un disco físicamente pueden ser dos cosas (difícil es que se den las dos a la vez).

La primera es fallo de su electrónica por un pico de luz (apagones o similares) o que la fuente se haya estropeado y se haya cargado todo lo que pillaba por delante. En ese caso se busca otro disco IGUAL, se cambia la electrónica y ya está solucionado.
Se suele saber que este fallo porque la BIOS ni siquiera detecta el disco o te escribe que el modelo del disco es una cadena de caracteres raros o cosas raras de ese estilo.

La segunda es la hardware y también hay varios casos distintos.
Se atasca la cabeza del disco.
Vale, detecta el disco pero tarda en pasar de la BIOS y si le acercas la oreja no oyes el riki riki de la cabeza cuando en teoría debería está leyendo. Lo que ha pasado es que se ha atascado el mecanismo que mueve la cabeza del disco y claro, así es un pelín difícil leer nada.
La solución es darle un buen golpe. Si, ya se que puede parecer una broma pero no lo es. No sirve cualquier tipo de golpe.
Como se deduce de esta imagen

se trata de darle un golpe lo más perpendicular que se pueda a las cabezas del disco con el disco apagado. Debería ser golpeado sobre la zona de abajo, que la tapa es muy "blanda", por un lateral y sobre el lateral de una mesa. En muchos casos con esto debería bastar.

No arranca el güindous porque dice que no encuentra nosequé fichero y sabemos que es fallo hardware porque el disco hace un ruido muy feo al arrancar como de "clack clack".
Probablemente el disco esté teniendo problemas para acceder a la información.
En este apartado es en el que me encuentro. Hay más, posibilidades pero no me apetece escribir mucho más. ;-)
Lo primero que haremos será una copia del disco o mejor de las particiones del disco. Para ello lo primero es tomar el disco y pincharlo en una máquina con GNU/linux (en mi caso Ubuntu).
Hacemos un fdisk -l /dev/sda para ver que particiones tiene. Si esto funciona la cosa pinta bien. :-)

jmferrerm@guerra:~$ sudo fdisk -l /dev/sda
Password:

Disco /dev/sda: 40.0 GB, 40020664320 bytes
255 cabezas, 63 sectores/pista, 4865 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Disposit. Inicio Comienzo Fin Bloques Id Sistema
/dev/sda1 * 1 4865 39078081 c W95 FAT32 (LBA)
jmferrerm@guerra:~$

Hacemos una imagen de la partición o particiones donde están los datos. Si el disco está defectuoso no nos funcionará un dd if=/dev/sda1 of=sda1.img porque al dar el primer fallo parará la copia. Tendremos que usar algo como ddrescue /dev/sda1 sda1.img para hacer la imagen de cada partición en un archivo. Si la partición es de 40GB como es mi caso, necesitarás una partición en tu PC con al menos 40GB de espacio lire pero es recomendable tener una partición del doble de tamaño necesario para poder cacharrear siempre sobre una copia de la copia del disco duro.
Lo siguiente será desenchufar el disco duro y guardarlo seguro en un cajón.

La partición era una vfat así que la intentamos montar, a ver que pasa.
jmferrerm@guerra:~$ sudo mount -o loop -t vfat /media/LACIE/sda1.img /mnt/mnt
mount: /dev/loop0: no se puede leer el superbloque
jmferrerm@guerra:~$

Lo bueno de esto es que FAT tiene una copia del superbloque en algún lugar de la partición y como estamos usando una imagen, podemos volver a escribir bien el superbloque sin miedo a errores de escritura.
Como es una vfat, pues:
root@guerra:/home/jmferrerm# fsck.vfat /media/LACIE/sda1.img
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
There are differences between boot sector and its backup.
Differences: (offset:original/backup)
65:03/00
1) Copy original to backup
2) Copy backup to original
3) No action
?

y como no encuentra el superbloque hacemos una copia el backup al original.
Luego le decimos que si a todo para que recupere la máxima cantidad de archivos posible y listo; ya tenemos la imagen con toda la información restaurada.
Ahora la podemos montar con sudo mount -o loop -t vfat /media/LACIE/sda1.img /mnt/mnt y podemos acceder a toda la información de dentro. A estas alturas uno ya respira más tranquilo. ;-)

Pero vamos a intentar (que no conseguir) hacerlo mejor todavía: vamos a restaurar el SO en un disco nuevo.
Si el SO fuera un no-güindous bastaría con copiar todos los archivos con cp -a y restaurar el arranque. Como es un güindous pues creamos una partición en un disco nuevo con el mismo número de bloques que la original y volcamos la imagen con dd if=sda1.img of=/dev/sdb1. Esto hay que hacerlo así porque güindous tiene que tener cierta información en un lugar fijo del disco y si lo cambias de sitio se lía y no arranca.
Si el disco es exactamente igual esta operación restaura el güindous perfectamente pero en mi caso intento restaurar un disco de 30GB sobre uno de 250GB así que ... va a ser que no.

Bueno, pues se hacen dos particiones, se instala en la primera el güindous y se copian todos los datos en la segunda. Ahora que se apañen para buscar los datos que les interesa y si la próxima vez no quieren tener tantos problemas que no usen güindous.

Actualización 20070719:
Parece que a la hora de montar la partición no me reconocía las tildes. Para que las vea hay que montarla con la opción "utf8". Al final he usado el siguiente comando:
mount -t vfat -o utf8,iocharset=iso8859-15,codepage=850,loop /media/LACIE/sda1.img /mnt/mnt

Cuando ya se veían todas las tildes bien he probado a copiar mediante winscp y desde el güindous se volvían a ver mal.
Iba a tocar /etc/samba/smb.conf para compartir el directorio y verlo en el güindous peeero pensé ¿no tendrá algo Ubuntu?