Article View: microsoft.public.es.vb
Article #3Usando Linux para arreglar un USB roto
From: 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
Technical Details
Message-ID:
<eI2STOT#GHA.4524@TK2MSFTNGP04.phx.gbl>Path:
arc1-ca.pugleaf.net!g2news2.google.com!news4.google.com!news2.volia.net!newsfeed01.sul.t-online.de!t-online.de!news.tiscali.de!uio.no!newsfeed.cw.net!cw.net!news-FFM2.ecrc.de!TK2MSFTFEEDS01.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSFTNGP04.phx.gblShow Full Headers
Complete Article Headers
X-Google-Thread: 10127e,e3b77c517566509,start X-Google-Thread: 109233,e3b77c517566509,start X-Google-Thread: 10b159,e3b77c517566509,start X-Google-Thread: 10e463,e3b77c517566509,start X-Google-Thread: f9ea8,e3b77c517566509,start X-Google-Thread: 11353e,e3b77c517566509,start X-Google-Thread: 105e57,e3b77c517566509,start X-Google-Attributes: gid10127e,gid109233,gid10b159,gid10e463,gidf9ea8,gid11353e,gid105e57,public X-Google-Language: SPANISH,ASCII From: "Luis Garcia" <luis_siaz@redestb.es> Subject: Usando Linux para arreglar un USB roto Date: Thu, 26 Oct 2006 21:16:27 +0200 Lines: 132 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.2869 X-RFC2646: Format=Flowed; Original X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2962 Message-ID: <eI2STOT#GHA.4524@TK2MSFTNGP04.phx.gbl> Newsgroups: microsoft.public.es.vb,microsoft.public.es.dotnet.vb,microsoft.public.es.windowsxp,microsoft.public.es.officexp,chile.comp.pc,microsoft.public.es.access,microsoft.public.es.win2000 NNTP-Posting-Host: 24.244.147.200 Path: arc1-ca.pugleaf.net!g2news2.google.com!news4.google.com!news2.volia.net!newsfeed01.sul.t-online.de!t-online.de!news.tiscali.de!uio.no!newsfeed.cw.net!cw.net!news-FFM2.ecrc.de!TK2MSFTFEEDS01.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSFTNGP04.phx.gbl