Txepo    
 
"El blog de txepo"  
 
   Portada

   Buscador
»
   
    Categorías
  scripting
  vida
 
    Anteriores
  Profesional, muy profesional
  Recuperació de partició perduda
  Welcome to doblog!

Recuperació de partició perduda
  scripting  
Wed, 07 Jun 2006 16:37:21 +0200

Bueno, espero que no us passi mai, perdre la taula de particions del vostre ordinador!!! Quina putada!!!
Sols que hi ha eines amb GNU/Linux útils per tal efecte i si no n'hi ha prou, pues teniu altres utilitats per fer-ho... (losetup,...).

Hi hauna eina molt útil, anomenada gpart, normalment hi és a les distribucions del CD Live de Knoppix i demes...
Teclejant

 Console:
gpart /dev/hda

s'obté informació de la possible taula de particions que té el disc. Si la voleu aplicar, llavors:

 Console:
gpart -W /dev/hda /dev/hda


Això em va permetre recuperar una de les particions de dades que no trobava 55 GBytes...

Una altra partició que no trobava (en concret una ext3 on tenia el home de GNU/Linux), vaig intentar modificant amb fdisk el sectors on monta cada partició, vaig intentar buscar on era el MBR i res...

La única solució que vaig veure possible per les meves possibilitats va ser fer un script que intentés montar cata 512 bytes com a inici de la partició i si ho feia, parava el intent de montatges i ja tenia la partició montada i recuperada.

Primer vaig crear una imatge de la partició suficientment gran per davant i radere, on podria estar la partició en busqueda.

 Console:
dd if=/dev/hda5 of=/mnt/hardiskextern/hda5.img


Per aixó, necessitava molt espai i vaig connectar un disc extern on copiar la imatge... ;)

Ara havia d'intentar montar la imatge en algun dispositiu i dient-li a quin byte intentava montar. Com la instrucció dd fa lectures de 512 bytes o 1024 bytes, no té sentit intentar montar cada byte, sinó amb múltiples de 512 n'hi ha suficient. Vaig intentar fer un script amb tcsh, però no maneja integers molt grans. Llavors vaig fer amb perl amb l'assignació de bigbiginteger a la variable que fa de punter...

 Console:
#!/usr/bin/perl

use Math::BigInt;

$i=0;
$final=5272372224;
$j=$final-$i;
print $i,"\n";
print $final,"\n";
print $j,"\n";

while ($i < $final) {
`losetup -d /dev/loop1`;
`losetup -o $i /dev/loop1 /media/stick/splited/hda5bis.img`;
$returncode = `mount -t ext3 /dev/loop1 /mnt/tmp 2>&1`;
if ( !(index ( $returncode,'mount: wrong fs type, bad option, bad superblock on /dev/loop1,')+1) )
{
print $i,"\n";
exit;
}
$i=$i+512;
print $i,"\n";
}


amb losetup assignes un dispositiu amb el flag -d, amb el flag -o poses l'offset de bytes on intentes montar i amb mount montes si hi ha sort, després una comparació i ja està.

Es un script chapucero, però funciona... ;)

txepot
,  


Contactar
login
 

   Enlaces
  Pancake's Blog
 
MiniLuna
CyborgLogo
Wikipedia

RSS