🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: microsoft.public.es.vb
1 messages
1 total messages Started by Luis Garcia Thu, 26 Oct 2006 19:16
Usando Linux para arreglar un USB roto
#3
Author: Luis Garcia
Date: Thu, 26 Oct 2006 19:16
128 lines
7056 bytes
Un amigo m�o me pregunt� si pod�a recuperar alguna informaci�n que ten�a
muy importante en un USB que no funcionaba bajo Windows (por supuesto,
�d�nde lo iba a usar si no?). El caso es que lo llev� a varias tiendas de
inform�tica donde incluso lo probaron con un sistema operativo de gur�s
llamado Linux y nada, no consiguieron sacar nada de �l.

Sin embargo, el USB se pod�a leer entero, por lo que pens� que algo podr�a
sacarle punta. Primero saqu� toda la informaci�n que pude del USB:

dd if=/dev/sda of=fichero

Utilizando hexdump u od me di cuenta de que los primeros 0�20000 bytes
estaban puestos a 0xFF, por lo que parec�a que el USB hab�a fallado justo
por donde no deber�an fallar: la tabla de partici�n, sector boot y FAT. Un
disco as� es casi imposible de recuperar, salvo quiz� si puedes recuperar
una de las dos FAT que lleva el disco. Me puse a buscar a mano y vi que la
primera FAT estaba incompleta pero que la segunda podr�a estar intacta:

00000000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
|................|
*
00020000  01 df 02 df 03 df 04 df  05 df 06 df 07 df 08 df
|................|
00020010  09 df 0a df 0b df 0c df  0d df 0e df 0f df 10 df
|................|
00020020  11 df 12 df 13 df 14 df  15 df 16 df 17 df 18 df
|................|

Buscando la cadena 01 df 02 df hacia adelante descubr� que se repet�a: la
segunda copia de la FAT. Adem�s, la diferencia entre las dos apariciones
era de 0�1F400 bytes. Para localizar d�nde empieza, se puede buscar la
signatura f8 ff ff ff. Y la encontr� en 0�23600. Haciendo las restas,
supuse entonces que la primera FAT empezaba en 0�23600 - 0�1F400 = 0�4200.

As� que en principio, copiando los sectores de la FAT segunda a la primera
(250 sectores de 512 bytes en total) puedo reconstruir la FAT. Hago una
copia del fichero en el fichero.bak y utilizo dd:

dd if=fichero.bak of=fichero bs=512 seek=33 skip=283 count=250
conv=nocreat,notrunc

Esto es, copiar desde el sector 283 (la posici�n 0�23600) hacia el sector
33 (posici�n 0�4200) 250 sectores, que es el tama�o de la FAT. Esto nos da
informaci�n de cu�ntos sectores reservados va a tener inicialmente el
sistema de ficheros FAT16.

Ahora bien, �cu�ntos elementos tiene el directorio ra�z? Si record�is el
formato FAT, existen una serie de sectores reservados al principio, las dos
FATs (de todo ello sabemos el tama�o) y el directorio ra�z, cuyo tama�o
tambi�n est� especificado en el sector de arranque. �Cu�nto es ese tama�o?
No se sab�a. Hab�a que averiguarlo. Al irme al directorio ra�z encuentro
esto al principio:

00042a00  42 4c 4f 51 55 45 53 20  20 20 20 11 00 a5 2e 56  |BLOQUES
....V|
00042a10  f1 34 54 35 00 00 2f 56  f1 34 02 00 00 00 00 00
|.4T5../V.4......|
00042a20  e5 4f 4f 54 45 58 20 20  4c 4f 47 20 00 17 87 81  |.OOTEX  LOG
....|
00042a30  54 35 58 35 00 00 88 81  54 35 d7 00 50 06 00 00
|T5X5....T5..P...|
00042a40  e5 4f 4d 45 44 4f 52 20  44 57 4c 02 10 2b f0 a3  |.OMEDOR
DWL..+..|
00042a50  57 35 57 35 00 00 24 a6  57 35 1d 8b 41 00 00 00
|W5W5..$.W5..A...|
00042a60  44 45 54 41 4c 4c 45 53  20 20 20 10 00 4f 30 56  |DETALLES
..O0V|
00042a70  f1 34 1f 35 00 00 31 56  f1 34 25 02 00 00 00 00
|.4.5..1V.4%.....|

Perfecto, entradas de directorio. Encuentro cu�l es la �ltima y cuento.
Hice esto y no funcion�. El problema es que justo despu�s del directorio
ra�z hab�a otro directorio, y no sab�a exactamente d�nde terminaba.

As� que se me ocurri� la idea de buscar los ficheros especiales "." y "..".
S�lo un subdirectorio los tendr�a, lo que me dar�a la �ltima entrada del
directorio ra�z. �Bingo!:

00048000  2e 20 20 20 20 20 20 20  20 20 20 10 00 a5 2e 56  |.
....V|
00048010  f1 34 f1 34 00 00 2f 56  f1 34 02 00 00 00 00 00
|.4.4../V.4......|
00048020  2e 2e 20 20 20 20 20 20  20 20 20 10 00 a5 2e 56  |..
....V|
00048030  f1 34 f1 34 00 00 2f 56  f1 34 00 00 00 00 00 00
|.4.4../V.4......|

As� que el directorio ra�z tiene de tama�o 0�42a00 - 0�48000 en entradas de
32 bytes, esto es, 688 entradas. Ya tenemos todos los datos.
Como necesitaba un sector de arranque para la partici�n, cre� un fichero
del mismo tama�o que el l�piz usb:

dd if=/dev/zero of=valido bs=512 count=1024000

Y despu�s lo formate� con los datos que hemos obtenido:

mkfs.msdos -s 16 -R 33  -r 688 valido

16 sectores por pista, 33 sectores reservados y 688 entradas en el
directorio ra�z. Finalmente tengo que copiar el sector de arranque, que
est� en los primeros 512 bytes.

dd if=valido of=fichero bs=512 count=1 conv=nocreat,notrunc

Ya puedo montar el fichero:

mount fichero /mnt -o loop

Despu�s de hacer algunas pruebas para ajustar exactamente los par�metros,
he consegido recuperar mucha de la informaci�n del l�piz USB. Por supuesto
alguna se ha perdido, porque estos fallos normalmente se producen por
fallos en los bancos de memoria del USB, pero algo es algo.

Como informaci�n, decir que he probado varias utilidades para recuperar
sistemas de ficheros y ninguna ha funcionado. No eran capaces de ver todas
estas sutilezas. Esto me trae a la mente dos cosas, b�sicamente:

Ser�a interesante ofrecer estos servicios a las empresas o personas que lo
solicitaran.

Linux es una maravilla  y ha permitido recuperar informaci�n de un USB que,
seg�n Windows y otras tiendas especializadas en Inform�tica, para lo �nico
que val�a era para tirarlo a la basura.

Todo esto est� basado en un art�culo de Linux Journal.


http://neuromancer.inf.um.es/blog/?p=764
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads