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
Author: Luis Garcia
Date: Thu, 26 Oct 2006 19:16
Date: Thu, 26 Oct 2006 19:16
128 lines
7056 bytes
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